Tanıtımlar

Promosyonlar, sizin ve Google'ın müşterileri yemek siparişi hizmetinizi indirimli fiyatlarla denemeye teşvik etmesi için bir yol sunar. Google, Order with Google Actions'ın promosyon yönetim sisteminize entegre edilmesini destekler.

Aşağıdaki indirim türleri desteklenir:

  • Google sponsorluğunda promosyon kodları: Google tarafından otomatik olarak doldurulan veya kullanıcılar tarafından girilen promosyon kodları.
  • Üçüncü taraf sponsorlu promosyon kodları: Kullanıcıların girdiği, yemek siparişi hizmeti tarafından sağlanan promosyon kodlarıdır.
  • Üçüncü taraf sponsorlu otomatik indirimler: Yemek siparişi hizmetinizin promosyon kodu olmadan otomatik olarak uyguladığı indirimler.

İndirimin türü ne olursa olsun Google, indirimi doğrulamak ve uygulamak için yemek siparişi karşılama işleminizi gerçekleştirir.

Bir yemek siparişi hizmetinin geliştiricisi olarak, geçerli promosyon kodları için indirimleri hesaplamak veya geçersiz promosyon kodlarıyla ilgili hataları göndermek, promosyon kodu kullanma sınırlarını yönetmek ve geri ödeme için muhasebe verilerini izlemek üzere uygulamanızda bazı değişiklikler yapmanız gerekir.

Promosyonlar nasıl işlenir?

Promosyonları destekleyen bir sipariş karşılama işlemi uygulamak için aşağıdakileri yapın:

  1. Promosyon entegrasyonunu ayarlayın. (Google'ın sponsor olduğu promosyon kodlarını kullanmıyorsanız bu adımı atlayın.)
  2. Promosyonlarla ödeme işlemini uygulayın.
  3. Siparişi promosyonlarla birlikte uygulayın.

Promosyon entegrasyonu oluşturun

Bu bölümde, Google sponsorlu promosyon kodlarını kullanmayı planlıyorsanız promosyon entegrasyonunun nasıl ayarlanacağı açıklanmaktadır. Yalnızca bir üçüncü tarafın sponsor olduğu promosyon kodlarını veya indirimleri desteklemek istiyorsanız kendi ayarlarınızı belirtebilir ve bu bölümü atlayabilirsiniz.

Google, sponsorluk yapılacak promosyon türünü belirtir ve entegrasyonu ayarlamak için sizinle iletişime geçer. Aşağıdaki ayrıntıları sağlıyoruz:

  • İndirim tutarı.
  • Minimum alışveriş sepeti değeri.
  • Promosyon kodlarını kullanmaya başlamak için başlangıç ve bitiş tarihi.
  • Promosyon kampanyası için harcanan maksimum dolar tutarı.
  • Promosyon kodlarının kaç kez kullanılabileceği.

Promosyon kodu örnekleri:

  • FopaNewUser: Maksimum %50 indirimle %10 (sabit yüzde).
  • FopaMoreThan50: 10 ABD doları (sabit tutar indirimli).

Google, kodun uygulanmasını durdurmaya karar verirse sizinle iletişime geçilir.

Ödemeleri ayarlama

Ödeme işlemini ayarlamak için Google EAP danışmanınızla iletişime geçin. Google, yalnızca son sponsorlu ürün durumunun aşağıdakilerden biri olması durumunda, Google sponsorlu promosyon kodlarını içeren işlemleri geri öder:

  • CONFIRMED
  • IN_TRANSIT
  • READY_FOR_PICKUP
  • IN_PREPARATION
  • FULFILLED

Ödemelerinizi promosyonlarla uygulayın

Bu bölümde, promosyon kodlarını (Google sponsorluğunda veya üçüncü taraf sponsorlu) desteklerken ödeme işlemi gerçekleştirme açıklanmaktadır. Üçüncü taraf sponsorlu otomatik indirimlerde yalnızca CheckoutResponseMessage üzerinden indirim satır öğesini iade etmeniz gerekir (promosyon kodu kontrolü gerekmez).

Google, yemek siparişi karşılama sürecinde CheckoutRequestMessage üzerinden karşılamanıza tek bir promosyon kodu gönderir. Kullanıcılar, yinelenen ödeme isteklerinde alışveriş sepetlerini veya promosyon kodlarını değiştirebilir.

Kullanıcının promosyon kodunu ilk kez uygulayıp uygulamadığını kontrol etmek için aşağıdakileri yapın:

  • Google sponsorlu promosyon kodları: Google, geri gelen bir kullanıcının aynı promosyon kodunu tekrar kullanmaya çalışıp çalışmadığını kontrol eder. Herhangi bir işlem yapmanız gerekmez.
  • Üçüncü taraf sponsorlu promosyon kodları veya otomatik indirimler: Hesap bağlama ve kullanıcı etkinleştirme işlemlerini gerçekleştirmediyseniz ödeme isteğinin işlenmesi sırasında kullanıcı bilgilerini kontrol edemezsiniz. Bunun yerine FoodCartExtension nesnesindeki Contact ayrıntılarını (kullanıcının e-posta adresi gibi) kullanarak SubmitOrderRequestMessage işlemi sırasında bunu kontrol edin.

En son ödeme isteğine dayalı olarak sipariş karşılama işleminizde hataları tanımlayın veya indirimler hesaplayın. Bunu yaparken, sisteminizin eski durum bilgilerini tutmadığından emin olun.

Promosyon kodu geçerliliğini kontrol edin

Sipariş karşılama işleminiz, belirli bir promosyon kodunun geçerlilik veya uygunluk durumunu, öngörülen şartlar (ör. geçerlilik bitiş tarihi, maksimum kullanım ve maksimum indirim) açısından kontrol etmelidir. Ardından, hesaplanan indirimle CheckoutResponseMessage içinde veya promosyon kodu uygulanamıyorsa foodOrderErrors ile uygun bir şekilde yanıt verin. Promosyon koduyla ilgili hata tespit ederseniz Promosyonlarla ilgili hataları işleme bölümünde açıklanan işlemleri uygulayın.

Aşağıdaki snippet'te bir promosyon kodu için örnek foodOrderErrors gösterilmektedir. correctedProposedOrder öğesinin promosyon 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 ...}

İşlem indirimleri

Promosyon kodu geçerliyse karşılama işleminiz, indirim tutarı değerini hesaplamalı ve otherItems dizisinde hesaplanan indirim değerini içeren bir CheckoutResponseMessage göndermelidir. Toplam sipariş fiyatı negatif olmamalıdır. İndirim tutarı alışveriş sepeti tutarını aşıyorsa toplam sipariş fiyatını 0 ABD dolarına çıkarmak için maksimum 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, bir sipariş gönderme isteğiyle sonuçlanmaz. Sipariş karşılama için ödeme sırasında bir promosyonda bekletme söz konusuysa promosyon belirli bir süre sonra talep edilmediği takdirde bekletmeyi iptal etmek için kullanabileceğiniz bir mekanizmanız olduğundan emin olun. Bu şekilde, yemek siparişi hizmetinizin doğru kampanya kotasını korumasını sağlarsınız.

Promosyonlarla ilgili hataları giderme

Talebiniz bir CheckoutRequestMessage promosyon kodunun geçerli olmadığını belirlerse (örneğin, süresi dolmuş, geçersiz veya tanınmadıysa) geçerli hata kodu ve neden metnini correctedProposedOrder ve paymentOptions nesneleriyle birlikte içeren bir foodOrderError içeren CheckoutResponseMessage gönderin.

İstek karşılamada aynı istekten birden fazla promosyon kodu hatası bulunursa kurtarılabilir hataları geri göndermeden önce kurtarılamayan hataları geri gönderin. Kontrollerinizi aşağıdaki gibi önceliklendirin (yüksekten yükseğe doğru):

  • PROMO_NOT_RECOGNIZED
  • PROMO_EXPIRED
  • PROMO_USER_INELIGIBLE
  • PROMO_ORDER_INELIGIBLE
  • PROMO_NOT_APPLICABLE

Örnekler

Promosyon kodu içeren ödeme isteği örneğini aşağıda bulabilirsiniz:

{
    "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 istek karşılamayla ilgili ö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ği aşağıda verilmiştir:

{
  "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"
            }
          }
        }
      ]
    }
  }
}

Gönderim talebini promosyonlarla uygulama

Sipariş gönderme karşılamanızda, kullanıcının ilk kez bir promosyon kodu uygulayıp uygulamadığını kontrol edin. SubmitOrderRequestMessage işlemi sırasında, FoodCartExtension nesnesindeki Contact ayrıntılarını (kullanıcının e-posta adresi gibi) kullanarak bunu kontrol edebilirsiniz.

Promosyon kodunun geçerliliğini de yeniden kontrol etmeniz gerekir:

  • Kod geçerliyse: Siparişi onaylayın ve kuponu kullanıldı olarak işaretleyin.
  • Kod artık geçerli değilse: PROMO_NOT_APPLICABLE hatası olan siparişi reddedin. FoodOrderUpdateExtension ile aynı mekanizmayı kullanarak belirli bir reddedilme nedeni belirtebilirsiniz.

Örnekler

Promosyon içeren bir sipariş isteği örneği aşağıda verilmiştir:

{
  "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 bir sipariş karşılamaya karşılık gelen sipariş gönderme yanıtı örneğini burada 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ı ö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."
      }
    ]
  }
}