- Instalação
- Configuração Básica
- Criando sua Primeira Rota
- Integrando com Evolution API
- Exemplos Práticos
- Troubleshooting
cd evolution-router
cp .env.example .env
# Editar .env com suas configurações
docker-compose up -dcd evolution-router
cp .env.example .env
# Editar .env com suas configurações
docker-compose -f docker-compose.full.yml up -dcd evolution-router
cp .env.example .env
go mod download
go run cmd/router/main.goEdite o arquivo .env:
# Porta do servidor
SERVER_PORT=3000
# Database
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_USER=router
POSTGRES_PASSWORD=router123
POSTGRES_DB=evolution_router
# Chave de API (IMPORTANTE: Mude isso!)
API_KEY=sua-chave-super-segura-aquicurl http://localhost:3000/healthResposta esperada:
{"status":"ok"}curl -X POST http://localhost:3000/api/v1/routes \
-H "X-API-Key: sua-chave-super-segura-aqui" \
-H "Content-Type: application/json" \
-d '{
"name": "Mensagens para CRM",
"description": "Roteia mensagens da Evolution API para o CRM",
"source": "evolution-api",
"enabled": true
}'Resposta:
{
"id": "abc-123-def-456",
"name": "Mensagens para CRM",
"description": "Roteia mensagens da Evolution API para o CRM",
"source": "evolution-api",
"enabled": true,
"created_at": "2025-11-27T10:00:00Z"
}Guarde o id retornado! Você vai precisar dele.
curl -X POST http://localhost:3000/api/v1/routes/abc-123-def-456/targets \
-H "X-API-Key: sua-chave-super-segura-aqui" \
-H "Content-Type: application/json" \
-d '{
"name": "CRM Principal",
"url": "https://seu-crm.com/webhook",
"method": "POST",
"headers": {
"Authorization": "Bearer token-do-crm",
"Content-Type": "application/json"
},
"enabled": true,
"timeout": 30
}'Filtrar apenas mensagens de texto:
curl -X POST http://localhost:3000/api/v1/routes/abc-123-def-456/filters \
-H "X-API-Key: sua-chave-super-segura-aqui" \
-H "Content-Type: application/json" \
-d '{
"type": "event_type",
"condition": "equals",
"value": "messages.upsert",
"enabled": true
}'Filtrar mensagens que contém "pedido":
curl -X POST http://localhost:3000/api/v1/routes/abc-123-def-456/filters \
-H "X-API-Key: sua-chave-super-segura-aqui" \
-H "Content-Type: application/json" \
-d '{
"type": "field_value",
"field_path": "data.message.text",
"condition": "contains",
"value": "pedido",
"enabled": true
}'Mapear campos específicos para enviar ao destino:
curl -X POST http://localhost:3000/api/v1/routes/abc-123-def-456/field-mappings \
-H "X-API-Key: sua-chave-super-segura-aqui" \
-H "Content-Type: application/json" \
-d '{
"source_field": "data.message.text",
"target_field": "mensagem",
"transform_type": "direct",
"enabled": true
}'Na Evolution API, configure a variável de ambiente:
WEBHOOK_URL=http://evolution-router:3000/webhook/evolution/abc-123-def-456Substitua abc-123-def-456 pelo ID da sua rota!
curl -X POST https://sua-evolution-api.com/instance/create \
-H "apikey: sua-key-evolution" \
-H "Content-Type: application/json" \
-d '{
"instanceName": "minhaInstancia",
"webhook": {
"url": "http://evolution-router:3000/webhook/evolution/abc-123-def-456",
"webhook_by_events": false
}
}'- Crie uma rota
- Adicione múltiplos targets (um para cada CRM)
- Configure filtros se necessário
# Target 1 - CRM A
curl -X POST http://localhost:3000/api/v1/routes/abc-123/targets \
-H "X-API-Key: sua-key" \
-H "Content-Type: application/json" \
-d '{"name": "CRM A", "url": "https://crm-a.com/webhook", "enabled": true}'
# Target 2 - CRM B
curl -X POST http://localhost:3000/api/v1/routes/abc-123/targets \
-H "X-API-Key: sua-key" \
-H "Content-Type: application/json" \
-d '{"name": "CRM B", "url": "https://crm-b.com/webhook", "enabled": true}'curl -X POST http://localhost:3000/api/v1/routes/abc-123/filters \
-H "X-API-Key: sua-key" \
-H "Content-Type: application/json" \
-d '{
"type": "field_value",
"field_path": "data.message.key.remoteJid",
"condition": "starts_with",
"value": "5511",
"enabled": true
}'# Mapear apenas o texto da mensagem
curl -X POST http://localhost:3000/api/v1/routes/abc-123/field-mappings \
-H "X-API-Key: sua-key" \
-H "Content-Type: application/json" \
-d '{
"source_field": "data.message.text",
"target_field": "message",
"transform_type": "direct"
}'
# Mapear o remetente
curl -X POST http://localhost:3000/api/v1/routes/abc-123/field-mappings \
-H "X-API-Key: sua-key" \
-H "Content-Type: application/json" \
-d '{
"source_field": "data.message.key.remoteJid",
"target_field": "from",
"transform_type": "direct"
}'curl http://localhost:3000/api/v1/logs \
-H "X-API-Key: sua-key"curl http://localhost:3000/api/v1/stats \
-H "X-API-Key: sua-key"curl "http://localhost:3000/api/v1/logs?route_id=abc-123&limit=10" \
-H "X-API-Key: sua-key"- Verifique se a rota está habilitada:
curl http://localhost:3000/api/v1/routes/abc-123 -H "X-API-Key: sua-key"- Verifique os logs:
docker-compose logs -f evolution-router- Verifique se o target está habilitado
- Teste o endpoint manualmente:
curl -X POST https://seu-destino.com/webhook \
-H "Content-Type: application/json" \
-d '{"test": "message"}'- Verifique os logs de retry:
curl http://localhost:3000/api/v1/logs/log-id -H "X-API-Key: sua-key"- Revise a estrutura do payload que você está recebendo
- Use o endpoint de logs para ver o
raw_payload - Ajuste o
field_pathconforme necessário
equals: Valor exatonot_equals: Diferente decontains: Contém o textonot_contains: Não contémstarts_with: Começa comends_with: Termina comregex: Expressão regularexists: Campo existenot_exists: Campo não existegt: Maior que (numérico)lt: Menor que (numérico)gte: Maior ou iguallte: Menor ou igual
direct: Cópia direta do valoruppercase: Converte para maiúsculolowercase: Converte para minúsculotrim: Remove espaços extrasjson_encode: Converte para JSON stringjson_decode: Converte de JSON string
Encontrou algum problema? Abra uma issue no GitHub ou consulte a documentação completa no README.md
Próximo passo: Explore os exemplos avançados e personalize seu roteamento! 🚀