Werbeaktionen

Angebote bieten Ihnen und Google die Möglichkeit, Kunden testen Sie Ihren Essens-Bestellservice mit Rabatten. Google unterstützt Einbindung Ihrer End-to-End-Bestellaktionen in Ihre Angebotsverwaltung System.

Die folgenden Rabattarten werden unterstützt:

  • Von Google gesponserte Gutscheincodes:Gutscheincodes, die automatisch vorausgefüllt oder von den Nutzern eingegeben.
  • Von Drittanbietern gesponserte Gutscheincodes:Gutscheincodes, die Nutzer eingeben können, die von Ihrem Bestellservice bereitgestellt werden.
  • Von Drittanbietern gesponserte automatische Rabatte: Rabatte, die Ihre Mahlzeiten wird der Bestellservice automatisch ohne Gutscheincode angewendet.

Unabhängig von der Art des Rabatts ruft Google Ihr Essen an der Kasse an um den Rabatt zu überprüfen und anzuwenden.

Als Entwickler eines Essens-Bestelldienstes müssen Sie einige Änderungen Implementierung, um Rabatte für gültige Gutscheincodes zu berechnen oder Fehler bei ungültigen Gutscheincodes, Einlösung des Gutscheincodes verwalten und Buchhaltungsdaten für die Rückzahlung verfolgen.

Angebote verarbeiten

So implementieren Sie eine Auftragsausführung, die Angebote unterstützt:

  1. Integration von Angeboten einrichten (Überspringen wenn Sie keine von Google gesponserten Gutscheincodes verwenden.
  2. Bezahlvorgang mit Angeboten implementieren
  3. Implementieren Sie die Funktion „Bestellung mit Angeboten senden“.

Einbindung von Angeboten einrichten

In diesem Abschnitt wird beschrieben, wie Sie die Integration von Angeboten einrichten, wenn Sie vorhaben, Von Google gesponserte Gutscheincodes. Wenn Sie nur Gutscheincodes unterstützen möchten oder die ein Drittanbieter sponsert, können Sie Ihre eigene Einrichtung festlegen und diesem Abschnitt.

Google legt fest, welche Art von Werbeaktion Sponsor werden soll, und kontaktiert Sie, die Integration optimieren. Wir stellen folgende Informationen zur Verfügung:

  • Der Rabattbetrag.
  • Der Mindestwert für den Einkaufswagen.
  • Start- und Enddatum für die Verwendung der Gutscheincodes
  • Der maximale Budgetbetrag in Dollar für die Werbekampagne.
  • Die Häufigkeit, mit der die Gutscheincodes eingelöst werden können.

Beispiele für Gutscheincodes:

  • FopaNewUser: 10% (fester Prozentsatz) mit maximal 50 € Rabatt.
  • FopaMoreThan50: 10 € (Fester Rabatt).

Sollte Google die Anwendung des Codes anhalten, setzen wir uns mit Ihnen in Verbindung.

Auszahlungen einrichten

Wenden Sie sich an Ihren Google EAP-Berater, um die Auszahlung einzuleiten. Google erstattet nur Transaktionen im Zusammenhang mit von Google gesponserter Werbung. Codes, wenn der endgültige Bestellstatus einer der folgenden ist:

  • CONFIRMED
  • IN_TRANSIT
  • READY_FOR_PICKUP
  • IN_PREPARATION
  • FULFILLED

Bezahlvorgang mit Angeboten implementieren

In diesem Abschnitt wird beschrieben, wie Sie die Bezahlvorgang-Verarbeitung implementieren, wenn Sie Gutscheincodes (von Google oder von Drittanbietern gesponsert) Für automatisch von Drittanbietern gesponserte Rabatte, müssen Sie nur den Werbebuchung in der CheckoutResponseMessage (es wird keine Gutscheincodeüberprüfung durchgeführt. erforderlich).

Bei der Abwicklung der Essensbestellung sendet Google einen einzelnen Gutscheincode in der CheckoutRequestMessage bis zu deiner Auftragsausführung. Nutzer können ihren Einkaufswagen oder .

Um zu überprüfen, ob der Nutzer zum ersten Mal einen Gutscheincode angewendet hat, gehe wie folgt vor: Folgendes:

  • Von Google gesponserte Gutscheincodes: Google prüft, ob ein wiederkehrender Nutzer denselben Gutscheincode noch einmal verwenden, müssen Sie nichts weiter tun.
  • Von Drittanbietern gesponserte Gutscheincodes oder automatische Rabatte: Wenn Sie Kontoverknüpfung und Nutzer-Opt-in nicht implementiert sind, können Sie diese die Daten des Nutzers während der Verarbeitung der Zahlungsanforderung. Suchen Sie stattdessen nach während der SubmitOrderRequestMessage-Verarbeitung mit dem Contact Details (z. B. die E-Mail-Adresse des Nutzers) aus der FoodCartExtension -Objekt enthält.

Identifizieren Sie Fehler oder berechnen Sie Rabatte bei der Auftragsausführung anhand der neuesten Direktkauf-Anfrage aus. Dabei sollten Sie darauf achten, Informationen zum Bundesstaat.

Gültigkeit des Gutscheincodes prüfen

Ihre Auftragsausführung sollte die Gültigkeit oder Eignung eines bestimmten Angebots prüfen gegen festgelegte Bedingungen wie das Ablaufdatum, die maximale Nutzung maximalen Rabatt. Antworten Sie dann entsprechend im CheckoutResponseMessage mit dem berechneten Rabatt oder foodOrderErrors, wenn der Gutscheincode kann nicht angewendet werden. Wenn Sie Fehler beim Einlösen eines Gutscheincodes feststellen, folgen Sie der wie unter Fehler bei Angeboten beheben beschrieben.

Das folgende Snippet zeigt ein foodOrderErrors-Beispiel für einen Gutscheincode. Achten Sie darauf, dass die correctedProposedOrder nicht die Angebote enthält. Knoten.

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

Compute-Rabatte

Wenn der Gutscheincode gültig ist, sollte bei der Auftragsausführung der Rabatt berechnet werden. und ein CheckoutResponseMessage mit dem berechneten Wert Rabattwert im Array otherItems. Der Gesamtpreis der Bestellung darf nicht negativ sein. Wenn der Rabattbetrag den Warenkorbwert überschreitet, senden Sie den Höchstbetrag, um den Gesamtpreis der Bestellung in 0 $umzuwandeln.

Das folgende Snippet zeigt ein Beispiel für einen CheckoutResponseMessage-Abschnitt für Aktionsrabatt:

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

Nicht verwendete Werbeaktionen freigeben

Nicht jede Bezahlanfrage führt zu einer Bestellanforderung. Wenn die Auftragsausführung ein Angebot zum Zeitpunkt des Bezahlvorgangs ausgesetzt hat, achten Sie darauf, dass Sie einen Mechanismus freigegeben, um die Aussetzung aufzuheben, wenn das Angebot nicht über nach Ablauf einer bestimmten Frist aufzugeben. So wird sichergestellt, dass Ihre dass der Bestellservice das richtige Kampagnenkontingent verwaltet.

Fehler bei Angeboten beheben

Wenn bei der Auftragsausführung festgestellt wird, dass der Gutscheincode aus einem CheckoutRequestMessage ist ungültig (z. B. abgelaufen, ungültig, oder nicht erkannt), senden Sie eine CheckoutResponseMessage mit foodOrderError die den entsprechenden Fehlercode und den Ursachentext sowie correctedProposedOrder- und paymentOptions-Objekte.

Wenn bei der Auftragsausführung mehrere Fehler mit Gutscheincodes bei derselben Anfrage auftreten, und die nicht behebbaren Fehler zurücksenden, bevor Sie behebbare Fehler zurücksenden. Priorisieren Sie die Prüfungen wie folgt (von hoher zu niedriger Priorität):

  • PROMO_NOT_RECOGNIZED
  • PROMO_EXPIRED
  • PROMO_USER_INELIGIBLE
  • PROMO_ORDER_INELIGIBLE
  • PROMO_NOT_APPLICABLE

Beispiele

Hier ein Beispiel für eine Zahlungsanforderung mit einem Gutscheincode:

{
    "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
}

Hier ist die entsprechende Zahlungsantwort aus der Auftragsausführung, wenn das Angebot Code gültig ist:

{
  "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": []
    }
  }
}

Hier ist ein Beispiel für eine Antwort an den Bezahlvorgang, wenn der Gutscheincode ungültig ist:

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

„Bestellung mit Angeboten senden“ implementieren

Prüfen Sie bei der Abwicklung Ihrer Bestellung, ob dies das erste Mal ist, Der Nutzer wendet einen Gutscheincode an. Im Zeitraum SubmitOrderRequestMessage können Sie dies mithilfe der Contact-Details prüfen, z. B. E-Mail-Adresse des Nutzers) aus dem Objekt FoodCartExtension aus.

Überprüfen Sie außerdem die Gültigkeit des Gutscheincodes:

  • Falls der Code gültig ist:Bestätigen Sie die Bestellung und markieren Sie den Gutschein als eingelöst.
  • Wenn der Code nicht mehr gültig ist:Lehne die Bestellung mit dem PROMO_NOT_APPLICABLE Fehler. Sie können einen bestimmten Grund für die Ablehnung angeben. Verwenden Sie dabei denselben Mechanismus wie für FoodOrderUpdateExtension.

Beispiele

Hier ein Beispiel für eine Bestellanfrage mit Angeboten:

{
  "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
}

Hier ist ein Beispiel für die entsprechende Antwort auf die Aufgabe „Bestellung senden“ aus einer Auftragsausführung Wenn der Gutscheincode gültig ist:

{
  "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": []
    }
  }
}

Hier sehen Sie ein Beispiel für die Antwort auf eine Bestellung, wenn der Gutscheincode ungültig ist:

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