Skip to main content

Los tres canales

Cada notificación puede salir por hasta tres canales:
  • Inbox in-app: la lista que ve el usuario en la app (GET /api/notifications). Siempre funciona, sin configuración adicional.
  • Web Push (WEB_PUSH): notificación push del navegador, vía suscripción VAPID.
  • Email (EMAIL): correo enviado a través de Resend.

Registro público

POST /api/register y POST /api/register/camello (los dos endpoints de alta, sin sesión) notifican a todos los usuarios ADMIN por los tres canales: inbox, Web Push y email.

Eventos de Jobs

Los eventos JOB_* se disparan al crear un Job, al asignarlo (POST /api/admin/jobs/:id/assign) y en cada cambio de estado (aceptar, rechazar, completar, cancelar).

Preferencias por canal

GET /api/me/notification-preferences devuelve { items: [{ channel, enabled }] } para los canales WEB_PUSH y EMAIL (el inbox in-app no es configurable, siempre está activo). Se cambian con PATCH /api/me/notification-preferences.
Si el usuario no tiene fila de preferencia para un canal, ese canal cuenta como habilitado. La ausencia de preferencia no es “deshabilitado por defecto” — es “habilitado hasta que se diga lo contrario”. Es fácil asumir lo opuesto y la consecuencia es real: sin fila, ese usuario sigue recibiendo ese canal.

GET /api/admin/notifications

Este endpoint (solo ADMIN) lista deliveries — es decir, qué se envió por cada canal — no notificaciones. La distinción importa: una misma notificación lógica puede generar varias filas de delivery (una por canal), y esta lista es sobre esos envíos individuales, con su propio channel y status. Acepta limit, cursor, y filtros por channel, status, type y q.

Degradación sin configurar

Web Push y email dependen de variables de entorno; si faltan, ese canal se marca SKIPPED en el delivery correspondiente en lugar de fallar:
  • Sin las variables VAPID_*, el canal push queda SKIPPED.
  • Sin las variables RESEND_*, el canal email queda SKIPPED.
  • El inbox in-app no depende de ninguna de las dos y sigue funcionando en ambos casos.
El detalle de qué hace cada variable y qué se degrada exactamente sin ella está en Variables de entorno.