Promosyonlar

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:

  1. Promosyon entegrasyonunu ayarlayın. (Google sponsorluğundaki promosyon kodlarını kullanmıyorsanız bu adımı atlayın.)
  2. Promosyonlarla ödeme özelliğini uygulama.
  3. 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 nesnesinden Contact ayrıntılarını (kullanıcı e-posta adresi gibi) kullanarak SubmitOrderRequestMessage 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."
      }
    ]
  }
}