Vai alla navigazione

Variabili dinamiche

Passa valori runtime per personalizzare il comportamento del tuo agente.

Le variabili dinamiche ti consentono di inserire valori runtime nei messaggi, nei prompt di sistema e negli strumenti del tuo agente. In questo modo puoi personalizzare ogni conversazione con dati specifici dell’utente senza creare più agenti.

Panoramica

Puoi integrare le variabili dinamiche in diversi aspetti del tuo agente:

  • Nei prompt di sistema per personalizzare comportamento e contesto
  • Nei primi messaggi per personalizzare i saluti
  • Nei parametri e header degli strumenti per passare dati specifici dell’utente

Ecco alcuni esempi in cui le variabili dinamiche sono utili:

  • Personalizzare i saluti con i nomi degli utenti
  • Includere i dettagli dell’account nelle risposte
  • Passare dati alle chiamate degli strumenti
  • Personalizzare il comportamento in base al livello di abbonamento
  • Accedere alle informazioni di sistema come l’ID della conversazione o la durata della chiamata

Le variabili dinamiche supportano tre tipi di valori:

String
Valori di testo
Number
Valori numerici
Boolean
Valori vero/falso

Variabili dinamiche di sistema

Il tuo agente ha accesso a variabili integrate system__* in ogni conversazione, senza configurazione runtime. Queste variabili hanno il prefisso dello spazio dei nomi riservato system__ e si aggiornano automaticamente durante la conversazione. Le variabili dinamiche personalizzate non possono usare il prefisso system__ né sovrascrivere le variabili di sistema.

Le variabili contrassegnate con † cambiano tra un turno e l’altro. Inserirle nel testo del prompt può impedire la cache del prompt; consulta le best practice per le alternative.

Identità dell’agente e della conversazione

VariabileTipoDescrizioneEsempio
system__agent_idstringIdentificatore univoco dell’agente che ha avviato la conversazione. Non cambia mai durante una conversazione."agent_8401kp8bt0jdf14rzzcv5veq94yg"
system__current_agent_idstringIdentificatore univoco dell’agente attualmente attivo. Si aggiorna quando la conversazione viene trasferita a un altro agente."agent_8401kp8bt0jdf14rzzcv5veq94yg"
system__conversation_idstringIdentificatore univoco della conversazione di ElevenLabs."conv_1801kp8qtb2begztn7zyf446v4jk"
system__user_idstring | nullID utente fornito dal client per monitoraggio e analisi. Non deve essere considerato attendibile per l’autenticazione."G6yhJW8MktQdhUquvXD1iKpPHql2"
system__initiator_idstring | nullIdentificatore corrispondente al metodo di autenticazione usato per avviare la conversazione."user_1801kp8qtb2begztn7zyf446v4jk"
system__channelstringCanale attraverso cui è stata avviata la conversazione."slack_integration"
system__is_text_onlybooleantrue quando la conversazione è in esecuzione in modalità solo testo (chat); false per le chiamate vocali.true
system__environmentstringAmbiente in cui è in esecuzione la conversazione, usato per risolvere le variabili d’ambiente."production"

Ora e fuso orario

VariabileTipoDescrizioneEsempio
system__timezonestring | nullFuso orario configurato (conversation_config.agent.prompt.timezone) o fuso orario IANA fornito dal chiamante. Se non impostato, il valore predefinito è UTC."America/New_York"
system__time †stringData e ora correnti nel fuso orario configurato (%A, %H:%M %d %B %Y). Rivalutate a ogni turno (cambiano una volta al minuto)."Friday, 12:33 12 December 2025"
system__time_utc †stringTimestamp UTC corrente in formato ISO 8601. Rivalutato a ogni turno."2025-12-12T12:33:45.123456+00:00"
system__time_datestringData corrente nel fuso orario configurato (o UTC se non ne è impostato uno) (%A, %d %B %Y). Cambia una volta al giorno."Friday, 12 December 2025"
system__time_hourintegerOra corrente (0–23) nel fuso orario configurato (o UTC se non ne è impostato uno). Cambia al massimo una volta all’ora.12
system__time_minute †integerMinuto corrente (0–59) nel fuso orario configurato (o UTC se non ne è impostato uno). Cambia una volta al minuto.33
system__time_second †integerSecondo corrente (0–59) nel fuso orario configurato (o UTC se non ne è impostato uno). Cambia a ogni turno.45

Telefonia e messaggistica

Queste variabili vengono popolate, quando applicabile, per i canali di telefonia e messaggistica:

VariabileTipoDescrizioneEsempio
system__caller_idstring | nullNumero di telefono del chiamante (voce/SMS/WhatsApp/Amazon Connect)."+14155552671"
system__called_numberstring | nullNumero di telefono di destinazione chiamato."+18005551234"
system__call_sidstring | nullSID della chiamata Twilio (solo chiamate Twilio)."CA3498076234a8bbf65c8f09fb8ad7ac1b"
system__call_idstring | nullCall-ID SIP (solo chiamate trunk SIP)."757f72cf-e80f-44f7-87d6-a961ffbf5b3d"

Stato della conversazione per turno

VariabileTipoDescrizioneEsempio
system__call_duration_secs †integerTempo trascorso della conversazione in secondi. Rivalutato a ogni turno.142
system__agent_turns †integerNumero totale di turni dell’agente nella conversazione finora. Incrementa a ogni turno.5
system__current_agent_turns †integerNumero di turni dell’agente corrente; viene reimpostato a 0 dopo un trasferimento dell’agente.3
system__current_subagent_turns †integerNumero di turni dell’agente nel nodo workflow corrente; viene reimpostato a 0 nella transizione del nodo.2
system__conversation_history †stringTrascrizione della conversazione serializzata in JSON fino al turno corrente ({"entries": [{"role": "user", "message": "..."}]}). Consulta il formato della cronologia della conversazione.'{"entries": [...]}'

Formato della cronologia della conversazione

La variabile system__conversation_history contiene un oggetto JSON con la seguente struttura:

{
"x-elevenlabs-history": true,
"entries": [
{ "role": "user", "message": "Hello" },
{ "role": "agent", "message": "Hi, how can I help?" },
{
"role": "agent",
"tool_requests": [{ "tool_name": "lookup_order", "params_as_json": { "order_id": "123" } }]
},
{
"role": "tool",
"tool_results": [{ "tool_name": "lookup_order", "result_value": "{\"status\": \"shipped\"}" }]
}
]
}

Ogni voce include un role ("user", "agent" o "tool") e uno dei seguenti elementi:

  • message: Il contenuto testuale del turno
  • tool_requests: Un array di chiamate degli strumenti effettuate dall’agente, con valori dei parametri risolti
  • tool_results: Un array di risposte degli strumenti

Se il risultato di uno strumento o un parametro contiene una cronologia della conversazione annidata, viene oscurata con un segnaposto (ad esempio [conversation_history (5 turns)]) per evitare un’espansione ricorsiva illimitata.

Questa variabile è utile per passare il contesto della conversazione agli strumenti (come webhook o LLM personalizzati) o per includere la cronologia della conversazione nei prompt dei sottoagenti durante i passaggi di consegne.

Variabili dinamiche segrete

Le variabili dinamiche segrete vengono popolate nello stesso modo delle normali variabili dinamiche, ma indicano a ElevenAgents che devono essere usate solo negli header delle variabili dinamiche e non devono mai essere inviate a un provider LLM come parte del prompt di sistema o del primo messaggio di un agente.

Usa variabili dinamiche segrete per token di autenticazione o ID privati che non devono essere inviati a un LLM. Per creare una variabile dinamica segreta, anteponi secret__ alla variabile dinamica.

I valori segreti vengono archiviati oscurati, quindi l’API delle conversazioni li restituisce come <REDACTED>. I webhook di trascrizione post-chiamata inviano i valori originali, quindi assicurati che il tuo endpoint webhook li gestisca come segreti. Non usare il prefisso secret__ per i valori che devi rileggere dall’API delle conversazioni. Passali come normali variabili dinamiche oppure passa un identificatore non sensibile e cerca il valore sensibile nel tuo sistema.

Aggiornare le variabili dinamiche dagli strumenti

Le chiamate degli strumenti possono creare o aggiornare variabili dinamiche se restituiscono un oggetto JSON valido. Per specificare cosa estrarre, imposta i path dell’oggetto usando la notazione con punti. Se il campo o il path non esiste, non viene aggiornato nulla.

Esempio di oggetto di risposta e notazione con punti:

  • Lo stato corrisponde al path: response.status
  • L’email del primo utente nell’array users corrisponde al path: response.users.0.email
JSON
{
"response": {
"status": 200,
"message": "Successfully found 5 users",
"users": [
"user_1": {
"user_name": "test_user_1",
"email": "test_user_1@email.com"
}
]
}
}

Per aggiornare una variabile dinamica con l’email del primo utente, imposta l’assegnazione come segue.

Parametri di query

Le assegnazioni vengono configurate in ogni strumento webhook; consulta le assegnazioni degli strumenti nel Riferimento API.

Guida

Prerequisiti:

1

Definisci le variabili dinamiche nei prompt

Aggiungi variabili usando le doppie parentesi graffe {{variable_name}} nei tuoi:

  • Prompt di sistema
  • Primi messaggi
  • Parametri degli strumenti

Variabili dinamiche nei messaggi

Variabili dinamiche nei messaggi

2

Definisci le variabili dinamiche negli strumenti

Puoi anche definire le variabili dinamiche nella configurazione dello strumento. Per creare una nuova variabile dinamica, imposta il tipo di valore su Variabile dinamica e fai clic sul pulsante +.

Impostazione dei segnaposto

Impostazione dei segnaposto

3

Imposta i segnaposto

Configura i valori predefiniti per i test senza passare variabili in fase di runtime.

Imposta valori predefiniti per ogni variabile dinamica nel dashboard dell’agente.

Impostazione dei segnaposto

4

Passa le variabili in fase di runtime

Quando avvii una conversazione, fornisci le variabili dinamiche nel tuo codice:

Assicurati di avere installato l’SDK più recente.

import os
import signal
from elevenlabs.client import ElevenLabs
from elevenlabs.conversational_ai.conversation import Conversation, ConversationInitiationData
from elevenlabs.conversational_ai.default_audio_interface import DefaultAudioInterface
agent_id = os.getenv("AGENT_ID")
api_key = os.getenv("ELEVENLABS_API_KEY")
elevenlabs = ElevenLabs(api_key=api_key)
dynamic_vars = {
"user_name": "Angelo",
}
config = ConversationInitiationData(
dynamic_variables=dynamic_vars
)
conversation = Conversation(
elevenlabs,
agent_id,
config=config,
# Assume auth is required when API_KEY is set.
requires_auth=bool(api_key),
# Use the default audio interface.
audio_interface=DefaultAudioInterface(),
# Callbacks that print the conversation to the console.
callback_agent_response=lambda response: print(f"Agent: {response}"),
callback_agent_response_correction=lambda original, corrected: print(f"Agent: {original} -> {corrected}"),
callback_user_transcript=lambda transcript: print(f"User: {transcript}"),
# Uncomment the below if you want to see latency measurements.
# callback_latency_measurement=lambda latency: print(f"Latency: {latency}ms"),
)
conversation.start_session()
signal.signal(signal.SIGINT, lambda sig, frame: conversation.end_session())

Integrazione della pagina pubblica talk-to

La pagina pubblica talk-to supporta le variabili dinamiche tramite parametri URL, consentendoti di personalizzare le conversazioni quando condividi i link degli agenti. È particolarmente utile per incorporare agenti personalizzati in siti web, email o campagne di marketing.

Metodi dei parametri URL

Esistono due metodi per passare le variabili dinamiche alla pagina pubblica talk-to:

Metodo 1: JSON codificato in Base64

Passa le variabili come oggetto JSON codificato in Base64 usando il parametro vars:

https://elevenlabs.io/app/talk-to?agent_id=agent_7101k5zvyjhmfg983brhmhkd98n6&vars=eyJ1c2VyX25hbWUiOiJKb2huIiwiYWNjb3VudF90eXBlIjoicHJlbWl1bSJ9

Il parametro vars contiene JSON codificato in Base64:

{ "user_name": "John", "account_type": "premium" }

Metodo 2: Parametri query singoli

Passa le variabili usando parametri query con prefisso var_:

https://elevenlabs.io/app/talk-to?agent_id=agent_7101k5zvyjhmfg983brhmhkd98n6&var_user_name=John&var_account_type=premium

Precedenza dei parametri

Quando entrambi i metodi vengono usati contemporaneamente, i singoli parametri var_ hanno la precedenza sulle variabili codificate in Base64 per evitare conflitti:

https://elevenlabs.io/app/talk-to?agent_id=agent_7101k5zvyjhmfg983brhmhkd98n6&vars=eyJ1c2VyX25hbWUiOiJKYW5lIn0=&var_user_name=John

In questo esempio, user_name sarà "John" (da var_user_name) anziché "Jane" (da vars codificato in Base64).

Esempi di implementazione

// Method 1: Base64-encoded JSON
function generateTalkToURL(agentId, variables) {
const baseURL = 'https://elevenlabs.io/app/talk-to';
const encodedVars = btoa(JSON.stringify(variables));
return `${baseURL}?agent_id=${agentId}&vars=${encodedVars}`;
}
// Method 2: Individual parameters
function generateTalkToURLWithParams(agentId, variables) {
const baseURL = 'https://elevenlabs.io/app/talk-to';
const params = new URLSearchParams({ agent_id: agentId });
Object.entries(variables).forEach(([key, value]) => {
params.append(`var_${key}`, encodeURIComponent(value));
});
return `${baseURL}?${params.toString()}`;
}
// Usage
const variables = {
user_name: "John Doe",
account_type: "premium",
session_id: "sess_123"
};
const urlMethod1 = generateTalkToURL("agent_7101k5zvyjhmfg983brhmhkd98n6", variables);
const urlMethod2 = generateTalkToURLWithParams("agent_7101k5zvyjhmfg983brhmhkd98n6", variables);

Best practice

Le variabili nel prompt di sistema, nei nodi del workflow e nelle procedure vengono risolte a ogni turno. Se un valore cambia tra un turno e l’altro, il prompt non può essere memorizzato nella cache, aumentando costi e latenza. {{system__time_utc}} e {{system__time_second}} cambiano a ogni turno; {{system__time}} e {{system__time_minute}} cambiano ogni minuto.

Per fornire all’agente la data e l’ora correnti, imposta un fuso orario con il pulsante del fuso orario nell’editor del prompt di sistema (conversation_config.agent.prompt.timezone) invece di inserire {{system__time}} o {{system__time_utc}} nel testo del prompt. Quando viene impostato un fuso orario, la piattaforma aggiunge la data e l’ora correnti al di fuori del prefisso del prompt memorizzato nella cache, in modo che il prompt di sistema resti nella cache tra i turni. Senza un fuso orario, l’agente non riceve la data e l’ora correnti.

Se il prompt richiede la data o l’ora in linea, combina {{system__time_date}}, {{system__time_hour}} e {{system__timezone}} (ad esempio, Today is {{system__time_date}}, hour {{system__time_hour}} ({{system__timezone}})). Questi valori cambiano al massimo una volta all’ora.

Se uno strumento richiede un valore contrassegnato con †, associalo al parametro o all’header dello strumento invece di inserirlo nel prompt. I parametri degli strumenti vengono risolti solo quando lo strumento viene chiamato, quindi non influiscono sulla cache del prompt. L’LLM vede già la conversazione, quindi {{system__conversation_history}} è raramente necessario nei prompt.

Se il prompt controlla contatori dei turni come {{system__agent_turns}}, valuta queste alternative. Usa first_message per saluti iniziali o informative statiche.

Per il comportamento della prima risposta, puoi formulare l’istruzione in base alla cronologia della conversazione (ad esempio, “On your first reply, when you have not yet greeted the caller…”). Questo si basa sul fatto che l’LLM segua l’istruzione, quindi provalo con il tuo modello e mantieni il contatore dei turni se i risultati sono meno affidabili.

Se il contatore decide solo quando diramare o inoltrare la conversazione, una condizione di espressione del bordo del workflow o un’espressione del passaggio If di una procedura strutturata (come system__agent_turns >= 5) può gestirlo al di fuori del prompt. Questo non copre i casi in cui l’LLM necessita del valore stesso.

Anteponi secret__ ai token di autenticazione e alle chiavi API affinché possano essere associati solo agli header degli strumenti e non vengano mai inviati all’LLM. Poiché i valori secret__ vengono oscurati come <REDACTED> nell’API delle conversazioni (i webhook di trascrizione post-chiamata ricevono comunque i valori originali), passa come normali variabili dinamiche i valori che devi rileggere dall’API delle conversazioni oppure passa un identificatore non sensibile e cerca il valore sensibile nel tuo sistema.

system__user_id viene fornito dal client per monitoraggio e analisi e non viene verificato da ElevenAgents. Verifica l’identità del chiamante tramite un webhook di avvio della conversazione, un token firmato in una variabile header secret__ o una chiamata a uno strumento di verifica prima di esporre i dati dell’account.

Imposta valori predefiniti in dynamic_variable_placeholders per ogni variabile personalizzata usata nei prompt, nei primi messaggi e negli strumenti. Le conversazioni di anteprima nel dashboard e i test di simulazione non eseguono i webhook di avvio della conversazione, quindi durante i test le variabili non impostate rimangono come segnaposto letterali {{variable_name}}.

Risoluzione dei problemi

Verifica che:

  • I nomi delle variabili corrispondano esattamente (con distinzione tra maiuscole e minuscole)
  • Le variabili usino le doppie parentesi graffe: {{variable_name}}
  • Le variabili siano incluse nel tuo oggetto dynamic_variables

Assicurati che:

  • I valori delle variabili corrispondano al tipo previsto
  • I valori siano solo stringhe, numeri o valori booleani