Enchérir lors d'enchères pour acheter un espace publicitaire

En tant qu'acheteur d'annonces (DSP et annonceurs), vous pouvez participer à une enchère d'annonces Protected Audience sur le site de l'éditeur pour cibler un groupe d'intérêt que vous avez défini sur le site de l'annonceur. En participant aux enchères Protected Audience, vous pouvez toucher vos clients identifiés sur d'autres sites tout en respectant leur confidentialité.

Dans une enchère Protected Audience, vous fournissez la logique permettant de générer l'enchère, et le navigateur la calcule à l'aide de cette logique. Cela diffère des autres architectures d'enchères, dans lesquelles vous soumettez directement l'enchère au lieu de fournir la logique.

Vous fournissez votre logique de génération d'enchères dans la fonction JavaScript generateBid(). Le fichier est hébergé sur votre serveur. Lorsque vous ajoutez un utilisateur à un groupe d'intérêt, l'emplacement de ce fichier est transmis à la configuration du groupe d'intérêt en tant que biddingLogicUrl.

Pendant les enchères, le navigateur récupère la logique d'enchères que vous avez spécifiée dans le champ biddingLogicUrl et exécute votre fonction generateBid() pour chaque groupe d'intérêt dans un environnement isolé sécurisé dont la communication avec le contexte extérieur est limitée. Lorsque generateBid() est exécuté, le navigateur transmet des signaux à la fonction en tant qu'arguments. Ces signaux contiennent diverses informations provenant de différentes sources, telles que les données first party de l'éditeur, les données du vendeur, les données en temps réel, etc. Vous pouvez utiliser ces signaux pour calculer l'enchère. La valeur est renvoyée par l'appel generateBid(). Une fois les enchères envoyées, le navigateur exécute la logique de notation du vendeur sur chaque enchère pour calculer le score de désirabilité du vendeur.

generateBid()

Vous trouverez ci-dessous une description des arguments de la fonction generateBid() et de la structure de l'enchère renvoyée par la fonction :


generateBid(interestGroup, auctionSignals, perBuyerSignals,
    trustedBiddingSignals, browserSignals, directFromSellerSignals) {
  return {
    ad: adObject,
    adCost: optionalAdCost,
    bid: bidValue,
    bidCurrency: 'USD',
    render: {
      url: renderURL,
      width: renderWidth,
      height: renderHeight
    },
    adComponents: [
      {url: adComponent1, width: componentWidth1, height: componentHeight1},
      {url: adComponent2, width: componentWidth2, height: componentHeight2},
      // ...
    ],
    allowComponentAuction: false,
    modelingSignals: 123 // 0-4095 integer (12-bits)
  };
}

Arguments

generateBid() utilise les arguments suivants :

Argument Rôle

interestGroup

Objet transmis par l'acheteur d'annonces. Le groupe d'intérêt peut être mis à jour avec dailyUpdateUrl.

auctionSignals

Propriété de l'argument auction config transmis à navigator.runAdAuction() par le vendeur. Il fournit des informations sur le contexte de la page (comme la taille de l'annonce et l'ID de l'éditeur), le type d'enchères (au premier ou au second prix) et d'autres métadonnées.

perBuyerSignals

Propriété de l'argument auction config transmis par le vendeur. Cela peut fournir des signaux contextuels à partir du serveur de l'acheteur concernant la page, si le vendeur est une SSP qui effectue un appel d'enchères en temps réel aux serveurs de l'acheteur et renvoie la réponse, ou si la page de l'éditeur contacte directement le serveur de l'acheteur. Si c'est le cas, l'acheteur peut vérifier la signature cryptographique de ces signaux dans generateBid() pour se protéger contre toute falsification.

trustedBiddingSignals

Objet dont les clés sont les trustedBiddingSignalsKeys du groupe d'intérêt et dont les valeurs sont renvoyées dans la requête trustedBiddingSignals.

browserSignals

Objet construit par le navigateur, qui peut inclure des informations sur le contexte de la page (comme le hostname de la page actuelle, que le vendeur pourrait autrement falsifier) et des données pour le groupe d'intérêt lui-même (comme un enregistrement de la date à laquelle le groupe a remporté une enchère, pour permettre la limitation de la fréquence sur l'appareil).

directFromSellerSignals

Signaux provenant d'un vendeur spécifique, contrairement à auctionSignals et sellerSignals qui peuvent provenir de n'importe quel participant présent dans le contexte d'exécution de runAdAuction.

Signaux du navigateur

L'objet browserSignals comporte les propriétés suivantes :

{
  topWindowHostname: 'publisher.example',
  seller: 'https://ssp.example',
  topLevelSeller: 'https://www.top-level-ssp.com',
  requestedSize: {width: 100, height: 200},  /* if specified in auction config */
  joinCount: 3,
  recency: 3600000,
  bidCount: 17,
  prevWinsMs: [[timeDeltaMs1,ad1],[timeDeltaMs2,ad2],...],
  wasmHelper: ...
  dataVersion: 1,
  adComponentsLimit: 40
}
Propriété Description

topWindowHostname

Nom d'hôte à partir duquel l'appel runAdAuction() a été effectué.

seller

Vendeur auquel l'enchère est envoyée. Dans une enchère de composants, cette valeur correspond au vendeur du composant.

topLevelSeller

Vendeur de premier niveau dans une enchère de composants. Il n'est présent que dans une enchère de composants.

requestedSize

La propriété requestedSize recommande une taille de frame pour l'enchère. Le vendeur définit la taille demandée dans la configuration de l'enchère. La valeur devient disponible pour les enchérisseurs dans generateBid(). Les enchérisseurs participant aux enchères peuvent choisir une taille de contenu différente pour l'annonce. La taille obtenue sera visuellement mise à l'échelle pour s'adapter à la taille du conteneur de l'élément.

joinCount

Le champ joinCount correspond au nombre de fois où cet appareil a rejoint ce groupe d'intérêt au cours des 30 derniers jours, tandis que le groupe d'intérêt a été stocké en continu (c'est-à-dire qu'il n'y a pas de lacunes dans le stockage du groupe d'intérêt sur l'appareil en raison d'un départ ou de l'expiration de l'adhésion).

recency

Le champ recency correspond à la durée (en minutes) écoulée depuis que cet appareil a rejoint ce groupe d'intérêt.

bidCount

Nombre de fois où le groupe d'intérêt a envoyé une enchère.

prevWinsMs

Le champ prevWinMs contient les annonces gagnantes du groupe d'intérêt et le temps écoulé depuis leurs précédentes victoires, en millisecondes. Notez que l'objet d'annonce ici ne contient que les champs renderURL et de métadonnées.

wasmHelper

Objet WebAssembly.Module basé sur le biddingWasmHelperURL du groupe d'intérêt.

dataVersion

Valeur Data-Version issue des réponses du service de clés/valeurs de l'acheteur.

adComponentsLimit

Nombre maximal de composants d'annonce generateBid() pouvant être renvoyés

Calculer une enchère

Pour calculer une valeur d'enchère, le code dans generateBid() peut utiliser les propriétés des paramètres de la fonction.

Exemple :

function generateBid(interestGroup, auctionSignals, perBuyerSignals,
    trustedBiddingSignals, browserSignals) {
  return {
   //  ...
    bid: auctionSignals.is_above_the_fold ? perBuyerSignals.atf_value : perBuyerSignals.btf_value,
    // ...
  }
}

Retourner une enchère

generateBid() renvoie un objet avec les propriétés suivantes :

Propriété Rôle
ad Métadonnées arbitraires sur l'annonce, telles que les informations que le vendeur s'attend à obtenir sur cette enchère ou cette création publicitaire. Le vendeur utilise ces informations dans sa logique d'enchères et de décision.
adCost Valeur numérique utilisée pour transmettre le coût des clics ou des conversions de l'annonceur pour les rapports de generateBid à reportWin. La précision de ce nombre est limitée à une mantisse de 8 bits et à un exposant de 8 bits, avec un arrondi stochastique.
adComponents Liste facultative de 20 composants maximum pour les annonces composées de plusieurs éléments, extraite de la propriété adComponents de l'argument de groupe d'intérêt transmis à navigator.joinAdInterestGroup().
allowComponentAuction Valeur booléenne indiquant si cette enchère peut être utilisée dans une enchère par composants. Si aucune valeur n'est spécifiée, la valeur par défaut est "false".
bid Enchère numérique qui participera à la mise aux enchères. Le vendeur doit être en mesure de comparer les offres de différents acheteurs. Par conséquent, les offres doivent être exprimées dans une unité choisie par le vendeur (par exemple, "USD par millier"). Si l'enchère est nulle ou négative, ce groupe d'intérêt ne participera pas du tout aux enchères du vendeur. Grâce à ce mécanisme, l'acheteur peut appliquer toutes les règles des annonceurs concernant les emplacements où leurs annonces peuvent ou non être diffusées.
bidCurrency Devise de l'enchère, utilisée pour la vérification de la devise.
render Dictionnaire décrivant la création à afficher si cette enchère remporte l'enchère. Par exemple :
  • url : URL de la création.
  • width : largeur de la création. Cette taille sera comparée à celle déclarée dans le groupe d'intérêt et remplacera toutes les macros de taille d'annonce présentes dans l'URL de la création publicitaire. Lorsque l'annonce est chargée dans un cadre cloisonné, le cadre intérieur du cadre cloisonné (c'est-à-dire la taille visible par la création publicitaire) est figé à cette taille. Il ne peut pas voir les modifications apportées à la taille du cadre par l'intégrateur.
  • height : hauteur de la création. Pour en savoir plus, consultez width.

modelingSignals

Entier compris entre 0 et 4 095 (12 bits) transmis à reportWin(), avec ajout de bruit, comme décrit dans le schéma de bruitage et de répartition dans des buckets. Les valeurs non valides, telles que les valeurs négatives, infinies et NaN, seront ignorées et ne seront pas transmises. Seuls les 12 bits les moins significatifs seront transmis.


L'acheteur peut utiliser les signaux disponibles dans la fonction generateBid(), y compris les données first party de l'acheteur capturées lors de la création du groupe d'intérêt dans userBiddingSignals, pour dériver une valeur qui est transmise à la fonction de rapport sur les enchères remportées de l'acheteur afin de permettre l'entraînement du modèle de ML.