Promosyonlar, hem sizin hem de Google'ın, müşterileri indirimli fiyatla yemek siparişi hizmetinizi denemeye teşvik etmesini sağlar. Google, Sipariş Sonrası Uçtan Uca İşlemlerinizi promosyon yönetimi sisteminizle entegre etmenizi destekler.
Aşağıdaki indirim türleri desteklenir:
- Google sponsorluğundaki promosyon kodları: Google tarafından otomatik olarak önceden doldurulan veya kullanıcılar tarafından girilen promosyon kodları.
- Üçüncü taraf sponsorluğundaki promosyon kodları: Yemek siparişi hizmetiniz tarafından sağlanan ve kullanıcıların girmesi gereken promosyon kodları.
- Üçüncü taraf sponsorluğundaki otomatik indirimler: Yemek siparişi hizmetinizin promosyon kodu olmadan otomatik olarak uyguladığı indirimler.
İndirim türüne bakılmaksızın Google, indirimi doğrulamak ve uygulamak için Yemek Siparişi sipariş tamamlama hizmetinize ödeme çağrısı yapar.
Yemek siparişi hizmetinin geliştiricisi olarak geçerli promosyon kodları için indirimleri hesaplamak veya geçersiz promosyon kodları için hata göndermek, promosyon kodu kullanma sınırlamalarını yönetmek ve geri ödemeyle ilgili muhasebe verilerini izlemek için uygulamanızda bazı değişiklikler yapmanız gerekir.
Promosyonlar nasıl işlenir?
Promosyonları destekleyen bir sipariş tamamlama işlemi uygulamak için aşağıdakileri yapın:
- Promosyon entegrasyonunu ayarlayın. (Google sponsorluğundaki promosyon kodlarını kullanmıyorsanız bu adımı atlayın.)
- Promosyonlarla ödeme özelliğini uygulama.
- Promosyonlarla sipariş gönderme özelliğini uygulayın.
Promosyon entegrasyonunu ayarlama
Bu bölümde, Google sponsorluğundaki promosyon kodlarını kullanmayı planlıyorsanız promosyon entegrasyonunu nasıl ayarlayacağınız açıklanmaktadır. Yalnızca üçüncü taraf sponsorluğundaki promosyon kodlarını veya indirimleri desteklemek istiyorsanız kendi ayarlarınızı belirtebilir ve bu bölümü atlayabilirsiniz.
Google, sponsor olunacak promosyonun türünü belirtir ve entegrasyonu ayarlamak için sizinle iletişime geçer. Aşağıdaki bilgileri sağlarız:
- İndirim tutarı.
- Minimum alışveriş sepeti değeri.
- Promosyon kodlarının kullanılacağı başlangıç ve bitiş tarihi.
- Promosyon kampanyası için bütçelenen maksimum dolar tutarı.
- Promosyon kodlarının kullanılabileceği maksimum sayı.
Promosyon kodlarına örnekler:
FopaNewUser
: Maksimum 50 ABD doları indirimle %10 (sabit yüzde).FopaMoreThan50
: 10 TL (sabit tutarda indirim).
Google, kodun uygulanmasını durdurmaya karar verirse sizinle iletişime geçilir.
Ödemeleri ayarlama
Ödeme sürecini ayarlamak için Google EAP danışmanınızla iletişime geçin. Google, yalnızca nihai sipariş durumu aşağıdakilerden biriyse Google sponsorluğundaki promosyon kodlarını içeren işlemler için geri ödeme yapar:
CONFIRMED
IN_TRANSIT
READY_FOR_PICKUP
IN_PREPARATION
FULFILLED
Promosyonlarla ödeme özelliğini uygulama
Bu bölümde, promosyon kodlarını (Google sponsorluğunda veya üçüncü taraf sponsorluğunda) desteklediğinizde ödeme işlemini nasıl uygulayacağınız açıklanmaktadır. Üçüncü taraf sponsorluğundaki otomatik indirimler için yalnızca CheckoutResponseMessage
içindeki indirim satır öğesini döndürmeniz gerekir (promosyon kodu kontrolü gerekmez).
Google, yemek siparişi karşılama sırasında CheckoutRequestMessage
biçiminde tek bir promosyon kodu gönderir. Kullanıcılar, tekrarlanan ödeme isteklerinde alışveriş sepetlerini veya promosyon kodlarını değiştirebilir.
Kullanıcının ilk kez promosyon kodu uygulayıp uygulamadığını kontrol etmek için aşağıdakileri yapın:
- Google sponsorluğundaki promosyon kodları: Google, geri gelen bir kullanıcının aynı promosyon kodunu tekrar kullanıp kullanmadığını kontrol eder. Bunun için herhangi bir işlem yapmanız gerekmez.
- Üçüncü taraf sponsorluğundaki promosyon kodları veya otomatik indirimler: Hesap bağlama ve kullanıcının etkinleştirme işlemini uygulamadıysanız ödeme isteği işlenirken kullanıcının ayrıntılarını kontrol edemezsiniz. Bunun yerine,
FoodCartExtension
nesnesindenContact
ayrıntılarını (kullanıcı e-posta adresi gibi) kullanarakSubmitOrderRequestMessage
işleme sırasında bu durumu kontrol edin.
En son ödeme isteğine göre hata tespit edin veya siparişinizi yerine getirirken indirimleri hesaplayın. Bunu yaparken sisteminizin eski durum bilgilerini tutmadığından emin olun.
Promosyon kodunun geçerliliğini kontrol etme
Sağlayıcınız, belirli bir promosyon kodunun geçerliliğini veya uygunluğunu son kullanma tarihi, maksimum kullanım ve maksimum indirim gibi belirtilen şartlara göre kontrol etmelidir. Ardından, hesaplanan indirimle CheckoutResponseMessage
içinde uygun şekilde yanıt verin veya promosyon kodu uygulanamıyorsa foodOrderErrors
ile yanıt verin. Promosyon kodunda hata tespit ederseniz Promosyonlarla ilgili hataları ele alma bölümünde açıklanan süreci uygulayın.
Aşağıdaki snippet'te, promosyon kodu için bir örnek foodOrderErrors
gösterilmektedir.
correctedProposedOrder
öğesinin promotions düğümünü içermediğinden emin olun.
"foodOrderErrors": [
{
"error": "PROMO_NOT_APPLICABLE",
// Copy promotions.coupon string from CheckoutRequest as the ID
"id": "GoogleNewUser",
"description": "Promotion could not be applied"
}
],
"correctedProposedOrder": {// required ...},
"paymentOptions": {// required ...}
İndirimleri hesaplama
Promosyon kodu geçerliyse yerine getirme işleminiz, dolar cinsinden indirim değerini hesaplamalı ve otherItems
dizisinde hesaplanan indirim değerini içeren bir CheckoutResponseMessage
döndürmelidir. Toplam sipariş fiyatı negatif olmamalıdır. İndirim tutarı alışveriş sepeti tutarını aşarsa toplam sipariş fiyatını 0 TL yapmak için maksimum ABD doları tutarını geri gönderin.
Aşağıdaki snippet'te promosyon indirimi için örnek bir CheckoutResponseMessage
bölümü gösterilmektedir:
"proposedOrder": {
"otherItems": [
. . .
{
"name": "Discount",
// copy promotions.coupon field from CheckoutRequest as the id
"id": "GoogleNewUser",
"price": {
"type": "ESTIMATE",
"amount": {
"currencyCode": "USD",
"units": "-3",
"nanos": -500000000
}
},
"type": "DISCOUNT",
}
]
}
Kullanılmayan promosyonları iptal etme
Her ödeme isteği, sipariş gönderme isteğiyle sonuçlanmaz. Tahsilat ekibiniz ödeme sırasında bir promosyon için açık provizyon oluşturuyorsa belirli bir süre sonra sipariş gönderme üzerinden promosyon için hak talebinde bulunulmazsa açık provizyonu iptal edecek bir mekanizmanız olduğundan emin olun. Bu, yemek siparişi hizmetinizin doğru kampanya kotasını korumasını sağlar.
Promosyonlarla ilgili hataları işleme
CheckoutRequestMessage
'ten gelen promosyon kodunun geçerli olmadığını (örneğin, süresi dolmuş, geçersiz veya tanınmıyor) belirlerseniz geçerli hata kodunu ve neden metnini içeren bir foodOrderError
ile birlikte correctedProposedOrder
ve paymentOptions
nesnelerini içeren bir CheckoutResponseMessage
gönderin.
Tahsilatınız aynı istek için birden fazla promosyon kodu hatası bulursa kurtarılamayan hataları, kurtarılabilir hataları geri göndermeden önce geri gönderin. Kontrollerinize aşağıdaki şekilde öncelik verin (yüksek öncelikten düşük önceliğe):
PROMO_NOT_RECOGNIZED
PROMO_EXPIRED
PROMO_USER_INELIGIBLE
PROMO_ORDER_INELIGIBLE
PROMO_NOT_APPLICABLE
Örnekler
Aşağıda, promosyon kodu içeren bir ödeme isteği örneği verilmiştir:
{ "accessToken": "test_access_token", "lastSeen": "2018-06-22T19:25:39Z" }, "conversation": { "conversationId": "XYZ" }, "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": "Falafel Bite" }, "lineItems": [ { "name": "Falafel Tray", "type": "REGULAR", "id": "sample_item_offer_id_1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 950000000 } }, "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "promotions": [ { "coupon": "FOPAACTIVECODE" } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } } } } } ] } ], "directActionOnly": true, "isInSandbox": true }
Promosyon kodu geçerliyse karşılama işleminden gelen ödeme yanıtını aşağıda bulabilirsiniz:
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "checkoutResponse": { "proposedOrder": { "otherItems": [ { "name": "Delivery Fees", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } }, "type": "DELIVERY" }, { "name": "Tax", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 370000000 } }, "type": "TAX" }, { "name": "Promotion", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5", "nanos": 0 } }, "id": "FOPAACTIVECODE", "type": "DISCOUNT" } ], "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Falafel Tray", "type": "REGULAR", "id": "2529103", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 950000000 } }, "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "promotions": [ { "coupon": "FOPAACTIVECODE" } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } } } }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 820000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2018-06-22T19:30:52.596Z" } ] } }, "orderOptions": {}, "paymentOptions": { "googleProvidedOptions": { "tokenizationParameters": { "tokenizationType": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:publishableKey": "example_stripe_client_key", "stripe:version": "2017-04-06" } }, "supportedCardNetworks": [ "AMEX", "DISCOVER", "MASTERCARD", "VISA", "JCB" ], "prepaidCardDisallowed": true } } } } } ], "suggestions": [] } } }
Promosyon kodu geçersizse ödeme yanıtı örneğini aşağıda bulabilirsiniz:
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "error": { "foodOrderErrors": [ { "error": "PROMO_NOT_RECOGNIZED", "id": "SOMEPROMO", "description": "Coupon not found" } ], "correctedProposedOrder": { "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "id": "sample_item_offer_id_4", "name": "Prawns Biryani", "type": "REGULAR", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "18", "nanos": 750000000 } }, "offerId": "https://www.exampleprovider.com/menu/item/offer/id4", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } }, "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension" }, "promotions": [] }, "otherItems": [ { "name": "Tax", "type": "TAX", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 650000000 } } } ], "termsOfServiceUrl": "https://exampleprovider.com/terms", "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "20", "nanos": 400000000 } }, "extension": { "availableFulfillmentOptions": [ { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "PT0M" } } } ], "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension" } }, "paymentOptions": { "googleProvidedOptions": { "prepaidCardDisallowed": false, "billingAddressRequired": true, "tokenizationParameters": { "tokenizationType": "PAYMENT_GATEWAY", "parameters": { "gateway": "braintree", "braintree:apiVersion": "v1", "braintree:sdkVersion": "1.4.0", "braintree:merchantId": "example_braintree_merchant_ID", "braintree:clientKey": "example_braintree_client_key", "braintree:authorizationFingerprint": "example_braintree_fingerprint" } } } }, "@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension" } } } ] } } }
Promosyonlarla sipariş gönderme özelliğini uygulama
Sipariş karşılama gönderiminizde, kullanıcının ilk kez promosyon kodu uygulayıp uygulamadığını kontrol edin. SubmitOrderRequestMessage
işleme sırasında, FoodCartExtension
nesnesinden Contact
ayrıntılarını (kullanıcı e-posta adresi gibi) kullanarak bunu kontrol edebilirsiniz.
Ayrıca promosyon kodunun geçerliliğini tekrar kontrol etmeniz gerekir:
- Kod geçerliyse: Siparişi onaylayın ve kuponu kullanılmış olarak işaretleyin.
- Kod artık geçerli değilse: Siparişi
PROMO_NOT_APPLICABLE
hatasıyla reddedin.FoodOrderUpdateExtension
ile aynı mekanizmayı kullanarak belirli bir ret nedeni belirtebilirsiniz.
Örnekler
Tanıtım içeren bir sipariş gönderme isteği örneğini aşağıda bulabilirsiniz:
{ "conversation": { "conversationId": "example_conversation_ID" }, "inputs": [ { "intent": "actions.intent.TRANSACTION_DECISION", "arguments": [ { "transactionDecisionValue": { "order": { "finalOrder": { "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Falafel Tray", "type": "REGULAR", "id": "sample_item_offer_id_1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 950000000 } }, "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "promotions": [ { "coupon": "FOPAACTIVECODE" } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } }, "contact": { "displayName": "Food Ordering", "email": "example.provider@gmail.com", "phoneNumber": "+19993334444", "firstName": "Food", "lastName": "Ordering" } } }, "otherItems": [ { "name": "Delivery Fees", "type": "DELIVERY", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } } }, { "name": "Tax", "type": "TAX", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 370000000 } } }, { "name": "Promotion", "type": "DISCOUNT", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5" } }, "id": "FOPAACTIVECODE" }, { "name": "Subtotal", "type": "SUBTOTAL", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 950000000 } } }, { "name": "Tip", "type": "GRATUITY", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD" } } } ], "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 820000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension" } }, "googleOrderId": "example_google_order_ID", "orderDate": "2018-06-22T19:30:59.502Z", "paymentInfo": { "displayName": "example_display_name", "googleProvidedPaymentInstrument": { "instrumentToken": "example_instrument_token" }, "paymentType": "PAYMENT_CARD" }, "locale": "en" } } } ] } ], "directActionOnly": true, "isInSandbox": true }
Promosyon kodu geçerliyse sipariş gönderme işlemine karşılık gelen sipariş gönderme yanıtı örneğini aşağıda bulabilirsiniz:
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "orderUpdate": { "actionOrderId": "example_action_order_ID", "orderState": { "state": "CREATED", "label": "Order is created with partner." }, "updateTime": "2018-06-22T19:31:01.556Z", "orderManagementActions": [ { "type": "CALL_RESTAURANT", "button": { "title": "Call Us", "openUrlAction": { "url": "tel:+1-111-111-1111" } } }, { "type": "EMAIL", "button": { "title": "Email Us", "openUrlAction": { "url": "mailto:example.provider@gmail.com" } } }, { "type": "CUSTOMER_SERVICE", "button": { "title": "Customer Service", "openUrlAction": { "url": "http://www.google.com" } } } ] } } } ], "suggestions": [] } } }
Promosyon kodu geçersizse sipariş gönderme yanıtının bir örneğini aşağıda bulabilirsiniz:
"orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "REJECTED", "label": "Order rejected." }, "updateTime": "2017-05-10T02:30:00.000Z", "rejectionInfo": { "type": "PROMO_NOT_APPLICABLE", "reason": "Sorry, there's something wrong. Try another code?" }, "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:example.provider@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+19993334444" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "foodOrderErrors": [ { "error": "PROMO_USER_INELIGIBLE", "description": "Sorry, you can only use this promotion once." } ] } }