cambios importantes
This commit is contained in:
@@ -79,6 +79,134 @@ $db->exec("
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
");
|
||||
|
||||
// ─── Tabla de empresas (multi-tenant) ─────────────────────────────────────────
|
||||
|
||||
$db->exec("
|
||||
CREATE TABLE IF NOT EXISTS companies (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(150) NOT NULL,
|
||||
display_name VARCHAR(150),
|
||||
phone_number_id VARCHAR(50) NOT NULL UNIQUE,
|
||||
display_phone VARCHAR(30),
|
||||
api_base_url VARCHAR(500) NOT NULL,
|
||||
api_key VARCHAR(255),
|
||||
bot_type ENUM('ai','normal','hybrid') DEFAULT 'normal',
|
||||
requires_approval TINYINT(1) DEFAULT 0,
|
||||
is_active TINYINT(1) DEFAULT 1,
|
||||
config_json TEXT,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_phone_number_id (phone_number_id),
|
||||
INDEX idx_is_active (is_active)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
");
|
||||
|
||||
// ─── Cola de mensajes salientes ──────────────────────────────────────────────
|
||||
|
||||
$db->exec("
|
||||
CREATE TABLE IF NOT EXISTS outbound_queue (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
company_id INT NOT NULL,
|
||||
to_number VARCHAR(30) NOT NULL,
|
||||
message_type VARCHAR(30) NOT NULL DEFAULT 'text',
|
||||
payload TEXT NOT NULL,
|
||||
status ENUM('queued','sent','delivered','failed') DEFAULT 'queued',
|
||||
attempts TINYINT DEFAULT 0,
|
||||
max_attempts TINYINT DEFAULT 5,
|
||||
last_error TEXT,
|
||||
wam_id VARCHAR(100),
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_company_status (company_id, status),
|
||||
INDEX idx_status (status),
|
||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
");
|
||||
|
||||
// ─── Contexto de conversación del bot ─────────────────────────────────────────
|
||||
|
||||
$db->exec("
|
||||
CREATE TABLE IF NOT EXISTS bot_context (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
company_id INT NOT NULL,
|
||||
phone_number VARCHAR(30) NOT NULL,
|
||||
bot_type ENUM('normal','ai') DEFAULT 'normal',
|
||||
current_node VARCHAR(100),
|
||||
ai_history LONGTEXT,
|
||||
metadata TEXT,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY idx_bot_context (company_id, phone_number),
|
||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
");
|
||||
|
||||
// ─── Cola de aprobación — mensajes que requieren revisión humana ──────────────
|
||||
|
||||
$db->exec("
|
||||
CREATE TABLE IF NOT EXISTS pending_approval (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
company_id INT NOT NULL,
|
||||
phone_number VARCHAR(30) NOT NULL,
|
||||
contact_name VARCHAR(150),
|
||||
incoming_msg TEXT NOT NULL,
|
||||
bot_response TEXT,
|
||||
bot_type VARCHAR(30),
|
||||
context_json TEXT,
|
||||
status ENUM('pending','approved','rejected') DEFAULT 'pending',
|
||||
reviewed_by VARCHAR(100),
|
||||
review_note TEXT,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
reviewed_at DATETIME,
|
||||
INDEX idx_company_status (company_id, status),
|
||||
INDEX idx_status (status),
|
||||
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
");
|
||||
|
||||
// ─── Agregar company_id a tablas existentes ────────────────────────────────────
|
||||
|
||||
try {
|
||||
$db->exec("ALTER TABLE conversations ADD COLUMN company_id INT DEFAULT NULL AFTER id, ADD INDEX idx_conv_company (company_id)");
|
||||
} catch (\PDOException $e) {
|
||||
// Columna ya existe
|
||||
}
|
||||
|
||||
try {
|
||||
$db->exec("ALTER TABLE webhook_logs ADD COLUMN company_id INT DEFAULT NULL AFTER id, ADD INDEX idx_wh_company (company_id)");
|
||||
} catch (\PDOException $e) {}
|
||||
|
||||
try {
|
||||
$db->exec("ALTER TABLE notifications ADD COLUMN company_id INT DEFAULT NULL AFTER id, ADD INDEX idx_notif_company (company_id)");
|
||||
} catch (\PDOException $e) {}
|
||||
|
||||
// ─── Tabla de configuración general ────────────────────────────────────────────
|
||||
|
||||
$db->exec("
|
||||
CREATE TABLE IF NOT EXISTS settings (
|
||||
`key` VARCHAR(100) NOT NULL PRIMARY KEY,
|
||||
`value` TEXT DEFAULT NULL,
|
||||
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
");
|
||||
|
||||
// Seed defaults si están vacíos
|
||||
$seedSettings = [
|
||||
'whatsapp_access_token' => '',
|
||||
'whatsapp_app_secret' => '',
|
||||
'whatsapp_verify_token' => '',
|
||||
'whatsapp_business_account_id' => '',
|
||||
'whatsapp_default_phone_number_id' => '',
|
||||
'ai_provider' => 'mock',
|
||||
'openai_api_key' => '',
|
||||
'openai_model' => 'gpt-4o-mini',
|
||||
'ai_max_tokens' => '500',
|
||||
'ai_default_prompt' => 'Eres un asistente virtual de Palmas360. Responde de forma amable y profesional.',
|
||||
];
|
||||
$insertStmt = $db->prepare("INSERT IGNORE INTO settings (`key`, `value`) VALUES (?, ?)");
|
||||
foreach ($seedSettings as $k => $v) {
|
||||
$insertStmt->execute([$k, $v]);
|
||||
}
|
||||
|
||||
// ─── Usuario admin por defecto ────────────────────────────────────────────────
|
||||
|
||||
$email = 'admin@palmas360.com';
|
||||
|
||||
Reference in New Issue
Block a user