179 lines
8.8 KiB
SQL
179 lines
8.8 KiB
SQL
-- Base de datos para sistema de WhatsApp Bot
|
|
-- Fecha: 13 de noviembre de 2025
|
|
|
|
-- Tabla de usuarios
|
|
CREATE TABLE users (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
phone_number VARCHAR(20) UNIQUE NOT NULL,
|
|
name VARCHAR(100),
|
|
email VARCHAR(100),
|
|
status ENUM('active', 'inactive', 'blocked') DEFAULT 'active',
|
|
current_menu_id INT NULL,
|
|
current_step INT DEFAULT 0,
|
|
session_data JSON,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
INDEX idx_phone (phone_number),
|
|
INDEX idx_status (status)
|
|
);
|
|
|
|
-- Tabla de conversaciones
|
|
CREATE TABLE conversations (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
user_id INT NOT NULL,
|
|
message_id VARCHAR(100),
|
|
direction ENUM('incoming', 'outgoing') NOT NULL,
|
|
message_type ENUM('text', 'image', 'audio', 'video', 'document', 'template') DEFAULT 'text',
|
|
content TEXT,
|
|
media_url VARCHAR(500),
|
|
status ENUM('sent', 'delivered', 'read', 'failed', 'received') DEFAULT 'sent',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
INDEX idx_user (user_id),
|
|
INDEX idx_created (created_at),
|
|
INDEX idx_direction (direction)
|
|
);
|
|
|
|
-- Tabla de menús (sistema parametrizable)
|
|
CREATE TABLE menus (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(100) NOT NULL,
|
|
title VARCHAR(200) NOT NULL,
|
|
description TEXT,
|
|
parent_id INT NULL,
|
|
is_root BOOLEAN DEFAULT FALSE,
|
|
is_active BOOLEAN DEFAULT TRUE,
|
|
order_position INT DEFAULT 0,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (parent_id) REFERENCES menus(id) ON DELETE CASCADE,
|
|
INDEX idx_parent (parent_id),
|
|
INDEX idx_active (is_active),
|
|
INDEX idx_root (is_root)
|
|
);
|
|
|
|
-- Tabla de opciones de menú
|
|
CREATE TABLE menu_options (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
menu_id INT NOT NULL,
|
|
option_number INT NOT NULL,
|
|
text VARCHAR(200) NOT NULL,
|
|
action_type ENUM('menu', 'message', 'api_call', 'end') NOT NULL,
|
|
action_value VARCHAR(500),
|
|
is_active BOOLEAN DEFAULT TRUE,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (menu_id) REFERENCES menus(id) ON DELETE CASCADE,
|
|
INDEX idx_menu (menu_id),
|
|
INDEX idx_option (option_number),
|
|
UNIQUE KEY unique_menu_option (menu_id, option_number)
|
|
);
|
|
|
|
-- Tabla de respuestas automáticas
|
|
CREATE TABLE autoresponses (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
trigger_type ENUM('keyword', 'menu_selection', 'welcome') NOT NULL,
|
|
trigger_value VARCHAR(200),
|
|
response_text TEXT NOT NULL,
|
|
response_type ENUM('text', 'template') DEFAULT 'text',
|
|
is_active BOOLEAN DEFAULT TRUE,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
INDEX idx_trigger (trigger_type),
|
|
INDEX idx_active (is_active)
|
|
);
|
|
|
|
-- Tabla de configuración del sistema
|
|
CREATE TABLE system_config (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
config_key VARCHAR(100) UNIQUE NOT NULL,
|
|
config_value TEXT,
|
|
description TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Tabla de webhooks logs
|
|
CREATE TABLE webhook_logs (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
request_body TEXT,
|
|
response_body TEXT,
|
|
status_code INT,
|
|
ip_address VARCHAR(45),
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
INDEX idx_created (created_at)
|
|
);
|
|
|
|
-- Tabla de plantillas de mensajes
|
|
CREATE TABLE message_templates (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(100) UNIQUE NOT NULL,
|
|
template_name VARCHAR(100) NOT NULL, -- Nombre en WhatsApp Business API
|
|
language_code VARCHAR(10) DEFAULT 'es',
|
|
category ENUM('marketing', 'utility', 'authentication') DEFAULT 'utility',
|
|
status ENUM('pending', 'approved', 'rejected') DEFAULT 'pending',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
INDEX idx_status (status)
|
|
);
|
|
|
|
-- Insertar configuraciones iniciales
|
|
INSERT INTO system_config (config_key, config_value, description) VALUES
|
|
('whatsapp_token', 'EAAWTKu1iZAGABP46c7GZAFvHremu9uvTLOlgZCAa4eKUlaCqszzsQjjLcgnqORzo2EBhB7LZAcAqJ7clpGvNCk3oXKnqo8Fl0K2o7eHYoeaqZBesqjBPRfsd4ZBOdY4kN1YBJnmRznegTD9wtJZByVrRcMXF8YXaAJjLCuIFZCK7QFUpId7i4eVkFvbqUYnUKA91rgPvaeGRNZCLHa5ZC1ZB2Skn0gFNgPTBx7bedAMULYZD', 'Token de acceso de WhatsApp Business API'),
|
|
('whatsapp_phone_number_id', '938177732702718', 'ID del número de teléfono de WhatsApp'),
|
|
('webhook_verify_token', 'mi_token_secreto_123', 'Token de verificación para webhook'),
|
|
('welcome_message', '¡Hola! 👋 Bienvenido a nuestro servicio automatizado. Escribe *menu* para ver las opciones disponibles.', 'Mensaje de bienvenida para nuevos usuarios'),
|
|
('business_name', 'Mi Empresa', 'Nombre de la empresa');
|
|
|
|
-- Insertar menús de ejemplo
|
|
INSERT INTO menus (name, title, description, is_root, order_position) VALUES
|
|
('main_menu', '🏠 Menú Principal', 'Menú principal del sistema', TRUE, 1),
|
|
('services_menu', '💼 Servicios', 'Menú de servicios disponibles', FALSE, 2),
|
|
('payments_menu', '💳 Pagos', 'Opciones de pago', FALSE, 3),
|
|
('support_menu', '🆘 Soporte', 'Menú de soporte técnico', FALSE, 4);
|
|
|
|
-- Obtener IDs de menús para las opciones
|
|
SET @main_menu_id = (SELECT id FROM menus WHERE name = 'main_menu');
|
|
SET @services_menu_id = (SELECT id FROM menus WHERE name = 'services_menu');
|
|
SET @payments_menu_id = (SELECT id FROM menus WHERE name = 'payments_menu');
|
|
SET @support_menu_id = (SELECT id FROM menus WHERE name = 'support_menu');
|
|
|
|
-- Actualizar parent_id para menús secundarios
|
|
UPDATE menus SET parent_id = @main_menu_id WHERE name IN ('services_menu', 'payments_menu', 'support_menu');
|
|
|
|
-- Insertar opciones del menú principal
|
|
INSERT INTO menu_options (menu_id, option_number, text, action_type, action_value) VALUES
|
|
(@main_menu_id, 1, '💼 Ver servicios disponibles', 'menu', 'services_menu'),
|
|
(@main_menu_id, 2, '💳 Realizar pago', 'menu', 'payments_menu'),
|
|
(@main_menu_id, 3, '🆘 Contactar soporte', 'menu', 'support_menu'),
|
|
(@main_menu_id, 0, '❌ Salir', 'end', 'Gracias por usar nuestro servicio. ¡Hasta pronto!');
|
|
|
|
-- Insertar opciones del menú de servicios
|
|
INSERT INTO menu_options (menu_id, option_number, text, action_type, action_value) VALUES
|
|
(@services_menu_id, 1, '📋 Consulta de información', 'message', 'Un representante se contactará contigo para brindarte información detallada. Por favor, indica qué información necesitas.'),
|
|
(@services_menu_id, 2, '📞 Agendar cita', 'message', 'Para agendar una cita, por favor proporciona tu nombre completo y tu disponibilidad horaria.'),
|
|
(@services_menu_id, 3, '💰 Cotizar servicio', 'message', 'Para realizar una cotización, describe detalladamente el servicio que necesitas.'),
|
|
(@services_menu_id, 0, '🔙 Volver al menú principal', 'menu', 'main_menu');
|
|
|
|
-- Insertar opciones del menú de pagos
|
|
INSERT INTO menu_options (menu_id, option_number, text, action_type, action_value) VALUES
|
|
(@payments_menu_id, 1, '🧾 Consultar factura', 'message', 'Por favor, proporciona tu número de factura o documento de identidad para consultar tu factura pendiente.'),
|
|
(@payments_menu_id, 2, '💸 Pagar factura', 'message', 'Para procesar tu pago, necesitamos el número de factura y el método de pago preferido (transferencia, tarjeta, etc).'),
|
|
(@payments_menu_id, 3, '📄 Solicitar factura', 'message', 'Indica el período o servicio para el cual necesitas la factura.'),
|
|
(@payments_menu_id, 0, '🔙 Volver al menú principal', 'menu', 'main_menu');
|
|
|
|
-- Insertar opciones del menú de soporte
|
|
INSERT INTO menu_options (menu_id, option_number, text, action_type, action_value) VALUES
|
|
(@support_menu_id, 1, '🔧 Reporte técnico', 'message', 'Describe detalladamente el problema técnico que estás experimentando. Un técnico se contactará contigo pronto.'),
|
|
(@support_menu_id, 2, '❓ Preguntas frecuentes', 'message', 'Puedes consultar nuestras preguntas frecuentes en: www.miempresa.com/faq o describe tu pregunta específica.'),
|
|
(@support_menu_id, 3, '👤 Hablar con agente', 'message', 'Te estamos conectando con un agente humano. Por favor, espera un momento...'),
|
|
(@support_menu_id, 0, '🔙 Volver al menú principal', 'menu', 'main_menu');
|
|
|
|
-- Insertar respuestas automáticas
|
|
INSERT INTO autoresponses (trigger_type, trigger_value, response_text) VALUES
|
|
('keyword', 'menu', 'Aquí tienes nuestro menú principal:'),
|
|
('keyword', 'hola', '¡Hola! 👋 Escribe *menu* para ver nuestras opciones.'),
|
|
('keyword', 'ayuda', 'Estoy aquí para ayudarte. Escribe *menu* para ver las opciones disponibles.'),
|
|
('welcome', '', '¡Bienvenido! 👋 Soy tu asistente virtual. Escribe *menu* para comenzar.');
|
|
|
|
-- Insertar plantillas de mensaje
|
|
INSERT INTO message_templates (name, template_name, language_code, category, status) VALUES
|
|
('saludo_inicial', 'hello_world', 'es', 'utility', 'approved'),
|
|
('confirmacion_pago', 'payment_confirmation', 'es', 'utility', 'pending'); |