Übersicht

Partner, die Angebote nutzen möchten, müssen zuerst die Kontoeinrichtung für eine Händler- oder Entitätsintegration (Pilotprojekt) abschließen. Hier wird beschrieben, wie die Integration implementiert, getestet und eingeführt wird. Lies dir diese Übersicht und die Richtlinien für Angebote durch, bevor du mit den Integrationsschritten beginnst.

Angebote

Mit dieser Integration kannst du strukturierte Informationen zu Angeboten und Rabatten von Händlern weitergeben, die für bestimmte Dienstleistungen zu bestimmten Zeiten verfügbar sind. Angebote bestehen aus dem tatsächlichen Angebot (z. B. Rabatt in Prozent oder Euro), Gültigkeitszeiträumen (z. B. bestimmte Zeiten oder Wochentage) und den jeweiligen Verwendungszwecken (das Angebot gilt nur für bestimmte Dienstleistungen) 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
  • Zwei Desserts zum Preis von einem am Muttertag von 18:00 bis 22:00 Uhr
  • 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 Angebote in die Integration aufgenommen werden können, müssen sie unsere Eignungskriterien und technischen Anforderungen erfüllen. Bitte lies dir unsere Richtlinien für Angebote durch. Dort wird auch erklärt, was zu tun ist, wenn Angebote nicht den technischen Anforderungen entsprechen.

Implementierung von Angeboten

Die Angebotsintegration besteht aus zwei Feeds, die täglich oder in einer Häufigkeit hochgeladen werden, die eine hohe Genauigkeit gewährleistet (d. h. die Aktualität erhöht):

OfferFeed

FeldnameTypAnforderungBeschreibung
dataArray von Objekt
(Offer)

Angebot

FeldnameTypAnforderungBeschreibung
offer_idString

Erforderlich

Eindeutige ID des Angebots. Erforderlich.
entity_idsString-Array

Liste der Händler, die an diesem Angebot teilnehmen.
add_on_offer_applicable_to_all_entitiesboolean

Wenn „true“, gilt dieses Angebot für alle Rechtssubjekte unter dem Aggregator. Gilt nur für Add-on-Angebote.
offer_sourceenum
(OfferSource)

Erforderlich

Ein Angebot kann vom Aggregator, einem einzelnen Händler oder sogar von einem Drittanbieter als Add-on bereitgestellt werden. Erforderlich.
action_typeenum
(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_modesArray von Enum
(OfferMode)

Erforderlich

Die Methoden, mit denen das Angebot genutzt werden kann – z. B. ohne Reservierung, mit Reservierung, online usw. Erforderlich.
offer_categoryenum
(OfferCategory)

Erforderlich

Die Kategorie des Angebots. Erforderlich.
source_assigned_priorityZahl

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 gibt an, dass die Priorität nicht festgelegt ist.
offer_detailsobject
(OfferDetails)

Erforderlich

Details des Angebots, z. B. Rabatt, Buchungskosten usw. Erforderlich.
offer_restrictionsobject
(OfferRestrictions)

Erforderlich

Beschreibt, wie das Angebot eingeschränkt ist, z.B. ob ein Abo oder Zahlungsmittel erforderlich ist, ob dieses Angebot mit anderen Angeboten kombiniert werden kann (und mit welchen Typen) usw. Erforderlich.
couponobject
(Coupon)

Details zu einem Gutschein. Erforderlich für offer_category: OFFER_CATEGORY_ADD_ON_COUPON_OFFER.
payment_instrumentobject
(PaymentInstrument)

Details zu einem Zahlungsmittel. Erforderlich für offer_category: OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER.
subscriptionobject
(Subscription)

Details eines Abos. Erforderlich für offer_category: OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER.
termsobject
(Terms)

Erforderlich

Nutzungsbedingungen des Angebots. Erforderlich.
validity_periodsArray von Objekt
(ValidityPeriod)

Erforderlich

Der Gültigkeitszeitraum des Angebots. Beschreibt, für welchen Zeitraum das Angebot gilt, einschließlich Start- und Endzeit, Wochentage usw. Erforderlich.
offer_urlString

URL zur Angebotsseite des Händlers. Erforderlich für offer_category: OFFER_CATEGORY_BASE_OFFER.
image_urlString

URL zum Angebotsbild des Händlers.

OfferDetails

FeldnameTypAnforderungBeschreibung
offer_display_textString

Erforderlich

Der Angebotstext, den der Angebotsanbieter Kunden auf der Suchergebnisseite präsentieren möchte. Erforderlich.
oneOf
(offer_specification)

Erforderlich

Es kann nur eines der Felder in diesem „oneOf“ festgelegt werden.
max_discount_valueobject
(Money)

Der maximale Rabatt, der in Anspruch genommen werden kann. Beispiel: 10% Rabatt auf bis zu 100 $.
min_spend_valueobject
(Money)

Der Mindestbetrag, der ausgegeben werden muss, um den Rabatt zu erhalten. Beispiel: 10% Rabatt bei einem Gesamtpreis von mindestens 100 $.
booking_costobject
(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_unitenum
(FeeUnit)

Die Einheit der Buchungskosten. Zum Beispiel pro Person und pro Transaktion.
convenience_feeobject
(Fee)

booking_cost_adjustableboolean

Gibt an, ob die Buchungskosten angepasst werden können, d.h., ob sie von der endgültigen Rechnung 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 sieht also so aus: Gesamtausgaben – 30 % – 15 $
additional_feesArray von Objekt
(AdditionalFee)

Zusätzliche Gebühren, die dem Nutzer in Rechnung gestellt werden. Beispiele: Komfort, Handhabung usw.

Geld

Stellt einen Geldbetrag mit Währungstyp dar

FeldnameTypAnforderungBeschreibung
currency_codeString

Der aus drei Buchstaben bestehende Währungscode gemäß ISO 4217
unitsString

Die ganzen Einheiten des Betrags. Beispiel: Wenn currencyCode "USD" ist, dann entspricht eine Einheit 1 US-Dollar.
nanosZahl

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. -1,75 $ wird z. B. als units = −1 und nanos = −750.000.000 dargestellt.

Gebühr

FeldnameTypAnforderungBeschreibung
unitenum
(FeeUnit)

typeenum
(FeeType)

oneOf
(cost)

Es kann nur eines der Felder in diesem „oneOf“ festgelegt werden.

MoneyRange

FeldnameTypAnforderungBeschreibung
min_amountobject
(Money)

max_amountobject
(Money)

AdditionalFee

FeldnameTypAnforderungBeschreibung
nameString

Erforderlich

Der Name der zusätzlichen Gebühr. Beispiele: Zahlungsgebühr, Bearbeitungsgebühr usw. Erforderlich.
feeobject
(Fee)

OfferRestrictions

FeldnameTypAnforderungBeschreibung
combinable_with_other_offersboolean

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 einer der oben genannten Bedingungen entspricht, kombinierbar.
combinable_offer_categoriesArray 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_idsString-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.
inclusionsArray von Objekt
(OfferCondition)

Liste der Bedingungen, die erfüllt sein müssen, damit das Angebot gültig ist (z.B. alkoholfreie Getränke, Speisen).
exclusionsArray von Objekt
(OfferCondition)

Liste der Bedingungen, die das Angebot ungültig machen (z.B. Buffet, Kombiangebote und Cocktails).
min_guestZahl

Die Mindestanzahl von Personen, die erforderlich ist, um das Angebot in Anspruch zu nehmen.
food_offer_restrictionsobject
(FoodOfferRestrictions)

Einschränkungen für Essensangebote

OfferCondition

FeldnameTypAnforderungBeschreibung
descriptionString

FoodOfferRestrictions

FeldnameTypAnforderungBeschreibung
meal_typesArray 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 Mahlzeitentypen angewendet werden.
restricted_to_certain_coursesboolean

Gibt an, ob das Angebot nur auf bestimmte Kurse angewendet werden kann.

Gutschein

FeldnameTypAnforderungBeschreibung
textString

Der Gutscheintext, den der Angebotsanbieter Nutzern präsentieren möchte.
codeString

Erforderlich

Zum Einlösen des Angebots ist ein Gutscheincode erforderlich. Erforderlich.

PaymentInstrument

FeldnameTypAnforderungBeschreibung
itemsArray von Objekt
(PaymentInstrumentItem)

Erforderlich

Liste der Zahlungsmittel, die für das Angebot verwendet werden können. Erforderlich.
provider_nameString

Erforderlich

Name des Anbieters des Zahlungsmittels. Kann ein Bankpartner, der Name einer Bank usw. sein, z. B. American Express, HDFC, ICICI. Erforderlich.

PaymentInstrumentItem

FeldnameTypAnforderungBeschreibung
typeenum
(PaymentInstrumentType)

Erforderlich

Typ des Zahlungsmittels. Erforderlich.
nameString

Erforderlich

Name des Zahlungsmittels, z. B. der Name der Kreditkarte. Beispiele: HDFC Infinia, American Express Platinum. Erforderlich.

Abo

FeldnameTypAnforderungBeschreibung
nameString

Erforderlich

Der Name des Abos. Erforderlich.
subscription_auto_addedboolean

Gibt an, ob das Abo automatisch hinzugefügt wird, wenn ein Nutzer dieses Angebot in Anspruch nimmt.
costobject
(Money)

Erforderlich

Die Kosten des Abos. Erforderlich.
subscription_durationobject
(Duration)

Erforderlich

Wie lange das Abo zum angegebenen Abopreis gültig ist. Erforderlich.
terms_and_conditions_urlString

URL zu den Nutzungsbedingungen des Partners, die für dieses Abo gelten.

Dauer

FeldnameTypAnforderungBeschreibung
secondsString

Signierte 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
nanosZahl

Signierte Sekundenbruchteile mit Nanosekunden-Auflö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 liegen.

Nutzungsbedingungen

FeldnameTypAnforderungBeschreibung
urlString

URL zu den Nutzungsbedingungen des Partners.
restricted_to_certain_usersboolean

Gibt an, ob das Angebot auf bestimmte Nutzer beschränkt ist.
terms_and_conditionsString

Primärer Nutzungsbedingungen-Text, der vom Partner bereitgestellt wird.
additional_terms_and_conditionsString-Array

Zusätzliche Nutzungsbedingungen des Partners.

ValidityPeriod

FeldnameTypAnforderungBeschreibung
valid_periodobject
(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 (exklusiv) am Tag des Gültigkeitsendes sein.
time_of_dayArray von Objekt
(TimeOfDayWindow)

Gibt das gültige Zeitintervall an einem bestimmten Tag und die Tage an, an denen das Angebot verfügbar ist. 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 während des gesamten Zeitraums von valid_period verfügbar.
time_exceptionsArray von Objekt
(ValidTimeException)

Gibt Ausnahmen für die oben genannten „valid_period“ und „valid_time_of_week“ an.

ValidityRange

Ein Zeitraum mit Start und Ende.

FeldnameTypAnforderungBeschreibung
valid_from_timeobject
(Timestamp)

Erforderlich

Der Beginn des Bereichs (einschließlich). Erforderlich.
valid_through_timeobject
(Timestamp)

Die Endzeit des Bereichs (ausschließlich). Wenn das Feld nicht festgelegt ist, endet dieser Zeitraum nie. Optional.

Zeitstempel

FeldnameTypAnforderungBeschreibung
secondsString

Stellt Sekunden der UTC-Zeit seit der Unix-Epoche 1970-01-01T00:00:00Z dar. Der Wert muss einschließlich zwischen 0001-01-01T00:00:00Z und 9999-12-31T23:59:59Z liegen.
nanosZahl

Nicht negative Sekundenbruchteile Nanosekunden-Auflösung. Negative Sekundenwerte mit Bruchteilen müssen weiterhin nicht negative Nano-Werte haben, die zeitlich vorwärts gezählt werden. Der Wert muss einschließlich zwischen 0 und 999.999.999 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.

FeldnameTypAnforderungBeschreibung
time_windowsobject
(TimeOfDayRange)

Erforderlich

Der Zeitraum, in dem die Bestellung aufgegeben/ausgeführt werden kann. Erforderlich.
day_of_weekArray von Enum
(DayOfWeek)

Die Liste der Wochentage, an denen die Zeitfenster angewendet werden. Wenn nichts festgelegt ist, gilt die Regel für alle Wochentage. Optional.

TimeOfDayRange

Ein Zeitraum mit Start und Ende.

FeldnameTypAnforderungBeschreibung
open_timeobject
(TimeOfDay)

Eine Zeit, die den Beginn des Tages im Zeitraum angibt (einschließlich). Wenn nicht festgelegt, ist der Wert 00:00:00. Optional.
close_timeobject
(TimeOfDay)

Eine Zeit, die das Ende des Tages im Bereich angibt (exklusiv). Wenn nicht festgelegt, wird 23:59:59 verwendet. Optional.

TimeOfDay

FeldnameTypAnforderungBeschreibung
hoursZahl

Stunden eines Tages im 24-Stunden-Format. Muss größer oder gleich 0 und in der Regel kleiner oder gleich 23 sein. Für bestimmte Fälle, z. B. den Geschäftsschluss, kann in einer API auch der Wert „24:00:00“ zulässig sein.
minutesZahl

Minuten einer Stunde. Muss größer oder gleich 0 und kleiner oder gleich 59 sein.
secondsZahl

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.
nanosZahl

Sekundenbruchteile in Nanosekunden. Muss größer oder gleich 0 und kleiner oder gleich 999.999.999 sein.

ValidTimeException

FeldnameTypAnforderungBeschreibung
exceptional_periodobject
(ValidityRange)

Start- und Endzeitstempel, für die 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 (exklusiv) am Tag des Endes des Ausnahmezeitraums sein.

OfferSource

NameBeschreibung
OFFER_SOURCE_UNSPECIFIED
OFFER_SOURCE_AGGREGATOR

ActionType

NameBeschreibung
ACTION_TYPE_UNSPECIFIED
ACTION_TYPE_DINING

OfferMode

NameBeschreibung
OFFER_MODE_OTHER
OFFER_MODE_WALK_IN
OFFER_MODE_FREE_RESERVATION
OFFER_MODE_PAID_RESERVATION
OFFER_MODE_ONLINE_ORDER

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 zu anderen Angeboten hinzugefügt werden, um zusätzliche Rabatte zu erhalten.

NameBeschreibung
OFFER_CATEGORY_UNSPECIFIED
OFFER_CATEGORY_BASE_OFFER
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER
OFFER_CATEGORY_ADD_ON_COUPON_OFFER
OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER

FeeUnit

NameBeschreibung
FEE_UNIT_UNSPECIFIED
FEE_UNIT_PER_GUEST
FEE_UNIT_PER_TRANSACTION

FeeType

NameBeschreibung
FEE_TYPE_UNSPECIFIED
FEE_TYPE_FIXED
FEE_TYPE_VARIABLE

MealType

NameBeschreibung
MEAL_TYPE_UNSPECIFIED
MEAL_TYPE_BREAKFAST
MEAL_TYPE_LUNCH
MEAL_TYPE_DINNER

PaymentInstrumentType

NameBeschreibung
PAYMENT_INSTRUMENT_TYPE_UNSPECIFIED
PAYMENT_INSTRUMENT_CREDIT_CARD
PAYMENT_INSTRUMENT_DEBIT_CARD
PAYMENT_INSTRUMENT_BANK_ACCOUNT
PAYMENT_INSTRUMENT_UPI
PAYMENT_INSTRUMENT_ONLINE_WALLET

DayOfWeek

Steht für einen Wochentag.

NameBeschreibung
DAY_OF_WEEK_UNSPECIFIEDDer Wochentag ist nicht angegeben.
MONDAYMontag
TUESDAYDienstag
WEDNESDAYMittwoch
THURSDAYDonnerstag
FRIDAYFreitag
SATURDAYSamstag
SUNDAYSonntag

offer_specification

Der Rabatt kann ein Prozentsatz oder ein fester Wert sein, der vom Gesamtwert 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.

FeldnameTypAnforderungBeschreibung
discount_percentZahl

Schließt sich mit discount_value und other_offer_detail_text gegenseitig aus.

Prozentsatz der Rechnung, auf den ein Rabatt gewährt wird. [0, 100] Bei 1+1- oder 50 %-Rabattangeboten, 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 festgelegt werden.
discount_valueobject
(Money)

Schließt sich mit discount_percent und other_offer_detail_text gegenseitig aus.

Fester Wert des Rabatts.
other_offer_detail_textString

Schließt sich mit discount_percent und discount_value gegenseitig aus.

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

FeldnameTypAnforderungBeschreibung
amountobject
(Money)

Schließt sich mit amount_range gegenseitig aus

amount_rangeobject
(MoneyRange)

Schließt sich mit amount gegenseitig aus

Feedupload

Der Angebotsfeed muss auf den SFTP-Server für Feeds Generic hochgeladen werden. Folge der Anleitung zur Verwendung des allgemeinen SFTP-Servers für Feeds. Das Feld name muss in der Deskriptordatei auf google.offer gesetzt sein.

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 auf 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 für Mitglieder)
    • Zahlungsangebote in Fällen, in denen es keine anderen Basisangebote für das Restaurant gibt
  • Add-on-Angebote: Angebote, für die ein Basisangebot eingelöst werden muss. Dazu gehören:
    • OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER (z. B. Zusätzliche 10% Rabatt mit einer bestimmten 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ätzlicher Rabatt von 10% für Abonnenten)

Weitere Hinweise:

  • 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 Hinzufügen zu einem anderen Angebot in Anspruch genommen werden kann, mit OFFER_CATEGORY_BASE_OFFER gekennzeichnet werden.
    • Je nach Typ müssen die relevanten Daten für PaymentInstrument, Subscription oder Coupon festgelegt 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 Add-on-Angebotstext kann dann für mehrere Restaurants entweder mit entity_ids oder add_on_offer_applicable_to_all_entities festgelegt werden.
  • Wenn ein Restaurant mehrere kombinierbare Basisangebote hat, sollten alle Basisangebote mit OFFER_CATEGORY_BASE_OFFER gekennzeichnet werden. Basisangebote, die Zahlungs-, Abo- oder Gutscheinangebote sind, sollten zusätzlich als der entsprechende Add-on-Angebotstyp gesendet werden.
  • ValidityPeriod sollte verwendet werden, um Add-on-Angebote als Base Offers zu aktivieren, wenn kein aktives Base Offer vorhanden ist.

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 auf Kreditkarten sollte in zwei Kopien gesendet werden, eine mit dem Tag OFFER_CATEGORY_BASE_OFFER und eine mit dem Tag OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER, jeweils mit den Details zu PaymentInstrument.
    • Ein Angebot für ein kostenloses Getränk mit einem Gutscheincode sollte als OFFER_CATEGORY_ADD_ON_COUPON_OFFER mit den Coupon-Details gesendet werden.
  • 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_OFFER gekennzeichnet werden.
    • Das Kreditkartenangebot mit 5% Rabatt sollte in zwei Ausführungen vorliegen, wobei eine mit OFFER_CATEGORY_BASE_OFFER und die andere mit OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER gekennzeichnet ist.
  • Ein Restaurant bietet nur an Wochentagen 10% Rabatt auf das Mittagessen und jederzeit 5% Rabatt bei Zahlung mit einer bestimmten Kreditkarte.

    • Das Angebot mit 10% Rabatt sollte ValidityPeriod enthalten, um anzugeben, dass es nur während der Mittagszeit des Restaurants an Wochentagen gilt.
    • Das Kreditkartenangebot mit 5% Rabatt sollte in zweifacher Ausführung gesendet werden.
      • Eine Kopie sollte mit OFFER_CATEGORY_BASE_OFFER getaggt werden und die Details zu PaymentInstrument enthalten. ValidityPeriod sollte 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_OFFER getaggt werden und die PaymentInstrument-Details enthalten.
    • Alle anderen Zahlungsangebote für dieses Restaurant sollten mit OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER gekennzeichnet werden.

Entwicklung und Einführung

Während der Integration findest du im Partner-Portal Informationen und Feedback zu deiner Entwicklung. Der Entwicklungsprozess läuft so ab:

  • Die Integration wird zuerst in der Sandbox-Umgebung entwickelt. Du solltest dort einen Produktionsexport verwenden oder Produktionsdaten sogar direkt nutzen. So wird sichergestellt, dass deine Entwicklung alle Grenzfälle abdeckt und Google die Datenqualität auswerten und dich je nach deinem Datenmodell besser unterstützen kann.
  • Sobald du täglich vollständige Händler-, Dienstleistungs- und Angebotsfeeds in der Sandbox-Umgebung hochlädst, wertet das Google-Team deine Feeds aus. Wenn du die Genehmigung des Google-Teams erhältst, kannst du deinen Code in die Produktion übertragen und Produktionsdaten an die Google-Produktionsumgebung senden.
  • Nachdem du die Produktionsintegration vollständig getestet hast, beginnt das Google-Team mit seinen Tests. Sobald alle Tests abgeschlossen sind, wird die Integration gestartet.

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. Das Ergebnis dieser Überprüfungen ist im Angebots-Dashboard des Action Centers verfügbar (nur Produktion). Die Ergebnisse dieser Überwachung können sich auf das Ranking der Angebote auswirken.

Automatisierte Prüfungen (Crawler)

Crawler werden vom Google-Qualitätsteam implementiert. 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, bedeutet das, dass unser Crawler 5.000 Mal pro Tag (gleichmäßig über den Tag verteilt, also etwa einmal alle 17 Sekunden) alle folgenden Aktionen ausführt, 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 Buchung erforderlich ist, wird der Buchungsvorgang fortgesetzt, um zu bestätigen, dass das Angebot zum angegebenen Zeitpunkt verfügbar ist. Es wird keine Buchung 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 speziellen Fall folgt die umgekehrte DNS-Auflösung diesem Muster: google-proxy-***-***-***-***.google.com.

Technisches Verhalten

Caching

Um die Last auf der Partnerwebsite zu verringern, sind unsere Crawler in der Regel so konfiguriert, dass sie alle Standard-HTTP-Caching-Header in der Antwort berücksichtigen. Das bedeutet, dass wir bei korrekt konfigurierten Websites nicht wiederholt Inhalte abrufen, die sich selten ändern (z.B. JavaScript-Bibliotheken). Weitere Informationen zur Implementierung von Caching finden Sie in der HTTP-Caching-Dokumentation.