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ề các 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 cho Google. Sau đó, Google sẽ chuyển tiếp thông báo đó đến khách hàng trong giao diện người dùng đặt hàng.
Các lý do phổ biến để gửi thông tin cập nhật về đơn đặt hàng bao gồm:
- Thời gian thực hiện ước tính cho đơn đặt hàng đã có hoặc thay đổi.
- Trạng thái của đơn đặt hàng thay đổi.
- Không thể thực hiện đơn đặt hàng được 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, chẳng hạn như hỗ trợ khách hàng hoặc số điện thoại của nhà hàng.
- Biên nhận cho đơn đặt hàng đã sẵn sàng.
Ví dụ: Ví dụ sau đây sử dụng thông tin cập nhật về đơn đặt hàng để thay đổi trạng thái đơn đặt hàng của khách hàng từ CREATED
thành 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 | Một OrderUpdate có trạng thái CONFIRMED sẽ được gửi đến Google. Thuộc tính 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 thông tin cơ bản về việc triển khai cập nhật đơn đặt hàng cho dự án của bạn, hãy đọc hướng dẫn Không đồng bộ cập nhật đơn đặt hàng.
Phần tiếp theo cung cấp các ví dụ cho các trường hợp cập nhật đơn đặt hàng nâng cao.
Trạng thái bị từ chối
Ví dụ bên dưới minh hoạ AsyncOrderUpdateRequestMessage
cho các đơn đặt hàng đã bị từ chối vì nhiều lý do. Một số lý do từ chối là khi nhà hàng không thể thực hiện đơn đặt hàng hoặc khi địa chỉ giao hàng liên quan đến đơ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 thể liên hệ với 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 loại lỗi
NO_CAPACITY . |
Trường hợp sử dụng 2: Đơn đặt hàng bị từ chối vì người lái xe 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 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 đột ngột hoặc đóng cửa. | 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 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 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 loại lỗi
AVAILABILITY_CHANGED . |
Trường hợp sử dụng 5: Đơn đặt hàng bị từ chối vì lý do không xác định hoặc chưa được phân loại. | Gửi OrderUpdate có trạng thái REJECTED tới Google. Tệp này phải có actionOrderId , userVisibleOrderId , orderManagementActions và rejectionInfo 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 bị hủy
Ví dụ bên dưới minh hoạ AsyncOrderUpdateRequestMessage
cho các đơ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ị hủy theo yêu cầu của khách hàng | Gửi OrderUpdate có trạng thái CANCELLED tới Google. Thuộc tính 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
Ví dụ bên dưới minh hoạ AsyncOrderUpdateRequestMessage
cho các đơ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: Thực hiện đơn đặt hàng | Gửi OrderUpdate có trạng thái FULFILLED tới Google. Thuộc tính 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 trong quá trình vận chuyển
Ví dụ bên dưới minh hoạ AsyncOrderUpdateRequestMessage
cho các đơn đặt hàng giao đang 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 OrderUpdate có trạng thái IN_TRANSIT
cho Google. Thuộc tính 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ụ dưới đây minh hoạ AsyncOrderUpdateRequestMessage
cho các đơ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: Bạn có thể đến lấy hàng. | Gửi OrderUpdate có trạng thái READY_FOR_PICKUP tới Google. Thuộc tính 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 đặt hàng đang được 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 đặt hàng. | Gửi OrderUpdate có trạng thái IN_PREPARATION tới Google. Thuộc tính 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
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: Bạn cần cập nhật thời gian thực hiện dự kiến. | Gửi OrderUpdate tới Google kèm theo trạng thái đơn đặt hàng, actionOrderId , userVisibleOrderId , orderManagementAction và estimatedFulfillmentTime đã cập nhật. |
Trường hợp sử dụng 2: Tổng giá của đơn đặt hàng cần được cập nhật. | Gửi OrderUpdate tới Google kèm theo trạng thái đơn đặt hàng, actionOrderId , userVisibleOrderId , orderManagementAction , estimatedFulfillmentTime và totalPrice đã cập nhật. |
Trường hợp sử dụng 3: Bạn cần cập nhật các hành động quản lý đơn đặt hàng của đơn đặt hàng. | Gửi OrderUpdate tới Google kèm theo trạng thái đơn đặt hàng, actionOrderId , userVisibleOrderId , estimatedFulfillmentTime và orderManagementActions đã cập nhật. |
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" } } } }