Evolution Router é um sistema profissional de roteamento e gerenciamento de webhooks desenvolvido em Go, projetado especialmente para a Evolution API Go, mas totalmente adaptável para uso com qualquer API ou sistema que necessite roteamento inteligente de webhooks.
Evolution Router é uma solução standalone que atua como um hub centralizado de webhooks, permitindo:
- Receber webhooks de múltiplas fontes
- Filtrar eventos com base em condições customizadas
- Rotear para múltiplos destinos simultaneamente
- Transformar dados entre origem e destino
- Retry automático com backoff exponencial
- Logs detalhados de todas as operações
- Interface de gerenciamento React moderna
-
Evolution API Go (Foco Principal)
- Receber eventos de instâncias WhatsApp
- Filtrar mensagens por tipo, remetente, conteúdo
- Rotear para diferentes sistemas (CRM, ERP, notificações)
- Transformar payloads para formatos específicos
-
Integrações Gerais
- Distribuir webhooks de APIs para múltiplos consumidores
- Aplicar lógica de negócio antes do envio
- Centralizar logs de todas as integrações
- Gerenciar retries e falhas
-
Microserviços
- Event routing entre serviços
- Transformação de eventos
- Observabilidade de integrações
- ⚡️ Alta Performance: Processamento concorrente com worker pool
- 🔄 Retry Inteligente: Exponential backoff com até 5 tentativas
- 🎯 Filtros Avançados: Suporte a múltiplas condições (equals, contains, regex, etc.)
- 🔀 Roteamento Múltiplo: Envie para quantos destinos precisar
- 🔧 Transformação de Dados: Mapeamento de campos flexível
- 📊 Logs Detalhados: Rastreamento completo de todas as operações
- 🔐 Autenticação: API Key para proteção dos endpoints
- 📈 Dashboard: Estatísticas em tempo real
- 🗂️ Gerenciamento de Rotas: CRUD completo com interface intuitiva
- 🎨 UI Moderna: React + Tailwind CSS + Zustand
- 📱 Responsivo: Funciona em qualquer dispositivo
- 🔔 Notificações: Sistema de alertas em tempo real
docker pull impa365/evolution-router:latest
docker run -d \
--name evolution-router \
-p 3001:3001 \
-e DATABASE_HOST=seu-postgres-host \
-e DATABASE_PORT=5432 \
-e DATABASE_USER=postgres \
-e DATABASE_PASSWORD=sua-senha \
-e DATABASE_NAME=evolution_router \
-e API_KEY=sua-api-key-segura \
-e SERVER_PORT=3001 \
-e DISPATCHER_WORKERS=10 \
-e RETRY_MAX_ATTEMPTS=5 \
impa365/evolution-router:latest- Go 1.24+
- PostgreSQL 15+
- Node.js 18+ (para build do frontend)
# Clone o repositório
git clone https://github.com/EvolutionAPI/evolution-router.git
cd evolution-router
# Configure variáveis de ambiente
cp .env.example .env
# Edite o .env com suas configurações
# Instale dependências
go mod download
# Compile o projeto
go build -o server cmd/evolution-go/main.go
# Execute
./servercd manager
# Instale dependências
npm install
# Build para produção
npm run build
# Os arquivos ficarão em dist/# Database
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_USER=postgres
DATABASE_PASSWORD=sua-senha
DATABASE_NAME=evolution_router
# Server
SERVER_PORT=3001
API_KEY=sua-api-key-segura
# Dispatcher
DISPATCHER_WORKERS=10 # Número de workers concorrentes
RETRY_MAX_ATTEMPTS=5 # Tentativas máximas de retry- O banco de dados será criado automaticamente via migrations
- Acesse o manager em
http://localhost:3001/manager - Use o
API_KEYconfigurado para autenticação
Acesse o manager e crie uma rota:
{
"name": "Mensagens WhatsApp",
"source": "whatsapp",
"description": "Rota para eventos do WhatsApp",
"enabled": true
}A URL do webhook será: http://seu-servidor:3001/webhook/whatsapp/{route_id}
{
"name": "CRM Principal",
"url": "https://seu-crm.com/api/webhook",
"method": "POST",
"headers": {
"Authorization": "Bearer token-do-crm",
"Content-Type": "application/json"
},
"timeout": 30,
"enabled": true,
"priority": 1
}{
"type": "payload",
"field_path": "data.key.remoteJid",
"condition": "contains",
"value": "@s.whatsapp.net",
"enabled": true
}Condições suportadas:
equals: Igualdade exatanot_equals: Diferente decontains: Contém textonot_contains: Não contém textoregex: Expressão regulargreater_than: Maior que (números)less_than: Menor que (números)
{
"source_field": "data.key.remoteJid",
"target_field": "phone",
"transform_type": "none",
"enabled": true
}
Tipos de transformação:
none: Sem transformaçãouppercase: Texto em maiúsculaslowercase: Texto em minúsculastrim: Remove espaçosbase64: Codifica em base64
POST /webhook/:source/:route_id
Content-Type: application/json
{
"event": "messages.upsert",
"data": {
// seu payload aqui
}
}# Listar rotas
GET /api/v1/routes
X-API-Key: sua-api-key
# Criar rota
POST /api/v1/routes
X-API-Key: sua-api-key
Content-Type: application/json
{
"name": "Nome da Rota",
"source": "origem",
"description": "Descrição",
"enabled": true
}
# Atualizar rota
PUT /api/v1/routes/:id
X-API-Key: sua-api-key
# Deletar rota
DELETE /api/v1/routes/:id
X-API-Key: sua-api-key# Listar destinos de uma rota
GET /api/v1/routes/:id/targets
X-API-Key: sua-api-key
# Criar destino
POST /api/v1/routes/:id/targets
X-API-Key: sua-api-key
# Atualizar destino
PUT /api/v1/targets/:id
X-API-Key: sua-api-key
# Deletar destino
DELETE /api/v1/targets/:id
X-API-Key: sua-api-key# Listar logs
GET /api/v1/logs?limit=50&offset=0&route_id=uuid&source=origem&status=success
X-API-Key: sua-api-key
# Ver log específico
GET /api/v1/logs/:id
X-API-Key: sua-api-key
# Estatísticas
GET /api/v1/stats
X-API-Key: sua-api-key┌─────────────────┐
│ Webhook Source │
│ (Evolution API)│
└────────┬────────┘
│
▼
┌─────────────────┐
│ Evolution Router│
│ (Receiver) │
└────────┬────────┘
│
┌────┴────┐
│ Filters │
└────┬────┘
│
┌────┴────┐
│ Queue │
└────┬────┘
│
┌──────┴──────┐
│ Worker Pool │
└──────┬──────┘
│
┌────┴─────┐
│ Transform│
└────┬─────┘
│
┌────────┴────────┐
│ Dispatcher │
│ (Send to Targets)│
└────────┬────────┘
│
┌────┴────┐
│ Retry │
└────┬────┘
│
┌────┴────┐
│ Logs │
└─────────┘
- Receiver: Recebe webhooks e valida source/route
- Filters: Aplica condições configuradas
- Queue: Fila em memória para processamento assíncrono
- Worker Pool: Pool de workers concorrentes (padrão: 10)
- Transform: Aplica transformações de campo
- Dispatcher: Envia para targets em paralelo
- Retry: Sistema de retry com exponential backoff
- Logs: Armazenamento de todos os eventos
PostgreSQL com 6 tabelas principais:
routes: Rotas de webhooktargets: Destinos para enviofilters: Condições de filtragemfield_mappings: Mapeamento de camposwebhook_logs: Logs de processamentoretry_logs: Logs de tentativas
- Processamento Concorrente: Worker pool configurável
- Retry Inteligente: Backoff exponencial (1s, 2s, 4s, 8s, 16s)
- Timeout Configurável: Por target (padrão: 30s)
- Logs Otimizados: Índices em campos críticos
- Rate limiting por rota
- Webhooks assíncronos (callbacks)
- Métricas com Prometheus
- Dashboard de observabilidade
- Suporte a templates de transformação
- Editor visual de filtros
- Testes A/B de rotas
- Replay de webhooks
- Cluster mode com Redis
- Dead letter queue
- Circuit breaker
- API GraphQL
Este projeto está licenciado sob a Apache License 2.0 - veja o arquivo LICENSE para detalhes.
Contribuições são bem-vindas! Por favor:
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'feat: Adiciona MinhaFeature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
- 📧 Email: suporte@impa365.com
- 💬 Comunidade: IMPA365 Community
- 📖 Documentação: Em breve
Desenvolvido com ❤️ pela equipe IMPA365
Evolution Router - Roteamento inteligente de webhooks para Evolution API Go e além