'No autorizado']); exit; } } // Obtener configuración de WhatsApp $whatsappConfig = getWhatsAppConfigFromDB(); $diagnostic = [ 'success' => true, 'timestamp' => date('Y-m-d H:i:s'), 'config_status' => [], 'template_status' => [], 'api_status' => [] ]; // 1. Verificar configuración básica $diagnostic['config_status'] = [ 'phone_number_id' => !empty($whatsappConfig['phone_number_id']), 'access_token' => !empty($whatsappConfig['access_token']), 'webhook_verify_token' => !empty($whatsappConfig['webhook_verify_token']), 'business_account_id' => !empty($whatsappConfig['business_account_id']) ]; $diagnostic['config_status']['complete'] = array_reduce($diagnostic['config_status'], function($carry, $item) { return $carry && $item; }, true); // 2. Verificar plantillas en base de datos $db = Database::getInstance(); $stmt = $db->query("SELECT status, COUNT(*) as count FROM message_templates GROUP BY status"); $templateCounts = $stmt->fetchAll(); $diagnostic['template_status'] = [ 'total' => 0, 'approved' => 0, 'pending' => 0, 'rejected' => 0 ]; foreach ($templateCounts as $count) { $status = $count['status'] ?: 'pending'; $diagnostic['template_status'][$status] = (int)$count['count']; $diagnostic['template_status']['total'] += (int)$count['count']; } // 3. Test básico de API (solo si hay configuración completa) if ($diagnostic['config_status']['complete']) { $apiUrl = "https://graph.facebook.com/v18.0/{$whatsappConfig['phone_number_id']}"; $headers = [ 'Authorization: Bearer ' . $whatsappConfig['access_token'], 'Content-Type: application/json' ]; // Crear contexto para la solicitud HTTP $context = stream_context_create([ 'http' => [ 'method' => 'GET', 'header' => implode("\r\n", $headers), 'timeout' => 10 ] ]); $response = @file_get_contents($apiUrl, false, $context); if ($response !== false) { $apiData = json_decode($response, true); $diagnostic['api_status'] = [ 'reachable' => true, 'phone_number' => $apiData['display_phone_number'] ?? 'N/A', 'verified_name' => $apiData['verified_name'] ?? 'N/A', 'quality_rating' => $apiData['quality_rating'] ?? 'N/A' ]; } else { $diagnostic['api_status'] = [ 'reachable' => false, 'error' => 'No se pudo conectar con la API de WhatsApp' ]; } } else { $diagnostic['api_status'] = [ 'reachable' => false, 'error' => 'Configuración incompleta' ]; } // 4. Recomendaciones $diagnostic['recommendations'] = []; if (!$diagnostic['config_status']['complete']) { $diagnostic['recommendations'][] = 'Completa la configuración de WhatsApp en la pestaña Configuración'; } if ($diagnostic['template_status']['approved'] === 0) { $diagnostic['recommendations'][] = 'Necesitas plantillas aprobadas para enviar mensajes'; $diagnostic['recommendations'][] = 'Crea plantillas en WhatsApp Business Manager y espera su aprobación'; } if (!$diagnostic['api_status']['reachable']) { $diagnostic['recommendations'][] = 'Verifica que el token de acceso sea válido'; $diagnostic['recommendations'][] = 'Confirma que el Phone Number ID sea correcto'; } if (empty($diagnostic['recommendations'])) { $diagnostic['recommendations'][] = 'Todo parece estar configurado correctamente'; } echo json_encode($diagnostic, JSON_PRETTY_PRINT); } catch (Exception $e) { http_response_code(500); echo json_encode([ 'success' => false, 'error' => 'Error en diagnóstico: ' . $e->getMessage(), 'trace' => $e->getTraceAsString() ]); } ?>