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