Angebote
Mit der Angebotsintegration können Sie strukturierte Informationen zu Händlerangeboten und Rabatten weiterleiten, die zu bestimmten Zeiten auf bestimmte Dienste angewendet werden. Angebote bestehen aus dem eigentlichen Angebot (Prozentrabatt, Rabatt in Euro usw.), Gültigkeitszeiträumen (bestimmte Zeiten, Wochentage usw.) und anwendbaren Nutzungen (das Angebot kann nur für bestimmte Dienste verwendet werden) sowie komplexen Kombinationen von Einschränkungen.
Beispiele für Angebote:
- Halber Preis für Vorspeisen mittwochs und donnerstags von 12:00 bis 17:00 Uhr im Dezember
- Beim Abendessen zum Muttertag zwischen 18:00 und 22:00 Uhr erhalten Sie ein Dessert kostenlos.
- 5 € Rabatt auf eine Vorspeise beim Sonntagsbrunch von 10:00 bis 14:00 Uhr
- 10% Rabatt als Walk-in-Angebot, kombinierbar mit 5% Rabatt für Premium-Abonnenten und 5% Rabatt, wenn der Nutzer über Ihre App bezahlt.
Damit ein Angebot in die Integration aufgenommen werden kann, muss es sowohl dem technischen Datenmodell entsprechen als auch unsere Teilnahmevoraussetzungen erfüllen. Lesen Sie sich unsere Richtlinien für Angebote durch, um sicherzustellen, dass Ihre Integration den Richtlinien entspricht. Dort finden Sie auch eine Anleitung dazu, wie Sie mit Angeboten verfahren, die die technischen Anforderungen nicht erfüllen.
Implementierung von Angeboten
Die Angebotsintegration besteht aus zwei Feeds, die täglich oder in einer Häufigkeit hochgeladen werden, die für eine hohe Genauigkeit sorgt (d. h. die Aktualität erhöht):
- Entweder:
- Händlerfeed (mit
Merchant-Konfiguration) - Oder
Feed für Rechtssubjekte
(mit der Konfiguration
Generic)
- Händlerfeed (mit
- Und
Angebotsfeed
(mit der Konfiguration
Generic)
OfferFeed
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
data | Array von Objekten(Offer) |
Angebot
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
offer_id | String | Erforderlich | Eindeutige ID des Angebots. Erforderlich. |
entity_ids | String-Array | Liste der Händler, die an diesem Angebot teilnehmen. | |
add_on_offer_applicable_to_all_entities | boolean | Wenn „true“, gilt dieses Angebot für alle Rechtssubjekte unter dem Aggregator. Gilt nur für Add-on-Angebote. | |
offer_source | enum(OfferSource) | Erforderlich | Ein Angebot kann vom Aggregator, einem einzelnen Händler oder sogar von einem Drittanbieter als Add-on bereitgestellt werden. Erforderlich. |
action_type | enum(ActionType) | Erforderlich | Der Dienst, der das Angebot bereitstellt. Eine offer_id kann nur zu einem action_type gehören. Wenn ein Angebot für mehrere Diensttypen freigegeben werden kann, müssen für jeden Diensttyp doppelte Angebote mit eindeutigen IDs erstellt werden. Erforderlich. |
offer_modes | Array von enum(OfferMode) | Erforderlich | Die Methoden, mit denen das Angebot genutzt werden kann – z. B. ohne Reservierung, mit Reservierung, online usw. Erforderlich. |
offer_category | enum(OfferCategory) | Erforderlich | Die Kategorie des Angebots. Erforderlich. |
source_assigned_priority | Zahl | Nicht negative Ganzzahl ([1–100], wobei 1 die höchste Priorität darstellt), die das von der Quelle zugewiesene Prioritätsniveau des Angebots angibt. Wenn mehrere Angebote für denselben Händler verfügbar sind, ist dies ein Signal für das Ranking von Angeboten. Der Wert 0 bedeutet, dass die Priorität nicht festgelegt ist. | |
offer_details | object(OfferDetails) | Erforderlich | Details zum Angebot, z. B. Rabatt, Buchungskosten usw. Erforderlich. |
offer_restrictions | object(OfferRestrictions) | Erforderlich | Beschreibt, wie das Angebot eingeschränkt ist, z.B. ob ein Abo oder Zahlungsmittel erforderlich ist, ob das Angebot mit anderen Angeboten kombiniert werden kann (und mit welchen Typen) usw. Erforderlich. |
coupon | object(Coupon) | Details zu einem Gutschein. Erforderlich für offer_category: OFFER_CATEGORY_ADD_ON_COUPON_OFFER. | |
payment_instrument | object(PaymentInstrument) | Details zu einem Zahlungsmittel. Erforderlich für offer_category: OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER. | |
subscription | object(Subscription) | Details zu einem Abo. Erforderlich für offer_category: OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER. | |
terms | object(Terms) | Erforderlich | Nutzungsbedingungen des Angebots. Erforderlich. |
validity_periods | Array von Objekten(ValidityPeriod) | Erforderlich | Der Gültigkeitszeitraum des Angebots. Beschreibt, für welchen Zeitraum das Angebot gültig ist, einschließlich Start- und Endzeiten, Wochentage usw. Erforderlich. |
offer_url | String | URL zur Angebotsseite des Händlers. Erforderlich für offer_category: OFFER_CATEGORY_BASE_OFFER. | |
tags | Array von enum(OfferTag) | Spezielle Tags, die mit dem Angebot verknüpft sind. Damit werden Sonderangebote wie „Festlich“, „Am besten bewertet“ oder „Am häufigsten gebucht“ gekennzeichnet. | |
brand_id | String | Erforderlich für Geschenkkartenangebote, um die Marke zu identifizieren, die das Angebot anbietet. | |
availability_level | enum(AvailabilityLevel) | Die Verfügbarkeit des Angebots. |
OfferDetails
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
offer_display_text | String | Erforderlich | Der Angebotstext, den der Angebotsanbieter Kunden auf der Suchergebnisseite präsentieren möchte. Das ist möglicherweise nicht genau das, was den Nutzern angezeigt wird. Wir können auch andere Metadaten verwenden, um den Text neu zu schreiben oder umzuformulieren. Erforderlich. |
| oneOf(offer_specification) | Erforderlich | Nur eines der Felder in diesem „oneOf“ kann festgelegt werden. |
max_discount_value | object(Money) | Der maximale Rabatt, der in Anspruch genommen werden kann. Beispiel: 10% Rabatt auf bis zu 100 $. | |
min_spend_value | object(Money) | Der Mindestbetrag, der ausgegeben werden muss, um den Rabatt zu erhalten. Beispiel: 10% Rabatt ab einem Gesamtpreis von 100 €. | |
booking_cost | object(Money) | Die Kosten für die Buchung dieses Angebots. Beispiel: 100 € Rabatt auf die Endabrechnung, wenn ein Tisch für 15 € reserviert wird. | |
booking_cost_unit | enum(FeeUnit) | Die Einheit der Buchungskosten. Zum Beispiel pro Person oder pro Transaktion. | |
convenience_fee | object(Fee) | ||
booking_cost_adjustable | boolean | Gibt an, ob die Buchungskosten anpassbar sind, d.h., ob sie von der Endabrechnung abgezogen werden. Beispiel: 30% Rabatt auf das Abendessen mit Reservierung. Die Reservierung kostet 15 $, die auf die endgültige Rechnung angerechnet werden. Die endgültige Rechnung lautet also: Gesamtausgaben – 30 % – 15 $. | |
additional_fees | Array von Objekten(AdditionalFee) | Zusätzliche Gebühren, die dem Nutzer in Rechnung gestellt werden. Beispiele: Gebühren für Komfort, Bearbeitung, Lieferung, Verpackung, Servicegebühr usw. | |
offer_discount_type | enum(OfferDiscountType) | Die Art des Rabatts. | |
gift_card_info | object(GiftCardInfo) | Details speziell zu Geschenkkartenangeboten. |
Geld
Stellt einen Geldbetrag mit Währungstyp dar
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
currency_code | String | Der aus drei Buchstaben bestehende Währungscode gemäß ISO 4217. | |
units | Zahl | Die ganzen Einheiten des Betrags.
Wenn currencyCode beispielsweise "USD" ist, entspricht 1 Einheit 1 $. | |
nanos | Zahl | Anzahl der Nanoeinheiten (10^-9) des Betrags.
Der Wert muss im Bereich von -999.999.999 bis +999.999.999 liegen.
Wenn units positiv ist, muss nanos positiv oder null sein.
Wenn units null ist, kann nanos positiv, null oder negativ sein.
Wenn units negativ ist, muss nanos negativ oder null sein.
Beispiel: -1,75 $ werden als units=-1 und nanos=-750.000.000 dargestellt. |
Gebühr
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
unit | enum(FeeUnit) | ||
type | enum(FeeType) | ||
| oneOf(cost) | Nur eines der Felder in diesem „oneOf“ kann festgelegt werden. |
MoneyRange
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
min_amount | object(Money) | ||
max_amount | object(Money) |
AdditionalFee
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
name | String | Erforderlich | Der Name der zusätzlichen Gebühr. Beispiele: Zahlungsgebühr, Bearbeitungsgebühr usw. Erforderlich. |
fee | object(Fee) |
GiftCardInfo
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
| oneOf(denomination_type) | Nur eines der Felder in diesem „oneOf“ kann festgelegt werden. |
FixedDenominations
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
amounts | Array von Objekten(Money) | Eine Liste aller verfügbaren diskreten Beträge (z.B. [100, 500, 1000]). |
OfferRestrictions
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
combinable_with_other_offers | boolean | Ob dieses Angebot mit anderen Angeboten kombiniert werden kann. Wenn „true“, können Partner angeben, mit welchen Angeboten dieses Angebot kombiniert werden kann. Wenn sowohl „combinable_offer_categories“ als auch „combinable_offer_ids“ festgelegt sind, ist jedes Angebot, das eine der oben genannten Bedingungen erfüllt, kombinierbar. | |
combinable_offer_categories | Array von enum(OfferCategory) | Liste der Angebotstypen, mit denen dieses Angebot kombiniert werden kann. Dieses Angebot kann beispielsweise mit anderen Gutscheinen kombiniert werden. Wenn „combinable_with_other_offers“ auf „true“ gesetzt ist und dieses Feld nicht festgelegt ist, sind alle Typen kombinierbar. | |
combinable_offer_ids | String-Array | Liste der offer_ids, mit denen dieses Angebot kombiniert werden kann. Einige Angebote können nur mit bestimmten anderen offer_ids kombiniert werden, die als übergeordnete Angebote betrachtet werden können. Wenn „combinable_with_other_offers“ auf „true“ gesetzt ist und dieses Feld nicht festgelegt ist, können alle Angebots-IDs kombiniert werden. | |
inclusions | Array von Objekten(OfferCondition) | Liste der Bedingungen, die erfüllt sein müssen, damit das Angebot gültig ist (z.B. alkoholfreie Getränke, Speisen). | |
exclusions | Array von Objekten(OfferCondition) | Liste der Bedingungen, die das Angebot ungültig machen (z.B. Buffet, Kombiangebote und Cocktails). | |
min_guest | Zahl | Die Mindestanzahl an Personen, die erforderlich ist, um das Angebot in Anspruch zu nehmen. Hinweis: Dieses Feld gilt nur für Reservierungen in Restaurants und sollte nicht für andere Branchen verwendet werden. | |
food_offer_restrictions | object(FoodOfferRestrictions) | Einschränkungen für Essensangebote | |
max_redemption_count | Zahl | Einschränkungen hinsichtlich der Häufigkeit, mit der dieses Angebot genutzt werden kann. Der Wert 0 bedeutet, dass es keine Limits gibt. Ein Wert von 3 bedeutet beispielsweise, dass der Nutzer dieses Angebot dreimal nutzen kann. | |
max_total_discount_value | object(Money) | Der maximale Rabatt, der bei mehreren Transaktionen dieses Angebots in Anspruch genommen werden kann. | |
special_conditions | String-Array | Besondere Bedingungen für dieses Angebot, die dem Nutzer angezeigt werden müssen. Beispiele: „Nur gültig für die Zahlung in [Bereich]“, „Gilt nicht für Onlinezahlungen“, „Gutschein KANN während des Angebots verwendet werden“. |
OfferCondition
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
description | String |
FoodOfferRestrictions
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
meal_types | Array von enum(MealType) | Die Mahlzeitentypen, auf die das Angebot angewendet werden kann, z. B. Mittag- oder Abendessen. Wenn nicht festgelegt, kann das Angebot auf alle Mahlzeittypen angewendet werden. | |
restricted_to_certain_courses | boolean | Ob das Angebot nur für bestimmte Kurse gilt. |
Gutschein
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
text | String | Der Gutscheincode, den der Angebotsanbieter Nutzern anzeigen möchte. | |
code | String | Erforderlich | Zum Einlösen des Angebots ist ein Gutscheincode erforderlich. Erforderlich. |
PaymentInstrument
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
items | Array von Objekten(PaymentInstrumentItem) | Erforderlich | Liste der Zahlungsmittel, die für das Angebot verwendet werden können. Erforderlich. |
provider_name | String | Name des Anbieters des Zahlungsmittels. Das kann ein Bankpartner oder der Name einer Bank sein, z. B. American Express, HDFC oder ICICI. |
PaymentInstrumentItem
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
type | enum(PaymentInstrumentType) | Erforderlich | Typ des Zahlungsmittels. Erforderlich. |
name | String | Erforderlich | Name des Zahlungsinstruments, z. B. der Name der Kreditkarte. Beispiele: HDFC Infinia, American Express Platinum. Erforderlich. |
Abo
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
name | String | Erforderlich | Der Name des Abos. Erforderlich. |
subscription_auto_added | boolean | Gibt an, ob das Abo automatisch hinzugefügt wird, wenn ein Nutzer dieses Angebot in Anspruch nimmt. | |
cost | object(Money) | Erforderlich | Die Kosten des Abos. Erforderlich. |
subscription_duration | object(Duration) | Erforderlich | Wie lange das Abo zum angegebenen Abopreis gültig ist. Erforderlich. |
terms_and_conditions_url | String | URL zu den für dieses Abo relevanten Nutzungsbedingungen des Partners. |
Dauer
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
seconds | Zahl | Vorzeichenbehaftete Sekunden des Zeitraums. Muss zwischen -315.576.000.000 und +315.576.000.000 (einschließlich) liegen. Hinweis: Diese Grenzen werden so berechnet: 60 Sek./Min. × 60 Min./Std. × 24 Std./Tag × 365,25 Tage/Jahr × 10.000 Jahre | |
nanos | Zahl | Signierte Sekundenbruchteile mit Nanosekundenauflösung des Zeitraums. Dauern von weniger als einer Sekunde werden mit dem Feld „0“ seconds und einem positiven oder negativen Feld „nanos“ dargestellt. Bei Zeiträumen von einer Sekunde oder mehr muss ein Wert ungleich null für das Feld nanos dasselbe Vorzeichen wie das Feld seconds haben. Muss zwischen -999.999.999 und +999.999.999 (einschließlich) liegen. |
Nutzungsbedingungen
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
url | String | URL zu den Nutzungsbedingungen des Partners. | |
restricted_to_certain_users | boolean | Gibt an, ob das Angebot auf bestimmte Nutzer beschränkt ist. | |
terms_and_conditions | String | Primärer Text der Nutzungsbedingungen, der vom Partner bereitgestellt wird. | |
additional_terms_and_conditions | String-Array | Zusätzliche Nutzungsbedingungen des Partners. |
ValidityPeriod
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
valid_period | object(ValidityRange) | Der Start- und Endzeitstempel, für den das Angebot gültig ist. Diese Zeiten müssen unterschiedliche Tage darstellen. Das heißt, die Startzeit muss 00:00 Uhr (Tagesbeginn) und die Endzeit 00:00 Uhr (ausschließlich) am Tag des Endes des Gültigkeitszeitraums sein. | |
time_of_day | Array von Objekten(TimeOfDayWindow) | Gibt das gültige Zeitintervall an einem bestimmten Tag und die Tage an, an denen das Angebot verfügbar ist. Bei Zeiträumen, die Mitternacht überschreiten (z.B. 22:00 Uhr bis 2:00 Uhr), verwenden Sie separate Zeiträume für jeden Tag: einen, der um 23:59:59 Uhr endet, und einen, der am nächsten Tag um 00:00 Uhr beginnt.
Beispiel:
Montag: 10:00 bis 17:00 Uhr
Dienstag: 10:00 bis 14:00 Uhr
Dienstag: 17:00 bis 19:00 Uhr
Mi., Do., Fr., Sa., So.: 15:00 bis 19:00 Uhr
Wenn nichts festgelegt ist, ist das Angebot innerhalb von valid_period jederzeit verfügbar. | |
time_exceptions | Array von Objekten(ValidTimeException) | Gibt Ausnahmen für die oben genannten Parameter „valid_period“ und „valid_time_of_week“ an. | |
date_exceptions | Array von Objekten(Date) | Gibt Ausnahmen in Tagen für den oben genannten gültigen Zeitraum und die Tageszeit an. | |
validity_scope | enum(ValidityScope) | Gibt den Geltungsbereich des Gültigkeitszeitraums an. | |
validity_duration_in_days | Zahl | Die Dauer (in Tagen), für die der Gutschein nach dem Kauf gültig ist. |
ValidityRange
Ein geschlossener/offener Zeitstempelbereich.
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
valid_from_time | object(Timestamp) | Erforderlich | Die Startzeit des Bereichs (einschließlich). Erforderlich. |
valid_through_time | object(Timestamp) | Die Endzeit des Bereichs (ausschließlich). Wenn kein Wert angegeben ist, ist der Zeitraum unbegrenzt. Optional. |
Zeitstempel
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
seconds | Zahl | Stellt Sekunden der UTC-Zeit seit Unix-Epoche 1970-01-01T00:00:00Z dar. Muss zwischen -62135596800 und 253402300799 liegen (einschließlich), was 0001-01-01T00:00:00Z bis 9999-12-31T23:59:59Z entspricht. | |
nanos | Zahl | Nicht negative Sekundenbruchteile Nanosekunden-Auflösung. Dieses Feld enthält den Nanosekundenanteil der Dauer und ist keine Alternative zu Sekunden. Negative Sekundenwerte mit Brüchen müssen weiterhin nicht negative Nanosekundenwerte haben, die vorwärts in der Zeit gezählt werden. Muss zwischen 0 und 999.999.999 (einschließlich) liegen. |
TimeOfDayWindow
Das TimeWindow-Objekt ist eine zusammengesetzte Einheit, die eine Liste von Zeiträumen beschreibt, in denen die Bestellung des Nutzers aufgegeben oder ausgeführt werden kann.
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
time_windows | object(TimeOfDayRange) | Erforderlich | Das Zeitfenster, in dem die Bestellung aufgegeben/ausgeführt werden kann. Erforderlich. |
day_of_week | Array von enum(DayOfWeek) | Die Liste der Wochentage, an denen die Zeitfenster angewendet werden. Wenn nichts festgelegt ist, gilt die Einstellung für alle Wochentage. Optional. | |
day_of_month | Array von Objekten(DayOfMonthRange) | Die Tage im Monat, an denen die Fenster angewendet werden. Wenn nichts festgelegt ist, gilt die Einstellung für alle Tage des Monats. Optional. |
TimeOfDayRange
Ein geschlossener bis offener Zeitraum.
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
open_time | object(TimeOfDay) | Eine Zeit, die den Beginn des Tages im Bereich angibt (einschließlich). Wenn nichts anderes festgelegt ist, ist der Wert 00:00:00. Optional. | |
close_time | object(TimeOfDay) | Eine Zeit, die das Ende des Tages im Bereich angibt (ausschließlich). Wenn nichts anderes festgelegt ist, wird 23:59:59 verwendet. Optional. |
TimeOfDay
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
hours | Zahl | Stunden eines Tages im 24-Stunden-Format. Muss größer oder gleich 0 und in der Regel kleiner oder gleich 23 sein. Eine API kann den Wert „24:00:00“ für Szenarien wie Geschäftsschlusszeit zulassen. | |
minutes | Zahl | Minuten einer Stunde. Muss größer oder gleich 0 und kleiner oder gleich 59 sein. | |
seconds | Zahl | Sekunden einer Minute. Muss größer oder gleich 0 und in der Regel kleiner oder gleich 59 sein. Eine API kann den Wert 60 zulassen, wenn sie Schaltsekunden zulässt. | |
nanos | Zahl | Sekundenbruchteile in Nanosekunden. Muss größer oder gleich 0 und kleiner oder gleich 999.999.999 sein. |
DayOfMonthRange
Ein Zeitraum von Tagen des Monats, der für alle Monate des Jahres gilt.
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
valid_from_day | Zahl | Erforderlich | Der erste Tag des Zeitraums (einschließlich). Erforderlich. |
valid_through_day | Zahl | Der letzte Tag des Zeitraums (einschließlich). Wenn nicht festgelegt, steht dieser Bereich für einen einzelnen Tag (valid_from_day). Optional. |
ValidTimeException
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
exceptional_period | object(ValidityRange) | Der Start- und Endzeitstempel, für den das Angebot nicht gültig ist. Diese Zeiten müssen unterschiedliche Tage darstellen. Das heißt, die Startzeit muss 00:00 Uhr (Tagesbeginn) und die Endzeit 00:00 Uhr (ausschließlich) am Tag des Endes des Ausnahmezeitraums sein. |
Datum
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
year | Zahl | Jahr des Datums. Der Wert muss zwischen 1 und 9999 liegen oder kann 0 sein, wenn ein Datum ohne Jahreszahl angegeben wird. | |
month | Zahl | Monat eines Jahres. Der Wert muss zwischen 1 und 12 liegen. Er kann auch 0 sein, wenn ein Jahr ohne Monat und Tag angegeben wird. | |
day | Zahl | Tag eines Monats. Der Wert muss zwischen 1 und 31 liegen und für das Jahr und den Monat gültig sein. Er kann auch 0 sein, wenn das Jahr bzw. der Monat angegeben wird, der Tag selbst jedoch nicht relevant ist. |
OfferSource
| Name | Beschreibung |
|---|---|
OFFER_SOURCE_UNSPECIFIED | |
OFFER_SOURCE_AGGREGATOR |
ActionType
Stellt den Einlösungsmodus des Angebots dar. Wenn ein Angebot für mehrere Fulfillment-Modi freigegeben werden kann, müssen für jeden Fulfillment-Modus doppelte Angebote erstellt werden.
| Name | Beschreibung |
|---|---|
ACTION_TYPE_UNSPECIFIED | |
ACTION_TYPE_FOOD_DELIVERY | Das Angebot gilt für Lieferservices für Lebensmittel. |
ACTION_TYPE_FOOD_TAKEOUT | Das Angebot gilt für Bestellungen von Speisen zur Abholung. |
ACTION_TYPE_DINING | Das Angebot gilt für das Essen vor Ort in einem Restaurant. |
ACTION_TYPE_SHOPPING_IN_STORE | Das Angebot gilt für Offline- und Ladenkäufe. |
OfferMode
Gibt die Methode oder den Channel an, über die bzw. den der Nutzer das Angebot in Anspruch nehmen kann.
| Name | Beschreibung |
|---|---|
OFFER_MODE_OTHER | Für Erfüllungsmethoden, die nicht von anderen spezifischen Modi abgedeckt werden. |
OFFER_MODE_WALK_IN | Das Angebot ist für Besuche vor Ort ohne vorherige Reservierung verfügbar. |
OFFER_MODE_FREE_RESERVATION | Das Angebot gilt, wenn ein Nutzer eine Reservierung vornimmt, für die keine Vorauszahlung erforderlich ist. |
OFFER_MODE_PAID_RESERVATION | Das Angebot gilt, wenn ein Nutzer eine Reservierung vornimmt, für die eine Vorauszahlung erforderlich ist. |
OFFER_MODE_ONLINE_ORDER | Das Angebot gilt für Bestellungen, die über eine Website oder digitale Plattform aufgegeben werden. |
OFFER_MODE_GIFT_CARD_PURCHASE | Gibt an, dass der Kauf einer Geschenkkarte der primäre Schritt ist, der zum Erhalt des Angebots erforderlich ist. |
OfferCategory
Kategorie des Angebots. Ein Basisangebot ist ein Standardangebot, das allen Kunden zur Verfügung steht, z. B. 10% Rabatt auf Ausgaben über 100 $. Bei einem Basisangebot, das durch einen Gutschein oder ein Zahlungsmittel eingeschränkt ist, sind die entsprechenden Felder festgelegt. Außerdem haben wir Add-on-Angebote wie ADD_ON_PAYMENT_OFFER. Solche Angebote können mit anderen Angeboten kombiniert werden, um zusätzliche Rabatte zu erhalten.
| Name | Beschreibung |
|---|---|
OFFER_CATEGORY_UNSPECIFIED | Der UNSPECIFIED- oder Standard-Enum-Wert sollte nicht in Feeds verwendet werden. |
OFFER_CATEGORY_BASE_OFFER | |
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER | |
OFFER_CATEGORY_ADD_ON_COUPON_OFFER | |
OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER | |
OFFER_CATEGORY_ADD_ON_FEE_REDUCTION_OFFER |
FeeUnit
| Name | Beschreibung |
|---|---|
FEE_UNIT_UNSPECIFIED | Der UNSPECIFIED- oder Standard-Enum-Wert sollte nicht in Feeds verwendet werden. |
FEE_UNIT_PER_GUEST | |
FEE_UNIT_PER_TRANSACTION |
FeeType
| Name | Beschreibung |
|---|---|
FEE_TYPE_UNSPECIFIED | Der UNSPECIFIED- oder Standard-Enum-Wert sollte nicht in Feeds verwendet werden. |
FEE_TYPE_FIXED | |
FEE_TYPE_VARIABLE |
OfferDiscountType
| Name | Beschreibung |
|---|---|
OFFER_DISCOUNT_TYPE_UNSPECIFIED | |
OFFER_DISCOUNT_TYPE_INSTANT_DISCOUNT | |
OFFER_DISCOUNT_TYPE_CASHBACK | |
OFFER_DISCOUNT_TYPE_REWARD_POINT |
MealType
| Name | Beschreibung |
|---|---|
MEAL_TYPE_UNSPECIFIED | Der UNSPECIFIED- oder Standard-Enum-Wert sollte nicht in Feeds verwendet werden. |
MEAL_TYPE_BREAKFAST | |
MEAL_TYPE_LUNCH | |
MEAL_TYPE_DINNER |
PaymentInstrumentType
| Name | Beschreibung |
|---|---|
PAYMENT_INSTRUMENT_TYPE_UNSPECIFIED | Der UNSPECIFIED- oder Standard-Enum-Wert sollte nicht in Feeds verwendet werden. |
PAYMENT_INSTRUMENT_CREDIT_CARD | |
PAYMENT_INSTRUMENT_DEBIT_CARD | |
PAYMENT_INSTRUMENT_BANK_ACCOUNT | |
PAYMENT_INSTRUMENT_UPI | |
PAYMENT_INSTRUMENT_ONLINE_WALLET | |
PAYMENT_INSTRUMENT_NETBANKING |
DayOfWeek
Steht für einen Wochentag.
| Name | Beschreibung |
|---|---|
DAY_OF_WEEK_UNSPECIFIED | Der Wochentag ist nicht angegeben. |
MONDAY | Montag |
TUESDAY | Dienstag |
WEDNESDAY | Mittwoch |
THURSDAY | Donnerstag |
FRIDAY | Freitag |
SATURDAY | Samstag |
SUNDAY | Sonntag |
ValidityScope
Der Umfang des Gültigkeitszeitraums, d. h. auf welche Aktionen sich dieser Gültigkeitszeitraum bezieht.
| Name | Beschreibung |
|---|---|
VALIDITY_SCOPE_UNSPECIFIED | |
VALIDITY_SCOPE_CLAIM | |
VALIDITY_SCOPE_REDEEM |
OfferTag
| Name | Beschreibung |
|---|---|
OFFER_TAG_UNSPECIFIED | Der UNSPECIFIED- oder Standard-Enum-Wert sollte nicht in Feeds verwendet werden. |
OFFER_TAG_NEW_YEAR_SPECIAL | |
OFFER_TAG_VALENTINES_SPECIAL |
AvailabilityLevel
Gibt den Lager- oder Verfügbarkeitsstatus eines Angebots an.
| Name | Beschreibung |
|---|---|
AVAILABILITY_LEVEL_UNSPECIFIED | |
AVAILABILITY_LEVEL_LOW | Gibt an, dass das Angebot nur noch begrenzt verfügbar ist. Nutzer werden aufgefordert, sie einzulösen, bevor sie ausverkauft sind. Die Optionen „MEDIUM“ und „HIGH“ werden möglicherweise später hinzugefügt. |
offer_specification
Der Rabatt kann ein Prozentsatz oder ein fester Wert sein, der vom Gesamtbetrag abgezogen wird. Beispiel: 1. 10% Rabatt auf die Endabrechnung. 2. 15 $ Rabatt auf eine Bestellung. Händler können auch benutzerdefinierte Rabatte wie „Zwei zum Preis von einem“ über die entsprechenden Spezifikationsfelder anbieten. Erforderlich.
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
discount_percent | Zahl | Schließt | Prozentsatz der Rechnung, auf den ein Rabatt gewährt wird. [0, 100] Bei 1+1- oder 50 %-Rabatten, die für das gesamte Menü gelten (z.B. 1+1-Buffet, 1+1 auf die gesamte Rechnung, 1+1 auf das Menü), kann dieser Wert auf 50 gesetzt werden. |
discount_value | object(Money) | Schließt | Fester Wert des Rabatts. |
other_offer_detail_text | String | Schließt | Freitext zur Beschreibung des Rabatts. Bei bestimmten 1+1-Angeboten (z.B. 1+1 Getränke, +1 Hauptgericht, 1+1 ausgewählte Menüpunkte) sollten diese Details hier beschrieben werden. |
Kosten
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
amount | object(Money) | Schließt | |
amount_range | object(MoneyRange) | Schließt |
denomination_type
| Feldname | Typ | Anforderung | Beschreibung |
|---|---|---|---|
fixed_denominations | object(FixedDenominations) | Schließt | Wird verwendet, wenn die Geschenkkarte in bestimmten, festen Beträgen verfügbar ist. |
custom_range | object(MoneyRange) | Schließt | Wird verwendet, wenn die Marke es Nutzern erlaubt, einen benutzerdefinierten (flexiblen) Nennwert innerhalb eines definierten Bereichs auszuwählen. |
Feedupload
Der Angebotsfeed muss auf den SFTP-Server für den Generic-Feed hochgeladen werden. Folgen Sie der Anleitung im Tutorial zur Verwendung des SFTP-Servers für generische Feeds und verwenden Sie in Ihrer Deskriptordatei den name-Satz auf google.offer.
Upload-Häufigkeit
Im Allgemeinen erwartet Google einen Feedupload pro Tag. Die Häufigkeit kann je nach Häufigkeit der Angebotsaktualisierungen auf Ihrer Seite erhöht oder verringert werden, um eine gleichbleibend hohe Genauigkeit zu gewährleisten. Wenden Sie sich an Ihren Google-Ansprechpartner.
Es dauert einige Stunden, bis die Daten bei Google angezeigt werden.
Angebotskategorisierung
OFFER_CATEGORY_BASE_OFFER: Angebote, die unabhängig voneinander in Anspruch genommen werden können, ohne mit anderen Angeboten kombiniert zu werden. Dazu zählen:- Pauschalrabatte auf die gesamte Rechnung (z.B. 20% Rabatt)
- Aboangebote (z.B. kostenloses Dessert bei Mitgliedschaft)
- Zahlungsangebote in Fällen, in denen es keine anderen Basisangebote für das Restaurant gibt
- Hinweis: Plattformweite Angebote zum Gebührenerlass oder zur Gebührenreduzierung sollten nicht als Basisangebote festgelegt werden.
- Zusatzangebote: Angebote, für die ein Basisangebot in Anspruch genommen werden muss. Dazu gehören:
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER(z.B. „Zusätzliche 10% Rabatt mit bestimmter Kreditkarte“)OFFER_CATEGORY_ADD_ON_COUPON_OFFER(z.B. kostenloses Getränk mit einem bestimmten Gutscheincode)OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER(z.B. zusätzliche 10% Rabatt für Abonnenten)OFFER_CATEGORY_ADD_ON_FEE_REDUCTION_OFFER(z.B. kostenlose Lieferung oder reduzierte Gebühr)
Weitere Hinweise:
- Plattformweite Angebote zum Erlass oder zur Reduzierung von Gebühren sollten nicht als Basisangebote (
OFFER_CATEGORY_BASE_OFFER) festgelegt werden. Sie sollten nur alsOFFER_CATEGORY_ADD_ON_FEE_REDUCTION_OFFERfestgelegt werden, um ein anderes aktives Basisangebot zu ergänzen. - Wenn für ein Restaurant kein Basisangebot festgelegt ist, werden keine Add-on-Angebote angezeigt.
Wenn es kein Basisangebot gibt, muss jedes Zahlungs-, Abo- oder Couponangebot, das ohne Kombination mit einem anderen Angebot in Anspruch genommen werden kann, mit
OFFER_CATEGORY_BASE_OFFERgekennzeichnet werden.- Je nach Typ müssen die relevanten Daten für
PaymentInstrument,SubscriptionoderCouponfestgelegt werden. - Partner müssen zwei Kopien jedes dieser Angebote bereitstellen, um Szenarien abzudecken, in denen sie sowohl als Basisangebote als auch als Add-on-Angebote fungieren. Der Text für das Add-on-Angebot kann dann für mehrere Restaurants mit
entity_idsoderadd_on_offer_applicable_to_all_entitiesfestgelegt werden.
- Je nach Typ müssen die relevanten Daten für
- Wenn ein Restaurant mehrere Basisangebote hat, die kombiniert werden können, sollten alle Basisangebote mit
OFFER_CATEGORY_BASE_OFFERgekennzeichnet werden. Basisangebote, die Zahlungs-, Abo- oder Gutscheinangebote sind, sollten zusätzlich als der entsprechende Add-on-Angebotstyp gesendet werden. ValidityPeriodsollte nur dann verwendet werden, um Add-on-Angebote als Basisangebote zu aktivieren, wenn kein aktives Basisangebot vorhanden ist.- Konsolidierung identischer Angebote nach Zahlungsmittel: Wenn mehrere Zahlungsmittel denselben Rabattwert haben (z. B. Kreditkarte, Debitkarte und Net Banking mit jeweils 5% Rabatt), gruppieren Sie sie in einem einzelnen konsolidierten
Offer-Objekt, anstatt separate doppelte Angebote zu senden. Füllen Sie dazu die Listepayment_instrument.itemsmit allen anwendbaren Zahlungsmitteln aus. So wird das Layout der Google-Oberfläche übersichtlicher und potenzielle Ranking-Einbußen aufgrund übermäßiger Einschränkungen durch Duplikate werden vermieden.
Beispielszenarien:
Ein Restaurant bietet 5% Rabatt bei Zahlung mit einer bestimmten Kreditkarte und ein kostenloses Getränk mit einem bestimmten Gutscheincode.
- Das Angebot mit 5% Rabatt für Kreditkarten sollte in zwei Kopien gesendet werden, eine mit dem Tag
OFFER_CATEGORY_BASE_OFFERund eine mit dem TagOFFER_CATEGORY_ADD_ON_PAYMENT_OFFER, jeweils mit den Details zuPaymentInstrument. - Ein Angebot für ein kostenloses Getränk mit einem Gutscheincode sollte als
OFFER_CATEGORY_ADD_ON_COUPON_OFFERmit den DetailsCoupongesendet werden.
- Das Angebot mit 5% Rabatt für Kreditkarten sollte in zwei Kopien gesendet werden, eine mit dem Tag
Ein Restaurant bietet 10% Rabatt für Laufkundschaft und 5% Rabatt bei Zahlung mit einer bestimmten Kreditkarte. Beide Rabatte können kombiniert werden.
- Das Angebot für Laufkundschaft mit 10% Rabatt sollte mit
OFFER_CATEGORY_BASE_OFFERgekennzeichnet werden. - Das Kreditkartenangebot mit 5% Rabatt sollte zweimal vorhanden sein, einmal mit dem Tag
OFFER_CATEGORY_BASE_OFFERund einmal mit dem TagOFFER_CATEGORY_ADD_ON_PAYMENT_OFFER.
- Das Angebot für Laufkundschaft mit 10% Rabatt sollte mit
Ein Restaurant bietet unter der Woche nur zum Mittagessen 10% Rabatt und jederzeit 5% Rabatt bei Zahlung mit einer bestimmten Kreditkarte.
- Das Angebot mit 10% Rabatt sollte auf
ValidityPeriodfestgelegt werden, um es nur während der Mittagszeit des Restaurants an Wochentagen zu präsentieren. - Das Kreditkartenangebot mit 5% Rabatt sollte in zweifacher Ausführung gesendet werden.
- Eine Kopie sollte mit
OFFER_CATEGORY_BASE_OFFERgetaggt werden und die Details derPaymentInstrumententhalten.ValidityPeriodsollte so festgelegt werden, dass die Mittagszeit an Wochentagen ausgeschlossen wird, wenn das Mittagsangebot mit 10% Rabatt aktiv ist. - Eine Kopie sollte mit
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFERgetaggt werden und die Details vonPaymentInstrumententhalten.
- Eine Kopie sollte mit
- Alle anderen Zahlungsangebote für dieses Restaurant sollten mit
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFERgekennzeichnet werden.
- Das Angebot mit 10% Rabatt sollte auf
Entwicklung und Einführung
Während der Integration kann Ihnen das Partner-Portal Informationen und Feedback zu Ihrer Entwicklung geben. Der Entwicklungsprozess folgt diesem Ablauf:
- Die Integration wird zuerst in der Sandbox-Umgebung entwickelt. Sie sollten einen Export der Produktionsdaten (oder sogar Produktionsdaten direkt) in der Google-Sandbox-Umgebung verwenden. So wird sichergestellt, dass bei der Entwicklung alle Grenzfälle berücksichtigt werden. Außerdem kann Google die Datenqualität besser bewerten und Sie anhand Ihres Datenmodells besser unterstützen.
- Sobald du täglich vollständige Händler-, Dienstleistungs- und Angebotsfeeds in der Sandbox-Umgebung hochlädst, wertet das Google-Team deine Feeds aus. Sobald das Google-Team die Genehmigung erteilt hat, können Sie Ihren Code in die Produktionsumgebung übertragen und mit dem Senden von Produktionsdaten an die Google-Produktionsumgebung beginnen.
- Nachdem du die Produktionsintegration vollständig getestet hast, beginnt das Google-Team mit seinen Tests. Sobald alle Tests abgeschlossen sind, wird Ihre Integration eingeführt.
Monitoring
Um eine gute Nutzererfahrung zu gewährleisten, prüft Google vor und nach der Einführung, ob die Angebote gültig und korrekt sind und unseren Richtlinienkriterien entsprechen. Dazu setzt Google eine Kombination aus manueller und automatisierter Überprüfung ein. Die Ergebnisse dieser Überprüfungen sind im Angebots-Dashboard des Action Centers verfügbar (nur Produktion). Das Ergebnis dieser Überwachung kann sich auf das Ranking der Angebote auswirken.
Achten Sie darauf, dass die Seite mit den Angeboten in weniger als 5 Sekunden vollständig geladen wird. Andernfalls gilt dies als Fehler und wird als Bad link gekennzeichnet.
Automatisierte Prüfungen (Crawler)
Das Google-Qualitätsteam implementiert Crawler. Crawler sind Skripts, die einen Webbrowser automatisieren, um einige Klicks auszuführen und Angebotsinformationen zu extrahieren. Dies dient ausschließlich zu Qualitätsprüfungszwecken.
Anzahl der Abfragen
Wenn wir uns beispielsweise dazu entschließen, 5.000 Prüfungen pro Tag zu senden, führt unser Crawler 5.000 Mal pro Tag (gleichmäßig über den Tag verteilt, also etwa einmal alle 17 Sekunden) alle folgenden Aktionen aus, die ein normaler Nutzer ausführen würde:
- Klicken Sie in der Google Suche auf den Partnerlink.
- Suchen Sie nach den Angebotsinformationen.
- Wenn für das Angebot eine Reservierung erforderlich ist, wird der Reservierungsvorgang fortgesetzt, um zu bestätigen, dass das Angebot zum angegebenen Zeitpunkt verfügbar ist (es wird keine Reservierung vorgenommen).
Erkennung von Web-Scrapern
Damit der Web-Scraper nicht gesperrt wird (was dazu führen kann, dass die Angebote als nicht verfügbar eingestuft werden), muss Ihr System es unserem Web-Scraper ermöglichen, Ihre Seite jederzeit abzufragen. So erkennen Sie unseren Web-Scraper:
- Der User-Agent des Web-Scrapers enthält den String Google-Offers:
- Beispiel:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google-Offers) Chrome/104.0.5112.101 Safari/537.36
- Sie können auch prüfen, ob die Aufrufe von Google stammen, indem Sie einen umgekehrten DNS-Lookup durchführen, wie in Googlebot und andere Google-Crawler prüfen empfohlen.
In unserem Fall folgt die umgekehrte DNS-Auflösung diesem Muster:
google-proxy-***-***-***-***.google.com.
Technisches Verhalten
Caching
Um die Last auf der Partnerwebsite zu reduzieren, sind unsere Crawler in der Regel so konfiguriert, dass sie alle standardmäßigen HTTP-Caching-Headern in der Antwort berücksichtigen. Das bedeutet, dass wir bei korrekt konfigurierten Websites vermeiden, Inhalte, die sich selten ändern (z.B. JavaScript-Bibliotheken), wiederholt abzurufen. Weitere Informationen zur Implementierung von Caching finden Sie in der HTTP-Caching-Dokumentation.