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
- Na Gestão, abra o fluxo e vá em Integrações.
- No cartão Webhook, conecte e informe o Endereço HTTPS.
- Marque os eventos que quer receber. Por padrão, todos vêm marcados.
- 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.
- Salve e copie o segredo exibido. Ele serve para validar as assinaturas e aparece uma vez.
Eventos
| Evento | Quando acontece |
|---|---|
conversa.criada | Um ticket é criado |
conversa.estado_alterado | O ticket muda de estado |
conversa.atribuida | O ticket é atribuído a um atendente |
conversa.encerrada | O ticket é encerrado |
mensagem.criada | Uma mensagem é criada no ticket |
mensagem.estado_entrega_alterado | Uma mensagem muda de estado de entrega (enviada, entregue, lida, falhou) |
mensagem.reacao | O cliente reagiu a uma mensagem, trocou ou removeu a reação |
contato.criado | Um contato é criado |
modelo.recategorizado | A Meta recategorizou um modelo de mensagem |
sla.alertou | O relógio de SLA chegou ao limite de alerta |
sla.estourou | O 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çalho | Conteúdo |
|---|---|
X-Pipe-Signature | sha256= seguido do HMAC SHA-256 em hexadecimal |
X-Pipe-Timestamp | Segundos desde 1970 (Unix) do momento do envio |
X-Pipe-Delivery | Identificador 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étodo | Rota | Escopo | O que faz |
|---|---|---|---|
| GET | /v1/webhooks | webhooks:ler | Lista os webhooks do fluxo da chave |
| GET | /v1/webhooks/:id | webhooks:ler | Lê um webhook |
| GET | /v1/webhooks/:id/deliveries | webhooks:ler | Lista 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
descartadaseguidas: 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_idjá 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
- Veja o que os eventos de mensagem representam em Enviar mensagens.
- Entenda o ciclo do ticket em Conversas e tickets.
- Confira o que a API ainda não faz em Limitações da API.
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.
Esse artigo foi útil?
Obrigado pelo retorno!