Обзор
Бот предоставляет обширные возможности кастомизации интерфейса: от логотипа и структуры меню до цветов кнопок и шаблонов 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
Режим главного меню
Бот поддерживает два режима отображения главного меню.
Режим default
Классический режим — все кнопки работают как стандартные инлайн-кнопки Telegram с callback-обработчиками внутри бота.
Режим cabinet
Кнопки меню становятся WebApp-кнопками и открывают соответствующие разделы Cabinet MiniApp.
Режим cabinet требует установленного Cabinet и заполненного MINIAPP_CUSTOM_URL.
Кнопка Путь в Cabinet Баланс /balanceПодписка /subscriptionКупить /tariffsПартнёрка /referralПополнить /balanceНастройки /settingsПодключиться /subscriptionКонкурсы /contests
Алиасы режимов (для обратной совместимости):
classic, full, standard → default
text, text_only, minimal → cabinet
Стиль кнопок (Bot API 9.4)
В режиме cabinet кнопки поддерживают цветовое оформление:
Значение Цвет 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_TEMPLATE— URL-шаблон редиректа (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Авторедирект к покупке после пополнения
Режим продаж
Режим Описание 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 PayPLATEGA_DISPLAY_NAMEPlategaFREEKASSA_DISPLAY_NAMEFreekassaKASSA_AI_DISPLAY_NAMEKassaAICLOUDPAYMENTS_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):
Выбор языка — если LANGUAGE_SELECTION_ENABLED=true
Правила использования — если SKIP_RULES_ACCEPT=false
Политика конфиденциальности
Реферальный код — если SKIP_REFERRAL_CODE=false
Главное меню
Переменная По умолчанию Описание 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/none → disabled, external/link → external_link, miniapp/webapp → external_link_miniapp, xraychecker/metrics → xray.
Переменная По умолчанию Описание SERVER_STATUS_EXTERNAL_URL— URL внешнего мониторинга SERVER_STATUS_METRICS_URL— URL метрик XrayChecker SERVER_STATUS_METRICS_USERNAME— Basic Auth пользователь SERVER_STATUS_METRICS_PASSWORD— Basic 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_HOST— SMTP-сервер SMTP_PORT587Порт SMTP_USER— Логин SMTP_PASSWORD— Пароль SMTP_FROM_EMAIL— Email отправителя 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 ID — Google Ads Conversion ID (формат AW-*) Google Ads Label — Метка конверсии
Настраиваются через Cabinet API /cabinet/branding/*.
Три уровня конфигурации
Бот использует трёхуровневую систему настроек:
Переменные окружения (.env) — основной источник, ~200+ параметров
БД-переопределения (SystemSetting) — администратор меняет настройки без перезапуска через админ-панель
Cabinet Branding (SystemSetting) — настройки темы и брендинга кабинета через REST API (🔗 Cabinet)
Многие настройки из .env можно изменить в рантайме через админ-панель бота. Они сохраняются в БД и применяются поверх переменных окружения.