उपयोगकर्ताओं को खाना ऑर्डर करने की सुविधा के साथ, पिकअप और डिलीवरी के लिए शेड्यूल करने की सुविधा भी दी जा सकती है. ऑर्डर पूरा करने की प्रोसेस में इस सुविधा को लागू करने से पहले, सेवा का एक इन्वेंट्री फ़ीड बनाएं. इसमें, इन्वेंट्री फ़ीड स्कीमा (AdvanceServiceDeliveryHoursSpecification
) में बताए गए समय के हिसाब से, उपयोगकर्ताओं के लिए पहले से ऑर्डर करने की सुविधा जोड़ें.
पहले से ऑर्डर करने के लिए स्लॉट
Google, ऑर्डर करने के लिए 15 मिनट के अंतराल वाले स्लॉट को 7 दिन पहले तक बुक करने का सुझाव देता है. यह सुझाव, रेस्टोरेंट या सेवा के लिए तय किए गए समय (AdvanceServiceDeliveryHoursSpecification
में बताए गए) के आधार पर दिया जाता है.
ऑर्डर करने के लिए सुझाए गए स्लॉट देखने के लिए, चेकआउट के समय FoodCartExtension
ऑब्जेक्ट के fulfillmentPreference
फ़ील्ड में इन वैल्यू का इस्तेमाल करें:
PickupInfo.pickupTimeIso8601
DeliveryInfo.deliveryTimeIso8601
चेकआउट के समय, पहले से ऑर्डर करने की सुविधा लागू करना
नीचे दी गई टेबल में, उन तरीकों के बारे में बताया गया है जिनकी मदद से, उपयोगकर्ताओं के ऑर्डर करने पर, चेकआउट के समय ऑर्डर की डिलीवरी के बारे में जानकारी दी जा सकती है.
स्थिति | ऑर्डर पूरा करने का तरीका |
---|---|
अनुरोध किए गए स्लॉट के लिए, पहले से ऑर्डर किया जा सकता है. | उसी स्लॉट के साथ ProposedOrder बनाकर, P0M ("जल्द से जल्द") या
FUTURE_SLOT कार्ट स्वीकार करें. स्लॉट स्वीकार करने वाले चेकआउट रिस्पॉन्स का उदाहरण देखने के लिए, यह कोड स्निपेट देखें. |
अनुरोध किए गए स्लॉट के लिए, पहले से ऑर्डर नहीं किया जा सकता. | आपके फ़ुलफ़िलमेंट पार्टनर को ये काम करने चाहिए:
चेकआउट के लिए, अन्य स्लॉट का सुझाव देने वाले रिस्पॉन्स का उदाहरण देखने के लिए, यह कोड स्निपेट देखें. |
ऑर्डर पूरा करने के लिए अन्य स्लॉट
अगर चेकआउट के समय, Google के सुझाए गए ऑर्डर करने के स्लॉट सही नहीं हैं, तो आपके फ़ुलफ़िलमेंट पार्टनर, CheckoutResponseMessage
ऑब्जेक्ट का इस्तेमाल करके, अन्य विकल्पों का सुझाव दे सकते हैं.
प्री-ऑर्डर के लिए अन्य स्लॉट की जानकारी देने के लिए, चेकआउट के अनुरोध का जवाब FoodErrorExtension
के साथ दें. साथ ही, ये वैल्यू सेट करें:
foodOrderErrors
पैरामीटर में, गड़बड़ी का टाइप बताएं. जैसे,UNAVAILABLE_SLOT
,NO_CAPACITY
याCLOSED
.correctedProposedOrder
पैरामीटर में,availableFulfillmentOptions
की मदद से वैकल्पिकP0M
याFUTURE_SLOT
वैल्यू दें.
वैकल्पिक स्लॉट, ऑर्डर प्लेस करने के समय से अगले सात दिनों के लिए होने चाहिए. साथ ही, उनमें वे सभी स्लॉट शामिल होने चाहिए जिनमें उपयोगकर्ता के अनुरोध किए गए कार्ट को पूरा किया जा सकता है.
उदाहरण के लिए, मान लें कि लंच के खास ऑफ़र सिर्फ़ सोमवार से शुक्रवार, सुबह 11 बजे से दोपहर 1 बजे तक उपलब्ध हैं. इसके बाद, उपयोगकर्ता अपने कार्ट में लंच स्पेशल जोड़ने की कोशिश करता है, लेकिन उसका चुना गया स्लॉट उपलब्ध नहीं होता. इस मामले में, आपके फ़ुलफ़िलमेंट पार्टनर को कार्ट में लंच के खास ऑफ़र बनाए रखने चाहिए. साथ ही, अगले सात दिनों के लिए सिर्फ़ सुबह 11 बजे से दोपहर 1 बजे तक के स्लॉट दिखाने चाहिए
आपको अपने जवाब में correctedProposedOrder.Cart.fulfillmentPreference
ऑब्जेक्ट को शामिल नहीं करना चाहिए.
अगर कोई स्लॉट उपलब्ध नहीं है या रेस्टोरेंट या सेवा, पहले से ऑर्डर करने की सुविधा नहीं देती है, तो आपको correctedProposedOrder
नहीं देना होगा.
अगर रेस्टोरेंट या सेवा, पहले से ऑर्डर लेने के लिए उपलब्ध है, तो चेकआउट के अनुरोध और जवाब के फ़्लो के दौरान, ऑर्डर पूरा करने वाली कंपनी और Google के बीच JSON मैसेज के लिए नीचे दिए गए उदाहरण देखें.
उदाहरण: डिलीवरी स्लॉट के साथ 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
को RejectionInfo
ऑब्जेक्ट में वजह (जैसे, UNAVAILABLE_SLOT
या UNKNOWN
) शामिल करनी चाहिए.
जब सेवा देने वाली कंपनी ऑर्डर स्वीकार कर ले, तो ऑर्डर की स्थिति को OrderState
ऑब्जेक्ट में CREATED
से CONFIRMED
पर अपडेट करें. उपयोगकर्ता को पुष्टि करने वाले ईमेल में, चुना गया टाइम स्लॉट शामिल करें.
अगर ऑर्डर पूरा करने वाली कंपनी, रेस्टोरेंट को ऑर्डर बाद में भेजती है, तो ऑर्डर अपडेट करने के लिए एक साथ कई कार्रवाइयां करने की सुविधा का इस्तेमाल करके, 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
टाइप का इस्तेमाल, डिलीवरी या पिकअप के समय की जानकारी देने के लिए किया जा सकता है, ताकि उपयोगकर्ता अपना ऑर्डर पहले से शेड्यूल कर सकें.
ध्यान दें: सेवा देने के लिए, आपको दो अलग-अलग समयावधि तय करनी होंगी: ऑर्डर करने की समयावधि, जिसमें यह बताया जाता है कि उपयोगकर्ता ऑर्डर कब कर सकते हैं और ऑर्डर पूरा करने की समयावधि, जिसमें यह बताया जाता है कि ऑर्डर कब पूरा किया जाएगा.
ऑब्जेक्ट से यह तय होता है कि उपयोगकर्ता ऑर्डर कब कर सकता है. इसके चाइल्ड फ़ुलफ़िलमेंट टाइम (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 दिसंबर को डिलीवरी के लिए, पहले से ऑर्डर कर सकते हैं.
- उपयोगकर्ता, 25 दिसंबर को डिलीवरी के लिए 22 दिसंबर को पहले से ऑर्डर नहीं कर सकते.
{ "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 दिसंबर को डिलीवरी के लिए, पहले से ऑर्डर कर सकते हैं.
- उपयोगकर्ता, 25 दिसंबर को डिलीवरी के लिए 22 दिसंबर को ऐडवांस ऑर्डर नहीं कर सकते.
{ "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" } ] }
यहां दी गई सेवा के लिए, ऑर्डर 24x7 स्वीकार किए जाते हैं. साथ ही, यह सेवा, आम तौर पर सोमवार से शुक्रवार तक सुबह 10 बजे से रात 2:59: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" } } } ...
यहां दी गई सैंपल सेवा, हर दिन सुबह 8 बजे से शाम 4:59:59 बजे तक ऑर्डर स्वीकार करती है. साथ ही, ग्राहक एक घंटे के अंदर डिलीवरी का विकल्प चुन सकते हैं या इनमें से किसी एक स्लॉट को चुन सकते हैं:
... { "@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" } } ] } ...
यहां दिए गए सैंपल में एक ऐसा उदाहरण दिया गया है जिसमें स्टोर, सोमवार से शुक्रवार तक सुबह 8 बजे से शाम 4:59:59 बजे तक खुला रहता है. हालांकि, शनिवार और रविवार को सुबह 8 बजे से शाम 6:59 बजे तक खुला रहता है. ऑर्डर 24x7 स्वीकार नहीं किए जाते.
... { // 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" } } ] } ...