Режимы продаж
Бот поддерживает два режима продажи подписок. Переключение — через переменнуюSALES_MODE в .env или в админ-панели: Настройки → Подписки.
Для одновременного использования нескольких тарифов (мультиподписки) см. Мультитарифный режим.
Конструктор (classic)
Режим по умолчанию. Пользователь самостоятельно собирает подписку из компонентов:
- Период — выбор из
AVAILABLE_SUBSCRIPTION_PERIODS - Трафик — пакет из
TRAFFIC_PACKAGES_CONFIGили фиксированный лимит - Серверы — один или несколько (автопропуск при одном сервере)
- Устройства — от
DEFAULT_DEVICE_LIMITдоMAX_DEVICES_LIMIT
Настройка периодов и цен
Формула расчёта цены
round(период_дней / 30), минимум 1.
Пример для 180 дней (6 месяцев):
Тарифы (tariffs)
Готовые тарифные планы — пользователь выбирает тариф из списка и период оплаты.
Что входит в тариф
Каждый тариф включает фиксированные параметры:Расширенные возможности тарифов
Тарифы поддерживают дополнительные настройки, которых нет в классическом режиме:Триал в режиме тарифов
TRIAL_DURATION_DAYS.
Сравнение режимов
Режимы продажи трафика
Применяются только в режиме конструктора (classic).
Выбираемые пакеты (selectable)
Пользователь выбирает пакет трафика из списка.
ГБ:цена_копейки:показать_безлимит. Значение 0 ГБ означает безлимит.
Цена безлимитного трафика также задаётся отдельно:
Фиксированный лимит (fixed)
Все подписки создаются с одинаковым объёмом трафика.
0 означает безлимит.
Докупка трафика
Позволяет пользователю докупить трафик к существующей подписке. Трафик докупается пакетами на 1 месяц — при следующем сбросе трафика докупленный объём обнуляется вместе с основным.Докупленный трафик действует до следующего сброса (по стратегии
traffic_reset_mode). Это не разовая прибавка навсегда, а месячный пакет.В режиме тарифов докупка трафика настраивается индивидуально для каждого тарифа:
traffic_topup_enabled, traffic_topup_packages, max_topup_traffic_gb.Сброс трафика
Пользователь может сбросить счётчик использованного трафика за плату.Сброс трафика при смене тарифа
При переключении пользователя на другой тариф можно автоматически сбросить накопленный трафик:
Настройка управляется через админ-панель (Настройки → Подписки) или через
.env. Применяется ко всем путям смены тарифа: Cabinet, Telegram-бот, MiniApp, админ-действия.
Управление устройствами
В режиме конструктора
DEVICES_SELECTION_ENABLED=false, пользователь не видит шаг выбора устройств. Всем подпискам назначается DEVICES_SELECTION_DISABLED_AMOUNT устройств (или DEFAULT_DEVICE_LIMIT, если 0).
В режиме тарифов
Базовое количество устройств задаётся в тарифе (device_limit). Если device_price_kopeks указан — пользователь может докупить устройства до max_device_limit.
При уменьшении количества устройств минимум всегда равен 1. Поле
device_limit тарифа определяет количество устройств, включённых при покупке, но не нижнюю границу уменьшения.Списки устройств пользователя из панели теперь полностью пагинированы (
get_user_devices_all), что гарантирует корректное удаление всех лишних устройств при уменьшении лимита.Простая покупка подписки
Упрощённый режим — кнопка «Купить подписку» без пошагового конструктора. Все параметры фиксированы.Простая покупка доступна только в режиме конструктора (
classic). В режиме тарифов UX и так упрощён — пользователь просто выбирает тариф и период.Тестовая подписка (триал)
- Настраиваемый период, трафик, устройства
- Уведомления об истечении
- Автоконверсию в платную подписку
- Контроль обязательной подписки на канал
- Платный триал с выбором способа оплаты (если
TRIAL_ACTIVATION_PRICE > 0)
Промогруппы и скидки
Промогруппы — основной инструмент скидочной системы. У каждого пользователя может быть несколько промогрупп. Для расчёта скидки используется группа с наивысшим приоритетом.Параметры промогруппы
Как скидки работают в режиме конструктора
В конструкторе каждый компонент стоимости дисконтируется отдельно:- Цена периода — скидка
period_discounts[период_дней]% - Трафик — скидка
traffic_discount_percent% - Устройства — скидка
device_discount_percent% - Серверы — скидка
server_discount_percent%
Как скидки работают в режиме тарифов
В тарифном режиме промогруппа применяет скидку за период (period_discounts) к итоговой цене тарифа:
period_discounts: {"90": 20}:
Скидки за период для базовых пользователей
Для пользователей без промогруппы (или в группеis_default=true) можно включить скидки за длительные периоды через .env:
period_discounts.
Система лояльности
Промогруппы автоматически назначаются по сумме трат:Приоритет промогрупп
Пользователь может состоять в нескольких промогруппах (например, назначенная вручную + за лояльность). Для расчёта скидки используется группа с наивысшимpriority. При одинаковом приоритете — группа с большим id.
Ограничение тарифов по промогруппам
В режиме тарифов можно ограничить доступ к тарифу по промогруппам. Если у тарифа задан списокallowed_promo_groups — его увидят только пользователи из этих групп. Если список пуст — тариф доступен всем.
Модем-подписки
Дополнительный функционал для устройств-модемов.Сквозная корзина
Система сохраняет выбранные параметры при недостатке баланса:- Пользователь выбирает подписку
- Баланса не хватает — корзина сохраняется в Redis (TTL 1 час)
- Пользователь пополняет баланс
- Кнопка «Вернуться к оформлению» восстанавливает корзину
- Подписка оформляется автоматически
Для работы корзины требуется Redis:
REDIS_URL=redis://redis:6379/0Автопродление
Бот автоматически продлевает подписки при наличии средств на балансе:- Фоновый сервис мониторинга проверяет подписки по расписанию
- За N дней до истечения — уведомление пользователю
- При наличии средств — автоматическое продление
- При недостатке — уведомление о необходимости пополнения
- Поддержка настройки дня списания
