بعد أن يرسل العميل الطلب، يمكنك إبلاغ العميل بالتغييرات الطلب من خلال إرسال رسالة تحديث الطلب إلى 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" } } } }