Files
whatsapp/debug_turno_wa.php
T

138 lines
6.7 KiB
PHP

<?php
/**
* Debug: flujo WA kiosko → consentimiento_turno
* Acceso: /debug_turno_wa.php (solo admins)
*/
require_once __DIR__ . '/config/config.php';
if (!isUserLoggedIn()) { header('Location: login.php'); exit; }
header('Content-Type: text/plain; charset=utf-8');
$pdo = Database::getInstance()->getConnection();
echo "════════════════════════════════════════\n";
echo " DEBUG: Turno WA → consentimiento_turno\n";
echo "════════════════════════════════════════\n\n";
// ── 1. Config WA turnero ──────────────────────────────────────
echo "1. CONFIGURACIÓN WHATSAPP\n";
echo "─────────────────────────\n";
// Token y phone IDs viven en system_config; resto en lab_config
$sysCfg = $pdo->query(
"SELECT config_key AS k, config_value AS v FROM system_config
WHERE config_key IN ('whatsapp_token','whatsapp_phone_number_id','whatsapp_phone_number_id_turnero')"
)->fetchAll(PDO::FETCH_KEY_PAIR);
$labCfg = $pdo->query(
"SELECT clave AS k, valor AS v FROM lab_config
WHERE clave IN ('turnero_wa_template','turnero_wa_lang','turnero_wa_kiosko_enabled')"
)->fetchAll(PDO::FETCH_KEY_PAIR);
$cfg = array_merge($sysCfg, $labCfg);
$tokenLen = strlen($cfg['whatsapp_token'] ?? '');
echo "Token WA: " . ($tokenLen > 0 ? "✅ presente ({$tokenLen} chars)" : "❌ VACÍO") . "\n";
echo "Phone ID principal: " . ($cfg['whatsapp_phone_number_id'] ?? '❌ no configurado') . "\n";
echo "Phone ID turnero: " . ($cfg['whatsapp_phone_number_id_turnero'] ?? '⚠️ no configurado (usará principal)') . "\n";
echo "Plantilla turno: " . ($cfg['turnero_wa_template'] ?? 'consentimiento_turno (default)') . "\n";
echo "Idioma: " . ($cfg['turnero_wa_lang'] ?? 'es_CO (default)') . "\n";
echo "Kiosko WA habilitado: " . (($cfg['turnero_wa_kiosko_enabled'] ?? '0') === '1' ? '✅ SÍ' : '❌ NO') . "\n\n";
// ── 2. Plantilla en BD ────────────────────────────────────────
echo "2. PLANTILLA EN BASE DE DATOS\n";
echo "──────────────────────────────\n";
$tplNombre = $cfg['turnero_wa_template'] ?? 'consentimiento_turno';
$tpl = $pdo->prepare("SELECT template_name, language_code, status, body_text FROM message_templates WHERE template_name = ? LIMIT 1");
$tpl->execute([$tplNombre]);
$tplRow = $tpl->fetch(PDO::FETCH_ASSOC);
if ($tplRow) {
echo "✅ Encontrada: {$tplRow['template_name']} [{$tplRow['language_code']}] estado={$tplRow['status']}\n";
echo "Body: " . substr($tplRow['body_text'] ?? '', 0, 200) . "\n";
} else {
echo "❌ Plantilla '{$tplNombre}' NO encontrada en message_templates\n";
}
echo "\n";
// ── 3. Formularios de recepción configurados ──────────────────
echo "3. FORMULARIOS DE CONSENTIMIENTO EN RECEPCIÓN\n";
echo "───────────────────────────────────────────────\n";
$forms = $pdo->query(
"SELECT l.nombre AS desk, f.id, f.nombre AS formulario, f.is_active
FROM turnero_lugar_consentimientos tlc
JOIN turnero_lugares l ON l.id = tlc.lugar_id AND l.tipo = 'recepcion'
JOIN lab_formularios f ON f.id = tlc.formulario_id
ORDER BY l.nombre, f.nombre"
)->fetchAll(PDO::FETCH_ASSOC);
if ($forms) {
foreach ($forms as $r) {
$act = $r['is_active'] ? '✅' : '⚠️ inactivo';
echo " {$act} Desk: {$r['desk']} → [{$r['id']}] {$r['formulario']}\n";
}
} else {
echo "❌ Ningún formulario configurado en desks de recepción\n";
echo " Ve a Configuración → Sesión y vincula un formulario al desk de recepción\n";
}
echo "\n";
// ── 4. Últimos consentimientos creados desde kiosko ───────────
echo "4. ÚLTIMOS CONSENTIMIENTOS CREADOS (recientes)\n";
echo "─────────────────────────────────────────────────\n";
$rows = $pdo->query(
"SELECT tc.id, tc.turno_id, tc.estado, tc.enviado_at, tc.creado_at,
tt.codigo, tt.paciente_nombre, tt.paciente_cel,
f.nombre AS formulario
FROM turnero_consentimientos tc
JOIN turnero_turnos tt ON tt.id = tc.turno_id
JOIN lab_formularios f ON f.id = tc.formulario_id
ORDER BY tc.id DESC
LIMIT 10"
)->fetchAll(PDO::FETCH_ASSOC);
if ($rows) {
foreach ($rows as $r) {
echo " Turno {$r['codigo']} | {$r['paciente_nombre']} | cel={$r['paciente_cel']}\n";
echo " Formulario: {$r['formulario']}\n";
echo " Estado: {$r['estado']} | Enviado: " . ($r['enviado_at'] ?? 'NO') . " | Creado: {$r['creado_at']}\n\n";
}
} else {
echo " Sin registros\n";
}
echo "\n";
// ── 5. Test de envío ──────────────────────────────────────────
if (isset($_GET['test_cel'])) {
echo "5. TEST DE ENVÍO\n";
echo "─────────────────\n";
$testCel = trim($_GET['test_cel']);
$testTpl = $cfg['turnero_wa_template'] ?? 'consentimiento_turno';
$testLang = $cfg['turnero_wa_lang'] ?? 'es_CO';
require_once __DIR__ . '/services/WhatsAppService.php';
// Detectar cuántas variables tiene la plantilla en el body
$bodyText = $tplRow['body_text'] ?? '';
preg_match_all('/\{\{(\d+)\}\}/', $bodyText, $m);
$numVars = count(array_unique($m[1] ?? []));
$baseUrl = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];
$testLink = $baseUrl . '/ver_formulario_enviado.php?token=TEST123';
// Armar params según cuántas variables haya
$bodyParams = array_slice(['Paciente Prueba', 'Consentimiento Informado', 'A001'], 0, max($numVars, 1));
echo "Variables detectadas en body: {$numVars} → params enviados: " . implode(', ', $bodyParams) . "\n";
echo "URL: {$testLink}\n\n";
try {
$wa = new WhatsAppService('turnero');
$wa->sendTemplateMessage($testCel, $testTpl, $testLang, $bodyParams, [$testLink]);
echo "✅ Mensaje enviado a {$testCel}\n";
} catch (\Throwable $e) {
echo "❌ Error: " . $e->getMessage() . "\n";
}
} else {
echo "5. TEST DE ENVÍO\n";
echo "─────────────────\n";
echo "Agrega ?test_cel=573001234567 a la URL para enviar un mensaje de prueba\n";
}
echo "\n════ FIN ════\n";