POST JSON assinado para o URL.
Pode gerir os webhooks na aplicação em Settings → Webhooks (consulte Adicionar e gerir webhooks de saída) ou com a API de webhooks. Esta página é a referência do que o Flowella envia.
Tipos de eventos
Marque estes eventos quando adicionar um webhook, ou passe-os emevents quando criar um com a API.
Os eventos de contacto só são disparados para estas chamadas de API de contacto individual. Não são disparados para
POST /v1/contacts/bulk-upsert, para contactos criados por mensagens recebidas, nem para alterações feitas na aplicação ou sincronizadas a partir do HubSpot.
O Flowella também envia webhook.test quando seleciona Send test event na aplicação ou chama POST /v1/webhooks/{id}/test. Não pode subscrevê-lo. O respetivo data é { "test": true, "sentAt": "<ISO 8601 time>" }.
Uma mensagem de saída pode produzir dois eventos
message.sent: um quando o Flowella a entrega à Meta e outro quando a Meta a comunica como enviada. Os dois têm valores id de nível superior diferentes. Use data.messageId para os associar à mesma mensagem.Formato do pedido
O Flowella envia cada evento como umPOST HTTP com estes cabeçalhos:
O Flowella não envia outros cabeçalhos personalizados. O tipo e o ID do evento estão no corpo.
Corpo
Cada webhook tem uma versão de payload, devolvida comopayloadVersion pela API de webhooks. A versão 1 é a predefinição de todos os webhooks, e não existe nenhuma definição na aplicação ou na API para a alterar. As duas versões usam estes envelopes:
O Flowella não envia um evento cujo
data tenha mais de 256 KB.
Verificar assinaturas
Verifique a assinatura de cada pedido antes de confiar nele. O Flowella calculaX-Flowella-Signature desta forma:
- Algoritmo: HMAC com SHA-256.
- Chave: o segredo de assinatura como texto UTF-8, exatamente como foi guardado. Um segredo gerado pela API inclui o prefixo
whsec_. - Mensagem: o corpo do pedido em bruto, byte a byte, tal como o Flowella o enviou. Nada mais é assinado: não há carimbo de data/hora nem URL na assinatura.
- Resultado: hexadecimal minúsculo, 64 caracteres, sem prefixo
sha256=.
Respostas, repetições e tempos limite
O Flowella entrega vários eventos em simultâneo, por isso podem chegar fora de ordem. Use
created_at ou occurred_at se a ordem for importante. Responda com um estado 2xx assim que a assinatura for validada e depois processe o evento em segundo plano. Para ver como as repetições aparecem na aplicação, consulte Repetições e back-off.
Eliminar eventos duplicados
O seu endpoint pode receber o mesmo evento mais do que uma vez: uma repetição depois de o seu endpoint ter excedido o tempo limite mas ainda ter processado o pedido, ou um reenvio através da API. Elimine duplicados com base noid de nível superior:
- Guarde o
idde cada evento que processa. - Se um
idrecebido já estiver guardado, responda200e não faça mais nada. - Mantenha os IDs guardados pelo menos durante o tempo em que poderá reenviar entregas.
data.messageId. Eventos diferentes sobre a mesma mensagem, como message.sent e message.delivered, partilham-no.
Feed de eventos
O feed de eventos é uma alternativa aos webhooks baseada em consulta.GET /v1/events devolve os eventos dos últimos 7 dias, incluindo eventos que nenhum webhook subscreve. Precisa do âmbito events:read. Filtre com type (um tipo ou uma lista separada por vírgulas), occurredAfter e occurredBefore, e pagine com limit e cursor.
Cada item tem id, type, occurredAt, version, correlationId e data. O id corresponde ao id no corpo do webhook, por isso pode usar o feed para preencher lacunas depois de o seu endpoint ter estado em baixo.
Gerir webhooks com a API
Todos os endpoints de webhooks precisam de uma chave de API ou de um token de acesso OAuth com o âmbitowebhooks:manage. As chaves criadas na aplicação têm-no. Consulte a introdução à API para a autenticação.
Os objetos webhook contêm
id, name, url, events, isActive, consecutiveFailures, signingSecretPrefix (os primeiros 8 caracteres do segredo atual), payloadVersion, lastTriggeredAt, disabledAt, createdAt e updatedAt.
Aplicam-se algumas regras aos webhooks geridos através da API:
- Não pode escolher o segredo de assinatura através da API.
POST /v1/webhooksgera um que começa porwhsec_e devolve-o uma única vez, comosigningSecret. - Os reenvios não contam para a contagem de falhas nem a repõem. O Flowella só entrega um reenvio enquanto o webhook estiver ativo e ainda subscrever esse tipo de evento.
- O URL tem de seguir as mesmas regras de URL que na aplicação.
Rodar um segredo de assinatura
Rode um segredo quando suspeitar que foi divulgado, ou com uma periodicidade regular. A rotação funciona para qualquer webhook que tenha um segredo, incluindo webhooks cujo segredo escreveu na aplicação.1
Pedir um novo segredo
Chame o endpoint de rotação e guarde o
signingSecret da resposta. O Flowella só o devolve uma vez.2
Aceitar ambos os segredos durante 24 horas
As novas entregas são assinadas com o novo segredo em
X-Flowella-Signature e com o segredo antigo em X-Flowella-Signature-Previous. Um handler que ainda use o segredo antigo continua a funcionar se verificar ambos os cabeçalhos, como no exemplo em Verificar assinaturas.3
Mudar para o novo segredo
Atualize o seu handler para o novo segredo dentro de 24 horas. Depois disso, o Flowella deixa de enviar
X-Flowella-Signature-Previous.Testar localmente
Para receber webhooks no seu próprio computador, exponha o seu servidor local através de um túnel público, como o ngrok ou o Cloudflare Tunnel. Use o URL público do túnel como endpoint. Depois use Send test event para enviar pedidos sempre que precisar. O Flowella recusa endereços locais e privados, por isso um URLlocalhost não funciona.
Relacionado
Gerir webhooks na aplicação
Adicione endpoints, envie eventos de teste e consulte o registo de entregas.
Introdução à API
Autenticação, âmbitos, limites de taxa e erros.
Chaves de API
Crie a chave de que precisa para a API de webhooks.
Developer hub
Pedidos de API recentes, guias de início rápido e a API sandbox.

