Variáveis transformam um chatbot genérico em personalizado. Em vez de "Olá, como posso te ajudar?", você manda "Olá, {{nome}}! Qual o motivo do contato hoje?". O Syncro tem 2 tipos de variável: session (capturada na conversa) e system (já existe no CRM, prefixo $). Esse artigo cobre como capturar, interpolar e usar.
Pré-requisitos
- Fluxo criado com nós no builder. Veja Nós: mensagem, input, condição, ação.
Os 2 tipos de variável
Session (capturada do user)
Variáveis criadas durante a conversa. Sempre vinculadas a 1 conversa específica. Persistem em conversation.chatbot_variables (JSON).
Sem prefixo, ex: nome, email, interesse.
System (computada pelo CRM)
Variáveis pré-existentes com dados do lead/conversa. Read-only — você não pode mudar via fluxo.
Prefixo $, ex: $contact_name, $lead_stage_name.
Variáveis de sistema disponíveis
Calculadas em tempo real a cada execução:
| Variável | Tipo | Descrição |
|---|---|---|
$contact_name |
string | Nome do contato (do WhatsApp/IG profile) |
$contact_phone |
string | Telefone (vazio em Instagram) |
$lead_exists |
string | sim ou não (lead vinculado à conversa) |
$lead_stage_name |
string | Nome da etapa do lead (ex: "Negociação") |
$lead_stage_id |
int | ID da etapa |
$lead_source |
string | Fonte do lead (ex: "formulario-site") |
$lead_tags |
string | Tags do lead, vírgula-separadas |
$messages_count |
int | Total de mensagens trocadas na conversa |
$conversations_count |
int | Total de conversas desse contato (lifetime) |
$is_returning_contact |
string | sim (conv > 1) ou não (primeira vez) |
Exemplos de uso
Saudação personalizada
Olá, {{$contact_name}}! 👋
{{#if $is_returning_contact == 'sim'}}
Que bom te ver de novo!
{{/if}}
⚠️ Atenção: o template engine do bot não suporta if/else — apenas interpolação simples
{{var}}. Pra lógica condicional, use o nó Condition.
Personalizar por etapa do funil
Mensagem: "Vejo que você está em {{$lead_stage_name}} — vou te ajudar a avançar!".
Mostrar quantas vezes já falou
*"Esse é seu **{{$conversations_count}}*º contato com a gente — obrigado pela fidelidade!"
Capturar variáveis (session)
Em nó Input
{
"text": "Qual seu nome?",
"save_to": "nome"
}
Cliente responde "João Silva" → vars[nome] = "João Silva".
Próxima mensagem usa: "Prazer, {{nome}}!" → renderiza como "Prazer, João Silva!".
Em nó Action save_variable
Pra calcular ou definir uma variável programaticamente:
{
"type": "save_variable",
"variable": "categoria",
"value": "premium"
}
Salva vars[categoria] = "premium". Útil pra:
- Setar flags baseado em fluxo trilhado (
vars[interessado_em_curso] = "sim"). - Concatenar valores:
value = "{{nome}} {{sobrenome}}"(interpolado).
Interpolar variáveis
Sintaxe: {{nome_da_variavel}} (com ou sem prefixo $).
Funciona em:
- Mensagem text.
- Mensagem image_url (URL pode ter
{{token}}se você quer dinâmico). - Mensagem audio_url.
- Input text (pergunta personalizada).
- Input branch labels.
- Action send_webhook body (payload customizado por lead).
- Action send_whatsapp message.
- Action set_custom_field value.
- Action save_variable value.
Exemplos
Nome no início
Texto: "Olá, {{nome}}! Bem-vindo." Resultado: "Olá, João! Bem-vindo.".
Confirmação completa
Texto:
Confirmando seu cadastro:
- Nome: {{nome}}
- E-mail: {{email}}
- Telefone: {{$contact_phone}}
Tudo certo?
Webhook customizado
Action send_webhook:
{
"method": "POST",
"url": "https://hooks.zapier.com/...",
"body": "{\"name\": \"{{nome}}\", \"email\": \"{{email}}\", \"source\": \"chatbot\"}"
}
Variável em URL
Action send_whatsapp:
{
"phone_mode": "custom",
"custom_phone": "+5511987654321",
"message": "Novo lead! {{nome}} ({{$contact_phone}}) interessado em {{produto}}."
}
Variáveis vazias
Se variável não existe ou está vazia, interpolação retorna string vazia.
Texto: "Olá, {{nome}}!"
vars sem 'nome' definido
Resultado: "Olá, !"
💡 Dica: pra evitar mensagem feia tipo "Olá, !", sempre capture nome no início do fluxo (com input save_to=nome) ou use system var
{{$contact_name}}que sempre existe.
Persistência
Onde fica salvo
Coluna chatbot_variables (JSON) em:
whatsapp_conversationsinstagram_conversationswebsite_conversations
Estrutura:
{
"nome": "João",
"email": "[email protected]",
"interesse": "vendas",
"categoria": "premium"
}
Quando é limpo
- Nó End executa:
chatbot_variables = null. - Action assign_human ou assign_ai_agent: limpa.
- Você manualmente faz toggle off do fluxo na conversa.
Persistência entre conversas
Variáveis NÃO persistem entre conversas diferentes do mesmo cliente. Cada nova conversa começa do zero.
Pra dado persistente do cliente (nome, e-mail, etc), salve no lead via custom field:
{
"type": "set_custom_field",
"field_name": "interesse",
"value": "{{interesse}}"
}
Próxima vez, busque via system var {{$lead_custom_X}} (não exposto hoje, requer manualmente).
Variáveis pré-declaradas no fluxo
No drawer de edição, há campo Variáveis com lista de variáveis que o fluxo coleta:
- nome (default: "")
- email (default: "")
- interesse (default: "")
Esse campo é documentação — não força criação. Serve pra você lembrar quais variáveis usa nos nós.
💡 Dica: declare aqui todas as variáveis que aparecem nos nós. Facilita revisar fluxos longos.
Variáveis com lista (multi-valor)
Não suportado nativo. Variável é sempre string única.
Pra simular lista, use string concatenada:
{
"type": "save_variable",
"variable": "interesses",
"value": "{{interesses}}, novo_interesse"
}
Cada vez append. Resulta em "vendas, suporte, marketing".
Pra parse depois, use no condition: operator contains valor vendas.
Casos práticos completos
Fluxo de qualificação com 4 variáveis
1. Mensagem: "Olá! Vou fazer 4 perguntas rápidas. 😊"
2. Input save_to=nome: "Qual seu nome?"
3. Mensagem: "Prazer, {{nome}}! Continuando..."
4. Input save_to=email: "Seu melhor e-mail?"
5. Input save_to=empresa: "Qual sua empresa?"
6. Input save_to=interesse com branches:
- "Vendas" → branch_0
- "Suporte" → branch_1
- "Outro" → branch_2
7a. (branch_0) Action change_stage stage_id=5 (Vendas)
+ Mensagem "{{nome}}, te conectei com vendas. {{$contact_name}} já vai responder!"
+ Action assign_human user_id=12
7b. (branch_1) Action change_stage stage_id=8 (Suporte)
+ Action assign_human user_id=15
7c. (branch_2) Mensagem "Sem problema, {{nome}}! Te ajudo direto aqui."
+ Action assign_ai_agent agent_id=3
Resultado: lead qualificado, etapa correta, transferido pro destino certo.
Confirmação por sessão
1. Input save_to=produto: "Qual produto você quer?"
2. Input save_to=qtd: "Quantos?"
3. Action save_variable variable=total value="{{qtd}} x {{produto}}"
4. Mensagem: "Confirma {{total}}? Responda SIM ou NÃO."
5. Input branches:
- SIM → finalizar pedido
- NÃO → reiniciar do nó 1
Erros comuns
Variável aparece como {{nome}} literal
Causa: typo no nome ou variável não foi capturada.
- Confira
save_todo input correspondente. - Confira se o nó com input está ANTES do nó com interpolação.
Variável tem caracteres especiais e quebra interpolação
Sistema escapa, mas se você tem chaves dentro do valor ({{ ou }}), pode dar conflito. Evite.
Variável de sistema não funciona em alguns canais
$contact_phone é vazio em Instagram (Meta não expõe phone no IG profile). Use $contact_name que funciona em todos canais.
Variável "some" no meio do fluxo
Verifica se algum nó End ou action transfer rodou antes — eles limpam variáveis. Reorganize o fluxo pra esses nós ficarem só no final.
Próximos passos
- Pra testar variáveis em ação, veja Testar fluxo.
- Pra transferir pra IA preservando contexto, veja Transferir para Agente IA.