Skip to content

Variáveis · set_variable / assigner / variable_assigner ​

Para que serve

Pensa num bloco de notas que fica do seu lado durante o atendimento. Você anota o nome do cliente, o número do pedido, a resposta que ele deu — e a qualquer momento pode consultar, mudar ou apagar esse conteúdo. Os nós de variável fazem exatamente isso: guardam informações para você usar mais à frente no fluxo.

Quando usar
  • Salvar a escolha que o cliente fez num menu de botões
  • Construir uma mensagem personalizada juntando nome + produto + data
  • Acumular itens numa lista ao longo de uma iteração
  • Limpar o valor de uma variável antes de começar um novo ciclo
  • Mesclar dados de fontes diferentes numa saída tipada e organizada

Os três nós de variável ​

O Flow Builder tem três nós com funções parecidas mas objetivos diferentes. Veja qual usar em cada situação:

NóKindPara que usar
Atribuir VariávelassignerCriar ou alterar variáveis uma a uma, com controle de operação
Variável (legado)set_variableVersão antiga — ainda funciona, mas prefira o assigner
Mesclar Variáveisvariable_assignerCombinar N entradas em uma saída tipada (texto, número, objeto…)

Nome do nó e referência nas variáveis ​

Além das variáveis declaradas no Gerenciador, cada nó do fluxo expõe suas próprias saídas — e você as referencia pelo nome do nó, não por um código interno.

Ao criar um nó novo, ele já nasce com um id legível derivado do tipo: um nó Agente de IA vira agente, um segundo Agente de IA na mesma tela vira agente_2, e assim por diante. Isso substitui o esquema antigo de ids opacos como n_agent_1722538_3.

Você pode trocar esse nome a qualquer momento pelo título editável no topo do painel de configuração (veja A tela do Flow Builder para o quadro completo da interface). Ao confirmar, o nome digitado vira o id do nó: acentos são removidos, tudo vira minúsculas e espaços viram _ — "Consulta CPF" vira consulta_cpf. Se o resultado colidir com o id de outro nó, ganha um sufixo numérico (consulta_cpf_2, consulta_cpf_3...).

Exemplo

Um nó Agente de IA renomeado para "Consulta CPF" tem sua saída referenciada assim:

{{consulta_cpf.resposta}}

Em vez do antigo {{n_agent_1722538_3.resposta}} — muito mais fácil de ler e de manter conforme o fluxo cresce.

Quando a saída do nó é um objeto (JSON), o caminho pode descer quantos níveis forem necessários — sempre pontuado, id_do_nó.campo.subcampo.... Um nó Ferramenta MCP com id mcp cuja ferramenta devolve {"result": {"data": "<conteúdo>"}} é referenciado assim:

{{mcp.result.data}}
Dica

Renomear é seguro: todas as referências existentes no fluxo — templates {{ }}, expressões, condições e os ponteiros de conexão entre nós — são reescritas automaticamente para o novo nome. Nada quebra.


Escopos de variável ​

Toda variável pertence a um escopo, que define quem enxerga ela e por quanto tempo ela vive:

EscopoPrefixoVive por quanto tempo
Fluxoflow.Durante toda a execução do fluxo; legível em qualquer nó
Locallocal.Apenas dentro do nó/escopo atual
Contatocontact.Associado ao contato naquele canal; persiste entre execuções
Workspaceworkspace.Compartilhado por todos os fluxos do workspace

Você declara essas variáveis no Gerenciador de Variáveis (ícone de chaves {} na topbar do editor), escolhendo o escopo desejado na hora de criar. Depois de declaradas, elas aparecem no seletor de variáveis de cada nó, junto com as saídas dos nós anteriores, Sistema (sys.), Evento (event.) e Contato.


O seletor de variáveis ​

O botão de chaves {} na barra de qualquer campo de texto abre o seletor. Ele é dividido em duas colunas: à esquerda a lista de fontes, à direita os campos da fonte escolhida.

As fontes vêm agrupadas em quatro faixas:

FaixaO que traz
Nós do fluxoUma entrada por nó anterior, com as saídas que ele produz
Deste fluxoFluxo, Local e Gatilho — o que vive só nesta execução
Do cadastroContato, Campos Personalizados, Workspace e Sistema — o que atravessa execuções
Do atendimentoConversa, Atendente e Data/Hora — o mesmo catálogo das respostas rápidas

Ao lado de cada nó há um ponto verde quando ele guardou valores da última execução, e um contorno vazio quando ainda não rodou.

Cada campo mostra o valor que teve ​

À direita de cada campo aparece o valor da última execução. Quando o nó ainda não rodou, no lugar do valor vem o tipo esperado (texto, número, lista, objeto). É a forma rápida de responder "essa variável vai chegar preenchida?" antes de publicar o fluxo.

O rodapé do seletor é a faixa de inspeção: mostra a referência exata pronta para copiar e o valor inteiro do campo sob o cursor, sem cortar. Serve justamente para os campos longos, como a transcrição de um áudio, em que a prévia da lista não cabe.

Buscar e navegar pelo teclado ​

A busca no topo cobre todas as fontes de uma vez, e procura tanto pelo nome amigável quanto pelo caminho completo — digitar Primeiro acha contact.first_name. Enquanto você busca, a coluna da esquerda mostra só as fontes que têm resultado, com a contagem de cada uma.

Pelo teclado: ↑ ↓ percorrem a lista, → e ← abrem e fecham um objeto, Enter insere e Esc fecha.

Dica

Campos do contato aparecem com o nome amigável e a chave real lado a lado — Primeiro Nome first_name. O nome ajuda a achar; a chave é o que vai para a mensagem.

Quando a estrutura interna do campo não é conhecida ​

Um campo do tipo objeto (ex.: o result de uma Ferramenta MCP) só aparece expansível no seletor quando o Flow Builder já sabe o que tem dentro dele — pela última execução do nó, ou pelo schema que o próprio servidor MCP declarou para a ferramenta. Sem nenhuma das duas coisas, o campo aparece "fechado": não dá pra abrir e escolher um subcampo pelo clique.

Nesse caso a faixa de inspeção, no rodapé do seletor, ganha um campo de texto onde você completa o caminho à mão — digite só a parte que falta (ex.: data) e o seletor final vira {{mcp.result.data}}, pronto para inserir ou copiar.

Campo personalizado não fica em contact. ​

Campos Personalizados é uma fonte separada de Contato, e essa separação é real: o campo personalizado do contato vive em custom_fields., nunca em contact..

A chave do campo personalizado é o slug, gerado a partir do nome quando o campo foi criado: "Data Pericia" vira data-pericia, "Horário da Reunião" vira horario-da-reuniao. Repare que o separador é o hífen, não o sublinhado. Não tente adivinhar o slug — abra o seletor de variáveis e escolha o campo na fonte Campos Personalizados, que insere a referência certa.

As variáveis do atendimento dentro de um fluxo ​

A faixa Do atendimento traz o mesmo vocabulário das respostas rápidas, e ele funciona dentro do fluxo:

PrefixoDentro de um fluxo
contact.Preenchido
flow. local. event. sys.Preenchidos
conversation.Preenchido: conversation.id (protocolo), conversation.status e conversation.channel
agent.Preenchido com o atendente atribuído à conversa
custom_fields.Preenchido pelo slug do campo personalizado do contato — nunca por contact.
date.Calculado no momento do envio, no fuso do workspace
workspace.Só as variáveis que você declarou no Gerenciador. workspace.name, workspace.city e workspace.state são do cadastro da empresa e continuam não preenchidos
Dica

Campo personalizado do tipo Data ou Data e Hora não chega como texto ISO cru (ex.: 2026-11-16T22:00:00.000Z) — o Flow Builder formata no padrão brasileiro. Data e Hora vira dd/mm/aaaa hh:mm, já convertido para o fuso do workspace (ex.: 16/11/2026 19:00); Data vira só dd/mm/aaaa, sem conversão de fuso — uma data pura não tem hora para converter, e converter mudaria o dia em alguns fusos. A mesma regra vale nas respostas rápidas e no composer do atendimento.

O que ainda não é preenchido aparece marcado no seletor: a etiqueta não resolve no fluxo no topo do painel, ou só no atendimento na linha específica quando a fonte é mista.

Dica

date. é calculado na hora do envio, não no disparo. Um fluxo que espera dois dias pela resposta do contato e só então manda a mensagem escreve a data de hoje, não a de anteontem.

O que cada gatilho entrega ​

O que chega preenchido depende do que o gatilho conhece. Um gatilho que nasce de uma conversa entrega tudo; um agendado não tem contato nem conversa para entregar.

Gatilhocustom_fields.conversation. agent.date.
Mensagem recebida / evento de conversasimsimsim
Disparo manual (botão na conversa, follow-up)simsimsim
Campo do contato alteradosimparcial¹sim
Data do contatosimparcial¹sim
Formulário respondidosimnãosim
Webhooknão²nãosim
Agendadonão²nãosim

¹ Só conversation.id, quando o contato já tem uma conversa. Não há mensagem que preencha status, canal ou atendente.

² Esses gatilhos não têm contato, então não existe campo personalizado a resolver. Se o fluxo precisa deles, busque o contato num nó antes de montar a mensagem.

Dica

Até setembro de 2026 só o gatilho de evento preenchia custom_fields. e o fuso de date.. Se você tem um fluxo antigo em que {{custom_fields.algum-campo}} saía em branco, ele volta a funcionar sozinho — não precisa reescrever a mensagem.

Para referenciar uma variável numa expressão, use a notação pontuada com o prefixo do escopo: {{flow.nome_lead}}, {{contact.email}}.

Quando o mesmo nome de variável existe em mais de um escopo, vale a ordem de precedência Local > Fluxo > Contato > Workspace: o escopo mais interno sempre vence.

Valor padrão ​

Ao declarar uma variável no Gerenciador de Variáveis, o valor padrão é aplicado automaticamente no início de cada execução — a variável já nasce preenchida, sem precisar de um nó assigner só para inicializá-la.

Duas regras importantes:

  • O padrão só entra quando a variável ainda não tem valor. Se o disparo do fluxo já trouxe um valor (ex.: dados do evento, do contato ou de uma execução retomada), esse valor vence e o padrão é ignorado.
  • O padrão respeita o tipo escolhido na declaração. Um padrão 0 numa variável do tipo Número vira o número zero (não o texto "0"), e false numa variável Booleano vira falso de verdade — então dá para usar direto numa condição sem conversão.

Variáveis do contato persistem de verdade ​

O escopo Contato (contact.) é gravado no cadastro do contato. Tudo que o fluxo escrever em contact. fica salvo ao fim da execução e é carregado de volta na próxima execução — inclusive em outro fluxo, dias depois.

É o lugar certo para memória de longo prazo do lead: estágio da qualificação, preferências, se já recebeu determinada oferta.

Dica

Quando o disparo traz um dado atualizado do contato (nome, telefone) e existe uma variável salva com o mesmo nome, o dado do disparo — mais recente — é o que vale naquela execução.

Variáveis de workspace também persistem de verdade ​

O escopo Workspace (workspace.) é compartilhado por todos os fluxos do workspace, não só pelo contato atual. Tudo que um fluxo escrever em workspace. fica salvo e disponível para qualquer outro fluxo, em qualquer execução futura — é o lugar certo para configuração operacional viva: um contador global, um indicador de campanha ativa, o último ID processado de uma sincronização.

Declare a variável no Gerenciador de Variáveis com escopo Workspace, ou deixe que um assigner/variable_assigner a crie na primeira escrita.

Dica

Diferente do escopo Contato, o Workspace não tem "dono" — cuidado com escrita concorrente vinda de execuções paralelas. Prefira nomes específicos (ultima_sincronizacao_crm) a nomes genéricos (status) para evitar que fluxos diferentes pisem na mesma variável sem querer.

No gatilho Mensagem Recebida (inbound_message), o evento traz duas variáveis sobre o cadastro do contato no sistema jurídico conectado ao workspace:

VariávelTipoO que contém
{{event.contact.is_client}}BooleanoVerdadeiro quando o contato já está cadastrado como cliente no sistema jurídico conectado ao workspace
{{event.contact.legal_provider}}TextoQual sistema jurídico tem o cadastro: advbox ou meu_estagiario. Vem vazio quando o contato não é cliente

O uso típico é uma condição logo após o Start: se is_client for verdadeiro, o fluxo entra na trilha de cliente (consulta de processos, agenda); se for falso, entra na trilha de prospecção.

Dica

is_client não mudou de nome nem de significado com a entrada do segundo sistema jurídico. Fluxos publicados que já usam essa variável continuam funcionando exatamente como antes — o que mudou foi apenas de onde o sistema lê a informação internamente. A variável legal_provider é nova e opcional: use quando o fluxo precisar se comportar de um jeito diferente para cada sistema.

Gatilhos de campanha: event.campaign.* ​

Os gatilhos de campanha (Lead de anúncio CTWA, Formulário de Lead Ads e WhatsApp Flow concluído) entregam o bloco event.campaign com a campanha de origem, além de event.campaign_id, event.campaign_lead_id e event.contact_id.

VariávelO que contém
event.campaign.id / event.campaign.nameId interno e nome da campanha
event.campaign.source_typeOrigem: ctwa, lead_form ou whatsapp_flow
event.campaign.platformfacebook, instagram ou whatsapp
event.campaign.external_idId do anúncio, do formulário ou template do Flow
event.campaign.ad_id / event.campaign.ad_nameId e nome do anúncio na Meta (podem vir vazios)
event.campaign.campaign_nameNome da campanha na Meta (Lead Ads, ou CTWA com Contas de Anúncios conectadas; pode vir vazio no primeiro lead de um anúncio novo)

Cada gatilho traz ainda campos próprios (event.referral.*, event.form_id, event.fields.*, event.flow_token, event.conversation_id). Veja a lista completa em Lead de Anúncio (CTWA), Formulário de Lead Ads e WhatsApp Flow Concluído.

Etiquetas do contato: contact.tags ​

O contato expõe também contact.tags: uma lista de textos com o nome de cada etiqueta atribuída a ele (ex.: ["Cliente", "VIP"]). O nome de cada etiqueta é o mesmo texto configurado no cadastro de etiquetas do workspace.

Quando o contato não tem nenhuma etiqueta, contact.tags vem como lista vazia — nunca ausente — então uma condição sobre ela nunca quebra por falta da variável.

Exemplo

Num nó Se / Senão (condição), configure a condição:

variável: contact.tags
operador: contém
valor:    Cliente

Isso bifurca o fluxo para quem já tem a etiqueta "Cliente" atribuída.

Dica

contact.tags é sempre lista de nomes (texto), não de objetos — assim ele funciona direto com os operadores contém, não contém, contém todos e contém algum do Se/Senão, sem precisar de sub-condição de variável.


Nó Atribuir Variável (assigner) ​

Passo a passo
  1. Arraste o nó **Atribuir Variável** para o canvas e conecte-o ao bloco anterior.
    Paleta de nós aberta no canvas do Flow Builder, com as categorias disponíveis para localizar e arrastar o nó desejado

    Paleta de nós aberta no canvas do Flow Builder, com as categorias disponíveis para localizar e arrastar o nó desejado

  2. No painel à direita, clique em **+ Adicionar variável**.
    Painel de configuração do nó Atribuidor, com a seção Variáveis vazia e o toggle Transacional (tudo-ou-nada)

    Painel de configuração do nó Atribuidor, com a seção Variáveis vazia e o toggle Transacional (tudo-ou-nada)

  3. Digite o nome da variável (ex.: `nome_cliente`) e escolha a operação desejada.
  4. Informe o valor — pode ser texto fixo ou uma expressão como {{contact.name}}.
  5. Repita para quantas variáveis precisar e salve.

Operações disponíveis ​

OperaçãoO que faz
over-writeSubstitui o valor atual pelo novo
clearApaga o valor (deixa a variável vazia)
appendAdiciona texto ao final do valor existente
extendAdiciona itens ao final de uma lista
Exemplo

Você quer guardar a resposta do cliente e depois mostrar numa mensagem:

variável: produto_escolhido
operação: over-write
valor:    {{esperar_botao.label}}

Depois, no nó de mensagem: "Você escolheu: {{produto_escolhido}}. Aguarde!"

Dica

Use nomes de variável sem espaços e sem acentos. Prefira snake_case, como nome_cliente ou valor_total. Fica mais fácil de usar nas expressões {{ }}.


Nó Mesclar Variáveis (variable_assigner) ​

Esse nó pega valores de várias partes do fluxo e os organiza numa saída única e tipada — ideal quando você precisa passar um "pacote de dados" para um nó de IA ou de integração.

Passo a passo
  1. Arraste o nó **Mesclar Variáveis** para o canvas.
  2. Escolha o tipo de saída: **Texto**, **Número**, **Objeto JSON** ou **Array**.
  3. Adicione as entradas, mapeando cada campo ao valor correspondente do fluxo.
  4. Conecte a saída deste nó ao próximo bloco que vai consumir esses dados.
Campos
CampoO que faz
Tipo de saídaDefine o formato do resultado (texto, número, objeto, array)
EntradasLista de pares chave → valor que serão mesclados
Nome da variável de saídaComo essa variável ficará disponível nos próximos nós

Saiba mais ​