false, 'error' => 'Método no permitido']); exit; } try { $input = json_decode(file_get_contents('php://input'), true) ?: []; $phone = trim($input['phone'] ?? ''); $templateName = trim($input['template_name'] ?? ''); $lang = trim($input['lang'] ?? 'es_CO'); $params = $input['params'] ?? []; if (!$phone || !$templateName) { http_response_code(400); echo json_encode(['ok' => false, 'error' => 'phone y template_name son requeridos']); exit; } // Normalizar teléfono: solo dígitos, agregar 57 si es colombiano de 10 dígitos $phoneClean = preg_replace('/\D/', '', $phone); if (strlen($phoneClean) === 10 && $phoneClean[0] === '3') { $phoneClean = '57' . $phoneClean; } if (strlen($phoneClean) < 10) { http_response_code(400); echo json_encode(['ok' => false, 'error' => 'Número de teléfono inválido']); exit; } $db = Database::getInstance(); $pdo = $db->getConnection(); // Buscar usuario existente (puede estar guardado con o sin prefijo 57) $user = $pdo->prepare( "SELECT id, name FROM users WHERE phone_number = ? OR phone_number = ? LIMIT 1" ); $user->execute([$phoneClean, ltrim($phoneClean, '57')]); $userRow = $user->fetch(PDO::FETCH_ASSOC); if (!$userRow) { // Buscar nombre en lab_pacientes por teléfono $pac = $pdo->prepare( "SELECT nombre_completo FROM lab_pacientes WHERE telefono LIKE ? AND is_active=1 LIMIT 1" ); $pac->execute(['%' . substr($phoneClean, -10) . '%']); $pacRow = $pac->fetch(PDO::FETCH_ASSOC); $nombre = $pacRow['nombre_completo'] ?? $phoneClean; // Crear usuario mínimo $ins = $pdo->prepare( "INSERT INTO users (name, phone_number, created_at) VALUES (?, ?, NOW())" ); $ins->execute([$nombre, $phoneClean]); $userId = (int)$pdo->lastInsertId(); } else { $userId = (int)$userRow['id']; } // Enviar plantilla $operatorId = $_SESSION['admin_id'] ?? $_SESSION['user_id'] ?? null; $meta = ['canal' => 'turnero']; if ($operatorId) $meta['operator_id'] = $operatorId; $wa = new WhatsAppService('turnero'); $wa->sendTemplateMessage($phoneClean, $templateName, $lang, $params, [], null, $meta); echo json_encode(['ok' => true, 'user_id' => $userId]); } catch (Throwable $e) { error_log('chat_start_conversation: ' . $e->getMessage()); http_response_code(500); echo json_encode(['ok' => false, 'error' => $e->getMessage()]); }