Skip to main content

Обзор

Бот управляет VPN подписками через API панели Remnawave. Все операции с пользователями, серверами и трафиком проходят через единый API клиент.

Совместимость с Remnawave 2.7.0

Начиная с версии 2.7.0 панели поддерживаются:
  • MONTH_ROLLING — стратегия сброса трафика с помесячным скользящим окном
  • Per-inbound метрики — разбивка трафика по отдельным inbound в реальном времени
  • Обновлённая модель данных нод — вложенные объекты versions / system вместо плоских полей
  • Webhook torrent_blocker.report — событие при обнаружении торрент-трафика
  • Webhook subpage_config_changed — автоматическая инвалидация кэша конфигурации приложения при изменении подстраницы

Настройка подключения

Если бот и панель на одном сервере в Docker, используйте внутренний адрес: REMNAWAVE_API_URL=http://remnawave:3000

Защита панели

Для панелей, защищённых через 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 отклоняет запросы при отсутствии заголовка подписи.
2. В панели Remnawave:
  • URL: https://hooks.domain.com/remnawave-webhook
  • Secret: тот же, что в REMNAWAVE_WEBHOOK_SECRET
3. Проверка:

Поддерживаемые события

При включённых webhooks бот защищает подписки от перезаписи данными из периодической синхронизации в течение 60 секунд после получения события.

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

При получении webhook-событий бот может отправлять уведомления пользователям в Telegram (или по email для email-only пользователей).

Главный переключатель

Если false — ни одно пользовательское уведомление не отправляется, даже если отдельные типы включены.

Настройка по типам

Каждый тип уведомления можно включить или выключить отдельно. Все по умолчанию включены.

Примеры сообщений

Подписка истекает завтра:
Лимит трафика исчерпан:
Первое подключение:

Тихие события

Некоторые webhook-события обрабатываются без уведомления пользователю:
Все переменные WEBHOOK_NOTIFY_* можно менять без перезапуска бота через админ-панель (Настройки).

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

Бот отправляет уведомления администраторам при:
  • Падении сервера (недоступен)
  • Высокой нагрузке CPU/RAM
  • Аномальном трафике
  • Восстановлении после падения