Receber webhooks de entrega no Next.js
Trate eventos de entrega (delivered, opened, bounced) do Publiq numa Route Handler, validando a assinatura HMAC.
Leia o corpo cru para validar a assinatura no header Publiq-Signature antes de confiar no evento:
import { NextResponse } from 'next/server';
import crypto from 'node:crypto';
const secret = process.env.PUBLIQ_WEBHOOK_SECRET!;
export async function POST(req: Request) {
const raw = await req.text();
const sig = req.headers.get('Publiq-Signature') ?? '';
const expected = crypto.createHmac('sha256', secret).update(raw).digest('hex');
if (sig !== expected) return new NextResponse('invalid signature', { status: 401 });
const event = JSON.parse(raw);
// event.type: 'message.delivered' | 'message.opened' | 'message.bounced' ...
console.log(event.type, event.data.message_id);
return NextResponse.json({ ok: true });
}Registre a URL do webhook no painel (ou via SDK: Webhooks). O secret é mostrado só uma vez na criação.
Boas práticas
- Chame o Publiq sempre do servidor — nunca exponha a API key no cliente.
- Crie a instância do cliente uma vez e reutilize-a entre requisições.
- Prefira
templateKeya HTML inline para manter o conteúdo versionado. - Trate
PubliqError(status/code); o SDK já retenta erros temporários com backoff. - Envie de um domínio verificado — veja Domínios.