Ramificação switch/case, operadores, regras AND/OR, ramo Else e comportamento de roteamento.
Nó Condição
O nó Condição (condition) implementa ramificação switch/case: avalia uma ou mais regras e segue exatamente um caminho de saída — o primeiro case que corresponder, ou Else quando nenhum corresponder.
Encontre-o na categoria Lógica em Automações.
Figura 1: Nó Condição com cases, operadores e ramo Else
O que faz
Em runtime o engine:
- Avalia cada case de cima para baixo.
- Dentro de um case, avalia linhas de condição combinadas com AND / OR.
- Resolve operandos esquerdo e direito (suporta expressões
{{variable}}completas). - Para no primeiro case que corresponder e encaminha a execução para a saída desse case.
- Se nenhum case corresponder, encaminha para a saída Else (
elseoufalse).
A saída do nó (para depuração) inclui:
| Campo | Significado |
|---|---|
matched_case_id | ID do case vencedor, ou null se Else |
matched_index | Índice base zero do case, ou -1 para Else |
evaluations | Detalhamento por case com operandos resolvidos e resultados booleanos |
Referência em nós posteriores: {{condition_1.matched_case_id}}.
Como configurar
Clique duas vezes no nó Condição para editar os cases.
Cases
Cada case tem:
- Label — nome exibido no canvas (ex.: "VIP", "Tem telefone", "Horário comercial").
- ID — ID interno do handle usado na conexão (gerado automaticamente; deve corresponder à aresta de saída).
- Conditions — uma ou mais linhas.
Adicione cases com Add case. Reordene editando labels; a ordem de avaliação segue a ordem da lista.
Linhas de condição
Cada linha tem três partes:
| Parte | Descrição |
|---|---|
| Operando esquerdo | Campo ou expressão, ex.: {{trigger.body.status}}, {{variables.score}}, {{system.current_hour}} |
| Operador | Regra de comparação ou string (veja tabela abaixo) |
| Operando direito | Valor ou expressão, ex.: paid, {{variables.threshold}}, 18 |
Entre linhas, escolha AND (todas devem passar) ou OR (qualquer uma passa).
Operadores
| Operador | Significado | Exemplo |
|---|---|---|
== | Igual (números, datas, strings) | {{trigger.body.plan}} == pro |
!= | Diferente | {{contact.country}} != BR |
> / < / >= / <= | Ordem numérica ou de data | {{variables.total}} > 1000 |
contains | Substring | {{trigger.body.message}} contains urgent |
not_contains | Substring ausente | {{input.data.email}} not_contains @test. |
starts_with | Prefixo | {{contact.phone}} starts_with 55 |
ends_with | Sufixo | {{trigger.body.file}} ends_with .pdf |
is_empty | Null, undefined, "" ou array vazio | {{variables.phone}} is_empty |
is_not_empty | Tem valor | {{trigger.body.email}} is_not_empty |
exists | Não é null/undefined (string vazia ainda "existe") | {{input.data.id}} exists |
Tamanho de array: comparar um array a um número com == / != compara o tamanho (ex.: {{input.data.items}} == 3).
Datas: strings de data ISO são interpretadas para ordenação e igualdade.
Horário do dia: use {{system.current_hour}} (fuso do workflow) à esquerda — não literais 9 e 17 sem variáveis.
Ramo Else
Sempre conecte a saída Else para o caminho "nenhum case correspondeu" — mensagem de fallback, coluna padrão do CRM, notificação de erro, etc.
Se um case corresponder mas nenhuma aresta estiver conectada a esse handle, o engine recai na primeira conexão que não seja Else (caso extremo — prefira conexões explícitas).
Conexões
Cada case tem seu próprio handle à direita (com cor). Else é o handle inferior. Apenas um ramo executa por execução.
Dicas e boas práticas
- Ordene cases do mais específico ao mais geral. Primeira correspondência vence — coloque regras VIP raras antes do genérico "todo o resto".
- Use Else por segurança. Condições sem match que pulam trabalho silenciosamente são bug comum; Else pode registrar, alertar ou rotear para padrão.
- Prefira variáveis explícitas. Defina um nó Variável antes da Condição quando a lógica for complexa (
is_vip,has_phone) — os cases ficam legíveis. - Inspecione evaluations em testes. Expanda o nó Condição no histórico de execução para ver
field-resolved,value-resolvederesultpor linha. - Combine com Loop. Coloque Condição dentro de A cada item para filtrar quais itens recebem mensagens ou chamadas de API.
- Evite comparar literais crus para horário. Use
{{system.current_hour}},{{system.current_minute}}ou{{date:today}}de variáveis do workflow.
Exemplos de uso
Exemplo 1 — Rotear leads por score (webhook + IA)
Trigger: Webhook — envio de formulário.
Fluxo:
- OpenAI — classificar lead; score na saída
{{openai_1.result}} - Variável —
score= número parseado da resposta da IA - Condição
- Case Hot:
{{variables.score}}>=80→ CRM Upsert + Send Text para vendas - Case Warm:
{{variables.score}}>=50→ CRM Upsert + template de nutrição - Else → só CRM Upsert (coluna de nutrição)
- Case Hot:
- Retorno —
{ "tier": "{{condition_1.matched_case_id}}" }
Exemplo 2 — Portão de horário comercial
Trigger: Webhook — ticket de suporte inbound.
Fluxo:
- Condição
- Case Horário comercial em dia útil:
{{system.current_hour}}>=9AND{{system.current_hour}}<18AND verificação de dia útil via{{system.current_weekday}} - Else → Variável
deferred= true → Send Text "Responderemos amanhã" + Delay até a janela (veja Nó Delay)
- Case Horário comercial em dia útil:
- Case correspondente → atribuir conversa ao agente imediatamente
Exemplo 3 — Validar payload do webhook
Trigger: Webhook — provedor de pagamento.
Fluxo:
- Condição
- Case Valid:
{{trigger.body.event}}==payment.succeededAND{{trigger.body.amount}}is_not_empty - Else → Retorno
{ "ok": false, "reason": "ignored" }(parar)
- Case Valid:
- Match → CRM move card + Send Text com recibo
FAQ
Por que o ramo errado executou?
Um case superior correspondeu primeiro. Reordene cases ou aperte condições. Verifique evaluations no log de execução.
Por que nada rodou após a Condição?
Nenhum case correspondeu e nenhuma aresta Else conectada. Adicione um ramo Else.
Vários cases podem executar?
Não. Exatamente um ramo por execução (primeiro match ou Else).
Preciso de aspas em valores string?
Digite valores de comparação como texto simples na UI (paid, não "paid"). Variáveis usam sintaxe {{…}} em qualquer lado.
A Condição funciona em modo de teste?
Sim. Use trigger Manual e payload de teste que exercite cada case; use teste isolado do nó para checagens rápidas de operadores.
Posso comparar dois campos dinâmicos?
Sim. Coloque {{node_a.field}} à esquerda e {{node_b.field}} à direita com o operador adequado.
Artigos relacionados
Este artigo foi útil?
Precisa de mais ajuda? Falar com suporte