Webhook Não Funciona

Webhook Não Funciona

Descrição do Problema

Webhooks configurados não estão funcionando corretamente:

Webhook delivery failed
Connection refused
SSL certificate problem
Timeout waiting for response

Possíveis Causas

  1. URL inacessível - Servidor não está online ou URL errada
  2. Firewall bloqueando - Porta não está aberta
  3. SSL inválido - Certificado expirado ou self-signed
  4. Timeout - Resposta muito lenta
  5. Resposta inválida - Não retorna 200 OK

Soluções

1. Testar URL do Webhook

# Testar se a URL está acessível
curl -X POST https://seu-servidor.com/webhook \
  -H "Content-Type: application/json" \
  -d '{"test": true}'

# Ver resposta completa
curl -v -X POST https://seu-servidor.com/webhook \
  -H "Content-Type: application/json" \
  -d '{"test": true}'

2. Verificar Firewall

# Verificar se a porta está aberta
sudo ufw status

# Liberar porta do webhook
sudo ufw allow 443/tcp
sudo ufw allow 3000/tcp

# Verificar com nmap
nmap -p 443 seu-servidor.com

3. Verificar SSL

# Testar certificado SSL
openssl s_client -connect seu-servidor.com:443

# Ver detalhes do certificado
echo | openssl s_client -servername seu-servidor.com \
  -connect seu-servidor.com:443 2>/dev/null | \
  openssl x509 -noout -dates

4. Usar ngrok para Desenvolvimento

# Instalar ngrok
npm install -g ngrok

# Expor porta local
ngrok http 3000

# Use a URL https fornecida como webhook

5. Configurar Webhook Corretamente

# No arquivo de configuração
webhooks:
  enabled: true
  endpoints:
    - url: "https://seu-servidor.com/webhook"
      events: ["message", "status"]
      timeout: 30000
      retry: 3

6. Verificar Logs do Webhook

# Ver tentativas de entrega
clawdbot logs | grep -i webhook

# Ver erros específicos
clawdbot logs | grep -i "delivery failed\|timeout\|refused"

7. Implementar Endpoint Corretamente

// O endpoint deve retornar 200 rapidamente
app.post('/webhook', async (req, res) => {
  // Responder imediatamente
  res.status(200).send('OK');
  
  // Processar em background
  processWebhook(req.body).catch(console.error);
});

Problemas Relacionados

Prevenção

  • Use HTTPS com certificados válidos (Let’s Encrypt é gratuito)
  • Configure timeouts adequados
  • Implemente retry com backoff exponencial
  • Monitore entregas de webhook