Bonnes pratiques

Ce guide présente les exigences et des exemples d'offres de commande de repas.

Éligibilité et règles

Cette section met en évidence les critères d'éligibilité importants que les partenaires doivent respecter lorsqu'ils proposent des offres. Il est important de tester tous les types d'offres que vous prévoyez de lancer lors des tests du flux dans le bac à sable. Si vous ne savez pas si une offre est éligible, veuillez contacter votre représentant Google.

Exclure les offres personnalisées et à usage unique

Pour garantir une expérience utilisateur cohérente et de haute qualité, les partenaires ne doivent pas inclure d'offres réservées à des sous-ensembles spécifiques d'utilisateurs. Les offres personnalisées créées uniquement pour des utilisateurs spécifiques ne sont pas éligibles. Les offres valables sur l'ensemble de la plate-forme et éligibles pour tous les utilisateurs (par exemple, les offres réservées aux nouveaux utilisateurs ou aux premières commandes dans un restaurant spécifique) sont autorisées, à condition qu'elles soient affichées sur la page de destination de l'offre pour tous les utilisateurs. Les conditions de l'offre doivent être clairement indiquées dans le titre de l'offre et sur la page de destination de l'URL de l'offre. Les offres doivent être visibles sur la page de destination de l'offre pour tous les utilisateurs, qu'ils soient connectés ou non à votre site ou application.

Offres avec codes promotionnels

Certaines offres nécessitent que l'utilisateur saisisse un code promotionnel, par exemple "Appliquez le code SAVE20 pour obtenir 20% de remise sur le montant total". Il est important de noter que Google n'affiche pas les codes promotionnels à partir de la définition coupon. Les partenaires peuvent inclure ces informations dans OfferDetails.offer_display_text pour qu'elles soient affichées aux utilisateurs. Les offres basées sur des coupons se répartissent généralement en deux catégories :

  • Offres où le bon de réduction est automatiquement présenté lors du règlement à tout utilisateur provenant de Google. Elles sont autorisées.
  • Les offres qui exigent que l'utilisateur saisisse le code promotionnel au moment du paiement, mais qui ne fournissent pas d'instructions sur la façon d'appliquer le code promotionnel sur la page de destination de l'URL de l'offre ou qui n'appliquent pas automatiquement le bon de réduction lorsque l'utilisateur suit l'URL de l'offre, ne sont pas autorisées.

Contenu et structure de l'offre

Cette section détaille les exigences concernant le contenu et la structure des offres fournies dans le flux, y compris des exemples de métadonnées structurées.

Texte de l'offre et spécification de l'offre

OfferDetails.offer_display_text est un champ obligatoire qui sert de titre concis pour une visibilité immédiate dans la section des offres sur la recherche Google, par exemple "10 € de remise" ou "15 % de réduction".

OfferDetails.offer_specification est un champ obligatoire "one of" dans OfferDetails. Cela signifie qu'un seul des trois champs suivants doit être fourni pour spécifier l'offre :

  • discount_value
  • discount_percentage
  • other_offer_details_text

Le champ OfferDetails.other_offer_details_text est un champ de texte libre utilisé pour compléter offer_display_text lorsque l'offre ne peut pas être exprimée sous la forme d'une valeur ou d'un pourcentage de remise fixe. Si le champ offer_display_text est déjà suffisant pour transmettre toutes les informations nécessaires sur l'offre, le champ other_offer_details_text doit être rempli avec le même texte que le champ offer_display_text. Toutefois, pour les offres complexes, ce champ doit fournir une description spécifique de la récompense.

Champs de métadonnées structurées

Pour améliorer la clarté des offres et permettre un meilleur classement et filtrage, les partenaires doivent fournir des métadonnées sur les offres dans les champs structurés correspondants. Le champ terms.terms_and_conditions est obligatoire. La valeur doit inclure les conditions d'utilisation de l'offre. Par exemple, vous pouvez renseigner ce champ avec les conditions détaillées qui s'affichent pour les utilisateurs sur la page de destination de l'offre.

Les offres spécifiques à des sous-ensembles d'articles doivent utiliser les champs terms.terms_and_conditions ou offer_restrictions.inclusions et offer_restrictions.exclusions pour définir les articles éligibles.

Exemples JSON d'offres

20 $ de remise fixe

Exemple : 20 € de remise les mardis pour une dépense minimale de 15 €

{
  "offer_id": "offer-example-1-takeout",
  "offer_source": "OFFER_SOURCE_AGGREGATOR",
  "action_type": "ACTION_TYPE_FOOD_TAKEOUT",
  "offer_modes": ["OFFER_MODE_ONLINE_ORDER"],
  "offer_category": "OFFER_CATEGORY_BASE_OFFER",
  "offer_details": {
    "offer_display_text": "$20 off on Tuesdays",
    "discount_value": {
      "currency_code": "USD",
      "units": 20
    },
    "min_spend_value": {
      "currency_code": "USD",
      "units": 15
    }
  },
  "validity_periods": [
    {
      "valid_period": {
        "valid_from_time": { "seconds": 1768953600 },
        "valid_through_time": { "seconds": 1795219200 }
      },
      "time_of_day": [
        {
          "time_windows": {
            "open_time": { "hours": 9 },
            "close_time": { "hours": 20, "minutes": 59, "seconds": 59 }
          },
          "day_of_week": ["TUESDAY"]
        }
      ]
    }
  ],
  "offer_restrictions": {
    "combinable_with_other_offers": false
  },
  "terms": {
    "terms_and_conditions": "For use only at the participating restaurant location on qualifying delivery or takeout orders with $15 minimum spend. Single use per order. Offer may not be combined with any other offers, discounts, or promotions. Valid only on Tuesdays."
  },
  "entity_ids": ["dining-1"],
  "offer_url": "https://www.example-restaurant.com/offer/base_offer_1"
}

Offre "Un acheté, un sans frais"

Exemple : Offre "Deux pour le prix d'un" sur les entrées, valable du lundi au jeudi

{
  "offer_id": "offer-example-2-delivery",
  "offer_source": "OFFER_SOURCE_AGGREGATOR",
  "action_type": "ACTION_TYPE_FOOD_DELIVERY",
  "offer_modes": ["OFFER_MODE_ONLINE_ORDER"],
  "offer_category": "OFFER_CATEGORY_BASE_OFFER",
  "offer_details": {
    "offer_display_text": "Buy one appetizer, get one free",
    "other_offer_detail_text": "Buy one appetizer, get one free"
  },
  "validity_periods": [
    {
      "valid_period": {
        "valid_from_time": { "seconds": 1768953600 },
        "valid_through_time": { "seconds": 1795219200 }
      },
      "time_of_day": [
        {
          "time_windows": {
            "open_time": { "hours": 10 },
            "close_time": { "hours": 23, "minutes": 59, "seconds": 59 }
          },
          "day_of_week": ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY"]
        }
      ]
    }
  ],
  "offer_restrictions": {
    "combinable_with_other_offers": true,
    "inclusions": [
      {
        "description": "appetizers"
      }
    ]
  },
  "terms": {
    "terms_and_conditions": "For use only at the participating restaurant location on qualifying delivery or takeout orders. Single use per order. Valid on all menu appetizers. Offer may be combined with any other offers, discounts, or promotions. Valid Monday through Thursday."
  },
  "entity_ids": ["dining-1"],
  "offer_url": "https://www.example-restaurant.com/offer/base_offer_4"
}

Offre de remise en pourcentage

Exemple : 25% de remise sur tous les sandwichs

{
  "offer_id": "offer-example-3-delivery",
  "offer_source": "OFFER_SOURCE_AGGREGATOR",
  "action_type": "ACTION_TYPE_FOOD_DELIVERY",
  "offer_modes": ["OFFER_MODE_ONLINE_ORDER"],
  "offer_category": "OFFER_CATEGORY_BASE_OFFER",
  "offer_details": {
    "offer_display_text": "25% off on all Sandwiches",
    "discount_percent": 25.0
  },
  "validity_periods": [
    {
      "valid_period": {
        "valid_from_time": { "seconds": 1768953600 },
        "valid_through_time": { "seconds": 1795219200 }
      }
    }
  ],
  "offer_restrictions": {
    "combinable_with_other_offers": true,
    "combinable_offer_ids": ["offer-example-4-delivery"],
    "inclusions": [
      "Sandwiches"
    ]
  },
  "terms": {
    "terms_and_conditions": "For use only at the participating restaurant location on qualifying delivery or takeout orders. Applies to specific items only. Single use per order. May be combined with any other offers, discounts, or promotions."
  },
  "entity_ids": ["dining-1"],
  "offer_url": "https://www.example-restaurant.com/offer/base_offer_2"
}

Offre de livraison gratuite

Exemple : Livraison gratuite pour les commandes supérieures à 30 €. Sinon, les frais de port sont de 7 $.

{
  "offer_id": "offer-example-4-delivery",
  "offer_source": "OFFER_SOURCE_AGGREGATOR",
  "action_type": "ACTION_TYPE_FOOD_DELIVERY",
  "offer_modes": ["OFFER_MODE_ONLINE_ORDER"],
  "offer_category": "OFFER_CATEGORY_BASE_OFFER",
  "offer_details": {
    "offer_display_text": "Free delivery on orders over $30",
    "discount_value": {
      "currency_code": "USD",
      "units": 7
    },
    "min_spend_value": {
      "currency_code": "USD",
      "units": 30
    }
  },
  "validity_periods": [
    {
      "valid_period": {
        "valid_from_time": { "seconds": 1768953600 },
        "valid_through_time": { "seconds": 1795219200 }
      }
    }
  ],
  "offer_restrictions": {
    "combinable_with_other_offers": true
  },
  "terms": {
    "terms_and_conditions": "For use only at the participating restaurant location on qualifying delivery orders with $30 minimum spend. Delivery is $7.00 otherwise. Single use per order. May be combined with any other offers, discounts, or promotions."
  },
  "entity_ids": ["dining-1"],
  "offer_url": "https://www.example-restaurant.com/offer/base_offer_3"
}

Exemple d'offre de base avec une offre de module complémentaire

Exemple : Un restaurant propose 10% de réduction uniquement pour le déjeuner en semaine et 5% de réduction à tout moment en cas de paiement avec une carte de crédit spécifique.

[
  {
    "offer_id": "offerId1",
    "offer_source": "OFFER_SOURCE_AGGREGATOR",
    "action_type": "ACTION_TYPE_FOOD_TAKEOUT",
    "offer_modes": ["OFFER_MODE_ONLINE_ORDER"],
    "offer_category": "OFFER_CATEGORY_BASE_OFFER",
    "offer_details": {
      "offer_display_text": "10% off",
      "discount_percent": 10.0
    },
    "validity_periods": [
      {
        "valid_period": {
          "valid_from_time": { "seconds": 1768953600 },
          "valid_through_time": { "seconds": 1795219200 }
        },
        "time_of_day": [
          {
            "day_of_week": ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY"]
          }
        ]
      }
    ],
    "offer_restrictions": {
      "combinable_with_other_offers": true,
      "combinable_offer_categories": ["OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER"]
    },
    "terms": {
      "terms_and_conditions": "For use only at the participating restaurant location on qualifying delivery or takeout orders. Single use per order. Offer may be combined with any other offers, discounts, or promotions."
    },
    "entity_ids": ["dining-1"],
    "offer_url": "https://www.example-restaurant.com/offer/base_offer_5"
  },
  {
    "offer_id": "offerId2",
    "offer_source": "OFFER_SOURCE_AGGREGATOR",
    "action_type": "ACTION_TYPE_FOOD_TAKEOUT",
    "offer_modes": ["OFFER_MODE_ONLINE_ORDER"],
    "offer_category": "OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER",
    "offer_details": {
      "offer_display_text": "5% off",
      "discount_percent": 5.0
    },
    "validity_periods": [
      {
        "valid_period": {
          "valid_from_time": { "seconds": 1768953600 },
          "valid_through_time": { "seconds": 1795219200 }
        },
        "time_of_day": [
          {
            "day_of_week": ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY"]
          }
        ]
      }
    ],
    "offer_restrictions": {
      "combinable_with_other_offers": true,
      "combinable_offer_ids": ["offerId1"]
    },
    "payment_instrument": {
      "items": [
        { "type": "PAYMENT_INSTRUMENT_CREDIT_CARD", "name": "Participating Credit Card" }
      ],
      "provider_name": "Card Provider"
    },
    "terms": {
      "terms_and_conditions": "For use only at the participating restaurant location on qualifying delivery or takeout orders. Single use per order. Offer may be combined with any other offers, discounts, or promotions."
    },
    "entity_ids": ["dining-1"],
    "offer_url": "https://www.example-restaurant.com/offer/addon_offer_1"
  }
]

Exécution et contraintes

Cette section décrit en détail les exigences et les bonnes pratiques liées aux spécifications et aux contraintes associées à l'exécution des offres.

Mode de traitement (livraison et retrait)

Si une même offre s'applique à la livraison et à la vente à emporter, elle doit comporter deux offres dans le flux. Chaque entrée doit avoir un ActionType dédié :

  • ACTION_TYPE_FOOD_DELIVERY
  • ACTION_TYPE_FOOD_TAKEOUT

Cela permet de s'assurer que les utilisateurs qui accèdent au site du partenaire voient le bon contexte de traitement.

Périodes

Les offres doivent être affichées sur la page de destination de l'offre pour tous les utilisateurs, qu'ils soient connectés ou non à votre site ou application. Si l'offre est valable pendant une période spécifique, vous devez inclure le champ validity_periods.valid_period pour spécifier la période de validité. Cela empêche l'offre d'être affichée en dehors de cette période. La période doit également être définie si l'offre est affichée sur l'URL de l'offre à certaines heures de la journée. Par exemple, si la page de destination n'affiche pas d'offres lorsque le restaurant est fermé, vous devez inclure les heures d'ouverture et de fermeture TimeOfDayWindow.

Gérer les périodes qui chevauchent minuit

Les offres qui s'étendent sur minuit (par exemple, valables du mardi à 22h00 au mercredi à 2h00) doivent être segmentées pour être traitées correctement par le pipeline d'ingestion. Exigence : utilisez le champ TimeOfDayWindow pour diviser la fenêtre en deux segments distincts :

  • Segment 1 : de 22h à 23h59:59 le jour de début (par exemple, le mardi).
  • Segment 2 : de minuit à 2h le lendemain (par exemple, le mercredi).

Cela permet de s'assurer que la validité de l'offre est reflétée avec précision tout au long de la période.

Spécifications des frais

Les frais de livraison et de vente à emporter peuvent être spécifiés à l'aide du champ OfferDetails.additional_fees. Des frais de commodité doivent être spécifiés à l'aide de OfferDetails.convenience_fee. Utilisez une plage de frais pour les frais variables, par exemple si les frais de livraison changent en fonction de la localisation de l'utilisateur.