Ir para a navegação

Variáveis dinâmicas

Transmita valores de tempo de execução para personalizar o comportamento do seu agente.

As variáveis dinâmicas permitem inserir valores de tempo de execução nas mensagens, nos prompts de sistema e nas ferramentas do seu agente. Isso permite personalizar cada conversa com dados específicos do usuário sem criar vários agentes.

Visão geral

As variáveis dinâmicas podem ser integradas a vários aspectos do seu agente:

  • Prompts de sistema para personalizar o comportamento e o contexto
  • Primeiras mensagens para personalizar cumprimentos
  • Parâmetros e cabeçalhos de ferramentas para transmitir dados específicos do usuário

Veja alguns exemplos em que as variáveis dinâmicas são úteis:

  • Personalizar cumprimentos com nomes de usuários
  • Incluir detalhes da conta nas respostas
  • Transmitir dados para chamadas de ferramentas
  • Personalizar o comportamento com base nos níveis de assinatura
  • Acessar informações do sistema como o ID da conversa ou a duração da chamada

As variáveis dinâmicas aceitam três tipos de valor:

String
Valores de texto
Number
Valores numéricos
Boolean
Valores verdadeiro/falso

Variáveis dinâmicas do sistema

Seu agente tem acesso a variáveis integradas system__* em todas as conversas, sem configuração em tempo de execução. Essas variáveis têm o prefixo do namespace reservado system__ e são atualizadas automaticamente conforme a conversa avança. Variáveis dinâmicas personalizadas não podem usar o prefixo system__ nem substituir variáveis do sistema.

As variáveis marcadas com † mudam entre os turnos. Incluí-las no texto do prompt pode impedir o armazenamento do prompt em cache; veja Boas práticas para alternativas.

Identidade do agente e da conversa

VariávelTipoDescriçãoExemplo
system__agent_idstringIdentificador único do agente que iniciou a conversa. Nunca muda durante uma conversa."agent_8401kp8bt0jdf14rzzcv5veq94yg"
system__current_agent_idstringIdentificador único do agente ativo no momento. É atualizado quando a conversa é transferida para outro agente."agent_8401kp8bt0jdf14rzzcv5veq94yg"
system__conversation_idstringIdentificador único da conversa na ElevenLabs."conv_1801kp8qtb2begztn7zyf446v4jk"
system__user_idstring | nullID de usuário fornecido pelo cliente para rastreamento e análises. Não deve ser considerado confiável para autenticação."G6yhJW8MktQdhUquvXD1iKpPHql2"
system__initiator_idstring | nullIdentificador correspondente ao método de autenticação usado para iniciar a conversa."user_1801kp8qtb2begztn7zyf446v4jk"
system__channelstringCanal pelo qual a conversa foi iniciada."slack_integration"
system__is_text_onlybooleantrue quando a conversa está no modo somente texto (chat); false para chamadas de voz.true
system__environmentstringAmbiente em que a conversa está sendo executada, usado para resolver variáveis de ambiente."production"

Hora e fuso horário

VariávelTipoDescriçãoExemplo
system__timezonestring | nullFuso horário configurado (conversation_config.agent.prompt.timezone) ou fuso horário IANA fornecido pelo chamador. Usa UTC por padrão quando não definido."America/New_York"
system__time †stringData e hora atuais no fuso horário configurado (%A, %H:%M %d %B %Y). Reavaliada a cada turno (muda uma vez por minuto)."Friday, 12:33 12 December 2025"
system__time_utc †stringCarimbo de data e hora UTC atual no formato ISO 8601. Reavaliado a cada turno."2025-12-12T12:33:45.123456+00:00"
system__time_datestringData atual no fuso horário configurado (ou UTC, se nenhum estiver definido) (%A, %d %B %Y). Muda uma vez por dia."Friday, 12 December 2025"
system__time_hourintegerHora atual (0–23) no fuso horário configurado (ou UTC, se nenhum estiver definido). Muda no máximo uma vez por hora.12
system__time_minute †integerMinuto atual (0–59) no fuso horário configurado (ou UTC, se nenhum estiver definido). Muda uma vez por minuto.33
system__time_second †integerSegundo atual (0–59) no fuso horário configurado (ou UTC, se nenhum estiver definido). Muda a cada turno.45

Telefonia e mensagens

Essas variáveis são preenchidas quando aplicável nos canais de telefonia e mensagens:

VariávelTipoDescriçãoExemplo
system__caller_idstring | nullNúmero de telefone do chamador (voz/SMS/WhatsApp/Amazon Connect)."+14155552671"
system__called_numberstring | nullNúmero de telefone de destino chamado."+18005551234"
system__call_sidstring | nullSID de chamada do Twilio (somente chamadas do Twilio)."CA3498076234a8bbf65c8f09fb8ad7ac1b"
system__call_idstring | nullCall-ID SIP (somente chamadas de tronco SIP)."757f72cf-e80f-44f7-87d6-a961ffbf5b3d"

Estado da conversa por turno

VariávelTipoDescriçãoExemplo
system__call_duration_secs †integerTempo de conversa decorrido em segundos. Reavaliado a cada turno.142
system__agent_turns †integerNúmero total de turnos do agente na conversa até o momento. Aumenta a cada turno.5
system__current_agent_turns †integerNúmero de turnos do agente atual; é redefinido para 0 após uma transferência de agente.3
system__current_subagent_turns †integerNúmero de turnos do agente no nó atual do workflow; é redefinido para 0 na transição de nó.2
system__conversation_history †stringTranscrição da conversa serializada em JSON até o turno atual ({"entries": [{"role": "user", "message": "..."}]}). Veja Formato do histórico da conversa.'{"entries": [...]}'

Formato do histórico da conversa

A variável system__conversation_history contém um objeto JSON com a seguinte estrutura:

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

Cada entrada inclui uma role ("user", "agent" ou "tool") e um dos seguintes itens:

  • message: O conteúdo de texto do turno
  • tool_requests: Uma matriz de chamadas de ferramentas feitas pelo agente, com valores de parâmetros resolvidos
  • tool_results: Uma matriz de respostas de ferramentas

Se o resultado ou um parâmetro de uma ferramenta contiver um histórico de conversa aninhado, ele será ocultado e substituído por um marcador (como [conversation_history (5 turns)]) para evitar uma expansão recursiva ilimitada.

Essa variável é útil para transmitir o contexto da conversa para ferramentas (como webhooks ou LLMs personalizados) ou para incluir o histórico da conversa nos prompts de subagentes durante transferências.

Variáveis dinâmicas secretas

As variáveis dinâmicas secretas são preenchidas da mesma forma que as variáveis dinâmicas normais, mas indicam ao ElevenAgents que elas devem ser usadas somente nos cabeçalhos de variáveis dinâmicas e nunca enviadas a um provedor de LLM como parte do prompt de sistema ou da primeira mensagem de um agente.

Use variáveis dinâmicas secretas para tokens de autenticação ou IDs privados que não devem ser enviados a um LLM. Para criar uma variável dinâmica secreta, adicione o prefixo secret__ à variável dinâmica.

Os valores secretos são armazenados ocultos, portanto a API de conversas os retorna como <REDACTED>. Os webhooks de transcrição pós-chamada entregam os valores originais, então garanta que seu endpoint de webhook os trate como segredos. Não use o prefixo secret__ para valores que você precisa recuperar da API de conversas. Transmita-os como variáveis dinâmicas normais ou transmita um identificador não confidencial e procure o valor confidencial no seu próprio sistema.

Atualizar variáveis dinâmicas por ferramentas

Chamadas de ferramentas podem criar ou atualizar variáveis dinâmicas se retornarem um objeto JSON válido. Para especificar o que deve ser extraído, defina os caminhos dos objetos usando notação de ponto. Se o campo ou caminho não existir, nada será atualizado.

Exemplo de um objeto de resposta e de notação de ponto:

  • O status corresponde ao caminho: response.status
  • O e-mail do primeiro usuário na matriz de usuários corresponde ao caminho: 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"
}
]
}
}

Para atualizar uma variável dinâmica com o e-mail do primeiro usuário, defina a atribuição da seguinte forma.

Parâmetros de consulta

As atribuições são configuradas em cada ferramenta de webhook; consulte atribuições de ferramentas na referência da API.

Guia

Pré-requisitos:

1

Definir variáveis dinâmicas nos prompts

Adicione variáveis usando chaves duplas {{variable_name}} em:

  • Prompts de sistema
  • Primeiras mensagens
  • Parâmetros de ferramentas

Variáveis dinâmicas em mensagens

Variáveis dinâmicas em mensagens

2

Definir variáveis dinâmicas em ferramentas

Você também pode definir variáveis dinâmicas na configuração da ferramenta. Para criar uma nova variável dinâmica, defina o tipo de valor como Variável dinâmica e clique no botão +.

Definir marcadores

Definir marcadores

3

Definir marcadores

Configure valores padrão para testes sem transmitir variáveis em tempo de execução.

Defina valores padrão para cada variável dinâmica no painel do agente.

Definir marcadores

4

Transmitir variáveis em tempo de execução

Ao iniciar uma conversa, forneça as variáveis dinâmicas no seu código:

Verifique se você tem a versão mais recente do SDK instalada.

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

Integração com a página pública de conversa

A página pública de conversa aceita variáveis dinâmicas por meio de parâmetros de URL, permitindo personalizar conversas ao compartilhar links de agentes. Isso é especialmente útil para incorporar agentes personalizados em sites, e-mails ou campanhas de marketing.

Métodos de parâmetros de URL

Há dois métodos para transmitir variáveis dinâmicas à página pública de conversa:

Método 1: JSON codificado em Base64

Transmita as variáveis como um objeto JSON codificado em Base64 usando o parâmetro vars:

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

O parâmetro vars contém JSON codificado em Base64:

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

Método 2: Parâmetros de consulta individuais

Transmita variáveis usando parâmetros de consulta com o prefixo var_:

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

Precedência de parâmetros

Quando os dois métodos são usados simultaneamente, os parâmetros individuais var_ têm precedência sobre as variáveis codificadas em Base64 para evitar conflitos:

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

Neste exemplo, user_name será "John" (de var_user_name) em vez de "Jane" (do vars codificado em Base64).

Exemplos de implementação

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

Boas práticas

As variáveis no prompt de sistema, nos nós de workflow e nos procedimentos são resolvidas a cada turno. Se um valor mudar entre turnos, o prompt não poderá ser armazenado em cache, o que aumenta o custo e a latência. {{system__time_utc}} e {{system__time_second}} mudam a cada turno; {{system__time}} e {{system__time_minute}} mudam a cada minuto.

Para informar ao agente a data e a hora atuais, defina um fuso horário com o botão de fuso horário no editor de Prompt de sistema (conversation_config.agent.prompt.timezone), em vez de incluir {{system__time}} ou {{system__time_utc}} no texto do prompt. Quando um fuso horário é definido, a plataforma adiciona a data e a hora atuais fora do prefixo do prompt armazenado em cache, para que seu prompt de sistema permaneça em cache entre os turnos. Sem um fuso horário, o agente não recebe a data e a hora atuais.

Se o seu prompt precisar da data ou da hora em linha, combine {{system__time_date}}, {{system__time_hour}} e {{system__timezone}} (por exemplo, Today is {{system__time_date}}, hour {{system__time_hour}} ({{system__timezone}})). Elas mudam no máximo uma vez por hora.

Se uma ferramenta precisar de um valor marcado com †, vincule-o ao parâmetro ou cabeçalho da ferramenta em vez de incluí-lo no prompt. Os parâmetros da ferramenta são resolvidos apenas quando a ferramenta é chamada, portanto não afetam o armazenamento do prompt em cache. O LLM já visualiza a conversa, então {{system__conversation_history}} raramente é necessário nos prompts.

Se o seu prompt verifica contadores de turnos como {{system__agent_turns}}, considere estas alternativas. Use first_message para cumprimentos ou avisos iniciais estáticos.

Para o comportamento da primeira resposta, você pode formular a instrução com base no histórico da conversa (por exemplo, “On your first reply, when you have not yet greeted the caller…”). Isso depende de o LLM seguir a instrução; portanto, teste com seu modelo e mantenha o contador de turnos se os resultados forem menos confiáveis.

Se o contador apenas decide quando ramificar ou escalar, uma condição de expressão de borda de workflow ou uma expressão de etapa If de procedimento estruturado (como system__agent_turns >= 5) pode lidar com isso fora do prompt. Isso não abrange casos em que o LLM precisa do próprio valor.

Adicione o prefixo secret__ a tokens de autenticação e chaves de API para que eles só possam ser vinculados a cabeçalhos de ferramentas e nunca sejam enviados ao LLM. Como os valores secret__ são ocultados como <REDACTED> na API de conversas (os webhooks de transcrição pós-chamada ainda recebem os valores originais), transmita como variáveis dinâmicas normais os valores que você precisa recuperar da API de conversas ou transmita um identificador não confidencial e procure o valor confidencial no seu próprio sistema.

system__user_id é fornecido pelo cliente para rastreamento e análises e não é verificado pelo ElevenAgents. Verifique a identidade do chamador com um webhook de início de conversa, um token assinado em uma variável de cabeçalho secret__ ou uma chamada de ferramenta de verificação antes de expor dados da conta.

Defina valores padrão em dynamic_variable_placeholders para cada variável personalizada usada nos seus prompts, primeiras mensagens e ferramentas. As conversas de prévia no painel e os testes de simulação não executam webhooks de início de conversa; portanto, as variáveis não definidas permanecem como marcadores literais {{variable_name}} durante os testes.

Solução de problemas

Verifique se:

  • Os nomes das variáveis correspondem exatamente (diferenciam maiúsculas de minúsculas)
  • As variáveis usam chaves duplas: {{variable_name}}
  • As variáveis estão incluídas no objeto dynamic_variables

Certifique-se de que:

  • Os valores das variáveis correspondem ao tipo esperado
  • Os valores são apenas strings, números ou valores booleanos