> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Esegui il template del tuo team

> **Note**
>
> **Guida pratica** · Presuppone che tu abbia completato la [guida rapida ai template](/docs/it/eleven-api/guides/cookbooks/templates).

Questa guida spiega come eseguire un template creato dal tuo team: copiarne il codice, passare ogni tipo di input, scegliere quali webhook ricevono il risultato, fissare una versione e leggere gli output.

## Prima di iniziare

* Il template è condiviso con il tuo workspace. Il suo autore lo imposta in **Workspace** nelle opzioni di condivisione del template; un template condiviso come **Solo io** può essere eseguito solo dal suo autore.
* Il tuo workspace ha un webhook iscritto alle esecuzioni dei template. [Prima di iniziare](/docs/it/eleven-api/guides/how-to/image-and-video/webhooks#before-you-begin) nella guida ai webhook di Immagini e Video spiega come configurarne uno.
* Il tuo workspace ha un piano Pro o superiore e la tua chiave API dispone dell'autorizzazione **Immagini e Video**.

## Copia il codice del template

Apri il template nell'app ElevenLabs e seleziona la relativa scheda **API**. In Flows, l'autore del template può aprire lo stesso codice dal pulsante **API** nella barra laterale del template.

La scheda genera gli snippet dagli input e output pubblicati del template. In **Scegli come ricevere il risultato**, seleziona **Webhook**, quindi seleziona **Python** o **TypeScript** sopra il codice. La scheda mostra uno snippet **Avvia un'esecuzione** e uno snippet **Gestisci il risultato**. Copia **Avvia un'esecuzione** nel punto in cui l'applicazione avvia le esecuzioni e **Gestisci il risultato** nel gestore del webhook. Ogni placeholder in **Avvia un'esecuzione** corrisponde a un input, mentre **Gestisci il risultato** legge ogni output tramite il suo id.

> **Note**
>
> La scheda mostra un avviso quando il template usa un modello non disponibile nell'API. Se nessuna versione pubblicata può
> essere eseguita tramite l'API, non mostra snippet; se non può essere eseguita solo l'ultima, gli snippet eseguono la
> versione più recente compatibile. In Flows, l'autore seleziona **Mostra nell'area di lavoro** nell'avviso per
> evidenziare quei nodi, imposta ciascuno su un [modello disponibile](/docs/it/eleven-api/guides/cookbooks/image-and-video#available-models) e pubblica di nuovo.

## Passa ogni input

A ogni input della versione che esegui deve essere assegnato un valore, identificato dall'id dell'input. La forma del valore dipende dal tipo di input:

| Tipo di input                  | Valore                                                                                 |
| ------------------------------ | -------------------------------------------------------------------------------------- |
| `string`                       | Il testo stesso.                                                                       |
| `number`, `integer`, `boolean` | Un valore JSON di quel tipo.                                                           |
| `image`, `video`, `audio`      | Un riferimento a una risorsa caricata, una generazione precedente o dati base64.       |
| `voice`                        | Un riferimento a una voce nel tuo workspace.                                           |
| `array`                        | Un elenco con un valore per elemento, ciascuno nel formato richiesto dal proprio tipo. |

Gli input di tipo `object` non possono ancora essere passati tramite l'API; la scheda API mostra un avviso a riguardo.

```python
run = client.flows.templates.runs.create(
    template_id="Yz4DETxRv4uXyIo5PnEy",
    version_id="Kqs4nRrpndEjQ54BhbwE",
    inputs={
        "headline": "Autumn collection, 20% off",
        "duration_secs": 8,
        "product_photo": TemplateInputReference_Asset(asset_id="Rk3pQm8vTzL1yWcN0bJd"),
        "previous_shot": TemplateInputReference_Generation(generation_id="JWr5N6X9ZTqf8jD2LmQb"),
        "phone_photo": TemplateInputReference_InlineBase64(
            content_base_64=photo,
            mime_type="image/jpeg",
        ),
        "narrator": TemplateInputReference_Voice(voice_id="JBFqnCBsd6RMkjVDRZzb"),
    },
    webhook=WebhookTarget_All(),
)
```

```typescript
const run = await client.flows.templates.runs.create("Yz4DETxRv4uXyIo5PnEy", {
  versionId: "Kqs4nRrpndEjQ54BhbwE",
  inputs: {
    headline: "Autumn collection, 20% off",
    duration_secs: 8,
    product_photo: { type: "asset", assetId: "Rk3pQm8vTzL1yWcN0bJd" },
    previous_shot: { type: "generation", generationId: "JWr5N6X9ZTqf8jD2LmQb" },
    phone_photo: {
      type: "inline_base64",
      contentBase64: photo.toString("base64"),
      mimeType: "image/jpeg",
    },
    narrator: { type: "voice", voiceId: "JBFqnCBsd6RMkjVDRZzb" },
  },
  webhook: { type: "all" },
});
```

Gli id degli input mantengono la grafia assegnata dal template in entrambi gli SDK; in TypeScript sono in camelCase solo i campi di un riferimento, come `assetId`.

I dati base64 sono limitati a 25 MB dopo la decodifica e non vengono conservati dopo l'esecuzione. Per passare lo stesso file a molte esecuzioni, caricalo una volta e passa il suo ID risorsa, come descritto in [Riferimenti e risorse](/docs/it/eleven-api/guides/how-to/image-and-video/references).

## Ottieni il risultato

Un [webhook](/docs/it/eleven-api/resources/webhooks) riceve l'esecuzione completata come evento `flows_template_run`. Gli snippet **Webhook** della scheda API passano `{"type": "all"}`, che invia l'esecuzione completata a ogni webhook del workspace iscritto alle esecuzioni dei template. Per inviarla a webhook specifici, elencane gli ID:

```python
webhook=WebhookTarget_Ids(ids=["Q8mVr2LpXcT4nB6yJdKw"])
```

```typescript
webhook: { type: "ids", ids: ["Q8mVr2LpXcT4nB6yJdKw"] }
```

Ogni webhook elencato deve essere iscritto alle esecuzioni dei template. Un'esecuzione che richiede un webhook quando nessuno è iscritto viene rifiutata, quindi un'esecuzione non termina mai senza un luogo a cui consegnare il risultato.

Per uno script una tantum o un batch job, `create_and_wait`, usato nella [guida rapida ai template](/docs/it/eleven-api/guides/cookbooks/templates), attende invece il completamento dell'esecuzione.

## Fissa una versione

Gli snippet passano il `version_id` della versione pubblicata più recente che l'API può eseguire. Mantienilo fisso: quando l'autore pubblica di nuovo, un'esecuzione con versione fissata continua a eseguire la versione che hai testato, mentre `latest` passa alla nuova, che può rinominare o aggiungere input.

Per passare a una nuova versione, riapri la scheda API, confronta i suoi input con quelli passati dal tuo codice e aggiorna `version_id`. Per verificarlo dal codice, invece, `flows.templates.get` restituisce le versioni pubblicate del template che l'API può eseguire, dalla più recente alla meno recente, ciascuna con i propri input e output.

## Leggi gli output

Gli `outputs` dell'esecuzione completata contengono una voce per ogni output del template, identificata dall'id dell'output. Ogni output ha il proprio `status`, quindi un output può non riuscire mentre gli altri vengono completati. Un output non riuscito contiene `failure_reason` e `error_message`. Un output multimediale completato contiene `content_url` e `content_mime_type`, mentre un output `string` completato contiene `content`.

```python
run = TemplateRunResponse.model_validate(event["data"])

for output_id, output in run.outputs.items():
    if output.status == "failed":
        print(output_id, "failed:", output.failure_reason, output.error_message)
    elif output.type == "image" or output.type == "video" or output.type == "audio":
        print(output_id, output.content_url, output.content_mime_type)
    elif output.type == "string":
        print(output_id, output.content)
```

```typescript
const run = event.data;

for (const [outputId, output] of Object.entries(run.outputs)) {
  if (output.status === "failed") {
    console.error(outputId, "failed:", output.failure_reason, output.error_message);
  } else if (output.type === "image" || output.type === "video" || output.type === "audio") {
    console.log(outputId, output.content_url, output.content_mime_type);
  } else if (output.type === "string") {
    console.log(outputId, output.content);
  }
}
```

`constructEvent` nell'SDK TypeScript restituisce il JSON dell'evento così come inviato, quindi i suoi campi sono in snake_case.

Consulta [Comportamento di consegna](/docs/it/eleven-api/guides/how-to/image-and-video/webhooks#delivery-behavior) per i tentativi e gli eventi duplicati.