Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.bedolagam.ru/llms.txt

Use this file to discover all available pages before exploring further.

Обзор

Тарифы — готовые пакеты подписок с фиксированными параметрами. Используются при 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 автоматически пересчитывается из БД. Перезапуск бота не требуется.

Управление сменой тарифа

Пользователь с активной подпиской может перейти на другой тариф. Направление смены контролируется двумя переменными окружения:
ПеременнаяПо умолчаниюОписание
TARIFF_SWITCH_UPGRADE_ENABLEDtrueРазрешить переход на более дорогой тариф (апгрейд)
TARIFF_SWITCH_DOWNGRADE_ENABLEDtrueРазрешить переход на более дешёвый тариф (даунгрейд)
Сравнение цен тарифов происходит по стоимости за 30-дневный период. Возможные комбинации:
АпгрейдДаунгрейдПоведение
truetrueПользователь может переключиться на любой тариф
truefalseТолько переход на более дорогой тариф
falsetrueТолько переход на более дешёвый тариф
falsefalseСмена тарифа полностью отключена
При смене тарифа оставшиеся дни подписки пересчитываются пропорционально разнице в стоимости.

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

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