تتيح العروض الترويجية لك ولـ Google تحفيز العملاء على جرّب خدمة طلب الطعام التي تقدم أسعارًا مخفضة. تسمح Google بنشر ما يلي: دمج الإجراءات الشاملة للطلب مع إدارة العروض الترويجية .
تتوفّر أنواع الخصومات التالية:
- الرموز الترويجية التي ترعاها Google: رموز ترويجية يتم إرسالها تلقائيًا التي تملأها Google مسبقًا أو يُدخلها المستخدمون.
- الرموز الترويجية التي ترعاها جهات خارجية: رموز ترويجية يمكن للمستخدمين الدخول إليها التي تقدمها خدمة طلب الطعام.
- الخصومات التلقائية التي ترعاها جهات خارجية: هي الخصومات التي يقدّمها طعامك. يتم تطبيق خدمة الطلب تلقائيًا بدون رمز ترويجي.
بغض النظر عن نوع الخصم، تُجري Google مكالمة دفع على طعامك. توصيل الطلب للتحقّق من الخصم وتطبيقه
كمطور لخدمة طلب الطعام، تحتاج إلى إجراء بعض التغييرات إلى التنفيذ لاحتساب الخصومات لرموز ترويجية صالحة أو إرسال أخطاء متعلقة برموز ترويجية غير صالحة، يُرجى إدارة عملية تحصيل قيمة الرمز الترويجي والقيود، وتتبع البيانات المحاسبية للتعويض.
كيفية معالجة العروض الترويجية
لتنفيذ طريقة تنفيذ تتوافق مع العروض الترويجية، يُرجى اتّباع الخطوات التالية:
- إعداد عملية دمج العروض الترويجية (تخطّي هذا إذا كنت لا تستخدم الرموز الترويجية برعاية Google.)
- تنفيذ عملية الدفع باستخدام العروض الترويجية
- نفِّذ طلب الإرسال مع العروض الترويجية.
إعداد عملية دمج العروض الترويجية
يوضّح هذا القسم كيفية إعداد عملية دمج العروض الترويجية إذا كنت تنوي استخدام الرموز الترويجية التي ترعاها Google إذا أردت فقط إتاحة الرموز الترويجية أو الخصومات التي ترعاها جهة خارجية، فيمكنك تحديد الإعداد الخاص بك وتخطي هذا القسم.
تحدّد Google نوع العرض الترويجي الذي يتم تقديمه إلى الجهة الراعية، وتتواصل معك لضبطها. عملية الدمج. إليك التفاصيل التالية:
- مبلغ الخصم.
- تمثّل هذه السمة الحدّ الأدنى لقيمة سلة التسوّق.
- تاريخا بدء وانتهاء استخدام الرموز الترويجية.
- الحدّ الأقصى للمبلغ بالدولار الأمريكي في الميزانية للحملة الترويجية.
- تمثّل هذه السمة عدد المرّات التي يمكن فيها استخدام الرموز الترويجية.
أمثلة على الرموز الترويجية:
FopaNewUser
: %10 (نسبة مئوية ثابتة) مع خصم بقيمة 50 ريال سعودي كحدّ أقصىFopaMoreThan50
: 10 دولار أمريكي (مبلغ ثابت)
إذا قررت Google إيقاف تطبيق الرمز، فسيتم التواصل معك.
إعداد الدفعات
يُرجى التواصل مع مستشار 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." } ] } }