Intégration du flux d'offres

Offres

L'intégration des offres vous permet de transmettre des informations structurées sur les promotions et les remises appliquées par les marchands à des services spécifiques à des moments précis. Les offres se composent de l'offre réelle (pourcentage de remise, remise en dollars, etc.), des périodes de validité (heures spécifiques, jours de la semaine, etc.) et des utilisations applicables (l'offre ne peut être utilisée que sur certains services), ainsi que de combinaisons complexes de restrictions.

Voici quelques exemples d'offres :

  • Moitié prix sur les hors-d'œuvre tous les mercredis et jeudis de décembre entre 12h et 17h
  • Un dessert inclus pour tout dîner de la fête des Mères entre 18h et 22h
  • 5 € de remise sur les entrées de brunch tous les dimanches de 10h à 14h
  • 10% de remise pour les clients sans rendez-vous, cumulable avec 5% de remise pour les abonnés Premium et 5% de remise si l'utilisateur paie via votre application.

Pour qu'une offre soit incluse dans l'intégration, elle doit correspondre au modèle de données technique et répondre à nos critères d'éligibilité. Veillez à consulter nos Règles relatives aux offres pour vous assurer que votre intégration est conforme et pour savoir comment gérer les offres qui ne répondent pas aux exigences techniques.

Mise en œuvre des offres

L'intégration des offres se compose de deux flux qui seront importés quotidiennement ou à une fréquence garantissant une précision élevée (c'est-à-dire qui réduit l'obsolescence) :

OfferFeed

Nom du champTypeExigenceDescription
dataTableau d'objets
(Offer)

Offre

Nom du champTypeExigenceDescription
offer_idchaîne

Obligatoire

Identifiant unique de l'offre. Obligatoire.
entity_idsarray of string

Liste des marchands participant à cette offre.
add_on_offer_applicable_to_all_entitiesbooléen

Si la valeur est "true", cette offre s'applique à toutes les entités de l'agrégateur. Uniquement applicable aux offres de modules complémentaires.
offer_sourceenum
(OfferSource)

Obligatoire

Une offre peut être proposée par l'agrégateur, un marchand individuel ou même un tiers en tant que module complémentaire. Obligatoire.
action_typeenum
(ActionType)

Obligatoire

Service qui propose l'offre. Un offer_id ne peut appartenir qu'à un seul action_type. Si une offre peut être partagée entre plusieurs types de services, des offres en double avec des identifiants uniques doivent être créées pour chaque type de service. Obligatoire.
offer_modestableau d'enum
(OfferMode)

Obligatoire

Méthodes pour profiter de l'offre : sans réservation, avec réservation, en ligne, etc. Obligatoire.
offer_categoryenum
(OfferCategory)

Obligatoire

Catégorie de l'offre. Obligatoire.
source_assigned_prioritynombre

Entier non négatif ([1-100], où 1 représente la priorité la plus élevée) indiquant le niveau de priorité de l'offre attribué par la source. Lorsque plusieurs offres sont disponibles pour le même marchand, cela sert de signal pour le classement des offres. La valeur 0 indique que la priorité n'est pas définie.
offer_detailsobjet
(OfferDetails)

Obligatoire

Détails de l'offre, comme la remise, le coût de la réservation, etc. Obligatoire.
offer_restrictionsobject
(OfferRestrictions)

Obligatoire

Décrit les restrictions de l'offre, par exemple si un abonnement/instrument de paiement est requis, si cette offre peut être combinée avec d'autres offres (et de quels types), etc. Obligatoire.
couponobjet
(Coupon)

Informations sur un bon de réduction. Obligatoire pour offer_category : OFFER_CATEGORY_ADD_ON_COUPON_OFFER.
payment_instrumentobjet
(PaymentInstrument)

Informations sur un moyen de paiement. Obligatoire pour offer_category: OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER.
subscriptionobjet
(Subscription)

Détails d'un abonnement. Obligatoire pour offer_category: OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER.
termsobject
(Terms)

Obligatoire

Conditions d'utilisation de l'offre. Obligatoire.
validity_periodsTableau d'objets
(ValidityPeriod)

Obligatoire

La période de validité de l'offre. Décrit la période de validité de l'offre, y compris les heures de début et de fin, les jours de la semaine, etc. Obligatoire.
offer_urlchaîne

URL de la page de l'offre du marchand. Obligatoire pour offer_category : OFFER_CATEGORY_BASE_OFFER.
tagstableau d'enum
(OfferTag)

Balises spéciales associées à l'offre. Il permet d'identifier les offres spéciales telles que "Festive", "Les mieux notés", "Les plus réservés", etc.
brand_idchaîne

Identifie la marque associée à l'offre. Si elle n'est pas définie, la marque par défaut est utilisée.
availability_levelenum
(AvailabilityLevel)

Niveau de disponibilité de l'offre.

OfferDetails

Nom du champTypeExigenceDescription
offer_display_textchaîne

Obligatoire

Texte de l'offre que le fournisseur souhaite afficher pour les clients sur la page de résultats de recherche. Notez que ce n'est peut-être pas exactement ce qui est présenté aux utilisateurs et que nous pouvons utiliser d'autres métadonnées pour le réécrire ou le reformuler. Obligatoire.
oneOf
(offer_specification)

Obligatoire

Un seul des champs de ce oneOf peut être défini.
max_discount_valueobjet
(Money)

Remise maximale dont vous pouvez bénéficier. Par exemple, 10% de remise jusqu'à 100 €.
min_spend_valueobjet
(Money)

Valeur minimale des dépenses pour bénéficier de la remise. Par exemple, 10% de remise lorsque le prix total est de 100 € ou plus.
booking_costobjet
(Money)

Coût de réservation de cette offre. Par exemple, 100 $ de remise sur l'addition finale lorsqu'une table est réservée au prix de 15 $.
booking_cost_unitenum
(FeeUnit)

Unité du coût de réservation. Par exemple, par personne, par transaction.
convenience_feeobjet
(Fee)

booking_cost_adjustablebooléen

Indique si le coût de la réservation est ajustable, c'est-à-dire s'il est soustrait de la facture finale. Par exemple : 30% de remise sur le dîner avec réservation. Le coût de la réservation est de 15 $, qui seront déduits de la facture finale. Facture finale : dépenses totales - 30% - 15 $
additional_feesTableau d'objets
(AdditionalFee)

Frais supplémentaires facturés à l'utilisateur. Exemples : frais de commodité, de manutention, de livraison, d'emballage, de service, etc.
offer_discount_typeenum
(OfferDiscountType)

Type de remise.
gift_card_infoobjet
(GiftCardInfo)

Détails spécifiques aux offres de cartes cadeaux.

Valeur monétaire

Représente un montant associé à un type de devise.

Nom du champTypeExigenceDescription
currency_codechaîne

Code de la devise à trois lettres défini par la norme ISO 4217.
unitsnombre

Unités entières du montant. Par exemple, si currencyCode est défini sur "USD", une unité correspond à un dollar américain.
nanosnombre

Nombre de nano-unités (10^-9) du montant. La valeur doit être comprise entre -999 999 999 et +999 999 999 inclus. Si units est positif, nanos doit être positif ou nul. Si units est égal à zéro, nanos peut être positif, nul ou négatif. Si units est négatif, nanos doit être négatif ou égal à zéro. Par exemple, -1,75 $ est représenté par units=-1 et nanos=-750 000 000.

Fee

Nom du champTypeExigenceDescription
unitenum
(FeeUnit)

typeenum
(FeeType)

oneOf
(cost)

Un seul des champs de ce oneOf peut être défini.

MoneyRange

Nom du champTypeExigenceDescription
min_amountobject
(Money)

max_amountobjet
(Money)

AdditionalFee

Nom du champTypeExigenceDescription
namechaîne

Obligatoire

Nom des frais supplémentaires. Exemples : frais de commodité, frais de traitement, etc. Obligatoire.
feeobjet
(Fee)

GiftCardInfo

Nom du champTypeExigenceDescription
oneOf
(denomination_type)

Un seul des champs de ce oneOf peut être défini.

FixedDenominations

Nom du champTypeExigenceDescription
amountsTableau d'objets
(Money)

Liste de toutes les valeurs discrètes disponibles (par exemple, [100, 500, 1000]).

OfferRestrictions

Nom du champTypeExigenceDescription
combinable_with_other_offersbooléen

Indique si cette offre est cumulable avec d'autres offres. Si la valeur est "true", les partenaires peuvent spécifier les offres avec lesquelles cette offre peut être cumulée. Si les champs combinable_offer_categories et combinable_offer_ids sont tous deux définis, toute offre correspondant à l'une des conditions ci-dessus pourra être combinée.
combinable_offer_categoriestableau d'énumérations
(OfferCategory)

Liste des types d'offres avec lesquels cette offre peut être combinée. Par exemple, cette offre peut être cumulable avec d'autres bons de réduction. Si combinable_with_other_offers est défini sur "true" et que ce champ n'est pas défini, tous les types seront combinables.
combinable_offer_idsarray of string

Liste des offer_ids avec lesquels cette offre peut être combinée. Certaines offres ne peuvent être combinées qu'avec d'autres offer_ids spécifiques (qui peuvent être considérées comme des offres parentes). Si combinable_with_other_offers est défini sur "true" et que ce champ n'est pas défini, tous les ID d'offre seront cumulables.
inclusionsTableau d'objets
(OfferCondition)

Liste des conditions à remplir pour que l'offre soit valide (par exemple, boissons non alcoolisées, nourriture).
exclusionsTableau d'objets
(OfferCondition)

Liste des conditions qui invalideraient l'offre (par exemple, les buffets, les offres combinées et les cocktails).
min_guestnombre

Nombre minimal de personnes requis pour profiter de l'offre. Remarque : Ce champ ne s'applique qu'aux réservations de restaurants et ne doit pas être utilisé pour d'autres secteurs.
food_offer_restrictionsobjet
(FoodOfferRestrictions)

Restrictions spécifiques aux offres de restauration.
max_redemption_countnombre

Restrictions spécifiques au nombre de fois où cette offre peut être utilisée. La valeur 0 indique qu'il n'y a pas de limite. Par exemple, une valeur de 3 signifie que l'utilisateur peut utiliser cette offre trois fois.
max_total_discount_valueobject
(Money)

Remise maximale pouvant être appliquée à plusieurs transactions de cette offre.
special_conditionstableau de chaînes

Conditions spéciales de cette offre qui doivent être présentées à l'utilisateur. Exemples : "Valable uniquement pour les paiements dans [zone]", "Exclut les paiements en ligne", "Le bon d'achat PEUT être utilisé pendant la promotion".

OfferCondition

Nom du champTypeExigenceDescription
descriptionchaîne

FoodOfferRestrictions

Nom du champTypeExigenceDescription
meal_typestableau d'enum
(MealType)

Types de repas auxquels l'offre peut s'appliquer, comme le déjeuner ou le dîner. Si ce paramètre n'est pas défini, l'offre peut s'appliquer à tous les types de repas.
restricted_to_certain_coursesbooléen

Indique si l'offre ne peut être appliquée qu'à certains cours.

Bon de réduction

Nom du champTypeExigenceDescription
textchaîne

Texte du bon de réduction que le fournisseur de l'offre souhaite afficher pour les utilisateurs.
codechaîne

Obligatoire

Code promotionnel nécessaire pour profiter de l'offre. Obligatoire.

PaymentInstrument

Nom du champTypeExigenceDescription
itemsTableau d'objets
(PaymentInstrumentItem)

Obligatoire

Liste des modes de paiement pouvant être utilisés pour bénéficier de l'offre. Obligatoire.
provider_namechaîne

Nom du fournisseur du mode de paiement. Il peut s'agir d'un partenaire bancaire, du nom d'une banque, etc. (par exemple, American Express, HDFC, ICICI).

PaymentInstrumentItem

Nom du champTypeExigenceDescription
typeenum
(PaymentInstrumentType)

Obligatoire

Type du mode de paiement. Obligatoire.
namechaîne

Obligatoire

Nom du mode de paiement, par exemple le nom de la carte de crédit. Exemples : HDFC Infinia, American Express Platinum. Obligatoire.

Abonnement

Nom du champTypeExigenceDescription
namechaîne

Obligatoire

Nom de l'abonnement. Obligatoire.
subscription_auto_addedbooléen

Indique si l'abonnement est ajouté automatiquement lorsqu'un utilisateur profite de cette offre.
costobjet
(Money)

Obligatoire

Coût de l'abonnement. Obligatoire.
subscription_durationobject
(Duration)

Obligatoire

Durée de validité de l'abonnement au prix indiqué par l'attribut subscription_cost. Obligatoire.
terms_and_conditions_urlchaîne

URL des conditions d'utilisation du partenaire applicables à cet abonnement.

Durée

Nom du champTypeExigenceDescription
secondsnombre

Nombre de secondes signées de la période. Doit être compris entre -315 576 000 000 et +315 576 000 000 inclus. Remarque : Ces limites sont calculées à partir de : 60 s/min * 60 min/h * 24 h/jour * 365,25 jours/an * 10 000 ans
nanosnombre

Fractions de seconde signées à une résolution de l'ordre de la nanoseconde de l'intervalle de temps. Les durées inférieures à une seconde sont représentées par un champ seconds de valeur 0 et un champ nanos positif ou négatif. Pour les durées d'une seconde ou plus, une valeur non nulle pour le champ nanos doit être du même signe que le champ seconds. Doit être compris entre -999 999 999 et +999 999 999 inclus.

Conditions d'utilisation

Nom du champTypeExigenceDescription
urlchaîne

URL des conditions d'utilisation du partenaire.
restricted_to_certain_usersbooléen

Indique si l'offre est réservée à certains utilisateurs.
terms_and_conditionschaîne

Texte des conditions d'utilisation principales fourni par le partenaire.
additional_terms_and_conditionsarray of string

Conditions d'utilisation en plus des conditions d'utilisation principales du partenaire.

ValidityPeriod

Nom du champTypeExigenceDescription
valid_periodobjet
(ValidityRange)

Horodatages de début et de fin de validité de l'offre. Ces heures doivent représenter des jours distincts, c'est-à-dire que l'heure de début doit être 00h00 (début de la journée) et l'heure de fin doit être 00h00 (exclusive) le jour où la période de validité se termine.
time_of_dayTableau d'objets
(TimeOfDayWindow)

Spécifie l'intervalle de temps valide pour un jour donné et les jours disponibles pour l'offre. Pour les périodes qui se prolongent après minuit (par exemple, de 22h à 2h), utilisez des périodes distinctes pour chaque jour : une se terminant à 23h59m59s et une autre commençant à 00h00 le jour suivant. Par exemple : Lundi : de 10h à 17h Mardi : de 10h à 14h Mardi : de 17h à 19h Mercredi, jeudi, vendredi, samedi, dimanche : de 15h à 19h Si aucune heure n'est définie, cela signifie que l'offre est disponible à tout moment dans valid_period.
time_exceptionsTableau d'objets
(ValidTimeException)

Spécifie les exceptions aux éléments valid_period et valid_time_of_week ci-dessus.
date_exceptionsTableau d'objets
(Date)

Spécifie les exceptions en jours pour les champs valid_period et time_of_day ci-dessus.
validity_scopeenum
(ValidityScope)

Spécifie le champ d'application de la période de validité.
validity_duration_in_daysnombre

Durée (en jours) pendant laquelle le bon de réduction/coupon est valide, une fois acheté.

ValidityRange

Plage de codes temporels fermée-ouverte.

Nom du champTypeExigenceDescription
valid_from_timeobjet
(Timestamp)

Obligatoire

Heure de début de la plage (incluse). Obligatoire.
valid_through_timeobjet
(Timestamp)

Heure de fin de la plage (exclusive). Si ce champ n'est pas défini, cela signifie que cette période ne se termine jamais. Facultatif.

Code temporel

Nom du champTypeExigenceDescription
secondsnombre

Représente les secondes de l'heure UTC à partir de l'epoch Unix 1970-01-01T00:00:00Z. Doit être compris entre -62135596800 et 253402300799 inclus (ce qui correspond à 0001-01-01T00:00:00Z et 9999-12-31T23:59:59Z).
nanosnombre

Fractions de secondes non négatives avec une précision de l'ordre de la nanoseconde. Ce champ correspond à la partie en nanosecondes de la durée, et non à une alternative aux secondes. Les valeurs négatives de secondes avec des fractions doivent toujours avoir des valeurs de nanosecondes non négatives qui comptent vers l'avant dans le temps. Doit être compris entre 0 et 999 999 999 (inclus).

TimeOfDayWindow

L'objet TimeWindow est une entité composite qui décrit une liste de périodes pendant lesquelles la commande de l'utilisateur peut être passée ou traitée.

Nom du champTypeExigenceDescription
time_windowsobjet
(TimeOfDayRange)

Obligatoire

Période pendant laquelle la commande peut être passée/traitée. Obligatoire.
day_of_weektableau d'énumérations
(DayOfWeek)

Liste des jours de la semaine où les fenêtres sont appliquées. Si aucun jour n'est défini, cela signifie que la règle s'applique à tous les jours de la semaine. Facultatif.
day_of_monthTableau d'objets
(DayOfMonthRange)

Jours du mois où les fenêtres sont appliquées. Si aucune valeur n'est définie, cela signifie qu'elle s'applique à tous les jours du mois. Facultatif.

TimeOfDayRange

Période fermée-ouverte.

Nom du champTypeExigenceDescription
open_timeobjet
(TimeOfDay)

Heure indiquant le début de la journée de la plage (inclus). Si elle n'est pas définie, elle est considérée comme 00:00:00. Facultatif.
close_timeobject
(TimeOfDay)

Heure indiquant l'heure de fin de la journée de la plage (exclusive). Si elle n'est pas définie, elle est définie par défaut sur 23:59:59. Facultatif.

TimeOfDay

Nom du champTypeExigenceDescription
hoursnombre

Heures d'une journée au format 24 heures. Doit être supérieur ou égal à 0 et généralement inférieur ou égal à 23. Une API peut choisir d'autoriser la valeur "24:00:00" pour des scénarios tels que l'heure de fermeture d'un établissement.
minutesnombre

Minutes d'une heure. Doit être supérieur ou égal à 0 et inférieur ou égal à 59.
secondsnombre

Secondes d'une minute. Doit être supérieur ou égal à 0 et généralement inférieur ou égal à 59. Une API peut autoriser la valeur 60 si elle autorise les secondes intercalaires.
nanosnombre

Fractions de secondes, en nanosecondes. Doit être supérieur ou égal à 0 et inférieur ou égal à 999 999 999.

DayOfMonthRange

Plage de jours du mois qui s'applique à tous les mois de l'année.

Nom du champTypeExigenceDescription
valid_from_daynombre

Obligatoire

Jour de début de la plage (inclus). Obligatoire.
valid_through_daynombre

Jour de fin de la période (inclus). Si ce champ n'est pas défini, cela signifie que cette plage représente un seul jour (valid_from_day). Facultatif.

ValidTimeException

Nom du champTypeExigenceDescription
exceptional_periodobjet
(ValidityRange)

Code temporel de début et de fin de la période pendant laquelle l'offre n'est pas valide. Ces heures doivent représenter des jours distincts, c'est-à-dire que l'heure de début doit être 00:00 (début de la journée) et l'heure de fin doit être 00:00 (exclusif) le jour où la période d'exception se termine.

Date

Nom du champTypeExigenceDescription
yearnombre

Année de la date. Elle doit être comprise entre 1 et 9 999, ou égale à 0 si vous spécifiez une date sans année.
monthnombre

Mois d'une année. Il doit être compris entre 1 et 12, ou égal à 0 si vous spécifiez une année sans mois ni jour.
daynombre

Jour du mois. Il doit être compris entre 1 et 31, et valide pour l'année et le mois, ou égal à 0 si vous spécifiez une année seule, ou une année et un mois où le jour n'est pas significatif.

OfferSource

NomDescription
OFFER_SOURCE_UNSPECIFIED
OFFER_SOURCE_AGGREGATOR

ActionType

Représente le mode de traitement de l'offre. Si une offre peut être partagée entre plusieurs modes de traitement, des offres en double doivent être créées pour chaque mode de traitement.

NomDescription
ACTION_TYPE_UNSPECIFIED
ACTION_TYPE_FOOD_DELIVERYL'offre s'applique aux services de livraison de nourriture.
ACTION_TYPE_FOOD_TAKEOUTL'offre s'applique aux commandes de plats à emporter ou à retirer.
ACTION_TYPE_DININGL'offre est valable pour les repas pris sur place dans un restaurant.
ACTION_TYPE_APPOINTMENTL'offre s'applique aux services de réservation de rendez-vous.
ACTION_TYPE_SHOPPING_IN_STOREL'offre est applicable aux achats hors connexion en magasin.

OfferMode

Spécifie la méthode ou le canal par lesquels l'utilisateur peut bénéficier de l'offre.

NomDescription
OFFER_MODE_OTHERÀ utiliser pour les méthodes de traitement non couvertes par d'autres modes spécifiques.
OFFER_MODE_WALK_INL'offre est disponible pour les visites sur place sans réservation préalable.
OFFER_MODE_FREE_RESERVATIONL'offre s'applique lorsqu'un utilisateur effectue une réservation qui ne nécessite pas de frais initiaux.
OFFER_MODE_PAID_RESERVATIONL'offre s'applique lorsqu'un utilisateur effectue une réservation qui nécessite un paiement initial.
OFFER_MODE_ONLINE_ORDERL'offre est valable pour les commandes passées sur un site Web ou une plate-forme numérique.
OFFER_MODE_GIFT_CARD_PURCHASEIndique que l'achat d'une carte cadeau est la principale étape requise pour bénéficier de l'offre.

OfferCategory

Catégorie de l'offre. Une offre de base est une offre standard disponible pour tous les clients, par exemple une remise de 10% sur les achats de plus de 100 €. Une offre de base limitée par un coupon ou un mode de paiement aura les champs correspondants définis. Nous proposons également des offres de modules complémentaires, comme ADD_ON_PAYMENT_OFFER. Ces offres peuvent être cumulées avec d'autres offres pour obtenir des remises supplémentaires.

NomDescription
OFFER_CATEGORY_UNSPECIFIEDLa valeur d'énumération UNSPECIFIED ou par défaut ne doit pas être utilisée dans les flux.
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

NomDescription
FEE_UNIT_UNSPECIFIEDLa valeur d'énumération UNSPECIFIED ou par défaut ne doit pas être utilisée dans les flux.
FEE_UNIT_PER_GUEST
FEE_UNIT_PER_TRANSACTION

FeeType

NomDescription
FEE_TYPE_UNSPECIFIEDLa valeur d'énumération UNSPECIFIED ou par défaut ne doit pas être utilisée dans les flux.
FEE_TYPE_FIXED
FEE_TYPE_VARIABLE

OfferDiscountType

NomDescription
OFFER_DISCOUNT_TYPE_UNSPECIFIED
OFFER_DISCOUNT_TYPE_INSTANT_DISCOUNT
OFFER_DISCOUNT_TYPE_CASHBACK
OFFER_DISCOUNT_TYPE_REWARD_POINT

MealType

NomDescription
MEAL_TYPE_UNSPECIFIEDLa valeur d'énumération UNSPECIFIED ou par défaut ne doit pas être utilisée dans les flux.
MEAL_TYPE_BREAKFAST
MEAL_TYPE_LUNCH
MEAL_TYPE_DINNER

PaymentInstrumentType

NomDescription
PAYMENT_INSTRUMENT_TYPE_UNSPECIFIEDLa valeur d'énumération UNSPECIFIED ou par défaut ne doit pas être utilisée dans les flux.
PAYMENT_INSTRUMENT_CREDIT_CARD
PAYMENT_INSTRUMENT_DEBIT_CARD
PAYMENT_INSTRUMENT_BANK_ACCOUNT
PAYMENT_INSTRUMENT_UPI
PAYMENT_INSTRUMENT_ONLINE_WALLET
PAYMENT_INSTRUMENT_NETBANKING

DayOfWeek

Représente un jour de la semaine.

NomDescription
DAY_OF_WEEK_UNSPECIFIEDLe jour de la semaine n'est pas spécifié.
MONDAYLundi
TUESDAYMardi
WEDNESDAYMercredi
THURSDAYJeudi
FRIDAYVendredi
SATURDAYSamedi
SUNDAYDimanche

ValidityScope

Champ d'application de la période de validité, c'est-à-dire les actions auxquelles cette période de validité s'applique exactement.

NomDescription
VALIDITY_SCOPE_UNSPECIFIED
VALIDITY_SCOPE_CLAIM
VALIDITY_SCOPE_REDEEM

OfferTag

NomDescription
OFFER_TAG_UNSPECIFIEDLa valeur d'énumération UNSPECIFIED ou par défaut ne doit pas être utilisée dans les flux.
OFFER_TAG_NEW_YEAR_SPECIAL
OFFER_TAG_VALENTINES_SPECIAL

AvailabilityLevel

Indique l'état du stock ou de la disponibilité d'une offre.

NomDescription
AVAILABILITY_LEVEL_UNSPECIFIED
AVAILABILITY_LEVEL_LOWIndique que l'offre est presque épuisée. Les utilisateurs sont encouragés à l'utiliser avant qu'il ne soit non disponible. Nous ajouterons peut-être les niveaux MEDIUM et HIGH ultérieurement.

offer_specification

La remise peut être un pourcentage ou une valeur fixe soustraite de la valeur totale. Exemple : 1. 10% de remise sur la facture finale. 2. 15 $ de remise sur une commande. Les marchands peuvent également proposer des remises personnalisées, comme "Deux pour le prix d'un", dans les champs de spécification correspondants. Obligatoire.

Nom du champTypeExigenceDescription
discount_percentnombre

S'exclut mutuellement avec discount_value, other_offer_detail_text

Pourcentage de la facture qui est remisé. Pour les offres "1 acheté, 1 inclus" ou "50% de remise" applicables à l'ensemble du repas (par exemple, buffet "1 acheté, 1 inclus", "1 acheté, 1 inclus" sur l'ensemble de l'addition, "1 acheté, 1 inclus" sur le menu), cette valeur peut être définie sur 50.
discount_valueobjet
(Money)

S'exclut mutuellement avec discount_percent, other_offer_detail_text

Valeur fixe de la remise.
other_offer_detail_textchaîne

S'exclut mutuellement avec discount_percent, discount_value

Texte libre décrivant la remise. Pour les offres spécifiques de type "1 acheté, 1 inclus" (par exemple, 1 boisson achetée, 1 incluse ; 1 plat principal acheté, 1 inclus ; 1 élément de menu acheté, 1 inclus), ces détails doivent être décrits ici.

coût

Nom du champTypeExigenceDescription
amountobjet
(Money)

S'exclut mutuellement avec amount_range

amount_rangeobjet
(MoneyRange)

S'exclut mutuellement avec amount

denomination_type

Nom du champTypeExigenceDescription
fixed_denominationsobject
(FixedDenominations)

Mutuellement exclusif avec custom_range

Utilisé lorsque la carte est disponible pour des montants fixes spécifiques.
custom_rangeobjet
(MoneyRange)

Mutuellement exclusif avec fixed_denominations

Utilisé lorsque la marque permet aux utilisateurs de choisir une valeur nominale personnalisée (flexible) dans une plage définie.

Importation du flux

Le flux d'offres doit être importé sur le serveur SFTP de flux Generic. Suivez le tutoriel Utiliser le serveur SFTP de flux générique pour obtenir des instructions et utilisez name défini sur google.offer dans votre fichier de descripteur.

Fréquence de mise en ligne des vidéos

En général, Google s'attend à ce que vous importiez un flux par jour. La fréquence peut être augmentée ou diminuée en fonction de la fréquence à laquelle vous mettez à jour vos offres, afin de garantir une précision élevée et constante. Adressez-vous à votre contact Google.

Les données apparaîtront sur Google au bout de quelques heures.

Catégorisation des offres

  • OFFER_CATEGORY_BASE_OFFER : offres pouvant être utilisées indépendamment, sans être cumulées avec une autre offre. Par exemple :
    • Remises forfaitaires sur l'ensemble de la facture (par exemple, 20% de remise)
    • Offres d'abonnement (par exemple, un dessert inclus avec l'abonnement)
    • Offres de paiement lorsqu'il n'existe aucune autre offre de base pour le restaurant
    • Remarque : Les offres de suppression ou de réduction des frais à l'échelle de la plate-forme ne doivent pas être définies comme des offres de base.
  • Offres de module complémentaire : offres qui nécessitent de réclamer une offre de base. Voici quelques exemples :
    • OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER (par exemple, "10% de remise supplémentaire avec une carte de crédit spécifique")
    • OFFER_CATEGORY_ADD_ON_COUPON_OFFER (par exemple, "Boisson sans frais avec un code promotionnel spécifique")
    • OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER (par exemple, 10% de remise supplémentaire pour les abonnés)
    • OFFER_CATEGORY_ADD_ON_FEE_REDUCTION_OFFER (par exemple, livraison gratuite ou frais réduits)

Autres points à noter :

  • Les offres de réduction ou d'exonération des frais à l'échelle de la plate-forme ne doivent pas être définies comme des offres de base (OFFER_CATEGORY_BASE_OFFER). Elles ne doivent être définies que comme OFFER_CATEGORY_ADD_ON_FEE_REDUCTION_OFFER pour compléter une autre offre de base active.
  • Lorsqu'un restaurant n'a pas défini d'offre de base, les offres de module complémentaire ne s'affichent pas. S'il n'y a pas d'offre de base, toute offre de paiement, d'abonnement ou de bon de réduction pouvant être réclamée sans avoir à être ajoutée à une autre offre doit être taguée comme OFFER_CATEGORY_BASE_OFFER.
    • En fonction du type, les données correspondantes pour PaymentInstrument, Subscription ou Coupon doivent être définies.
    • Les partenaires doivent fournir deux copies de chacune de ces offres pour couvrir les scénarios dans lesquels elles fonctionnent à la fois comme des offres de base et des offres complémentaires. Le texte de l'offre complémentaire peut ensuite être défini pour plusieurs restaurants à l'aide de entity_ids ou add_on_offer_applicable_to_all_entities.
  • Lorsqu'un restaurant propose plusieurs offres de base cumulables, elles doivent toutes être taguées comme OFFER_CATEGORY_BASE_OFFER. Les offres de base de type Paiement, Abonnement ou Bon de réduction doivent également être envoyées en tant qu'offres complémentaires du type correspondant.
  • ValidityPeriod doit être utilisé pour activer les offres de modules complémentaires en tant qu'offres de base uniquement lorsqu'aucune offre de base n'est active.
  • Regroupez les offres identiques par mode de paiement : si plusieurs modes de paiement partagent exactement la même valeur de remise (par exemple, carte de crédit, carte de débit et Net Banking offrant tous 5% de remise), regroupez-les sous un seul objet Offer consolidé au lieu d'envoyer des offres en double distinctes. Pour ce faire, remplissez la liste payment_instrument.items avec tous les modes de paiement applicables. Cela réduit l'encombrement de la mise en page sur l'interface Google et évite d'éventuelles baisses de classement dues à des restrictions excessives sur les doublons.

Voici quelques exemples de scénarios :

  • Un restaurant propose une remise de 5% pour les paiements effectués avec une carte de crédit spécifique et une boisson sans frais avec un code promotionnel spécifique.

    • L'offre de 5% de réduction sur les cartes de crédit doit être envoyée en deux exemplaires, l'un tagué OFFER_CATEGORY_BASE_OFFER et l'autre OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER, avec les détails PaymentInstrument inclus.
    • Une offre de boisson sans frais avec un code promotionnel doit être envoyée en tant que OFFER_CATEGORY_ADD_ON_COUPON_OFFER avec les détails Coupon inclus.
  • Un restaurant propose une remise de 10% pour les clients sans réservation et une remise de 5% pour les paiements effectués avec une carte de crédit spécifique. Ces deux remises sont cumulables.

    • L'offre "10% de remise sans réservation" doit être taguée comme OFFER_CATEGORY_BASE_OFFER.
    • L'offre de 5% de remise avec une carte de crédit doit être dupliquée. L'une doit être taguée OFFER_CATEGORY_BASE_OFFER et l'autre OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER.
  • Un restaurant propose une remise de 10% uniquement pour le déjeuner en semaine, et une remise de 5% à tout moment en cas de paiement avec une carte de crédit spécifique.

    • L'offre de 10% de remise doit être définie sur ValidityPeriod pour n'être disponible que pendant les heures de déjeuner du restaurant en semaine.
    • L'offre de 5% de remise avec la carte de crédit doit être envoyée en deux exemplaires.
      • Une copie doit être taguée comme OFFER_CATEGORY_BASE_OFFER avec les informations PaymentInstrument incluses. ValidityPeriod doit être défini pour exclure les heures du déjeuner en semaine lorsque l'offre de 10% de remise sur le déjeuner est active.
      • Une copie doit être taguée comme OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER avec les détails PaymentInstrument inclus.
    • Toutes les autres offres de paiement pour ce restaurant doivent être taguées comme OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER.

Processus de développement et de lancement

Tout au long de votre intégration, le portail des partenaires pourra vous aider en vous fournissant des informations et des commentaires en fonction de votre développement. Le processus de développement se déroulera comme suit :

  • Vous commencez par développer votre intégration dans l'environnement de bac à sable. Vous devez utiliser une exportation de production (ou même des données de production directement) dans l'environnement Google Sandbox. Cela permet de s'assurer que votre développement prend en compte tous les cas limites, et permet à Google d'évaluer la qualité des données et de mieux vous aider en fonction de votre modèle de données.
  • Une fois que vous commencez à importer régulièrement et quotidiennement des flux marchands, services et offres complets dans l'environnement de bac à sable, notre équipe se charge de leur évaluation. Une fois que l'équipe Google a donné son approbation, vous pouvez déployer votre code en production et commencer à envoyer des données de production à l'environnement de production Google.
  • Une fois que vous avez terminé de tester l'intégration dans l'environnement de production, l'équipe Google la teste également. Une fois tous les tests terminés, votre intégration sera lancée.

Surveillance

Pour garantir une bonne expérience utilisateur, Google vérifiera que les offres fournies sont valides, correctes et qu'elles respectent nos critères de règlement avant et après le lancement. Pour ce faire, Google utilisera une combinaison d'examens manuels et automatisés. Le résultat de ces examens sera accessible dans le tableau de bord des offres d'Action Center (production uniquement). Le résultat de cette surveillance peut être utilisé pour modifier le classement des offres.

Assurez-vous que la page met moins de 5 secondes à se charger entièrement avec les offres. Sinon, cela sera considéré comme un échec et signalé comme Bad link.

Vérifications automatisées (robots d'exploration)

L'équipe Google chargée de la qualité implémente des robots d'exploration. Les robots d'exploration sont des scripts qui automatisent un navigateur Web pour effectuer des clics et extraire des informations sur les offres, uniquement à des fins de test de qualité.

Nombre de requêtes

Par exemple, si nous décidons d'envoyer 5 000 vérifications par jour, cela signifie que 5 000 fois par jour (réparties de manière uniforme sur la journée, soit environ une toutes les 17 secondes), notre robot d'exploration effectue toutes les actions suivantes qu'un utilisateur standard effectuerait :

  • Commencez par la recherche Google, puis cliquez sur le lien du partenaire.
  • Recherchez les informations sur l'offre.
  • Si l'offre nécessite une réservation, vous serez redirigé vers le processus de réservation pour confirmer qu'elle est disponible à l'heure spécifiée (aucune réservation ne sera effectuée).

Détection des extracteurs de données Web

Pour éviter que le robot d'exploration Web ne soit banni (ce qui pourrait l'amener à conclure que les offres ne sont pas disponibles), assurez-vous que votre système l'autorise à interroger votre page à tout moment. Pour identifier notre robot d'exploration Web :

  • Le User-Agent du Web Scraper contiendra la chaîne "Google-Offers" :
    • Exemple : Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google-Offers) Chrome/104.0.5112.101 Safari/537.36
  • Vous pouvez également vérifier si les appels proviennent de Google à l'aide d'une résolution DNS inverse, comme recommandé dans Valider Googlebot et les autres robots d'exploration Google. Dans notre cas spécifique, la résolution DNS inversée suit ce modèle : google-proxy-***-***-***-***.google.com.

Comportement technique

Mise en cache

Afin de réduire la charge sur le site Web du partenaire, nos robots d'exploration sont généralement configurés pour respecter tous les en-têtes de mise en cache HTTP standards présents dans la réponse. Cela signifie que pour les sites Web correctement configurés, nous évitons de récupérer à plusieurs reprises du contenu qui change rarement (par exemple, les bibliothèques JavaScript). Pour en savoir plus sur l'implémentation de la mise en cache, consultez cette documentation sur la mise en cache HTTP.