Variáveis e dados nos fluxos
Toda caixa de texto de um fluxo aceita variáveis entre chaves duplas. Elas são preenchidas no momento em que a mensagem sai, para aquele contato:
Oi {{first_name|cliente}}! Seu pedido #{{trigger.number}} de {{trigger.total:money}} foi confirmado.
A forma de uma variável
{{ origem.caminho :formatação |valor padrão }}
- a origem diz de onde vem o dado;
- o caminho entra em dados aninhados;
- a formatação (opcional, até duas) transforma o dado em algo que se lê;
- o valor padrão (opcional) é o que sai quando o dado não existe.
Um {{…}} que não é uma variável — {{ texto com espaço }}, {{1}} — sai do jeito que foi
escrito.
Origens
| Variável | O que traz |
|---|---|
{{first_name}}, {{last_name}}, {{full_name}} | O nome do contato (o primeiro nome cai para o nome do perfil do WhatsApp) |
{{profile_name}}, {{email}}, {{phone}} | Nome no WhatsApp, e-mail, telefone com + |
{{field.cidade}} | Um campo personalizado do contato |
{{flow.nota}} | A resposta que um passo guardou, ou o evento de um Aguardar evento |
{{trigger.pedido.id}} | O que o gatilho trouxe: os dados do webhook ou do data da API |
{{$json.pedido.id}} | O mesmo que trigger. — a forma do n8n |
{{now}} | O momento em que a mensagem sai |
Caminhos
Os dados de uma loja nunca são planos. O caminho entra neles:
| Caminho | Lê |
|---|---|
trigger.billing.first_name | Um campo dentro de outro |
trigger.line_items[0].name | O primeiro item de uma lista |
trigger.line_items.0.name | O mesmo, com ponto |
trigger.line_items[-1].name | O último item |
trigger["meta data"].gift | Uma chave com espaço ou caractere especial |
Uma lista de textos sai separada por vírgula (vip, recorrente); uma lista de objetos não tem
texto próprio — escolha um campo de um item, ou conte os itens com :count.
Formatações
| Formatação | Exemplo | Sai |
|---|---|---|
:money | {{trigger.total:money}} | R$ 189,90 |
:money(USD) | {{trigger.total:money(USD)}} | US$ 189,90 |
:number, :number(2) | {{trigger.peso:number(2)}} | 1,50 |
:date | {{trigger.date_created:date}} | 22/09/2026 |
:datetime, :time | {{trigger.date_created:time}} | 11:03 (horário de Brasília; outro fuso: :time(America/Manaus)) |
:title | {{trigger.billing.first_name:title}} | Maria da Silva |
:upper, :lower | {{trigger.cupom:upper}} | BEMVINDO10 |
:first_word | {{trigger.billing.first_name:first_word}} | Maria |
:digits | {{trigger.billing.phone:digits}} | 11987654321 |
:join, :join( / ) | {{trigger.tags:join( / )}} | vip / recorrente |
:count | {{trigger.line_items:count}} | 2 |
:truncate(20) | {{trigger.produto:truncate(20)}} | Camiseta básica de… |
Os nomes em português também valem: :moeda, :data, :data_hora, :hora, :capitalizar,
:maiusculas, :minusculas, :primeiro_nome, :somente_digitos, :juntar, :contar,
:limitar. Um número pode vir como 189.9, "189.90" ou "1.234,56"; uma data, em ISO, em
segundos desde 1970 ou como dd/mm/aaaa. Um dado que a formatação não consegue ler — um total
"n/a" — conta como ausente e sai o valor padrão.
Valor padrão
{{field.cidade|sua cidade}} escreve sua cidade para quem não tem o campo. Sem valor padrão,
um dado ausente vira texto vazio, e a publicação avisa.
Em templates
As variáveis de um template, num passo de template, têm duas origens a mais além do contato:
- Dado do gatilho — um caminho nos dados do gatilho, com formatação opcional;
- Respostas do fluxo — o que um passo guardou.
O valor padrão é obrigatório, como nas campanhas: a Meta recusa uma variável vazia. Um texto
fixo também aceita variáveis — Pedido {{trigger.number}} —, para montar um valor com o dado no
meio.
É assim que uma confirmação de pedido sai fora da janela de 24 horas, onde só um template pode ser enviado.
Em links
O link de um botão de URL e o endereço do webhook de saída também aceitam variáveis:
https://loja.com/pedido/{{trigger.id}}?nome={{first_name}}. Cada valor no meio do link é codificado
(um espaço ou um & não quebram a URL); uma variável no começo é a própria base —
{{trigger.tracking_url}}. O link precisa virar um endereço https://, senão a execução termina
com o motivo link inválido.
Os títulos dos botões — de resposta, o da lista e o do botão de URL — também aceitam variáveis:
Pagar {{trigger.total:money}}. O WhatsApp limita um título a 20 caracteres, então o que os dados
formaram é cortado com … nesse limite; um título que ficaria vazio usa o texto fixo escrito em
volta das variáveis, e dois botões de resposta com o mesmo título ganham um número (Sim 2).
As opções da lista também aceitam variáveis no título e na descrição: o título é cortado em 24
caracteres e numerado quando sai igual a outra opção; a descrição é cortada em 72 e não aparece se
os dados a deixarem vazia. O título da seção também aceita variáveis e é cortado em 24; com
mais de uma seção (quando o WhatsApp o exige) ele nunca sai vazio.
Em condições e campos
- A regra Dado do gatilho compara um caminho —
statusigual aprocessing,totalmaior que500. As comparações são: igual, diferente, contém, não contém, começa com, é um destes (lista separada por vírgula), vazio, preenchido, maior, maior ou igual, menor, menor ou igual. O valor comparado também aceita variável:{{field.limite}}. - Definir campo pode somar e subtrair (um contador de pedidos, o total gasto), acrescentar e tirar opções de uma lista, gravar o momento atual ou limpar o campo.
- Espera pode ir até uma data que está nos dados — uma hora antes de
{{trigger.appointment.start}}, por exemplo — e diz o que fazer se a data já passou.
Validação
Ao publicar, o fluxo avisa sobre uma formatação que não existe (erro), uma origem desconhecida, um caminho que não aparece nos exemplos capturados do webhook e uma variável sem valor padrão (avisos). O editor mostra, embaixo de cada caixa, a mensagem preenchida com o exemplo capturado.