Files
remnawave-minishop/docs/tariffs.md
T
2026-05-03 22:36:33 +03:00

5.3 KiB
Raw Blame History

Тарифы 2.0

Бот поддерживает каталог тарифов в JSON-файле. Путь задается через TARIFFS_CONFIG_PATH, по умолчанию config/tariffs.json.

Если файл отсутствует, включается legacy fallback: используются старые .env поля RUB_PRICE_*, STARS_PRICE_*, USER_TRAFFIC_LIMIT_GB, USER_SQUAD_UUIDS, а также старый режим TRAFFIC_PACKAGES.

Конфиг

См. пример: config/tariffs.example.json.

Основные поля:

Поле Описание
default_tariff Тариф для миграции существующих подписок и выбора по умолчанию
topup_packages_default Пакеты докупки для period-тарифов без собственных пакетов
tariffs[].billing_model period или traffic
tariffs[].squad_uuids Internal squads Remnawave для тарифа
prices_rub / prices_stars Цены period-тарифов по месяцам
traffic_packages Пакеты GB для traffic-тарифов

Period-Тариф

Period-тариф продает доступ на срок и лимит трафика с календарным ежемесячным сбросом.

  • monthly_gb превращается в tier_baseline_bytes.
  • Докупленные пакеты хранятся в topup_balance_bytes.
  • В Remnawave пушится trafficLimitBytes = tier_baseline_bytes + topup_balance_bytes.
  • Для period-тарифов бот выставляет trafficLimitStrategy = MONTH, а дальнейший reset делает сама панель.
  • Дата сброса больше не считается в боте.
  • Если покупка или продление были в середине месяца, сброс всё равно произойдёт по правилам панели для MONTH.
  • Бот только меняет лимиты в GB и следит за предупреждениями/throttle на основе текущего usage из панели.

Traffic-Тариф

Traffic-тариф продает GB без срока действия.

  • end_date технически ставится в 2099-01-01 UTC.
  • period_start_at = NULL.
  • trafficLimitStrategy = NO_RESET.
  • Новая покупка добавляет GB к фактическому остатку: limit = used + remaining + purchased.
  • Доступ ограничивается только при исчерпании купленного трафика.

Смена Тарифа

Смена пишется в tariff_changes.

  • period -> period: расчет идет от effective_monthly_price_rub; пересчет дней использует floor.
  • period -> traffic: остаток оплаченных дней конвертируется в GB по conversion_rate_rub_per_gb или минимальной цене GB в RUB-пакетах.
  • traffic -> period: пользователь покупает период, а остаток GB сохраняется как топ-ап поверх нового тарифа.

Платежи

Новые платежи сохраняют:

  • sale_mode: subscription, traffic_package, topup, tariff_upgrade;
  • tariff_key;
  • purchased_gb для GB-покупок.

Legacy поле subscription_duration_months остается для совместимости.

Воркеры

TariffTrafficWorker запускается, только если активен tariffs.json.

  • Раз в несколько минут синхронизирует trafficLimitStrategy = MONTH для period-тарифов, если панель ещё не переключена.
  • Отправляет/дедуплицирует уровни предупреждений из TARIFF_TRAFFIC_WARNING_LEVELS (по умолчанию 85,90,95) через traffic_warnings.
  • При 100% удаляет пользователя из squad-ов тарифа и ставит is_throttled.
  • Возвращает пользователя в squad-ы, когда лимит снова больше использованного трафика.

HWID devices

Tariff config now supports per-tariff device limits and paid device add-ons:

  • tariffs[].hwid_device_limit: base HWID device limit for the tariff. 0 means unlimited. Missing/null falls back to USER_HWID_DEVICE_LIMIT.
  • tariffs[].hwid_device_packages: paid add-on packages, for example { "count": 1, "price": 99 } in rub or stars.
  • The bot stores the tariff base limit in subscriptions.hwid_device_limit and purchased add-ons in subscriptions.extra_hwid_devices.
  • Effective panel value is hwid_device_limit + extra_hwid_devices; if the base limit is 0, it remains unlimited and add-ons are ignored.
  • Device add-ons use sale_mode=hwid_devices, persist payments.purchased_hwid_devices, and update Remnawave via hwidDeviceLimit after payment.
  • Add-ons are available in Web App via /api/devices/topup-options + /api/payments, and in Telegram via the devices section.
  • On tariff change, the base HWID limit is taken from the new tariff, while already purchased extra devices are preserved.