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