

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Construção e modelagem de propostas
<a name="yield-optimization-bid-construction"></a>

Esta página explica como MediaTailor cria uma solicitação de lance do OpenRTB a partir do seu modelo, como a interpolação de variáveis funciona e quais valores são definidos automaticamente. MediaTailor 

## Campos de configuração
<a name="yield-optimization-bid-construction-config-fields"></a>

Ao ativar a otimização de rendimento em uma configuração de reprodução, você fornece quatro campos:


| Campo | Description | Obrigatório | 
| --- | --- | --- | 
| PublisherId | Seu ID de editor do APS (obtido do registro do APS). Injetado app.publisher.id em cada solicitação de licitação. | Sim | 
| Region | Região APS:AMERICAS,EUROPE, ouASIA\_PACIFIC. Determina o endpoint do APS. | Sim | 
| MinimumUnfilledDuration | O mínimo de segundos não preenchidos é necessário antes de MediaTailor acionar uma solicitação de lance. Também usado comoimp.video.minduration. | Sim | 
| OpenRtbTemplate | Seu modelo ORTB JSON (máximo de 100 KB). Define o corpo da solicitação de oferta. | Sim | 

## Como a solicitação de licitação é construída
<a name="yield-optimization-bid-construction-how"></a>

Quando um intervalo de anúncio tem a duração restante não preenchida, cria MediaTailor a solicitação de lance nas seguintes etapas:

1. **Interpolação de modelos. ** MediaTailor resolve`{{session.*}}`,,, `{{player_params.*}}` `{{avail.*}}` `{{request.*}}``{{asset.*}}`, e `{{scte.*}}` espaços reservados em seu modelo usando a sintaxe de modelagem padrão do [ Mustache. ](https://mustache.github.io/mustache.5.html) O Mustache usa colchetes duplos`{{ }}`, o que difere dos colchetes `[ ]` usados na substituição de variáveis de URL do ADS.

1. **Análise JSON. ** O modelo interpolado é analisado como JSON.

1. **Extração e validação de campo. ** MediaTailorextrai campos obrigatórios e lança um `BidRequestConfigurationError` se algum estiver ausente ou vazio.

1. **Injeção de campo codificada. ** MediaTailor substitui ou injeta campos que ele gerencia automaticamente usando valores da configuração do console e do contexto atual de disponibilidade (por exemplo, `app.publisher.id` do seu ID de editor configurado, da duração calculada não `imp.video.maxduration` preenchida).

1. **Serialização e envio. ** O final BidRequest é serializado para JSON e enviado como HTTP POST para o endpoint APS.

**Importante**  
Se algum campo obrigatório estiver ausente ou vazio após a interpolação, a solicitação de oferta falhará com a `BidRequestConfigurationError` e nenhuma solicitação será enviada à APS. O erro é registrado, mas a reprodução continua normalmente (falha na abertura).

## Modelo padrão do console
<a name="yield-optimization-bid-construction-default-template"></a>

Quando você ativa a otimização de rendimento no MediaTailor console, o seguinte modelo pré-preenchido é fornecido como ponto de partida. Você deve personalizar os valores do seu aplicativo:

```
{
  "imp": [
    {
      "bidfloor": 5
    }
  ],
  "app": {
    "id": "{{player_params.app_id}}",
    "name": "{{player_params.app_name}}",
    "bundle": "{{player_params.bundle}}",
    "storeurl": "{{player_params.storeurl}}",
    "domain": "{{player_params.domain}}",
    "content": {
      "genre": "{{asset.genre}}",
      "contentrating": "{{asset.content_rating}}"
    }
  },
  "device": {
    "dnt": "{{player_params.dnt}}",
    "ua": "{{session.user_agent}}",
    "ip": "{{session.client_ip}}",
    "ifa": "{{player_params.device_ifa}}",
    "w": "{{player_params.device_width}}",
    "h": "{{player_params.device_height}}",
    "language": "{{player_params.language}}",
    "model": "{{player_params.model}}",
    "os": "{{player_params.os}}",
    "osv": "{{player_params.osv}}",
    "devicetype": "{{player_params.devicetype}}",
    "make": "{{player_params.make}}"
  },
  "user": {
    "consent": "{{player_params.consent}}"
  },
  "regs": {
    "gdpr": "{{player_params.gdpr}}",
    "us_privacy": "{{player_params.us_privacy}}",
    "gpp": "{{player_params.gpp_consent}}",
    "gpp_sid": "{{player_params.gpp_sid}}"
  }
}
```

**Field-by-field explicação: **


| Campo | Categoria | O que fazer | 
| --- | --- | --- | 
| imp[0].bidfloor | Opcional (padrão: 1,0) | Defina seu CPM mínimo. O padrão do console é $5. Reduza para melhores taxas de preenchimento durante o teste. | 
| app.id | APS recomendado | O identificador do seu aplicativo. O jogador deve enviarplayerParams.app\_id. | 
| app.name | APS recomendado | Nome do seu aplicativo. O jogador deve enviarplayerParams.app\_name. | 
| app.bundle | Obrigatório  | ID do seu pacote de aplicativos. O jogador deve enviar playerParams.bundle ou substituir por um valor estático (recomendado). | 
| app.storeurl | Obrigatório  | URL da sua loja de aplicativos. O jogador deve enviar playerParams.storeurl ou substituir por um valor estático (recomendado). | 
| app.domain | APS recomendado | O domínio do seu aplicativo. O jogador deve enviarplayerParams.domain. | 
| app.content.genre | APS recomendado | Preenchido a partir de metadados de ativos da fonte de conteúdo. | 
| app.content.contentrating | APS recomendado | Preenchido a partir de metadados de ativos da fonte de conteúdo. | 
| device.dnt | APS recomendado | Sinalizador do Do Not Track. O jogador deve enviarplayerParams.dnt. | 
| device.ua | Obrigatório  | Preenchido automaticamente do User-Agent cabeçalho do visualizador até {{session.user\_agent}} o. Nenhum parâmetro de jogador é necessário. | 
| device.ip | Obrigatório  | Preenchido automaticamente a partir do IP do espectador até{{session.client\_ip}}. Nenhum parâmetro de jogador é necessário. | 
| device.ifa | APS recomendado | ID de publicidade. O jogador deve enviarplayerParams.device\_ifa. | 
| device.w / device.h | APS recomendado | Dimensões da tela. O jogador deve enviarplayerParams.device\_width/device\_height. | 
| device.language | APS recomendado | Idioma do dispositivo. O jogador deve enviarplayerParams.language. | 
| device.model | APS recomendado | Modelo do dispositivo. O jogador deve enviarplayerParams.model. | 
| device.os / device.osv | APS recomendado | Sistema operacional e versão. O jogador deve enviarplayerParams.os/osv. | 
| device.devicetype | Substituível (padrão: 3) | Tipo de dispositivo IAB. O jogador deve enviarplayerParams.devicetype. O padrão é 3 (CTV) se estiver vazio. | 
| device.make | APS recomendado | Fabricante do dispositivo. O jogador deve enviarplayerParams.make. | 
| user.consent | APS recomendado (UE) | Cadeia de consentimento do GDPR (TCF). O jogador deve enviarplayerParams.consent. | 
| regs.gdpr | APS recomendado (UE) | Sinalizador GDPR (0 ou 1). O jogador deve enviarplayerParams.gdpr. | 
| regs.us\_privacy | APS Recomendado (EUA) | Cadeia de caracteres CCPA (por exemplo,1YNY). O jogador deve enviarplayerParams.us\_privacy. | 
| regs.gpp | APS recomendado | Cadeia de consentimento da Global Privacy Platform. O jogador deve enviarplayerParams.gpp\_consent. Preferida em vez us\_privacy de obter melhores taxas de preenchimento. | 
| regs.gpp\_sid | APS recomendado | IDs de seção GPP (por exemplo, [7] para cidadãos dos EUA). O jogador deve enviarplayerParams.gpp\_sid. | 

**Importante**  
O console padrão usa `{{player_params.*}}` campos obrigatórios como `app.bundle` `app.storeurl` e. Se seu jogador não enviar esses parâmetros, a solicitação de lance falhará`BidRequestConfigurationError`. Para campos que são iguais para todas as sessões (normalmente`app.bundle`, `app.storeurl``app.name`, e outros identificadores no nível do aplicativo), considere substituir o espaço reservado por um valor estático (por exemplo,). `"bundle": "com.yourcompany.app"` Não codifique campos que variem de acordo com o espectador, como,`device.ua`, `device.ip``device.ifa`, cadeias de consentimento do GDPR e GPP, nem quaisquer registros ou campos de objetos do usuário. Esses devem vir de `{{session.*}}` ou`{{player_params.*}}`.

**nota**  
O padrão do console não inclui `video.mimes` ou `video.protocols` no modelo. MediaTailor usa valores alternativos codificados (`["video/mp4"]`para mímicos, `[1,2,3,4,5,6,7,8]` para protocolos) quando eles não são fornecidos. Você pode adicioná-los ao seu modelo se quiser restringir os formatos suportados.

## Interpolação de modelos (modelagem Mustache)
<a name="yield-optimization-bid-construction-interpolation"></a>

Seu modelo ORTB usa a [ sintaxe de modelagem ](https://mustache.github.io/mustache.5.html) Mustache para substituição dinâmica de valores. Os espaços reservados usam colchetes duplos. `{{ }}`

### Variáveis de modelo disponíveis
<a name="yield-optimization-bid-construction-variables"></a>

Seu modelo ORTB pode usar as mesmas variáveis dinâmicas disponíveis nos modelos de URL do ADS. Isso inclui variáveis de sessão (por exemplo,`{{session.client_ip}}`)`{{session.user_agent}}`, parâmetros do player (`{{player_params.*}}`), metadados do ativo (`{{asset.*}}`), contexto de disponibilidade (`{{avail.*}}`) e dados de sinal SCTE (). `{{scte.*}}`

Para obter a lista completa das variáveis disponíveis e suas descrições, consulte[MediaTailor variáveis de anúncios dinâmicos para solicitações de ADS](variables.md). Para saber como os parâmetros MediaTailor URL-decodes do jogador são avaliados antes de substituí-los no modelo, veja [Comportamento de codificação e decodificação](#yield-optimization-bid-construction-encoding) mais adiante nesta página.

As variáveis mais usadas nos modelos ORTB são:
+ `{{session.user_agent}}`: User-Agent cabeçalho do visualizador (use para`device.ua`).
+ `{{session.client_ip}}`: Endereço IP do visualizador (use para`device.ip`).
+ `{{player_params.*}}`: valores personalizados passados pelo jogador durante a inicialização da sessão.
+ `{{asset.*}}`: metadados de conteúdo da origem (por exemplo,`asset.genre`,`asset.content_rating`).

**Atenção**  
Sempre coloque espaços reservados entre aspas, mesmo para campos numéricos como ou`dnt`. `devicetype` Se um espaço reservado for resolvido para uma string vazia e não estiver entre aspas (por exemplo,`"dnt": {{player_params.dnt}}`), o resultado será um JSON inválido e toda a solicitação de oferta falhará com a. `BidRequestConfigurationError` Use `"dnt": "{{player_params.dnt}}"` em vez disso. APS aceita campos numéricos passados como strings. Esse comportamento ocorre intencionalmente porque as substituições de cadeias vazias de aspas entre aspas automáticas entrariam em conflito com o modo Raw-JSON usado em outras partes do interpolador. A restrição é documentada em vez de imposta. Veja também como MediaTailor lida com [Comportamento de codificação e decodificação](#yield-optimization-bid-construction-encoding) os valores dos parâmetros do player antes da interpolação.

### Como passar os parâmetros do jogador
<a name="yield-optimization-bid-construction-pass-params"></a>

Há duas maneiras de passar parâmetros do jogador durante a inicialização da sessão.

**Método 1: solicitação POST com corpo JSON (recomendado) **

```
POST https://<mediatailor-endpoint>/v1/session/<config-hash>/<origin-id>/master.m3u8
Content-Type: application/json

{
  "playerParams": {
    "app_id": "558775_example",
    "slot_id": "608109df-2378-4bc5-8da5-24bc355f01a4",
    "os": "Tizen",
    "make": "Samsung",
    "model": "Tizen TV",
    "language": "en",
    "us_privacy": "1YNY"
  }
}
```

Esse método é preferido porque evita URL-encoding problemas com valores complexos, como cadeias de caracteres de agente de usuário.

**Método 2: parâmetros de consulta de URL **

```
GET https://<mediatailor-endpoint>/v1/session/<config-hash>/<origin-id>/master.m3u8
  ?playerParams.app_id=558775_example
```

Com esse método, os valores devem ser URL-encoded. MediaTailor URL-decodes eles antes da interpolação.

### Comportamento de codificação e decodificação
<a name="yield-optimization-bid-construction-encoding"></a>

MediaTailor executa ** um nível de decodificação de URL ** nos valores dos parâmetros do player antes de interpolá-los no modelo. Isso se aplica independentemente de como os parâmetros são passados (corpo do POST ou parâmetros de consulta de URL).

**Exemplos de valores decodificados: **


| Valor enviado | Valor após a decodificação (usado no modelo) | 
| --- | --- | 
| Test%20Os | Test Os | 
| https%3A%2F%2Flocalhost | https://localhost | 
| foo%20bar | foo bar | 
| Mozilla%2F5.0%20(SMART-TV) | Mozilla/5.0 (SMART-TV) | 

**Pontos-chave: **
+ MediaTailor decodifica para apenas ** ** um nível. Double-encoded valores (por exemplo,`%2520`) serão decodificados para`%20`, não para um espaço.
+ **Os valores corporais do POST também ** são decodificados. Se o corpo do POST contiver URL-encoded valores, eles serão decodificados antes da interpolação.
+ **Valores de texto simples ** (sem codificação) passam inalterados.
+ Após a decodificação e a interpolação, todo o modelo é analisado como JSON. Caracteres especiais em valores interpolados (como aspas sem escape ou barras invertidas) podem interromper a análise do JSON.

**dica**  
Se seu player enviar valores que já são texto simples (não URL-encoded), eles funcionarão como estão. Você só precisa estar atento à decodificação dos URL-encodes valores do seu jogador antes de enviá-los.

### O que acontece quando uma variável está ausente
<a name="yield-optimization-bid-construction-missing-variable"></a>

Se o player não enviar um parâmetro referenciado em seu modelo (por exemplo, `{{player_params.app_name}}` mas não `app_name` nos parâmetros do player), o espaço reservado será resolvido para uma string vazia. ** ** `""`

**Impacto: ** se a string vazia estiver em um campo obrigatório (como`app.bundle`), a solicitação de lance falhará com`BidRequestConfigurationError`. Se estiver em um campo opcional, o APS recebe um valor vazio que pode causar uma resposta sem oferta (HTTP 204).

## O que MediaTailor define automaticamente
<a name="yield-optimization-bid-construction-auto-set"></a>

Os campos a seguir são sempre definidos MediaTailor usando valores da configuração do console e do contexto atual de disponibilidade. Se você incluí-los em seu modelo, seus valores serão substituídos:


| Campo | Fonte | 
| --- | --- | 
| id | Auto-generated: {sessionId}\_{availId} formato (por exemplo,abc123-def456\_78901). Útil para correlacionar solicitações de lances com registros de sessão. | 
| app.publisher.id | Seu PublisherId a partir da configuração do console. | 
| imp[0].video.minduration | Seu MinimumUnfilledDuration a partir da configuração do console. | 
| imp[0].video.maxduration | Calculado: segundos reais não preenchidos para esse benefício. | 
| imp[0].video.maxseq | Calculado:floor(unfilled\_duration / 6). | 
| imp[0].video.poddur | Calculado: segundos reais não preenchidos para esse benefício. | 
| ext.integrationType | Sempre definido como"EMT". | 

## Próximas etapas
<a name="yield-optimization-bid-construction-next-steps"></a>
+ Para obter a referência completa de campo a campo, consulte. [Referência de campo ORTB](yield-optimization-ortb-reference.md)
+ Para modelos de copiar e colar, consulte. [Exemplos de modelos do ](yield-optimization-examples.md)