Lance em um leilão para comprar um espaço de anúncio

Como comprador de anúncios (DSPs e anunciantes), talvez você tenha interesse em participar de um leilão de anúncios da API Protected Audience no site do editor para segmentar um anúncio ao grupo de interesse definido no site do anunciante. Ao participar do leilão da API Protected Audience, você pode alcançar seus clientes identificados em outros sites de maneira que preserve a privacidade.

Em um leilão da API Protected Audience, você fornece a lógica para gerar o lance, e o navegador calcula o lance usando essa lógica. Isso é diferente de outras arquiteturas de leilão em que você envia o lance diretamente, em vez de fornecer a lógica.

Você fornece a lógica de geração de lances na função JavaScript generateBid(), e o arquivo é hospedado no seu servidor. Quando você adiciona um usuário a um grupo de interesse, o local desse arquivo é transmitido para a configuração do grupo de interesse como um biddingLogicUrl.

Durante o leilão, o navegador busca sua lógica de lances especificada no campo biddingLogicUrl e executa sua função generateBid() para cada grupo de interesse em um ambiente isolado seguro, que tem comunicação limitada com o contexto externo. Quando generateBid() é executado, o navegador transmite sinais para a função como argumentos. Esses indicadores contêm várias informações de diferentes fontes, como dados próprios do editor, dados do vendedor, dados em tempo real e muito mais. Você pode usar esses indicadores para calcular o lance, e o valor é retornado da chamada generateBid(). Depois que os lances são enviados, o navegador executa a lógica de pontuação do vendedor em cada lance para calcular a pontuação de conveniência do vendedor.

generateBid()

A seguir, descrevemos os argumentos da função generateBid() e a estrutura do lance retornado por ela:


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)
  };
}

Argumentos

generateBid() usa os seguintes argumentos:

Argumento Papel

interestGroup

Um objeto transmitido pelo comprador de anúncios. O grupo de interesse pode ser atualizado com dailyUpdateUrl.

auctionSignals

Uma propriedade do argumento configuração do leilão transmitido a navigator.runAdAuction() pelo vendedor. Isso fornece informações sobre o contexto da página (como o tamanho do anúncio e o ID do editor), o tipo de leilão (de primeiro ou segundo preço) e outros metadados.

perBuyerSignals

Uma propriedade do argumento configuração do leilão transmitido pelo vendedor. Isso pode fornecer indicadores contextuais do servidor do comprador sobre a página, se o vendedor for uma SSP que faz uma chamada de lances em tempo real para os servidores do comprador e envia a resposta de volta, ou se a página do publisher entrar em contato diretamente com o servidor do comprador. Nesse caso, o comprador pode verificar uma assinatura criptográfica desses indicadores em generateBid() como proteção contra adulteração.

trustedBiddingSignals

Um objeto em que as chaves são o trustedBiddingSignalsKeys do grupo de interesse e os valores são retornados na solicitação trustedBiddingSignals.

browserSignals

Um objeto criado pelo navegador, que pode incluir informações sobre o contexto da página (como o hostname da página atual, que o vendedor poderia falsificar) e dados do próprio grupo de interesse (como um registro de quando o grupo ganhou um leilão anteriormente, para permitir a limitação de frequência no dispositivo).

directFromSellerSignals

Indicadores que vêm de um vendedor específico, ao contrário de auctionSignals e sellerSignals, que podem vir de qualquer participante presente no contexto em que runAdAuction é executado.

Indicadores do navegador

O objeto browserSignals tem as seguintes propriedades:

{
  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
}
Propriedade Descrição

topWindowHostname

O nome do host de onde a chamada runAdAuction() foi feita.

seller

O vendedor a quem o lance é enviado. Em um leilão de componentes, esse valor é o vendedor do componente.

topLevelSeller

O vendedor de nível superior em um leilão de componentes, que só está presente nesse tipo de leilão.

requestedSize

A propriedade requestedSize recomenda um tamanho de frame para o leilão. O vendedor define o tamanho solicitado na configuração do leilão, e o valor fica disponível para os bidders em generateBid(). Os participantes do leilão podem escolher um tamanho de conteúdo diferente para o anúncio, e o tamanho resultante será dimensionado visualmente para caber no contêiner do elemento.

joinCount

O campo joinCount é o número de vezes que o dispositivo entrou no grupo de interesse nos últimos 30 dias enquanto o grupo ficou armazenado continuamente. Ou seja, não há lacunas no armazenamento do grupo de interesse no dispositivo devido à saída ou ao vencimento da associação.

recency

O campo recency é a duração do tempo (em minutos) desde que este dispositivo entrou no grupo de interesse até agora.

bidCount

O número de vezes que o grupo de interesse enviou um lance.

prevWinsMs

O campo prevWinMs contém os anúncios vencedores do grupo de interesse e o tempo desde as vitórias anteriores em milissegundos. O objeto de anúncio aqui contém apenas os campos renderURL e de metadados.

wasmHelper

um objeto WebAssembly.Module com base no biddingWasmHelperURL do grupo de interesse.

dataVersion

Valor "Data-Version" das respostas do serviço de chave/valor do comprador.

adComponentsLimit

Número máximo de componentes de anúncio que generateBid() pode retornar

Calcular um lance

Para calcular um valor de lance, o código em generateBid() pode usar as propriedades dos parâmetros da função.

Exemplo:

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

Retornar um lance

generateBid() retorna um objeto com as seguintes propriedades:

Propriedade Papel
ad Metadados arbitrários sobre o anúncio, como informações que o vendedor espera saber sobre o lance ou o criativo. O vendedor usa essas informações na lógica de decisão e no leilão.
adCost Um valor numérico usado para transmitir o custo de clique ou conversão do anunciante de relatórios de generateBid para reportWin. A precisão desse número é limitada a uma mantissa de 8 bits e um expoente de 8 bits, com qualquer arredondamento realizado de forma estocástica.
adComponents Uma lista opcional de até 20 componentes para anúncios compostos de várias partes, extraídos da propriedade adComponents do argumento do grupo de interesse transmitido para navigator.joinAdInterestGroup().
allowComponentAuction Um valor booleano que indica se este lance pode ser usado em um leilão de componentes. O padrão é "false" se não for especificado.
bid Um lance numérico que vai entrar no leilão. O vendedor precisa estar em uma posição para comparar lances de diferentes compradores. Portanto, os lances precisam estar em alguma unidade escolhida pelo vendedor, como"USD por mil". Se o lance for zero ou negativo, esse grupo de interesse não vai participar do leilão do vendedor. Com esse mecanismo, o comprador pode implementar regras de anunciante sobre onde os anúncios podem ou não aparecer.
bidCurrency A moeda do lance, usada para verificação de moeda.
render Um dicionário que descreve o criativo a ser renderizado se este lance ganhar o leilão. Isso inclui:
  • url: o URL do criativo.
  • width: a largura do criativo. Esse tamanho será comparado com a declaração no grupo de interesse e substituído em todas as macros de tamanho do anúncio presentes no URL do criativo. Quando o anúncio é carregado em um frame isolado, o frame interno dele (ou seja, o tamanho visível para o criativo do anúncio) é congelado nesse tamanho, e não é possível ver as mudanças feitas pelo incorporador no tamanho do frame.
  • height: a altura do criativo. Consulte a elaboração em width.

modelingSignals

Um número inteiro de 0 a 4095 (12 bits) transmitido para reportWin(), com ruído, conforme descrito no esquema de ruído e agrupamento. Valores inválidos, como negativos, infinitos e NaN, serão ignorados e não transmitidos. Apenas os 12 bits mais baixos serão transmitidos.


O comprador pode usar os indicadores disponíveis na função generateBid(), incluindo dados próprios do comprador capturados no momento da criação do grupo de interesse em userBiddingSignals, para derivar um valor que é transmitido à função de relatórios de vitórias do comprador e permitir o treinamento do modelo de ML.