Обзор
Бот управляет VPN подписками через API панели Remnawave. Все операции с пользователями, серверами и трафиком проходят через единый API клиент.Поддерживаемые версии панели
Обновление на Remnawave 3.0.0
Что нужно сделать при обновлении:1
Обновите панель до 3.0.0
Бот версии
v4.0.0 и новее работает с числовой идентичностью. Обновляйте панель и бота согласованно.2
Перепишите TRAFFIC_EXCLUDED_USER_UUIDS
Переменная переименована в
TRAFFIC_EXCLUDED_USER_IDS, и формат значений изменился: вместо UUID нужны числовые id панельных пользователей. Автоматически сконвертировать нельзя — прежних UUID в панели уже не существует. Возьмите id заново из панели.3
Дождитесь бэкфила
При первом старте бот проставляет числовые
remnawave_id существующим подпискам, сверяясь с панелью. Прогон идёт батчами и переживает перезапуск — вручную ничего запускать не нужно.Бэкфил устроен консервативно: подписка без надёжного соответствия в панели остаётся без
remnawave_id и попадает в лог, а не привязывается наугад. Такие подписки синхронизируются после того, как соответствие появится.Совместимость с Remnawave 2.7.0
Начиная с версии 2.7.0 панели поддерживаются:- MONTH_ROLLING — стратегия сброса трафика с помесячным скользящим окном
- Per-inbound метрики — разбивка трафика по отдельным inbound в реальном времени
- Обновлённая модель данных нод — вложенные объекты
versions/systemвместо плоских полей - Webhook
torrent_blocker.report— событие при обнаружении торрент-трафика - Webhook
subpage_config_changed— автоматическая инвалидация кэша конфигурации приложения при изменении подстраницы
Настройка подключения
Защита панели
Для панелей, защищённых через remnawave-reverse-proxy:Методы авторизации
Автосинхронизация
- При старте бота — полная синхронизация
- По расписанию — в указанное время
- По команде — через админ-панель
- Серверы (сквады) и их статус
- Пользователи — сопоставление Telegram ID с аккаунтами панели
- Подписки — актуальные даты и параметры
Двунаправленная синхронизация end_date
Панель является авторитетным источником для end_date на активных подписках. Как webhook-событие user.modified, так и пакетная синхронизация обновляют end_date в обоих направлениях — вперёд и назад.
Ранее принимались только обновления «вперёд» (дата в панели > локальная дата). Теперь изменения, сделанные администратором в панели (например, сокращение подписки), корректно передаются в бота.
60-секундная защита между webhook-событием и пакетной синхронизацией по-прежнему предотвращает конфликты.
Синхронизация в мультитарифном режиме
ПриMULTI_TARIFF_ENABLED=true каждая подписка получает собственного пользователя в панели (user_{telegram_id}_{short_id}). Синхронизация работает по remnawave_uuid на уровне подписки, а не пользователя.
- Panel → Bot: создание подписок для новых пользователей панели
- Bot → Panel: matching по суффиксу
_short_idв username - Email/OAuth: синхронизация всех пользователей панели для email
- Автопривязка: legacy user-level UUID автоматически привязывается к подписке при миграции
Webhooks от панели (real-time события)
Для мгновенной реакции на события подписок вместо периодической синхронизации.Настройка
1. Переменные окружения:openssl rand -hex 32
Усиление безопасности webhook-верификации. Все платёжные провайдеры переведены на fail-closed модель: CryptoBot, Heleket и Tribute отклоняют запросы при отсутствии API-ключа. Для сравнения подписей используется
hmac.compare_digest (timing-safe). CloudPayments отклоняет запросы при отсутствии заголовка подписи.- URL:
https://hooks.domain.com/remnawave-webhook - Secret: тот же, что в
REMNAWAVE_WEBHOOK_SECRET
Поддерживаемые события
При включённых webhooks бот защищает подписки от перезаписи данными из периодической синхронизации в течение 60 секунд после получения события.
Уведомления пользователям
При получении webhook-событий бот может отправлять уведомления пользователям в Telegram (или по email для email-only пользователей).Главный переключатель
false — ни одно пользовательское уведомление не отправляется, даже если отдельные типы включены.
Настройка по типам
Каждый тип уведомления можно включить или выключить отдельно. Все по умолчанию включены.Примеры сообщений
Подписка истекает завтра:Тихие события
Некоторые webhook-события обрабатываются без уведомления пользователю:Все переменные
WEBHOOK_NOTIFY_* можно менять без перезапуска бота через админ-панель (Настройки).Мониторинг серверов
Бот отправляет уведомления администраторам при:
- Падении сервера (недоступен)
- Высокой нагрузке CPU/RAM
- Аномальном трафике
- Восстановлении после падения
GeoCheck нод
Проверка географии выхода ноды прямо из админки кабинета (v4.1.0). Кнопка в карточке ноды открывает модалку: выбор маршрута (по умолчанию / конкретный IP / интерфейс), ожидание результата, затем отчёт картинкой или тем же отчётом в JSON. Есть копирование JSON, скачивание SVG, повтор проверки и полноэкранный режим.
Требуется Remnawave Panel и Node 3.3.0+. Кнопка показывается только для подключённых нод подходящей версии — на старых нодах её просто нет.Проверка асинхронная: постановка задачи возвращает
job_id, результат опрашивается отдельно. Нода может отвечать до минуты.Имена пользователей в панели
Шаблон имени задаётсяREMNAWAVE_USER_USERNAME_TEMPLATE (по умолчанию user_{telegram_id}).
Начиная с
v3.66.0 кириллица в подставляемых значениях транслитерируется — панель не принимает не-ASCII в имени пользователя, и раньше такие пользователи не создавались.Happ CryptoLink
Remnawave 2.8.0 удалил серверную генерацию crypt-ссылок (/api/system/tools/happ/encrypt). Начиная с v3.63.0 бот шифрует ссылки локально публичным RSA-ключом Happ — так же, как это делает subpage панели (happ://crypt4/...). Официальный Happ API (crypto.happ.su → happ://crypt5/...) остаётся запасным путём.
