Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Webhook Gateway Lambda

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.

⚡ Comportamento Especial

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.

Fluxo de Funcionamento:

  1. Recebe webhook da ZENVIA
  2. Responde imediatamente com 200 OK
  3. Processa o webhook em background
  4. Redireciona para a URL correta baseado no número

Funcionalidades

  • Recebe webhooks via HTTP POST
  • Responde 200 OK imediatamente para evitar timeouts
  • Processa webhooks em background de forma assíncrona
  • Analisa o campo to do 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

Estrutura do Projeto

.
├── 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

Configuração dos Webhooks

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"
}

Tipos de Identificadores Suportados

O sistema aceita dois tipos de identificadores:

1. Números de Telefone

  • 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)

2. Identificadores Não Numéricos

  • lava-doom (ambiente sandbox da ZENVIA)
  • test-environment (ambientes de teste)
  • Qualquer string que não seja um número de telefone

Deploy

Opção 1: Serverless Framework

  1. Instale o Serverless Framework:
npm install -g serverless
  1. Instale as dependências Python:
pip install -r requirements.txt
  1. Deploy:
serverless deploy

Opção 2: AWS SAM

  1. Instale o AWS SAM CLI
  2. Build e deploy:
sam build
sam deploy --guided

Opção 3: Console AWS

  1. Crie um arquivo ZIP com todos os arquivos
  2. Faça upload no console do Lambda
  3. Configure o API Gateway para receber POST em /webhook

Teste Local

Execute os testes locais:

python test_lambda.py

Exemplo de Uso

Payload de Entrada (Formato Simples)

{
    "to": "5511992539686",
    "from": "5511999999999",
    "message": "Olá, como vai?",
    "timestamp": "2024-01-15T10:30:00Z"
}

Payload de Entrada (Formato ZENVIA)

{
    "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"
            }
        ]
    }
}

Resposta Imediata (Sempre 200 OK)

{
    "status": "received"
}

Processamento em Background

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

Resposta de Erro (identificador não configurado)

IMPORTANTE: Mesmo identificadores não configurados recebem 200 OK. O erro é apenas logado:

Identificador 5511000000000 não configurado no gateway - Request ID: abc123

Monitoramento

O Lambda gera logs detalhados no CloudWatch, incluindo:

  • Eventos recebidos
  • Números processados
  • URLs de destino
  • Erros de encaminhamento
  • Status das respostas

Configurações Recomendadas

  • Timeout: 30 segundos
  • Memória: 256 MB
  • Runtime: Python 3.9
  • Camada: Dependências Python em layer separado

Segurança

  • 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

Troubleshooting

Erro: "Identificador não encontrado"

  • 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 to está em message.to

Erro: "Timeout"

  • Aumente o timeout do Lambda
  • Verifique se as URLs de destino estão respondendo rapidamente

Erro: "Connection refused"

  • Verifique se as URLs de destino estão acessíveis
  • Confirme se não há bloqueios de firewall

Contribuição

Para adicionar novos recursos ou melhorias:

  1. Faça um fork do projeto
  2. Crie uma branch para sua feature
  3. Adicione testes
  4. Faça commit das mudanças
  5. Abra um pull request

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages