@dariomvg/create
resendwebhookssvixnextjsintegracion

Módulo de Webhooks de Resend

Maneja los eventos de webhooks de Resend para Next.js App Router. Es independiente de los otros módulos de email.

Dependencias

  • svix (se usa para verificar la firma del webhook; es lo mismo que usa Resend para firmar los payloads de sus webhooks)

Archivos

ArchivoPropósito
types.tsTipo de evento y forma del payload
service.tsLógica interna: verifica y parsea el payload entrante. No lo importes directamente.
actions.tsUna función handler por evento: editalas para agregar tu propia lógica
route.tsPunto de entrada delgado: verifica la firma y despacha a actions.ts. Ubicalo en app/api/webhooks/resend/route.ts
.env.localVariables de entorno

Arquitectura

route.ts nunca contiene lógica de negocio: solo verifica el request y llama a la función correspondiente en actions.ts. Así el manejo de eventos se edita en un solo lugar (actions.ts) sin tocar la verificación de la firma.

Resend → route.ts (verify + dispatch) → actions.ts (your logic per event)

Variables de entorno

RESEND_WEBHOOK_SECRET=

Configuración (pasos en el dashboard)

  1. En el dashboard de Resend, andá a Webhooks → Add Webhook.
  2. Definí la URL del endpoint como https://yourdomain.com/api/webhooks/resend.
  3. Seleccioná los eventos: email.sent, email.delivered, email.bounced, email.failed, email.opened, email.clicked.
  4. Copiá el Signing Secret en RESEND_WEBHOOK_SECRET.

Uso

Editá el handler del evento que te interese en actions.ts:

export async function onEmailBounced(event: ResendWebhookEvent) {
  // e.g. mark the recipient's address as invalid in your database
  await db.user.update({
    where: { email: event.data.to[0] },
    data: { emailValid: false },
  });
}

No hace falta cambiar ningún otro archivo: route.ts lo va a llamar automáticamente cuando llegue el evento correspondiente.