หลังจากลูกค้าส่งคำสั่งซื้อแล้ว คุณสามารถแจ้งให้ลูกค้าทราบถึงการเปลี่ยนแปลงในคำสั่งซื้อได้โดยส่งข้อความอัปเดตคำสั่งซื้อไปยัง 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
สำหรับคำสั่งซื้อที่ถูกปฏิเสธด้วยเหตุผลต่างๆ ตัวอย่างสาเหตุที่ปฏิเสธ เช่น เมื่อร้านอาหารไม่สามารถดำเนินการตามคำสั่งซื้อได้อีกต่อไป หรือเมื่อที่อยู่สำหรับจัดส่งที่เชื่อมโยงกับคำสั่งซื้ออยู่นอกพื้นที่ให้บริการ
กรณีการใช้งาน | วิธีติดตั้งใช้งาน |
---|---|
Use Case 1: คำสั่งซื้อถูกปฏิเสธเนื่องจากผู้ให้บริการติดต่อร้านอาหารไม่ได้หรือร้านอาหารไม่สามารถดำเนินการตามคำสั่งซื้อได้ | ส่ง OrderUpdate ที่มีสถานะ REJECTED ไปยัง Google โดยต้องมี actionOrderId ,
userVisibleOrderId , orderManagementActions ,
rejectionInfo และ foodOrderError ของประเภทข้อผิดพลาด
NO_CAPACITY |
กรณีการใช้งาน 2: คำสั่งซื้อถูกปฏิเสธเนื่องจากไม่มีคนขับหรือที่อยู่สำหรับจัดส่งอยู่นอกพื้นที่ให้บริการ | ส่ง OrderUpdate ที่มีสถานะ REJECTED ไปยัง Google โดยต้องมี actionOrderId ,
userVisibleOrderId , orderManagementActions ,
rejectionInfo และ foodOrderError ของประเภทข้อผิดพลาด
OUT_OF_SERVICE_AREA |
Use Case 3: คำสั่งซื้อถูกปฏิเสธเนื่องจากร้านอาหารปิดโดยไม่คาดคิดหรือกำลังจะปิด | ส่ง OrderUpdate ที่มีสถานะ REJECTED ไปยัง Google โดยต้องมี actionOrderId ,
userVisibleOrderId , orderManagementActions ,
rejectionInfo และ foodOrderError ของประเภทข้อผิดพลาด
CLOSED |
Use Case 4: คำสั่งซื้อถูกปฏิเสธเนื่องจากสินค้าบางรายการหมด | ส่ง OrderUpdate ที่มีสถานะ REJECTED ไปยัง Google โดยต้องมี actionOrderId ,
userVisibleOrderId , orderManagementActions ,
rejectionInfo และ foodOrderError ของประเภทข้อผิดพลาด
AVAILABILITY_CHANGED |
Use Case 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
สำหรับคำสั่งซื้อที่ยกเลิกตามคำขอของลูกค้า
กรณีการใช้งาน | วิธีติดตั้งใช้งาน |
---|---|
Use Case 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
สำหรับคำสั่งซื้อที่ดำเนินการเรียบร้อยแล้ว
กรณีการใช้งาน | วิธีติดตั้งใช้งาน |
---|---|
Use Case 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
สำหรับคำสั่งซื้อที่พร้อมให้ลูกค้ามารับ
กรณีการใช้งาน | วิธีติดตั้งใช้งาน |
---|---|
Use Case 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 ที่อัปเดตแล้ว |
Use Case 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" } } } }