जब कोई ग्राहक ऑर्डर सबमिट कर देता है, तो Google को ऑर्डर अपडेट करने का मैसेज भेजकर, ग्राहक को ऑर्डर में हुए बदलावों के बारे में सूचना दी जा सकती है. इसके बाद, Google उस मैसेज को ऑर्डर करने के यूज़र इंटरफ़ेस (यूआई) में ग्राहक को भेजता है.
ऑर्डर के अपडेट भेजने की सामान्य वजहें ये हैं:
- ऑर्डर पूरा होने का अनुमानित समय उपलब्ध हो जाता है या उसमें बदलाव हो जाता है.
- ऑर्डर की स्थिति बदल जाती है.
- अब ऑर्डर पूरा नहीं किया जा सकता.
- ऑर्डर में शामिल मेन्यू आइटम की कीमत बदल गई.
- ग्राहक के पास अपने ऑर्डर को मैनेज करने का एक नया तरीका होता है. जैसे, ग्राहक सहायता केंद्र या रेस्टोरेंट का फ़ोन नंबर.
- ऑर्डर की रसीद उपलब्ध हो जाती है.
उदाहरण के लिए, नीचे दिए गए उदाहरण में, ऑर्डर अपडेट का इस्तेमाल करके, ग्राहक के ऑर्डर का स्टेटस CREATED
से CONFIRMED
में बदला गया है. ऐसा तब किया गया, जब रेस्टोरेंट ने ऑर्डर की पुष्टि की:
इस्तेमाल का उदाहरण | लागू करने का तरीका |
---|---|
इस्तेमाल का पहला उदाहरण: रेस्टोरेंट, ऑर्डर की पुष्टि करता है | CONFIRMED स्थिति वाला OrderUpdate , 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
दिखाया गया है जिन्हें अलग-अलग वजहों से अस्वीकार कर दिया गया है. ऑर्डर अस्वीकार होने की कुछ वजहें ये हो सकती हैं: रेस्टोरेंट अब ऑर्डर पूरा नहीं कर सकता या ऑर्डर से जुड़ा डिलीवरी पता, रेस्टोरेंट की डिलीवरी की सीमा से बाहर है.
इस्तेमाल का उदाहरण | लागू करने का तरीका |
---|---|
उपयोग का पहला उदाहरण: ऑर्डर अस्वीकार कर दिया गया, क्योंकि सेवा देने वाली कंपनी, रेस्टोरेंट से संपर्क नहीं कर पा रही है या रेस्टोरेंट ऑर्डर पूरा नहीं कर पा रहा है. | Google को REJECTED स्थिति वाला OrderUpdate भेजें. इसमें गड़बड़ी के टाइप के actionOrderId ,
userVisibleOrderId , orderManagementActions ,
rejectionInfo , और foodOrderError वैरिएबल होने चाहिए
NO_CAPACITY . |
उपयोग का दूसरा उदाहरण: ड्राइवर उपलब्ध न होने या डिलीवरी का पता तय सीमा से बाहर होने की वजह से ऑर्डर अस्वीकार कर दिया गया. | Google को REJECTED स्थिति वाला OrderUpdate भेजें. इसमें गड़बड़ी के टाइप के actionOrderId ,
userVisibleOrderId , orderManagementActions ,
rejectionInfo , और foodOrderError वैरिएबल होने चाहिए
OUT_OF_SERVICE_AREA . |
इस्तेमाल का उदाहरण 3: रेस्टोरेंट अचानक बंद होने या बंद होने की वजह से ऑर्डर अस्वीकार कर दिया गया. | Google को REJECTED स्थिति वाला OrderUpdate भेजें. इसमें गड़बड़ी के टाइप के actionOrderId ,
userVisibleOrderId , orderManagementActions ,
rejectionInfo , और foodOrderError वैरिएबल होने चाहिए
CLOSED . |
उपयोग का चौथा उदाहरण: कुछ आइटम स्टॉक में न होने की वजह से ऑर्डर अस्वीकार कर दिया गया. | Google को REJECTED स्थिति वाला OrderUpdate भेजें. इसमें गड़बड़ी के टाइप के actionOrderId ,
userVisibleOrderId , orderManagementActions ,
rejectionInfo , और foodOrderError वैरिएबल होने चाहिए
AVAILABILITY_CHANGED . |
उपयोग का उदाहरण 5: किसी ऐसी वजह से ऑर्डर अस्वीकार कर दिया गया है जिसके बारे में जानकारी नहीं है या जिसे किसी कैटगरी में नहीं रखा गया है. | Google को REJECTED स्थिति वाला OrderUpdate भेजें. इसमें गड़बड़ी के टाइप UNKNOWN के actionOrderId ,
userVisibleOrderId , orderManagementActions , और
rejectionInfo होने चाहिए. |
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
दिखाया गया है.
इस्तेमाल का उदाहरण | लागू करने का तरीका |
---|---|
इस्तेमाल का पहला उदाहरण: ग्राहक के अनुरोध पर ऑर्डर रद्द किया गया | Google को CANCELLED स्थिति वाला OrderUpdate भेजें. इसमें 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
दिखाया गया है.
इस्तेमाल का उदाहरण | लागू करने का तरीका |
---|---|
इस्तेमाल का पहला उदाहरण: ऑर्डर पूरा हो गया है | Google को FULFILLED स्थिति वाला OrderUpdate भेजें. इसमें 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
दिखाया गया है जो खरीदार को भेजे जा रहे हैं.
इस्तेमाल का उदाहरण | लागू करने का तरीका |
---|---|
इस्तेमाल का पहला उदाहरण: डिलीवरी ऑर्डर ट्रांज़िट में है. | Google को IN_TRANSIT स्थिति वाला OrderUpdate भेजें. इसमें 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
दिखाया गया है जिन्हें खरीदार पिक अप कर सकता है.
इस्तेमाल का उदाहरण | लागू करने का तरीका |
---|---|
इस्तेमाल का पहला उदाहरण: ऑर्डर पिक अप के लिए तैयार है. | Google को READY_FOR_PICKUP के साथ OrderUpdate भेजें
स्थिति. इसमें 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
दिखाया गया है.
इस्तेमाल का उदाहरण | लागू करने का तरीका |
---|---|
इस्तेमाल का पहला उदाहरण: रेस्टोरेंट में ऑर्डर तैयार किया जा रहा है. | Google को IN_PREPARATION के साथ OrderUpdate भेजें
स्थिति. इसमें 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
दिखाया गया है.
इस्तेमाल का पहला उदाहरण: ऑर्डर पूरा होने में लगने वाले अनुमानित समय को अपडेट करना होगा. | Google को ऑर्डर की स्थिति,
actionOrderId , userVisibleOrderId ,
orderManagementAction , और अपडेट की गई
estimatedFulfillmentTime के साथ OrderUpdate भेजें. |
इस्तेमाल का दूसरा उदाहरण: ऑर्डर की कुल कीमत को अपडेट करना ज़रूरी है. | Google को ऑर्डर की स्थिति,
actionOrderId , userVisibleOrderId ,
orderManagementAction , estimatedFulfillmentTime , और अपडेट किए गए totalPrice के साथ OrderUpdate भेजें. |
इस्तेमाल का तीसरा उदाहरण: ऑर्डर मैनेजमेंट ऐक्शन को अपडेट करना होगा. | Google को ऑर्डर की स्थिति,
actionOrderId , userVisibleOrderId ,
estimatedFulfillmentTime , और अपडेट की गई
orderManagementActions के साथ OrderUpdate भेजें. |
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" } } } }