Validación del Sistema WhatsApp Bot
Versión: = APP_VERSION ?>
Desarrollador: = DEVELOPER_NAME ?>
URL Base: = AUTO_DETECTED_URL ?>
Zona Horaria: = TIMEZONE ?>
Fecha/Hora: = date('Y-m-d H:i:s') ?>
=');
$tests[] = [
'name' => 'Versión de PHP',
'status' => $phpOk ? 'success' : 'error',
'message' => "PHP $phpVersion " . ($phpOk ? '✓' : '✗ (Se requiere PHP 8.0+)'),
'details' => $phpOk ? 'Versión compatible' : 'Actualiza a PHP 8.0 o superior'
];
// Test 2: Extensiones PHP
$requiredExtensions = ['pdo', 'pdo_mysql', 'curl', 'json', 'mbstring', 'openssl'];
$missingExtensions = [];
foreach ($requiredExtensions as $ext) {
if (!extension_loaded($ext)) {
$missingExtensions[] = $ext;
}
}
$extOk = empty($missingExtensions);
$tests[] = [
'name' => 'Extensiones PHP',
'status' => $extOk ? 'success' : 'error',
'message' => $extOk ? 'Todas las extensiones están disponibles ✓' : 'Faltan extensiones: ' . implode(', ', $missingExtensions),
'details' => $extOk ? 'PDO, cURL, JSON, mbstring, OpenSSL' : 'Instala las extensiones faltantes'
];
// Test 3: Conexión a Base de Datos
$dbOk = false;
$dbMessage = '';
$dbDetails = '';
try {
$db = Database::getInstance();
$result = $db->fetch("SELECT 1 as test");
$dbOk = ($result['test'] == 1);
$dbMessage = 'Conexión exitosa ✓';
$dbDetails = 'Host: ' . DB_HOST . ', DB: ' . DB_NAME;
} catch (Exception $e) {
$dbMessage = 'Error de conexión: ' . $e->getMessage();
$dbDetails = 'Verifica la configuración en config.php';
}
$tests[] = [
'name' => 'Base de Datos',
'status' => $dbOk ? 'success' : 'error',
'message' => $dbMessage,
'details' => $dbDetails
];
// Test 4: Estructura de tablas (solo si DB está OK)
$tablesOk = false;
$tablesMessage = '';
$tablesDetails = '';
if ($dbOk) {
try {
$requiredTables = ['users', 'conversations', 'menus', 'menu_options', 'autoresponses', 'system_config'];
$db = Database::getInstance();
$existingTables = [];
$missingTables = [];
foreach ($requiredTables as $table) {
$result = $db->fetch("SHOW TABLES LIKE '$table'");
if ($result) {
$existingTables[] = $table;
} else {
$missingTables[] = $table;
}
}
$tablesOk = empty($missingTables);
$tablesMessage = $tablesOk ? 'Todas las tablas existen ✓' : 'Faltan tablas: ' . implode(', ', $missingTables);
$tablesDetails = 'Tablas encontradas: ' . count($existingTables) . '/' . count($requiredTables);
} catch (Exception $e) {
$tablesMessage = 'Error verificando tablas: ' . $e->getMessage();
$tablesDetails = 'Ejecuta el instalador para crear las tablas';
}
} else {
$tablesMessage = 'No se puede verificar (DB no disponible)';
$tablesDetails = 'Primero arregla la conexión a la base de datos';
}
$tests[] = [
'name' => 'Estructura de Base de Datos',
'status' => $tablesOk ? 'success' : ($dbOk ? 'error' : 'warning'),
'message' => $tablesMessage,
'details' => $tablesDetails
];
// Test 5: Archivos críticos
$criticalFiles = [
'classes/Database.php',
'services/BotService.php',
'services/WhatsAppService.php',
'api/webhook.php',
'api/send_message.php'
];
$missingFiles = [];
foreach ($criticalFiles as $file) {
if (!file_exists($file)) {
$missingFiles[] = $file;
}
}
$filesOk = empty($missingFiles);
$tests[] = [
'name' => 'Archivos Críticos',
'status' => $filesOk ? 'success' : 'error',
'message' => $filesOk ? 'Todos los archivos críticos están presentes ✓' : 'Faltan archivos: ' . implode(', ', $missingFiles),
'details' => 'Classes, Services, APIs'
];
// Test 6: Permisos de archivos
$logsDir = 'logs';
$logsWritable = is_dir($logsDir) && is_writable($logsDir);
$tests[] = [
'name' => 'Permisos de Escritura',
'status' => $logsWritable ? 'success' : 'warning',
'message' => $logsWritable ? 'Directorio de logs escribible ✓' : 'Directorio de logs no escribible',
'details' => $logsWritable ? 'Los logs se pueden escribir correctamente' : 'chmod 755 en el directorio logs'
];
// Test 7: Configuración WhatsApp
$whatsappErrors = validateWhatsAppConfig();
$whatsappOk = empty($whatsappErrors);
$tests[] = [
'name' => 'Configuración WhatsApp',
'status' => $whatsappOk ? 'success' : 'warning',
'message' => $whatsappOk ? 'WhatsApp configurado correctamente ✓' : 'Configuración pendiente',
'details' => $whatsappOk ? 'Token, Phone ID y Webhook configurados' : implode(', ', $whatsappErrors)
];
// Test 8: Estado de instalación
$installationCompleted = isInstallationCompleted();
$tests[] = [
'name' => 'Estado de Instalación',
'status' => $installationCompleted ? 'success' : 'info',
'message' => $installationCompleted ? 'Instalación completada ✓' : 'Instalación pendiente',
'details' => $installationCompleted ? 'Sistema listo para usar' : 'Ejecuta install.php para completar'
];
// Test 9: Conectividad cURL
$curlOk = false;
$curlMessage = '';
if (function_exists('curl_version')) {
$curlInfo = curl_version();
$curlOk = true;
$curlMessage = 'cURL disponible v' . $curlInfo['version'] . ' ✓';
} else {
$curlMessage = 'cURL no disponible';
}
$tests[] = [
'name' => 'Conectividad cURL',
'status' => $curlOk ? 'success' : 'error',
'message' => $curlMessage,
'details' => $curlOk ? 'Puede comunicarse con APIs externas' : 'Se requiere cURL para WhatsApp API'
];
// Test 10: Memoria y límites PHP
$memoryLimit = ini_get('memory_limit');
$maxExecution = ini_get('max_execution_time');
$postMaxSize = ini_get('post_max_size');
$uploadMaxSize = ini_get('upload_max_filesize');
$tests[] = [
'name' => 'Límites PHP',
'status' => 'info',
'message' => 'Configuración actual del servidor',
'details' => "Memoria: $memoryLimit, Ejecución: {$maxExecution}s, POST: $postMaxSize, Upload: $uploadMaxSize"
];
// Mostrar resultados
foreach ($tests as $test) {
$statusClass = 'test-' . $test['status'];
$iconClass = [
'success' => 'fa-check-circle text-success',
'error' => 'fa-times-circle text-danger',
'warning' => 'fa-exclamation-triangle text-warning',
'info' => 'fa-info-circle text-info'
][$test['status']];
echo "
";
echo "
{$test['name']}
";
echo "
{$test['message']}
";
echo "
{$test['details']}";
echo "
";
}
// Resumen
$totalTests = count($tests);
$successCount = count(array_filter($tests, fn($t) => $t['status'] === 'success'));
$errorCount = count(array_filter($tests, fn($t) => $t['status'] === 'error'));
$warningCount = count(array_filter($tests, fn($t) => $t['status'] === 'warning'));
$infoCount = count(array_filter($tests, fn($t) => $t['status'] === 'info'));
?>
= $successCount ?>
Exitosos
= $errorCount ?>
Errores
= $warningCount ?>
Advertencias
= $infoCount ?>
Información
Sistema Validado Correctamente
Tu instalación de WhatsApp Bot está lista para funcionar
Acceder al Sistema
Se Requiere Configuración
Hay = $errorCount ?> error(es) que deben solucionarse antes de continuar
Ir al Instalador
WhatsApp Bot Manager v= APP_VERSION ?> -
= DEVELOPER_NAME ?>