หลังจากที่ลูกค้าส่งคําสั่งซื้อแล้ว คุณจะแจ้งลูกค้าเกี่ยวกับการเปลี่ยนแปลงคําสั่งซื้อได้โดยส่งข้อความอัปเดตคําสั่งซื้อไปยัง Google จากนั้น Google ส่งต่อข้อความนั้นให้ลูกค้าภายใน UI ที่สั่งซื้อ
สาเหตุทั่วไปในการส่งการอัปเดตคําสั่งซื้อมีดังนี้
- เวลาที่ดําเนินการตามคําสั่งซื้อโดยประมาณจะพร้อมให้ใช้งานหรือทําการเปลี่ยนแปลง
- สถานะของคําสั่งซื้อจะเปลี่ยนแปลง
- คําสั่งซื้อไม่สามารถดําเนินการตามคําสั่งซื้อได้อีกต่อไป
- ราคาของรายการในเมนูที่รวมอยู่ในคําสั่งซื้อมีการเปลี่ยนแปลง
- ลูกค้ามีวิธีใหม่ในการจัดการคําสั่งซื้อ เช่น การสนับสนุนลูกค้าหรือหมายเลขโทรศัพท์ของร้านอาหาร
- คุณจะได้รับใบเสร็จสําหรับคําสั่งซื้อนั้น
ตัวอย่างเช่น ตัวอย่างต่อไปนี้ใช้การอัปเดตคําสั่งซื้อเพื่อเปลี่ยนสถานะคําสั่งซื้อของลูกค้าจาก 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" } } } }