Sau khi khách hàng gửi đơn đặt hàng, bạn có thể thông báo cho khách hàng về những thay đổi đối với đơn đặt hàng bằng cách gửi thông báo cập nhật đơn đặt hàng tới Google. Sau đó, Google sẽ chuyển tiếp nhắn tin cho khách hàng trong giao diện người dùng đặt hàng.
Sau đây là một số lý do phổ biến dẫn đến việc gửi thông tin cập nhật về đơn đặt hàng:
- Thời gian thực hiện ước tính cho đơn đặt hàng sẽ có sẵn hoặc thay đổi.
- Trạng thái của đơn đặt hàng sẽ thay đổi.
- Không thể thực hiện đơn đặt hàng nữa.
- Giá của một món trong thực đơn có trong đơn đặt hàng đã thay đổi.
- Khách hàng có một cách mới để quản lý đơn đặt hàng của mình, chẳng hạn như dịch vụ hỗ trợ khách hàng hoặc số điện thoại của nhà hàng.
- Biên lai cho đơn đặt hàng sẽ có sẵn.
Ví dụ: ví dụ sau sử dụng cập nhật đơn đặt hàng để thay đổi trạng thái của
đơn đặt hàng của khách hàng từ CREATED
đến CONFIRMED
sau khi nhà hàng xác nhận
đơn đặt hàng:
Trường hợp sử dụng | Cách triển khai |
---|---|
Trường hợp sử dụng 1: Nhà hàng xác nhận đơn đặt hàng | Đã gửi một OrderUpdate có trạng thái CONFIRMED
cho Google. Tệp này phải có actionOrderId ,
userVisibleOrderId , orderManagementActions và
estimatedFulfillmentTime . |
JSON
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "CONFIRMED", "label": "Provider confirmed" }, "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "updateTime": "2017-07-17T12:00:00Z", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" } } } }
Để biết những thông tin cơ bản về cách triển khai tính năng cập nhật đơn đặt hàng cho dự án, hãy đọc hướng dẫn Nội dung cập nhật đơn đặt hàng không đồng bộ.
Các phần tiếp theo cung cấp ví dụ cho các trường hợp cập nhật đơn đặt hàng nâng cao hơn.
Trạng thái bị từ chối
Các ví dụ bên dưới minh hoạ AsyncOrderUpdateRequestMessage
cho
đơn đặt hàng đã bị từ chối vì nhiều lý do. Một số ví dụ về trường hợp từ chối
đó là khi nhà hàng không thể thực hiện đơn đặt hàng nữa hoặc khi
địa chỉ giao hàng liên kết với đơn đặt hàng nằm ngoài phạm vi.
Trường hợp sử dụng | Cách triển khai |
---|---|
Trường hợp sử dụng 1: Đơn đặt hàng bị từ chối vì nhà cung cấp không liên hệ được nhà hàng hoặc nhà hàng không thể thực hiện đơn đặt hàng. | Gửi OrderUpdate có trạng thái REJECTED tới
Google. Tệp này phải có actionOrderId ,
userVisibleOrderId , orderManagementActions
rejectionInfo và foodOrderError thuộc loại lỗi
NO_CAPACITY . |
Trường hợp sử dụng 2: Đơn đặt hàng bị từ chối vì tài xế không có mặt hoặc địa chỉ giao hàng nằm ngoài phạm vi. | Gửi OrderUpdate có trạng thái REJECTED tới
Google. Tệp này phải có actionOrderId ,
userVisibleOrderId , orderManagementActions
rejectionInfo và foodOrderError thuộc loại lỗi
OUT_OF_SERVICE_AREA . |
Trường hợp sử dụng 3: Đơn đặt hàng bị từ chối vì nhà hàng đã đóng cửa đóng bất ngờ hoặc đang đóng. | Gửi OrderUpdate có trạng thái REJECTED tới
Google. Tệp này phải có actionOrderId ,
userVisibleOrderId , orderManagementActions
rejectionInfo và foodOrderError thuộc loại lỗi
CLOSED . |
Trường hợp sử dụng 4: Đơn đặt hàng bị từ chối vì một số mặt hàng đã hết còn hàng. | Gửi OrderUpdate có trạng thái REJECTED tới
Google. Tệp này phải có actionOrderId ,
userVisibleOrderId , orderManagementActions
rejectionInfo và foodOrderError thuộc loại lỗi
AVAILABILITY_CHANGED . |
Trường hợp sử dụng 5: Đơn đặt hàng bị từ chối do không xác định hoặc chưa được phân loại lý do. | Gửi OrderUpdate có trạng thái REJECTED tới
Google. Tệp này phải có actionOrderId ,
userVisibleOrderId , orderManagementActions và
rejectionInfo thuộc loại lỗi UNKNOWN . |
JSON
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "REJECTED", "label": "Order rejected" }, "updateTime": "2017-05-10T02:30:00.000Z", "rejectionInfo": { "type": "UNKNOWN", "reason": "Sorry, the restaurant cannot take your order right now." }, "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "foodOrderErrors": [ { "error": "NO_CAPACITY", "description": "Sorry, the restaurant cannot take your order right now." } ] } } } }
JSON
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "REJECTED", "label": "Order rejected" }, "updateTime": "2017-05-10T02:30:00.000Z", "rejectionInfo": { "type": "UNKNOWN", "reason": "Sorry, delivery is currently not available to your address." }, "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "foodOrderErrors": [ { "error": "OUT_OF_SERVICE_AREA", "description": "Sorry, delivery is currently not available to your address." } ] } } } }
JSON
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "REJECTED", "label": "Order rejected" }, "updateTime": "2017-05-10T02:30:00.000Z", "rejectionInfo": { "type": "UNKNOWN", "reason": "Sorry, the restaurant is closed unexpectedly." }, "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "foodOrderErrors": [ { "error": "CLOSED", "description": "Sorry, the restaurant is closed unexpectedly." } ] } } } }
JSON
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "REJECTED", "label": "Order rejected" }, "updateTime": "2017-05-10T02:30:00.000Z", "rejectionInfo": { "type": "UNKNOWN", "reason": "Sorry, some of items are not available right now." }, "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "foodOrderErrors": [ { "error": "AVAILABILITY_CHANGED", "id": "sample_menu_item_id", "description": "Sorry, some of the items are not available right now." } ] } } } }
JSON
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "REJECTED", "label": "Order rejected" }, "updateTime": "2017-05-10T02:30:00.000Z", "rejectionInfo": { "type": "UNKNOWN", "reason": "Sorry, your order is rejected." }, "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ] } } }
Trạng thái đã huỷ
Ví dụ bên dưới minh hoạ AsyncOrderUpdateRequestMessage
cho
đơn đặt hàng bị huỷ theo yêu cầu của khách hàng.
Trường hợp sử dụng | Cách triển khai |
---|---|
Trường hợp sử dụng 1: Đơn đặt hàng bị huỷ theo yêu cầu của khách hàng | Gửi OrderUpdate có trạng thái CANCELLED tới
Google. Tệp này phải có actionOrderId ,
userVisibleOrderId , orderManagementActions và
cancellationInfo . |
JSON
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "CANCELLED", "label": "Order cancelled" }, "updateTime": "2017-05-10T02:30:00.000Z", "cancellationInfo": { "reason": "Customer requested" }, "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ] } } }
Trạng thái đã thực hiện đơn hàng
Ví dụ bên dưới minh hoạ AsyncOrderUpdateRequestMessage
cho
đơn đặt hàng đã được thực hiện.
Trường hợp sử dụng | Cách triển khai |
---|---|
Trường hợp sử dụng 1: Đơn đặt hàng được thực hiện | Gửi OrderUpdate có trạng thái FULFILLED tới
Google. Tệp này phải có actionOrderId ,
userVisibleOrderId và orderManagementActions . |
JSON
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "FULFILLED", "label": "Order delivered" }, "updateTime": "2017-05-10T02:30:00.000Z", "fulfillmentInfo": { "deliveryTime": "2017-05-10T02:30:00.000Z" }, "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ] } } }
Trạng thái đang vận chuyển
Ví dụ bên dưới minh hoạ AsyncOrderUpdateRequestMessage
cho
đơn đặt hàng đang được vận chuyển đến khách hàng.
Trường hợp sử dụng | Cách triển khai |
---|---|
Trường hợp sử dụng 1: Đơn đặt hàng đang được vận chuyển. | Gửi một OrderUpdate có trạng thái IN_TRANSIT
cho Google. Tệp này phải có actionOrderId ,
userVisibleOrderId , orderManagementActions và
estimatedFulfillmentTime . |
JSON
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "IN_TRANSIT", "label": "Order is on the way" }, "inTransitInfo": { "updatedTime": "2017-07-17T12:00:00Z" }, "updateTime": "2017-07-17T12:00:00Z", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "PT20M" } } } }
Trạng thái "sẵn sàng đến lấy hàng"
Ví dụ bên dưới minh hoạ AsyncOrderUpdateRequestMessage
cho
đơn đặt hàng sẵn sàng để khách hàng đến lấy.
Trường hợp sử dụng | Cách triển khai |
---|---|
Trường hợp sử dụng 1: Đơn đặt hàng đã sẵn sàng để bạn đến lấy. | Gửi OrderUpdate bằng READY_FOR_PICKUP
trạng thái lên Google. Tệp này phải có actionOrderId ,
userVisibleOrderId , orderManagementActions và
estimatedFulfillmentTime . |
JSON
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "READY_FOR_PICKUP", "label": "Order is ready for pickup" }, "updateTime": "2018-04-15T12:00:00Z", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "PT20M" } } } }
Trạng thái chuẩn bị thực phẩm
Ví dụ bên dưới minh hoạ AsyncOrderUpdateRequestMessage
cho
các đơn hàng do nhà hàng chuẩn bị.
Trường hợp sử dụng | Cách triển khai |
---|---|
Trường hợp sử dụng 1: Nhà hàng đang chuẩn bị đơn gọi món. | Gửi OrderUpdate bằng IN_PREPARATION
trạng thái lên Google. Tệp này phải có actionOrderId ,
userVisibleOrderId , orderManagementActions và
estimatedFulfillmentTime . |
JSON
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "IN_PREPARATION", "label": "Order is being prepared" }, "updateTime": "2018-04-15T11:30:00Z", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "PT20M" } } } }
Trạng thái đơn đặt hàng đã thay đổi
Các ví dụ bên dưới minh hoạ AsyncOrderUpdateRequestMessage
cho
các thay đổi khác nhau đối với đơn đặt hàng của khách hàng.
Trường hợp sử dụng 1: Cần cập nhật thời gian thực hiện đơn hàng ước tính. | Gửi OrderUpdate cho Google kèm theo trạng thái đơn đặt hàng,
actionOrderId , userVisibleOrderId
orderManagementAction và bản cập nhật
estimatedFulfillmentTime . |
Trường hợp sử dụng 2: Bạn cần cập nhật tổng giá của đơn đặt hàng. | Gửi OrderUpdate cho Google kèm theo trạng thái đơn đặt hàng,
actionOrderId , userVisibleOrderId
orderManagementAction , estimatedFulfillmentTime ,
và totalPrice được cập nhật. |
Trường hợp sử dụng 3: Các hành động quản lý đơn đặt hàng của đơn đặt hàng cần được đã cập nhật. | Gửi OrderUpdate cho Google kèm theo trạng thái đơn đặt hàng,
actionOrderId , userVisibleOrderId
estimatedFulfillmentTime và bản cập nhật
orderManagementActions . |
JSON
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "CONFIRMED", "label": "Provider confirmed" }, "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "updateTime": "2017-07-17T12:00:00Z", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" } } } }
JSON
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "CONFIRMED", "label": "Provider confirmed" }, "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "20", "nanos": 500000000 } }, "updateTime": "2017-07-17T12:00:00Z", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" } } } }
JSON
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "CONFIRMED", "label": "Provider confirmed" }, "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "updateTime": "2017-07-17T12:00:00Z", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" } } } }