Chương trình khuyến mãi là một cách để bạn và Google khuyến khích khách hàng hãy thử dùng dịch vụ đặt đồ ăn với giá ưu đãi. Hỗ trợ của Google tích hợp các Hành động hoàn chỉnh trong đơn đặt hàng với quản lý quảng cáo của bạn hệ thống.
Các loại chiết khấu sau được hỗ trợ:
- Mã khuyến mại do Google tài trợ: Mã khuyến mại được tự động thêm vào do Google điền trước hoặc do người dùng nhập.
- Mã khuyến mại do bên thứ ba tài trợ: Mã khuyến mại để người dùng nhập, do dịch vụ đặt món ăn của bạn cung cấp.
- Chiết khấu tự động do bên thứ ba tài trợ: Chương trình chiết khấu mà thực phẩm của bạn tự động áp dụng mà không cần mã khuyến mãi.
Bất kể loại chiết khấu là gì, Google đều thực hiện cuộc gọi để thanh toán cho đồ ăn của bạn yêu cầu thực hiện đơn hàng để xác minh và áp dụng chiết khấu.
Là nhà phát triển của dịch vụ đặt món ăn, bạn cần phải thực hiện một số thay đổi đối với hoạt động triển khai của bạn để tính toán chiết khấu cho các mã khuyến mãi hợp lệ hoặc gửi lỗi đối với mã khuyến mãi không hợp lệ, quản lý việc sử dụng mã khuyến mãi và theo dõi dữ liệu kế toán để hoàn trả.
Cách xử lý chương trình khuyến mãi
Để triển khai một phương thức thực hiện đơn hàng hỗ trợ chương trình khuyến mãi, hãy làm như sau:
- Thiết lập việc tích hợp chương trình khuyến mãi. (Bỏ qua bước này bước nếu bạn không sử dụng mã khuyến mại do Google tài trợ).
- Triển khai quy trình thanh toán bằng chương trình khuyến mãi.
- Triển khai đơn đặt hàng gửi kèm chương trình khuyến mãi.
Thiết lập chế độ tích hợp chương trình khuyến mãi
Phần này mô tả cách thiết lập chế độ tích hợp chương trình khuyến mãi nếu bạn định sử dụng Mã khuyến mại do Google tài trợ. Nếu bạn chỉ muốn hỗ trợ mã khuyến mãi hoặc những khoản chiết khấu mà bên thứ ba tài trợ, bạn có thể chỉ định chế độ thiết lập của riêng mình và bỏ qua phần này.
Google chỉ định loại chương trình khuyến mãi cho nhà tài trợ và thông tin liên hệ mà bạn thiết lập tiến hành tích hợp. Chúng tôi cung cấp những thông tin sau:
- Số tiền chiết khấu.
- Giá trị giỏ hàng tối thiểu.
- Ngày bắt đầu và ngày kết thúc sử dụng mã khuyến mãi.
- Số tiền tối đa được lập ngân sách cho chiến dịch khuyến mãi.
- Số lần mã khuyến mãi có thể được sử dụng.
Ví dụ về mã khuyến mãi:
FopaNewUser
: 10% (phần trăm cố định) với mức giảm tối đa là 50 USD.FopaMoreThan50
: 10 USD (giảm số tiền cố định).
Nếu Google quyết định tạm dừng việc áp dụng mã, chúng tôi sẽ liên hệ với bạn.
Thiết lập phương thức giải ngân
Hãy liên hệ với chuyên viên tư vấn chương trình tiếp cận sớm của Google để thiết lập quy trình giải ngân. Google chỉ hoàn tiền cho các giao dịch liên quan đến chương trình khuyến mãi do Google tài trợ mã nếu trạng thái cuối cùng của đơn đặt hàng là một trong các trạng thái sau:
CONFIRMED
IN_TRANSIT
READY_FOR_PICKUP
IN_PREPARATION
FULFILLED
Triển khai quy trình thanh toán bằng chương trình khuyến mãi
Phần này mô tả cách triển khai quy trình thanh toán khi bạn hỗ trợ
mã khuyến mại (do Google tài trợ hoặc bên thứ ba tài trợ). Cho
ưu đãi chiết khấu tự động do bên thứ ba tài trợ, bạn chỉ cần trả lại chiết khấu
mục hàng trong CheckoutResponseMessage
(không kiểm tra mã khuyến mãi
nếu cần).
Trong quá trình thực hiện đơn đặt hàng, Google sẽ gửi một mã khuyến mãi trong
CheckoutRequestMessage
cho phương thức thực hiện của bạn. Người dùng có thể thay đổi giỏ hàng hoặc
mã khuyến mại trên các yêu cầu thanh toán lặp lại.
Để kiểm tra xem đây có phải là lần đầu tiên người dùng áp dụng mã khuyến mãi hay không, hãy sau:
- Mã khuyến mại do Google tài trợ: Google kiểm tra xem người dùng cũ có cố gắng sử dụng lại cùng một mã khuyến mại; bạn không cần phải làm gì cả.
- Mã khuyến mại do bên thứ ba tài trợ hoặc chiết khấu tự động: Nếu bạn có
chưa triển khai liên kết tài khoản và chọn tham gia của người dùng, thì bạn sẽ không thể kiểm tra
thông tin chi tiết của người dùng trong quá trình xử lý yêu cầu thanh toán. Thay vào đó, hãy kiểm tra
trong khi xử lý
SubmitOrderRequestMessage
, bằng cách sử dụngContact
thông tin chi tiết (chẳng hạn như địa chỉ email của người dùng) trongFoodCartExtension
.
Xác định các lỗi hoặc tính toán các khoản chiết khấu đối với phương thức thực hiện đơn hàng dựa trên giá trị mới nhất yêu cầu thanh toán. Khi làm như vậy, hãy đảm bảo rằng hệ thống của bạn không bị lỗi thời thông tin trạng thái.
Kiểm tra tính hợp lệ của mã khuyến mãi
Việc thực hiện đơn hàng cần kiểm tra tính hợp lệ hay đủ điều kiện của một chương trình khuyến mãi cụ thể
mã theo các điều khoản quy định như ngày hết hạn, mức sử dụng tối đa và
mức chiết khấu tối đa. Sau đó, đưa ra câu trả lời thích hợp trong CheckoutResponseMessage
với mức chiết khấu đã tính hoặc với foodOrderErrors
nếu mã khuyến mãi
Không thể áp dụng. Nếu bạn phát hiện lỗi với mã khuyến mãi, hãy làm theo
quy trình nêu trong bài viết Xử lý lỗi liên quan đến chương trình khuyến mãi.
Đoạn mã sau đây cho thấy ví dụ về foodOrderErrors
về mã khuyến mãi.
Đảm bảo rằng correctedProposedOrder
không bao gồm chương trình khuyến mãi
nút.
"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 ...}
Tính toán chiết khấu
Nếu mã khuyến mãi hợp lệ, việc thực hiện đơn hàng sẽ tính toán mức chiết khấu
và gửi lại CheckoutResponseMessage
bằng giá trị đã tính
giá trị chiết khấu trong mảng otherItems
. Tổng giá của đơn đặt hàng không được là
phủ định. Nếu số tiền chiết khấu vượt quá số tiền của giỏ hàng, hãy gửi lại
số tiền tối đa để hiển thị tổng giá của đơn đặt hàng thành 0 đô la.
Đoạn mã sau đây cho thấy ví dụ về phần CheckoutResponseMessage
cho
chiết khấu khuyến mãi:
"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",
}
]
}
Phát hành chương trình khuyến mãi không dùng đến
Không phải yêu cầu thanh toán nào cũng dẫn đến một yêu cầu gửi đơn đặt hàng. Nếu phương thức thanh toán đặt lệnh tạm ngưng khuyến mãi tại thời điểm gọi thanh toán, hãy đảm bảo bạn có cơ chế được áp dụng để giải phóng khoản tạm giữ nếu chương trình khuyến mãi không được xác nhận qua gửi đơn đặt hàng sau một khoảng thời gian nhất định. Việc này giúp đảm bảo thức ăn của bạn dịch vụ đặt hàng duy trì hạn mức chiến dịch chính xác.
Xử lý lỗi về chương trình khuyến mãi
Nếu phương thức thực hiện của bạn xác định rằng mã khuyến mãi từ
CheckoutRequestMessage
không hợp lệ (ví dụ: đã hết hạn, không hợp lệ,
hoặc không nhận dạng được), hãy gửi CheckoutResponseMessage
kèm theo một foodOrderError
chứa mã lỗi và văn bản lý do hiện hành, cùng với
Đối tượng correctedProposedOrder
và paymentOptions
.
Nếu phương thức thực hiện đơn hàng của bạn phát hiện nhiều lỗi mã khuyến mãi trong cùng một yêu cầu, gửi lại lỗi không thể khôi phục trước khi gửi lại lỗi có thể khôi phục. Hãy ưu tiên các bước kiểm tra như sau (từ cao đến thấp):
PROMO_NOT_RECOGNIZED
PROMO_EXPIRED
PROMO_USER_INELIGIBLE
PROMO_ORDER_INELIGIBLE
PROMO_NOT_APPLICABLE
Ví dụ
Dưới đây là ví dụ về một yêu cầu thanh toán có mã khuyến mãi:
{ "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 }
Sau đây là phản hồi thanh toán tương ứng của đơn hàng thực hiện nếu chương trình khuyến mãi mã hợp lệ:
{ "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": [] } } }
Dưới đây là ví dụ về phản hồi thanh toán nếu mã khuyến mãi không hợp lệ:
{ "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" } } } ] } } }
Triển khai tính năng gửi đơn đặt hàng cùng chương trình khuyến mãi
Trong quá trình thực hiện đơn đặt hàng mà bạn gửi, hãy kiểm tra xem đây có phải là lần đầu tiên
người dùng đang áp dụng mã khuyến mại. Trong suốt SubmitOrderRequestMessage
đang xử lý, bạn có thể kiểm tra điều này bằng cách sử dụng thông tin chi tiết Contact
(chẳng hạn như
địa chỉ email của người dùng) khỏi đối tượng FoodCartExtension
.
Bạn cũng nên kiểm tra lại khả năng áp dụng của mã khuyến mãi:
- Nếu mã được áp dụng: Xác nhận đơn đặt hàng và đánh dấu phiếu giảm giá là đã sử dụng.
- Nếu mã không còn áp dụng: Từ chối đơn đặt hàng bằng
PROMO_NOT_APPLICABLE
lỗi. Bạn có thể cung cấp lý do từ chối cụ thể bằng cơ chế tương tự nhưFoodOrderUpdateExtension
.
Ví dụ
Dưới đây là ví dụ về việc gửi yêu cầu đặt hàng kèm theo chương trình khuyến mãi:
{ "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 }
Dưới đây là ví dụ về phản hồi đơn đặt hàng được gửi tương ứng từ một đơn hàng thực hiện nếu mã khuyến mại hợp lệ:
{ "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": [] } } }
Dưới đây là ví dụ về phản hồi khi gửi đơn đặt hàng nếu mã khuyến mãi không hợp lệ:
"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." } ] } }