Bonnes pratiques

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

Éligibilité et règles

Cette section présente 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 de flux en bac à sable. Si vous ne savez pas si une offre est éligible, veuillez contacter votre contact Google.

Exclure les offres personnalisées et à usage unique

Pour garantir une expérience utilisateur cohérente et de 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, comme les offres pour les nouveaux utilisateurs ou pour la première commande dans un restaurant donné, sont autorisées, à condition qu'elles s'affichent 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 bénéficier de 20% de remise sur le montant total de la facture". Il est important de noter que Google n'affiche pas les codes promotionnels à partir de la définition du code promotionnel. Les partenaires peuvent inclure ces informations dans le champ OfferDetails.offer_display_text pour les afficher aux utilisateurs. Les offres basées sur des codes promotionnels appartiennent généralement à deux catégories :

  • Offres où le code promotionnel est automatiquement présenté lors du règlement à tout utilisateur provenant de Google. Elles sont autorisées.
  • Les offres qui nécessitent que l'utilisateur saisisse le code promotionnel lors du règlement, 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 code promotionnel 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 d'affichage de l'offre et spécification de l'offre

Le champ 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 remise".

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

  • discount_value
  • discount_percent
  • other_offer_detail_text

Le champ OfferDetails.other_offer_detail_text est un champ de texte libre utilisé pour compléter le champ offer_display_text lorsque l'offre ne peut pas être exprimée sous forme de valeur de remise fixe ou de pourcentage. Si le champ offer_display_text est déjà suffisant pour transmettre toutes les informations nécessaires sur l'offre, le champ other_offer_detail_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 d'offre dans les champs structurés respectifs. Il est obligatoire de spécifier les conditions. Nous vous recommandons de définir le champ terms.terms_and_conditions avec les conditions détaillées qui s'affichent pour les utilisateurs sur la page de destination de l'offre.

Offres spécifiques à la commande totale et à l'article

Les offres spécifiques à des sous-ensembles d'articles doivent utiliser les offer_restrictions.inclusions et offer_restrictions.exclusions pour définir les articles éligibles. Si l'offre concerne un article spécifique, le nom de l'article doit être inclus dans le champ offer_display_text. Lorsque le nom de l'article est inclus dans le champ offer_display_text, il n'est pas nécessaire de définir le champ offer_restrictions.inclusions.

Si le champ offer_restrictions.inclusions n'est pas défini ou si le nom de l'article n'est pas inclus dans le champ offer_display_text, l'offre est considérée comme s'appliquant au montant total de la commande.

Offres sur les frais de livraison

Les offres sur les frais de livraison doivent utiliser offer_category OFFER_CATEGORY_ADD_ON_FEE_REDUCTION_OFFER. Cela permet d'afficher l'offre uniquement lorsqu'elle est combinée à une autre offre de base pour l'établissement. Une offre sur les frais de livraison ne s'affiche pas comme une offre de base.

Exemples JSON d'offres

20 € de remise

Exemple : 20 € de remise sur le montant total de la commande le mardi pour un minimum de 15 € d'achat

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

50% de remise sur le smoothie aux baies

Exemple : 50% de remise sur un article.

{
  "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": "50% off on Berry Smoothie",
    "discount_percent": 50.0
  },
  "validity_periods": [
    {
      "valid_period": {
        "valid_from_time": { "seconds": 1768953600 },
        "valid_through_time": { "seconds": 1795219200 }
      }
    }
  ],
  "offer_restrictions": {
    "combinable_with_other_offers": true,
    "inclusions": [
      {"description":"Berry Smoothie"}
    ]
  },
  "terms": {
    "terms_and_conditions": "For use only at the participating restaurant location on qualifying delivery or takeout orders. Single use per order."
  },
  "entity_ids": ["dining-1"],
  "offer_url": "https://www.example-restaurant.com/offer/base_offer_1"
}

Offre "Un acheté, un sans frais"

Exemple : offre "Un apéritif acheté, un sans frais", 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 livraison gratuite

Exemple : livraison gratuite en complément d'une offre de base. L'offre "Frais de livraison : 0 €" s'affiche avec n'importe quelle offre de base pour l'établissement.

[
  {
    "offer_id": "offerId1",
    "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": "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_DELIVERY",
    "offer_modes": ["OFFER_MODE_ONLINE_ORDER"],
    "offer_category": "OFFER_CATEGORY_ADD_ON_FEE_REDUCTION_OFFER",
    "offer_details": {
      "offer_display_text": "$0 Delivery Fee",
      "other_offer_detail_text": "Free dellivery"
    },
    "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": "Delivery is free 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étaille les exigences et les bonnes pratiques liées à la spécification d'exécution des offres et aux contraintes associées.

Mode d'exécution (livraison et à emporter)

Si une seule offre s'applique à la fois à 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 arrivent sur le site du partenaire voient le contexte d'exécution approprié.

Périodes

Les offres doivent s'afficher 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 validity_periods.valid_period pour spécifier la période de validité. Cela empêche l'offre de s'afficher en dehors de cette période. La période doit également être définie si l'offre s'affiche 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 de TimeOfDayWindow.

Gérer les périodes qui chevauchent minuit

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

  • Segment 1 : de 22h à 23h59min59s le jour de début (par exemple, le mardi).
  • Segment 2 : de 0h à 2h le jour suivant (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 OfferDetails.additional_fees. Les frais de commodité doivent être spécifiés à l'aide du OfferDetails.convenience_fee. Utilisez une valeur de plage de frais pour les frais variables, par exemple si les frais de livraison varient en fonction de l'emplacement de l'utilisateur.