מבצעים מאפשרים לכם ול-Google לתת ללקוחות תמריץ לנסות את שירות ההזמנות שלכם עם הנחה. Google תומכת בשילוב של הפעולות מתחילת ההזמנה ועד לסיום עם מערכת ניהול המבצעים שלכם.
יש תמיכה בסוגים הבאים של הנחות:
- קודי הטבה ממומנים על ידי Google: קודי הטבה שמולאו מראש באופן אוטומטי על ידי Google או שהמשתמשים מזינים אותם.
- קודי הטבה ממומנים על ידי צד שלישי: קודי הטבה שהמשתמשים יכולים להזין, שסופקו על ידי שירות הזמנות האוכל.
- הנחות אוטומטיות ממומנות על ידי צד שלישי: הנחות שחלות באופן אוטומטי על שירותי הזמנת המזון, ללא קוד שובר.
ללא קשר לסוג ההנחה, Google מבצעת קריאה לצורך תשלום לחברת האספקה של ההזמנה כדי לאמת את ההנחה ולהחיל אותה.
מפתחים של שירותי הזמנת אוכל צריכים לבצע כמה שינויים בהטמעה כדי לחשב הנחות עבור קודי שובר תקפים או לשלוח שגיאות עבור קודי שובר לא תקפים, לנהל את המגבלות על מימוש קודי שובר ולעקוב אחרי נתוני החשבון לצורך החזר כספי.
איך מעבדים מבצעים
כדי להטמיע תהליך השלמה של הזמנות שתומך במבצעים:
- מגדירים שילוב של מבצעים. (אם אתם לא משתמשים בקודי שובר ממומנים על ידי Google, אתם יכולים לדלג על השלב הזה).
- הטמעת תשלום עם מבצעים
- הטמעת שליחת הזמנה עם מבצעים
הגדרת שילוב של מבצעים
בקטע הזה מוסבר איך להגדיר שילוב של מבצעים אם אתם מתכננים להשתמש בקודים של מבצעים ממומנים על ידי Google. אם אתם רוצים לתמוך רק בקודי קידום מכירות או בהנחות שממומנות על ידי צד שלישי, תוכלו לציין את ההגדרות שלכם ולדלג על הקטע הזה.
Google תציין את סוג המבצע שתומכת בו ותתקשר אליכם כדי להגדיר את השילוב. אנחנו מספקים את הפרטים הבאים:
- סכום ההנחה.
- הערך המינימלי לעגלת הקניות.
- תאריכי ההתחלה והסיום של השימוש בקודי ההטבות.
- סכום התקציב המקסימלי בשקלים שהוגדר לקמפיין קידום המכירות.
- מספר הפעמים שניתן להשתמש בקודי ההטבות.
דוגמאות לקודי שוברים:
FopaNewUser
: 10% (אחוז קבוע) עם הנחה מקסימלית של 200 ש"ח.FopaMoreThan50
: 40 ש"ח (סכום קבוע של הנחה).
אם 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
לא כולל את הצומת promotions.
"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." } ] } }