8.8 KiB
🏥 Sistema de Chatbot WhatsApp - Laboratorio Ximena Caicedo
📋 Descripción
Sistema completo de chatbot para WhatsApp diseñado específicamente para el Laboratorio Ximena Caicedo en Cúcuta, Colombia. Incluye flujos conversacionales inteligentes, detección de horarios, gestión de estados, respuestas automáticas y mucho más.
✨ Características Principales
🤖 Bot Inteligente
- ✅ Procesamiento de Lenguaje Natural (NLP) básico
- ✅ Detección de palabras clave y sinónimos
- ✅ Respuestas automáticas contextuales
- ✅ Detección de sentimientos y frustración
- ✅ Escalamiento automático a asesores humanos
📅 Gestión de Horarios
- ✅ Detección automática de horario de atención
- ✅ Mensajes diferentes dentro/fuera de horario
- ✅ Configuración por día de la semana
- ✅ Soporte para horarios partidos (7-12, 14-17)
🗂️ Sistema de Menús
- ✅ Menú principal con 5 opciones
- ✅ Submenú de exámenes con información detallada
- ✅ Navegación intuitiva con números
- ✅ Opción de volver al menú anterior
🔄 Gestión de Estados
- ✅ Tracking del estado de cada conversación
- ✅ Flujos de agendamiento paso a paso
- ✅ Validación de datos del paciente
- ✅ Timeout automático de estados inactivos
💬 Respuestas Automáticas
- ✅ Más de 15 triggers configurados
- ✅ Respuestas por palabras clave
- ✅ Información de precios, horarios, ubicación
- ✅ Instrucciones para exámenes específicos
📸 Procesamiento de Multimedia
- ✅ Recepción de órdenes médicas
- ✅ Fotos de documentos de identidad
- ✅ Validación de imágenes
- ✅ Almacenamiento seguro
🚀 Instalación
Requisitos Previos
- PHP 8.0 o superior
- MySQL 5.7 o superior
- Servidor web (Apache/Nginx)
- Cuenta de WhatsApp Business API
Paso 1: Clonar/Descargar Archivos
Asegúrate de tener todos los archivos en tu servidor.
Paso 2: Configurar Base de Datos
- Crea una base de datos MySQL
- Importa las tablas base si no existen:
-- Ejecutar los scripts SQL en este orden:
1. create_tables.sql (tablas base)
2. migrations/add_conversation_states.sql (tabla de estados)
3. setup_laboratorio_ximena.sql (datos del laboratorio)
Paso 3: Configurar Credenciales
Edita config/config.php con tus credenciales:
define('DB_HOST', 'localhost');
define('DB_NAME', 'whatsapp_bot');
define('DB_USER', 'tu_usuario');
define('DB_PASS', 'tu_password');
Paso 4: Ejecutar Instalación Automática
Visita en tu navegador:
http://tu-dominio.com/install_laboratorio.php
Este script:
- ✅ Verifica la conexión a la base de datos
- ✅ Crea la tabla de estados
- ✅ Importa menús y respuestas automáticas
- ✅ Verifica los servicios del sistema
- ✅ Muestra estadísticas finales
Paso 5: Configurar WhatsApp API
- Ve al panel de administración:
http://tu-dominio.com/index.php - Navega a la pestaña "Configuración"
- Ingresa:
- Token de Acceso de WhatsApp Business API
- Phone Number ID
- Webhook Verify Token
- API URL (por defecto: https://graph.facebook.com/v22.0/)
Paso 6: Configurar Webhook
- En Meta for Developers, configura el webhook:
- URL:
https://tu-dominio.com/api/webhook.php - Verify Token: El mismo que configuraste en el paso anterior
- Suscripciones:
messages,message_status
- URL:
📚 Estructura de Archivos
whatsapp/
├── services/
│ ├── BusinessHoursService.php # Gestión de horarios
│ ├── ConversationStateService.php # Estados de conversación
│ ├── NLPService.php # Procesamiento de lenguaje
│ ├── MenuService.php # Gestión de menús
│ ├── PatientDataValidator.php # Validación de datos
│ ├── BotServiceLab.php # Servicio principal del bot
│ └── WhatsAppService.php # Integración con WhatsApp API
├── api/
│ └── webhook.php # Recepción de mensajes
├── migrations/
│ └── add_conversation_states.sql # Migración de tabla de estados
├── setup_laboratorio_ximena.sql # Setup completo del laboratorio
├── install_laboratorio.php # Instalador automático
└── README_LABORATORIO.md # Este archivo
🎯 Flujos Implementados
1. Menú Principal
1️⃣ Agendar toma a domicilio
2️⃣ Consultar resultados
3️⃣ Información sobre exámenes
4️⃣ Ubicación y horarios
5️⃣ Hablar con un asesor
2. Submenú de Exámenes
1️⃣ Pruebas de embarazo
2️⃣ Prueba de paternidad
3️⃣ Helicobacter pylori (en aliento)
4️⃣ Orina de 24 horas
5️⃣ Solicitar cotización
0️⃣ Volver al menú principal
3. Palabras Clave Automáticas
- "precio", "costo", "cuánto" → Información de precios
- "resultado", "resultados" → Instrucciones para descargar
- "horario", "cuando" → Horarios de atención
- "domicilio", "casa" → Servicio a domicilio
- "embarazo" → Pruebas de embarazo
- "paternidad", "ADN" → Prueba de paternidad
- "ubicación", "donde" → Dirección y mapa
- "asesor", "ayuda", "persona" → Transferir a humano
- "gracias" → Mensaje de despedida
- "menú", "inicio" → Mostrar menú principal
⚙️ Configuración Avanzada
Horarios de Atención
Edita en la base de datos o desde el panel:
UPDATE system_config
SET config_value = '7:00-12:00,14:00-17:00'
WHERE config_key = 'business_hours_weekday';
UPDATE system_config
SET config_value = '8:00-11:00'
WHERE config_key = 'business_hours_saturday';
Agregar Nueva Respuesta Automática
Desde el panel de administración:
- Ve a "Respuestas Automáticas"
- Click en "Nueva Respuesta"
- Configura:
- Tipo de trigger (keyword, contains, exact, etc.)
- Palabras clave (separadas por comas)
- Texto de respuesta
- Prioridad (1-100, mayor = más prioridad)
Personalizar Menús
- Ve a "Menús Configurados"
- Click en el menú que quieres editar
- Modifica el mensaje de bienvenida o las opciones
- Guarda los cambios
🔧 Personalización
Cambiar Nombre del Laboratorio
Edita setup_laboratorio_ximena.sql antes de instalar, reemplaza:
'Laboratorio Ximena Caicedo' → 'Tu Laboratorio'
Modificar Valores de Exámenes
Edita los mensajes en la tabla menu_options o autoresponses:
UPDATE menu_options
SET response_text = REPLACE(response_text, '$28.000', '$30.000')
WHERE response_text LIKE '%$28.000%';
Agregar Nuevo Examen al Submenú
INSERT INTO menu_options (menu_id, option_key, option_order, option_text, response_type, response_text, is_active)
VALUES
(
(SELECT id FROM menus WHERE menu_key = 'lab_menu_examenes'),
'6',
6,
'Nuevo Examen',
'text',
'Información del nuevo examen...',
1
);
📊 Monitoreo y Logs
Ver Conversaciones Recientes
SELECT phone_number, message_text, direction, created_at
FROM conversations
ORDER BY created_at DESC
LIMIT 50;
Ver Estados Activos
SELECT phone_number, state, state_data, updated_at
FROM user_states
WHERE updated_at > DATE_SUB(NOW(), INTERVAL 1 HOUR);
Ver Logs de Webhook
SELECT * FROM webhook_logs
ORDER BY created_at DESC
LIMIT 20;
🐛 Solución de Problemas
El bot no responde
- Verifica que el webhook esté configurado correctamente
- Revisa los logs de webhook:
SELECT * FROM webhook_logs ORDER BY created_at DESC LIMIT 1 - Verifica las credenciales de WhatsApp API en "Configuración"
Mensajes fuera de horario no funcionan
- Verifica la zona horaria del servidor:
date_default_timezone_get() - Revisa la configuración de horarios en
system_config - Asegúrate de que
BusinessHoursService.phpexiste
Estados no se guardan
- Verifica que la tabla
user_statesexiste:
SHOW TABLES LIKE 'user_states';
- Si no existe, ejecuta:
migrations/add_conversation_states.sql
NLP no detecta palabras clave
- Revisa que las palabras estén en minúsculas en la BD
- Verifica que
autoresponsestiene registros activos:
SELECT COUNT(*) FROM autoresponses WHERE is_active = 1;
- Aumenta la prioridad de la respuesta automática
📞 Soporte
Para soporte técnico o consultas:
- 📧 Email: soporte@ejemplo.com
- 📱 WhatsApp: +57 XXX XXX XXXX
- 💻 GitHub: [repositorio]
📝 Changelog
Versión 1.0.0 (13 de enero de 2026)
- ✅ Implementación completa del sistema
- ✅ Menús del laboratorio
- ✅ 15+ respuestas automáticas
- ✅ Detección de horarios
- ✅ Gestión de estados
- ✅ NLP básico
- ✅ Validación de datos de pacientes
- ✅ Instalador automático
📜 Licencia
Este sistema fue desarrollado específicamente para Laboratorio Ximena Caicedo. Todos los derechos reservados © 2026
¡Sistema listo para producción! 🚀
Para comenzar, ejecuta install_laboratorio.php y sigue las instrucciones.