Este é um Lambda da AWS que funciona como um gateway de webhook, redirecionando mensagens baseado no campo to do payload JSON para URLs específicas.
IMPORTANTE: Este gateway sempre responde com 200 OK imediatamente após receber a requisição, independentemente de qualquer erro. O processamento do webhook é feito em background de forma assíncrona.
- Recebe webhook da ZENVIA
- Responde imediatamente com 200 OK
- Processa o webhook em background
- Redireciona para a URL correta baseado no número
- Recebe webhooks via HTTP POST
- Responde 200 OK imediatamente para evitar timeouts
- Processa webhooks em background de forma assíncrona
- Analisa o campo
todo payload JSON - Redireciona para URLs específicas baseado no número de telefone
- Suporta diferentes formatos de número (com/sem código do país, com espaços, etc.)
- Logs detalhados para monitoramento
- Tratamento de erros robusto
.
├── lambda_function.py # Código principal do Lambda
├── webhooks_config.json # Configuração dos webhooks
├── requirements.txt # Dependências Python
├── serverless.yml # Configuração Serverless Framework
├── template.yaml # Configuração AWS SAM
├── test_lambda.py # Testes locais
└── README.md # Este arquivo
Edite o arquivo webhooks_config.json para configurar os identificadores e suas URLs de destino:
{
"5511992539686": "https://promocaodosonhosbrejeiro.com.br/whatsintegra/",
"5511975740638": "https://exemplo2.com.br/webhook",
"lava-doom": "https://sandbox-test.com.br/webhook",
"test-environment": "https://test-env.com.br/webhook"
}O sistema aceita dois tipos de identificadores:
5511992539686(com código do país)11992539686(sem código do país)55 11 99253 9686(com espaços)(55) 11 99253-9686(com parênteses e hífen)
lava-doom(ambiente sandbox da ZENVIA)test-environment(ambientes de teste)- Qualquer string que não seja um número de telefone
- Instale o Serverless Framework:
npm install -g serverless- Instale as dependências Python:
pip install -r requirements.txt- Deploy:
serverless deploy- Instale o AWS SAM CLI
- Build e deploy:
sam build
sam deploy --guided- Crie um arquivo ZIP com todos os arquivos
- Faça upload no console do Lambda
- Configure o API Gateway para receber POST em
/webhook
Execute os testes locais:
python test_lambda.py{
"to": "5511992539686",
"from": "5511999999999",
"message": "Olá, como vai?",
"timestamp": "2024-01-15T10:30:00Z"
}{
"id": "ff7c875d-858a-4a1c-b66e-1f813e8ac154",
"timestamp": "2021-03-05T22:59:48.978Z",
"type": "MESSAGE",
"subscriptionId": "1a7dc408-4758-4f2b-bccb-d0dfde32d4e3",
"channel": "whatsapp",
"direction": "IN",
"message": {
"id": "3427b8c2-1eb4-4ffd-b8fb-7bc85cc68509",
"from": "5513998035883",
"to": "lava-doom",
"direction": "IN",
"channel": "whatsapp",
"visitor": {
"name": "Michel Oliveira",
"firstName": "Michel",
"lastName": "Oliveira"
},
"contents": [
{
"type": "text",
"text": "1"
}
]
}
}{
"status": "received"
}O webhook é processado em background e redirecionado para a URL configurada. Os logs no CloudWatch mostram o resultado do processamento:
- Sucesso:
Webhook encaminhado com sucesso para https://promocaodosonhosbrejeiro.com.br/whatsintegra/ - Erro:
Erro ao encaminhar webhook para https://url.com - Status: 500
IMPORTANTE: Mesmo identificadores não configurados recebem 200 OK. O erro é apenas logado:
Identificador 5511000000000 não configurado no gateway - Request ID: abc123
O Lambda gera logs detalhados no CloudWatch, incluindo:
- Eventos recebidos
- Números processados
- URLs de destino
- Erros de encaminhamento
- Status das respostas
- Timeout: 30 segundos
- Memória: 256 MB
- Runtime: Python 3.9
- Camada: Dependências Python em layer separado
- Use HTTPS para todas as URLs de destino
- Configure CORS adequadamente no API Gateway
- Monitore os logs para detectar tentativas de abuso
- Considere adicionar autenticação se necessário
- Verifique se o identificador está configurado em
webhooks_config.json - Confirme o formato do identificador no payload
- Para payloads da ZENVIA, verifique se o campo
toestá emmessage.to
- Aumente o timeout do Lambda
- Verifique se as URLs de destino estão respondendo rapidamente
- Verifique se as URLs de destino estão acessíveis
- Confirme se não há bloqueios de firewall
Para adicionar novos recursos ou melhorias:
- Faça um fork do projeto
- Crie uma branch para sua feature
- Adicione testes
- Faça commit das mudanças
- Abra um pull request