API · Atualizado em 12/10/2026

Webhooks e eventos que o Pipe envia

Receba eventos de tickets, mensagens, contatos e SLA no seu sistema, valide a assinatura HMAC, entenda as tentativas e consulte as entregas por API.

Em vez de consultar a API o tempo todo, deixe o Pipe avisar. Um webhook é um endereço seu que recebe um POST a cada evento: ticket criado, mensagem entregue, contato novo, SLA estourado.

Quando usar

  • Para atualizar seu CRM quando um ticket abre, muda de estado ou encerra.
  • Para saber que uma mensagem enviada foi entregue, lida ou falhou.
  • Para alertar sua equipe quando um SLA está para estourar.

Pré-requisitos

  • Um endereço HTTPS seu, que responda 2xx em até 5 segundos.
  • Acesso às configurações do fluxo na Gestão.
  • Para consultar entregas por API, uma chave com webhooks:ler.

Passo a passo: cadastrar

  1. Na Gestão, abra o fluxo e vá em Integrações.
  2. No cartão Webhook, conecte e informe o Endereço HTTPS.
  3. Marque os eventos que quer receber. Por padrão, todos vêm marcados.
  4. Se o seu endereço exige autenticação, escolha o tipo: básica (usuário e senha) ou OAuth2 com credenciais do cliente. Você também pode acrescentar cabeçalhos próprios.
  5. Salve e copie o segredo exibido. Ele serve para validar as assinaturas e aparece uma vez.

Eventos

EventoQuando acontece
conversa.criadaUm ticket é criado
conversa.estado_alteradoO ticket muda de estado
conversa.atribuidaO ticket é atribuído a um atendente
conversa.encerradaO ticket é encerrado
mensagem.criadaUma mensagem é criada no ticket
mensagem.estado_entrega_alteradoUma mensagem muda de estado de entrega (enviada, entregue, lida, falhou)
mensagem.reacaoO cliente reagiu a uma mensagem, trocou ou removeu a reação
contato.criadoUm contato é criado
modelo.recategorizadoA Meta recategorizou um modelo de mensagem
sla.alertouO relógio de SLA chegou ao limite de alerta
sla.estourouO SLA estourou

Um webhook de um fluxo recebe só os eventos desse fluxo (e, num roteador, dos serviços dele).

Formato do envio

Cada evento chega como POST com Content-Type: application/json:

{
  "event": "conversa.criada",
  "delivery_id": "6f1d2a52-0000-4000-8000-0000000000bb",
  "tenant_id": "b3a1c9de-0000-4000-8000-0000000000aa",
  "occurred_at": "2026-10-12T14:30:00.000Z",
  "data": { "conversa_id": "b3a1c9de-0000-4000-8000-000000000100" }
}

O conteúdo de data varia por evento. Use delivery_id do corpo para ignorar um evento repetido.

Cabeçalhos enviados:

CabeçalhoConteúdo
X-Pipe-Signaturesha256= seguido do HMAC SHA-256 em hexadecimal
X-Pipe-TimestampSegundos desde 1970 (Unix) do momento do envio
X-Pipe-DeliveryIdentificador da tentativa

Validar a assinatura

O HMAC é calculado com o seu segredo sobre o texto "<timestamp>.<corpo>", com o corpo exatamente como foi recebido. Exemplo em Node.js:

import { createHmac, timingSafeEqual } from 'node:crypto';

function assinaturaValida(segredo, timestamp, corpoCru, assinaturaRecebida) {
  const esperada = 'sha256=' + createHmac('sha256', segredo)
    .update(`${timestamp}.${corpoCru}`)
    .digest('hex');
  const a = Buffer.from(esperada);
  const b = Buffer.from(assinaturaRecebida);
  return a.length === b.length && timingSafeEqual(a, b);
}

Recuse também envios com X-Pipe-Timestamp muito antigo. A tolerância recomendada é de 300 segundos (5 minutos), o que impede o reaproveitamento de um envio capturado.

Tentativas e entregas

  • O Pipe espera até 5 segundos pela resposta. Qualquer 2xx conta como entregue.
  • Se falhar, tenta de novo com espera crescente (10 segundos, depois 20, 40 e assim por diante, até 1 hora entre tentativas), até 5 tentativas por padrão.
  • Esgotadas as tentativas, a entrega vira descartada.

Estados de uma entrega: pendente, entregue, falhou e descartada.

Consultar webhooks e entregas por API

MétodoRotaEscopoO que faz
GET/v1/webhookswebhooks:lerLista os webhooks do fluxo da chave
GET/v1/webhooks/:idwebhooks:lerLê um webhook
GET/v1/webhooks/:id/deliverieswebhooks:lerLista as entregas (filtro state, limit, cursor)
curl -s "https://http.pipebr.app/v1/webhooks/b3a1c9de-0000-4000-8000-000000000900/deliveries?state=descartada" \
  -H "Authorization: Bearer $PIPE_CHAVE"
{
  "data": [
    {
      "id": "b3a1c9de-0000-4000-8000-000000000a00",
      "event": "conversa.criada",
      "state": "descartada",
      "attempts": 5,
      "lastError": "HTTP 500",
      "nextAttemptAt": null,
      "createdAt": "2026-10-12T14:30:00.000Z"
    }
  ],
  "page_info": { "has_next_page": false, "end_cursor": null }
}

Por segurança, a API nunca devolve o segredo, as credenciais, os valores dos cabeçalhos, os parâmetros da URL nem o conteúdo dos eventos. A URL volta mascarada, como https://exemplo.test/hook/….

Resultado esperado

Seu servidor recebe cada evento assinado, responde 2xx rápido e processa o conteúdo depois. As entregas que falharam ficam visíveis por API.

Problemas comuns

  • Assinatura não confere: use o corpo cru, sem reformatar o JSON, e o mesmo segredo mostrado na criação. O texto assinado é timestamp, um ponto e o corpo.
  • Entregas descartada seguidas: seu endereço respondeu erro ou demorou mais de 5 segundos. Responda 2xx logo e faça o trabalho em segundo plano.
  • Evento repetido: a mesma entrega pode chegar mais de uma vez se sua resposta se perdeu. Ignore delivery_id já processado.
  • Não recebo eventos de outro fluxo: webhooks de fluxo só recebem eventos do próprio fluxo.

Boas práticas

  • Responda rápido e processe depois: uma fila interna resolve.
  • Valide sempre a assinatura e o horário.
  • Guarde o segredo em cofre e troque-o se vazar.

Próximos passos

Perguntas frequentes

Como cadastro um webhook?

Na Gestão, abra o fluxo, vá em Integrações e conecte o cartão Webhook. Informe o endereço HTTPS e escolha os eventos. O segredo de assinatura aparece uma vez.

Como sei que o evento veio do Pipe?

Pela assinatura. Cada envio traz X-Pipe-Signature com um HMAC SHA-256 de timestamp.corpo, calculado com o seu segredo, e X-Pipe-Timestamp com o horário.

E se meu servidor estiver fora do ar?

O Pipe tenta de novo com espera crescente, até 5 tentativas por padrão. Depois disso a entrega fica como descartada.

Posso criar ou apagar webhooks pela API?

Não. Por chave, a API só lê os webhooks e as entregas (escopo webhooks:ler). Criar, editar e apagar é feito na Gestão.