

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Costruzione e modellazione delle offerte
<a name="yield-optimization-bid-construction"></a>

Questa pagina spiega come MediaTailor creare una richiesta di offerta OpenRTB dal tuo modello, come funziona l'interpolazione delle variabili e quali valori vengono impostati automaticamente. MediaTailor 

## Campi di configurazione
<a name="yield-optimization-bid-construction-config-fields"></a>

Quando abiliti l'ottimizzazione del rendimento su una configurazione di riproduzione, fornisci quattro campi:


| Campo | Description | Richiesto | 
| --- | --- | --- | 
| PublisherId | Il tuo ID editore APS (ottenuto dalla registrazione APS). Inserito in ogni app.publisher.id richiesta di offerta. | Sì | 
| Region | Regione APS:AMERICAS,EUROPE, oASIA\_PACIFIC. Determina l'endpoint APS. | Sì | 
| MinimumUnfilledDuration | Sono necessari almeno secondi vuoti prima che venga MediaTailor attivata una richiesta di offerta. Utilizzato anche come. imp.video.minduration | Sì | 
| OpenRtbTemplate | Il tuo modello JSON ORTB (max 100 KB). Definisce il corpo della richiesta di offerta. | Sì | 

## Come viene costruita la richiesta di offerta
<a name="yield-optimization-bid-construction-how"></a>

Quando un'interruzione pubblicitaria ha una durata residua non completata, MediaTailor costruisce la richiesta di offerta in questi passaggi:

1. **Interpolazione dei modelli. ** MediaTailor risolve`{{session.*}}`,, `{{player_params.*}}` `{{avail.*}}``{{request.*}}`, e i `{{scte.*}}` segnaposto nel modello `{{asset.*}}` utilizzando la sintassi standard di Mustache per i modelli. [https://mustache.github.io/mustache.5.html](https://mustache.github.io/mustache.5.html) Mustache utilizza doppie parentesi graffe`{{ }}`, che differiscono dalle parentesi quadre utilizzate nella sostituzione delle variabili URL ADS. `[ ]`

1. **Analisi JSON. ** Il modello interpolato viene analizzato come JSON.

1. **Estrazione e convalida dei campi. ** MediaTailorestrae i campi obbligatori e genera un messaggio `BidRequestConfigurationError` se mancano o sono vuoti.

1. **Iniezione di campo codificata. ** MediaTailor sovrascrive o inserisce i campi che gestisce automaticamente utilizzando i valori della configurazione della console e del contesto di disponibilità corrente (ad esempio, `app.publisher.id` dall'ID editore configurato, dalla durata non compilata calcolata). `imp.video.maxduration`

1. **Serializzazione e invio. ** La finale BidRequest viene serializzata in JSON e inviata come HTTP POST all'endpoint APS.

**Importante**  
Se un campo obbligatorio è mancante o vuoto dopo l'interpolazione, la richiesta di offerta ha esito negativo `BidRequestConfigurationError` e nessuna richiesta viene inviata ad APS. L'errore viene registrato ma la riproduzione continua normalmente (fail-open).

## Modello predefinito della console
<a name="yield-optimization-bid-construction-default-template"></a>

Quando abiliti l'ottimizzazione del rendimento nella MediaTailor console, viene fornito il seguente modello precompilato come punto di partenza. Dovresti personalizzare i valori per la tua applicazione:

```
{
  "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 spiegazione: **


| Campo | Categoria | Cosa fare | 
| --- | --- | --- | 
| imp[0].bidfloor | Facoltativo (impostazione predefinita: 1.0) | Imposta il tuo CPM minimo. L'impostazione predefinita della console è $5. Inferiore per una migliore percentuale di riempimento durante i test. | 
| app.id | APS consigliato | L'identificatore della tua app. Il giocatore deve inviareplayerParams.app\_id. | 
| app.name | APS consigliato | Il nome della tua app. Il giocatore deve inviareplayerParams.app\_name. | 
| app.bundle | È obbligatorio  | L'ID del tuo pacchetto di app. Il giocatore deve inviare playerParams.bundle o sostituire con un valore statico (consigliato). | 
| app.storeurl | È obbligatorio  | L'URL del tuo app store. Il giocatore deve inviare playerParams.storeurl o sostituire con un valore statico (consigliato). | 
| app.domain | APS consigliato | Il dominio della tua app. Il giocatore deve inviareplayerParams.domain. | 
| app.content.genre | APS consigliato | Compilato a partire dai metadati delle risorse di origine dei contenuti. | 
| app.content.contentrating | APS consigliato | Compilato a partire dai metadati delle risorse di origine dei contenuti. | 
| device.dnt | APS consigliato | Bandiera Do Not Track. Il giocatore deve inviareplayerParams.dnt. | 
| device.ua | È obbligatorio  | Compilato automaticamente dall' User-Agent intestazione dello spettatore fino a. {{session.user\_agent}} Non è necessario alcun parametro del giocatore. | 
| device.ip | È obbligatorio  | Compilato automaticamente dall'IP del visualizzatore tramite{{session.client\_ip}}. Non è necessario alcun parametro del giocatore. | 
| device.ifa | APS consigliato | ID pubblicitario. Il giocatore deve inviareplayerParams.device\_ifa. | 
| device.w / device.h | APS consigliato | Dimensioni dello schermo. Il giocatore deve inviareplayerParams.device\_width/device\_height. | 
| device.language | APS consigliato | Lingua del dispositivo. Il giocatore deve inviareplayerParams.language. | 
| device.model | APS consigliato | Modello del dispositivo. Il giocatore deve inviareplayerParams.model. | 
| device.os / device.osv | APS consigliato | Sistema operativo e versione. Il giocatore deve inviareplayerParams.os/osv. | 
| device.devicetype | Sostituibile (impostazione predefinita: 3) | Tipo di dispositivo IAB. Il giocatore deve inviareplayerParams.devicetype. Il valore predefinito è 3 (CTV) se vuoto. | 
| device.make | APS consigliato | Produttore del dispositivo. Il giocatore deve inviareplayerParams.make. | 
| user.consent | Consigliato APS (UE) | Stringa di consenso GDPR (TCF). Il giocatore deve inviareplayerParams.consent. | 
| regs.gdpr | Consigliato APS (UE) | Bandiera GDPR (0 o 1). Il giocatore deve inviareplayerParams.gdpr. | 
| regs.us\_privacy | Consigliato APS (USA) | Stringa CCPA (ad esempio,1YNY). Il giocatore deve inviareplayerParams.us\_privacy. | 
| regs.gpp | APS consigliato | Stringa di consenso di Global Privacy Platform. Il giocatore deve inviareplayerParams.gpp\_consent. Preferito rispetto us\_privacy ai tassi di riempimento migliori. | 
| regs.gpp\_sid | Consigliato APS | ID di sezione GPP (ad esempio, [7] per i cittadini statunitensi). Il giocatore deve inviareplayerParams.gpp\_sid. | 

**Importante**  
L'impostazione predefinita della console utilizza `{{player_params.*}}` campi obbligatori come `app.bundle` e`app.storeurl`. Se il giocatore non invia questi parametri, la richiesta di offerta non andrà a buon fine`BidRequestConfigurationError`. Per i campi uguali per ogni sessione (in genere`app.bundle`,`app.storeurl`, e altri identificatori a livello di app)`app.name`, valuta la possibilità di sostituire il segnaposto con un valore statico (ad esempio,). `"bundle": "com.yourcompany.app"` Non inserire l'hardcode nei campi che variano a seconda del visualizzatore, ad esempio,,, le `device.ua` stringhe di consenso GDPR e GPP o i campi dei registri o degli oggetti utente. `device.ip` `device.ifa` Questi devono provenire da o. `{{session.*}}` `{{player_params.*}}`

**Nota**  
L'impostazione predefinita della console non include `video.mimes` o `video.protocols` nel modello. MediaTailor utilizza valori di riserva codificati (`["video/mp4"]`per MIME, `[1,2,3,4,5,6,7,8]` per protocolli) quando non vengono forniti. Puoi aggiungerli al tuo modello se desideri limitare i formati supportati.

## Interpolazione dei modelli (Moustache templating)
<a name="yield-optimization-bid-construction-interpolation"></a>

Il modello ORTB utilizza la sintassi dei modelli [ Mustache per la sostituzione dinamica dei valori. ](https://mustache.github.io/mustache.5.html) I segnaposto `{{ }}` utilizzano doppie parentesi graffe.

### Variabili di modello disponibili
<a name="yield-optimization-bid-construction-variables"></a>

Il modello ORTB può utilizzare le stesse variabili dinamiche disponibili nei modelli di URL ADS. Queste includono variabili di sessione (ad esempio,`{{session.client_ip}}`)`{{session.user_agent}}`, parametri del giocatore (`{{player_params.*}}`), metadati delle risorse (`{{asset.*}}`), avail context () e dati del segnale SCTE (`{{avail.*}}`). `{{scte.*}}`

Per l'elenco completo delle variabili disponibili e le relative descrizioni, consulta. [MediaTailor variabili pubblicitarie dinamiche per richieste ADS](variables.md) Per informazioni sui valori dei parametri del MediaTailor URL-decodes giocatore prima di sostituirli nel modello, consulta [Comportamento di codifica e decodifica](#yield-optimization-bid-construction-encoding) più avanti questa pagina.

Le variabili più comunemente usate nei template ORTB sono:
+ `{{session.user_agent}}`: User-Agent intestazione del visualizzatore (da usare per`device.ua`).
+ `{{session.client_ip}}`: indirizzo IP del visualizzatore (da utilizzare per`device.ip`).
+ `{{player_params.*}}`: valori personalizzati passati dal giocatore durante l'inizializzazione della sessione.
+ `{{asset.*}}`: metadati del contenuto dall'origine (ad esempio,`asset.genre`). `asset.content_rating`

**avvertimento**  
Racchiudi sempre i segnaposto tra virgolette, anche per campi numerici come o. `dnt` `devicetype` Se un segnaposto si risolve in una stringa vuota e non viene citato (ad esempio`"dnt": {{player_params.dnt}}`), il risultato è un JSON non valido e l'intera richiesta di offerta ha esito negativo con un. `BidRequestConfigurationError` Usare invece `"dnt": "{{player_params.dnt}}"`. APS accetta i campi numerici passati come stringhe. Questo comportamento è stato progettato perché la quotazione automatica delle sostituzioni di stringhe vuote entrerebbe in conflitto con la modalità RAW-JSON utilizzata altrove nell'interpolatore. Il vincolo è documentato anziché applicato. Vedi anche come MediaTailor gestisce [Comportamento di codifica e decodifica](#yield-optimization-bid-construction-encoding) i valori dei parametri del giocatore prima dell'interpolazione.

### Come passare i parametri del giocatore
<a name="yield-optimization-bid-construction-pass-params"></a>

Ci sono due modi per passare i parametri del giocatore durante l'inizializzazione della sessione.

**Metodo 1: richiesta POST con corpo JSON (consigliato) **

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

Questo metodo è preferito perché evita URL-encoding problemi con valori complessi come le stringhe dell'agente utente.

**Metodo 2: parametri di interrogazione degli URL **

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

Con questo metodo, i valori devono essere URL-encoded. MediaTailor URL-decodes prima dell'interpolazione.

### Comportamento di codifica e decodifica
<a name="yield-optimization-bid-construction-encoding"></a>

MediaTailor esegue ** un livello di decodifica degli URL ** sui valori dei parametri del giocatore prima di interpolarli nel modello. Ciò si applica indipendentemente da come vengono passati i parametri (parametri del corpo POST o dei parametri di interrogazione dell'URL).

**Esempi di valori decodificati: **


| Valore inviato | Valore dopo la decodifica (utilizzato nel modello) | 
| --- | --- | 
| 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) | 

**Punti chiave: **
+ MediaTailor decodifica su ** un solo ** livello. Double-encoded i valori (ad esempio,`%2520`) verranno decodificati in uno spazio`%20`, non in uno spazio.
+ **Vengono decodificati anche ** i valori del corpo POST. Se il corpo del POST contiene URL-encoded valori, questi verranno decodificati prima dell'interpolazione.
+ **I valori di testo normale ** (senza codifica) vengono trasmessi invariati.
+ Dopo la decodifica e l'interpolazione, l'intero modello viene analizzato come JSON. I caratteri speciali nei valori interpolati (come virgolette senza escape o barre rovesciate) possono interrompere l'analisi JSON.

**Suggerimento**  
Se il lettore invia valori che sono già in testo normale (non), funzionano così come sono. URL-encoded Devi solo essere consapevole della decodifica dei URL-encodes valori da parte del lettore prima di inviarli.

### Cosa succede quando manca una variabile
<a name="yield-optimization-bid-construction-missing-variable"></a>

Se il giocatore non invia un parametro a cui si fa riferimento nel modello (ad esempio, `{{player_params.app_name}}` ma non `app_name` nei parametri del player), il segnaposto si trasforma in una stringa vuota. ** ** `""`

**Impatto: ** se la stringa vuota si trova in un campo obbligatorio (ad esempio`app.bundle`), la richiesta di offerta non va a buon fine. `BidRequestConfigurationError` Se si trova in un campo opzionale, APS riceve un valore vuoto che può causare una risposta di mancata offerta (HTTP 204).

## Cosa viene MediaTailor impostato automaticamente
<a name="yield-optimization-bid-construction-auto-set"></a>

I seguenti campi vengono sempre impostati MediaTailor utilizzando i valori della configurazione della console e del contesto di disponibilità corrente. Se li includi nel modello, i tuoi valori vengono sovrascritti:


| Campo | Origine | 
| --- | --- | 
| id | Auto-generated: {sessionId}\_{availId} formato (ad esempio,abc123-def456\_78901). Utile per correlare le richieste di offerta con i registri delle sessioni. | 
| app.publisher.id | La tua configurazione viene effettuata PublisherId dalla console. | 
| imp[0].video.minduration | La tua configurazione viene MinimumUnfilledDuration dalla console. | 
| imp[0].video.maxduration | Calcolato: secondi effettivi non occupati per questo risultato. | 
| imp[0].video.maxseq | Calcolato:. floor(unfilled\_duration / 6) | 
| imp[0].video.poddur | Calcolato: secondi vuoti effettivi per questo risultato. | 
| ext.integrationType | Sempre impostato su. "EMT" | 

## Fasi successive
<a name="yield-optimization-bid-construction-next-steps"></a>
+ Per il riferimento completo campo per campo, vedere. [Riferimento al campo ORTB](yield-optimization-ortb-reference.md)
+ Per i modelli copia-incolla, consulta. [Modelli di esempio](yield-optimization-examples.md)