Notificaciones y Comunicaciones
Tabla de Contenidos
- Arquitectura General
- Arquitectura de Modulos
- Email (SMTP)
- WhatsApp (Twilio)
- Push Notifications (Expo)
- Colas con Bull
- Campanas Masivas
- Webhooks de Estado
- Flujo de Campana
- Workflows y Automatizacion
- Proveedores por Ambiente
Arquitectura General
El sistema de notificaciones y comunicaciones de Nvito sigue una arquitectura basada en colas para garantizar entrega confiable, reintentos automaticos y procesamiento asincrono de mensajes masivos.
Componentes Principales
| Componente | Archivo | Responsabilidad |
|---|---|---|
EmailService | notifications/email.service.ts | Envio de emails via SMTP (nodemailer) |
WhatsAppService | notifications/whatsapp.service.ts | Envio de WhatsApp via Twilio |
TemplateService | notifications/template.service.ts | Renderizado de templates de email |
PushSenderService | notifications/push-sender.service.ts | Envio de push notifications via Expo Push API |
NotificationHelperService | notifications/notification-helper.service.ts | Orquestacion de notificaciones de dominio (RSVP, invitaciones, recordatorios) |
PushNotificationService | notifications/push-notification.service.ts | Registro de tokens y envio de push a hosts |
QueueService | queue/queue.service.ts | Gestion de colas Bull (email + whatsapp + push) |
EmailProcessor | queue/processors/email.processor.ts | Procesador de jobs de email |
WhatsAppProcessor | queue/processors/whatsapp.processor.ts | Procesador de jobs de WhatsApp |
PushProcessor | queue/processors/push.processor.ts | Procesador de jobs de push notifications |
CommunicationsService | communications/communications.service.ts | Facade de campanas masivas (delega a sub-servicios) |
MessageDispatcherService | communications/services/message-dispatcher.service.ts | Router que delega a dispatchers especializados por tipo |
InvitationDispatcherService | communications/services/invitation-dispatcher.service.ts | Envio de invitaciones y Save the Date; genera access tokens |
ReminderMessageDispatcherService | communications/services/reminder-message-dispatcher.service.ts | Envio de recordatorios, mensajes personalizados y chatbot RSVP |
CampaignQueryService | communications/services/campaign-query.service.ts | Consultas de campanas, mensajes, estadisticas y retry |
RecipientFilterService | communications/services/recipient-filter.service.ts | Filtrado de invitados por status, grupo, tags y canal |
RecipientEstimatorService | communications/services/recipient-estimator.service.ts | Estimacion rapida de destinatarios por canal (sin desencriptar) |
SpamPreventionService | communications/services/spam-prevention.service.ts | Deteccion de campanas duplicadas en ventana de 24h |
SmartRoutingService | communications/services/smart-routing.service.ts | Resolucion de canal optimo (Email > WhatsApp > SMS) |
MessagePreviewService | communications/services/message-preview.service.ts | Generacion de previews con variables interpoladas |
CommunicationTemplateService | communications/services/communication-template.service.ts | CRUD de templates de comunicacion y gestion de defaults |
ChatbotService | communications/chatbot/chatbot.service.ts | Maquina de estados de conversacion WhatsApp RSVP |
NluService | communications/chatbot/nlu.service.ts | Deteccion de intent (confirmar/declinar) en respuestas de WhatsApp |
CommunicationsWebhookController | communications/communications-webhook.controller.ts | Recepcion de webhooks de Twilio (status + incoming chatbot) |
CommunicationTemplatesController | communications/controllers/communication-templates.controller.ts | CRUD de templates de comunicacion |
Arquitectura de Modulos
El sistema de notificaciones esta organizado en 3 modulos con dependencias bien definidas para evitar dependencias circulares:
| Modulo | Responsabilidad | Exporta |
|---|---|---|
NotificationChannelsModule | Servicios de canal puros (sin dependencia a Queue) | EmailService, WhatsAppService, TemplateService, PushSenderService |
QueueModule | Colas Bull y processors. Importa NotificationChannelsModule (no NotificationsModule) | BullModule, QueueService |
NotificationsModule | Servicios de dominio que orquestan notificaciones | NotificationHelperService, PushNotificationService, NotificationChannelsModule |
Patron clave: NotificationChannelsModule es el modulo base que ambos (QueueModule y NotificationsModule) importan. Esto elimina la dependencia circular que existiria si NotificationsModule y QueueModule se importaran mutuamente. No hay forwardRef en el proyecto.
Email (SMTP)
Configuracion
El servicio de email usa nodemailer para enviar correos via SMTP. La configuracion es flexible para soportar multiples proveedores:
// Configuracion del transporter
const transportOptions = {
host: config.email.smtp.host, // Servidor SMTP
port: config.email.smtp.port, // Puerto (1025 dev, 587 prod)
secure: false, // TLS se negocia via STARTTLS
auth: user ? { user, pass } : undefined, // Auth condicional
};
Auth Condicional
- MailDev (local): No requiere autenticacion (
userno configurado) - Mailtrap (dev/test): Requiere usuario y contrasena
- Produccion: Requiere credenciales SMTP del proveedor final
Opciones de Envio
interface SendEmailOptions {
to: string | string[]; // Destinatario(s)
subject: string; // Asunto
text?: string; // Cuerpo en texto plano
html?: string; // Cuerpo en HTML
from?: string; // Remitente (default: Nvito <noreply@nvito.mx>)
replyTo?: string; // Reply-to (default: hola@nvito.mx)
tags?: { name: string; value: string }[]; // Tags para tracking
}
Envio por Lotes
El EmailService soporta envio en lotes con sendBatchEmails(), que procesa multiples emails en paralelo usando Promise.allSettled() para que un fallo individual no afecte al resto.
Verificacion de Configuracion
El metodo verifyConfiguration() prueba la conexion SMTP sin enviar correos, util para health checks del sistema.
WhatsApp (Twilio)
Configuracion
El servicio de WhatsApp usa el SDK de Twilio para enviar mensajes a traves de WhatsApp Business API:
// Variables de entorno
TWILIO_ACCOUNT_SID=ACxxxxxxxx
TWILIO_AUTH_TOKEN=xxxxxxxxxx
TWILIO_WHATSAPP_FROM=whatsapp:+14155238886 // Numero sandbox o produccion
Tipos de Mensaje
| Tipo | Metodo | Ventana 24h | Uso |
|---|---|---|---|
| Freeform | sendFreeformMessage() | Requerida | Mensajes dentro de conversacion activa |
| Template | sendTemplateMessage() | No requerida | Notificaciones proactivas (invitaciones, recordatorios) |
Mensajes con Template
Los mensajes con template pre-aprobado por WhatsApp/Meta se envian usando contentSid (ID del template en Twilio) y variables dinamicas:
interface SendWhatsAppTemplateOptions {
to: string; // Numero destino
contentSid: string; // ID del template Twilio
contentVariables?: Record<string, string>; // Variables del template
}
Formato de Numeros
El servicio formatea automaticamente los numeros de telefono:
- Si ya tiene formato
whatsapp:+XX...: lo usa directamente - Si tiene prefijo
+: agregawhatsapp:al inicio - Si empieza con
52: agregawhatsapp:+ - Otro caso: asume codigo de Mexico (
whatsapp:+52...)
Degradacion Elegante
Si las credenciales de Twilio no estan configuradas, el servicio no lanza error sino que retorna { sid: 'mock-sid', success: false } y registra un warning en logs. Esto permite que el sistema funcione en ambientes de desarrollo sin Twilio.
Push Notifications (Expo)
Arquitectura
Las push notifications se envian a dispositivos moviles (iOS/Android) a traves de la Expo Push API. El flujo es:
- La app movil registra su Expo Push Token via
POST /mobile/auth/register-push - El token se almacena en la tabla
MobileSession - Cuando ocurre un evento relevante (nuevo RSVP, check-in, etc.), el
PushNotificationServiceencola un job de push - El
PushProcessorprocesa el job y envia la notificacion viaPushSenderService
PushSenderService
El servicio de envio puro que usa la Expo Push API:
interface PushPayload {
to: string; // Expo Push Token
title: string; // Titulo de la notificacion
body: string; // Cuerpo del mensaje
data?: Record<string, unknown>; // Datos extras para la app
}
PushNotificationService
Servicio de dominio que orquesta el envio de push notifications a los hosts de un evento:
notifyEventHosts(eventId, title, body, data)— Busca todas las sesiones activas conrole=HOSTdel evento y encola un push para cada unaregisterToken(sessionId, pushToken)— Registra o actualiza el push token de una sesion movil
Degradacion Elegante
Si no hay sesiones activas con push token para el evento, el servicio simplemente no envia nada (sin error). Esto permite que el sistema funcione sin la app movil instalada.
Colas con Bull
Arquitectura de Colas
El sistema usa Bull (basado en Redis) para procesar mensajes de forma asincrona:
| Cola | Nombre | Concurrencia | Proposito |
|---|---|---|---|
email | Default (1) | Procesamiento de emails individuales y por lote | |
whatsapp | 3 | Procesamiento de mensajes WhatsApp | |
| Push | push | Default (1) | Procesamiento de push notifications (Expo) |
Configuracion de Redis
// queue.config.ts
redis: {
host: process.env.REDIS_HOST || 'localhost',
port: parseInt(process.env.REDIS_PORT || '6379'),
password: process.env.REDIS_PASSWORD || undefined,
db: parseInt(process.env.REDIS_DB || '0'),
}
Opciones por Defecto de Jobs
defaultJobOptions: {
attempts: 3, // 3 intentos antes de marcar como fallido
backoff: {
type: 'exponential', // Backoff exponencial entre reintentos
delay: 5000, // Delay base de 5 segundos
},
removeOnComplete: true, // Limpiar jobs completados
removeOnFail: false, // Mantener jobs fallidos para analisis
}
Reintentos con Backoff Exponencial
| Intento | Delay |
|---|---|
| 1ro | 5 segundos |
| 2do | 10 segundos |
| 3ro | 20 segundos |
| (fallo final) | Job marcado como failed |
Tipos de Jobs
Email:
send-email: Envio de un email individualsend-batch-email: Envio de un lote de emails
WhatsApp:
send-whatsapp: Envio de un mensaje WhatsApp (freeform o template)
Push:
send-push: Envio de una push notification a dispositivo movil via Expo
Operaciones de Gestion
El QueueService expone operaciones administrativas:
| Operacion | Metodo | Descripcion |
|---|---|---|
| Estado de job | getJobStatus(id) | Consultar estado, progreso, razon de fallo |
| Estadisticas | getQueueStats() | Conteo de waiting, active, completed, failed, delayed |
| Reintentar | retryJob(id) | Reintentar un job fallido manualmente |
| Remover | removeJob(id) | Eliminar un job de la cola |
| Limpiar | cleanCompletedJobs(ms) | Limpiar jobs completados mas antiguos que X ms |
| Pausar | pauseQueue() | Pausar procesamiento de la cola |
| Reanudar | resumeQueue() | Reanudar procesamiento |
Campanas Masivas
Modelo de Datos
El sistema de comunicaciones masivas usa tres entidades principales:
- CommunicationCampaign: Representa una campana de envio (ej: "Envio de invitacion - Boda Ana"). Incluye tipo, canal, metricas acumuladas, filtros de destinatarios y referencia opcional a workflow.
- CommunicationMessage: Cada mensaje individual dentro de la campana, con tracking de estado, timestamps y error.
- CommunicationTemplate: Plantillas reutilizables de mensajes por tipo de campana y categoria de evento.
Arquitectura SRP (Sub-servicios)
El modulo de comunicaciones sigue el patron de sub-servicios con responsabilidad unica:
Tipos de Campana
El sistema soporta 5 tipos de envio masivo:
| Tipo | Metodo | Canal | Proposito |
|---|---|---|---|
| Invitacion | sendInvitation() | Email / WhatsApp / Both | Enviar link de la invitacion digital a invitados |
| Recordatorio RSVP | sendReminder() | Email / WhatsApp / Both | Recordar a invitados pendientes de confirmar |
| Mensaje personalizado | sendMessage() | Email / WhatsApp / Both | Comunicado libre del organizador |
| Save the Date | sendSaveTheDate() | Email / WhatsApp / Both | Anuncio visual con imagen del evento |
| RSVP WhatsApp Chatbot | sendRsvpChatbot() | Confirmacion automatizada via chatbot conversacional |
Canales de Comunicacion
| Canal | Codigo | Descripcion |
|---|---|---|
EMAIL | Envio via SMTP (nodemailer) | |
WHATSAPP | Envio via Twilio WhatsApp Business | |
| SMS | SMS | Envio via Twilio SMS |
| Ambos | BOTH | Envio por Email + WhatsApp simultaneo |
Filtrado de Destinatarios
El RecipientFilterService soporta multiples criterios combinables:
| Criterio | Campo | Descripcion |
|---|---|---|
| IDs especificos | guestIds[] | Lista de invitados seleccionados manualmente |
| Estado RSVP | status[] | PENDING, CONFIRMED, DECLINED |
| Grupos | groupIds[] | Grupos familiares o sociales |
| Tags | tags[] | Etiquetas personalizadas |
| Disponibilidad de canal | channelAvailable | EMAIL, WHATSAPP, BOTH — filtra por datos de contacto |
Estados de Mensaje
| Estado | Descripcion |
|---|---|
pending | Mensaje creado, pendiente de encolar |
queued | Encolado en Bull para procesamiento |
sent | Enviado al proveedor (SMTP/Twilio) |
delivered | Confirmado como entregado al dispositivo |
opened | Abierto/leido por el destinatario |
failed | Fallo en el envio (error de proveedor) |
bounced | Rebotado (email invalido, buzon lleno, etc.) |
Metricas de Campana
Cada campana mantiene metricas acumuladas que se recalculan en cada webhook de estado:
| Metrica | Campo | Descripcion |
|---|---|---|
| Destinatarios | totalRecipients | Total de mensajes creados en la campana |
| Enviados | totalSent | Mensajes enviados exitosamente |
| Entregados | totalDelivered | Mensajes confirmados como entregados |
| Fallidos | totalFailed | Mensajes que fallaron o rebotaron |
| Abiertos | totalOpened | Mensajes abiertos/leidos |
Estados de Campana
| Estado | Descripcion |
|---|---|
DRAFT | Campana creada pero no enviada |
SCHEDULED | Programada para envio futuro (scheduledAt) |
SENDING | En proceso de envio |
COMPLETED | Todos los mensajes procesados |
FAILED | Fallo critico en el envio |
Templates de Comunicacion
El sistema de templates permite crear plantillas reutilizables para cada tipo de campana:
Modelo CommunicationTemplate:
| Campo | Tipo | Descripcion |
|---|---|---|
name | string | Nombre descriptivo de la plantilla |
campaignType | enum | Tipo de campana asociado (invitation_send, rsvp_reminder, etc.) |
eventTypeCategory | enum | Categoria de evento: boda, xv_anos, corporativo, general |
subject | string | Asunto del email (si aplica) |
htmlBody | string | Cuerpo HTML para emails |
textBody | string | Cuerpo texto plano para WhatsApp/SMS |
variables | string[] | Lista de variables usadas en el template |
isDefault | boolean | Template por defecto para su tipo+organizacion |
status | enum | DRAFT, ACTIVE, ARCHIVED |
previewImageUrl | string | URL de imagen de preview |
whatsappContentSid | string | ID del template aprobado en Twilio Content API |
Variables disponibles (12):
| Variable | Valor |
|---|---|
{nombre} | Nombre del invitado |
{evento} | Nombre del evento |
{fecha} | Fecha del evento |
{hora} | Hora del evento |
{ubicacion} | Nombre de la ubicacion |
{direccion} | Direccion completa |
{organizacion} | Nombre de la organizacion |
{link_invitacion} | URL de la invitacion digital |
{dias_faltan} | Dias restantes para el evento |
{imagen} | URL de imagen (Save the Date) |
{link_app} | Deep link a la app movil |
{codigo_acceso} | Codigo de acceso para la app |
Endpoints:
| Metodo | Ruta | Descripcion |
|---|---|---|
POST | /communications/templates | Crear template |
GET | /communications/templates | Listar con filtros (campaignType, status, eventTypeCategory, paginacion) |
GET | /communications/templates/:id | Detalle de template |
PATCH | /communications/templates/:id | Actualizar template |
DELETE | /communications/templates/:id | Archivar template (soft delete) |
POST | /communications/templates/:id/duplicate | Duplicar template |
POST | /communications/templates/:id/set-default | Marcar como default para su tipo+organizacion |
Preview y Estimacion
Antes de enviar una campana, el sistema permite previsualizar el mensaje y estimar el numero de destinatarios:
Preview de mensajes (POST /communications/preview-message):
- Genera el HTML o texto final del mensaje con todas las variables interpoladas
- Soporta preview por canal (EMAIL muestra HTML renderizado, WHATSAPP muestra texto plano)
- Permite seleccionar un invitado especifico para ver su preview personalizado
- Util para verificar que el template se ve correctamente antes del envio masivo
Estimacion de destinatarios (POST /communications/estimate-recipients):
- Cuenta invitados que coinciden con los filtros seleccionados
- Retorna desglose por canal:
{ total, byChannel: { email, whatsapp, both } } - Usa queries de conteo (sin desencriptar datos) para rendimiento optimo
- El frontend muestra el conteo en tiempo real conforme el usuario ajusta filtros
Prevencion de Spam
El SpamPreventionService protege contra envios duplicados accidentales:
Deteccion de duplicados (POST /communications/check-duplicate):
- Busca campanas del mismo tipo y canal enviadas en las ultimas 24 horas
- Retorna:
isDuplicate(boolean),lastCampaign(id, nombre, fecha, destinatarios),hoursSince(horas desde la ultima) - El frontend muestra un warning al usuario antes de confirmar el envio si detecta duplicado
Historial por invitado (GET /communications/guests/:guestId/communications):
- Muestra todos los mensajes recibidos por un invitado especifico
- Incluye informacion de la campana asociada (nombre, tipo, canal)
- Permite al organizador ver el historial completo de comunicaciones de cada invitado
Chatbot WhatsApp (RSVP)
El chatbot de WhatsApp permite a los invitados confirmar o declinar su asistencia de forma conversacional:
Componentes:
- ChatbotService: Maquina de estados de conversacion almacenada en Redis con TTL. Gestiona el flujo: saludo inicial → espera respuesta → procesa intent → confirma/declina → cierra conversacion.
- NluService: Procesamiento de lenguaje natural basico para detectar intents en las respuestas del invitado. Clasifica en: CONFIRM (si, confirmo, asisto, etc.), DECLINE (no, no puedo, declino, etc.), UNKNOWN (respuesta no entendida → re-pregunta).
- Mensajes predefinidos: Templates en
chatbot-messages.tspara cada etapa del flujo (saludo, confirmacion, rechazo, no entendido).
Webhook entrante: POST /communications/webhooks/twilio/incoming recibe las respuestas de los invitados y las procesa a traves del ChatbotService.
Smart Routing
El SmartRoutingService resuelve automaticamente el canal optimo para cada invitado basandose en sus datos de contacto disponibles:
| Prioridad | Condicion | Canal seleccionado |
|---|---|---|
| 1 | Invitado tiene email | |
| 2 | Invitado tiene telefono | |
| 3 | Solo telefono sin WhatsApp | SMS |
Cuando el canal solicitado es BOTH, el servicio envia por ambos canales (Email + WhatsApp) al mismo invitado, creando dos CommunicationMessage separados.
Webhooks de Estado
Twilio Status Webhooks
Twilio envia actualizaciones de estado a POST /communications/webhooks/twilio cada vez que un mensaje de WhatsApp cambia de estado.
Estados de Twilio
| Estado Twilio | Estado Interno | Timestamp | Descripcion |
|---|---|---|---|
sent | sent | sentAt | Mensaje enviado a Twilio |
delivered | delivered | deliveredAt | Mensaje entregado al dispositivo |
read | opened | openedAt | Mensaje leido por el destinatario |
failed | failed | failedAt | Envio fallido con codigo de error |
undelivered | failed | failedAt | No se pudo entregar |
Procesamiento del Webhook
- Twilio envia
POSTconMessageSid,MessageStatus,ErrorCode,ErrorMessage - El controller busca el
CommunicationMessageporproviderId(MessageSid) - Actualiza el estado del mensaje y timestamps correspondientes
- Recalcula las metricas de la campana asociada con
updateCampaignMetrics() - Siempre retorna
{ received: true }(incluso en error) para que Twilio no reintente
Seguridad del Webhook
- El endpoint esta decorado con
@Public()(no requiere autenticacion JWT) - Esta marcado con
@ApiExcludeEndpoint()(no aparece en Swagger) - En produccion se debe validar la firma de Twilio para verificar autenticidad
Flujo de Campana
El siguiente diagrama muestra el flujo completo de una campana de comunicacion desde el admin hasta la entrega:
Workflows y Automatizacion
Los workflows permiten automatizar el envio de comunicaciones basado en eventos del sistema. Cada workflow define un trigger, un tipo de campana y los parametros del mensaje.
Modelo CommunicationWorkflow
| Campo | Tipo | Descripcion |
|---|---|---|
name | string | Nombre descriptivo del workflow |
trigger | enum | Evento que dispara la ejecucion |
triggerConfig | object | Configuracion del trigger (ej: { daysOffset: 7 }) |
campaignType | enum | Tipo de campana a crear |
channel | string | Canal de comunicacion |
subject | string | Asunto (para email) |
body | string | Cuerpo del mensaje |
templateId | string | Template opcional |
recipientFilter | object | Filtros de destinatarios |
status | enum | ACTIVE, PAUSED, COMPLETED |
executionCount | number | Veces que se ha ejecutado |
lastExecutedAt | datetime | Ultima ejecucion |
Triggers Disponibles
| Trigger | Descripcion | Config |
|---|---|---|
GUEST_ADDED | Al agregar un invitado nuevo | - |
RSVP_CONFIRMED | Al confirmar asistencia | - |
RSVP_DECLINED | Al declinar asistencia | - |
DAYS_BEFORE_EVENT | X dias antes del evento | daysOffset: number |
EVENT_DAY | El dia del evento | - |
POST_EVENT | Despues del evento | - |
Endpoints
| Metodo | Ruta | Descripcion |
|---|---|---|
GET | /communication-workflows?eventId=xxx | Listar workflows del evento |
POST | /communication-workflows | Crear workflow |
PATCH | /communication-workflows/:id | Actualizar workflow |
DELETE | /communication-workflows/:id | Eliminar workflow |
PATCH | /communication-workflows/:id/toggle | Activar o pausar workflow |
Comportamiento
- Cada vez que un workflow se ejecuta, crea una nueva
CommunicationCampaigncon elworkflowIdvinculado - El contador
executionCountse incrementa automaticamente - Los workflows pausados no se ejecutan aunque ocurra el trigger
- Los workflows se evaluan en el contexto del evento al que pertenecen
Proveedores por Ambiente
Tabla de Proveedores
| Ambiente | Push | Redis | ||
|---|---|---|---|---|
| Local | MailDev (localhost:1025, sin auth) | Deshabilitado (mock) | Expo Push API (dev) | localhost:6379 |
| DEV (remoto) | Mailtrap (SMTP con auth) | Twilio Sandbox | Expo Push API | Redis Cloud |
| TEST (remoto) | Mailtrap (SMTP con auth) | Twilio Sandbox | Expo Push API | Redis Cloud |
| Produccion | TBD (proveedor SMTP prod) | Twilio Business | Expo Push API | Redis Cloud |
MailDev (Desarrollo Local)
MailDev es un servidor SMTP local que captura todos los emails enviados y los muestra en una interfaz web:
- SMTP:
localhost:1025(sin autenticacion) - Web UI:
localhost:1080(visualizacion de emails) - Ventaja: No se envian emails reales durante desarrollo
Mailtrap (DEV/TEST)
Mailtrap es un servicio de testing de email que captura correos en un inbox virtual:
- SMTP: Host y puerto proporcionados por Mailtrap
- Auth: Requiere usuario y contrasena
- Ventaja: Permite probar templates HTML sin enviar a destinatarios reales
Twilio Sandbox (DEV/TEST)
El sandbox de Twilio permite probar WhatsApp sin un numero de produccion:
- Numero sandbox:
whatsapp:+14155238886(default) - Limitacion: Solo funciona con numeros registrados en el sandbox
- Templates: Se usan los templates de prueba de Twilio
Variables de Entorno
| Variable | Descripcion | Default |
|---|---|---|
SMTP_HOST | Host del servidor SMTP | localhost |
SMTP_PORT | Puerto del servidor SMTP | 1025 |
SMTP_USER | Usuario SMTP (vacio para MailDev) | - |
SMTP_PASSWORD | Contrasena SMTP | - |
EMAIL_FROM | Remitente por defecto | Nvito <noreply@nvito.mx> |
EMAIL_REPLY_TO | Reply-to por defecto | hola@nvito.mx |
| Variable | Descripcion | Default |
|---|---|---|
TWILIO_ACCOUNT_SID | Account SID de Twilio | - |
TWILIO_AUTH_TOKEN | Auth Token de Twilio | - |
TWILIO_WHATSAPP_FROM | Numero de origen WhatsApp | whatsapp:+14155238886 |
QUEUE_WHATSAPP_CONCURRENCY | Concurrencia de cola WhatsApp | 3 |
QUEUE_WHATSAPP_RETRY_ATTEMPTS | Intentos de reintento | 3 |
QUEUE_WHATSAPP_RETRY_DELAY | Delay base de reintento (ms) | 5000 |
Redis / Colas
| Variable | Descripcion | Default |
|---|---|---|
REDIS_HOST | Host de Redis | localhost |
REDIS_PORT | Puerto de Redis | 6379 |
REDIS_PASSWORD | Contrasena de Redis | - |
REDIS_DB | Base de datos Redis | 0 |
Referencias
Modulo de Notificaciones (canales puros)
- EmailService:
src/modules/notifications/email.service.ts - WhatsAppService:
src/modules/notifications/whatsapp.service.ts - TemplateService:
src/modules/notifications/template.service.ts - PushSenderService:
src/modules/notifications/push-sender.service.ts - PushNotificationService:
src/modules/notifications/push-notification.service.ts - NotificationHelperService:
src/modules/notifications/notification-helper.service.ts - NotificationChannelsModule:
src/modules/notifications/notification-channels.module.ts - NotificationsModule:
src/modules/notifications/notifications.module.ts
Modulo de Colas
- QueueService:
src/modules/queue/queue.service.ts - EmailProcessor:
src/modules/queue/processors/email.processor.ts - WhatsAppProcessor:
src/modules/queue/processors/whatsapp.processor.ts - PushProcessor:
src/modules/queue/processors/push.processor.ts - QueueModule:
src/modules/queue/queue.module.ts
Modulo de Comunicaciones (campanas masivas)
- CommunicationsService:
src/modules/communications/communications.service.ts - CommunicationsController:
src/modules/communications/communications.controller.ts - WebhookController:
src/modules/communications/communications-webhook.controller.ts - TemplatesController:
src/modules/communications/controllers/communication-templates.controller.ts - MessageDispatcherService:
src/modules/communications/services/message-dispatcher.service.ts - InvitationDispatcherService:
src/modules/communications/services/invitation-dispatcher.service.ts - ReminderMessageDispatcherService:
src/modules/communications/services/reminder-message-dispatcher.service.ts - CampaignQueryService:
src/modules/communications/services/campaign-query.service.ts - RecipientFilterService:
src/modules/communications/services/recipient-filter.service.ts - RecipientEstimatorService:
src/modules/communications/services/recipient-estimator.service.ts - SpamPreventionService:
src/modules/communications/services/spam-prevention.service.ts - SmartRoutingService:
src/modules/communications/services/smart-routing.service.ts - MessagePreviewService:
src/modules/communications/services/message-preview.service.ts - CommunicationTemplateService:
src/modules/communications/services/communication-template.service.ts - ChatbotService:
src/modules/communications/chatbot/chatbot.service.ts - NluService:
src/modules/communications/chatbot/nlu.service.ts
Configuracion
- Queue Config:
src/config/queue.config.ts - WhatsApp Config:
src/config/whatsapp.config.ts