אחרי שלקוח שולח הזמנה, אפשר להודיע לו על שינויים ב ההזמנה על ידי שליחת הודעה אל Google בנוגע לעדכון ההזמנה. לאחר מכן Google מעבירה הודעה ללקוח בממשק המשתמש של ההזמנה.
סיבות נפוצות לשליחת עדכוני הזמנות:
- זמן האספקה המשוער של ההזמנה יהיה זמין או ישתנה.
- המצב של הזמנה משתנה.
- כבר אי אפשר למלא את ההזמנה.
- המחיר של אפשרות בתפריט שנכלל בהזמנה השתנה.
- ללקוח יש דרך חדשה לנהל את ההזמנה שלו, למשל תמיכת לקוחות. או מספר הטלפון של המסעדה.
- הקבלה עבור ההזמנה תהיה זמינה.
לדוגמה, הדוגמה הבאה משתמשת בעדכון הזמנה כדי לשנות את הסטטוס של
הזמנה של לקוח מ-CREATED
עד CONFIRMED
אחרי קבלת אישור מהמסעדה
הסדר:
תרחיש לדוגמה | איך מטמיעים |
---|---|
תרחיש לדוגמה 1: המסעדה מאשרת את ההזמנה | נשלח OrderUpdate עם סטטוס CONFIRMED
ל-Google. הוא חייב להכיל actionOrderId ,
userVisibleOrderId , orderManagementActions וגם
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" } } } }
מידע בסיסי על הטמעת עדכוני הזמנות בפרויקט זמין במדריך עדכוני הזמנות אסינכרוניים.
בקטעים הבאים מוצגות דוגמאות לתרחישים מתקדמים יותר של עדכון הזמנות.
סטטוס 'נדחתה'
הדוגמאות הבאות כוללות AsyncOrderUpdateRequestMessage
עבור
הזמנות שנדחו מסיבות שונות. כמה דוגמאות לדחייה
הן כאשר המסעדה לא יכולה יותר למלא את ההזמנה או כאשר
הכתובת למשלוח שמשויכת להזמנה נמצאת מחוץ לטווח.
תרחיש לדוגמה | איך מטמיעים |
---|---|
תרחיש לדוגמה 1: ההזמנה נדחתה כי הספק לא יכול ליצור קשר המסעדה או המסעדה לא יכולות למלא את ההזמנה. | שליחת OrderUpdate עם סטטוס REJECTED אל
Google. הוא חייב להכיל actionOrderId ,
userVisibleOrderId , orderManagementActions
rejectionInfo ו-foodOrderError מסוג שגיאה
NO_CAPACITY . |
תרחיש לדוגמה 2: ההזמנה נדחתה כי הנהג לא זמין או שהכתובת למשלוח נמצאת מחוץ לטווח. | שליחת OrderUpdate עם סטטוס REJECTED אל
Google. הוא חייב להכיל actionOrderId ,
userVisibleOrderId , orderManagementActions
rejectionInfo ו-foodOrderError מסוג שגיאה
OUT_OF_SERVICE_AREA . |
תרחיש לדוגמה 3: ההזמנה נדחתה כי המסעדה סגורה באופן בלתי צפוי או שהוא נסגר. | שליחת OrderUpdate עם סטטוס REJECTED אל
Google. הוא חייב להכיל actionOrderId ,
userVisibleOrderId , orderManagementActions
rejectionInfo ו-foodOrderError מסוג שגיאה
CLOSED . |
תרחיש לדוגמה 4: ההזמנה נדחתה כי חלק מהפריטים אזלו המלאי. | שליחת OrderUpdate עם סטטוס REJECTED אל
Google. הוא חייב להכיל actionOrderId ,
userVisibleOrderId , orderManagementActions
rejectionInfo ו-foodOrderError מסוג שגיאה
AVAILABILITY_CHANGED . |
תרחיש לדוגמה 5: ההזמנה נדחתה בגלל תוכן לא ידוע או ללא שיוך לקטגוריה סיבות נוספות. | שליחת OrderUpdate עם סטטוס REJECTED אל
Google. הוא חייב להכיל actionOrderId ,
userVisibleOrderId , orderManagementActions וגם
rejectionInfo מסוג שגיאה 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" } } } ] } } }
סטטוס 'בוטל'
הדוגמה הבאה מראה AsyncOrderUpdateRequestMessage
עבור
הזמנות שבוטלו על ידי בקשת לקוח.
תרחיש לדוגמה | איך מטמיעים |
---|---|
תרחיש לדוגמה 1: ההזמנה בוטלה בעקבות בקשה של הלקוח | שליחת OrderUpdate עם סטטוס CANCELLED אל
Google. הוא חייב להכיל actionOrderId ,
userVisibleOrderId , orderManagementActions וגם
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" } } } ] } } }
סטטוס 'נוצל'
הדוגמה הבאה מראה AsyncOrderUpdateRequestMessage
עבור
הזמנות שסופקו.
תרחיש לדוגמה | איך מטמיעים |
---|---|
תרחיש לדוגמה 1: ההזמנה סופקה | שליחת OrderUpdate עם סטטוס FULFILLED אל
Google. הוא חייב להכיל actionOrderId ,
userVisibleOrderId ו-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" } } } ] } } }
סטטוס בנסיעה
הדוגמה הבאה מראה AsyncOrderUpdateRequestMessage
עבור
הזמנות משלוח שנמצאות בדרך אל הלקוח.
תרחיש לדוגמה | איך מטמיעים |
---|---|
תרחיש לדוגמה 1: הזמנת המשלוח בדרך. | שליחת OrderUpdate עם סטטוס IN_TRANSIT
ל-Google. הוא חייב להכיל actionOrderId ,
userVisibleOrderId , orderManagementActions וגם
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" } } } }
סטטוס 'מוכן לאיסוף'
הדוגמה הבאה מראה AsyncOrderUpdateRequestMessage
עבור
הזמנות שמוכנות לאיסוף על ידי הלקוח.
תרחיש לדוגמה | איך מטמיעים |
---|---|
תרחיש לדוגמה 1: ההזמנה מוכנה לאיסוף. | שליחת OrderUpdate באמצעות READY_FOR_PICKUP
ל-Google. הוא חייב להכיל actionOrderId ,
userVisibleOrderId , orderManagementActions וגם
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" } } } }
סטטוס אוכל בהכנה
הדוגמה הבאה מראה AsyncOrderUpdateRequestMessage
עבור
הזמנות שמוכנות על ידי המסעדה.
תרחיש לדוגמה | איך מטמיעים |
---|---|
תרחיש לדוגמה 1: המסעדה מכינה את ההזמנה. | שליחת OrderUpdate באמצעות IN_PREPARATION
ל-Google. הוא חייב להכיל actionOrderId ,
userVisibleOrderId , orderManagementActions וגם
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" } } } }
סטטוס ההזמנה השתנה
הדוגמאות הבאות כוללות AsyncOrderUpdateRequestMessage
עבור
שינויים שונים שבוצעו בהזמנה של לקוח.
תרחיש לדוגמה 1: צריך לעדכן את זמן האספקה המשוער. | שולחים OrderUpdate ל-Google עם סטטוס ההזמנה,
actionOrderId , userVisibleOrderId
orderManagementAction , והגרסה המעודכנת
estimatedFulfillmentTime |
תרחיש לדוגמה 2: צריך לעדכן את המחיר הכולל של ההזמנה. | שולחים OrderUpdate ל-Google עם סטטוס ההזמנה,
actionOrderId , userVisibleOrderId
orderManagementAction , estimatedFulfillmentTime ,
והגרסה המעודכנת של totalPrice . |
תרחיש לדוגמה 3: פעולות ניהול ההזמנה בהזמנה צריכות להיות עודכן. | שולחים OrderUpdate ל-Google עם סטטוס ההזמנה,
actionOrderId , userVisibleOrderId
estimatedFulfillmentTime , והגרסה המעודכנת
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" } } } }