false, 'error' => 'user_id required']); exit; } $db = Database::getInstance(); $user = $db->fetch('SELECT phone_number FROM users WHERE id = :id', ['id' => $userId]); if (!$user) { http_response_code(404); echo json_encode(['success' => false, 'error' => 'User not found']); exit; } $operator = $_SESSION['admin_user'] ?? null; $operatorId = $operator['id'] ?? null; // Guard: only finish if conversation is currently in service $cur = $db->fetch('SELECT in_service FROM users WHERE id = ?', [$userId]); if (empty($cur['in_service'])) { echo json_encode(['success' => false, 'error' => 'La conversación no está en servicio']); exit; } try { require_once __DIR__ . '/../services/BotService.php'; $bot = new BotService(); $bot->finishAttendConversation($user['phone_number'], $operatorId); echo json_encode(['success' => true]); } catch (Exception $e) { // Fallback: clear in_service and log activity $now = date('Y-m-d H:i:s'); $db->update('users', ['in_service' => 0, 'in_service_by' => null, 'in_service_at' => null, 'advisor_requested' => 0], 'id = :id', ['id' => $userId]); $db->insert('operator_activity', ['user_id' => $userId, 'operator_id' => $operatorId, 'action' => 'finish', 'details' => 'Finished attending via fallback', 'created_at' => $now]); echo json_encode(['success' => true, 'warning' => 'BotService failed, fallback applied']); } } catch (Exception $e) { http_response_code(500); echo json_encode(['success' => false, 'error' => $e->getMessage()]); }