If Node
O If Node é um dos nodes mais importantes do n8n para controle de fluxo. Ele permite criar condições e tomar decisões baseadas em dados, direcionando o workflow por diferentes caminhos.
O que é o If Node?
O If Node permite:
- Criar condições baseadas em dados
- Tomar decisões automaticamente
- Direcionar fluxo para diferentes caminhos
- Validar dados antes do processamento
- Implementar lógica de negócio complexa
- Criar workflows dinâmicos e inteligentes
Quando Usar o If Node
- Validação de dados de entrada
- Classificação de itens por critérios
- Filtragem de dados
- Roteamento para diferentes processos
- Tratamento de erros condicional
- Lógica de negócio baseada em regras
Configuração Básica
Estrutura do If Node
// If Node - Estrutura básica
{
"condition": "{{ $json.valor > 100 }}",
"true": "Caminho para valores altos",
"false": "Caminho para valores baixos"
}
Tipos de Condições
1. Condição Simples
// Verificar se campo existe
{{ $json.nome }}
// Verificar se valor é verdadeiro
{{ $json.ativo === true }}
// Verificar se string não está vazia
{{ $json.email && $json.email.length > 0 }}
2. Comparações Numéricas
// Maior que
{{ $json.valor > 100 }}
// Menor que
{{ $json.valor < 50 }}
// Igual a
{{ $json.quantidade === 10 }}
// Diferente de
{{ $json.status !== 'ativo' }}
// Maior ou igual
{{ $json.idade >= 18 }}
// Menor ou igual
{{ $json.preco <= 1000 }}
3. Comparações de String
// Igual a (case sensitive)
{{ $json.categoria === 'Premium' }}
// Igual a (case insensitive)
{{ $json.categoria.toLowerCase() === 'premium' }}
// Contém texto
{{ $json.descricao.includes('importante') }}
// Começa com
{{ $json.nome.startsWith('João') }}
// Termina com
{{ $json.email.endsWith('@gmail.com') }}
// Regex
{{ /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test($json.email) }}
4. Condições com Arrays
// Verificar se array contém valor
{{ $json.tags.includes('urgente') }}
// Verificar tamanho do array
{{ $json.itens.length > 0 }}
// Verificar se array está vazio
{{ $json.produtos.length === 0 }}
// Verificar se todos os itens atendem condição
{{ $json.numeros.every(num => num > 0) }}
// Verificar se algum item atende condição
{{ $json.status.some(s => s === 'erro') }}
5. Condições com Datas
// Verificar se data é hoje
{{ $json.data === $today }}
// Verificar se data é futura
{{ new Date($json.data) > new Date() }}
// Verificar se data é passada
{{ new Date($json.data) < new Date() }}
// Verificar se data está em intervalo
{{ new Date($json.data) >= new Date('2024-01-01') &&
new Date($json.data) <= new Date('2024-12-31') }}
// Verificar se é fim de semana
{{ [0, 6].includes(new Date($json.data).getDay()) }}
Operadores Lógicos
1. Operador AND (&&)
// Múltiplas condições (todas devem ser verdadeiras)
{{ $json.ativo && $json.saldo > 0 && $json.email }}
// Exemplo prático
{{ $json.idade >= 18 && $json.cpf && $json.email.includes('@') }}
2. Operador OR (||)
// Múltiplas condições (pelo menos uma deve ser verdadeira)
{{ $json.categoria === 'Premium' || $json.valor > 1000 }}
// Exemplo prático
{{ $json.status === 'ativo' || $json.status === 'pendente' }}
3. Operador NOT (!)
// Negar condição
{{ !$json.inativo }}
// Exemplo prático
{{ !$json.erro && $json.dados }}
4. Combinação de Operadores
// Condição complexa
{{ ($json.ativo && $json.saldo > 0) || $json.admin }}
// Exemplo prático
{{ ($json.idade >= 18 && $json.cpf) || $json.categoria === 'VIP' }}
Exemplos Práticos
1. Validação de Dados
// If Node - Validação de cliente
{
"condition": "{{ $json.nome && $json.email && $json.cpf && $json.idade >= 18 }}",
"true": "Cliente Válido",
"false": "Cliente Inválido"
}
Caminho "Cliente Válido":
- Processar dados do cliente
- Salvar no banco de dados
- Enviar confirmação
Caminho "Cliente Inválido":
- Registrar erro
- Enviar notificação
- Solicitar dados corretos
2. Classificação por Valor
// If Node - Classificação de pedido
{
"condition": "{{ $json.valor_total > 1000 }}",
"true": "Pedido Premium",
"false": "Pedido Standard"
}
Caminho "Pedido Premium":
- Aplicar desconto especial
- Enviar para processamento prioritário
- Notificar gerente
Caminho "Pedido Standard":
- Processamento normal
- Aplicar desconto padrão
- Enviar confirmação
3. Filtragem por Status
// If Node - Filtragem por status
{
"condition": "{{ $json.status === 'aprovado' }}",
"true": "Processar Aprovação",
"false": "Aguardar Aprovação"
}
Caminho "Processar Aprovação":
- Executar workflow de aprovação
- Enviar notificação
- Atualizar status
Caminho "Aguardar Aprovação":
- Salvar para processamento posterior
- Enviar lembrança
- Monitorar status
4. Tratamento de Erros
// If Node - Tratamento de erro
{
"condition": "{{ $json.erro || $json.status === 'falha' }}",
"true": "Tratar Erro",
"false": "Processar Sucesso"
}
Caminho "Tratar Erro":
- Registrar erro no log
- Enviar alerta
- Tentar reprocessamento
Caminho "Processar Sucesso":
- Continuar processamento
- Salvar resultado
- Enviar confirmação
5. Roteamento por Categoria
// If Node - Roteamento por categoria
{
"condition": "{{ $json.categoria === 'financeiro' }}",
"true": "Processamento Financeiro",
"false": "Processamento Geral"
}
Caminho "Processamento Financeiro":
- Validações específicas
- Aprovação obrigatória
- Auditoria detalhada
Caminho "Processamento Geral":
- Validações básicas
- Aprovação automática
- Processamento direto
Workflows Complexos
1. Múltiplos If Nodes em Sequência
Manual Trigger → If (Validação) → If (Classificação) → If (Processamento)
↓ ↓ ↓
Validação OK Premium Processar
↓ ↓ ↓
Validação Falhou Standard Aguardar
2. If Node com Switch Node
// Switch Node - Múltiplas condições
{
"rules": [
{
"condition": "{{ $json.categoria === 'urgente' }}",
"output": "Processamento Urgente"
},
{
"condition": "{{ $json.categoria === 'normal' }}",
"output": "Processamento Normal"
},
{
"condition": "{{ $json.categoria === 'baixa' }}",
"output": "Processamento Baixa Prioridade"
}
],
"default": "Processamento Padrão"
}
3. If Node com Merge
If Node A → Processamento A
↓
If Node B → Processamento B
↓
Merge Node → Resultado Final
Boas Práticas
1. Condições Claras
// ✅ Bom: Condição clara e legível
{{ $json.ativo && $json.saldo > 0 }}
// ❌ Evitar: Condição confusa
{{ $json.a && $json.s > 0 }}
2. Validação de Dados
// ✅ Bom: Validar antes de usar
{{ $json.valor && typeof $json.valor === 'number' && $json.valor > 0 }}
// ❌ Evitar: Usar sem validação
{{ $json.valor > 0 }}
3. Condições Simples
// ✅ Bom: Condições simples
{{ $json.status === 'ativo' }}
// ❌ Evitar: Condições muito complexas
{{ $json.status === 'ativo' && $json.saldo > 0 && $json.email && $json.cpf && $json.idade >= 18 }}
4. Nomenclatura Descritiva
// ✅ Bom: Nomes descritivos
"Cliente Válido"
"Pedido Premium"
"Processamento Urgente"
// ❌ Evitar: Nomes genéricos
"True"
"False"
"Option 1"
5. Documentação
// ✅ Bom: Documentar condições
// Condição: Verifica se cliente tem dados obrigatórios e idade mínima
{{ $json.nome && $json.email && $json.cpf && $json.idade >= 18 }}
// ❌ Evitar: Condição sem contexto
{{ $json.a && $json.b && $json.c }}
Troubleshooting
Problemas Comuns
Condição sempre verdadeira
- Verifique se está usando operadores corretos
- Confirme se os campos existem
- Teste com dados de exemplo
- Use Debug Helper para inspecionar dados
Condição sempre falsa
- Verifique se os valores estão corretos
- Confirme se os tipos de dados estão corretos
- Teste com valores simples
- Verifique se há espaços em branco
Workflow não segue caminho esperado
- Verifique a lógica da condição
- Confirme se os dados estão corretos
- Teste com diferentes cenários
- Use Debug Helper para ver dados
Debug
// Code Node - Debug de condição
const debugCondicao = (dados, condicao) => {
console.log('=== DEBUG CONDIÇÃO ===');
console.log('Dados:', dados);
console.log('Condição:', condicao);
console.log('Resultado:', eval(condicao));
console.log('=====================');
return eval(condicao);
};
// Usar no If Node
{{ debugCondicao($json, '$json.ativo && $json.saldo > 0') }}
Exemplos Avançados
1. Validação de Email
// If Node - Validação de email
{
"condition": "{{ /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test($json.email) }}",
"true": "Email Válido",
"false": "Email Inválido"
}
2. Verificação de CPF
// If Node - Verificação de CPF
{
"condition": "{{ /^\d{3}\.\d{3}\.\d{3}-\d{2}$/.test($json.cpf) }}",
"true": "CPF Válido",
"false": "CPF Inválido"
}
3. Classificação de Cliente
// If Node - Classificação de cliente
{
"condition": "{{ $json.valor_total > 10000 || $json.categoria === 'VIP' }}",
"true": "Cliente Premium",
"false": "Cliente Regular"
}
4. Verificação de Horário
// If Node - Verificação de horário comercial
{
"condition": "{{ new Date().getHours() >= 8 && new Date().getHours() <= 18 && new Date().getDay() >= 1 && new Date().getDay() <= 5 }}",
"true": "Horário Comercial",
"false": "Fora do Horário"
}
5. Validação de Dados Obrigatórios
// If Node - Validação de dados obrigatórios
{
"condition": "{{ $json.nome && $json.nome.trim().length > 0 && $json.email && $json.email.trim().length > 0 && $json.telefone && $json.telefone.trim().length > 0 }}",
"true": "Dados Completos",
"false": "Dados Incompletos"
}
Próximos Passos
- Switch Node - Múltiplas condições
- Merge Node - Combinar dados
- Code Node - Lógica customizada
- Expressões n8n - Usar expressões em condições
- Tratamento de Erros - Lidar com falhas