Saltar para o conteúdo

Webhooks de email que pode verificar, com novas tentativas e reenvio.

Saiba quando um email é entregue, dá bounce ou gera uma queixa, com eventos em que o seu endpoint pode confiar e que não perde sem dar por isso.

  • Sem cartão para testar
  • Preços em euros, sem IVA
verify.js
import { createHmac, timingSafeEqual } from "node:crypto";

export function verify(request, rawBody, secret) {
    const id = request.headers["outstamp-id"];
    const timestamp = request.headers["outstamp-timestamp"];
    const header = request.headers["outstamp-signature"] ?? "";

    if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false;

    const expected = createHmac("sha256", secret)
        .update(`${id}.${timestamp}.${rawBody}`)
        .digest("hex");

    return header.split(",")
        .map((part) => part.trim().replace(/^v1=/, ""))
        .some((candidate) => candidate.length === expected.length &&
            timingSafeEqual(Buffer.from(candidate, "hex"), Buffer.from(expected, "hex")));
}

O que cada entrega traz.

  • Uma assinatura sobre o corpo em bruto

    Outstamp-Signature: v1= é um HMAC-SHA256 do id da entrega, do timestamp e do corpo exato. Rejeite tudo o que tenha mais de 5 minutos.

  • Novas tentativas durante 48 horas

    10 tentativas: de imediato, depois ao fim de 5 segundos, 1, 5 e 30 minutos, e 2, 6, 12, 24 e 48 horas.

  • Reenvio durante 30 dias

    Reenvie qualquer evento a partir do painel ou da API. Recebe um novo id de entrega e mantém o id do evento.

  • Rotação sem interrupções

    Quando faz a rotação do segredo, a assinatura antiga e a nova são enviadas durante 24 horas.

Eventos que pode subscrever.

Eventos que pode subscrever.
GrupoEventosUso típico
Entregaemail.sent, email.delivered, email.delivery_delayedMarcar uma mensagem como entregue na sua aplicação
Problemasemail.bounced, email.complained, email.rejected, email.failed, email.suppressedDeixar de enviar emails para um endereço, ou alertar o suporte
Ciclo de vidaemail.accepted, email.scheduled, email.queued, email.canceled, email.submission_unknownTrilhos de auditoria e envios agendados
Domíniosdomain.created, domain.status_changed, domain.deletedSaber quando o DNS deixa de funcionar
Projetosuppression.created, suppression.deleted, project.quota_warning, project.reputation_warning, project.sending_paused, project.sending_resumedAlertas operacionais

Planeie isto antes de construir.

São as regras de qualquer sistema de webhooks honesto.

  • A entrega é feita pelo menos uma vez: elimine duplicados pelo id do evento.
  • A ordem não é garantida: email.delivered pode chegar antes de email.sent.
  • Responda com qualquer 2xx em 10 segundos, e faça o trabalho depois.
  • Após 20 falhas seguidas, o endpoint é desativado, e uma resposta 410 desativa-o de imediato.

Receba o seu primeiro evento.

  1. 1

    Adicione um endpoint

    Um URL HTTPS público e os tipos de evento que quer. O segredo de assinatura é mostrado uma única vez.

  2. 2

    Verifique a assinatura

    Use o corpo em bruto, compare em tempo constante e rejeite timestamps antigos.

  3. 3

    Desencadeie um evento de teste

    Envie para [email protected] com uma chave de teste, ou use o botão de teste no painel.

Perguntas sobre webhooks.

Os webhooks são assinados?

Sim. Cada entrega traz Outstamp-Signature: v1=, um HMAC-SHA256 do id da entrega, do timestamp e do corpo em bruto.

E se o meu endpoint estiver em baixo?

Repetimos 10 vezes ao longo de 48 horas. Após 20 falhas seguidas, o endpoint é desativado, e pode reenviar o que ele perdeu durante 30 dias.

Os emails de teste desencadeiam webhooks?

Sim. Os envios de teste produzem os mesmos eventos e webhooks que os de produção, marcados como test.

Receba hoje o seu primeiro evento assinado.

As chaves de teste e o simulador são grátis, sem cartão.

  • Sem cartão para testar
  • Preços em euros, sem IVA