Un asistente inteligente de WhatsApp que integra OpenAI GPT-4 para responder mensajes automáticamente, con sistema de confirmaciones y tareas programadas.
- 🤖 IA Avanzada: Integración con OpenAI GPT-4
- 📱 UltraMsg: Comunicación estable con WhatsApp
- ✅ Confirmaciones: Detección automática de mensajes de confirmación
- 👤 Contexto: Gestión de contexto de conversación por usuario
- ⏰ Tareas Programadas: Envío automático de agenda diaria
- 🏗️ Arquitectura Modular: Código organizado y mantenible
- 📱 Detección de Grupos: Ignora automáticamente mensajes de grupos de WhatsApp
- 🎮 Sistema de Comandos: Control remoto de bots por cliente con autenticación
- 🔥 Firebase Integration: Gestión dinámica de clientes en la nube
- 📊 Múltiples Clientes: Soporte para múltiples consultorios con asistentes independientes
src/
├── index.js # 🚀 Punto de entrada principal
├── managers/ # 🔌 Gestores de servicios externos
│ ├── openAIManager.js # 🤖 Gestor de OpenAI
│ ├── ultramsgManager.js # 📱 Gestor de UltraMsg
│ └── facebookTokenManager.js # 🔑 Gestor de tokens Facebook
├── services/ # ⚙️ Servicios de negocio
│ ├── confirmationManager.js # ✅ Gestor de confirmaciones
│ ├── userContextManager.js # 👤 Gestor de contexto de usuario
│ └── scheduler.js # ⏰ Scheduler de tareas
├── controllers/ # 🎮 Controladores de endpoints
│ ├── webhookManager.js # 🌐 Controlador de webhooks
│ └── schedulerController.js # 🎛️ Controlador del scheduler
├── utils/ # 🛠️ Utilidades (futuro)
└── README.md # 📚 Documentación de la estructura
npm install
Crea un archivo .env
en la raíz del proyecto:
# OpenAI Configuration
OPENAI_API_KEY=sk-your-openai-api-key
ASISTENTE_ID=asst-your-assistant-id
# UltraMsg Configuration
ULTRAMSG_TOKEN=tu-token-de-ultramsg
ULTRAMSG_INSTANCE_ID=tu-instance-id
ULTRAMSG_WEBHOOK_TOKEN=tu-webhook-token
# Firebase Configuration
FIREBASE_PROJECT_ID=tu-proyecto-id
FIREBASE_CLIENT_EMAIL=tu-service-account@proyecto.iam.gserviceaccount.com
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nTu-clave-privada-aqui\n-----END PRIVATE KEY-----\n"
FIREBASE_DATABASE_URL=https://tu-proyecto-id.firebaseio.com
# Server Configuration
PORT=3000
- Crea una cuenta en UltraMsg
- Crea una instancia y escanea el código QR
- Obtén el Token e Instance ID
- Configura el webhook URL:
https://tu-dominio.com/webhook
- Crea un proyecto en Firebase Console
- Habilita Firestore Database
- Crea un Service Account y descarga las credenciales
- Configura las variables de Firebase en tu
.env
Si tienes clientes configurados en variables de entorno:
npm run migrate-firebase
npm run create-assistant
npm run dev
npm start
npm run ngrok
GET /webhook
- Verificación de webhook UltraMsgPOST /webhook
- Recepción de mensajes de WhatsApp
POST /reset_threads
- Resetear todos los threads de OpenAI
POST /mark-agenda-sent
- Marcar agenda enviada a un usuarioGET /user-context/:userId
- Obtener contexto de un usuarioPOST /clear-user-context/:userId
- Limpiar contexto de un usuario
POST /clients
- Crear nuevo clienteGET /clients
- Listar todos los clientesGET /clients/:clientId
- Obtener cliente específicoPUT /clients/:clientId
- Actualizar clienteDELETE /clients/:clientId
- Eliminar clienteGET /clients/stats/overview
- Estadísticas de clientesPOST /clients/reload
- Recargar clientes desde Firebase
GET /scheduler/status
- Estado de tareas programadasPOST /scheduler/run/:taskName
- Ejecutar tarea manualmentePOST /scheduler/stop
- Detener todas las tareasPOST /scheduler/restart
- Reiniciar tareas
GET /group-settings
- Ver configuración de comportamiento en grupos
GET /bots/status
- Ver estado de todos los botsGET /clients
- Ver configuración de clientesPOST /bots/command
- Ejecutar comando manualmente
GET /health
- Health checkPOST /test
- Test endpoint
El sistema incluye tareas automáticas:
- 📅 Agenda Diaria: Envía recordatorios a las 10:00 AM
- 🧹 Limpieza Semanal: Limpia datos antiguos los domingos
- 🔍 Verificación de Estado: Verifica conexión cada hora
curl http://localhost:3000/scheduler/status
curl -X POST http://localhost:3000/scheduler/run/dailyAgenda
El sistema detecta automáticamente los mensajes que provienen de grupos de WhatsApp y los ignora para evitar respuestas no deseadas.
- Detección Automática: Identifica mensajes de grupos por múltiples métodos
- Ignorado Silencioso: Los mensajes de grupos no generan respuestas
- Logging Detallado: Registra información sobre grupos detectados
- Configuración Flexible: Endpoint para verificar configuración
- Formato de ID: Verifica si
from
termina en@g.us
- Campo isGroup: Verifica si
chat.isGroup
estrue
- ID de Chat: Verifica si
chat.id
termina en@g.us
curl http://localhost:3000/group-settings
npm run test-groups
npm run test-ultramsg
npm run test-scheduler
npm run test-webhook
npm run test-groups
npm run test-firebase
src/README.md
- Documentación detallada de la estructuraSCHEDULER_GUIDE.md
- Guía completa del sistema de tareas programadasCOMMANDS_GUIDE.md
- Guía completa del sistema de comandosFIREBASE_MIGRATION_GUIDE.md
- Guía completa de migración a Firebase
npm start
- Iniciar servidor en producciónnpm run dev
- Iniciar servidor en desarrollo con nodemonnpm run ngrok
- Exponer servidor con ngroknpm run test-ultramsg
- Probar conexión con UltraMsgnpm run test-scheduler
- Probar sistema de tareasnpm run test-webhook
- Probar webhooknpm run test-groups
- Probar detección de gruposnpm run test-commands
- Probar sistema de comandosnpm run test-firebase
- Probar conexión con Firebasenpm run migrate-firebase
- Migrar clientes a Firebasenpm run create-assistant
- Crear nuevo asistente de OpenAInpm run list-assistants
- Listar asistentes existentes
El proyecto utiliza una arquitectura modular con separación de responsabilidades:
- Managers: Gestores de servicios externos (OpenAI, UltraMsg)
- Services: Lógica de negocio (confirmaciones, contexto, scheduler)
- Controllers: Manejo de peticiones HTTP
- Utils: Utilidades y helpers
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature
) - Commit tus cambios (
git commit -m 'Add some AmazingFeature'
) - Push a la rama (
git push origin feature/AmazingFeature
) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE
para más detalles.
¡Disfruta usando tu asistente inteligente de WhatsApp! 🤖✨