Manual Trigger
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
Dados Simples
Dados básicos para teste:
{
"name": "nome",
"value": "João Silva"
}
{
"name": "idade",
"value": 30
}
{
"name": "ativo",
"value": true
}
Dados Estruturados
Objeto complexo com múltiplos campos:
{
"name": "cliente",
"value": {
"id": 12345,
"nome": "João Silva",
"email": "joao@email.com",
"telefone": "(11) 99999-9999",
"ativo": true
}
}
Arrays de Dados
Lista de itens para processamento em lote:
{
"name": "produtos",
"value": [
{
"id": 1,
"nome": "Notebook",
"preco": 2500.00
},
{
"id": 2,
"nome": "Mouse",
"preco": 50.00
}
]
}
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
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
}
}
]
}
}
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"
}
}
]
}
}
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"
}
}
}
]
}
}
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": "SEU_IP_INTERNO00",
"user_agent": "Mozilla/5.0...",
"referrer": "https://google.com"
}
}
}
]
}
}
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
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"
}
}
}
]
}
}
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)]}}"
}
}
]
}
}
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 })) }}"
}
]
}
}
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
Nomenclatura Descritiva
// ✅ Bom: Nome descritivo
{
"name": "Teste Validação Cliente VIP"
}
// ❌ Evitar: Nome genérico
{
"name": "Teste"
}
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"
}
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"
}
}
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
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
Code Node - Debug de Manual Trigger:
function debugManualTrigger(data) {
console.log('Dados do Manual Trigger:', data);
return {
timestamp: new Date().toISOString(),
dados: data,
workflow_id: $workflow.id
};
}
// Usar após o Manual Trigger
return { json: debugManualTrigger($json) };
Integração com Outros Nodes
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}}"
}
]
}
}
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"
}
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