Créer la réponse

Une fois que votre application a traité la demande d'enchère de Google, elle doit créer et envoyer une réponse. Ce guide explique comment coder votre application pour créer la réponse.

Créer un message BidResponse

Pour envoyer une enchère, votre application d'enchères doit répondre à une demande d'enchère avec un BidResponse contenant un Bid dans le format que vous avez configuré. Si vous utilisez le format JSON, votre réponse doit définir l'en-tête Content-Type sur application/json; charset=utf-8 et inclure le BidResponse JSON dans le corps. Si vous utilisez le format Protobuf, votre application doit définir l'en-tête Content-Type sur application/octet-stream et inclure le BidResponse sérialisé dans le corps.

Pour créer et sérialiser un BidResponse au format Protobuf, vous devez générer et utiliser des bibliothèques Protobuf basées sur openrtb.proto et openrtb-adx.proto, qui implémentent respectivement les champs BidResponse OpenRTB standards et les extensions Google dans Protobuf. Vous les trouverez dans Protos et données de référence.

Si vous ne souhaitez pas enchérir sur une impression, vous devez renvoyer une réponse HTTP 204 vide. Votre application doit renvoyer une réponse à chaque BidRequest. Les délais d'expiration et les réponses qui ne peuvent pas être analysées sont considérés comme des erreurs. Google limite les enchérisseurs ayant des taux d'erreur élevés.

ID de la création

Votre BidResponse spécifie une création via le champ BidResponse.seatbid.bid.crid (limite de 128 octets). Même les créations similaires doivent avoir des valeurs uniques pour ce champ si elles diffèrent par des caractéristiques notables, y compris, mais sans s'y limiter, la taille, l'URL déclarée, les attributs de création et les types de fournisseurs. En d'autres termes, vous devez attribuer des ID de création différents à deux annonces qui :

  • avoir une apparence ou un comportement différents.
  • Effectuez le rendu sur différentes images.
  • Être affichées de différentes manières (par exemple, une annonce est une image, tandis que l'autre est une vidéo).

Lorsque vous concevez votre application, vous devez choisir une méthode systématique pour générer des identifiants qui correspondent aux types de créations que vous prévoyez d'envoyer.

Attributs d'annonce

Google vous recommande de déclarer des attributs de création pour décrire les caractéristiques de votre annonce et son ciblage à l'aide d'une combinaison de BidResponse.seatbid.bid.apis et BidResponse.seatbid.bid.attr, ou de l'extension BidResponse.seatbid.bid.ext.attribute. Voici comment déclarer des attributs :

  • VPAID
    Définissez BidResponse.seatbid.bid.apis sur VPAID_1 ou VPAID_2. Pour le format JSON, cette valeur peut être définie sur 1 ou 2, respectivement.
  • MRAID
    Définissez BidResponse.seatbid.bid.apis sur MRAID_1 ou 3 pour le format JSON.
  • SIZELESS
    Définissez BidResponse.seatbid.bid.attr sur RESPONSIVE ou 18 pour le format JSON.
  • PLAYABLE
    Pour ce faire, définissez BidResponse.seatbid.bid.attr sur USER_INTERACTIVE ou 13 pour le format JSON.

Consultez la ressource sur les créations pour savoir comment obtenir des commentaires sur les propriétés détectées de vos créations.

Champs Open Bidding

Les réponses aux enchères envoyées par les enchérisseurs des places de marché et des réseaux participant à Open Bidding sont semblables à celles des acheteurs autorisés participant aux enchères en temps réel standards. Les clients Open Bidding peuvent spécifier un petit nombre de champs supplémentaires, et certains champs existants peuvent avoir d'autres utilisations. En voici quelques exemples :

Champ Détails
BidResponse.imp.pmp.deals.id

ID de l'accord provenant de l'espace de noms de la place de marché, associé à cette enchère et communiqué aux éditeurs.

BidResponse.seatbid.bid.ext.exchange_deal_type

Type d'accord signalé aux éditeurs, qui a une incidence sur la façon dont l'accord est traité dans l'enchère.

BidResponse.seatbid.bid.ext.third_party_buyer_token Jeton utilisé pour identifier les informations de l'acheteur tiers final si la place de marché en tant qu'enchérisseur Open Bidding est un intermédiaire. Il est obtenu auprès de l'acheteur tiers et doit être transmis à Google sans modification dans la réponse à l'enchère.

Recommandations

  • Activez les connexions HTTPS persistantes (également appelées "keep-alive" ou "réutilisation de la connexion") sur vos serveurs. Définissez le délai avant expiration sur au moins 10 secondes. Des valeurs plus élevées sont avantageuses dans de nombreux cas. Google vérifie cela lors des tests de latence initiaux de votre application, car Authorized Buyers envoie des requêtes à un taux élevé et doit éviter la surcharge de latence liée à l'établissement d'une connexion TCP distincte pour chaque requête.
  • Incluez l'URL de suivi des impressions facultative pour savoir quand l'impression est rendue, et non quand l'enchérisseur remporte l'enchère. En raison de la différence entre les victoires et les rendus, cela permet d'obtenir des statistiques de suivi plus précises.

  • Assurez-vous que votre code d'enchérisseur ne dépend pas des champs obsolètes, car cela peut entraîner l'échec de vos enchères et des erreurs.
  • Incluez BidResponse.seatbid.bid.w et BidResponse.seatbid.bid.h dans votre BidResponse. Une BidResponse pour une demande incluant plusieurs tailles d'annonces doit inclure ces champs, sinon elle sera supprimée des enchères.
  • Limitez la taille de votre réponse à moins de 8 Ko. Les réponses très volumineuses peuvent augmenter la latence du réseau et entraîner des délais avant expiration.
  • Suivez les consignes concernant les enchères sur l'inventaire iOS nécessitant l'attribution SKAdNetwork.

Exemple de réponse aux enchères

Les exemples suivants représentent des exemples lisibles par l'homme des requêtes Protobuf et JSON.

OpenRTB Protobuf

JSON OpenRTB

Important : Les messages Protobuf présentés dans les exemples sont représentés ici sous forme de texte lisible par l'humain. Cependant, ce n'est pas ainsi que les messages sont envoyés sur le réseau. Lorsque vous utilisez le format OpenRTB Protobuf, seules les réponses aux enchères sérialisées sont acceptées.

Vous pouvez créer et sérialiser un message BidResponse à l'aide du code C++ suivant :

BidResponse bid_response;
// fill in bid response with bid information
string post_response;
if (bid_response.SerializeToString(&post_response)) {
  // respond to the POST with post_response as the content
} else {
  // return an error to the POST
}

Spécifier une création

Votre réponse à l'enchère indique la création à diffuser si votre enchère est gagnante. Votre enchère doit inclure l'un des formats d'annonce acceptés (AMP, vidéo ou natif). Dans cet exemple, nous spécifions la création à l'aide du champ html_snippet.

Vous pouvez également spécifier votre création à l'aide de l'un des champs suivants, en fonction du format d'annonce :

  • Annonce affichée par le SDK
    • BidResponse.seatbid.bid.ext.sdk_rendered_ad
  • AMP
    • BidResponse.seatbid.bid.amp_ad_url
  • Vidéo
    • BidResponse.seatbid.bid.adm
  • Native
    • BidResponse.seatbid.bid.adm_native

Spécifiez une annonce hébergée sur vos propres serveurs à l'aide d'un extrait HTML dans le champ BidResponse.seatbid.bid.adm. L'extrait est inséré dans un iFrame intégré à la page Web, ce qui permet de récupérer et d'afficher l'annonce lorsque la page est chargée. Vous devez concevoir l'extrait HTML de sorte que l'annonce (bannière ou interstitiel) s'affiche correctement dans un iFrame et à une taille appropriée pour l'emplacement publicitaire sur lequel vous enchérissez.

De plus, la taille de l'annonce déclarée dans la réponse à l'enchère doit correspondre exactement à l'une des combinaisons de tailles de la demande d'enchère lorsque :

  • Une annonce est une bannière standard (et non une annonce vidéo, native ou interstitielle).
  • Le système d'enchères a déclaré la taille dans la réponse à l'enchère. La déclaration de la taille est obligatoire lorsqu'une demande comporte plusieurs tailles.
  • Une exception est faite pour les annonces interstitielles. Pour les interstitiels, la largeur doit être d'au moins 50 % de la largeur de l'écran et la hauteur d'au moins 40 % de la hauteur de l'écran.

Vous pouvez spécifier une création d'extrait HTML à l'aide de n'importe quel code HTML valide qui s'affiche correctement. Toutefois, gardez à l'esprit les restrictions concernant la spécification du champ crid dans la section Créer un message BidResponse. Vous pouvez, par exemple, ajouter des informations supplémentaires aux arguments des URL récupérées depuis vos serveurs lors du rendu de l'annonce. Cela vous permet de transmettre des données arbitraires sur l'impression à vos propres serveurs.

La plupart des règles concernant les extraits HTML renvoyés dans les réponses aux enchères sont les mêmes que celles concernant les annonces tierces. Pour en savoir plus, consultez les Consignes du programme Authorized Buyers, les Conditions requises pour la diffusion d'annonces par des tiers et Déclarer les URL de suivi des clics dans les annonces.

Spécifier des macros

Les macros sont du texte mis en forme intégré à certains champs de réponse aux enchères contenant des URL. Elles sont remplacées par une valeur pertinente au moment de la diffusion des annonces. Par exemple, si votre enchère gagnante inclut la macro AUCTION_PRICE dans l'extrait de code HTML de la création incluse dans votre enchère, la macro sera remplacée par une valeur que vous pourrez décrypter pour déterminer le montant que vous avez payé pour l'impression dans l'enchère.

Vous pouvez inclure des macros dans les champs suivants :

  • BidResponse.seatbid.bid.adm

    Les macros sont acceptées pour les formats d'extrait de code HTML, natif, d'URL vidéo et de code XML VAST vidéo.

  • BidResponse.seatbid.bid.adm_native.eventtrackers.url

  • BidResponse.seatbid.bid.adm_native.imptrackers

  • BidResponse.seatbid.bid.ext.amp_ad_url

    Seules les macros WINNING_PRICE et WINNING_PRICE_ESC spécifiques à Google sont acceptées pour les créations AMP.

  • BidResponse.seatbid.bid.burl

  • BidResponse.seatbid.bid.ext.impression_tracking_url

    Utilisez cette option au lieu de BidResponse.seatbid.bid.burl si vous avez besoin de plusieurs URL de facturation.

Par exemple, vous pouvez inclure une macro dans un extrait de code HTML en intégrant ${MACRO} dans l'URL utilisée pour récupérer la création, où MACRO est l'une des macros compatibles décrites dans la spécification OpenRTB.

Macros Google

Google accepte d'autres macros que celles de la spécification OpenRTB. Elles sont mises en forme différemment et s'affichent sous la forme %%MACRO%% si elles sont intégrées dans une URL. Le tableau suivant décrit ces macros :

Macro Description
ADVERTISING_IDENTIFIER Permet aux acheteurs de recevoir l'IDFA iOS ou l'identifiant publicitaire Android lors du rendu des impressions. Pour en savoir plus, consultez Déchiffrer les identifiants d'annonceur.
CACHEBUSTER Représentation sous forme de chaîne d'un entier aléatoire non signé de quatre octets.
CLICK_URL_UNESC

URL de suivi des clics non échappée pour l'annonce. Dans l'extrait, une version échappée de l'URL de clic tierce doit suivre directement la macro.

Par exemple, si l'URL de suivi des clics tierce est http://my.adserver.com/some/path/handleclick?click=clk, le code suivant peut être utilisé avec la version à échappement simple de l'URL de suivi des clics tierce après l'appel de la macro :

<a href="%%CLICK_URL_UNESC%%http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a>

Au moment de la diffusion de l'annonce, cet extrait est remplacé par celui-ci :

<a href="http://google-click-url?...&ad_url=http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a>

L'URL enregistre d'abord le clic auprès de Google, puis redirige l'utilisateur vers l'URL de suivi des clics du tiers.

CLICK_URL_ESC

URL de suivi des clics pour l'annonce (échappée). Utilisez cette macro à la place de CLICK_URL_UNESC si vous devez d'abord transférer la valeur via un autre serveur qui renverra la redirection.

Par exemple, le code suivant peut être utilisé dans un extrait HTML :

<a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC%%"></a>

Au moment de la diffusion de l'annonce, cet extrait est remplacé par celui-ci :

<a href="http://my.adserver.com/click?google_click_url=http://google-click- url%3F...%26ad_url%3D"></a>

Cela enregistre le clic auprès de my.adserver.com, qui est ensuite responsable de la redirection vers l'URL transmise dans le paramètre google_click_url. Cela suppose que my.adserver.com supprime l'échappement du paramètre google_click_url.

Vous pouvez ajouter une URL avec double échappement après %%CLICK_URL_ESC%%. Une fois l'échappement supprimé par my.adserver.com, il reste une version avec un seul échappement de l'URL ajoutée à google_click_url. Lorsque le google_click_url est récupéré, il est à nouveau déséchappé et redirigé.

CLICK_URL_ESC_ESC

URL de l'annonce avec double échappement. Utilisez cette macro à la place de CLICK_URL_UNESC si vous devez d'abord transférer la valeur via un autre serveur qui renverra la redirection.

Par exemple, le code suivant peut être utilisé dans un extrait HTML :

<a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC_ESC%%"></a>

Au moment de la diffusion de l'annonce, cet extrait est remplacé par celui-ci :

<a href="http://my.otheradserver.com/click?google_click_url=http%3A%2F%2Fmy.adserver.com%2Fclick%3Fgoogle_click_url%3Dhttp%3A%2F%2Fgoogle-click-%20url%253F...%2526ad_url%253D"></a>
SCHEME Développé sur http: si la demande d'enchère ne nécessite pas de connexion SSL ou sur https: si la demande d'enchère nécessite une connexion SSL.
SITE Domaine avec séquence d'échappement dans l'URL de contenu ou ID anonyme pour l'inventaire anonyme.
SITE_URL Obsolète. Remplacée par la macro SITE, qui offre une fonctionnalité identique.
TZ_OFFSET Décalage de fuseau horaire.
VERIFICATION

Les différentes valeurs pour la production et lorsque la création est analysée dans le pipeline de validation. Le format est le suivant : %%?VERIFICATION:true-val:false-val%%, où toutes les valeurs, à l'exception des macros, peuvent être utilisées pour true-val et false-val, y compris les chaînes vides. Pour les enchères ouvertes, nous recommandons aux plates-formes d'échange d'utiliser cette macro. Une fois qu'elles l'ont fait, les plates-formes côté demande n'ont pas besoin d'apporter de modifications.

Par exemple, si une création inclut %%?VERIFICATION:-1:5000%%, le texte de remplacement sera 5000 lors de la diffusion et -1 dans le pipeline de validation. Cela permet de faire la différence entre ces deux ensembles de pings.

WINNING_PRICE

Le coût de l'impression codée (CPI plutôt que CPM) en micro-unités de la devise du compte. Par exemple, une enchère au CPM gagnante d'un montant de 5 USD équivaut à 5 000 000 micro-unités de CPM, soit 5 000 micro-unités de CPI. La valeur décodée de WINNING_PRICE serait dans ce cas de 5 000. Le prix gagnant est exprimé en CPI.

Pour analyser cette macro, vous devrez implémenter une application qui déchiffre les confirmations de prix. Pour en savoir plus, consultez la page Déchiffrer les confirmations de prix.

WINNING_PRICE_ESC WINNING_PRICE avec échappement d'URL.

Google exige que vous utilisiez la macro CLICK_URL_UNESC ou CLICK_URL_ESC dans la création de l'annonce diffusée par un tiers. Google utilise les macros CLICK_URL pour le suivi des clics.

L'échappement d'URL dans les macros utilise le schéma suivant :

  • L'espace est remplacé par un signe plus (+).
  • Les caractères alphanumériques (0-9, a-z, A-Z) et les caractères de l'ensemble !()*,-./:_~ restent inchangés.
  • Tous les autres caractères sont remplacés par %XX, où XX est le nombre hexadécimal représentant le caractère.

Restrictions et exigences applicables aux éditeurs

La demande d'enchère inclut des informations sur les types de restrictions et d'exigences que les éditeurs imposent aux créations dans l'enchère.

  • BidRequest.bcat
    • Vous pouvez comparer les catégories bloquées spécifiées dans ce champ à celles détectées pour vos créations envoyées à l'aide du champ detectedCategories de l'API Real-time Bidding.
  • BidRequest.imp.ext.allowed_vendor_type
  • BidRequest.imp.secure
    • En pratique, cette valeur sera toujours définie sur true, car Google exige la compatibilité SSL pour toutes les créations.
  • BidRequest.imp.{audio/banner/native/video}
  • BidRequest.imp.{audio/banner/native/video}.api
  • BidRequest.imp.{audio/banner/native/video}.battr
  • BidRequest.imp.{audio/banner/video}.mimes

Ne définissez jamais d'enchères pour une annonce contenant une fonctionnalité soumise à restriction. Pour les fonctionnalités autorisées telles que le type de fournisseur, ne renvoyez une annonce que si son type de fournisseur figure dans la liste allowed_vendor_type de BidRequest. Seuls les formats d'annonces spécifiés dans la demande d'enchères en renseignant des champs tels que BidRequest.imp.banner doivent être inclus dans votre enchère. Pour en savoir plus, consultez les commentaires de ces champs dans la définition du tampon de protocole BidRequest.

Si une annonce est renvoyée dans BidResponse, vous devez définir avec précision les champs BidResponse.seatbid.bid.attr, BidResponse.seatbid.bid.cat et BidResponse.seatbid.bid.adomain ou BidResponse.seatbid.bid.adm_native.link.url dans BidResponse. Si une annonce comporte plusieurs valeurs applicables pour ces champs, vous devez inclure chacune d'elles. Pour en savoir plus, consultez les commentaires de ces champs dans la définition du tampon de protocole BidResponse. Les réponses pour lesquelles ces champs ne sont pas définis sont ignorées.

Open Measurement

Open Measurement vous permet de spécifier des fournisseurs tiers qui proposent des services de mesure et de validation indépendants pour les annonces diffusées dans des environnements d'applications mobiles.

Les formats d'annonces compatibles incluent les annonces vidéo, les bannières et les interstitiels. Pour en savoir plus sur l'utilisation d'Open Measurement dans une réponse aux enchères contenant ces formats, consultez l'article du Centre d'aide sur le SDK Open Measurement.

Exemples de réponses aux enchères

Les sections suivantes présentent des exemples de réponses aux enchères pour différents types d'annonces.

Bannière d'application

OpenRTB Protobuf

JSON OpenRTB

Interstitiel pour application

OpenRTB Protobuf

JSON OpenRTB

Interstitiel vidéo pour application

OpenRTB Protobuf

JSON OpenRTB

Application native

OpenRTB Protobuf

JSON OpenRTB

Vidéo Web

OpenRTB Protobuf

JSON OpenRTB

Bannière Web mobile pour enchérisseur d'échange

OpenRTB Protobuf

JSON OpenRTB