Kullanıcıların teslim almayı planlamaları ve sipariş karşılama işlemleri için
önceden teslim etmeye çalışın. Bu desteği
sipariş karşılama, kullanıcıların çalışma saatlerini belirten bir hizmet envanteri feed'i oluşturun
envanter feed'i şemasında açıklandığı gibi, ön sipariş verme
(AdvanceServiceDeliveryHoursSpecification
).
Gelişmiş sipariş aralıkları
Google, 15 dakikalık artışlarla, en fazla 7 gün sürecek ön sipariş aralıkları önerir
bir restoran veya hizmetin sipariş karşılama sürelerine göre (
AdvanceServiceDeliveryHoursSpecification
) tıklayın.
Önerilen siparişi önceden slotlarını almak için
Ödeme sırasında FoodCartExtension
nesnesinin fulfillmentPreference
alanı:
PickupInfo.pickupTimeIso8601
DeliveryInfo.deliveryTimeIso8601
Ön siparişleri ödeme sırasında uygulayın
Aşağıdaki tabloda, sipariş karşılama ile ilgili uygulamalarınızın olası yolları kullanıcılar sipariş vermeye çalıştığında ödeme anında yanıt alın.
Senaryo | Sipariş karşılama davranışı |
---|---|
İstenen zaman aralığı için ön sipariş yerine getirilebilir. | P0M hükümlerini ("en kısa sürede") kabul edin veya
Şu öğeyle bir ProposedOrder oluşturarak FUTURE_SLOT alışveriş sepeti
seçebilirsiniz. Zaman aralığını kabul eden bir ödeme yanıtı örneği için bkz.
bu kod snippet'ini kullanın. |
İstenen zaman aralığı için ön sipariş yerine getirilemiyor. | Sipariş karşılama işleminiz şu işlemleri gerçekleştirmelidir:
Alternatif alanlar öneren bir ödeme yanıtı örneği için bu kod snippet'ini kullanın. |
Sipariş karşılama için alternatif slotlar
Ödeme sırasında, Google'ın önerdiği ön sipariş slotları uygun değilse
sipariş karşılama, CheckoutResponseMessage
kullanarak alternatifler önerebilir
nesnesini tanımlayın.
Alternatif ön sipariş aralıkları belirtmek için ödeme isteğine
FoodErrorExtension
ve aşağıdaki değerleri ayarlayın:
foodOrderErrors
parametresinde hata türünü belirtin (ör.UNAVAILABLE_SLOT
,NO_CAPACITY
veyaCLOSED
).correctedProposedOrder
parametresinde alternatifP0M
veyaavailableFulfillmentOptions
üzerindenFUTURE_SLOT
değer.
Alternatif zaman aralıkları, sipariş tarihinden itibaren sonraki 7 gün boyunca olmalıdır. yerleşim ve kullanıcının istediği alışveriş sepetinin gönderilebileceği tüm alanları bilmek önemlidir.
Örneğin, öğle yemeği spesiyallerinin yalnızca pazartesiden cumaya sunulduğunu varsayalım saat 11:00 ile 13:00 arasında olacak. Kullanıcı, alışveriş sepetine öğle yemeği spesiyalleri eklemeye çalışıyor. seçilen zaman aralığı kullanılamıyor. Bu durumda, sipariş karşılama Öğle yemeği spesiyallerini alışveriş sepetinde tutma ve yalnızca 11:00 ile 13:00 arası zaman aralıklarını değiştirme sonraki 7 gün boyunca
correctedProposedOrder.Cart.fulfillmentPreference
nesnesini atlamalısınız
yanıt olarak ekleyebilirsiniz.
Boş zaman aralığı yoksa veya restoran ya da hizmet uygun değilse
ön siparişleri desteklemenize rağmen, herhangi bir
correctedProposedOrder
Sipariş karşılama ile Google arasındaki JSON mesajları için aşağıdaki örneklere bakın ön sipariş için ödeme isteği ve yanıt akışında, Restoran veya hizmet sunulduğunda ön sipariş verilebilir.
Örnek: Teslimat aralığı olan bir ödeme isteği
Aşağıdaki snippet'te, ön sipariş içeren bir ödeme isteği örneği gösterilmektedir. teslimat zaman aralığı.
{
"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": {
...
}
}
}
}
]
}
]
}
Örnek: CheckoutResponse, zaman aralığını kabul ediyor
Aşağıdaki snippet'te, sipariş karşılamanın önerilen ön sipariş aralıklarını kabul eder.
{
"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": {
...
}
}
}
}
]
}
}
}
Örnek: Alternatif yuvalarla CheckoutResponse
Aşağıdaki snippet'te, sipariş karşılamanın
alternatif gelişmiş sipariş aralıkları önerir. Lütfen
correctedProposedOrder.Cart.fulfillmentPreference
nesne şurada atlanmalıdır:
yanıt verirsiniz.
{
"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": {
...
}
}
}
}
]
}
}
}
Sipariş gönderirken ön siparişleri uygulama
Sipariş gönderilirken, ön sipariş aralıklarıyla ilgili bir sorun varsa
SubmitOrderResponseMessage
bunun nedenini (ör.
UNAVAILABLE_SLOT
veya UNKNOWN
) RejectionInfo
nesnesine eklenmelidir.
Siparişin CREATED
olan durumunu CONFIRMED
olarak güncellemek için
OrderState
nesne olarak kabul edilir. Şunu dahil et:
belirli zaman aralığını seçin.
Sipariş karşılama işleminiz siparişi daha sonra restorana gönderiyorsa Google'a Eşzamansız Sipariş Güncelleme İşlemi'ni kullanarak güncelleyebilirsiniz.
Sipariş karşılama yanıtınızın OrderUpdate
nesnesinde veya
daha sonra eşzamansız sipariş güncellemelerinin yanı sıra
estimatedFulfillmentTimeIso8601
değeri şu şekilde ayarlanmış olmalıdır:
- Sipariş durumu
CREATED
veyaCONFIRMED
olduğunda değeri kullanıcının ön siparişi için planladığı teslimat veya teslim alma zamanı. - Restorandan daha doğru bir tahmini teslimat süresi sunulduğunda değeri, tahmini teslimat veya teslim alma süresine ayarlayın.
Örnek: Gönderim aralığıyla Send OrderRequest
Aşağıdaki snippet, kullanıcının seçtiği gelişmiş sipariş aralığına göre değişiklik gösterir.
{
"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": {
...
}
}
}
}
]
}
]
}
Örnek: Send OrderResponse'un siparişi kabul etmesi
Aşağıdaki snippet'te, sipariş karşılama, kullanıcının ön siparişini kabul ettiğini onaylar.
{
"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"
}
}
}
}
]
}
}
}
Örnek: SubmitOrdersResponse, yuvanın kullanılamaması nedeniyle siparişi reddediyor
Aşağıdaki snippet'te, sipariş karşılama, müsait olmayan bir zaman aralığı nedeniyle kullanıcının ön siparişini reddeder.
{
"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": [
...
]
}
}
}
]
}
}
}
Ön sipariş örnekleri
Aşağıdakileri belirtmek için AdvanceServiceDeliveryHoursSpecification
türü kullanılabilir:
Kullanıcıların siparişlerini önceden planlayabilmeleri için teslimat veya teslim alma saatleri.
Not: Belirtmeniz gereken iki ayrı zaman aralığı vardır
kullanıcıların sipariş tamamlaması için ne zaman sipariş verebileceğini belirten sipariş penceresi
sipariş ve siparişin ne zaman karşılanacağını belirten sipariş karşılama dönemi. İlgili içeriği oluşturmak için kullanılan
nesnesi, kullanıcının
vereyim. Çocuklar için sipariş karşılama süreleri (OpeningHoursSpecification
veya ServiceDeliveryHoursSpecification
) karar vermeniz gerekir
karşılandı.AdvanceServiceDeliveryHoursSpecification
Aşağıdaki örnekte bir hizmetin ön siparişleri kabul etmek için geçerli saatleri tanımlanmaktadır. 15 dakikalık servis aralığıyla çalışır.
{ "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" } } ] } ] }
Aşağıdaki örnekte, hizmetin şu anda açık olduğunu nasıl belirtebileceğiniz gösterilmektedir yılbaşı gününde aynı gün geçerli siparişler, ancak ileri tarihli siparişler için kapalı iletişim kurmuştu. Bu örnek aşağıdaki senaryoları destekler:
- Kullanıcılar, aynı gün teslimat için 25 Aralık'tan önce sipariş verebilir.
- Kullanıcılar, planlanan teslimat için 25 Aralık'ta ön sipariş verebilir Bu, 27 Aralık için.
- Kullanıcılar, planlanan teslimat için 22 Aralık'ta ön sipariş veremez e-posta yazacaksınız.
{ "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" } }
Aşağıdaki örnekte, hizmetin kapalı olduğunu nasıl belirtebileceğiniz gösterilmektedir aynı gün içinde veya Noel günü için planlanmış ancak şu anda açık olan siparişlerde: ileri bir gün için planlanan gelişmiş siparişler. Bu örnek, aşağıdakini destekler senaryolar:
- Kullanıcılar, aynı gün teslimat için 25 Aralık'tan itibaren sipariş veremez.
- Kullanıcılar, planlanan teslimat için 25 Aralık'ta ön sipariş verebilir Bu, 27 Aralık için.
- Kullanıcılar, planlanan teslimat için 22 Aralık'ta ön sipariş veremez e-posta yazacaksınız.
{ "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" } ] }
Aşağıdaki örnek Hizmet, 7/24 siparişleri kabul eder ve şuradan teslimat yapar: Hafta içi 10:00-14: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" } } } ...
Aşağıdaki örnek Hizmet, her gün 08:00-16:59:59 saatleri arasında siparişleri kabul etmektedir ve müşteriler, teslimat için bir saat içinde yuvalar:
... { "@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" } } ] } ...
Aşağıdaki örnekte, mağazanın 08:00-16:59:59 saatleri arasında açık olduğu bir vaka gösterilmektedir hafta sonları ise 08:00-18:59 arasında yapılır. 7/24 sipariş kabul edilmez.
... { // 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" } } ] } ...