Passer à la navigation

Variables dynamiques

Transmettez des valeurs d’exécution pour personnaliser le comportement de votre agent.

Les variables dynamiques vous permettent d’injecter des valeurs d’exécution dans les messages, les prompts système et les outils de votre agent. Vous pouvez ainsi personnaliser chaque conversation avec des données propres à l’utilisateur, sans concevoir plusieurs agents.

Vue d’ensemble

Les variables dynamiques peuvent être intégrées à plusieurs aspects de votre agent :

  • Prompts système pour personnaliser le comportement et le contexte
  • Premiers messages pour personnaliser les salutations
  • Paramètres et en-têtes des outils pour transmettre des données propres à l’utilisateur

Voici quelques exemples d’utilisation des variables dynamiques :

  • Personnaliser les salutations avec les noms des utilisateurs
  • Inclure les détails du compte dans les réponses
  • Transmettre des données lors d’appels d’outils
  • Personnaliser le comportement selon les niveaux d’abonnement
  • Accéder aux informations système telles que l’ID de conversation ou la durée de l’appel

Les variables dynamiques prennent en charge trois types de valeurs :

Chaîne
Valeurs textuelles
Nombre
Valeurs numériques
Booléen
Valeurs vrai/faux

Variables dynamiques système

Votre agent a accès, dans chaque conversation et sans configuration à l’exécution, aux variables intégrées system__*. Ces variables sont préfixées par l’espace de noms réservé system__ et se mettent automatiquement à jour à mesure que la conversation progresse. Les variables dynamiques personnalisées ne peuvent pas utiliser le préfixe system__ ni remplacer les variables système.

Les variables marquées d’un † changent d’un tour à l’autre. Les placer dans le texte d’un prompt peut empêcher la mise en cache du prompt. Consultez les bonnes pratiques pour découvrir des alternatives.

Identité de l’agent et de la conversation

VariableTypeDescriptionExemple
system__agent_idstringIdentifiant unique de l’agent qui a démarré la conversation. Ne change jamais au cours d’une conversation."agent_8401kp8bt0jdf14rzzcv5veq94yg"
system__current_agent_idstringIdentifiant unique de l’agent actuellement actif. Est mis à jour lorsque la conversation est transférée à un autre agent."agent_8401kp8bt0jdf14rzzcv5veq94yg"
system__conversation_idstringIdentifiant unique de conversation ElevenLabs."conv_1801kp8qtb2begztn7zyf446v4jk"
system__user_idstring | nullID utilisateur fourni par le client à des fins de suivi et d’analyse. Ne doit pas être considéré comme fiable pour l’authentification."G6yhJW8MktQdhUquvXD1iKpPHql2"
system__initiator_idstring | nullIdentifiant correspondant à la méthode d’authentification utilisée pour démarrer la conversation."user_1801kp8qtb2begztn7zyf446v4jk"
system__channelstringCanal par lequel la conversation a été démarrée."slack_integration"
system__is_text_onlybooleantrue lorsque la conversation se déroule en mode texte uniquement (chat) ; false pour les appels téléphoniques.true
system__environmentstringEnvironnement dans lequel se déroule la conversation, utilisé pour résoudre les variables d’environnement."production"

Heure et fuseau horaire

VariableTypeDescriptionExemple
system__timezonestring | nullFuseau horaire configuré (conversation_config.agent.prompt.timezone) ou fuseau horaire IANA fourni par l’appelant. UTC par défaut s’il n’est pas défini."America/New_York"
system__time †stringDate et heure actuelles dans le fuseau horaire configuré (%A, %H:%M %d %B %Y). Réévaluées à chaque tour (changent une fois par minute)."Friday, 12:33 12 December 2025"
system__time_utc †stringHorodatage UTC actuel au format ISO 8601. Réévalué à chaque tour."2025-12-12T12:33:45.123456+00:00"
system__time_datestringDate actuelle dans le fuseau horaire configuré (ou UTC si aucun n’est défini) (%A, %d %B %Y). Change une fois par jour."Friday, 12 December 2025"
system__time_hourintegerHeure actuelle (0–23) dans le fuseau horaire configuré (ou UTC si aucun n’est défini). Change au plus une fois par heure.12
system__time_minute †integerMinute actuelle (0–59) dans le fuseau horaire configuré (ou UTC si aucun n’est défini). Change une fois par minute.33
system__time_second †integerSeconde actuelle (0–59) dans le fuseau horaire configuré (ou UTC si aucun n’est défini). Change à chaque tour.45

Téléphonie et messagerie

Ces variables sont renseignées lorsqu’elles s’appliquent aux canaux de téléphonie et de messagerie :

VariableTypeDescriptionExemple
system__caller_idstring | nullNuméro de téléphone de l’appelant (voix/SMS/WhatsApp/Amazon Connect)."+14155552671"
system__called_numberstring | nullNuméro de téléphone appelé."+18005551234"
system__call_sidstring | nullSID d’appel Twilio (appels Twilio uniquement)."CA3498076234a8bbf65c8f09fb8ad7ac1b"
system__call_idstring | nullCall-ID SIP (appels via trunk SIP uniquement)."757f72cf-e80f-44f7-87d6-a961ffbf5b3d"

État de la conversation à chaque tour

VariableTypeDescriptionExemple
system__call_duration_secs †integerTemps écoulé de la conversation en secondes. Réévalué à chaque tour.142
system__agent_turns †integerNombre total de tours de l’agent dans la conversation jusqu’à présent. Augmente à chaque tour.5
system__current_agent_turns †integerNombre de tours de l’agent actuel ; repasse à 0 après un transfert d’agent.3
system__current_subagent_turns †integerNombre de tours de l’agent dans le nœud de workflow actuel ; repasse à 0 lors d’une transition de nœud.2
system__conversation_history †stringTranscription de la conversation sérialisée au format JSON jusqu’au tour actuel ({"entries": [{"role": "user", "message": "..."}]}). Consultez le format de l’historique de conversation.'{"entries": [...]}'

Format de l’historique de conversation

La variable system__conversation_history contient un objet JSON ayant la structure suivante :

{
"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\"}" }]
}
]
}

Chaque entrée comprend un role ("user", "agent" ou "tool") et l’un des éléments suivants :

  • message : le contenu textuel du tour
  • tool_requests : un tableau d’appels d’outils effectués par l’agent, avec les valeurs de paramètres résolues
  • tool_results : un tableau de réponses d’outils

Si le résultat d’un outil ou un paramètre contient un historique de conversation imbriqué, celui-ci est remplacé par un espace réservé (tel que [conversation_history (5 turns)]) afin d’éviter une expansion récursive illimitée.

Cette variable est utile pour transmettre le contexte de conversation à des outils, tels que des webhooks ou des LLM personnalisés, ou pour inclure l’historique de conversation dans les prompts de sous-agents lors des transferts.

Variables dynamiques secrètes

Les variables dynamiques secrètes sont renseignées de la même manière que les variables dynamiques normales, mais indiquent à ElevenAgents qu’elles doivent être utilisées uniquement dans les en-têtes de variables dynamiques et ne jamais être envoyées à un fournisseur de LLM dans le prompt système ou le premier message d’un agent.

Utilisez des variables dynamiques secrètes pour les jetons d’authentification ou les ID privés qui ne doivent pas être envoyés à un LLM. Pour créer une variable dynamique secrète, préfixez la variable dynamique avec secret__.

Les valeurs secrètes sont stockées sous forme masquée ; l’API des conversations les renvoie donc comme <REDACTED>. Les webhooks de transcription après appel transmettent les valeurs d’origine. Assurez-vous donc que votre point de terminaison webhook les traite comme des secrets. N’utilisez pas le préfixe secret__ pour les valeurs que vous devez récupérer depuis l’ API des conversations. Transmettez-les comme des variables dynamiques ordinaires, ou transmettez un identifiant non sensible et recherchez la valeur sensible dans votre propre système.

Mettre à jour des variables dynamiques à partir d’outils

Les appels d’outils peuvent créer ou mettre à jour des variables dynamiques s’ils renvoient un objet JSON valide. Pour définir ce qui doit être extrait, définissez les chemins d’objet à l’aide de la notation par points. Si le champ ou le chemin n’existe pas, aucune mise à jour n’est effectuée.

Exemple d’objet de réponse et de notation par points :

  • Le statut correspond au chemin : response.status
  • L’email du premier utilisateur dans le tableau users correspond au chemin : 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"
}
]
}
}

Pour définir une variable dynamique sur l’email du premier utilisateur, configurez l’affectation comme suit.

Paramètres de requête

Les affectations sont configurées sur chaque outil webhook. Consultez les affectations d’outils dans le Guide de l’API.

Guide

Prérequis :

1

Définir des variables dynamiques dans les prompts

Ajoutez des variables à l’aide d’accolades doubles {{variable_name}} dans vos :

  • Prompts système
  • Premiers messages
  • Paramètres d’outils

Variables dynamiques dans les messages

Variables dynamiques dans les messages

2

Définir des variables dynamiques dans les outils

Vous pouvez également définir des variables dynamiques dans la configuration de l’outil. Pour créer une variable dynamique, définissez le type de valeur sur Variable dynamique et cliquez sur le bouton +.

Définir des espaces réservés

Définir des espaces réservés

3

Définir des espaces réservés

Configurez des valeurs par défaut pour effectuer des tests sans transmettre de variables à l’exécution.

Définissez des valeurs par défaut pour chaque variable dynamique dans le Dashboard de l’agent.

Définir des espaces réservés

4

Transmettre des variables à l'exécution

Lorsque vous démarrez une conversation, fournissez les variables dynamiques dans votre code :

Vérifiez que vous avez installé la dernière version du SDK.

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())

Intégration à la page publique de conversation

La page publique de conversation prend en charge les variables dynamiques via des paramètres URL, ce qui vous permet de personnaliser les conversations lorsque vous partagez des liens d’agent. Cette fonctionnalité est particulièrement utile pour intégrer des agents personnalisés dans des sites web, des emails ou des campagnes marketing.

Méthodes de paramètres URL

Il existe deux méthodes pour transmettre des variables dynamiques à la page publique de conversation :

Méthode 1 : JSON encodé en Base64

Transmettez les variables sous forme d’objet JSON encodé en base64 à l’aide du paramètre vars :

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

Le paramètre vars contient du JSON encodé en base64 :

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

Méthode 2 : paramètres de requête individuels

Transmettez les variables à l’aide de paramètres de requête préfixés par var_ :

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

Priorité des paramètres

Lorsque les deux méthodes sont utilisées simultanément, les paramètres var_ individuels sont prioritaires sur les variables encodées en base64 afin d’éviter les conflits :

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

Dans cet exemple, user_name aura la valeur "John" (provenant de var_user_name) au lieu de "Jane" (provenant de vars encodé en base64).

Exemples d’implémentation

// 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);

Bonnes pratiques

Les variables du prompt système, des nœuds de workflow et des procédures sont résolues à chaque tour. Si une valeur change entre deux tours, le prompt ne peut pas être mis en cache, ce qui augmente le coût et la latence. {{system__time_utc}} et {{system__time_second}} changent à chaque tour ; {{system__time}} et {{system__time_minute}} changent chaque minute.

Pour fournir à l’agent la date et l’heure actuelles, définissez un fuseau horaire à l’aide du bouton de fuseau horaire dans l’éditeur de prompt système (conversation_config.agent.prompt.timezone), au lieu de placer {{system__time}} ou {{system__time_utc}} dans le texte du prompt. Lorsqu’un fuseau horaire est défini, la plateforme ajoute la date et l’heure actuelles en dehors du préfixe du prompt mis en cache, afin que votre prompt système reste mis en cache d’un tour à l’autre. Sans fuseau horaire, l’agent ne reçoit pas la date et l’heure actuelles.

Si votre prompt nécessite la date ou l’heure en ligne, combinez {{system__time_date}}, {{system__time_hour}} et {{system__timezone}} (par exemple, Nous sommes le {{system__time_date}}, il est {{system__time_hour}} h ({{system__timezone}})). Ces valeurs changent au plus une fois par heure.

Si un outil a besoin d’une valeur marquée d’un †, liez-la au paramètre ou à l’en-tête de l’outil au lieu de la placer dans le prompt. Les paramètres d’outils ne sont résolus que lorsque l’outil est appelé ; ils n’affectent donc pas la mise en cache du prompt. Le LLM a déjà accès à la conversation ; {{system__conversation_history}} est donc rarement nécessaire dans les prompts.

Si votre prompt vérifie des compteurs de tours tels que {{system__agent_turns}}, envisagez les alternatives suivantes. Utilisez first_message pour les salutations ou les mentions d’information statiques d’ouverture.

Pour le comportement lors de la première réponse, vous pouvez formuler l’instruction autour de l’historique de conversation (par exemple, « Lors de votre première réponse, lorsque vous n’avez pas encore salué l’appelant… »). Cette approche repose sur le respect de l’instruction par le LLM. Testez-la donc avec votre modèle et conservez le compteur de tours si les résultats sont moins fiables.

Si le compteur détermine seulement le moment d’une bifurcation ou d’une escalade, une condition d’expression de branche de workflow ou une expression d’étape If d’une procédure structurée (telle que system__agent_turns >= 5) peut le gérer en dehors du prompt. Cela ne couvre pas les cas où le LLM a besoin de la valeur elle-même.

Préfixez les jetons d’authentification et les clés API avec secret__ afin qu’ils ne puissent être liés qu’aux en-têtes d’outils et ne soient jamais envoyés au LLM. Comme les valeurs secret__ sont masquées sous la forme <REDACTED> dans l’API des conversations (les webhooks de transcription après appel reçoivent toujours les valeurs d’origine), transmettez les valeurs que vous devez récupérer depuis l’API des conversations comme variables dynamiques ordinaires, ou transmettez un identifiant non sensible et recherchez la valeur sensible dans votre propre système.

system__user_id est fourni par le client à des fins de suivi et d’analyse, et n’est pas vérifié par ElevenAgents. Vérifiez l’identité de l’appelant via un webhook de démarrage de conversation, un jeton signé dans une variable d’en-tête secret__ ou un appel d’outil de vérification avant d’exposer les données du compte.

Définissez des valeurs par défaut dans dynamic_variable_placeholders pour chaque variable personnalisée utilisée dans vos prompts, vos premiers messages et vos outils. Les aperçus de conversations dans le Dashboard et les tests de simulation n’exécutent pas les webhooks de démarrage de conversation. Les variables non définies restent donc des espaces réservés littéraux {{variable_name}} lors des tests.

Résolution des problèmes

Vérifiez que :

  • Les noms des variables correspondent exactement, en respectant la casse
  • Les variables utilisent des doubles accolades : {{variable_name}}
  • Les variables sont incluses dans votre objet dynamic_variables

Assurez-vous que :

  • Les valeurs des variables correspondent au type attendu
  • Les valeurs sont uniquement des chaînes de caractères, des nombres ou des valeurs booléennes