> ## 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.

# Переменные окружения

> Полный справочник настроек .env файла

## Обязательные

| Переменная          | Описание                                                                                                              | Пример                      |
| ------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------- |
| `BOT_TOKEN`         | Telegram Bot Token от @BotFather. Также используется для авторизации виджета Cabinet через `Telegram.WebApp.initData` | `1234567890:AABBCCdd...`    |
| `ADMIN_IDS`         | Telegram ID администраторов (через запятую)                                                                           | `123456789,987654321`       |
| `REMNAWAVE_API_URL` | URL Remnawave панели                                                                                                  | `https://panel.example.com` |
| `REMNAWAVE_API_KEY` | API ключ панели                                                                                                       | `your_api_key`              |

## Режим запуска

| Переменная     | Описание                | По умолчанию |
| -------------- | ----------------------- | ------------ |
| `BOT_RUN_MODE` | `polling` или `webhook` | `polling`    |
| `DEBUG`        | Режим отладки           | `false`      |

## Telegram Bot

| Переменная         | Описание                                                                                           | По умолчанию |
| ------------------ | -------------------------------------------------------------------------------------------------- | ------------ |
| `SUPPORT_USERNAME` | Ссылка на поддержку (username или URL)                                                             | `@support`   |
| `BOT_USERNAME`     | Имя пользователя бота (автоопределяется)                                                           | —            |
| `PROXY_URL`        | SOCKS5 прокси для трафика к Telegram API. Подробнее: [SOCKS5 прокси](/getting-started/proxy-setup) | —            |

## Система поддержки

| Переменная                                     | Описание                            | По умолчанию |
| ---------------------------------------------- | ----------------------------------- | ------------ |
| `SUPPORT_MENU_ENABLED`                         | Показывать меню поддержки           | `true`       |
| `SUPPORT_SYSTEM_MODE`                          | Режим: `tickets`, `contact`, `both` | `both`       |
| `SUPPORT_TICKET_SLA_ENABLED`                   | Включить SLA для тикетов            | `false`      |
| `SUPPORT_TICKET_SLA_MINUTES`                   | SLA в минутах                       | `60`         |
| `SUPPORT_TICKET_SLA_CHECK_INTERVAL_SECONDS`    | Интервал проверки SLA (сек)         | `300`        |
| `SUPPORT_TICKET_SLA_REMINDER_COOLDOWN_MINUTES` | Кулдаун напоминаний SLA (мин)       | `30`         |

## База данных

| Переменная          | Описание                                       | По умолчанию     |
| ------------------- | ---------------------------------------------- | ---------------- |
| `DATABASE_MODE`     | Режим: `auto`, `postgresql`, `sqlite`          | `auto`           |
| `DATABASE_URL`      | Строка подключения PostgreSQL                  | —                |
| `POSTGRES_HOST`     | Хост PostgreSQL                                | `postgres`       |
| `POSTGRES_PORT`     | Порт PostgreSQL                                | `5432`           |
| `POSTGRES_DB`       | Имя базы данных                                | `remnawave_bot`  |
| `POSTGRES_USER`     | Пользователь БД                                | `remnawave_user` |
| `POSTGRES_PASSWORD` | Пароль БД                                      | —                |
| `SQLITE_PATH`       | Путь к SQLite файлу (для локальной разработки) | `./data/bot.db`  |
| `LOCALES_PATH`      | Путь к файлам локализации                      | `./locales`      |

## Redis

| Переменная         | Описание                              | По умолчанию |
| ------------------ | ------------------------------------- | ------------ |
| `REDIS_URL`        | URL подключения к Redis               | —            |
| `CART_TTL_SECONDS` | Время жизни корзины в Redis (секунды) | `3600`       |

## Webhook и веб-сервер

| Переменная                        | Описание                               | По умолчанию |
| --------------------------------- | -------------------------------------- | ------------ |
| `WEBHOOK_URL`                     | Публичный HTTPS URL                    | —            |
| `WEBHOOK_PATH`                    | Путь для webhook                       | `/webhook`   |
| `WEBHOOK_SECRET_TOKEN`            | Секретный токен Telegram               | —            |
| `WEBHOOK_DROP_PENDING_UPDATES`    | Очистить очередь при установке webhook | `true`       |
| `WEBHOOK_MAX_QUEUE_SIZE`          | Размер очереди входящих обновлений     | `1024`       |
| `WEBHOOK_WORKERS`                 | Количество воркеров обработки          | `4`          |
| `WEBHOOK_ENQUEUE_TIMEOUT`         | Таймаут постановки в очередь (сек)     | `0.1`        |
| `WEBHOOK_WORKER_SHUTDOWN_TIMEOUT` | Таймаут завершения воркеров (сек)      | `30.0`       |

### Web API (единый сервер)

| Переменная                     | Описание                                         | По умолчанию              |
| ------------------------------ | ------------------------------------------------ | ------------------------- |
| `WEB_API_ENABLED`              | Включить веб-сервер                              | `false`                   |
| `WEB_API_HOST`                 | Хост веб-сервера                                 | `0.0.0.0`                 |
| `WEB_API_PORT`                 | Порт веб-сервера                                 | `8080`                    |
| `WEB_API_WORKERS`              | Количество воркеров (для продакшена 2-4)         | `1`                       |
| `WEB_API_ALLOWED_ORIGINS`      | CORS origins через запятую                       | `*`                       |
| `WEB_API_DEFAULT_TOKEN`        | API токен для авторизации                        | —                         |
| `WEB_API_DEFAULT_TOKEN_NAME`   | Имя токена по умолчанию                          | `Bootstrap Token`         |
| `WEB_API_TOKEN_HASH_ALGORITHM` | Алгоритм хеширования токенов                     | `sha256`                  |
| `WEB_API_DOCS_ENABLED`         | Открыть Swagger UI и OpenAPI                     | `false`                   |
| `WEB_API_TITLE`                | Название API (для документации)                  | `Remnawave Bot Admin API` |
| `WEB_API_VERSION`              | Версия API                                       | `1.0.0`                   |
| `WEB_API_REQUEST_LOGGING`      | Логирование запросов                             | `true`                    |
| `EXTERNAL_ADMIN_TOKEN`         | Внешний токен для интеграции с другими системами | —                         |
| `EXTERNAL_ADMIN_TOKEN_BOT_ID`  | ID бота, от которого принимается токен           | —                         |

## Remnawave интеграция

| Переменная                            | Описание                                                                                                              | По умолчанию                       |
| ------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------- |
| `REMNAWAVE_AUTH_TYPE`                 | Тип авторизации: `api_key`, `basic_auth`, `caddy`                                                                     | `api_key`                          |
| `REMNAWAVE_CADDY_TOKEN`               | Токен для Caddy авторизации                                                                                           | —                                  |
| `REMNAWAVE_USERNAME`                  | Логин для Basic Auth                                                                                                  | —                                  |
| `REMNAWAVE_PASSWORD`                  | Пароль для Basic Auth                                                                                                 | —                                  |
| `REMNAWAVE_SECRET_KEY`                | Ключ защиты панели (remnawave-reverse-proxy). Формат `XXXXXXX:DDDDDDDD`                                               | —                                  |
| `REMNAWAVE_USER_DESCRIPTION_TEMPLATE` | Шаблон описания пользователя в панели. Плейсхолдеры: `{full_name}`, `{username}`, `{username_clean}`, `{telegram_id}` | `Bot user: {full_name} {username}` |
| `REMNAWAVE_USER_USERNAME_TEMPLATE`    | Шаблон имени пользователя в панели                                                                                    | `user_{telegram_id}`               |
| `REMNAWAVE_USER_DELETE_MODE`          | Режим удаления: `delete` (полное) или `disable` (деактивация)                                                         | `delete`                           |

### Автосинхронизация

| Переменная                    | Описание                                          | По умолчанию |
| ----------------------------- | ------------------------------------------------- | ------------ |
| `REMNAWAVE_AUTO_SYNC_ENABLED` | Автосинхронизация серверов                        | `false`      |
| `REMNAWAVE_AUTO_SYNC_TIMES`   | Время синхронизации (HH:MM через запятую, по МСК) | `03:00`      |

### Webhooks от панели (real-time события)

| Переменная                  | Описание                                         | По умолчанию         |
| --------------------------- | ------------------------------------------------ | -------------------- |
| `REMNAWAVE_WEBHOOK_ENABLED` | Включить webhooks от панели                      | `false`              |
| `REMNAWAVE_WEBHOOK_PATH`    | Путь для webhook                                 | `/remnawave-webhook` |
| `REMNAWAVE_WEBHOOK_SECRET`  | Секрет для подписи HMAC-SHA256 (мин. 32 символа) | —                    |

### Уведомления пользователям от webhooks

| Переменная                           | Описание                                      | По умолчанию |
| ------------------------------------ | --------------------------------------------- | ------------ |
| `WEBHOOK_NOTIFY_USER_ENABLED`        | Глобальный переключатель уведомлений          | `true`       |
| `WEBHOOK_NOTIFY_SUB_STATUS`          | Отключение/активация подписки админом         | `true`       |
| `WEBHOOK_NOTIFY_SUB_EXPIRED`         | Истечение подписки                            | `true`       |
| `WEBHOOK_NOTIFY_SUB_EXPIRING`        | Предупреждения о скором истечении (72/48/24ч) | `true`       |
| `WEBHOOK_NOTIFY_SUB_LIMITED`         | Достижение лимита трафика                     | `true`       |
| `WEBHOOK_NOTIFY_TRAFFIC_RESET`       | Сброс счётчика трафика                        | `true`       |
| `WEBHOOK_NOTIFY_SUB_DELETED`         | Удаление пользователя из панели               | `true`       |
| `WEBHOOK_NOTIFY_SUB_REVOKED`         | Обновление ключей подписки (revoke)           | `true`       |
| `WEBHOOK_NOTIFY_FIRST_CONNECTED`     | Первое подключение к VPN                      | `true`       |
| `WEBHOOK_NOTIFY_NOT_CONNECTED`       | Напоминание о неподключении                   | `true`       |
| `WEBHOOK_NOTIFY_BANDWIDTH_THRESHOLD` | Приближение к лимиту трафика                  | `true`       |
| `WEBHOOK_NOTIFY_DEVICES`             | Подключение/отключение устройств              | `true`       |

### Теги пользователей

| Переменная                   | Описание                                                        | По умолчанию |
| ---------------------------- | --------------------------------------------------------------- | ------------ |
| `TRIAL_USER_TAG`             | Тег для пробных пользователей (A-Z, 0-9, \_, макс. 16 символов) | —            |
| `PAID_SUBSCRIPTION_USER_TAG` | Тег для платных пользователей                                   | —            |

## Подписки и продажи

### Режим продаж

| Переменная   | Описание                                               | По умолчанию |
| ------------ | ------------------------------------------------------ | ------------ |
| `SALES_MODE` | `classic` (конструктор) или `tariffs` (тарифные планы) | `classic`    |

### Смена тарифа

| Переменная                        | Описание                                 | По умолчанию |
| --------------------------------- | ---------------------------------------- | ------------ |
| `TARIFF_SWITCH_UPGRADE_ENABLED`   | Разрешить переход на более дорогой тариф | `true`       |
| `TARIFF_SWITCH_DOWNGRADE_ENABLED` | Разрешить переход на более дешёвый тариф | `true`       |

### Триал подписка

| Переменная                         | Описание                                                          | По умолчанию |
| ---------------------------------- | ----------------------------------------------------------------- | ------------ |
| `TRIAL_DURATION_DAYS`              | Длительность триала (дни)                                         | `3`          |
| `TRIAL_TRAFFIC_LIMIT_GB`           | Лимит трафика триала (ГБ)                                         | `10`         |
| `TRIAL_DEVICE_LIMIT`               | Устройства в триал подписке                                       | `1`          |
| `TRIAL_TARIFF_ID`                  | ID тарифа для триала в режиме тарифов (0 = стандартные настройки) | `0`          |
| `TRIAL_PAYMENT_ENABLED`            | Требовать оплату за активацию                                     | `false`      |
| `TRIAL_ACTIVATION_PRICE`           | Стоимость активации триала (копейки)                              | `0`          |
| `TRIAL_ADD_REMAINING_DAYS_TO_PAID` | Плюсовать дни триала при покупке платной подписки                 | `false`      |

### Платная подписка

| Переменная                       | Описание                                                             | По умолчанию |
| -------------------------------- | -------------------------------------------------------------------- | ------------ |
| `DEFAULT_DEVICE_LIMIT`           | Устройства по умолчанию (бесплатные)                                 | `3`          |
| `MAX_DEVICES_LIMIT`              | Максимум устройств (0 = без лимита)                                  | `15`         |
| `DEFAULT_TRAFFIC_LIMIT_GB`       | Лимит трафика для подписок из админки                                | `100`        |
| `DEFAULT_TRAFFIC_RESET_STRATEGY` | Стратегия сброса трафика                                             | `MONTH`      |
| `RESET_TRAFFIC_ON_PAYMENT`       | Сбрасывать трафик при каждой оплате                                  | `false`      |
| `RESET_DEVICES_ON_RENEWAL`       | Сбрасывать все подключённые устройства (HWID) при продлении подписки | `false`      |

### Периоды подписки

| Переменная                       | Описание                               | По умолчанию |
| -------------------------------- | -------------------------------------- | ------------ |
| `AVAILABLE_SUBSCRIPTION_PERIODS` | Доступные периоды (дни, через запятую) | `30,90,180`  |
| `AVAILABLE_RENEWAL_PERIODS`      | Доступные периоды для продления        | `30,90,180`  |

### Простая покупка подписки

| Переменная                         | Описание                                                | По умолчанию |
| ---------------------------------- | ------------------------------------------------------- | ------------ |
| `SIMPLE_SUBSCRIPTION_ENABLED`      | Включить режим простой покупки                          | `true`       |
| `SIMPLE_SUBSCRIPTION_PERIOD_DAYS`  | Период (должен быть в `AVAILABLE_SUBSCRIPTION_PERIODS`) | `30`         |
| `SIMPLE_SUBSCRIPTION_DEVICE_LIMIT` | Устройства                                              | `1`          |
| `SIMPLE_SUBSCRIPTION_TRAFFIC_GB`   | Лимит трафика (0 = безлимит)                            | `0`          |
| `SIMPLE_SUBSCRIPTION_SQUAD_UUID`   | UUID сквада (пусто = по умолчанию)                      | —            |

### Настройки трафика

| Переменная                | Описание                                                             | По умолчанию |
| ------------------------- | -------------------------------------------------------------------- | ------------ |
| `TRAFFIC_SELECTION_MODE`  | `selectable` (пакеты) или `fixed` (единый лимит)                     | `selectable` |
| `TRAFFIC_PACKAGES_CONFIG` | Пакеты трафика. Формат: `ГБ:цена_копейки:показать` (0 ГБ = безлимит) | —            |
| `FIXED_TRAFFIC_LIMIT_GB`  | Фиксированный лимит ГБ (0 = безлимит)                                | `100`        |
| `PRICE_TRAFFIC_UNLIMITED` | Цена безлимитного трафика (копейки/месяц)                            | `20000`      |

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

| Переменная                      | Описание                                                                                               | По умолчанию |
| ------------------------------- | ------------------------------------------------------------------------------------------------------ | ------------ |
| `TRAFFIC_TOPUP_ENABLED`         | Включить докупку трафика                                                                               | `true`       |
| `BUY_TRAFFIC_BUTTON_VISIBLE`    | Показывать кнопку «Докупить трафик»                                                                    | `true`       |
| `TRAFFIC_TOPUP_PACKAGES_CONFIG` | Пакеты для докупки. Формат: `ГБ:цена_копейки:enabled` (пусто = использовать `TRAFFIC_PACKAGES_CONFIG`) | —            |

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

| Переменная                 | Описание                                                          | По умолчанию             |
| -------------------------- | ----------------------------------------------------------------- | ------------------------ |
| `TRAFFIC_RESET_PRICE_MODE` | Режим расчёта цены: `period`, `traffic`, `traffic_with_purchased` | `traffic_with_purchased` |
| `TRAFFIC_RESET_BASE_PRICE` | Базовая цена сброса (копейки, 0 = из `PERIOD_PRICES[30]`)         | `0`                      |

### Цены

| Переменная                | Описание                                | По умолчанию |
| ------------------------- | --------------------------------------- | ------------ |
| `BASE_SUBSCRIPTION_PRICE` | Базовая цена подписки (копейки)         | `0`          |
| `PRICE_14_DAYS`           | Цена за 14 дней (копейки)               | `7000`       |
| `PRICE_30_DAYS`           | Цена за 30 дней                         | `1000`       |
| `PRICE_60_DAYS`           | Цена за 60 дней                         | `25900`      |
| `PRICE_90_DAYS`           | Цена за 90 дней                         | `36900`      |
| `PRICE_180_DAYS`          | Цена за 180 дней                        | `69900`      |
| `PRICE_360_DAYS`          | Цена за 360 дней                        | `109900`     |
| `PRICE_PER_DEVICE`        | Цена за доп. устройство (копейки/месяц) | `10000`      |

### Устройства

| Переменная                          | Описание                                       | По умолчанию |
| ----------------------------------- | ---------------------------------------------- | ------------ |
| `DEVICES_SELECTION_ENABLED`         | Выбор кол-ва устройств при покупке             | `true`       |
| `DEVICES_SELECTION_DISABLED_AMOUNT` | Кол-во устройств без выбора (0 = не назначать) | `0`          |

### Скидки за длительные периоды

| Переменная                                  | Описание                                           | По умолчанию                |
| ------------------------------------------- | -------------------------------------------------- | --------------------------- |
| `BASE_PROMO_GROUP_PERIOD_DISCOUNTS_ENABLED` | Включить скидки (только для базовых пользователей) | `false`                     |
| `BASE_PROMO_GROUP_PERIOD_DISCOUNTS`         | Формат: `дни:процент` через запятую                | `60:10,90:20,180:40,360:70` |

### Модем

| Переменная               | Описание                          | По умолчанию      |
| ------------------------ | --------------------------------- | ----------------- |
| `MODEM_ENABLED`          | Включить подключение модема       | `false`           |
| `MODEM_PRICE_PER_MONTH`  | Цена модема (копейки/месяц)       | `10000`           |
| `MODEM_PERIOD_DISCOUNTS` | Скидки за срок: `месяцев:процент` | `3:15,6:20,12:25` |

## Автопродление

| Переменная                       | Описание                                            | По умолчанию |
| -------------------------------- | --------------------------------------------------- | ------------ |
| `ENABLE_AUTOPAY`                 | Глобально включить автопродление                    | `false`      |
| `AUTOPAY_WARNING_DAYS`           | Дни до окончания для предупреждения (через запятую) | `3,1`        |
| `DEFAULT_AUTOPAY_ENABLED`        | Автопродление для новых пользователей по умолчанию  | `true`       |
| `DEFAULT_AUTOPAY_DAYS_BEFORE`    | За сколько дней до окончания запускать              | `3`          |
| `MIN_BALANCE_FOR_AUTOPAY_KOPEKS` | Минимальный баланс для автопродления (копейки)      | `10000`      |

## Автопокупка после пополнения

| Переменная                          | Описание                            | По умолчанию |
| ----------------------------------- | ----------------------------------- | ------------ |
| `AUTO_PURCHASE_AFTER_TOPUP_ENABLED` | Авто-покупка из сохранённой корзины | `false`      |

## Платежные системы

### Общие настройки платежей

| Переменная                                         | Описание                                        | По умолчанию                     |
| -------------------------------------------------- | ----------------------------------------------- | -------------------------------- |
| `DISABLE_TOPUP_BUTTONS`                            | Скрыть кнопки выбора суммы (только ручной ввод) | `false`                          |
| `SUPPORT_TOPUP_ENABLED`                            | Пополнение через поддержку                      | `true`                           |
| `PAYMENT_VERIFICATION_AUTO_CHECK_ENABLED`          | Автопроверка зависших пополнений                | `false`                          |
| `PAYMENT_VERIFICATION_AUTO_CHECK_INTERVAL_MINUTES` | Интервал автопроверки (минуты)                  | `10`                             |
| `PAYMENT_SERVICE_NAME`                             | Название сервиса в платежах                     | `Интернет-сервис`                |
| `PAYMENT_BALANCE_DESCRIPTION`                      | Описание пополнения                             | `Пополнение баланса`             |
| `PAYMENT_SUBSCRIPTION_DESCRIPTION`                 | Описание оплаты подписки                        | `Оплата подписки`                |
| `PAYMENT_BALANCE_TEMPLATE`                         | Шаблон описания пополнения                      | `{service_name} - {description}` |
| `PAYMENT_SUBSCRIPTION_TEMPLATE`                    | Шаблон описания подписки                        | `{service_name} - {description}` |

<Info>
  Настройки `PAYMENT_*` позволяют изменить описания платежей, чтобы избежать блокировок платёжных систем.
</Info>

### Telegram Stars

| Переменная                | Описание                  | По умолчанию |
| ------------------------- | ------------------------- | ------------ |
| `TELEGRAM_STARS_ENABLED`  | Включить оплату звёздами  | `false`      |
| `TELEGRAM_STARS_RATE_RUB` | Курс: 1 звезда = N рублей | `1.79`       |

### YooKassa

| Переменная                                | Описание                                                                                                                          | По умолчанию        |
| ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------------- |
| `YOOKASSA_ENABLED`                        | Включить YooKassa                                                                                                                 | `false`             |
| `YOOKASSA_SHOP_ID`                        | ID магазина                                                                                                                       | —                   |
| `YOOKASSA_SECRET_KEY`                     | Секретный ключ                                                                                                                    | —                   |
| `YOOKASSA_RETURN_URL`                     | URL возврата после оплаты                                                                                                         | —                   |
| `YOOKASSA_SBP_ENABLED`                    | Оплата через СБП                                                                                                                  | `false`             |
| `YOOKASSA_MIN_AMOUNT_KOPEKS`              | Мин. сумма (копейки)                                                                                                              | `5000`              |
| `YOOKASSA_MAX_AMOUNT_KOPEKS`              | Макс. сумма (копейки)                                                                                                             | `1000000`           |
| `YOOKASSA_DEFAULT_RECEIPT_EMAIL`          | Email для чеков                                                                                                                   | —                   |
| `YOOKASSA_VAT_CODE`                       | Код НДС (1-12)                                                                                                                    | `1`                 |
| `YOOKASSA_PAYMENT_MODE`                   | Способ расчёта: `full_payment`, `partial_payment`, `advance`, `full_prepayment`, `partial_prepayment`, `credit`, `credit_payment` | `full_payment`      |
| `YOOKASSA_PAYMENT_SUBJECT`                | Предмет расчёта: `commodity`, `excise`, `job`, `service`, `payment`, `another` и др.                                              | `service`           |
| `YOOKASSA_QUICK_AMOUNT_SELECTION_ENABLED` | Быстрый выбор суммы пополнения                                                                                                    | `true`              |
| `YOOKASSA_TRUSTED_PROXY_NETWORKS`         | Доверенные IP-сети для webhook (через запятую)                                                                                    | —                   |
| `YOOKASSA_WEBHOOK_PATH`                   | Путь webhook                                                                                                                      | `/yookassa-webhook` |
| `YOOKASSA_TEST_MODE`                      | Принимать тестовые платежи (отклоняются в проде если `false`)                                                                     | `false`             |

<Note>
  Коды НДС: 1 — не облагается, 2 — 0%, 3 — 10%, 4 — 20%, 5 — 10/110, 6 — 20/120, 7 — 5%, 8 — 7%, 9 — 5/105, 10 — 7/107, 11 — 22%, 12 — 22/122.
</Note>

### CryptoBot

| Переменная                        | Описание                               | По умолчанию                        |
| --------------------------------- | -------------------------------------- | ----------------------------------- |
| `CRYPTOBOT_ENABLED`               | Включить CryptoBot                     | `false`                             |
| `CRYPTOBOT_API_TOKEN`             | API токен                              | —                                   |
| `CRYPTOBOT_WEBHOOK_SECRET`        | Секрет для webhook                     | —                                   |
| `CRYPTOBOT_BASE_URL`              | URL API                                | `https://pay.crypt.bot`             |
| `CRYPTOBOT_TESTNET`               | Режим тестовой сети                    | `false`                             |
| `CRYPTOBOT_DEFAULT_ASSET`         | Криптовалюта по умолчанию              | `USDT`                              |
| `CRYPTOBOT_ASSETS`                | Доступные криптовалюты (через запятую) | `USDT,TON,BTC,ETH,LTC,BNB,TRX,USDC` |
| `CRYPTOBOT_INVOICE_EXPIRES_HOURS` | Время жизни инвойса (часы)             | `24`                                |
| `CRYPTOBOT_WEBHOOK_PATH`          | Путь webhook                           | `/cryptobot-webhook`                |

### CloudPayments

| Переменная                        | Описание                                  | По умолчанию                           |
| --------------------------------- | ----------------------------------------- | -------------------------------------- |
| `CLOUDPAYMENTS_ENABLED`           | Включить CloudPayments                    | `false`                                |
| `CLOUDPAYMENTS_PUBLIC_ID`         | Public ID                                 | —                                      |
| `CLOUDPAYMENTS_API_SECRET`        | API секрет                                | —                                      |
| `CLOUDPAYMENTS_API_URL`           | URL API                                   | `https://api.cloudpayments.ru`         |
| `CLOUDPAYMENTS_WIDGET_URL`        | URL виджета оплаты                        | `https://widget.cloudpayments.ru/show` |
| `CLOUDPAYMENTS_DESCRIPTION`       | Описание платежа                          | `Пополнение баланса`                   |
| `CLOUDPAYMENTS_CURRENCY`          | Валюта                                    | `RUB`                                  |
| `CLOUDPAYMENTS_MIN_AMOUNT_KOPEKS` | Мин. сумма (копейки)                      | `10000`                                |
| `CLOUDPAYMENTS_MAX_AMOUNT_KOPEKS` | Макс. сумма (копейки)                     | `10000000`                             |
| `CLOUDPAYMENTS_RETURN_URL`        | URL возврата после оплаты                 | —                                      |
| `CLOUDPAYMENTS_SKIN`              | Скин виджета: `mini`, `classic`, `modern` | `mini`                                 |
| `CLOUDPAYMENTS_REQUIRE_EMAIL`     | Требовать email                           | `false`                                |
| `CLOUDPAYMENTS_TEST_MODE`         | Тестовый режим                            | `false`                                |
| `CLOUDPAYMENTS_WEBHOOK_PATH`      | Путь webhook (Pay/Fail уведомления)       | `/cloudpayments-webhook`               |

### Freekassa

| Переменная                          | Описание                                                     | По умолчанию         |
| ----------------------------------- | ------------------------------------------------------------ | -------------------- |
| `FREEKASSA_ENABLED`                 | Включить Freekassa                                           | `false`              |
| `FREEKASSA_SHOP_ID`                 | ID магазина                                                  | —                    |
| `FREEKASSA_API_KEY`                 | API ключ                                                     | —                    |
| `FREEKASSA_SECRET_WORD_1`           | Секретное слово 1 (для формы оплаты)                         | —                    |
| `FREEKASSA_SECRET_WORD_2`           | Секретное слово 2 (для webhook)                              | —                    |
| `FREEKASSA_DISPLAY_NAME`            | Название кнопки в интерфейсе                                 | `Freekassa`          |
| `FREEKASSA_CURRENCY`                | Валюта                                                       | `RUB`                |
| `FREEKASSA_MIN_AMOUNT_KOPEKS`       | Мин. сумма (копейки)                                         | `10000`              |
| `FREEKASSA_MAX_AMOUNT_KOPEKS`       | Макс. сумма (копейки)                                        | `100000000`          |
| `FREEKASSA_PAYMENT_TIMEOUT_SECONDS` | Таймаут платежа (сек)                                        | `3600`               |
| `FREEKASSA_PAYMENT_SYSTEM_ID`       | ID метода: пусто = форма выбора, `42` = СБП, `44` = NSPK СБП | —                    |
| `FREEKASSA_USE_API`                 | Использовать API (обязательно для NSPK)                      | `false`              |
| `FREEKASSA_WEBHOOK_PATH`            | Путь webhook                                                 | `/freekassa-webhook` |

#### Freekassa: отдельные методы оплаты

Можно выделить СБП и карту как отдельные кнопки (параллельно с основным методом Freekassa).

| Переменная                    | Описание                        | По умолчанию   |
| ----------------------------- | ------------------------------- | -------------- |
| `FREEKASSA_SBP_ENABLED`       | Включить отдельную кнопку СБП   | `false`        |
| `FREEKASSA_SBP_DISPLAY_NAME`  | Название кнопки СБП             | `СБП (QR код)` |
| `FREEKASSA_CARD_ENABLED`      | Включить отдельную кнопку карты | `false`        |
| `FREEKASSA_CARD_DISPLAY_NAME` | Название кнопки карты           | `Карта РФ`     |

### Kassa AI (api.fk.life)

Отдельная платёжная система, работает параллельно с Freekassa.

| Переменная                   | Описание                                                  | По умолчанию        |
| ---------------------------- | --------------------------------------------------------- | ------------------- |
| `KASSA_AI_ENABLED`           | Включить Kassa AI                                         | `false`             |
| `KASSA_AI_SHOP_ID`           | ID магазина                                               | —                   |
| `KASSA_AI_API_KEY`           | API ключ                                                  | —                   |
| `KASSA_AI_SECRET_WORD_2`     | Секретное слово 2 (для webhook)                           | —                   |
| `KASSA_AI_DISPLAY_NAME`      | Название кнопки в интерфейсе                              | `KassaAI`           |
| `KASSA_AI_CURRENCY`          | Валюта                                                    | `RUB`               |
| `KASSA_AI_MIN_AMOUNT_KOPEKS` | Мин. сумма (копейки)                                      | `10000`             |
| `KASSA_AI_MAX_AMOUNT_KOPEKS` | Макс. сумма (копейки)                                     | `100000000`         |
| `KASSA_AI_PAYMENT_SYSTEM_ID` | ID метода: `44` = СБП QR, `36` = Карты РФ, `43` = SberPay | `44`                |
| `KASSA_AI_WEBHOOK_PATH`      | Путь webhook                                              | `/kassa-ai-webhook` |

### Platega

| Переменная                  | Описание                     | По умолчанию             |
| --------------------------- | ---------------------------- | ------------------------ |
| `PLATEGA_ENABLED`           | Включить Platega             | `false`                  |
| `PLATEGA_MERCHANT_ID`       | Merchant ID                  | —                        |
| `PLATEGA_SECRET`            | Секретный ключ               | —                        |
| `PLATEGA_BASE_URL`          | URL API                      | `https://app.platega.io` |
| `PLATEGA_DISPLAY_NAME`      | Название кнопки в интерфейсе | `Platega`                |
| `PLATEGA_RETURN_URL`        | URL возврата                 | —                        |
| `PLATEGA_FAILED_URL`        | URL при ошибке               | —                        |
| `PLATEGA_CURRENCY`          | Валюта                       | `RUB`                    |
| `PLATEGA_ACTIVE_METHODS`    | ID методов через запятую     | `2,10,11,12,13`          |
| `PLATEGA_MIN_AMOUNT_KOPEKS` | Мин. сумма (копейки)         | `100`                    |
| `PLATEGA_MAX_AMOUNT_KOPEKS` | Макс. сумма (копейки)        | `100000000`              |
| `PLATEGA_WEBHOOK_PATH`      | Путь webhook                 | `/platega-webhook`       |

### PayPalych (Pal24)

| Переменная                  | Описание                        | По умолчанию                |
| --------------------------- | ------------------------------- | --------------------------- |
| `PAL24_ENABLED`             | Включить PayPalych              | `false`                     |
| `PAL24_API_TOKEN`           | API токен                       | —                           |
| `PAL24_SHOP_ID`             | ID магазина                     | —                           |
| `PAL24_SIGNATURE_TOKEN`     | Токен подписи                   | —                           |
| `PAL24_BASE_URL`            | URL API                         | `https://pal24.pro/api/v1/` |
| `PAL24_PAYMENT_DESCRIPTION` | Описание платежа                | `Пополнение баланса`        |
| `PAL24_MIN_AMOUNT_KOPEKS`   | Мин. сумма (копейки)            | `10000`                     |
| `PAL24_MAX_AMOUNT_KOPEKS`   | Макс. сумма (копейки)           | `100000000`                 |
| `PAL24_REQUEST_TIMEOUT`     | Таймаут запросов (сек)          | `30`                        |
| `PAL24_SBP_BUTTON_VISIBLE`  | Показывать кнопку СБП           | `true`                      |
| `PAL24_CARD_BUTTON_VISIBLE` | Показывать кнопку оплаты картой | `true`                      |
| `PAL24_WEBHOOK_PATH`        | Путь webhook (Result URL)       | `/pal24-webhook`            |

### Heleket

| Переменная                 | Описание                  | По умолчанию                 |
| -------------------------- | ------------------------- | ---------------------------- |
| `HELEKET_ENABLED`          | Включить Heleket          | `false`                      |
| `HELEKET_MERCHANT_ID`      | Merchant ID               | —                            |
| `HELEKET_API_KEY`          | API ключ                  | —                            |
| `HELEKET_BASE_URL`         | URL API                   | `https://api.heleket.com/v1` |
| `HELEKET_DEFAULT_CURRENCY` | Криптовалюта по умолчанию | `USDT`                       |
| `HELEKET_DEFAULT_NETWORK`  | Сеть по умолчанию         | —                            |
| `HELEKET_INVOICE_LIFETIME` | Время жизни инвойса (сек) | `3600`                       |
| `HELEKET_MARKUP_PERCENT`   | Наценка (%)               | `0`                          |
| `HELEKET_CALLBACK_URL`     | URL обратного вызова      | —                            |
| `HELEKET_RETURN_URL`       | URL возврата              | —                            |
| `HELEKET_SUCCESS_URL`      | URL при успехе            | —                            |
| `HELEKET_WEBHOOK_PATH`     | Путь webhook              | `/heleket-webhook`           |

### MulenPay

| Переменная                   | Описание              | По умолчанию              |
| ---------------------------- | --------------------- | ------------------------- |
| `MULENPAY_ENABLED`           | Включить MulenPay     | `false`                   |
| `MULENPAY_API_KEY`           | API ключ              | —                         |
| `MULENPAY_SECRET_KEY`        | Секретный ключ        | —                         |
| `MULENPAY_SHOP_ID`           | ID магазина           | —                         |
| `MULENPAY_BASE_URL`          | URL API               | `https://mulenpay.ru/api` |
| `MULENPAY_DISPLAY_NAME`      | Название кнопки       | `Mulen Pay`               |
| `MULENPAY_DESCRIPTION`       | Описание платежа      | `Пополнение баланса`      |
| `MULENPAY_LANGUAGE`          | Язык                  | `ru`                      |
| `MULENPAY_VAT_CODE`          | Код НДС               | `0`                       |
| `MULENPAY_PAYMENT_SUBJECT`   | Предмет расчёта       | `4`                       |
| `MULENPAY_PAYMENT_MODE`      | Способ расчёта        | `4`                       |
| `MULENPAY_MIN_AMOUNT_KOPEKS` | Мин. сумма (копейки)  | `10000`                   |
| `MULENPAY_MAX_AMOUNT_KOPEKS` | Макс. сумма (копейки) | `10000000`                |
| `MULENPAY_WEBHOOK_PATH`      | Путь webhook          | `/mulenpay-webhook`       |

### Tribute

| Переменная             | Описание         | По умолчанию       |
| ---------------------- | ---------------- | ------------------ |
| `TRIBUTE_ENABLED`      | Включить Tribute | `false`            |
| `TRIBUTE_API_KEY`      | API ключ         | —                  |
| `TRIBUTE_DONATE_LINK`  | Ссылка на донат  | —                  |
| `TRIBUTE_WEBHOOK_PATH` | Путь webhook     | `/tribute-webhook` |

### WATA

| Переменная                      | Описание                   | По умолчанию           |
| ------------------------------- | -------------------------- | ---------------------- |
| `WATA_ENABLED`                  | Включить WATA              | `false`                |
| `WATA_BASE_URL`                 | URL API                    | `https://api.wata.pro` |
| `WATA_ACCESS_TOKEN`             | Токен доступа              | —                      |
| `WATA_TERMINAL_PUBLIC_ID`       | Public ID терминала        | —                      |
| `WATA_PAYMENT_DESCRIPTION`      | Описание платежа           | `Пополнение баланса`   |
| `WATA_PAYMENT_TYPE`             | Тип: `card`, `sbp`, `all`  | `all`                  |
| `WATA_SUCCESS_REDIRECT_URL`     | URL при успехе             | —                      |
| `WATA_FAIL_REDIRECT_URL`        | URL при ошибке             | —                      |
| `WATA_LINK_TTL_MINUTES`         | Время жизни ссылки (мин)   | `60`                   |
| `WATA_MIN_AMOUNT_KOPEKS`        | Мин. сумма (копейки)       | `10000`                |
| `WATA_MAX_AMOUNT_KOPEKS`        | Макс. сумма (копейки)      | `10000000`             |
| `WATA_REQUEST_TIMEOUT`          | Таймаут запросов (сек)     | `30`                   |
| `WATA_PUBLIC_KEY_CACHE_SECONDS` | Кэш публичного ключа (сек) | `3600`                 |
| `WATA_WEBHOOK_PATH`             | Путь webhook               | `/wata-webhook`        |

### RioPay

| Переменная                 | Описание                                                          | По умолчанию      |
| -------------------------- | ----------------------------------------------------------------- | ----------------- |
| `RIOPAY_ENABLED`           | Включить RioPay                                                   | `false`           |
| `RIOPAY_API_TOKEN`         | API токен (заголовок `x-api-token`)                               | —                 |
| `RIOPAY_WEBHOOK_SECRET`    | Ключ HMAC-SHA512 для вебхуков (по умолчанию = `RIOPAY_API_TOKEN`) | —                 |
| `RIOPAY_DISPLAY_NAME`      | Название кнопки в интерфейсе                                      | `RioPay`          |
| `RIOPAY_CURRENCY`          | Валюта                                                            | `RUB`             |
| `RIOPAY_MIN_AMOUNT_KOPEKS` | Мин. сумма (копейки)                                              | `10000`           |
| `RIOPAY_MAX_AMOUNT_KOPEKS` | Макс. сумма (копейки)                                             | `100000000`       |
| `RIOPAY_WEBHOOK_PATH`      | Путь webhook                                                      | `/riopay-webhook` |
| `RIOPAY_SUCCESS_URL`       | URL при успешной оплате                                           | —                 |
| `RIOPAY_FAIL_URL`          | URL при ошибке оплаты                                             | —                 |

### Overpay

Платёжная система с mTLS-аутентификацией (P12 клиентский сертификат) и HTTP Basic Auth.

| Переменная                  | Описание                                                              | По умолчанию             |
| --------------------------- | --------------------------------------------------------------------- | ------------------------ |
| `OVERPAY_ENABLED`           | Включить Overpay                                                      | `false`                  |
| `OVERPAY_API_URL`           | URL API                                                               | `https://api.overpay.io` |
| `OVERPAY_USERNAME`          | Логин для HTTP Basic Auth                                             | —                        |
| `OVERPAY_PASSWORD`          | Пароль для HTTP Basic Auth                                            | —                        |
| `OVERPAY_PROJECT_ID`        | ID проекта                                                            | —                        |
| `OVERPAY_P12_PATH`          | Путь к P12 клиентскому сертификату (обязательно для mTLS)             | —                        |
| `OVERPAY_P12_PASSPHRASE`    | Пароль от P12 сертификата                                             | —                        |
| `OVERPAY_DISPLAY_NAME`      | Название кнопки в интерфейсе                                          | `Overpay`                |
| `OVERPAY_CURRENCY`          | Валюта                                                                | `RUB`                    |
| `OVERPAY_MIN_AMOUNT_KOPEKS` | Мин. сумма (копейки)                                                  | `10000`                  |
| `OVERPAY_MAX_AMOUNT_KOPEKS` | Макс. сумма (копейки)                                                 | `10000000`               |
| `OVERPAY_WEBHOOK_PATH`      | Путь webhook                                                          | `/overpay-webhook`       |
| `OVERPAY_RETURN_URL`        | URL возврата после оплаты                                             | —                        |
| `OVERPAY_LIFETIME_MINUTES`  | Время жизни платежа (минуты)                                          | `1440`                   |
| `OVERPAY_PAYMENT_METHODS`   | Методы оплаты (через запятую): `card` — банковские карты, `fps` — СБП | `card,fps`               |

## Налоговая служба (NaloGO)

Автоматическая отправка чеков в налоговую при пополнении баланса.

| Переменная                    | Описание                              | По умолчанию           |
| ----------------------------- | ------------------------------------- | ---------------------- |
| `NALOGO_ENABLED`              | Включить                              | `false`                |
| `NALOGO_INN`                  | ИНН самозанятого                      | —                      |
| `NALOGO_PASSWORD`             | Пароль от ЛК налоговой                | —                      |
| `NALOGO_DEVICE_ID`            | ID устройства для авторизации         | —                      |
| `NALOGO_STORAGE_PATH`         | Путь к файлу с токенами               | `./nalogo_tokens.json` |
| `NALOGO_QUEUE_CHECK_INTERVAL` | Интервал проверки очереди чеков (сек) | `300`                  |
| `NALOGO_QUEUE_RECEIPT_DELAY`  | Задержка между отправкой чеков (сек)  | `3`                    |
| `NALOGO_QUEUE_MAX_ATTEMPTS`   | Макс. попыток отправки одного чека    | `10`                   |

## Реферальная программа

### Основные настройки

| Переменная                             | Описание                                                                        | По умолчанию |
| -------------------------------------- | ------------------------------------------------------------------------------- | ------------ |
| `REFERRAL_PROGRAM_ENABLED`             | Включить реферальную программу                                                  | `true`       |
| `REFERRAL_MINIMUM_TOPUP_KOPEKS`        | Мин. пополнение для активации бонусов (копейки)                                 | `10000`      |
| `REFERRAL_FIRST_TOPUP_BONUS_KOPEKS`    | Бонус рефералу при первом пополнении                                            | `10000`      |
| `REFERRAL_INVITER_BONUS_KOPEKS`        | Бонус пригласившему                                                             | `10000`      |
| `REFERRAL_COMMISSION_PERCENT`          | Процент комиссии с пополнений                                                   | `25`         |
| `REFERRAL_MAX_COMMISSION_PAYMENTS`     | Макс. кол-во платежей реферала, с которых начисляется комиссия (0 = без лимита) | `0`          |
| `REFERRAL_PARTNER_SECTION_VISIBLE`     | Показывать раздел партнёрки                                                     | `true`       |
| `REFERRAL_NOTIFICATIONS_ENABLED`       | Уведомления о рефералах                                                         | `true`       |
| `REFERRAL_NOTIFICATION_RETRY_ATTEMPTS` | Повторные попытки отправки уведомлений                                          | `3`          |

### Вывод реферального баланса

| Переменная                                   | Описание                                           | По умолчанию |
| -------------------------------------------- | -------------------------------------------------- | ------------ |
| `REFERRAL_WITHDRAWAL_ENABLED`                | Включить вывод баланса                             | `false`      |
| `REFERRAL_WITHDRAWAL_MIN_AMOUNT_KOPEKS`      | Мин. сумма вывода (копейки)                        | `50000`      |
| `REFERRAL_WITHDRAWAL_COOLDOWN_DAYS`          | Интервал между запросами (дни)                     | `30`         |
| `REFERRAL_WITHDRAWAL_REQUISITES_TEXT`        | Подсказка для поля реквизитов                      | —            |
| `REFERRAL_WITHDRAWAL_ONLY_REFERRAL_BALANCE`  | Только реферальный баланс (true) или весь (false)  | `true`       |
| `REFERRAL_WITHDRAWAL_NOTIFICATIONS_TOPIC_ID` | Топик для уведомлений о заявках (0 = основной чат) | `0`          |
| `REFERRAL_WITHDRAWAL_TEST_MODE`              | Тестовый режим (позволяет админам тестировать)     | `false`      |

### Анализ подозрительной активности

| Переменная                                              | Описание                                           | По умолчанию |
| ------------------------------------------------------- | -------------------------------------------------- | ------------ |
| `REFERRAL_WITHDRAWAL_SUSPICIOUS_MIN_DEPOSIT_KOPEKS`     | Мин. сумма для анализа (копейки)                   | `100000`     |
| `REFERRAL_WITHDRAWAL_SUSPICIOUS_MAX_DEPOSITS_PER_MONTH` | Макс. пополнений от реферала в месяц               | `10`         |
| `REFERRAL_WITHDRAWAL_SUSPICIOUS_NO_PURCHASES_RATIO`     | Коэффициент: пополнено в X раз больше потраченного | `3`          |

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

Каналы управляются через админ-панель бота или Cabinet API (не через переменные окружения). Подробнее: [Обязательная подписка на каналы](/bot/channel-subscription).

| Переменная                             | Описание                                                                  | По умолчанию |
| -------------------------------------- | ------------------------------------------------------------------------- | ------------ |
| `CHANNEL_IS_REQUIRED_SUB`              | Мастер-переключатель обязательной подписки (можно менять без перезапуска) | `false`      |
| `CHANNEL_DISABLE_TRIAL_ON_UNSUBSCRIBE` | Деактивировать триальные подписки при отписке от канала                   | `true`       |
| `CHANNEL_REQUIRED_FOR_ALL`             | Деактивировать все подписки при отписке (включая платные)                 | `false`      |

## Мониторинг трафика

Логика: при старте бота создаётся snapshot трафика. Через интервал проверяется дельта. Если превышает порог — уведомление админам.

### Быстрая проверка (дельта за интервал)

| Переменная                            | Описание          | По умолчанию |
| ------------------------------------- | ----------------- | ------------ |
| `TRAFFIC_FAST_CHECK_ENABLED`          | Включить          | `false`      |
| `TRAFFIC_FAST_CHECK_INTERVAL_MINUTES` | Интервал (минуты) | `10`         |
| `TRAFFIC_FAST_CHECK_THRESHOLD_GB`     | Порог дельты (ГБ) | `5.0`        |

### Суточная проверка (через bandwidth API)

| Переменная                    | Описание                      | По умолчанию |
| ----------------------------- | ----------------------------- | ------------ |
| `TRAFFIC_DAILY_CHECK_ENABLED` | Включить                      | `false`      |
| `TRAFFIC_DAILY_CHECK_TIME`    | Время проверки (HH:MM по UTC) | `00:00`      |
| `TRAFFIC_DAILY_THRESHOLD_GB`  | Порог суточного трафика (ГБ)  | `50.0`       |

### Уведомления и фильтрация

| Переменная                          | Описание                                          | По умолчанию |
| ----------------------------------- | ------------------------------------------------- | ------------ |
| `SUSPICIOUS_NOTIFICATIONS_TOPIC_ID` | Топик для уведомлений о подозрительной активности | —            |
| `TRAFFIC_MONITORED_NODES`           | UUID нод для мониторинга (пусто = все)            | —            |
| `TRAFFIC_IGNORED_NODES`             | UUID нод для исключения                           | —            |
| `TRAFFIC_EXCLUDED_USER_UUIDS`       | UUID пользователей для исключения                 | —            |

### Производительность

| Переменная                              | Описание                            | По умолчанию |
| --------------------------------------- | ----------------------------------- | ------------ |
| `TRAFFIC_CHECK_BATCH_SIZE`              | Размер батча                        | `1000`       |
| `TRAFFIC_CHECK_CONCURRENCY`             | Параллельных запросов к API         | `10`         |
| `TRAFFIC_NOTIFICATION_COOLDOWN_MINUTES` | Кулдаун уведомлений на пользователя | `60`         |
| `TRAFFIC_SNAPSHOT_TTL_HOURS`            | TTL snapshot в Redis (часы)         | `24`         |

## Чёрный список

| Переменная                                      | Описание                                       | По умолчанию |
| ----------------------------------------------- | ---------------------------------------------- | ------------ |
| `BLACKLIST_CHECK_ENABLED`                       | Включить проверку                              | `false`      |
| `BLACKLIST_GITHUB_URL`                          | URL к файлу чёрного списка                     | —            |
| `BLACKLIST_UPDATE_INTERVAL_HOURS`               | Интервал обновления (часы)                     | `24`         |
| `BLACKLIST_IGNORE_ADMINS`                       | Игнорировать администраторов                   | `true`       |
| `SUBSCRIPTION_RENEWAL_BALANCE_THRESHOLD_KOPEKS` | Порог баланса для фильтра «готовы к продлению» | `20000`      |

## Интеграция BedolagaBan

| Переменная                   | Описание               | По умолчанию |
| ---------------------------- | ---------------------- | ------------ |
| `BAN_SYSTEM_ENABLED`         | Включить интеграцию    | `false`      |
| `BAN_SYSTEM_API_URL`         | URL API сервера        | —            |
| `BAN_SYSTEM_API_TOKEN`       | Токен авторизации      | —            |
| `BAN_SYSTEM_REQUEST_TIMEOUT` | Таймаут запросов (сек) | `30`         |

## Мониторинг серверов

| Переменная                         | Описание                                                            | По умолчанию |
| ---------------------------------- | ------------------------------------------------------------------- | ------------ |
| `SERVER_STATUS_MODE`               | Режим: `disabled`, `external_link`, `external_link_miniapp`, `xray` | `disabled`   |
| `SERVER_STATUS_EXTERNAL_URL`       | Ссылка на внешний мониторинг                                        | —            |
| `SERVER_STATUS_METRICS_URL`        | URL метрик XrayChecker                                              | —            |
| `SERVER_STATUS_METRICS_USERNAME`   | Логин для Basic Auth метрик                                         | —            |
| `SERVER_STATUS_METRICS_PASSWORD`   | Пароль для Basic Auth метрик                                        | —            |
| `SERVER_STATUS_METRICS_VERIFY_SSL` | Проверять SSL при запросе метрик                                    | `true`       |
| `SERVER_STATUS_REQUEST_TIMEOUT`    | Таймаут запроса (сек)                                               | `10`         |
| `SERVER_STATUS_ITEMS_PER_PAGE`     | Серверов на странице                                                | `10`         |

## Мониторинг и уведомления

| Переменная                       | Описание                                                                                                                                                                      | По умолчанию |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ |
| `MONITORING_INTERVAL`            | Интервал проверки панели (секунды)                                                                                                                                            | `60`         |
| `INACTIVE_USER_DELETE_MONTHS`    | Удалять неактивных через N месяцев (учитывается и дата последней активности, и дата окончания подписки — пользователи с активной или недавно истёкшей подпиской не удаляются) | `3`          |
| `TRIAL_WARNING_HOURS`            | Предупреждение об истечении триала (часы)                                                                                                                                     | `2`          |
| `ENABLE_NOTIFICATIONS`           | Включить уведомления пользователям                                                                                                                                            | `true`       |
| `NOTIFICATION_RETRY_ATTEMPTS`    | Попытки отправки уведомлений                                                                                                                                                  | `3`          |
| `MONITORING_LOGS_RETENTION_DAYS` | Хранить логи мониторинга (дни)                                                                                                                                                | `30`         |
| `NOTIFICATION_CACHE_HOURS`       | Кэш уведомлений (часы)                                                                                                                                                        | `24`         |

## Режим технических работ

| Переменная                       | Описание                          | По умолчанию                    |
| -------------------------------- | --------------------------------- | ------------------------------- |
| `MAINTENANCE_MODE`               | Режим тех. работ                  | `false`                         |
| `MAINTENANCE_AUTO_ENABLE`        | Авто-включение при падении панели | `true`                          |
| `MAINTENANCE_MONITORING_ENABLED` | Мониторинг доступности            | `true`                          |
| `MAINTENANCE_CHECK_INTERVAL`     | Интервал проверки (сек)           | `30`                            |
| `MAINTENANCE_RETRY_ATTEMPTS`     | Число повторных попыток           | `1`                             |
| `MAINTENANCE_MESSAGE`            | Сообщение при тех. работах        | `Ведутся технические работы...` |

## Уведомления администраторов

| Переменная                                    | Описание                                                  | По умолчанию |
| --------------------------------------------- | --------------------------------------------------------- | ------------ |
| `ADMIN_NOTIFICATIONS_ENABLED`                 | Включить уведомления                                      | `false`      |
| `ADMIN_NOTIFICATIONS_CHAT_ID`                 | ID канала/группы (с `-100` префиксом)                     | —            |
| `ADMIN_NOTIFICATIONS_TOPIC_ID`                | ID топика для общих уведомлений (фоллбэк)                 | —            |
| `ADMIN_NOTIFICATIONS_TICKET_TOPIC_ID`         | ID топика для тикетов                                     | —            |
| `ADMIN_NOTIFICATIONS_NALOG_TOPIC_ID`          | ID топика для чеков NaloGO                                | —            |
| `ADMIN_NOTIFICATIONS_PURCHASES_TOPIC_ID`      | Топик для покупок подписок                                | —            |
| `ADMIN_NOTIFICATIONS_RENEWALS_TOPIC_ID`       | Топик для продлений                                       | —            |
| `ADMIN_NOTIFICATIONS_TRIALS_TOPIC_ID`         | Топик для триалов                                         | —            |
| `ADMIN_NOTIFICATIONS_BALANCE_TOPIC_ID`        | Топик для пополнений баланса                              | —            |
| `ADMIN_NOTIFICATIONS_ADDONS_TOPIC_ID`         | Топик для докупки трафика/устройств/серверов              | —            |
| `ADMIN_NOTIFICATIONS_INFRASTRUCTURE_TOPIC_ID` | Топик для инфраструктуры (ноды, техработы, статус панели) | —            |
| `ADMIN_NOTIFICATIONS_ERRORS_TOPIC_ID`         | Топик для ошибок бота и крэш-репортов                     | —            |
| `ADMIN_NOTIFICATIONS_PROMO_TOPIC_ID`          | Топик для промокодов, кампаний, промогрупп                | —            |
| `ADMIN_NOTIFICATIONS_PARTNERS_TOPIC_ID`       | Топик для партнёрок, выводов, админ-действий              | —            |

### Автоматические отчёты

| Переменная                | Описание                                                     | По умолчанию |
| ------------------------- | ------------------------------------------------------------ | ------------ |
| `ADMIN_REPORTS_ENABLED`   | Включить ежедневные отчёты                                   | `false`      |
| `ADMIN_REPORTS_CHAT_ID`   | Чат для отчётов (по умолчанию `ADMIN_NOTIFICATIONS_CHAT_ID`) | —            |
| `ADMIN_REPORTS_TOPIC_ID`  | ID топика для отчётов                                        | —            |
| `ADMIN_REPORTS_SEND_TIME` | Время отправки (по МСК)                                      | `10:00`      |

## Конкурсная система

| Переменная                  | Описание                    | По умолчанию |
| --------------------------- | --------------------------- | ------------ |
| `CONTESTS_ENABLED`          | Включить конкурсы           | `false`      |
| `CONTESTS_BUTTON_VISIBLE`   | Показывать кнопку конкурсов | `false`      |
| `REFERRAL_CONTESTS_ENABLED` | Реферальные конкурсы        | `false`      |

## Интерфейс и UX

### Логотип и меню

| Переменная                 | Описание                                                             | По умолчанию   |
| -------------------------- | -------------------------------------------------------------------- | -------------- |
| `ENABLE_LOGO_MODE`         | Логотип в сообщениях (true = с изображением)                         | `true`         |
| `LOGO_FILE`                | Путь к файлу логотипа                                                | `vpn_logo.png` |
| `MAIN_MENU_MODE`           | Режим меню: `default` (классический) или `cabinet` (с ЛК MiniApp)    | `default`      |
| `CABINET_BUTTON_STYLE`     | Стиль кнопок в режиме cabinet: `primary`, `success`, `danger`, пусто | —              |
| `MENU_LAYOUT_ENABLED`      | Управление меню через API                                            | `false`        |
| `DISABLE_WEB_PAGE_PREVIEW` | Отключить превью ссылок                                              | `false`        |

### Видимость элементов

| Переменная                | Описание                             | По умолчанию |
| ------------------------- | ------------------------------------ | ------------ |
| `HIDE_TOPUP_BUTTONS`      | Скрыть кнопки пополнения             | `false`      |
| `HIDE_SUBSCRIPTION_LINK`  | Скрыть ссылку подключения в подписке | `false`      |
| `ACTIVATE_BUTTON_VISIBLE` | Показывать кнопку активации          | `false`      |
| `ACTIVATE_BUTTON_TEXT`    | Текст кнопки активации               | —            |
| `SKIP_RULES_ACCEPT`       | Пропустить принятие правил           | `false`      |
| `SKIP_REFERRAL_CODE`      | Пропустить запрос реферального кода  | `false`      |

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

| Переменная                       | Описание                                                                            | По умолчанию                       |
| -------------------------------- | ----------------------------------------------------------------------------------- | ---------------------------------- |
| `CONNECT_BUTTON_MODE`            | Режим: `guide`, `miniapp_subscription`, `miniapp_custom`, `link`, `happ_cryptolink` | `miniapp_subscription`             |
| `MINIAPP_CUSTOM_URL`             | URL для режима `miniapp_custom`                                                     | —                                  |
| `MINIAPP_STATIC_PATH`            | Путь к статике MiniApp                                                              | `miniapp`                          |
| `MINIAPP_PURCHASE_URL`           | URL для редиректа на покупку                                                        | —                                  |
| `MINIAPP_SERVICE_NAME_EN`        | Название сервиса (EN)                                                               | `Bedolaga VPN`                     |
| `MINIAPP_SERVICE_NAME_RU`        | Название сервиса (RU)                                                               | `Bedolaga VPN`                     |
| `MINIAPP_SERVICE_DESCRIPTION_EN` | Описание сервиса (EN)                                                               | `Secure & Fast Connection`         |
| `MINIAPP_SERVICE_DESCRIPTION_RU` | Описание сервиса (RU)                                                               | `Безопасное и быстрое подключение` |

### Happ CryptoLink

| Переменная                             | Описание                                                                    | По умолчанию |
| -------------------------------------- | --------------------------------------------------------------------------- | ------------ |
| `CONNECT_BUTTON_HAPP_DOWNLOAD_ENABLED` | Показывать кнопки скачивания Happ                                           | `false`      |
| `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`    | Шаблон редиректа (пример: `https://sub.domain/redirect-page/?redirect_to=`) | —            |

## Cabinet (Личный кабинет)

| Переменная                                 | Описание                                            | По умолчанию |
| ------------------------------------------ | --------------------------------------------------- | ------------ |
| `CABINET_ENABLED`                          | Включить Cabinet API                                | `false`      |
| `CABINET_URL`                              | URL кабинета для ссылок в email                     | —            |
| `CABINET_JWT_SECRET`                       | JWT секрет для токенов                              | `BOT_TOKEN`  |
| `CABINET_ACCESS_TOKEN_EXPIRE_MINUTES`      | Время жизни access token (мин)                      | `15`         |
| `CABINET_REFRESH_TOKEN_EXPIRE_DAYS`        | Время жизни refresh token (дни)                     | `7`          |
| `CABINET_ALLOWED_ORIGINS`                  | CORS origins (через запятую)                        | —            |
| `CABINET_EMAIL_VERIFICATION_ENABLED`       | Верификация email                                   | `false`      |
| `CABINET_EMAIL_AUTH_ENABLED`               | Регистрация/вход по email (false = только Telegram) | `true`       |
| `CABINET_EMAIL_VERIFICATION_EXPIRE_HOURS`  | Время жизни токена верификации email (часы)         | `24`         |
| `CABINET_PASSWORD_RESET_EXPIRE_HOURS`      | Время жизни токена сброса пароля (часы)             | `1`          |
| `CABINET_EMAIL_CHANGE_CODE_EXPIRE_MINUTES` | Время жизни кода подтверждения смены email (мин)    | `15`         |

### Telegram авторизация (виджет)

Настройки внешнего вида Telegram Login Widget на странице входа Cabinet.

| Переменная                       | Описание                                   | По умолчанию |
| -------------------------------- | ------------------------------------------ | ------------ |
| `TELEGRAM_WIDGET_SIZE`           | Размер виджета: `large`, `medium`, `small` | `large`      |
| `TELEGRAM_WIDGET_RADIUS`         | Скругление углов (0-20)                    | `8`          |
| `TELEGRAM_WIDGET_USERPIC`        | Показывать аватар пользователя             | `true`       |
| `TELEGRAM_WIDGET_REQUEST_ACCESS` | Запрашивать доступ к данным                | `true`       |

### Telegram OIDC

Авторизация через Telegram OpenID Connect (popup-окно, JWT id\_token). Подробнее: [Telegram OIDC](/cabinet/telegram-oidc).

| Переменная                    | Описание                     | По умолчанию |
| ----------------------------- | ---------------------------- | ------------ |
| `TELEGRAM_OIDC_ENABLED`       | Включить OIDC авторизацию    | `false`      |
| `TELEGRAM_OIDC_CLIENT_ID`     | Client ID (числовой ID бота) | —            |
| `TELEGRAM_OIDC_CLIENT_SECRET` | Client Secret от BotFather   | —            |

### OAuth провайдеры

Вход через социальные аккаунты. Подробнее: [Настройка OAuth](/cabinet/oauth-setup).

| Переменная                    | Описание                        | По умолчанию |
| ----------------------------- | ------------------------------- | ------------ |
| `OAUTH_GOOGLE_ENABLED`        | Включить Google OAuth           | `false`      |
| `OAUTH_GOOGLE_CLIENT_ID`      | Google Client ID                | —            |
| `OAUTH_GOOGLE_CLIENT_SECRET`  | Google Client Secret            | —            |
| `OAUTH_YANDEX_ENABLED`        | Включить Яндекс OAuth           | `false`      |
| `OAUTH_YANDEX_CLIENT_ID`      | Яндекс Client ID                | —            |
| `OAUTH_YANDEX_CLIENT_SECRET`  | Яндекс Client Secret            | —            |
| `OAUTH_DISCORD_ENABLED`       | Включить Discord OAuth          | `false`      |
| `OAUTH_DISCORD_CLIENT_ID`     | Discord Client ID               | —            |
| `OAUTH_DISCORD_CLIENT_SECRET` | Discord Client Secret           | —            |
| `OAUTH_VK_ENABLED`            | Включить VK ID OAuth 2.1 (PKCE) | `false`      |
| `OAUTH_VK_CLIENT_ID`          | VK App ID                       | —            |
| `OAUTH_VK_CLIENT_SECRET`      | VK защищённый ключ              | —            |

### Тестовый email (разработка)

| Переменная            | Описание                                  | По умолчанию |
| --------------------- | ----------------------------------------- | ------------ |
| `TEST_EMAIL`          | Тестовый email (верификация пропускается) | —            |
| `TEST_EMAIL_PASSWORD` | Пароль для тестового email                | —            |

## SMTP (Email)

| Переменная        | Описание                                     | По умолчанию  |
| ----------------- | -------------------------------------------- | ------------- |
| `SMTP_HOST`       | SMTP сервер                                  | —             |
| `SMTP_PORT`       | Порт                                         | `587`         |
| `SMTP_USER`       | Пользователь                                 | —             |
| `SMTP_PASSWORD`   | Пароль                                       | —             |
| `SMTP_FROM_EMAIL` | Email отправителя (по умолчанию `SMTP_USER`) | —             |
| `SMTP_FROM_NAME`  | Имя отправителя                              | `VPN Service` |
| `SMTP_USE_TLS`    | Использовать TLS                             | `true`        |

## Система бэкапов

| Переменная              | Описание                     | По умолчанию        |
| ----------------------- | ---------------------------- | ------------------- |
| `BACKUP_AUTO_ENABLED`   | Включить автобэкапы          | `true`              |
| `BACKUP_INTERVAL_HOURS` | Интервал (часы)              | `24`                |
| `BACKUP_TIME`           | Время первого бэкапа (HH:MM) | `03:00`             |
| `BACKUP_MAX_KEEP`       | Макс. число хранимых бэкапов | `7`                 |
| `BACKUP_COMPRESSION`    | Сжатие                       | `true`              |
| `BACKUP_INCLUDE_LOGS`   | Включать логи                | `false`             |
| `BACKUP_LOCATION`       | Путь хранения                | `/app/data/backups` |

### Отправка бэкапов в Telegram

| Переменная                | Описание                            | По умолчанию |
| ------------------------- | ----------------------------------- | ------------ |
| `BACKUP_SEND_ENABLED`     | Включить отправку                   | `true`       |
| `BACKUP_SEND_CHAT_ID`     | ID канала (с `-100` префиксом)      | —            |
| `BACKUP_SEND_TOPIC_ID`    | ID топика                           | —            |
| `BACKUP_ARCHIVE_PASSWORD` | Пароль для зашифрованного ZIP с AES | —            |

## Проверка обновлений

| Переменная                     | Описание                 | По умолчанию                             |
| ------------------------------ | ------------------------ | ---------------------------------------- |
| `VERSION_CHECK_ENABLED`        | Включить проверку        | `true`                                   |
| `VERSION_CHECK_REPO`           | GitHub репозиторий       | `fr1ngg/remnawave-bedolaga-telegram-bot` |
| `VERSION_CHECK_INTERVAL_HOURS` | Интервал проверки (часы) | `1`                                      |

## Оффлайн-конверсии Яндекс Метрики

Отправка оффлайн-конверсий в Яндекс Метрику при покупке подписки. CID захватывается из бота (параметр `/start`), авторизации Cabinet или лендингов.

| Переменная                               | Описание                                                  | По умолчанию |
| ---------------------------------------- | --------------------------------------------------------- | ------------ |
| `YANDEX_OFFLINE_CONV_ENABLED`            | Включить отправку оффлайн-конверсий                       | `false`      |
| `YANDEX_OFFLINE_CONV_COUNTER_ID`         | ID счётчика Яндекс Метрики                                | —            |
| `YANDEX_OFFLINE_CONV_MEASUREMENT_SECRET` | Секрет для Measurement Protocol                           | —            |
| `YANDEX_OFFLINE_CONV_START_PREFIX`       | Префикс UTM-метки для захвата CID (из параметра `/start`) | `utm_ya_`    |
| `YANDEX_OFFLINE_CONV_DL`                 | URL страницы для оффлайн-конверсии (параметр `dl`)        | —            |
| `YANDEX_OFFLINE_CONV_DT`                 | Заголовок страницы (параметр `dt`)                        | —            |
| `YANDEX_OFFLINE_CONV_CURRENCY`           | Валюта конверсий                                          | `RUB`        |

## S2S Postback

Серверные постбэки (Server-to-Server) при регистрации, активации триала и покупке подписки.

| Переменная                      | Описание                                  | По умолчанию |
| ------------------------------- | ----------------------------------------- | ------------ |
| `S2S_POSTBACK_ENABLED`          | Включить S2S постбэки                     | `false`      |
| `S2S_POSTBACK_REGISTRATION_URL` | URL постбэка при регистрации пользователя | —            |
| `S2S_POSTBACK_TRIAL_URL`        | URL постбэка при активации триала         | —            |
| `S2S_POSTBACK_PURCHASE_URL`     | URL постбэка при покупке подписки         | —            |

## Локализация

| Переменная                   | Описание                                 | По умолчанию     |
| ---------------------------- | ---------------------------------------- | ---------------- |
| `DEFAULT_LANGUAGE`           | Язык по умолчанию                        | `ru`             |
| `AVAILABLE_LANGUAGES`        | Доступные языки (через запятую)          | `ru,en,ua,zh,fa` |
| `LANGUAGE_SELECTION_ENABLED` | Выбор языка при старте и в меню          | `true`           |
| `PRICE_ROUNDING_ENABLED`     | Округление цен (≤50 коп вниз, >50 вверх) | `true`           |
| `TZ`                         | Часовой пояс                             | `Europe/Moscow`  |

## Логирование

| Переменная   | Описание                    | По умолчанию   |
| ------------ | --------------------------- | -------------- |
| `LOG_LEVEL`  | Уровень логирования         | `INFO`         |
| `LOG_FILE`   | Путь к лог-файлу            | `logs/bot.log` |
| `LOG_COLORS` | ANSI-цвета в консоли (Rich) | `true`         |

### Ротация логов

| Переменная                      | Описание                                              | По умолчанию   |
| ------------------------------- | ----------------------------------------------------- | -------------- |
| `LOG_ROTATION_ENABLED`          | Включить ротацию                                      | `false`        |
| `LOG_ROTATION_TIME`             | Время ротации (HH:MM)                                 | `00:00`        |
| `LOG_ROTATION_KEEP_DAYS`        | Хранить архивы (дни)                                  | `7`            |
| `LOG_ROTATION_COMPRESS`         | Сжимать архивы gzip                                   | `true`         |
| `LOG_ROTATION_SEND_TO_TELEGRAM` | Отправлять архивы в Telegram                          | `false`        |
| `LOG_ROTATION_CHAT_ID`          | Канал для логов (по умолчанию `BACKUP_SEND_CHAT_ID`)  | —              |
| `LOG_ROTATION_TOPIC_ID`         | Топик для логов (по умолчанию `BACKUP_SEND_TOPIC_ID`) | —              |
| `LOG_DIR`                       | Директория логов                                      | `logs`         |
| `LOG_INFO_FILE`                 | Файл info-логов                                       | `info.log`     |
| `LOG_WARNING_FILE`              | Файл warning-логов                                    | `warning.log`  |
| `LOG_ERROR_FILE`                | Файл error-логов                                      | `error.log`    |
| `LOG_PAYMENTS_FILE`             | Файл логов платежей                                   | `payments.log` |

## Медиа-загрузки (новости)

Настройки для загрузки изображений и видео в модуле новостей.

| Переменная                  | Описание                            | По умолчанию |
| --------------------------- | ----------------------------------- | ------------ |
| `MEDIA_UPLOAD_DIR`          | Директория хранения загрузок        | `./uploads`  |
| `MEDIA_MAX_IMAGE_SIZE_MB`   | Макс. размер изображения (МБ)       | `10`         |
| `MEDIA_MAX_VIDEO_SIZE_MB`   | Макс. размер видео (МБ)             | `50`         |
| `MEDIA_IMAGE_MAX_DIMENSION` | Макс. сторона изображения (пиксели) | `2048`       |
| `MEDIA_JPEG_QUALITY`        | Качество JPEG-сжатия (1-100)        | `85`         |

## Дополнительные настройки

| Переменная             | Описание                            | По умолчанию      |
| ---------------------- | ----------------------------------- | ----------------- |
| `APP_CONFIG_PATH`      | Путь к конфигу приложений для гайда | `app-config.json` |
| `ENABLE_DEEP_LINKS`    | Включить deep links                 | `true`            |
| `APP_CONFIG_CACHE_TTL` | TTL кэша конфига (сек)              | `3600`            |
