คุณสามารถเพิ่มการรองรับในการดำเนินการตามคำสั่งซื้อเพื่อให้ผู้ใช้นัดหมายเวลารับและจัดส่งคำสั่งซื้ออาหารล่วงหน้าได้ ก่อนใช้การสนับสนุนนี้ในการดำเนินการตามคำสั่งซื้อ ให้สร้างฟีดสินค้าคงคลังของบริการที่ระบุเวลาสำหรับผู้ใช้ในการสั่งซื้อล่วงหน้า ตามที่อธิบายไว้ในสคีมาฟีดสินค้าคงคลัง (AdvanceServiceDeliveryHoursSpecification
)
ช่วงเวลาที่สะดวกสำหรับสั่งจองล่วงหน้า
Google จะเสนอช่วงเวลาที่รับคำสั่งซื้อล่วงหน้าเป็นช่วงๆ ละ 15 นาที โดยไม่เกิน 7 วันล่วงหน้า โดยอิงตามเวลาในการดำเนินการสำหรับร้านอาหารหรือบริการ (ตามที่ระบุไว้ในAdvanceServiceDeliveryHoursSpecification
)
หากต้องการเรียกข้อมูลช่วงเวลาที่แนะนำสำหรับการสั่งซื้อล่วงหน้า ให้ใช้ค่าต่อไปนี้จากช่อง fulfillmentPreference
ของออบเจ็กต์ FoodCartExtension
ที่จุดชำระเงิน
PickupInfo.pickupTimeIso8601
DeliveryInfo.deliveryTimeIso8601
ใช้การสั่งจองล่วงหน้าที่จุดชำระเงิน
ตารางด้านล่างแสดงวิธีต่างๆ ที่คุณใช้คำตอบของการดำเนินการตามคำสั่งซื้อได้เมื่อผู้ใช้พยายามสั่งซื้อ
สถานการณ์ | ลักษณะการดำเนินการตามคำสั่งซื้อ |
---|---|
คำสั่งซื้อล่วงหน้าสามารถดำเนินการได้สำหรับช่วงเวลาที่ขอ | ยอมรับรถเข็น P0M ("โดยเร็วที่สุด") หรือ FUTURE_SLOT โดยสร้าง ProposedOrder ที่มีช่วงเวลาเดียวกัน ดูตัวอย่างการตอบกลับการชำระเงินที่ยอมรับช่องได้ที่ข้อมูลโค้ดนี้ |
ไม่สามารถดำเนินการตามคำสั่งซื้อล่วงหน้าสำหรับช่วงเวลาที่ขอได้ | การดำเนินการตามคำสั่งซื้อควรทำดังนี้
ดูตัวอย่างการตอบกลับการชำระเงินที่เสนอช่วงเวลาอื่นได้ที่ข้อมูลโค้ดนี้ |
ช่วงเวลาอื่นสำหรับการดำเนินการตามคำสั่งซื้อ
เมื่อชำระเงิน หาก Google เสนอช่วงเวลาที่สะดวกสำหรับสั่งจองล่วงหน้าที่ไม่เหมาะสม ทีมการดำเนินการของคุณจะแนะนำทางเลือกอื่นๆ ได้โดยใช้ออบเจ็กต์ CheckoutResponseMessage
หากต้องการระบุช่วงเวลาที่สะดวกสำหรับสั่งจองล่วงหน้าทางเลือก ให้ตอบกลับคำขอชำระเงินด้วย FoodErrorExtension
และตั้งค่าต่อไปนี้
- ในพารามิเตอร์
foodOrderErrors
ให้ระบุประเภทข้อผิดพลาด (เช่นUNAVAILABLE_SLOT
,NO_CAPACITY
หรือCLOSED
) - ในพารามิเตอร์
correctedProposedOrder
ให้ระบุค่าP0M
หรือFUTURE_SLOT
อื่นผ่านavailableFulfillmentOptions
ช่วงเวลาที่แนะนำควรเป็นช่วงเวลา 7 วันนับจากเวลาที่สั่งซื้อ และควรรวมช่วงเวลาทั้งหมดที่ดำเนินการตามคำขอในรถเข็นของผู้ใช้
ตัวอย่างเช่น สมมติว่าอาหารพิเศษสำหรับมื้อกลางวันมีให้บริการเฉพาะวันจันทร์ถึงศุกร์ตั้งแต่เวลา 11:00 น. ถึง 13:00 น. จากนั้นผู้ใช้พยายามเพิ่มอาหารกลางวันพิเศษลงในรถเข็น แต่พบว่าช่วงเวลาที่เลือกไม่พร้อมให้บริการ ในกรณีนี้ การดำเนินการตามคำสั่งซื้อควรเก็บโปรโมชันอาหารกลางวันไว้ในรถเข็น และแสดงเฉพาะช่วงเวลา 11:00 น. - 13:00 น. เป็นเวลา 7 วัน
คุณควรละเว้นออบเจ็กต์ correctedProposedOrder.Cart.fulfillmentPreference
ในการตอบกลับ
หากไม่มีช่วงเวลาที่สะดวก หรือหากร้านอาหารหรือบริการไม่รองรับการจองล่วงหน้า คุณก็ไม่จำเป็นต้องระบุcorrectedProposedOrder
ดูตัวอย่างด้านล่างสำหรับข้อความ JSON ระหว่างผู้ดำเนินการตามคำสั่งซื้อกับ Google ในระหว่างขั้นตอนการส่งคำขอชำระเงินและการตอบกลับสำหรับคำสั่งซื้อล่วงหน้า เมื่อร้านอาหารหรือบริการพร้อมสำหรับการสั่งจองล่วงหน้า
ตัวอย่าง: CheckoutRequest ที่มีช่วงเวลาการนำส่ง
ตัวอย่างด้านล่างแสดงคำขอชำระเงินที่มีช่วงเวลานำส่งคำสั่งซื้อล่วงหน้า
{
"inputs": [
{
"intent": "actions.foodordering.intent.CHECKOUT",
"arguments": [
{
"extension": {
"@type": "type.googleapis.com/google.actions.v2.orders.Cart",
"merchant": {
"id": "https://www.exampleprovider.com/merchant/id1",
"name": "Cucina Venti"
},
"lineItems": [
{
"name": "Sizzling Prawns Dinner",
"type": "REGULAR",
"id": "sample_item_offer_id_1",
"offerId": "https://www.exampleprovider.com/menu/item/offer/id1",
"quantity": 1,
"price": {
"type": "ESTIMATE",
"amount": {
"currencyCode": "USD",
"units": "16",
"nanos": 750000000
}
},
}
],
"extension": {
"@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
"fulfillmentPreference": {
"fulfillmentInfo": {
"delivery": {
// Deliver at 6:30PM.
"deliveryTimeIso8601": "2017-12-14T18:30:00-07:00"
}
}
},
"location": {
...
}
}
}
}
]
}
]
}
ตัวอย่าง: CheckoutResponse ยอมรับช่วงเวลา
ข้อมูลโค้ดด้านล่างแสดงตัวอย่างการตอบกลับการชำระเงินที่การดำเนินการตามคำสั่งซื้อยอมรับช่วงเวลาการสั่งซื้อล่วงหน้าที่เสนอ
{
"expectUserResponse": false,
"finalResponse": {
"richResponse": {
"items": [
{
"structuredResponse": {
"checkoutResponse": {
"proposedOrder": {
"id": "sample_proposed_order_id_1",
"cart": {
"merchant": {
"id": "https://www.exampleprovider.com/merchant/id1",
"name": "Falafel Bite"
},
"lineItems": [
{
"name": "Sizzling Prawns Dinner",
"type": "REGULAR",
"id": "sample_item_offer_id_1",
"offerId": "https://www.exampleprovider.com/menu/item/offer/id1",
"quantity": 1,
"price": {
"type": "ESTIMATE",
"amount": {
"currencyCode": "USD",
"units": "16",
"nanos": 750000000
}
},
}
],
"extension": {
"@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
"fulfillmentPreference": {
"fulfillmentInfo": {
"delivery": {
// Same as the time in the request.
"deliveryTimeIso8601": "2017-12-14T18:30:00-07:00"
}
}
},
"location": {
...
}
}
},
"totalPrice": {
"type": "ESTIMATE",
"amount": {
// Represents $16.75
"currencyCode": "USD",
"units": "16",
"nanos": 750000000
}
},
"extension": {
"@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
// Send whole proposed order back.
"availableFulfillmentOptions": [
"fulfillmentInfo": {
"delivery": {
// Same as the time in the request.
"deliveryTimeIso8601": "2017-12-14T18:30:00-07:00"
}
}
]
}
},
"paymentOptions": {
...
}
}
}
}
]
}
}
}
ตัวอย่าง: CheckoutResponse ที่มีสล็อตสํารอง
ข้อมูลโค้ดด้านล่างแสดงตัวอย่างการตอบกลับการชำระเงินที่การดำเนินการตามคำสั่งซื้อของคุณเสนอช่วงเวลาการสั่งซื้อล่วงหน้าทางเลือก โปรดทราบว่าคุณไม่ควรระบุออบเจ็กต์ correctedProposedOrder.Cart.fulfillmentPreference
ในการตอบกลับ
{
"expectUserResponse": false,
"finalResponse": {
"richResponse": {
"items": [
{
"structuredResponse": {
"error": {
"@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension",
"foodOrderErrors": [
{
"error": "UNAVAILABLE_SLOT", // Cart level error
"description": "The restaurant is closed."
}
],
"correctedProposedOrder": {
// Send whole original cart back,
// without the fulfillmentPreference.
"cart": {
...
},
"otherItems": {
...
},
"totalPrice": {
...
},
"extension": {
"@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
"availableFulfillmentOptions": [
"fulfillmentInfo": {
"delivery": {
"deliveryTimeIso8601": "2017-12-14T19:00:00-07:00"
}
},
"fulfillmentInfo": {
"delivery": {
"deliveryTimeIso8601": "2017-12-14T19:30:00-07:00"
}
},
"fulfillmentInfo": {
"delivery": {
"deliveryTimeIso8601": "2017-12-14T20:00:00-07:00"
}
}
]
}
},
"paymentOptions": {
...
}
}
}
}
]
}
}
}
ใช้การสั่งซื้อล่วงหน้าที่ส่งคำสั่งซื้อ
เมื่อส่งคำสั่งซื้อ หากมีปัญหาเกี่ยวกับช่วงเวลาที่สั่งซื้อล่วงหน้า SubmitOrderResponseMessage
ของคุณควรระบุเหตุผล (เช่น UNAVAILABLE_SLOT
หรือ UNKNOWN
) ไว้ในออบเจ็กต์ RejectionInfo
อัปเดตสถานะของคำสั่งซื้อจาก CREATED
เป็น CONFIRMED
ในออบเจ็กต์ OrderState
เมื่อผู้ให้บริการยอมรับคำสั่งซื้อ ระบุช่วงเวลาที่เลือกในอีเมลยืนยันที่ส่งถึงผู้ใช้
หากผู้ดำเนินการตามคำสั่งซื้อส่งคำสั่งซื้อไปยังร้านอาหารในภายหลัง ให้ส่งการอัปเดตไปยัง Google โดยใช้การดำเนินการอัปเดตคำสั่งซื้อแบบไม่พร้อมกัน
ในออบเจ็กต์ OrderUpdate
ของคำตอบการส่งคำสั่งซื้อของฝ่ายดำเนินการตามคำสั่งซื้อหรืออัปเดตคำสั่งซื้อแบบไม่พร้อมกันในภายหลัง ให้ใส่ estimatedFulfillmentTimeIso8601
โดยตั้งค่าดังนี้
- เมื่อสถานะคำสั่งซื้อเป็น
CREATED
หรือCONFIRMED
ให้ตั้งค่าเป็นเวลานำส่งหรือรับสินค้าตามที่ผู้ใช้กำหนดเวลาไว้สำหรับคำสั่งซื้อล่วงหน้า - เมื่อร้านอาหารหรือบริการมีเวลานำส่งโดยประมาณที่แม่นยำยิ่งขึ้น ให้ตั้งค่าเป็นเวลานำส่งหรือเวลารับสินค้าโดยประมาณ
ตัวอย่าง: SubmitOrderRequest ที่มีช่วงเวลาการนำส่ง
ตัวอย่างข้อมูลโค้ดด้านล่างแสดงคำขอส่งคำสั่งซื้อที่ระบุช่วงเวลาการสั่งซื้อล่วงหน้าที่ผู้ใช้เลือก
{
"inputs": [
{
"intent": "actions.intent.TRANSACTION_DECISION",
"arguments": [
{
"transactionDecisionValue": {
"order": {
"finalOrder": {
"cart": {
"notes": "Guest prefers their food to be hot when it is delivered.",
"merchant": {
"id": "https://www.exampleprovider.com/merchant/id1",
"name": "Cucina Venti"
},
"lineItems": [
{
"name": "Sizzling Prawns Dinner",
"type": "REGULAR",
"id": "sample_item_offer_id_1",
"offerId": "https://www.exampleprovider.com/menu/item/offer/id1",
"quantity": 1,
"price": {
"type": "ESTIMATE",
"amount": {
"currencyCode": "USD",
"units": "16",
"nanos": 750000000
}
}
}
],
"extension": {
"@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
"fulfillmentPreference": {
"fulfillmentInfo": {
"delivery": {
"deliveryTimeIso8601": "2017-12-14T18:30:00-07:00"
}
}
}
"contact": {
...
}
}
},
"totalPrice": {
"type": "ESTIMATE",
"amount": {
"currencyCode": "USD",
"units": "16",
"nanos": 750000000
}
},
"id": "sample_final_order_id",
"extension": {
// Send whole proposed order back.
"availableFulfillmentOptions": [
"fulfillmentInfo": {
"delivery": {
"deliveryTimeIso8601": "2017-12-14T18:30:00-07:00"
}
]
}
},
"googleOrderId": "sample_google_order_id",
"orderDate": "2017-07-17T12:00:00Z",
"paymentInfo": {
...
}
}
}
}
]
}
]
}
ตัวอย่าง: SubmitOrderResponse ยอมรับคำสั่งซื้อ
ตัวอย่างด้านล่างแสดงการตอบกลับคำสั่งซื้อที่ส่งมา ซึ่งการดำเนินการตามคำสั่งซื้อของคุณยืนยันว่าได้ยอมรับคำสั่งซื้อล่วงหน้าของผู้ใช้แล้ว
{
"expectUserResponse": false,
"finalResponse": {
"richResponse": {
"items": [
{
"structuredResponse": {
"orderUpdate": {
"actionOrderId": "sample_action_order_id",
"orderState": {
"state": "CREATED",
"label": "Order placed"
},
"receipt": {
"userVisibleOrderId": "userVisibleId1234"
},
"updateTime": "2017-07-17T12:00:00Z",
"orderManagementActions": [
...
],
"infoExtension": {
"@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
// Same as the user selected time.
"estimatedFulfillmentTimeIso8601": "2017-12-14T18:30:00-07:00"
}
}
}
}
]
}
}
}
ตัวอย่าง: SubmitOrderResponse ปฏิเสธคำสั่งซื้อเนื่องจากไม่มีช่วงเวลาที่สะดวก
ข้อมูลโค้ดด้านล่างแสดงตัวอย่างการตอบกลับคำสั่งซื้อที่ส่งเข้ามา ซึ่งการดำเนินการตามคำสั่งซื้อของคุณปฏิเสธคำสั่งซื้อล่วงหน้าของผู้ใช้เนื่องจากไม่มีช่วงเวลาที่สะดวก
{
"expectUserResponse": false,
"finalResponse": {
"richResponse": {
"items": [
{
"structuredResponse": {
"orderUpdate": {
"actionOrderId": "sample_action_order_id",
"orderState": {
"state": "REJECTED",
"label": "Unavailable slot"
},
"rejectionInfo": {
// Note that this UNAVAILABLE_SLOT is different from the enum
// with the same name proposed for FoodOrderError.
"state": "UNAVAILABLE_SLOT",
"label": "Unavailable slot"
},
"updateTime": "2017-07-17T12:00:00Z",
"orderManagementActions": [
...
]
}
}
}
]
}
}
}
ตัวอย่างการสั่งจองล่วงหน้า
คุณสามารถใช้ประเภท AdvanceServiceDeliveryHoursSpecification
เพื่อระบุเวลานำส่งหรือรับสินค้าเพื่อให้ผู้ใช้กำหนดเวลาสั่งซื้อล่วงหน้าได้
หมายเหตุ: คุณจะต้องระบุกรอบเวลา 2 กรอบเวลาแยกกันสำหรับการนำส่งบริการ ได้แก่ กรอบเวลาการสั่งซื้อซึ่งระบุเวลาที่ผู้ใช้สามารถสั่งซื้อได้ และกรอบเวลาการจำหน่ายซึ่งระบุเวลาที่ระบบจะดำเนินการตามคำสั่งซื้อ ออบเจ็กต์
จะกำหนดเวลาที่ผู้ใช้สั่งซื้อได้ เวลาดำเนินการตามคำสั่งซื้อย่อย (OpeningHoursSpecification
หรือ ServiceDeliveryHoursSpecification
) จะกำหนดเวลาที่จะทำตามคำสั่งซื้อได้AdvanceServiceDeliveryHoursSpecification
ตัวอย่างต่อไปนี้กำหนดเวลาทำการของบริการสำหรับรับคำสั่งซื้อล่วงหน้า โดยมีช่วงเวลาให้บริการ 15 นาที
{ "hoursAvailable": [ { "@type": "OpeningHoursSpecification", "opens": "T00:00:00", // Ordering available 24 hours "closes": "T23:59:59", "deliveryHours": [ { "@type": "ServiceDeliveryHoursSpecification", "opens": "T09:00:00", // ASAP orders b/w 9am and 8:59:59pm "closes": "T21:00:00", "deliveryLeadTime": { "value": "60", "unitCode": "MIN" } }, { "@type": "AdvanceServiceDeliveryHoursSpecification", "opens": "T10:00:00", // Delivery between 10AM and 7:59:59PM "closes": "T20:00:00", "serviceTimeInterval": "PT15M", // in slots spaced 15 minutes apart (ISO8601) "advanceBookingRequirement": { "minValue": 60, // The slot should be at least 60 mins away "maxValue": 8640, // but not more than 6 days away "unitCode": "MIN" } } ] } ] }
ตัวอย่างต่อไปนี้แสดงวิธีที่คุณอาจระบุให้เปิดบริการสำหรับคำสั่งซื้อวันเดียวกันในวันคริสต์มาส แต่ปิดบริการสำหรับคำสั่งซื้อล่วงหน้าที่กำหนดเวลาไว้ในวันนั้น ตัวอย่างนี้รองรับสถานการณ์ต่อไปนี้
- ผู้ใช้สามารถสั่งซื้อในวันที่ 25 ธันวาคมเพื่อให้นำส่งวันเดียวกัน
- ผู้ใช้สามารถสั่งซื้อล่วงหน้าในวันที่ 25 ธันวาคมสำหรับการนำส่งที่กำหนดเวลาไว้ในวันที่ 27 ธันวาคม
- ผู้ใช้ไม่สามารถสั่งซื้อล่วงหน้าในวันที่ 22 ธันวาคมสำหรับการนำส่งที่กำหนดไว้ในวันที่ 25 ธันวาคม
{ "specialOpeningHoursSpecification": { "@type": "AdvanceServiceDeliveryHoursSpecification", "validFrom": "2018-12-25T00:00:00-07:00", "validThrough": "2018-12-26T00:00:00-07:00", "opens": "T00:00:00", // No advance ordering "closes": "T00:00:00" } }
ตัวอย่างต่อไปนี้แสดงวิธีที่คุณอาจระบุให้ปิดบริการสำหรับคำสั่งซื้อวันเดียวกันหรือคำสั่งซื้อล่วงหน้าที่กำหนดเวลาไว้สำหรับวันคริสต์มาส แต่เปิดบริการสำหรับคำสั่งซื้อล่วงหน้าที่กำหนดเวลาไว้สำหรับวันถัดๆ ไป ตัวอย่างนี้รองรับสถานการณ์ต่อไปนี้
- ผู้ใช้ไม่สามารถสั่งซื้อในวันที่ 25 ธันวาคมเพื่อรับการนำส่งวันเดียวกัน
- ผู้ใช้สามารถสั่งซื้อล่วงหน้าในวันที่ 25 ธันวาคมสำหรับการนำส่งที่กำหนดเวลาไว้ในวันที่ 27 ธันวาคม
- ผู้ใช้ไม่สามารถสั่งซื้อล่วงหน้าในวันที่ 22 ธันวาคมสำหรับการนำส่งที่กำหนดไว้ในวันที่ 25 ธันวาคม
{ "specialOpeningHoursSpecification": [ { "@type": "ServiceDeliveryHoursSpecification", "validFrom": "2018-12-25T00:00:00-07:00", "validThrough": "2018-12-26T00:00:00-07:00", "opens": "T00:00:00", // No ASAP ordering on Christmas "closes": "T00:00:00" }, { "@type": "AdvanceServiceDeliveryHoursSpecification", "validFrom": "2018-12-25T00:00:00-07:00", "validThrough": "2018-12-26T00:00:00-07:00", "opens": "T00:00:00", // Orders cannot be scheduled for Christmas "closes": "T00:00:00" } ] }
ตัวอย่างบริการต่อไปนี้จะรับคำสั่งซื้อทุกวันตลอด 24 ชั่วโมงและนำส่งตั้งแต่เวลา 10:00-22:59 น. ในวันธรรมดา
... { "@type": "OpeningHoursSpecification", "opens": "T00:00:00", "closes": "T23:59:59", "deliveryHours": { "@type": "AdvanceServiceDeliveryHoursSpecification", "opens": "T10:00:00", // Delivery starts at 10:00AM "closes": "T15:00:00", // Delivery ends at 3:00PM. Delivery from 10AM-2:59:59PM. "dayOfWeek": [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" ], "serviceTimeInterval": "PT15M", // in slots spaced 15 minutes apart "advanceBookingRequirement": { "minValue": 60, // The slot should be at least 60 mins away "maxValue": 8640, // but not more than 6 days away "unitCode": "MIN" } } } ...
ตัวอย่างบริการต่อไปนี้จะรับคำสั่งซื้อทุกวันตั้งแต่ 08:00-16:59:59 น. และลูกค้าสามารถเลือกการนำส่งภายใน 1 ชั่วโมงหรือเลือกช่วงเวลาใดช่วงเวลาหนึ่งต่อไปนี้ก็ได้
... { "@type": "OpeningHoursSpecification", "opens": "T08:00:00", // Ordering opens at 8:00AM "closes": "T17:00:00", // Ordering closes at 5:00PM, last order at 4:59:59PM "deliveryHours": [ { "@type": "ServiceDeliveryHoursSpecification", "opens": "T08:00:00", "closes": "T17:00:00", "deliveryLeadTime": { "@type": "QuantitativeValue", "value": "60", // If no exact deliveryLeadTime, put a maximum time "unitCode": "MIN" } }, { "@type": "AdvanceServiceDeliveryHoursSpecification", "opens": "T08:00:00", "closes": "T17:00:00", "serviceTimeInterval": "PT15M", // in slots spaced 15 minutes apart "advanceBookingRequirement": { "minValue": 90, // The slot should be at least 90 mins away "maxValue": 8640, // but not more than 6 days away "unitCode": "MIN" } } ] } ...
ตัวอย่างต่อไปนี้แสดงกรณีที่ร้านค้าเปิด 08:00-16:59:59 น. ในวันธรรมดา แต่เปิด 08:00-18:59 น. ในวันสุดสัปดาห์ ระบบไม่รับคำสั่งซื้อทุกวันตลอด 24 ชั่วโมง
... { // On weekdays, ordering open from 8AM-4:59:59PM. "@type": "OpeningHoursSpecification", "opens": "T08:00:00", "closes": "T17:00:00", "dayOfWeek": [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" ], "deliveryHours": [ { // Fulfillment between 8AM-4:59:59PM on weekdays. "@type": "AdvanceServiceDeliveryHoursSpecification", "opens": "T08:00:00", "closes": "T17:00:00", "dayOfWeek": [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" ], "serviceTimeInterval": "PT15M", "advanceBookingRequirement": { "minValue": 60, "maxValue": 8640, "unitCode": "MIN" } }, { // Fulfillment between 8AM-6:59:59PM on weekends (even for orders placed on a // weekday). "@type": "AdvanceServiceDeliveryHoursSpecification", "opens": "T08:00:00", "closes": "T19:00:00", "dayOfWeek": [ "Saturday", "Sunday" ], "serviceTimeInterval": "PT15M", "advanceBookingRequirement": { "minValue": 60, "maxValue": 8640, "unitCode": "MIN" } } ] }, { // On weekends, one can place orders upto 6:59:59PM. "@type": "OpeningHoursSpecification", "opens": "T08:00:00", "closes": "T19:00:00", "dayOfWeek": [ "Saturday", "Sunday" ], "deliveryHours": [ { // But fulfillment on weekdays is only till 4:59:59PM. "@type": "AdvanceServiceDeliveryHoursSpecification", "opens": "T08:00:00", "closes": "T17:00:00", "dayOfWeek": [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" ], "serviceTimeInterval": "PT15M", "advanceBookingRequirement": { "minValue": 60, "maxValue": 8640, "unitCode": "MIN" } }, { // Fulfillment on weekends is till 6:59:59PM. "@type": "AdvanceServiceDeliveryHoursSpecification", "opens": "T08:00:00", "closes": "T19:00:00", "dayOfWeek": [ "Saturday", "Sunday" ], "serviceTimeInterval": "PT15M", "advanceBookingRequirement": { "minValue": 60, "maxValue": 8640, "unitCode": "MIN" } } ] } ...