Central de Ajuda

Configurar Webhooks

Receba notificacoes em tempo real dos eventos do AgeuBot direto no seu sistema — mensagens recebidas, novos contatos, mudancas de status e muito mais.

Webhooks sao notificacoes HTTP automaticas. Em vez de ficar perguntando "tem mensagem nova?" para a API a cada minuto, o AgeuBot te avisa no exato momento em que algo acontece, enviando um POST para a URL que voce configurar.

Quando usar webhooks

Use webhooks quando voce precisa reagir a eventos imediatamente:

Webhook ou API Publica? Webhooks sao "push" — o AgeuBot te avisa quando algo acontece. A API Publica e "pull" — voce consulta quando quiser. Use os dois juntos: webhooks para reagir a eventos, API para enviar mensagens e consultar dados sob demanda.

Como configurar

1 Prepare sua URL de recebimento

Voce precisa de um endpoint HTTP publico que aceite requisicoes POST com corpo JSON. Alguns jeitos de conseguir isso rapidamente:

Regras de seguranca aplicadas automaticamente ao salvar:

  • A URL deve usar HTTPS (HTTP puro e recusado)
  • Hostnames que resolvem para IPs privados ou internos (127.x, 10.x, 192.168.x, 172.16-31.x, 169.254.x) sao recusados
  • URL deve ter no maximo 2048 caracteres
  • Use certificado valido — Let's Encrypt funciona e e gratuito

2 Cadastre o webhook no painel

Passo a passo:

  1. No painel do AgeuBot, va em Integracoes
  2. Clique em Webhooks
  3. Cole a URL do seu endpoint no campo URL de destino
  4. Opcional: preencha Header de autenticacao — ex: Bearer seu_token_secreto
  5. Marque os eventos que voce quer receber (veja lista abaixo)
  6. Clique em Salvar e ative o toggle

Eventos disponiveis

Marque apenas os eventos que voce vai processar. Eventos extras so geram trafego desnecessario no seu servidor.

EventoQuando dispara
message_receivedToda vez que um contato envia uma mensagem para o seu WhatsApp
message_sentToda vez que o AgeuBot (ou voce pelo painel) envia uma mensagem
contact_createdQuando um novo contato e criado no CRM (primeiro contato de um numero novo)
status_changedQuando o status/etapa do lead muda no Kanban do CRM
chat_finishedQuando uma conversa e marcada como finalizada no painel
connection_statusQuando o status do WhatsApp muda (conectado, desconectado, reconectando)

Formato do payload

Toda requisicao enviada pelo AgeuBot segue o mesmo formato. O corpo e JSON:

{ "event": "nome_do_evento", "data": { ... }, "timestamp": "2026-04-22T14:00:00.000Z" }

O campo data muda conforme o evento. Exemplos reais a seguir.

Exemplo: message_received

{ "event": "message_received", "timestamp": "2026-04-22T14:00:00.000Z", "data": { "id": "uuid-interno...", "contact_jid": "5511999999999@s.whatsapp.net", "contact_name": "Joao Silva", "content": "Ola, quero saber sobre precos", "media_type": null, "media_url": null, "timestamp": "2026-04-22T14:00:00.000Z", "is_group": false, "participant_jid": null, "participant_name": null, "whatsapp_msg_id": "3EB0...", "session_id": "uuid-da-sessao" } }

Exemplo: contact_created

{ "event": "contact_created", "timestamp": "2026-04-22T14:00:00.000Z", "data": { "id": "uuid-interno...", "contact_jid": "5511999999999@s.whatsapp.net", "contact_name": "Joao Silva", "phone": "5511999999999", "session_id": "uuid-da-sessao", "lead_status": "novo", "source": "whatsapp", "created_at": "2026-04-22T14:00:00.000Z" } }

Exemplo: status_changed

{ "event": "status_changed", "timestamp": "2026-04-22T14:00:00.000Z", "data": { "contact_id": "uuid-interno...", "contact_jid": "5511999999999@s.whatsapp.net", "contact_name": "Joao Silva", "phone": "5511999999999", "new_status": "qualificado", "kanban_order": 3, "changed_at": "2026-04-22T14:00:00.000Z" } }

Exemplo: connection_status

{ "event": "connection_status", "timestamp": "2026-04-22T14:00:00.000Z", "data": { "status": "disconnected", "number": null, "sessionId": "uuid-da-sessao" } }

Valores possiveis de status: connected, disconnected, logged_out. Quando connected, o campo number traz o numero do WhatsApp conectado.

Autenticando a origem do webhook

Qualquer um que descobrir sua URL poderia enviar dados falsos para ela. Para garantir que a requisicao veio do AgeuBot, configure um header de autenticacao:

  1. No painel, em Integracoes > Webhooks, preencha o campo Header de autenticacao com algo como Bearer seu_token_secreto_aleatorio
  2. No seu endpoint, verifique esse header em toda requisicao e rejeite (HTTP 401) se nao bater

Como gerar um token seguro? Use um gerador de senhas forte (ex: openssl rand -hex 32) e mantenha em uma variavel de ambiente no seu servidor. Nunca compartilhe ou exponha em repositorios publicos.

Exemplo de handler em Node.js

const express = require('express'); const app = express(); app.use(express.json()); const TOKEN = process.env.AGEUBOT_WEBHOOK_TOKEN; app.post('/webhook/ageubot', (req, res) => { // 1. Validar origem if (req.headers.authorization !== `Bearer ${TOKEN}`) { return res.status(401).send('unauthorized'); } // 2. Responder RAPIDO (idealmente < 1s) res.status(200).json({ ok: true }); // 3. Processar em background, sem bloquear a resposta const { event, data } = req.body; switch (event) { case 'message_received': console.log('Nova mensagem de', data.contact_name, ':', data.content); // sua logica aqui break; case 'contact_created': console.log('Novo contato:', data.contact_name, data.phone); break; case 'status_changed': console.log('Status do', data.contact_name, 'mudou para', data.new_status); break; } }); app.listen(3000, () => console.log('Webhook ouvindo na porta 3000'));

Exemplo em Python (Flask)

from flask import Flask, request, jsonify import os app = Flask(__name__) TOKEN = os.environ['AGEUBOT_WEBHOOK_TOKEN'] @app.post('/webhook/ageubot') def webhook(): if request.headers.get('Authorization') != f'Bearer {TOKEN}': return 'unauthorized', 401 payload = request.get_json() event = payload.get('event') data = payload.get('data', {}) if event == 'message_received': print(f"Mensagem de {data.get('contact_name')}: {data.get('content')}") elif event == 'contact_created': print(f"Novo contato: {data.get('contact_name')}") return jsonify(ok=True), 200 if __name__ == '__main__': app.run(port=3000)

Boas praticas

Importante: O AgeuBot dispara webhooks em modo "fire and forget" com timeout de 10 segundos — se seu endpoint demorar mais que isso ou cair, o evento e abandonado (nao ha retry). Para eventos criticos, combine com consultas periodicas a API Publica como seguranca.

Problemas comuns

Meu webhook nao recebe nada

Recebo eventos duplicados

Meu servidor recebe e responde, mas o AgeuBot acha que falhou

Recebo requisicoes em momentos estranhos

Proximos passos


Precisa de ajuda para configurar seus webhooks? Fale com nosso suporte.

Falar com Suporte