

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à.

# Esempio 3: metadati contestuali
<a name="monetization-functions-examples-contextual-metadata"></a>

Questa sezione fornisce JSONata espressioni per modelli comuni quando si lavora con le risposte di inferenza `GetMetadata` elementale. Usali nel `Output` blocco della tua `AWS_SERVICE_REQUEST` funzione.

**Nota**  
`GetMetadata`restituisce un `items` array in cui ogni articolo rappresenta un'immagine analizzata con categorie di IAB tassonomia e valutazioni della sicurezza GARM del marchio. Quando la finestra temporale della richiesta si estende su più sequenze, la risposta include più elementi. Le espressioni nelle sezioni seguenti gestiscono questo problema aggregando tutti gli scatti.  
Per lo schema completo di `GetMetadata` risposta di Elemental Inference, consulta il riferimento all'API Elemental Inference.

## Crea la finestra temporale della query
<a name="monetization-functions-examples-contextual-metadata-timewindow"></a>

Usa la seguente espressione per il `Body` campo della tua `AWS_SERVICE_REQUEST` funzione:

```
{%'{"outputName": "my-contextual-output", "timeSpecification": {"ptsBased": {"startPts": ' & $string(($exists(inference.previousBreakEndPts) and inference.previousBreakEndPts > inference.pts - 30 * inference.timescale ? inference.previousBreakEndPts : inference.pts - 30 * inference.timescale)) & ', "endPts": ' & $string(inference.pts + 1) & ', "timescale": ' & $string(inference.timescale) & '}}, "parameters": {"contextualMetadata": {}}}' %}
```

Questa espressione seleziona la più recente di `inference.previousBreakEndPts` e un lookback di 30 secondi, assicurando che la finestra di interrogazione non superi mai i 30 secondi. Se non `inference.previousBreakEndPts` è disponibile (ad esempio, la prima interruzione dell'annuncio), per impostazione predefinita l'espressione è il lookback di 30 secondi.

**Nota**  
`my-contextual-output`Sostituiscila con il nome dell'output contestuale dei metadati del feed Elemental Inference.

## Estrai IAB ID di categoria
<a name="monetization-functions-examples-contextual-metadata-iab-ids"></a>

```
{%response.statusCode = 200 ? $join($distinct(response.body.items.metadata.contextualMetadata.iabTaxonomy.categories.uniqueId), ',') : ''%}
```

Risultato: `"641,645,324"` — ID univoci della tassonomia dei IAB contenuti, adatti per essere passati come parametro di interrogazione (ad esempio,`iab_cats=641,645,324`).

## Estratto IAB percorsi di categoria
<a name="monetization-functions-examples-contextual-metadata-iab-paths"></a>

```
{%response.statusCode = 200 ? $join($distinct(response.body.items.metadata.contextualMetadata.iabTaxonomy.categories.($join(path, ' > '))), '|') : ''%}
```

Risultato: `"Genres > Animation & Anime|Genres > Family/Children|Entertainment > Movies"` — percorsi tassonomici leggibili dall'uomo.

## Estratto contrassegnato FATTORIA categorie
<a name="monetization-functions-examples-contextual-metadata-garm-flagged"></a>

```
{%response.statusCode = 200 ? $join($distinct(response.body.items.metadata.contextualMetadata.garm.suitability.categories[flagged = true].category), ',') : ''%}
```

Risultato: `"ILLEGAL_DRUGS_TOBACCO_ALCOHOL"` — categorie da escludere dal targeting degli annunci o per segnalare problemi di sicurezza del marchio al server di decisione pubblicitaria.

## Determina il massimo FARE MALE livello di rischio
<a name="monetization-functions-examples-contextual-metadata-garm-risk"></a>

```
{%response.statusCode = 200 and $exists(response.body.items) ? ($names := ['NONE','LOW','MEDIUM','HIGH']; $flagged := response.body.items.metadata.contextualMetadata.garm.suitability.categories[flagged = true].risk; $scores := $map($flagged, function($r){ $r = 'HIGH' ? 3 : $r = 'MEDIUM' ? 2 : $r = 'LOW' ? 1 : 0 }); $count($scores) > 0 ? $names[$max($scores)] : 'NONE') : ''%}
```

Risultato: `"MEDIUM"` — il livello di rischio peggiore per tutte le foto e le categorie analizzate. GARM Restituisce una stringa vuota se la richiesta fallisce o manca il corpo della risposta, in modo che i dati mancanti non vengano segnalati come. `NONE`

## Verifica la sicurezza del marchio
<a name="monetization-functions-examples-contextual-metadata-brand-safe"></a>

```
{%response.statusCode = 200 and $exists(response.body.items) ? $string($not($exists(response.body.items.metadata.contextualMetadata.garm.suitability.categories[flagged = true]))) : ''%}
```

Risultato: `"false"` se una GARM categoria è contrassegnata, `"true"` se il contenuto è sicuro per il marchio. Restituisce una stringa vuota se la richiesta fallisce o manca il corpo della risposta.

**Importante**  
La `$exists(response.body.items)` guardia è obbligatoria. Una risposta può restituire il codice di stato 200 mentre `response.body` è`null`, ad esempio, quando il corpo supera i 20.000 caratteri o non è un JSON valido. Senza la protezione, l'espressione restituisce `"true"` e riporta il contenuto come sicuro per il marchio anche se le classificazioni non sono mai state ricevuteGARM.

## Segnale contestuale combinato
<a name="monetization-functions-examples-contextual-metadata-combined"></a>

```
{%response.statusCode = 200 ? $string({'categories': $distinct(response.body.items.metadata.contextualMetadata.iabTaxonomy.categories.($join(path, ' > '))), 'category_ids': $distinct(response.body.items.metadata.contextualMetadata.iabTaxonomy.categories.uniqueId), 'garm_flagged': $distinct(response.body.items.metadata.contextualMetadata.garm.suitability.categories[flagged = true].category)}) : ''%}
```

Risultato: una stringa JSON che combina tutti i segnali contestuali in un unico payload strutturato.

## Per-shot dettaglio
<a name="monetization-functions-examples-contextual-metadata-per-shot"></a>

```
{%response.statusCode = 200 ? $string(response.body.items.{'pts': pts, 'categories': metadata.contextualMetadata.iabTaxonomy.categories.($join(path, ' > ')), 'garm_flagged': metadata.contextualMetadata.garm.suitability.categories[flagged = true].category}) : ''%}
```

Risultato: una serie di oggetti per scatto che preservano il contenuto in base al quale PTS ha attivato le classificazioni. Da utilizzare quando la logica decisionale degli annunci richiede una granularità temporale.

## Suggerimenti e best practice
<a name="monetization-functions-examples-contextual-metadata-tips"></a>

Utilizza i seguenti suggerimenti per creare espressioni di output per le risposte di Elemental Inference.
+ Controllate sempre `response.statusCode` prima di processare il corpo. Se la chiamata fallisce, `response.body` è`null`.
+ `$distinct()`Da utilizzare per deduplicare le categorie in più scatti.
+ Elemental Inference restituisce più IAB categorie per scatto e una serie di categorie relative alla sicurezza del GARM marchio. Per i limiti attuali, consulta la documentazione di Elemental Inference.
+ Quando la finestra temporale si estende su più scatti, la risposta contiene più elementi nell'array. `items`
+ La dimensione massima della risposta è di 20.000 caratteri. Se ricevi risposte troncate, riduci la finestra temporale.
+ Utilizza le chiavi `temp.*` di output quando esegui il concatenamento con altre funzioni in a `SEQUENTIAL_EXECUTOR` e `player_params.*` quando passi i valori direttamente all'URL del server di decisione dell'annuncio.
+ Per l'elenco completo delle JSONata funzioni e degli operatori supportati, consulta[JSonata riferimento all'espressione per le funzioni](monetization-functions-jsonata.md).

Per la guida completa alla configurazione, compresi i prerequisiti e le politiche relative alle risorse, vedere[Integrazione con Elemental Inference](monetization-functions-elemental-inference-integration.md). Per il riferimento al tipo di funzione, vedere[AWS richiesta di servizio](monetization-functions-types-aws-service-request.md).