Variáveis de Personalização
Variáveis são atalhos que o NooviChat troca pelo dado real de cada contato na hora do envio — o nome, o telefone, o valor do card, a data do agendamento. Assim uma única mensagem chega personalizada para cada pessoa. Este guia mostra quais variáveis existem, em qual tela usar cada uma e quando.
O que são variáveis
Você escreve a mensagem com um marcador entre chaves duplas, por exemplo {{nome}}, e no disparo o sistema substitui pelo valor daquele destinatário. Se o contato se chama Maria, ela recebe “Olá Maria”; se é o João, ele recebe “Olá João” — a mesma mensagem, personalizada.
A parte que mais confunde
Regra de ouro
Combine a grafia da variável com a tela em que você está. Este é o mapa rápido — cada linha detalhada nas seções seguintes:
| Onde | Estilo | Exemplo do nome do contato |
|---|---|---|
| Disparador em massa | plano, minúsculo, português | {{nome}} |
| Conversas / Respostas rápidas | com ponto (Liquid) | {{contact.name}} |
| Follow-ups | plano, com underline | {{contact_name}} |
| Lembretes de agendamento | plano, vocabulário de agenda | {{cliente}} / {{paciente}} |
| Flow Builder / Sequências | com ponto, aninhado, com espaços | {{ contact.name }} |
| Template oficial WhatsApp (Meta) | snake_case ou número | {{contact_name}} ou {{1}} |
Repare: o nome do contato aparece de quatro jeitos diferentes dependendo da tela. Não existe uma variável universal — é por isso que esta página existe.
Dois tipos de renderização
Disparador em massa
No Disparador em massa as variáveis são planas, em minúsculo e em português. Valem na aba Mensagem personalizada, no valor de cada parâmetro do template do WhatsApp (o campo “insira o valor para 1”), na mensagem de follow-up automático do disparo e na mensagem de boas-vindas.
| Variável | Vira | De onde vem |
|---|---|---|
{{nome}} | Nome do contato | Coluna nome do CSV, ou o nome do contato/lead da base |
{{telefone}} | Telefone (formato +55…) | Coluna telefone do CSV, ou o telefone do contato |
{{sua_coluna}} | O valor daquela coluna | Qualquer coluna extra do CSV vira variável: {{cidade}}, {{empresa}}, {{codigo}}… |
Exemplo de mensagem personalizada com coluna extra do CSV:
Olá {{nome}}! Vi que você é de {{cidade}}.
Temos uma condição especial no seu telefone {{telefone}}. Posso te contar?No template do WhatsApp, digite só o valor
{{1}}, tudo bem?”, no campo “Variáveis → insira o valor para 1” digite apenas {{nome}} — não “Olá {{nome}}”. O texto ao redor já faz parte do template aprovado pela Meta; o campo é só o que entra no lugar do {{1}}.Nome canônico e valor de reserva
{{nome}}, não {{name}}. No CSV, os cabeçalhos nome e name alimentam o mesmo nome canônico do contato, renderizado por {{nome}};{{name}} não é uma variável renderizada. Você também pode definir uma reserva, por exemplo {{nome | Cliente}}, usada quando o valor estiver vazio.Conversas, mensagens e respostas rápidas
Ao responder um atendimento ou montar uma Resposta Rápida, as variáveis usam a notação com ponto (o objeto antes, o atributo depois). É o motor Liquid, que também aceita condições ({% if %}).
| Variável | Vira |
|---|---|
{{contact.name}} | Nome do contato |
{{contact.id}} | ID interno do contato |
{{contact.first_name}} | Primeiro nome do contato |
{{contact.last_name}} | Sobrenome do contato |
{{contact.phone_number}} | Telefone do contato |
{{contact.email}} | E-mail do contato |
{{agent.id}} | ID interno do atendente |
{{agent.name}} | Nome do atendente |
{{agent.first_name}} / {{agent.last_name}} | Nome e sobrenome do atendente |
{{agent.available_name}} | Nome de exibição disponível do atendente |
{{agent.email}} | E-mail do atendente |
{{conversation.id}} | ID interno da conversa |
{{conversation.display_id}} | Número visível da conversa na conta |
{{conversation.contact_name}} | Nome do contato da conversa |
{{conversation.recent_messages}} | Lista para loops Liquid, com sender, content e attachments das mensagens recentes |
{{inbox.name}} | Nome da caixa de entrada |
{{inbox.id}} | ID da caixa de entrada |
{{account.name}} | Nome da conta |
{{account.id}} | ID da conta |
{{contact.custom_attribute.chave}} | Qualquer atributo personalizado do contato |
{{conversation.custom_attribute.chave}} | Qualquer atributo personalizado da conversa |
Olá {{contact.first_name}}, aqui é {{agent.name}} da nossa equipe.
{% if contact.custom_attribute.plano %}Vi que você está no plano {{contact.custom_attribute.plano}}.{% endif %}{{nome}} não funciona — é uma variável do Disparador. Na conversa, o nome do contato é {{contact.name}}. Como esta mensagem passa pelo Liquid, uma variável válida mas inexistente no contexto renderiza como texto vazio. Se a sintaxe Liquid estiver inválida, o backend preserva o conteúdo original em vez de enviar uma versão parcialmente processada.Follow-ups
Nos templates de Follow-up (manuais, por regra de pipeline ou automação), as variáveis são planas com underline. É o único formato para data e hora “de agora”. Somente neste mecanismo de Follow-up, a resolução usa account.reporting_timezone e cai em UTC quando esse campo está vazio.
| Variável | Vira |
|---|---|
{{contact_name}} | Nome do contato |
{{contact_phone}} | Telefone do contato |
{{contact_email}} | E-mail do contato |
{{conversation_id}} | Número visível da conversa na conta |
{{inbox_name}} | Nome da caixa de entrada |
{{agent_name}} | Nome do agente informado no contexto |
{{card_title}} | Título do card no pipeline |
{{card_value}} | Valor do card (R$) |
{{stage_name}} | Etapa atual do pipeline |
{{pipeline_name}} | Nome do pipeline |
{{current_date}} | Data de hoje (dd/mm/aaaa, fuso da conta) |
{{current_time}} | Hora atual (HH:MM, fuso da conta) |
Oi {{contact_name}}, tudo bem? Passando para retomar sobre "{{card_title}}"
(valor {{card_value}}). Consigo te ligar hoje, {{current_date}}?{{contact_name}} (com underline), não {{nome}}.Aliases legados
{{contact.name}} e {{pipeline_card.title}} ainda são normalizados pelo backend, mas a grafia canônica para novos Follow-ups é a versão plana com underline da tabela.Substituição literal por allowlist
Lembretes de agendamento
Nos lembretes de Atendimentos/Agendamentos as variáveis usam um vocabulário próprio de agenda. As datas se referem ao horário do agendamento (não “agora”), no fuso efetivo de agendamento descrito abaixo.
| Variável | Vira |
|---|---|
{{cliente}} / {{paciente}} | Nome do cliente/paciente |
{{profissional}} | Profissional responsável |
{{servico}} | Serviço agendado |
{{data}} | Data do agendamento |
{{hora}} | Horário do agendamento |
{{duracao}} | Duração |
{{valor}} | Valor do atendimento, com duas casas decimais |
{{empresa}} | Nome da empresa |
Substituição literal em uma passagem
Formatação de data, hora e valor
{{data}} e {{valor}} usam o locale da conta, enquanto {{data}} e {{hora}} usam o fuso efetivo de agendamento: primeiro account.reporting_timezone, depois account.custom_attributes.timezone gravado pelo onboarding e, sem uma configuração válida, America/Sao_Paulo. Se esse locale não estiver disponível, o sistema usa o locale padrão da instalação quando disponível e, por fim, inglês. O valor prioriza o preço e a moeda gravados no atendimento; cada campo ausente recorre ao respectivo padrão do serviço. Sem preço ou sem moeda, {{valor}} vira texto vazio.Olá {{cliente}}! Lembrete do seu {{servico}} com {{profissional}}
no dia {{data}} às {{hora}}. Valor: {{valor}}. Até lá!Flow Builder e Sequências
Os dois recursos usam caminhos com ponto, e os espaços dentro das chaves são opcionais. Porém, os contextos não são idênticos: o Flow Builder tem o catálogo amplo abaixo, enquanto cada tipo de passo de Sequência expõe apenas o contexto do seu handler.
Flow Builder
| Variável | Vira |
|---|---|
contact.id | contact.name | contact.email | contact.phone_number | contact.identifier | Dados do contato |
conversation.id | conversation.display_id | conversation.status | conversation.priority | conversation.subject | conversation.assignee_id | conversation.team_id | Dados da conversa |
{{ inbox.channel_type }} | Tipo do canal da inbox |
message.content | message.message_type | message.sender_type | message.created_at | Dados da mensagem que acionou o fluxo |
card.id | card.title | card.pipeline_stage | card.expected_revenue | card.priority | card.owner_id | Dados do card do Pipeline |
agent.name | agent.email | Agente associado ao contexto |
account.id | account.name | Conta atual |
now.date | now.time | now.datetime | now.day | now.month | now.year | Data/hora atual no fuso da conta |
appointment.title | appointment.scheduled_at | appointment.duration_minutes | appointment.status | Agendamento no contexto do fluxo |
lead_score.value | lead_score.threshold | lead_score.delta | Pontuação de lead |
sla.policy_name | sla.minutes_overdue | sla.threshold_minutes | Contexto de SLA |
captain.intent | captain.confidence | captain.assistant_id | Contexto de IA quando fornecido ao fluxo |
webhook_payload | webhook_payload.campo | Payload do webhook que acionou o fluxo |
response_payload | response_payload.campo | Resposta produzida por um passo anterior |
{{ variables.X }} | Variável definida antes no próprio fluxo |
Flow Builder não executa Liquid
{% ... %} e filtros Liquid não são processados.Passos de Sequência
| Onde | Variáveis realmente disponíveis |
|---|---|
| WhatsApp texto e legenda de mídia | contact.name | contact.email | contact.phone_number; card.id | card.title | card.stage; account.name; sequence.name | sequence.current_step | sequence.total_steps |
| Template de payload do webhook | account.id | account.name; card.id | card.title | card.stage | card.pipeline_stage | card.contact_id | card.owner_id; contact.id | contact.name | contact.email | contact.phone_number; timestamp |
Variáveis de Flow não migram automaticamente para Sequências
{{ card.expected_revenue }}, {{ appointment.scheduled_at }} ou {{ variables.X }} funciona no contexto apropriado do Flow Builder, mas não faz parte do contexto dos handlers de Sequência listados acima.Sequências executam Liquid
Templates oficiais do WhatsApp (Meta)
Quando você cria/envia um template oficial pela API Cloud do WhatsApp, a própria Meta define o formato dos parâmetros: numéricos ({{1}}, {{2}}) ou nomeados em snake_case ({{contact_name}}, {{agent_email}}) — sem ponto. Atributos personalizados usam o prefixo {{contact_custom_chave}} ou {{conversation_custom_chave}}.
| Grupo nomeado | Parâmetros auto-resolvíveis |
|---|---|
| Contato | contact_name, contact_first_name, contact_last_name, contact_email, contact_phone, contact_id |
| Conversa e inbox | conversation_id, inbox_id, inbox_name |
| Agente atribuído | agent_name, agent_first_name, agent_last_name, agent_email |
| Atributos personalizados | contact_custom_<chave>, conversation_custom_<chave> |
Auto-resolução não sobrescreve valor informado
Dois problemas diferentes com parâmetro vazio
{{1}} cru na conversa (a mensagem não conseguiu preencher o parâmetro); (2) quando um valor vazio é efetivamente enviado à Meta, a Meta rejeita o disparo (#132000 — ver Erros comuns). Nos dois casos, garanta que todo parâmetro tenha um valor real. E lembre: no Disparador o {{1}} é preenchido com variável do Disparador ({{nome}}), não com a grafia da Meta.Datas e fuso horário
Os módulos não compartilham o mesmo resolvedor. No mecanismo de Follow-ups, UTC é o fallback para {{current_date}} e {{current_time}}. Separadamente, os tokens {{ now.date }}, {{ now.time }} e {{ now.datetime }} do Flow Builder usam o próprio resolvedor de automação, com account.reporting_timezone e fallback UTC. O timestamp do webhook de Sequência usa o resolvedor do handler de Sequência: reporting_timezone ou, sem ele, o fuso padrão UTC da aplicação.
Já os lembretes de agendamento usam, nesta ordem, account.reporting_timezone, account.custom_attributes.timezone do onboarding e America/Sao_Paulo. Essa diferença importa quando apenas o fuso do onboarding foi preenchido.
Diagnostique pelo módulo
Erros comuns
- Grafia da tela errada.
{{contact.name}}num Disparador permanece literal;{{nome}}numa resposta rápida passa pelo Liquid e normalmente vira texto vazio. Confira o motor da seção antes de enviar. - Maiúscula/minúscula. No Disparador é exatamente
{{nome}}minúsculo —{{Nome}}ou{{NOME}}não são reconhecidos. Colunas de CSV seguem a grafia exata do cabeçalho do arquivo. - Valor vazio em template oficial. Contato sem nome deixa o parâmetro em branco e a Meta rejeita o envio (erro 132000). Preencha a coluna
nomeda base ou use um valor fixo de reserva (ex.: “Cliente”). - Só o valor no parâmetro do template. No campo de cada
{{1}}digite só a variável ({{nome}}), não a frase inteira. - Placeholder em inglês. O nome embutido do Disparador é
{{nome}}.{{name}}não é renderizado: até um cabeçalho CSVnameé aceito apenas como alias e seu valor fica disponível em{{nome}}. Use os botões/chips de variável quando disponíveis.
Na dúvida, teste antes