تبلیغات راهی برای شما و Google فراهم می کند تا مشتریان را تشویق کنید تا خدمات سفارش غذای شما را با قیمت تخفیف امتحان کنند. Google از یکپارچهسازی Ordering End-to-End Actions با سیستم مدیریت تبلیغات شما پشتیبانی میکند.
انواع تخفیف های زیر پشتیبانی می شود:
- کدهای تبلیغاتی حمایت شده توسط Google: کدهای تبلیغاتی که به طور خودکار توسط Google از قبل پر می شوند یا توسط کاربران وارد می شوند.
- کدهای تبلیغاتی حمایت شده توسط شخص ثالث: کدهای تبلیغاتی برای وارد کردن کاربران، که توسط سرویس سفارش غذای شما ارائه می شود.
- تخفیفهای خودکار حمایتشده توسط شخص ثالث: تخفیفهایی که سرویس سفارش غذای شما بهطور خودکار و بدون کد تبلیغاتی اعمال میشود.
صرف نظر از نوع تخفیف، Google با انجام سفارش غذای شما تماس می گیرد تا تخفیف را تأیید و اعمال کند.
بهعنوان توسعهدهنده خدمات سفارش غذا، باید تغییراتی در پیادهسازی خود ایجاد کنید تا تخفیفها را برای کدهای تبلیغاتی معتبر محاسبه کنید یا خطاهایی را برای کدهای تبلیغاتی نامعتبر ارسال کنید، محدودیتهای بازخرید کد تبلیغاتی را مدیریت کنید، و دادههای حسابداری را برای بازپرداخت پیگیری کنید.
نحوه پردازش تبلیغات
برای اجرای کاملی که از تبلیغات پشتیبانی می کند، موارد زیر را انجام دهید:
- یکپارچه سازی تبلیغات را تنظیم کنید . (اگر از کدهای تبلیغاتی حمایت شده توسط Google استفاده نمی کنید، از این مرحله رد شوید.)
- پرداخت را با تبلیغات اجرا کنید .
- اجرای سفارش ارسال با تبلیغات
یکپارچه سازی تبلیغات را تنظیم کنید
اگر قصد دارید از کدهای تبلیغاتی حمایت شده توسط Google استفاده کنید، این بخش نحوه تنظیم یکپارچه سازی تبلیغات را شرح می دهد. اگر فقط میخواهید از کدهای تبلیغاتی یا تخفیفهایی پشتیبانی کنید که شخص ثالث حامی مالی آن است، میتوانید تنظیمات خود را مشخص کنید و از این بخش صرفنظر کنید.
Google نوع تبلیغ برای حامی مالی را مشخص میکند و برای راهاندازی ادغام با شما تماس میگیرد. ما جزئیات زیر را ارائه می دهیم:
- مبلغ تخفیف.
- حداقل ارزش سبد خرید
- تاریخ شروع و پایان استفاده از کدهای تبلیغاتی.
- حداکثر مبلغ دلاری که برای کمپین تبلیغاتی در نظر گرفته شده است.
- تعداد دفعاتی که می توان از کدهای تبلیغاتی استفاده کرد.
نمونه هایی از کدهای تبلیغاتی:
-
FopaNewUser
: 10% (درصد ثابت) با حداکثر 50 دلار تخفیف. -
FopaMoreThan50
: 10 دلار (مبلغ ثابت تخفیف).
اگر گوگل تصمیم بگیرد که اعمال کد را متوقف کند، با شما تماس گرفته خواهد شد.
پرداخت ها را تنظیم کنید
برای تنظیم فرآیند پرداخت با مشاور Google EAP خود تماس بگیرید. Google فقط تراکنشهای مربوط به کدهای تبلیغاتی حمایتشده توسط Google را در صورتی بازپرداخت میکند که وضعیت سفارش نهایی یکی از موارد زیر باشد:
-
CONFIRMED
-
IN_TRANSIT
-
READY_FOR_PICKUP
-
IN_PREPARATION
-
FULFILLED
اجرای پرداخت با تبلیغات
این بخش اجرای پردازش تسویه حساب را هنگامی که از کدهای تبلیغاتی پشتیبانی می کنید (با حمایت Google یا شخص ثالث) توضیح می دهد. برای تخفیفهای خودکار حمایتشده توسط شخص ثالث، فقط باید مورد خط تخفیف را در CheckoutResponseMessage
برگردانید (بدون نیاز به بررسی کد تبلیغاتی).
در طول انجام سفارش غذا، Google یک کد تبلیغاتی واحد را در CheckoutRequestMessage
به سفارش شما ارسال می کند. کاربران ممکن است در صورت درخواستهای تسویهحساب مکرر، سبد خرید یا کد تبلیغاتی خود را تغییر دهند.
برای بررسی اینکه آیا این اولین بار است که کاربر کد تبلیغاتی را اعمال می کند، موارد زیر را انجام دهید:
- کدهای تبلیغاتی حمایتشده توسط Google : Google بررسی میکند که آیا کاربر بازگشتی میخواهد دوباره از همان کد تبلیغاتی استفاده کند. شما نیازی به انجام کاری ندارید
- کدهای تبلیغاتی یا تخفیفهای خودکار حمایتشده توسط شخص ثالث : اگر پیوند حساب و انتخاب کاربر را اجرا نکردهاید، نمیتوانید جزئیات کاربر را در طول پردازش درخواست تسویهحساب بررسی کنید. در عوض، این مورد را در طول پردازش
SubmitOrderRequestMessage
، با استفاده از جزئیاتContact
(مانند آدرس ایمیل کاربر) از شیFoodCartExtension
بررسی کنید.
بر اساس آخرین درخواست تسویه حساب، خطاها را شناسایی کنید یا تخفیفها را با انجام خود محاسبه کنید. هنگام انجام این کار، اطمینان حاصل کنید که سیستم شما اطلاعات وضعیت قدیمی را حفظ نمی کند.
اعتبار کد تبلیغاتی را بررسی کنید
انجام شما باید اعتبار یا واجد شرایط بودن یک کد تبلیغاتی داده شده را در برابر شرایط مقرر، مانند تاریخ انقضا، حداکثر استفاده، و حداکثر تخفیف بررسی کند. سپس، در CheckoutResponseMessage
با تخفیف محاسبه شده یا با foodOrderErrors
در صورتی که کد تبلیغات قابل اعمال نباشد، به طور مناسب پاسخ دهید. اگر با کد تبلیغاتی خطاهایی را تشخیص دادید، روند توضیح داده شده در مدیریت خطاها با تبلیغات را دنبال کنید.
قطعه زیر نمونه ای از foodOrderErrors
را برای کد تبلیغاتی نشان می دهد. مطمئن شوید که correctedProposedOrder
شامل گره تبلیغاتی نباشد.
"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 ...}
محاسبه تخفیف
اگر کد تبلیغاتی معتبر است، انجام شما باید ارزش دلار تخفیف را محاسبه کند و یک CheckoutResponseMessage
با ارزش تخفیف محاسبه شده در آرایه otherItems
ارسال کند. قیمت کل سفارش نباید منفی باشد. اگر مقدار تخفیف از مقدار سبد خرید بیشتر شد، حداکثر مبلغ دلار را پس دهید تا قیمت کل سفارش به 0 دلار برسد.
قطعه زیر نمونه ای از بخش CheckoutResponseMessage
را برای تخفیف تبلیغاتی نشان می دهد:
"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",
}
]
}
تبلیغات استفاده نشده را منتشر کنید
هر درخواست تسویه حساب منجر به درخواست ارسال سفارش نمی شود. اگر انجام شما در زمان تماس تسویهحساب، تبلیغی را به حالت تعلیق در میآورد، مطمئن شوید که مکانیزمی دارید که در صورت عدم درخواست تبلیغ از طریق سفارش پس از یک دوره زمانی معین، آن را آزاد کنید. این تضمین می کند که خدمات سفارش غذای شما سهمیه کمپین درست را حفظ می کند.
با تبلیغات، خطاها را مدیریت کنید
اگر انجام شما مشخص کرد که کد تبلیغاتی از CheckoutRequestMessage
معتبر نیست (مثلاً منقضی شده، نامعتبر است، یا شناسایی نشده است)، یک CheckoutResponseMessage
با یک foodOrderError
که حاوی کد خطا و متن دلیل مربوطه است، همراه با correctedProposedOrder
و paymentOptions
ارسال کنید. اشیاء
اگر اجرای شما چندین خطای کد تبلیغاتی را از یک درخواست پیدا کرد، قبل از ارسال خطاهای قابل بازیابی، خطاهای غیرقابل بازیابی را ارسال کنید. چک های خود را به شرح زیر اولویت بندی کنید (از اولویت بالا به پایین):
-
PROMO_NOT_RECOGNIZED
-
PROMO_EXPIRED
-
PROMO_USER_INELIGIBLE
-
PROMO_ORDER_INELIGIBLE
-
PROMO_NOT_APPLICABLE
نمونه ها
در اینجا نمونه ای از درخواست تسویه حساب با کد تبلیغاتی آورده شده است:
{ "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 }
در صورت معتبر بودن کد تبلیغاتی، پاسخ تسویهحساب مربوطه از انجام این پروژه آمده است:
{ "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": [] } } }
اگر کد تبلیغاتی نامعتبر باشد، نمونهای از پاسخ تسویهحساب در اینجا آمده است:
{ "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" } } } ] } } }
اجرای سفارش ارسال با تبلیغات
در انجام سفارش ارسالی خود، بررسی کنید که آیا این اولین بار است که کاربر یک کد تبلیغاتی را اعمال می کند یا خیر. در طول پردازش SubmitOrderRequestMessage
، می توانید با استفاده از جزئیات Contact
(مانند آدرس ایمیل کاربر) از شی FoodCartExtension
این مورد را بررسی کنید.
همچنین باید قابلیت کاربردی بودن کد تبلیغاتی را دوباره بررسی کنید:
- اگر کد قابل اجرا است: سفارش را تأیید کنید و کوپن را که بازخرید شده علامت بزنید.
- اگر کد دیگر قابل اجرا نیست: سفارش را با خطای
PROMO_NOT_APPLICABLE
رد کنید. میتوانید با استفاده از مکانیزم مشابه برایFoodOrderUpdateExtension
دلیل رد خاصی ارائه کنید.
نمونه ها
در اینجا نمونه ای از درخواست ارسال سفارش همراه با تبلیغات است:
{ "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 }
در صورت معتبر بودن کد تبلیغاتی، نمونهای از پاسخ سفارش ارسال مربوطه از انجام انجام شده است:
{ "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": [] } } }
اگر کد تبلیغاتی نامعتبر باشد، نمونهای از پاسخ سفارش ارسال شده است:
"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." } ] } }