Skip to main content

Обзор

Бот предоставляет обширные возможности кастомизации интерфейса: от логотипа и структуры меню до цветов кнопок и шаблонов email. Настройки применяются через переменные окружения, а многие из них можно изменить без перезапуска через админ-панель.
Часть функций работает только при установленном Cabinet WebApp. Такие настройки отмечены значком 🔗 Cabinet.

Логотип и брендинг

Логотип бота

Бот может отправлять логотип вместе с каждым сообщением — изображение прикрепляется автоматически.
ПеременнаяПо умолчаниюОписание
ENABLE_LOGO_MODEtrueПрикреплять логотип к сообщениям. При false — только текст
LOGO_FILEvpn_logo.pngПуть к файлу логотипа. После первой отправки file_id кэшируется

Названия сервиса

ПеременнаяПо умолчаниюОписание
PAYMENT_SERVICE_NAMEИнтернет-сервисНазвание в описаниях платежей (чеки, квитанции)
SMTP_FROM_NAMEVPN ServiceИмя отправителя в email (🔗 Cabinet)
MINIAPP_SERVICE_NAME_RUBedolaga VPNНазвание сервиса в MiniApp (RU) (🔗 Cabinet)
MINIAPP_SERVICE_NAME_ENBedolaga VPNНазвание сервиса в MiniApp (EN) (🔗 Cabinet)
MINIAPP_SERVICE_DESCRIPTION_RUБезопасное и быстрое подключениеОписание в MiniApp (RU) (🔗 Cabinet)
MINIAPP_SERVICE_DESCRIPTION_ENSecure & Fast ConnectionОписание в MiniApp (EN) (🔗 Cabinet)

Брендинг Cabinet (🔗 Cabinet)

При установленном Cabinet доступна полная кастомизация через API /cabinet/branding/*:
ПараметрПо умолчаниюОписание
Название проектаCabinetОтображается в шапке кабинета
ЛоготипБуквенныйЗагрузка кастомного (PNG, JPEG, WebP, SVG, до 5 МБ)
Цвета темы12 цветовAccent, фоны, текст, success/warning/error
Доступные темыDark + LightМинимум одна тема должна быть активна
АнимацииВключеныCSS-анимации интерфейса
Полноэкранный режимВыключенРазвернуть WebApp на весь экран
Lite-режимВыключенУпрощённый дашборд
Цвета темы по умолчанию:
accent:            #3b82f6    darkBackground:    #0a0f1a
darkSurface:       #0f172a    darkText:          #f1f5f9
darkTextSecondary: #94a3b8    lightBackground:   #F7E7CE
lightSurface:      #FEF9F0    lightText:         #1F1A12
lightTextSecondary:#7D6B48    success:           #22c55e
warning:           #f59e0b    error:             #ef4444

Режим главного меню

Бот поддерживает два режима отображения главного меню.
MAIN_MENU_MODE=default

Режим default

Классический режим — все кнопки работают как стандартные инлайн-кнопки Telegram с callback-обработчиками внутри бота.

Режим cabinet

Кнопки меню становятся WebApp-кнопками и открывают соответствующие разделы Cabinet MiniApp.
Режим cabinet требует установленного Cabinet и заполненного MINIAPP_CUSTOM_URL.
КнопкаПуть в Cabinet
Баланс/balance
Подписка/subscription
Купить/tariffs
Партнёрка/referral
Пополнить/balance
Настройки/settings
Подключиться/subscription
Конкурсы/contests
Алиасы режимов (для обратной совместимости):
  • classic, full, standarddefault
  • text, text_only, minimalcabinet

Стиль кнопок (Bot API 9.4)

В режиме cabinet кнопки поддерживают цветовое оформление:
CABINET_BUTTON_STYLE=
ЗначениеЦвет
primaryСиний
successЗелёный
dangerКрасный
(пусто)Автоматический цвет для каждой секции
Автоматические цвета по секциям: Баланс — синий, Подписка — зелёный, Купить — зелёный, Партнёрка — синий, Подключиться — зелёный. Приоритет стиля: параметр кнопки → переопределение в БД → CABINET_BUTTON_STYLE → стандартный цвет секции.

Динамическое меню

MENU_LAYOUT_ENABLED=false
При включении структура меню управляется через API, а не задаётся в коде.

Кнопка «Подключиться»

5 режимов работы кнопки подключения:
CONNECT_BUTTON_MODE=miniapp_subscription
РежимОписание
guideОткрывает гайд подключения (из app-config.json)
miniapp_subscriptionОткрывает ссылку подписки в MiniApp
miniapp_customОткрывает MINIAPP_CUSTOM_URL в MiniApp
linkОткрывает ссылку напрямую в браузере
happ_cryptolinkВыводит cryptoLink-ссылку на подписку Happ

Настройки для Happ

ПеременнаяПо умолчаниюОписание
CONNECT_BUTTON_HAPP_DOWNLOAD_ENABLEDfalseПоказывать кнопки скачивания клиента
HAPP_DOWNLOAD_LINK_IOSСсылка для iOS
HAPP_DOWNLOAD_LINK_ANDROIDСсылка для Android
HAPP_DOWNLOAD_LINK_MACOSСсылка для macOS
HAPP_DOWNLOAD_LINK_WINDOWSСсылка для Windows
HAPP_DOWNLOAD_LINK_PCУниверсальная ссылка для ПК
HAPP_CRYPTOLINK_REDIRECT_TEMPLATEURL-шаблон редиректа (happ:// не поддерживается в Telegram)

Гайд подключения

APP_CONFIG_PATH=app-config.json
ENABLE_DEEP_LINKS=true
APP_CONFIG_CACHE_TTL=3600
Файл app-config.json содержит конфигурацию приложений для инструкции подключения. Кэшируется на время APP_CONFIG_CACHE_TTL секунд.

Видимость кнопок и разделов

Переключатели интерфейса

ПеременнаяПо умолчаниюЧто показывает/скрывает
HIDE_SUBSCRIPTION_LINKfalseПри true — скрывает ссылку подписки
BUY_TRAFFIC_BUTTON_VISIBLEtrueКнопка «Докупить трафик»
ACTIVATE_BUTTON_VISIBLEfalseКнопка ручной активации подписки
CONTESTS_BUTTON_VISIBLEfalseКнопка конкурсов в меню
DISABLE_TOPUP_BUTTONSfalseПри true — скрывает кнопки пополнения
DISABLE_WEB_PAGE_PREVIEWfalseПри true — отключает превью ссылок
PAL24_SBP_BUTTON_VISIBLEtrueКнопка СБП в PayPalych
PAL24_CARD_BUTTON_VISIBLEtrueКнопка карты в PayPalych

Переключатели функций (влияют на интерфейс)

ПеременнаяПо умолчаниюЧто скрывается при отключении
SUPPORT_MENU_ENABLEDtrueРаздел поддержки
REFERRAL_PROGRAM_ENABLEDtrueРаздел партнёрки
REFERRAL_WITHDRAWAL_ENABLEDfalseКнопка вывода средств
ENABLE_AUTOPAYfalseВсе элементы автопродления
DEVICES_SELECTION_ENABLEDtrueВыбор устройств при покупке
TRAFFIC_TOPUP_ENABLEDtrueКнопка докупки трафика
SUPPORT_TOPUP_ENABLEDtrueПополнение через поддержку
LANGUAGE_SELECTION_ENABLEDtrueВыбор языка при регистрации и в настройках
SIMPLE_SUBSCRIPTION_ENABLEDfalseУпрощённая покупка одной кнопкой
CONTESTS_ENABLEDfalseСистема конкурсов
CHANNEL_IS_REQUIRED_SUBfalseПроверка подписки на канал
YOOKASSA_QUICK_AMOUNT_SELECTION_ENABLEDfalseКнопки быстрого выбора суммы
AUTO_PURCHASE_AFTER_TOPUP_ENABLEDfalseАвторедирект к покупке после пополнения

Режим продаж

SALES_MODE=tariffs
РежимОписание
classicКонструктор: пользователь выбирает период, серверы, трафик, устройства отдельно
tariffsГотовые тарифы: пользователь выбирает предсозданный пакет

Простая покупка

SIMPLE_SUBSCRIPTION_ENABLED=true
SIMPLE_SUBSCRIPTION_PERIOD_DAYS=30
SIMPLE_SUBSCRIPTION_DEVICE_LIMIT=1
SIMPLE_SUBSCRIPTION_TRAFFIC_GB=0
Упрощённый режим покупки в одно нажатие с фиксированными параметрами.

Выбор трафика

TRAFFIC_SELECTION_MODE=selectable
РежимОписание
selectableПользователь выбирает из пакетов трафика
fixedФиксированный лимит (FIXED_TRAFFIC_LIMIT_GB)

Описания платежей

Описания в чеках и платёжных системах настраиваются для избежания блокировок:
ПеременнаяПо умолчаниюОписание
PAYMENT_SERVICE_NAMEИнтернет-сервисНазвание сервиса
PAYMENT_BALANCE_DESCRIPTIONПополнение балансаОписание пополнения
PAYMENT_SUBSCRIPTION_DESCRIPTIONОплата подпискиОписание покупки
PAYMENT_BALANCE_TEMPLATE{service_name} - {description}Шаблон для пополнения
PAYMENT_SUBSCRIPTION_TEMPLATE{service_name} - {description}Шаблон для покупки

Display Name провайдеров

Название каждого провайдера в интерфейсе настраивается:
ПеременнаяПо умолчанию
MULENPAY_DISPLAY_NAMEMulen Pay
PLATEGA_DISPLAY_NAMEPlatega
FREEKASSA_DISPLAY_NAMEFreekassa
KASSA_AI_DISPLAY_NAMEKassaAI
CLOUDPAYMENTS_SKINmini (варианты: mini, classic, modern)

Локализация

Языки

DEFAULT_LANGUAGE=ru
AVAILABLE_LANGUAGES=ru,en,ua,zh,fa
LANGUAGE_SELECTION_ENABLED=true
LOCALES_PATH=./locales
ПеременнаяПо умолчаниюОписание
DEFAULT_LANGUAGEruЯзык по умолчанию
AVAILABLE_LANGUAGESru,en,ua,zh,faДоступные языки (через запятую)
LANGUAGE_SELECTION_ENABLEDtrueВыбор языка при регистрации и в настройках
LOCALES_PATH./localesПуть к файлам локализаций
Пользователь может переключить язык в любой момент через настройки.

Валюта и форматирование

PRICE_ROUNDING_ENABLED=true
TZ=Europe/Moscow
ПеременнаяПо умолчаниюОписание
PRICE_ROUNDING_ENABLEDtrueОкругление цен: ≤50 коп вниз, >50 коп вверх. При false — точные суммы с копейками
TZEurope/MoscowЧасовой пояс для отображения дат и расписаний
Все цены хранятся в копейках. Валюта — рубли (зашита в код).

Процесс регистрации

Шаги при первом запуске бота (/start):
  1. Выбор языка — если LANGUAGE_SELECTION_ENABLED=true
  2. Правила использования — если SKIP_RULES_ACCEPT=false
  3. Политика конфиденциальности
  4. Реферальный код — если SKIP_REFERRAL_CODE=false
  5. Главное меню
ПеременнаяПо умолчаниюОписание
SKIP_RULES_ACCEPTfalseПропустить принятие правил
SKIP_REFERRAL_CODEfalseПропустить ввод реферального кода

Обязательная подписка на каналы

Система поддерживает мультиканальную подписку с управлением через бот и Cabinet. Каналы добавляются через админ-панель, а не через переменные окружения.
ПеременнаяПо умолчаниюОписание
CHANNEL_IS_REQUIRED_SUBfalseМастер-переключатель обязательной подписки (можно менять без перезапуска)
CHANNEL_DISABLE_TRIAL_ON_UNSUBSCRIBEtrueДеактивировать триальные подписки при отписке от канала
CHANNEL_REQUIRED_FOR_ALLfalseДеактивировать все подписки при отписке (включая платные)

Подробная документация

Настройка, мультиканальная подписка, цветные кнопки, архитектура кэширования.

Управление контентом

Текстовый контент (правила, FAQ, оферта, политика конфиденциальности) управляется через две системы:

Файлы локализаций

Директория locales/ содержит тексты для каждого языка. Бот загружает их при запуске.

Переопределение через админ-панель

Администратор может изменять тексты контента через бота без перезапуска. Значения сохраняются в базе данных (SystemSetting) и применяются поверх файлов локализаций. Редактируемый контент:
  • Правила использования
  • FAQ
  • Оферта / договор
  • Политика конфиденциальности

Статус серверов

SERVER_STATUS_MODE=disabled
РежимОписание
disabledКнопка статуса скрыта
external_linkОткрывает внешнюю страницу мониторинга в браузере
external_link_miniappОткрывает внешнюю страницу в MiniApp
xrayИнтеграция с XrayChecker — метрики нод прямо в боте
Алиасы: off/nonedisabled, external/linkexternal_link, miniapp/webappexternal_link_miniapp, xraychecker/metricsxray.
ПеременнаяПо умолчаниюОписание
SERVER_STATUS_EXTERNAL_URLURL внешнего мониторинга
SERVER_STATUS_METRICS_URLURL метрик XrayChecker
SERVER_STATUS_METRICS_USERNAMEBasic Auth пользователь
SERVER_STATUS_METRICS_PASSWORDBasic Auth пароль
SERVER_STATUS_METRICS_VERIFY_SSLtrueПроверка SSL при запросе
SERVER_STATUS_REQUEST_TIMEOUT10Таймаут запроса (секунды)
SERVER_STATUS_ITEMS_PER_PAGE10Серверов на странице

Шаблоны в Remnawave

Настройка отображения пользователей в панели Remnawave:
REMNAWAVE_USER_DESCRIPTION_TEMPLATE="Bot user: {full_name} {username}"
REMNAWAVE_USER_USERNAME_TEMPLATE="user_{telegram_id}"
Доступные плейсхолдеры:
ПлейсхолдерОписание
{full_name}Имя и фамилия из Telegram
{username}@логин (с @)
{username_clean}Логин (без @)
{telegram_id}Telegram ID
Username автоматически очищается до [A-Za-z0-9_-], максимум 36 символов.

Сообщения и уведомления

Кастомизация сообщений бана (BedolagaBan)

ПеременнаяПлейсхолдеры
BAN_MSG_PUNISHMENT{ip_count}, {limit}, {ban_minutes}, {node_info}
BAN_MSG_ENABLED(статический текст)
BAN_MSG_WIFI{ban_minutes}, {network_info}, {node_info}
BAN_MSG_MOBILE{ban_minutes}, {network_info}, {node_info}
BAN_MSG_WARNING{warning_message}

Сообщение техработ

MAINTENANCE_MESSAGE=Ведутся технические работы. Сервис временно недоступен. Попробуйте позже.

Email-уведомления (🔗 Cabinet)

Email-уведомления работают только при CABINET_ENABLED=true и настроенном SMTP.

SMTP

ПеременнаяПо умолчаниюОписание
SMTP_HOSTSMTP-сервер
SMTP_PORT587Порт
SMTP_USERЛогин
SMTP_PASSWORDПароль
SMTP_FROM_EMAILEmail отправителя
SMTP_FROM_NAMEVPN ServiceИмя отправителя
SMTP_USE_TLStrueTLS-шифрование

Типы email-уведомлений

Бот поддерживает 22+ типа email-уведомлений:
ТипОписание
email_verificationВерификация email
password_resetСброс пароля
balance_topupПополнение баланса
payment_receivedПлатёж получен
subscription_activatedПодписка активирована
subscription_expiringПодписка скоро истекает
subscription_expiredПодписка истекла
subscription_renewedПодписка продлена
autopay_successАвтоплатёж успешен
autopay_failedАвтоплатёж не удался
autopay_insufficientНедостаточно средств для автоплатежа
daily_debitЕжедневное списание
ban / unban / warningБлокировка / разблокировка / предупреждение
referral_bonusРеферальный бонус
referral_registeredНовый реферал зарегистрировался
partner_approved / partner_rejectedСтатус партнёрской заявки
withdrawal_approved / withdrawal_rejectedСтатус заявки на вывод

Кастомизация шаблонов

Каждый тип уведомления имеет встроенный HTML-шаблон с поддержкой всех языков. Администратор может переопределить шаблон через Cabinet API для конкретного типа и языка. Доступные переменные в шаблонах: {username}, {amount}, {period}, {days_left}, {reason}, {verification_url}, {reset_url}, {referral_name}, {required}, {warning_message}. Все шаблоны содержат кнопку «Открыть кабинет» со ссылкой на CABINET_URL.

OAuth-авторизация (🔗 Cabinet)

ПеременнаяПо умолчаниюОписание
OAUTH_GOOGLE_ENABLEDfalseВход через Google
OAUTH_YANDEX_ENABLEDfalseВход через Яндекс
OAUTH_DISCORD_ENABLEDfalseВход через Discord
OAUTH_VK_ENABLEDfalseВход через VK
Для каждого провайдера нужны *_CLIENT_ID и *_CLIENT_SECRET.

Аналитика (🔗 Cabinet)

ПеременнаяПо умолчаниюОписание
Yandex Metrika IDСчётчик Яндекс Метрики
Google Ads IDGoogle Ads Conversion ID (формат AW-*)
Google Ads LabelМетка конверсии
Настраиваются через Cabinet API /cabinet/branding/*.

Три уровня конфигурации

Бот использует трёхуровневую систему настроек:
  1. Переменные окружения (.env) — основной источник, ~200+ параметров
  2. БД-переопределения (SystemSetting) — администратор меняет настройки без перезапуска через админ-панель
  3. Cabinet Branding (SystemSetting) — настройки темы и брендинга кабинета через REST API (🔗 Cabinet)
Многие настройки из .env можно изменить в рантайме через админ-панель бота. Они сохраняются в БД и применяются поверх переменных окружения.