whatsapp-crm-common
v0.3.0
Published
Componentes compartidos para servicios de WhatsApp CRM - Common utilities and types for WhatsApp CRM system
Maintainers
Readme
whatsapp-crm-common
Paquete compartido con tipos, utilidades e infraestructura común para los servicios WhatsApp CRM.
🚀 Características
- Sistema Híbrido de Eventos: BullMQ para persistencia + Redis Pub/Sub para tiempo real
- Colas Especializadas: 4 colas optimizadas (realtime, bulk, webhook, notifications)
- Tipos TypeScript Completos: Interfaces para todas las entidades de dominio
- Logging Estructurado: Sistema de logs con Pino y contexto automático
- Gestión de Sesiones: Soporte multi-tenant con agentes múltiples
- Utilidades WhatsApp: Formateo de números, extracción de contenido de mensajes
📦 Instalación
npm install whatsapp-crm-common🔧 Configuración
Opción 1: Variables de entorno (Recomendado)
Crea un archivo .env en tu proyecto:
# Copia el archivo de ejemplo desde el paquete
cp node_modules/whatsapp-crm-common/.env.example .env
# O crea tu propio .env con estas variables:
# Redis Configuration
REDIS_URL=redis://localhost:6379
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0
# Database Configuration
DATABASE_URL=postgresql://user:password@localhost:5432/whatsapp_crm
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_NAME=whatsapp_crm
DATABASE_USER=postgres
DATABASE_PASSWORD=
# Logging
LOG_LEVEL=info
NODE_ENV=development
# Queue Configuration
ENABLE_MESSAGE_QUEUE=true
WORKER_ENABLED=true
QUEUE_CONCURRENCY=5
MAX_SESSIONS_PER_PROCESS=100
# WhatsApp Configuration
WEBHOOK_URL=http://localhost:3000/webhook
MAX_RECONNECT_ATTEMPTS=5
QR_TIMEOUT_MS=60000
SYNC_FULL_HISTORY=falseOpción 2: Configuración programática
import { configureWhatsAppCommon } from 'whatsapp-crm-common';
configureWhatsAppCommon({
redis: {
url: 'redis://mi-servidor:6379',
password: 'mi-password',
db: 1
},
database: {
url: 'postgresql://user:pass@localhost:5432/mi_db'
},
logging: {
level: 'debug'
},
queue: {
enabled: true,
concurrency: 10
},
webhook: {
url: 'https://mi-webhook.com/whatsapp'
}
});Opción 3: Configuración mixta
El paquete seguirá esta prioridad:
- Configuración programática (la más alta)
- Variables de entorno de tu proyecto
- Valores por defecto del paquete
// Ejemplo: Configurar solo Redis programáticamente,
// el resto se tomará de variables de entorno o defaults
configureWhatsAppCommon({
redis: {
url: process.env.CUSTOM_REDIS_URL || 'redis://mi-redis:6379'
}
});Inicialización básica
import {
RedisClient,
WhatsAppMessageQueue,
logger
} from 'whatsapp-crm-common';
// Inicializar Redis (usa configuración global automáticamente)
const redisClient = RedisClient.getInstance();
// Inicializar cola de mensajes
const messageQueue = new WhatsAppMessageQueue(redisClient);
logger.info('Sistema inicializado correctamente');💡 Ejemplos de Uso
Manejo de Eventos
import {
EventPublisher,
WhatsAppEventType,
HybridEventRouter
} from 'whatsapp-crm-common';
const eventPublisher = new EventPublisher();
// Publicar mensaje recibido
await eventPublisher.publishMessageReceived(
'tenant-001',
1,
[message]
);
// Publicar código QR
await eventPublisher.publishQRCodeGenerated(
'tenant-001',
1,
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...'
);Formateo de Números
import { formatPhoneNumber, isValidPhoneNumber } from 'whatsapp-crm-common';
const formattedNumber = formatPhoneNumber('5491155555555');
// Resultado: '[email protected]'
const isValid = isValidPhoneNumber('5491155555555');
// Resultado: trueLogging Contextual
import { logger } from 'whatsapp-crm-common';
logger.info({
tenantId: 'tenant-001',
agentId: 1,
messageId: 'msg-123',
msg: 'Mensaje procesado correctamente'
});🏗️ Arquitectura
Sistema Híbrido de Eventos
// Eventos críticos → BullMQ (persistencia)
MESSAGE_NEW, MESSAGE_UPDATE, HISTORY_SYNC, CONTACT_UPDATE
// Eventos tiempo real → Redis Pub/Sub (velocidad)
QR_CODE_GENERATED, CONNECTION_UPDATE, PRESENCE_UPDATE, TYPING_STARTColas Especializadas
REALTIME: Mensajes nuevos, actualizaciones críticasBULK: Sincronización masiva de historialWEBHOOK: Notificaciones HTTP externasNOTIFICATIONS: Actualizaciones de contactos, presencia
📋 API Principal
Configuración
configureWhatsAppCommon()- Configuración programáticagetConfig()- Obtener configuración actual mezcladaenvironment- Variables de entorno centralizadas (legacy)RedisClient- Cliente Redis singletondefaultRedisConfig- Configuración Redis por defecto
Eventos
EventPublisher- Publicador de eventos tipadoHybridEventRouter- Router inteligente de eventosWhatsAppEventType- Tipos de eventos disponibles
Infraestructura
WhatsAppMessageQueue- Sistema de colas BullMQWhatsAppPubSubSystem- Sistema Pub/Sub Redis
Utilidades
logger- Logger estructurado con PinoformatPhoneNumber()- Formato números WhatsAppextractMessageContent()- Extrae contenido de mensajes
Tipos de Dominio
IChat,IMessage,IContact,IGroup- Interfaces de entidadesWhatsAppConfig,ChatInfo- Tipos de configuraciónHistoryOptions,MessageType- Tipos de operaciones
🔧 Variables de Entorno
# Redis Configuration
REDIS_URL=redis://localhost:6379
REDIS_HOST=localhost
REDIS_PORT=6379
# Database
DATABASE_URL=postgresql://user:password@localhost:5432/whatsapp_crm
# Queue Configuration
ENABLE_MESSAGE_QUEUE=true
QUEUE_CONCURRENCY=5
MAX_SESSIONS_PER_PROCESS=100
# WhatsApp Configuration
WEBHOOK_URL=http://localhost:3000/webhook
MAX_RECONNECT_ATTEMPTS=5
QR_TIMEOUT_MS=60000🚀 Scripts de Desarrollo
# Construir el paquete
npm run build
# Desarrollo con watch
npm run dev
# Limpiar build
npm run clean
# Verificar tipos
npm run type-check📊 Casos de Uso
Este paquete está optimizado para:
- Sistemas CRM de WhatsApp - Gestión completa de conversaciones
- APIs de WhatsApp - Envío y recepción de mensajes
- Automatización - Bots y respuestas automáticas
- Analíticas - Procesamiento de datos de conversación
- Webhooks - Integración con sistemas externos
🤝 Contribución
Las contribuciones son bienvenidas. Por favor:
- Fork el proyecto
- Crea una branch para tu feature
- Commit tus cambios
- Push a la branch
- Abre un Pull Request
📄 Licencia
MIT © WhatsApp CRM Team
