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; } // Only release hold if there's an active hold/request; otherwise return success quietly $userFlags = $db->fetch('SELECT on_hold, advisor_requested FROM users WHERE id = :id', ['id' => $userId]); if (empty($userFlags) || (empty($userFlags['on_hold']) && empty($userFlags['advisor_requested']))) { // Nothing to release echo json_encode(['success' => true, 'info' => 'no_hold_active']); exit; } // Use BotService to release hold (sends notification and clears flags) try { require_once __DIR__ . '/../services/BotService.php'; $bot = new BotService(); $bot->releaseHold($user['phone_number']); echo json_encode(['success' => true]); } catch (Exception $e) { // Fallback to direct DB update if BotService fails $db->update('users', ['on_hold' => 0, 'advisor_requested' => 0, 'bot_paused_until' => null], 'id = :id', ['id' => $userId]); echo json_encode(['success' => true, 'warning' => 'BotService failed, flags cleared directly']); } } catch (Exception $e) { http_response_code(500); echo json_encode(['success' => false, 'error' => $e->getMessage()]); }