Para desenvolvedores

Webhooks de saída:
sua operação, no seu sistema

Cada mensagem e cada contato da sua operação de WhatsApp entregue no seu backend em tempo real — assinado com HMAC-SHA256, com retry automático, circuit breaker e log de entregas com replay. Infraestrutura de gente grande, disponível em todos os planos.

Eventos disponíveis

Você escolhe por webhook quais eventos quer receber. Todo evento chega num envelope { event, data, timestamp }:

message.receivedUm contato mandou mensagem pra sua operação
Ver payload de exemplo
{
  "event": "message.received",
  "data": {
    "messageId": "…",
    "contactId": "…",
    "conversationId": "…",
    "type": "TEXT",
    "content": "Oi, quero saber do pedido",
    "timestamp": "2026-07-11T18:30:00.000Z"
  },
  "timestamp": "2026-07-11T18:30:00.000Z"
}
message.sentSua operação enviou uma mensagem (manual, fluxo, transmissão ou recovery)
Ver payload de exemplo
{
  "event": "message.sent",
  "data": {
    "messageId": "…",
    "conversationId": "…",
    "contactId": "…",
    "type": "TEXT",
    "content": "Seu pedido saiu pra entrega 🚚",
    "timestamp": "2026-07-11T18:31:00.000Z"
  },
  "timestamp": "2026-07-11T18:31:00.000Z"
}
contact.createdUm contato novo entrou na base
Ver payload de exemplo
{
  "event": "contact.created",
  "data": {
    "contactId": "…",
    "phone": "+5511999999999",
    "fullName": "Maria Silva",
    "email": "maria@email.com",
    "timestamp": "2026-07-11T18:32:00.000Z"
  },
  "timestamp": "2026-07-11T18:32:00.000Z"
}
contact.updatedDados de um contato mudaram
Ver payload de exemplo
{
  "event": "contact.updated",
  "data": {
    "contactId": "…",
    "changes": ["fullName", "email"],
    "timestamp": "2026-07-11T18:33:00.000Z"
  },
  "timestamp": "2026-07-11T18:33:00.000Z"
}

Verificando a assinatura

Toda entrega leva o header X-Webhook-Signature: o HMAC-SHA256 (hex) do JSON do campo data, assinado com o secret do seu webhook (mostrado uma vez na criação, regenerável no painel). Também vão X-Webhook-Event e X-Autopilot-Attempt (número da tentativa). Exemplo em Node.js:

import { createHmac, timingSafeEqual } from "crypto";

app.post("/webhook/autopilot", (req, res) => {
  const received = req.headers["x-webhook-signature"];
  // A assinatura é o HMAC-SHA256 (hex) do JSON do campo `data`
  const expected = createHmac("sha256", process.env.AUTOPILOT_WEBHOOK_SECRET)
    .update(JSON.stringify(req.body.data))
    .digest("hex");

  const ok =
    received?.length === expected.length &&
    timingSafeEqual(Buffer.from(received), Buffer.from(expected));
  if (!ok) return res.status(401).end();

  // req.body.event → qual evento | req.body.data → o payload
  res.status(200).end(); // responda 2xx rápido; processe depois
});

Disparos de teste levam X-Webhook-Test: true; reenvios manuais levam X-Webhook-Replay: true.

Feito pra falha do MUNDO REAL

Retry inteligente

Até 5 tentativas com backoff exponencial. 4xx não retenta (429 sim) — 5xx e timeout, sempre.

Circuit breaker

10 falhas consecutivas pausam o webhook sozinho — em vez de martelar seu endpoint caído.

Log com replay

Cada entrega registrada (status, duração, resposta). Falhou? Reenvia do painel com um clique.

Modo de teste

Webhook nasce em modo teste: dispare payloads de exemplo e valide a assinatura antes de ativar.

Requisitos: URL HTTPS. Responda 2xx em até alguns segundos — processe pesado de forma assíncrona.

Perguntas frequentes

No painel: Automações → aba Webhooks → Novo webhook. Você informa a URL (HTTPS obrigatório), escolhe os eventos e recebe o secret de assinatura. O webhook nasce em modo de teste — dispare o payload de exemplo, valide sua assinatura e só então ative pra valer.

Precisa de mais que webhooks?

A API REST completa (contatos, mensagens, fluxos) está no roadmap e os primeiros integradores definem as prioridades. Conta seu caso: contato@autopilotbr.com

Webhooks de saída: 5 no Pro, 20 no Scale e sem limite no Enterprise — veja os planos.