Pular para o conteúdo principal

Node Switch

O node Switch é uma ferramenta avançada do n8n para controle de fluxo com múltiplas condições. Ele permite criar workflows dinâmicos com vários caminhos baseados em diferentes critérios.

Quando usar o Switch

O node Switch é ideal para:

  • Classificação de dados por múltiplos critérios
  • Roteamento para diferentes processos
  • Validação com múltiplas regras
  • Processamento paralelo de dados
  • Workflows com muitas condições
  • Lógica de negócio complexa

Configuração Básica

Estrutura do Switch Node

// Switch Node - Estrutura básica
{
  "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"
}

Tipos de Condições

Condições Simples

// Verificar valor exato
{
  "condition": "{{$json.status === 'ativo'}}",
  "output": "Cliente Ativo"
}

// Verificar múltiplos valores
{
  "condition": "{{$json.categoria === 'premium' || $json.categoria === 'vip'}}",
  "output": "Cliente Premium"
}

// Verificar se campo existe
{
  "condition": "{{$json.email && $json.email.length > 0}}",
  "output": "Email Válido"
}

Comparações Numéricas

// Faixas de valor
{
  "condition": "{{$json.valor > 10000}}",
  "output": "Valor Alto"
}

// Múltiplas faixas
{
  "condition": "{{$json.valor >= 1000 && $json.valor <= 5000}}",
  "output": "Valor Médio"
}

// Comparações complexas
{
  "condition": "{{$json.idade >= 18 && $json.idade <= 65}}",
  "output": "Idade Válida"
}

Comparações de String

// Verificar início de string
{
  "condition": "{{$json.email.startsWith('admin')}}",
  "output": "Administrador"
}

// Verificar fim de string
{
  "condition": "{{$json.arquivo.endsWith('.pdf')}}",
  "output": "Documento PDF"
}

// Verificar conteúdo
{
  "condition": "{{$json.descricao.includes('urgente')}}",
  "output": "Urgente"
}

// Regex
{
  "condition": "{{/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test($json.email)}}",
  "output": "Email Válido"
}

Condições com Arrays

// Verificar se array contém valor
{
  "condition": "{{$json.tags.includes('importante')}}",
  "output": "Tag Importante"
}

// Verificar tamanho do array
{
  "condition": "{{$json.itens.length > 10}}",
  "output": "Muitos Itens"
}

// Verificar se array está vazio
{
  "condition": "{{$json.produtos.length === 0}}",
  "output": "Sem Produtos"
}

Condições com Datas

// Verificar se é hoje
{
  "condition": "{{$json.data === $today}}",
  "output": "Hoje"
}

// Verificar se é fim de semana
{
  "condition": "{{[0, 6].includes(new Date($json.data).getDay())}}",
  "output": "Fim de Semana"
}

// Verificar se é horário comercial
{
  "condition": "{{new Date().getHours() >= 8 && new Date().getHours() <= 18}}",
  "output": "Horário Comercial"
}

Exemplos Práticos

Exemplo 1: Classificação de Clientes

// Switch Node - Classificação de clientes
{
  "rules": [
    {
      "condition": "{{$json.valor_total > 10000 && $json.frequencia > 10}}",
      "output": "Cliente VIP"
    },
    {
      "condition": "{{$json.valor_total > 5000 || $json.categoria === 'premium'}}",
      "output": "Cliente Premium"
    },
    {
      "condition": "{{$json.valor_total > 1000 && $json.ativo}}",
      "output": "Cliente Ativo"
    },
    {
      "condition": "{{$json.ativo}}",
      "output": "Cliente Regular"
    }
  ],
  "default": "Cliente Inativo"
}

Exemplo 2: Roteamento de Pedidos

// Switch Node - Roteamento de pedidos
{
  "rules": [
    {
      "condition": "{{$json.urgente && $json.valor > 5000}}",
      "output": "Aprovação Gerencial"
    },
    {
      "condition": "{{$json.categoria === 'financeiro'}}",
      "output": "Aprovação Financeira"
    },
    {
      "condition": "{{$json.valor > 1000}}",
      "output": "Aprovação Supervisor"
    },
    {
      "condition": "{{$json.status === 'rascunho'}}",
      "output": "Aguardando Finalização"
    }
  ],
  "default": "Aprovação Automática"
}

Exemplo 3: Validação de Dados

// Switch Node - Validação de dados
{
  "rules": [
    {
      "condition": "{{!$json.nome || $json.nome.length < 2}}",
      "output": "Nome Inválido"
    },
    {
      "condition": "{{!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test($json.email)}}",
      "output": "Email Inválido"
    },
    {
      "condition": "{{!$json.cpf || $json.cpf.length !== 11}}",
      "output": "CPF Inválido"
    },
    {
      "condition": "{{$json.idade < 18}}",
      "output": "Menor de Idade"
    }
  ],
  "default": "Dados Válidos"
}

Exemplo 4: Processamento por Região

// Switch Node - Processamento por região
{
  "rules": [
    {
      "condition": "{{$json.regiao === 'norte'}}",
      "output": "Processamento Norte"
    },
    {
      "condition": "{{$json.regiao === 'nordeste'}}",
      "output": "Processamento Nordeste"
    },
    {
      "condition": "{{$json.regiao === 'centro-oeste'}}",
      "output": "Processamento Centro-Oeste"
    },
    {
      "condition": "{{$json.regiao === 'sudeste'}}",
      "output": "Processamento Sudeste"
    },
    {
      "condition": "{{$json.regiao === 'sul'}}",
      "output": "Processamento Sul"
    }
  ],
  "default": "Região Não Identificada"
}

Exemplo 5: Análise de Performance

// Switch Node - Análise de performance
{
  "rules": [
    {
      "condition": "{{$json.tempo_execucao < 1000}}",
      "output": "Performance Excelente"
    },
    {
      "condition": "{{$json.tempo_execucao >= 1000 && $json.tempo_execucao < 5000}}",
      "output": "Performance Boa"
    },
    {
      "condition": "{{$json.tempo_execucao >= 5000 && $json.tempo_execucao < 10000}}",
      "output": "Performance Regular"
    },
    {
      "condition": "{{$json.tempo_execucao >= 10000}}",
      "output": "Performance Ruim"
    }
  ],
  "default": "Performance Não Medida"
}

Casos de Uso Avançados

Múltiplas Condições Aninhadas

// Switch Node - Condições complexas
{
  "rules": [
    {
      "condition": "{{$json.categoria === 'urgente' && $json.valor > 5000 && $json.cliente_vip}}",
      "output": "Processamento VIP Urgente"
    },
    {
      "condition": "{{$json.categoria === 'urgente' && $json.valor > 5000}}",
      "output": "Processamento Urgente Alto Valor"
    },
    {
      "condition": "{{$json.categoria === 'urgente'}}",
      "output": "Processamento Urgente"
    },
    {
      "condition": "{{$json.valor > 10000}}",
      "output": "Processamento Alto Valor"
    },
    {
      "condition": "{{$json.cliente_vip}}",
      "output": "Processamento VIP"
    }
  ],
  "default": "Processamento Padrão"
}

Roteamento Dinâmico

// Switch Node - Roteamento dinâmico
{
  "rules": [
    {
      "condition": "{{$json.tipo === 'venda' && $json.valor > 1000}}",
      "output": "{{'Venda_' + $json.categoria + '_Alto_Valor'}}"
    },
    {
      "condition": "{{$json.tipo === 'venda'}}",
      "output": "{{'Venda_' + $json.categoria}}"
    },
    {
      "condition": "{{$json.tipo === 'suporte' && $json.prioridade === 'alta'}}",
      "output": "Suporte_Urgente"
    },
    {
      "condition": "{{$json.tipo === 'suporte'}}",
      "output": "Suporte_Regular"
    }
  ],
  "default": "Processamento_Geral"
}

Validação em Etapas

// Switch Node - Validação em etapas
{
  "rules": [
    {
      "condition": "{{!$json.dados_basicos}}",
      "output": "Validar Dados Básicos"
    },
    {
      "condition": "{{!$json.dados_financeiros}}",
      "output": "Validar Dados Financeiros"
    },
    {
      "condition": "{{!$json.documentos}}",
      "output": "Validar Documentos"
    },
    {
      "condition": "{{!$json.aprovacao}}",
      "output": "Aguardar Aprovação"
    }
  ],
  "default": "Processamento Completo"
}

Análise de Tendências

// Switch Node - Análise de tendências
{
  "rules": [
    {
      "condition": "{{$json.crescimento > 20 && $json.tendencia === 'positiva'}}",
      "output": "Crescimento Forte"
    },
    {
      "condition": "{{$json.crescimento > 10 && $json.tendencia === 'positiva'}}",
      "output": "Crescimento Moderado"
    },
    {
      "condition": "{{$json.crescimento > 0}}",
      "output": "Crescimento Leve"
    },
    {
      "condition": "{{$json.crescimento < 0 && $json.tendencia === 'negativa'}}",
      "output": "Declínio"
    },
    {
      "condition": "{{$json.crescimento === 0}}",
      "output": "Estável"
    }
  ],
  "default": "Tendência Indefinida"
}

Workflows Complexos

Switch Node com Merge

Switch Node Aninhado

// Primeiro Switch - Categoria
{
  "rules": [
    {
      "condition": "{{$json.categoria === 'vendas'}}",
      "output": "Switch Vendas"
    },
    {
      "condition": "{{$json.categoria === 'suporte'}}",
      "output": "Switch Suporte"
    }
  ]
}

// Switch Vendas - Tipo de venda
{
  "rules": [
    {
      "condition": "{{$json.valor > 1000}}",
      "output": "Venda Alto Valor"
    },
    {
      "condition": "{{$json.valor > 500}}",
      "output": "Venda Médio Valor"
    }
  ],
  "default": "Venda Baixo Valor"
}

Switch Node com Paralelização

Boas Práticas

Ordem das Condições

// ✅ Bom: Condições mais específicas primeiro
{
  "rules": [
    {
      "condition": "{{$json.urgente && $json.valor > 10000}}",
      "output": "Máxima Prioridade"
    },
    {
      "condition": "{{$json.urgente}}",
      "output": "Alta Prioridade"
    },
    {
      "condition": "{{$json.valor > 1000}}",
      "output": "Média Prioridade"
    }
  ]
}

// ❌ Evitar: Condições genéricas primeiro
{
  "rules": [
    {
      "condition": "{{$json.valor > 1000}}",
      "output": "Média Prioridade"
    },
    {
      "condition": "{{$json.urgente}}",
      "output": "Alta Prioridade"
    }
  ]
}

Nomenclatura de Saídas

// ✅ Bom: Nomes descritivos
{
  "output": "Processamento_Urgente_Alto_Valor"
}

// ❌ Evitar: Nomes genéricos
{
  "output": "Option1"
}

Condições Simples

// ✅ Bom: Condições claras
{
  "condition": "{{$json.status === 'ativo' && $json.valor > 1000}}"
}

// ❌ Evitar: Condições muito complexas
{
  "condition": "{{$json.status === 'ativo' && $json.valor > 1000 && $json.categoria === 'premium' && $json.regiao === 'sudeste' && $json.idade >= 18}}"
}

Uso do Default

// ✅ Bom: Sempre definir default
{
  "rules": [...],
  "default": "Processamento Padrão"
}

// ❌ Evitar: Deixar sem default
{
  "rules": [...]
}

Troubleshooting

Problemas Comuns

Workflow não segue caminho esperado

  • Verifique a ordem das condições
  • Confirme se os dados estão corretos
  • Teste com dados de exemplo
  • Use Debug Helper para ver dados

Condições não funcionam

  • Verifique sintaxe das expressões
  • Confirme se os campos existem
  • Teste condições individualmente
  • Verifique tipos de dados

Performance lenta

  • Reduza número de condições
  • Simplifique expressões
  • Use condições eficientes
  • Considere usar If Nodes separados

Debug de Switch Node

// Função de debug para Switch Node
function debugSwitch(dados) {
  console.log('Dados recebidos:', dados);
  console.log('Campos disponíveis:', Object.keys(dados));
  console.log('Exemplo de item:', dados[0]);
  console.log('==================');
  
  return dados;
}

// Usar antes do Switch Node
return { json: debugSwitch($json) };

Integração com Outros Nós

Switch Node com Set Node

// Switch Node - Classificar dados
{
  "rules": [
    {
      "condition": "{{$json.valor > 1000}}",
      "output": "Alto Valor"
    }
  ],
  "default": "Baixo Valor"
}

// Set Node - Adicionar metadados
{
  "mode": "keepAllSet",
  "values": {
    "string": [
      {
        "name": "categoria_processamento",
        "value": "{{$json.categoria}}"
      },
      {
        "name": "timestamp_processamento",
        "value": "{{$now.toISOString()}}"
      }
    ]
  }
}

Switch Node com HTTP Request

// Switch Node - Rotear para APIs diferentes
{
  "rules": [
    {
      "condition": "{{$json.tipo === 'cliente'}}",
      "output": "API Clientes"
    },
    {
      "condition": "{{$json.tipo === 'produto'}}",
      "output": "API Produtos"
    }
  ],
  "default": "API Geral"
}

// HTTP Request - Usar endpoint dinâmico
{
  "url": "{{$json.endpoint}}",
  "method": "POST",
  "body": "{{$json.payload}}"
}

Próximos Passos