Skip to main content

Обзор

Тарифы — готовые пакеты подписок с фиксированными параметрами. Используются при SALES_MODE=tariffs (по умолчанию). В отличие от режима конструктора, пользователь выбирает тариф целиком, а не собирает параметры по шагам.
Управление тарифами доступно из админ-панели бота в Telegram и через Cabinet Admin API. При первом запуске бот автоматически создает тариф “Стандартный” с ценами из .env.

Создание тарифа

Через админ-панель бота

Мастер создания (6 шагов): Шаг 1: Название
  • 2-50 символов
  • Примеры: “Базовый”, “Премиум”, “Бизнес”
Шаг 2: Трафик
  • Целое число в ГБ
  • 0 = безлимитный трафик
Шаг 3: Устройства
  • Количество устройств (минимум 1)
Шаг 4: Уровень тарифа (tier)
  • Число от 1 до 10
  • Влияет только на визуальное отображение (1 = базовый)
Шаг 5: Тип тарифа
  • Периодический — оплата за период (30/90/180/360 дней)
  • Суточный — ежедневное списание
Шаг 6: Цены
  • Для периодического: формат дни:цена_в_копейках через запятую
    30:9900, 90:24900, 180:44900, 360:79900
    
  • Для суточного: цена в рублях за день (например, 50 или 99.90)
После создания тариф сразу активен и доступен пользователям.

Через Cabinet Admin API

POST /cabinet/admin/tariffs
Принимает JSON со всеми полями тарифа.

Поля тарифа

Основные

ПолеТипОписание
nameстрокаНазвание (2-50 символов)
descriptionтекстОписание (отображается пользователю)
display_orderчислоПорядок сортировки (меньше = выше в списке)
is_activeboolАктивен ли тариф
tier_level1-10Визуальный уровень

Параметры подписки

ПолеТипОписание
traffic_limit_gbчислоЛимит трафика (0 = безлимит)
device_limitчислоКоличество устройств
device_price_kopeksчисло/nullЦена доп. устройства. null = покупка недоступна
max_device_limitчисло/nullМаксимум устройств. null = без ограничения

Серверы

ПолеТипОписание
allowed_squadsJSON списокUUID доступных серверов. Пустой = все серверы

Ценообразование

ПолеТипОписание
period_pricesJSON объектЦены за периоды: {"30": 9900, "90": 24900} (дни: копейки)

Суточный тариф

ПолеТипОписание
is_dailyboolСуточный режим (устанавливается при создании)
daily_price_kopeksчислоЦена за сутки в копейках
Тип тарифа (периодический/суточный) выбирается при создании и не может быть изменен после.

Пользовательский выбор дней

ПолеТипОписание
custom_days_enabledboolРазрешить выбор произвольного срока
price_per_day_kopeksчислоЦена за день
min_daysчислоМинимальный срок (по умолчанию 1)
max_daysчислоМаксимальный срок (по умолчанию 365)
При включении пользователь видит кнопки +/- для выбора срока вместо фиксированных периодов. Цена = price_per_day_kopeks * количество_дней.

Пользовательский выбор трафика

ПолеТипОписание
custom_traffic_enabledboolРазрешить выбор объема трафика
traffic_price_per_gb_kopeksчислоЦена за 1 ГБ
min_traffic_gbчислоМинимум ГБ (по умолчанию 1)
max_traffic_gbчислоМаксимум ГБ (по умолчанию 1000)
Стоимость трафика прибавляется к стоимости периода:
итого = цена_периода + (цена_за_гб * количество_гб)

Докупка трафика

ПолеТипОписание
traffic_topup_enabledboolРазрешить докупку трафика на этом тарифе
traffic_topup_packagesJSON объектПакеты: {"5": 5000, "10": 9000} (ГБ: копейки)
max_topup_traffic_gbчислоМаксимум докупленного трафика (0 = без лимита)

Сброс трафика

ПолеТипОписание
traffic_reset_modeстрока/nullDAY, WEEK, MONTH, NO_RESET или null (глобальная настройка)

Триал

ПолеТипОписание
is_trial_availableboolИспользовать для триальных подписок
Только один тариф может быть триальным. При назначении тарифа триальным флаг автоматически снимается со всех остальных.

Ограничение по промо-группам

Тарифы можно ограничить для определенных промо-групп:
  • Если у тарифа нет привязанных промо-групп — он доступен всем
  • Если у тарифа есть привязанные промо-группы — он виден только пользователям из этих групп
Настройка через кнопку Промо-группы на странице тарифа в админке. Можно включать/выключать отдельные группы.

Редактирование

На странице тарифа в админке доступны кнопки для редактирования каждого поля:
ДействиеОписание
НазваниеИзменить название (2-50 символов)
ОписаниеИзменить или удалить описание
ТрафикИзменить лимит (0 = безлимит)
УстройстваИзменить количество
ЦеныИзменить цены за периоды (только для периодических)
УровеньИзменить tier (1-10)
Цена устройстваЦена доп. устройства (0 = отключить)
Макс. устройствМаксимальный лимит (0 = без ограничения)
Докупка трафикаВключить/выключить, настроить пакеты и лимит
Сброс трафикаВыбрать режим (глобальный/день/неделя/месяц/без сброса)
СерверыВыбрать доступные серверы
Промо-группыОграничить доступ по промо-группам
Суточная ценаИзменить цену за сутки (только для суточных)
Сделать триальнымНазначить для триальных подписок
Активировать/ДеактивироватьСкрыть или показать тариф
УдалитьУдалить с подтверждением

Сортировка

Тарифы отображаются в порядке display_order (по возрастанию). Для изменения порядка:
  • Cabinet Admin API: PUT /cabinet/admin/tariffs/order с массивом ID в нужном порядке
  • Админ-панель бота: редактирование display_order каждого тарифа

Удаление

При удалении тарифа:
  1. Показывается предупреждение с количеством активных подписок на этом тарифе
  2. Требуется подтверждение
  3. Подписки не удаляются — у них обнуляется привязка к тарифу (tariff_id = NULL)

Отображение пользователю

В списке тарифов пользователь видит:
  • Название тарифа
  • Трафик и количество устройств
  • Минимальную цену (с учетом скидок промо-группы)
Примеры:
Базовый — 100ГБ / 3 устройства от 179₽
Премиум — Безлимит / 10 устройств от 499₽
Суточный — 50ГБ / 1 устройство 50₽/день

Скидки промо-групп

Если пользователь состоит в промо-группе со скидками за период, скидки отображаются на кнопках выбора периода:
30 дней — 179₽
90 дней — 449₽ -15%
180 дней — 799₽ -25%

Формула цены

Периодический тариф

итого = цена_периода - скидка_промогруппы
С пользовательским выбором дней:
итого = (цена_за_день * дни) - скидка
С пользовательским выбором трафика:
итого = цена_периода + (цена_за_гб * гб) - скидка

Суточный тариф

ежедневное_списание = daily_price_kopeks
Списание происходит автоматически каждый день. При недостатке баланса подписка ставится на паузу (is_daily_paused).

Синхронизация цен

После любого изменения тарифов (создание, редактирование, удаление, переключение активности) глобальный словарь PERIOD_PRICES автоматически пересчитывается из БД. Перезапуск бота не требуется.

Связанные настройки

ПеременнаяОписание
SALES_MODEtariffs (по умолчанию) или classic
TRIAL_TARIFF_IDID триального тарифа (устаревшее, используйте is_trial_available)