תוכן מקודם

מבצעים מאפשרים לכם ול-Google לעודד את הלקוחות כדאי לנסות את שירות הזמנת האוכל עם מחירים מוזלים. Google תומכת שילוב של תהליך ההזמנה מקצה לקצה עם ניהול המבצעים המערכת.

סוגי ההנחות הבאים נתמכים:

  • קודי שוברים במימון Google: קודי שוברים שמופעלים באופן אוטומטי שמולאו מראש על ידי Google או שהוזנו על ידי משתמשים.
  • קודי שוברים במימון צד שלישי: קודי שוברים שמשתמשים יכולים להזין, סופק על ידי שירות הזמנת האוכל.
  • הנחות אוטומטיות במימון צד שלישי: הנחות שהאוכל שלכם שירות ההזמנות מופעל באופן אוטומטי ללא קוד שובר.

ללא קשר לסוג ההנחה, Google צריכה להתקשר למסעדה שלך כדי לשלם בקופה מילוי הזמנה כדי לאמת ולהחיל את ההנחה.

כמפתח של שירות הזמנת אוכל, עליך לבצע כמה שינויים בהטמעה כדי לחשב הנחות לקודי שוברים תקינים או לשלוח שגיאות בקודי שוברים לא חוקיים, ניהול מימוש של קוד שובר, מגבלות ולעקוב אחרי נתוני החשבונאות לקבלת החזר.

איך לעבד מבצעים

כדי להטמיע מילוי הזמנות שתומך במבצעים:

  1. להגדיר שילוב מבצעים. (דילוג על זה אם אתם לא משתמשים בקודי שוברים במימון Google).
  2. הטמעת תשלום עם מבצעים.
  3. מטמיעים את האפשרות לשלוח הזמנה עם מבצעים.

הגדרת שילוב מבצעים

בקטע הזה מוסבר איך להגדיר שילוב מבצעים אם אתם מתכוונים להשתמש קודי שוברים במימון Google. אם רוצים לתמוך רק בקודי שוברים הנחות שנותנות חסות מצד שלישי, אפשר להגדיר הגדרה משלכם ולדלג בקטע הזה.

Google מציינת את סוג המבצע שנותן חסות ויוצרת איתך קשר כדי להגדיר אותו את השילוב, אנחנו מספקים את הפרטים הבאים:

  • סכום ההנחה.
  • הערך המינימלי של עגלת הקניות.
  • תאריכי ההתחלה והסיום של השימוש בקודי השוברים.
  • הסכום בדולרים המקסימלי שניתן להגדיר לקמפיין קידום המכירות.
  • מספר הפעמים שניתן להשתמש בקודי השוברים.

דוגמאות לקודי שוברים:

  • FopaNewUser: 10% (אחוז קבוע) והנחה של 50 $לכל היותר.
  • 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 לא כולל את המבצעים .

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