Тарифы и цены
Раздел «Тарифы и цены» определяет, что именно продаёт бот: готовые планы или конструктор, по каким ценам и с какими лимитами.
Режимы продаж
Переключатель «Бот продаёт» вверху экрана — это настройка SALES_MODE (меняется без рестарта):
| Режим | Что видит покупатель |
|---|---|
plans (по умолчанию) | Каталог готовых планов: выбрал план → выбрал период → оплатил |
constructor | Сборка подписки: период + пакет трафика + доп. устройства |
Как выглядит воронка покупки в боте — на странице /bot/purchase.
Готовые планы
У плана есть:
- название и описание (код плана генерится из названия, дубликаты отбиваются);
- лимит трафика в ГБ (0 или пусто — безлимит);
- лимит устройств (1–100, пусто — без лимита);
- сквады панели (
internal_squads) — на какие ноды попадает юзер, см. /cabinet/servers; - сетка длительностей: каждая строка — количество дней и цена (пока в рублях, хранится в копейках);
- флаг активности и счётчик продаж.
Выключенный план пропадает из каталога, но продолжает обслуживать уже проданные подписки.
Удаление плана
План, на который ссылается хотя бы одна подписка, удалить нельзя — кабинет вернёт конфликт. Это защита от осиротевших подписок: вместо удаления деактивируйте план.
Конструктор цен

Для режима constructor настраиваются две сетки:
- Периоды — дни + цена (например 30 дней / 199 ₽, 90 дней / 499 ₽);
- Пакеты трафика — ГБ + цена,
0 ГБозначает безлимитный пакет.
Итоговая цена = период + пакет. Доп. устройства оплачиваются отдельно, параметры берутся из настроек:
| Настройка | По умолчанию | Смысл |
|---|---|---|
CONSTRUCTOR_EXTRA_DEVICE_PRICE | 5000 коп. (50 ₽) | Цена одного доп. устройства за 30 дней |
CONSTRUCTOR_MAX_DEVICES | 10 | Потолок устройств в конструкторе |
Покупки конструктора бронируются под скрытый служебный план «Конструктор» — он специально неактивен и в каталоге не показывается, а имя подписки собирается из выбора юзера (например «Конструктор · 100 ГБ»).
Как считается итоговая цена
Порядок расчёта фиксированный: базовая цена (план + период или период + пакет) → процентные скидки → кап.
Складываются четыре источника скидок:
- Промогруппа юзера — серверный % плюс % за конкретную длительность (у группы с наибольшим приоритетом), см. /cabinet/promos;
- Персональная скидка — постоянная, живёт на юзере;
- Одноразовая скидка — сгорает после первой покупки;
- Активная акция — если идёт лимитированная распродажа.
Сумма скидок ограничена 100%: цена 0 — это легальная бесплатная покупка, она проводится без платёжки. При смене плана неиспользованные дни текущего периода превращаются в кредит — по цене, которую юзер фактически заплатил, а не по прайсу.
Снапшоты цен и параметров
В момент покупки к транзакции и к подписке замораживается снапшот плана: plan_id, имя, лимиты трафика и устройств, сквады. Подписка живёт по этому снапшоту, а не по «живому» плану.
Почему смена цены ничего не ломает
Можно свободно менять цены, лимиты и описания планов — это влияет только на новые покупки. Уже проданные подписки продолжают работать с теми параметрами, за которые заплатили: карточка юзера, панель и расчёт кредита при смене плана читают снапшот, а не текущий тариф.
