Automações

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.

Workflows > editor > Condition node with multiple cases Figura 1: Nó Condição com cases, operadores e ramo Else

O que faz

Em runtime o engine:

  1. Avalia cada case de cima para baixo.
  2. Dentro de um case, avalia linhas de condição combinadas com AND / OR.
  3. Resolve operandos esquerdo e direito (suporta expressões {{variable}} completas).
  4. Para no primeiro case que corresponder e encaminha a execução para a saída desse case.
  5. Se nenhum case corresponder, encaminha para a saída Else (else ou false).

A saída do nó (para depuração) inclui:

CampoSignificado
matched_case_idID do case vencedor, ou null se Else
matched_indexÍndice base zero do case, ou -1 para Else
evaluationsDetalhamento 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:

ParteDescrição
Operando esquerdoCampo ou expressão, ex.: {{trigger.body.status}}, {{variables.score}}, {{system.current_hour}}
OperadorRegra de comparação ou string (veja tabela abaixo)
Operando direitoValor ou expressão, ex.: paid, {{variables.threshold}}, 18

Entre linhas, escolha AND (todas devem passar) ou OR (qualquer uma passa).

Operadores

OperadorSignificadoExemplo
==Igual (números, datas, strings){{trigger.body.plan}} == pro
!=Diferente{{contact.country}} != BR
> / < / >= / <=Ordem numérica ou de data{{variables.total}} > 1000
containsSubstring{{trigger.body.message}} contains urgent
not_containsSubstring ausente{{input.data.email}} not_contains @test.
starts_withPrefixo{{contact.phone}} starts_with 55
ends_withSufixo{{trigger.body.file}} ends_with .pdf
is_emptyNull, undefined, "" ou array vazio{{variables.phone}} is_empty
is_not_emptyTem valor{{trigger.body.email}} is_not_empty
existsNã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-resolved e result por 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:

  1. OpenAI — classificar lead; score na saída {{openai_1.result}}
  2. Variávelscore = número parseado da resposta da IA
  3. Condição
    • Case Hot: {{variables.score}} >= 80CRM Upsert + Send Text para vendas
    • Case Warm: {{variables.score}} >= 50CRM Upsert + template de nutrição
    • Else → só CRM Upsert (coluna de nutrição)
  4. Retorno{ "tier": "{{condition_1.matched_case_id}}" }

Exemplo 2 — Portão de horário comercial

Trigger: Webhook — ticket de suporte inbound.

Fluxo:

  1. Condição
    • Case Horário comercial em dia útil: {{system.current_hour}} >= 9 AND {{system.current_hour}} < 18 AND verificação de dia útil via {{system.current_weekday}}
    • ElseVariável deferred = true → Send Text "Responderemos amanhã" + Delay até a janela (veja Nó Delay)
  2. Case correspondente → atribuir conversa ao agente imediatamente

Exemplo 3 — Validar payload do webhook

Trigger: Webhook — provedor de pagamento.

Fluxo:

  1. Condição
    • Case Valid: {{trigger.body.event}} == payment.succeeded AND {{trigger.body.amount}} is_not_empty
    • ElseRetorno { "ok": false, "reason": "ignored" } (parar)
  2. 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

Central de Ajuda