---
title: Se / Senão (condição)
description: Bifurque o fluxo com base em uma condição — variável, operador e valor — com suporte a listas, objetos e sub-condições.
---

<NoCard kind="if_else" categoria="Lógica" />

# Se / Senão (condição) — Tomada de decisão

<Secao icon="info">Para que serve</Secao>

É a bifurcação da estrada: o fluxo chega aqui, avalia uma condição e toma um caminho diferente dependendo da resposta. Se a condição for verdadeira, vai por um lado. Se for falsa, vai pelo outro.

<Secao icon="clock">Quando usar</Secao>

- Verificar a resposta do contato antes de continuar ("o contato disse 'sim' ou 'não'?").
- Tomar caminhos diferentes dependendo de dados do contato (plano, categoria, status).
- Checar se uma variável tem determinado valor antes de executar uma ação.
- Qualquer momento em que o fluxo precisa **decidir** entre duas ou mais possibilidades.

<Secao icon="list-checks">Passo a passo</Secao>

<Passos>
  <Passo>Arraste o bloco **Se / Senão (condição)** para o canvas a partir da categoria **Lógica**. <Captura legenda="Painel de busca de blocos aberto no canvas, com as categorias e a lista de nós disponíveis para arrastar" src="/img/flowbuilder-paleta-aberta.png" /></Passo>
  <Passo>Clique no bloco para abrir o painel de configuração.</Passo>
  <Passo>Configure a **condição IF**: selecione a variável, o operador e o valor a comparar.</Passo>
  <Passo>Se precisar de mais de duas possibilidades, clique em **+ Adicionar ELSE IF** e configure cada condição adicional.</Passo>
  <Passo>No canvas, cada condição gera uma **saída separada** (IF, ELSE IF 1, ELSE IF 2...) mais uma saída **ELSE** (para quando nenhuma condição for verdadeira). Conecte cada saída ao caminho correto. <Captura legenda="Fluxo de exemplo no canvas com um nó de condição gerando duas saídas (IF/ELSE) conectadas a caminhos diferentes" src="/img/flow-exemplo-condicao-branches.png" /></Passo>
</Passos>

<Secao icon="sliders-horizontal">Campos</Secao>

| Campo | O que faz |
|-------|-----------|
| Variável | Qual dado você quer avaliar (resposta do contato, campo do CRM, variável do fluxo, etc.) |
| Operador | Como comparar: é igual a, contém, começa com, é maior que, está vazio, etc. |
| Valor | Com o que comparar a variável |
| ELSE IF | Condições adicionais (opcional; cria mais saídas no canvas) |
| Título | Nome interno do nó no canvas |

### Operadores disponíveis

| Operador | Exemplo de uso |
|----------|---------------|
| **é igual a** | `resposta` é igual a `sim` |
| **não é igual a** | `status` não é igual a `ativo` |
| **contém** | `mensagem` contém `urgente` (texto) ou `tags_contato` contém `vip` (lista) |
| **não contém** | `email` não contém `@` (texto) ou `tags_contato` não contém `bloqueado` (lista) |
| **começa com** | `cpf` começa com `123` |
| **termina com** | `email` termina com `@gmail.com` |
| **está vazio** | `telefone` está vazio |
| **não está vazio** | `nome` não está vazio |
| **é maior que / é maior ou igual a** | `valor` é maior que `1000` |
| **é menor que / é menor ou igual a** | `valor` é menor que `1000` |
| **está na lista / não está na lista** | `categoria` está na lista `vip, premium` |
| **contém todos** | `permissoes` contém todos `ler, escrever` (lista tem todos os valores informados) |
| **contém algum** | `canais_ativos` contém algum `whatsapp, email` (lista tem pelo menos um dos valores informados) |
| **quantidade igual a / maior que / menor que** | `itens_carrinho` quantidade igual a `0` |

### Operadores em variáveis de lista

Quando a variável escolhida é uma **lista** (ex.: `list_operator.result`, ou qualquer variável do tipo lista), os operadores **contém** e **não contém** passam a verificar se o valor é um dos itens da lista — não mais uma busca de um trecho dentro de um texto. Em variáveis de **texto**, esse comportamento de buscar um trecho é mantido (ex.: `mensagem` contém `urgente`). É o tipo da variável que decide como o operador se comporta.

Além disso, listas ganham operadores próprios:

- **contém todos** — todos os valores informados (separados por vírgula) estão na lista.
- **contém algum** — pelo menos um dos valores informados está na lista.
- **quantidade igual a / maior que / menor que** — compara o tamanho da lista com um número.

### Sub-condições para listas de objetos

Quando a lista é composta por **objetos** (ex.: uma lista de pedidos, cada um com `status`, `valor`, etc.), dá para checar uma condição sobre um campo específico de cada item, sem precisar de um nó Operações com lista antes. É a chamada **sub-condição de variável**.

- O operador principal define o agregado: **contém** (pelo menos um item da lista satisfaz a sub-condição), **não contém** (nenhum item satisfaz) ou **contém todos** (todos os itens satisfazem).
- Dentro da sub-condição, é possível combinar várias checagens de campo com **E** (todas) ou **OU** (qualquer uma) — igual à combinação de condições do próprio Se/Senão.
- Lista vazia: **contém** é sempre falso, **não contém** é sempre verdadeiro, **contém todos** é sempre falso.

**Exemplo:** variável `pedidos` (lista de objetos) → operador principal **contém** → sub-condição `status` é igual a `pago`. Lê-se como "SE pedidos contém item onde status é igual a 'pago'" — verdadeiro assim que existir ao menos um pedido pago na lista.

<Secao icon="circle-check">Exemplo</Secao>

Após perguntar "Você já é nosso cliente? (sim/não)", o fluxo usa IF/ELSE para decidir:

- **IF** `resposta` é igual a `sim` → direciona para o fluxo de cliente existente
- **ELSE IF** `resposta` é igual a `não` → direciona para o fluxo de cadastro
- **ELSE** → envia "Não entendi sua resposta. Digite 'sim' ou 'não', por favor."

<Captura legenda="Fluxo de exemplo no canvas com um nó de condição gerando duas saídas (IF/ELSE) conectadas a caminhos diferentes" src="/img/flow-exemplo-condicao-branches.png" />

<Secao icon="filter">Receita: filtrar uma lista antes do SE/SENÃO</Secao>

Um padrão muito comum: você tem uma lista (pedidos, agendamentos, tickets) vinda de uma API ou de uma [Busca de dados externos](/guia/flow-builder/dados/lista), e quer decidir o caminho do fluxo com base em "existe pelo menos um item que atende a uma condição?". A forma mais simples de resolver isso hoje é combinar o nó [Operações com lista](/guia/flow-builder/dados/lista) com um Se/Senão (condição) logo depois.

<Passos>
  <Passo>Antes do Se/Senão, adicione um nó **Operações com lista** e configure o **Filtrar por** com a condição desejada (ex.: campo `status`, operador igual a, valor `pago`).</Passo>
  <Passo>Conecte a saída do Operações com lista ao Se/Senão (condição).</Passo>
  <Passo>No Se/Senão, configure a condição IF com a variável <code v-pre>{{list_operator.result}}</code> e o operador **não está vazio**.</Passo>
  <Passo>Conecte a saída **IF** (lista filtrada não vazia) e a saída **ELSE** (nenhum item atendeu ao filtro) aos caminhos correspondentes.</Passo>
</Passos>

**Exemplo:** lista de pedidos do cliente → filtra `status` igual a `pago` → resultado em <code v-pre>{{list_operator.result}}</code>. Se esse resultado não estiver vazio, o cliente tem ao menos um pedido pago; direciona para o ramo "cliente tem pedido pago". Se estiver vazio, segue pelo ELSE.

<Dica>
Se você só precisa saber se existe *algum* item que bate com um campo (sem precisar da lista filtrada inteira), a [sub-condição de variável](#sub-condições-para-listas-de-objetos) permite fazer a mesma checagem direto no Se/Senão, sem precisar do nó Operações com lista antes.
</Dica>

<Dica>
Você pode encadear vários nós Se/Senão (condição) em sequência para criar lógicas complexas. Mas se tiver muitas condições, considere usar um [Classificador de Questões](/guia/flow-builder/ia/classificador) — ele usa IA para interpretar respostas livres e distribuir em categorias.
</Dica>

<Cuidado>
Sempre conecte a saída **ELSE** a algum bloco — mesmo que seja apenas uma mensagem de "não entendi". Deixar a saída ELSE desconectada faz o fluxo terminar silenciosamente quando nenhuma condição é atendida, e o contato fica sem resposta.
</Cuidado>

## Saiba mais

- [Operações com lista](/guia/flow-builder/dados/lista) — filtrar uma lista antes de checar a condição
- [Classificar pergunta](/guia/flow-builder/ia/classificador) — interpretar respostas livres com IA em vez de encadear vários IF/ELSE
- [Esperar Resposta de Texto](/guia/flow-builder/mensagem/esperar-texto) — coletar a resposta que alimenta a condição
