Manual Trigger
O Manual Trigger é o node mais fundamental do n8n, permitindo executar workflows manualmente. É essencial para testes, desenvolvimento e execução sob demanda de automações.
O que é o Manual Trigger?
O Manual Trigger permite:
- Executar workflows manualmente
- Testar automações durante desenvolvimento
- Fornecer dados de entrada para workflows
- Simular eventos e cenários específicos
- Executar workflows sob demanda
- Criar workflows independentes de eventos externos
Quando Usar o Manual Trigger
- Desenvolvimento e teste de workflows
- Execução manual de automações
- Simulação de dados de entrada
- Demonstração de funcionalidades
- Processamento sob demanda
- Workflows que não dependem de eventos
Configuração Básica
Estrutura do Manual Trigger
// Manual Trigger - Estrutura básica
{
"name": "Manual Trigger",
"description": "Executar workflow manualmente",
"options": {
"data": [
{
"name": "exemplo",
"value": "dados de teste"
}
]
}
}
Configuração de Dados de Entrada
1. Dados Simples
// Dados básicos
{
"name": "nome",
"value": "João Silva"
}
{
"name": "idade",
"value": 30
}
{
"name": "ativo",
"value": true
}
2. Dados Estruturados
// Objeto complexo
{
"name": "cliente",
"value": {
"id": 12345,
"nome": "João Silva",
"email": "joao@email.com",
"telefone": "(11) 99999-9999",
"ativo": true
}
}
3. Arrays de Dados
// Lista de itens
{
"name": "produtos",
"value": [
{
"id": 1,
"nome": "Notebook",
"preco": 2500.00
},
{
"id": 2,
"nome": "Mouse",
"preco": 50.00
}
]
}
4. Dados com Expressões
// Usar expressões para dados dinâmicos
{
"name": "data_atual",
"value": "{{ $now.toISOString() }}"
}
{
"name": "usuario",
"value": "{{ $env.USER || 'desenvolvedor' }}"
}
{
"name": "ambiente",
"value": "{{ $env.NODE_ENV || 'desenvolvimento' }}"
}
Exemplos Práticos
1. Teste de Validação de Dados
// Manual Trigger - Teste de validação
{
"name": "Teste Validação",
"description": "Testar validação de dados de cliente",
"options": {
"data": [
{
"name": "cliente_valido",
"value": {
"nome": "João Silva",
"email": "joao@email.com",
"cpf": "12345678901",
"idade": 25
}
},
{
"name": "cliente_invalido",
"value": {
"nome": "",
"email": "email_invalido",
"cpf": "123",
"idade": 15
}
}
]
}
}
2. Simulação de Pedido
// Manual Trigger - Simular pedido
{
"name": "Simular Pedido",
"description": "Testar processamento de pedido",
"options": {
"data": [
{
"name": "pedido",
"value": {
"numero": "PED-2024-001",
"cliente": {
"id": 12345,
"nome": "Maria Santos",
"email": "maria@email.com"
},
"itens": [
{
"produto_id": 1,
"nome": "Notebook Dell",
"quantidade": 1,
"preco_unitario": 3500.00
},
{
"produto_id": 2,
"nome": "Mouse Wireless",
"quantidade": 2,
"preco_unitario": 80.00
}
],
"total": 3660.00,
"status": "pendente"
}
}
]
}
}
3. Teste de API
// Manual Trigger - Teste de API
{
"name": "Teste API",
"description": "Testar integração com API externa",
"options": {
"data": [
{
"name": "configuracao_api",
"value": {
"url": "https://api.exemplo.com/dados",
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer token_teste"
},
"body": {
"cliente_id": 12345,
"acao": "consultar"
}
}
}
]
}
}
4. Simulação de Evento
// Manual Trigger - Simular evento
{
"name": "Simular Evento",
"description": "Simular evento de sistema",
"options": {
"data": [
{
"name": "evento",
"value": {
"tipo": "cliente_novo",
"timestamp": "{{ $now.toISOString() }}",
"dados": {
"cliente_id": 67890,
"nome": "Pedro Costa",
"email": "pedro@email.com",
"origem": "site"
},
"metadata": {
"ip": "192.168.1.100",
"user_agent": "Mozilla/5.0...",
"referrer": "https://google.com"
}
}
}
]
}
}
5. Teste de Processamento em Lote
// Manual Trigger - Processamento em lote
{
"name": "Teste Lote",
"description": "Testar processamento de múltiplos itens",
"options": {
"data": [
{
"name": "itens_lote",
"value": [
{
"id": 1,
"nome": "Produto A",
"categoria": "eletronicos",
"preco": 100.00
},
{
"id": 2,
"nome": "Produto B",
"categoria": "roupas",
"preco": 50.00
},
{
"id": 3,
"nome": "Produto C",
"categoria": "eletronicos",
"preco": 200.00
},
{
"id": 4,
"nome": "Produto D",
"categoria": "livros",
"preco": 30.00
}
]
}
]
}
}
Casos de Uso Avançados
1. Teste com Diferentes Cenários
// Manual Trigger - Múltiplos cenários
{
"name": "Teste Cenários",
"description": "Testar diferentes cenários de negócio",
"options": {
"data": [
{
"name": "cenario_sucesso",
"value": {
"tipo": "sucesso",
"dados": {
"cliente": "vip",
"valor": 5000,
"status": "aprovado"
}
}
},
{
"name": "cenario_erro",
"value": {
"tipo": "erro",
"dados": {
"cliente": "novo",
"valor": 10000,
"status": "pendente"
}
}
},
{
"name": "cenario_limite",
"value": {
"tipo": "limite",
"dados": {
"cliente": "regular",
"valor": 1000,
"status": "rejeitado"
}
}
}
]
}
}
2. Simulação de Dados Reais
// Manual Trigger - Dados realistas
{
"name": "Dados Reais",
"description": "Simular dados de produção",
"options": {
"data": [
{
"name": "transacao_real",
"value": {
"id": "{{ $now.toMillis() }}",
"cliente": {
"id": "{{ Math.floor(Math.random() * 10000) }}",
"nome": "{{ ['João', 'Maria', 'Pedro', 'Ana'][Math.floor(Math.random() * 4)] }} {{ ['Silva', 'Santos', 'Costa', 'Oliveira'][Math.floor(Math.random() * 4)] }}",
"email": "{{ ['joao', 'maria', 'pedro', 'ana'][Math.floor(Math.random() * 4)] }}@email.com"
},
"produto": {
"id": "{{ Math.floor(Math.random() * 100) }}",
"nome": "{{ ['Notebook', 'Mouse', 'Teclado', 'Monitor'][Math.floor(Math.random() * 4)] }}",
"preco": "{{ Math.floor(Math.random() * 1000) + 100 }}"
},
"timestamp": "{{ $now.toISOString() }}",
"status": "{{ ['aprovado', 'pendente', 'rejeitado'][Math.floor(Math.random() * 3)] }}"
}
}
]
}
}
3. Teste de Performance
// Manual Trigger - Teste de performance
{
"name": "Teste Performance",
"description": "Testar performance com grandes volumes",
"options": {
"data": [
{
"name": "dados_grande_volume",
"value": "{{ Array.from({length: 1000}, (_, i) => ({ id: i + 1, nome: `Item ${i + 1}`, valor: Math.random() * 1000 })) }}"
}
]
}
}
4. Simulação de Erros
// Manual Trigger - Simular erros
{
"name": "Simular Erros",
"description": "Testar tratamento de erros",
"options": {
"data": [
{
"name": "erro_conectividade",
"value": {
"tipo": "erro_rede",
"mensagem": "Timeout na conexão",
"codigo": 408,
"retry": true
}
},
{
"name": "erro_dados",
"value": {
"tipo": "erro_validacao",
"mensagem": "Dados inválidos",
"campos": ["email", "cpf"],
"retry": false
}
},
{
"name": "erro_sistema",
"value": {
"tipo": "erro_interno",
"mensagem": "Erro interno do servidor",
"codigo": 500,
"retry": true
}
}
]
}
}
Boas Práticas
1. Nomenclatura Descritiva
// ✅ Bom: Nome descritivo
{
"name": "Teste Validação Cliente VIP"
}
// ❌ Evitar: Nome genérico
{
"name": "Teste"
}
2. Documentação Clara
// ✅ Bom: Descrição detalhada
{
"description": "Testar validação de dados de cliente VIP com valores altos"
}
// ❌ Evitar: Descrição vaga
{
"description": "Teste"
}
3. Dados Realistas
// ✅ Bom: Dados que simulam produção
{
"value": {
"nome": "João Silva",
"email": "joao.silva@empresa.com",
"cpf": "12345678901"
}
}
// ❌ Evitar: Dados irreais
{
"value": {
"nome": "teste",
"email": "teste@teste.com",
"cpf": "00000000000"
}
}
4. Múltiplos Cenários
// ✅ Bom: Testar diferentes cenários
{
"data": [
{ "name": "sucesso", "value": {...} },
{ "name": "erro", "value": {...} },
{ "name": "limite", "value": {...} }
]
}
// ❌ Evitar: Apenas um cenário
{
"data": [
{ "name": "teste", "value": {...} }
]
}
Troubleshooting
Problemas Comuns
Workflow não executa
- Verifique se o Manual Trigger está conectado
- Confirme se há dados de entrada
- Teste com dados simples
- Verifique logs de erro
Dados não aparecem
- Verifique a estrutura dos dados
- Confirme se os campos estão corretos
- Teste com dados básicos
- Use Debug Helper
Performance lenta
- Reduza volume de dados de teste
- Simplifique expressões
- Use dados otimizados
- Monitore recursos
Debug
// Code Node - Debug de Manual Trigger
const debugManualTrigger = (dados) => {
console.log('=== DEBUG MANUAL TRIGGER ===');
console.log('Dados de entrada:', dados);
console.log('Tipo de dados:', typeof dados);
console.log('É array:', Array.isArray(dados));
console.log('Número de itens:', Array.isArray(dados) ? dados.length : 1);
console.log('===========================');
return dados;
};
// Usar após o Manual Trigger
return { json: debugManualTrigger($json) };
Integração com Outros Nodes
1. Manual Trigger + Set Node
// Manual Trigger - Dados básicos
{
"name": "dados_cliente",
"value": {
"nome": "João Silva",
"email": "joao@email.com"
}
}
// Set Node - Enriquecer dados
{
"mode": "keepAllSet",
"values": {
"string": [
{
"name": "timestamp_processamento",
"value": "{{ $now.toISOString() }}"
},
{
"name": "workflow_id",
"value": "{{ $workflow.id }}"
}
]
}
}
2. Manual Trigger + If Node
// Manual Trigger - Dados de teste
{
"name": "dados_teste",
"value": {
"tipo": "cliente_vip",
"valor": 5000
}
}
// If Node - Roteamento baseado em dados
{
"condition": "{{ $json.tipo === 'cliente_vip' && $json.valor > 1000 }}",
"true": "Processamento VIP",
"false": "Processamento Regular"
}
3. Manual Trigger + HTTP Request
// Manual Trigger - Configuração de API
{
"name": "config_api",
"value": {
"url": "https://api.exemplo.com/dados",
"method": "POST",
"headers": {
"Content-Type": "application/json"
}
}
}
// HTTP Request - Usar configuração
{
"url": "{{ $json.url }}",
"method": "{{ $json.method }}",
"headers": "{{ $json.headers }}"
}
Próximos Passos
- Schedule Trigger - Execução automática
- Webhook Trigger - Receber dados externos
- If Node - Controle de fluxo
- Set Node - Manipulação de dados
- Debugging - Técnicas de debug