Promosi

Dengan promosi, Anda dan Google dapat memberikan insentif kepada pelanggan untuk cobalah layanan pemesanan makanan Anda dengan harga diskon. Google mendukung mengintegrasikan Pemesanan Tindakan Menyeluruh dengan pengelolaan promosi Anda sistem file.

Jenis diskon berikut didukung:

  • Kode promosi yang disponsori Google: Kode promosi yang otomatis diisi sebelumnya oleh Google atau dimasukkan oleh pengguna.
  • Kode promosi yang disponsori pihak ketiga: Kode promosi yang dapat dimasukkan pengguna, yang disediakan oleh layanan pemesanan makanan Anda.
  • Diskon otomatis yang disponsori pihak ketiga: Diskon yang diberikan pada makanan Anda layanan pemesanan secara otomatis berlaku tanpa kode promosi.

Apa pun jenis diskonnya, Google akan melakukan panggilan checkout ke makanan Anda pemenuhan pesanan untuk memverifikasi dan menerapkan diskon.

Sebagai pengembang layanan pemesanan makanan, Anda perlu membuat beberapa perubahan dalam penerapan Anda untuk menghitung diskon untuk kode promosi yang valid atau error untuk kode promosi yang tidak valid, kelola penukaran kode promosi keterbatasan, dan melacak data akuntansi untuk penggantian biaya.

Cara memproses promosi

Untuk menerapkan fulfillment yang mendukung promosi, lakukan hal berikut:

  1. Menyiapkan integrasi promosi. (Lewati ini jika Anda tidak menggunakan kode promosi yang disponsori Google.)
  2. Menerapkan checkout dengan promosi.
  3. Terapkan pesanan kirim dengan promosi.

Menyiapkan integrasi promosi

Bagian ini menjelaskan cara menyiapkan integrasi promosi jika Anda berencana menggunakan Kode promosi yang disponsori Google. Jika Anda hanya ingin mendukung kode promosi atau yang disponsori pihak ketiga, Anda dapat menentukan penyiapan sendiri dan bagian ini.

Google menentukan jenis promosi yang akan diberikan sponsor, dan menghubungi Anda untuk ditetapkan integrasi. Kami memberikan detail berikut:

  • Jumlah diskon.
  • Nilai keranjang minimum.
  • Tanggal mulai dan akhir untuk menggunakan kode promosi.
  • Jumlah rupiah maksimum yang dianggarkan untuk kampanye promosi.
  • Berapa kali kode promosi dapat digunakan.

Contoh kode promosi:

  • FopaNewUser: 10% (persen tetap) dengan diskon maksimum $50.
  • FopaMoreThan50: $10 (jumlah tetap diskon).

Jika Google memutuskan untuk menghentikan penerapan kode, Anda akan dihubungi.

Menyiapkan pencairan dana

Hubungi konsultan EAP Google untuk menyiapkan proses pencairan. Google hanya mengganti biaya transaksi yang melibatkan promosi yang disponsori Google kode jika status pesanan akhir adalah salah satu dari yang berikut:

  • CONFIRMED
  • IN_TRANSIT
  • READY_FOR_PICKUP
  • IN_PREPARATION
  • FULFILLED

Menerapkan checkout dengan promosi

Bagian ini menjelaskan penerapan pemrosesan checkout saat Anda mendukung kode promosi (disponsori oleh Google atau disponsori oleh pihak ketiga). Sebagai diskon otomatis yang disponsori pihak ketiga, Anda hanya perlu mengembalikan diskon item baris di CheckoutResponseMessage (tidak ada pemeriksaan kode promosi yang diperlukan).

Selama pemenuhan pesanan makanan, Google mengirimkan satu kode promosi di CheckoutRequestMessage ke fulfillment Anda. Pengguna dapat mengubah keranjang mereka atau kode promo pada permintaan checkout berulang.

Untuk memeriksa apakah ini pertama kalinya pengguna menerapkan kode promosi, lakukan berikut ini:

  • Kode promosi yang disponsori Google: Google memeriksa apakah pengguna yang kembali mencoba menggunakan kode promosi yang sama lagi; Anda tidak perlu melakukan apa pun.
  • Kode promosi atau diskon otomatis yang disponsori pihak ketiga: Jika Anda memiliki belum menerapkan penautan akun dan keikutsertaan pengguna, Anda tidak akan dapat memeriksa detail pengguna selama pemrosesan permintaan {i>checkout<i}. Sebagai gantinya, periksa selama pemrosesan SubmitOrderRequestMessage, menggunakan Contact detail (seperti alamat email pengguna) dari FoodCartExtension .

Identifikasi error atau hitung diskon dengan fulfillment Anda berdasarkan hal terbaru permintaan checkout. Saat melakukannya, pastikan bahwa sistem Anda tidak terlalu usang. informasi negara bagian.

Memeriksa validitas kode promosi

Pemenuhan pesanan Anda harus memeriksa validitas atau kelayakan promosi yang diberikan kode berdasarkan persyaratan yang ditetapkan, seperti tanggal kedaluwarsa, penggunaan maksimum, dan diskon maksimum. Kemudian, berikan respons yang sesuai di CheckoutResponseMessage dengan diskon yang dihitung, atau dengan foodOrderErrors jika kode promosi tidak dapat diterapkan. Jika Anda mendeteksi error pada kode promosi, ikuti proses yang dijelaskan di Menangani error terkait promosi.

Cuplikan berikut menunjukkan contoh foodOrderErrors untuk kode promosi. Pastikan correctedProposedOrder tidak menyertakan promosi {i>node<i}.

"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 ...}

Komputasi diskon

Jika kode promosi valid, fulfillment Anda harus menghitung diskon nilai dolar dan mengirim kembali CheckoutResponseMessage dengan nilai nilai diskon dalam array otherItems. Harga pesanan total tidak boleh negatif. Jika jumlah diskon melebihi jumlah keranjang, kirim kembali jumlah dolar maksimum untuk merender harga pesanan total menjadi $0.

Cuplikan berikut menunjukkan contoh bagian CheckoutResponseMessage untuk diskon promosi:

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

Merilis promosi yang tidak digunakan

Tidak semua permintaan checkout mengarah ke permintaan kirim pesanan. Jika pemenuhan pesanan Anda menangguhkan promosi saat panggilan checkout, pastikan Anda memiliki mekanisme untuk mencabut penangguhan jika promosi tidak diklaim melalui mengirimkan pesanan setelah jangka waktu tertentu. Hal ini memastikan bahwa makanan Anda layanan pemesanan mempertahankan kuota kampanye yang benar.

Menangani error pada promosi

Jika fulfillment Anda menentukan bahwa kode promosi dari CheckoutRequestMessage tidak valid (misalnya, sudah tidak berlaku, tidak valid, atau tidak dikenali), kirim CheckoutResponseMessage dengan foodOrderError yang berisi kode kesalahan dan teks alasan yang berlaku, bersama dengan Objek correctedProposedOrder dan paymentOptions.

Jika pemenuhan pesanan Anda menemukan beberapa error kode promosi dari permintaan yang sama, mengirim kembali {i>error<i} yang tidak dapat dipulihkan sebelum mengirim kembali {i>error<i} yang dapat dipulihkan. Prioritaskan pemeriksaan Anda sebagai berikut (dari prioritas tinggi ke rendah):

  • PROMO_NOT_RECOGNIZED
  • PROMO_EXPIRED
  • PROMO_USER_INELIGIBLE
  • PROMO_ORDER_INELIGIBLE
  • PROMO_NOT_APPLICABLE

Contoh

Berikut adalah contoh permintaan checkout dengan kode promosi:

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

Berikut adalah respons checkout yang sesuai dari fulfillment jika promosi kode valid:

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

Berikut contoh respons checkout jika kode promosi tidak valid:

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

Menerapkan pesanan pengiriman dengan promosi

Dalam pemenuhan pesanan yang Anda kirim, periksa apakah ini adalah pertama kalinya pengguna menerapkan kode promosi. Selama SubmitOrderRequestMessage Anda dapat memeriksanya menggunakan detail Contact (seperti ) dari objek FoodCartExtension.

Anda juga harus memeriksa kembali keberlakuan kode promosi:

  • Jika kode berlaku: Konfirmasi pesanan dan tandai kupon yang ditukarkan.
  • Jika kode tidak lagi berlaku: Tolak pesanan dengan Error PROMO_NOT_APPLICABLE. Anda dapat memberikan alasan penolakan tertentu menggunakan mekanisme yang sama seperti untuk FoodOrderUpdateExtension.

Contoh

Berikut adalah contoh permintaan kirim pesanan dengan promosi:

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

Berikut adalah contoh respons kirim pesanan yang sesuai dari pemenuhan pesanan jika kode promosi valid:

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

Berikut adalah contoh respons kirim pesanan jika kode promosi tidak valid:

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