Skip to main content

Обзор

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

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

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

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

Для панелей, защищённых через remnawave-reverse-proxy:
# Для панелей установленных скриптом eGames
REMNAWAVE_SECRET_KEY=XXXXXXX:DDDDDDDD

# Или если ключ и значение одинаковые
REMNAWAVE_SECRET_KEY=secret_key_name

Методы авторизации

КонфигурацияAuthorizationX-Api-Key
Только API KeyBearer <api_key><api_key>
Basic AuthBearer <api_key>Basic <user:pass>
Caddy + API KeyBasic <caddy_token><api_key>
Cookies (eGames)Bearer <api_key><api_key> + cookies

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

REMNAWAVE_AUTO_SYNC_ENABLED=true
REMNAWAVE_AUTO_SYNC_TIMES=03:00,15:00
Бот синхронизирует данные с панелью:
  • При старте бота — полная синхронизация
  • По расписанию — в указанное время
  • По команде — через админ-панель
Синхронизируются:
  • Серверы (сквады) и их статус
  • Пользователи — сопоставление Telegram ID с аккаунтами панели
  • Подписки — актуальные даты и параметры

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

Для мгновенной реакции на события подписок вместо периодической синхронизации.

Настройка

1. Переменные окружения:
REMNAWAVE_WEBHOOK_ENABLED=true
REMNAWAVE_WEBHOOK_PATH=/remnawave-webhook
REMNAWAVE_WEBHOOK_SECRET=your_secret_min_32_chars_here
Сгенерируйте секрет: openssl rand -hex 32 2. В панели Remnawave:
  • URL: https://hooks.domain.com/remnawave-webhook
  • Secret: тот же, что в REMNAWAVE_WEBHOOK_SECRET
3. Проверка:
curl -s https://hooks.domain.com/remnawave-webhook | jq
# {"status": "ok", "service": "remnawave_webhook", "enabled": true}

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

СобытиеОписание
user.expiredПодписка истекла
user.disabledПодписка деактивирована
user.enabledПодписка активирована
user.limitedПревышен лимит трафика
user.traffic_resetТрафик сброшен
user.modifiedДанные подписки изменены
user.deletedПользователь удалён
user.revokedКлючи подписки отозваны
user.createdПользователь создан
user.expires_in_*Предупреждения об истечении (72/48/24ч)
user.first_connectedПервое подключение
user.bandwidth_usage_threshold_reachedПорог трафика достигнут
user_hwid_devices.*Устройство добавлено/удалено
node.*, service.*Административные события
При включённых webhooks бот защищает подписки от перезаписи данными из периодической синхронизации в течение 60 секунд после получения события.

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

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

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

# Включить уведомления пользователям от вебхуков (по умолчанию true)
WEBHOOK_NOTIFY_USER_ENABLED=true
Если false — ни одно пользовательское уведомление не отправляется, даже если отдельные типы включены.

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

Каждый тип уведомления можно включить или выключить отдельно. Все по умолчанию включены.
ПеременнаяПо умолчаниюСобытияЧто получает пользователь
WEBHOOK_NOTIFY_SUB_STATUStrueuser.disabled, user.enabledПодписка отключена / активирована
WEBHOOK_NOTIFY_SUB_EXPIREDtrueuser.expired, user.expired_24_hours_agoПодписка истекла / истекла вчера
WEBHOOK_NOTIFY_SUB_EXPIRINGtrueuser.expires_in_72h/48h/24hПодписка истекает через 3/2 дня / завтра
WEBHOOK_NOTIFY_SUB_LIMITEDtrueuser.limitedЛимит трафика исчерпан
WEBHOOK_NOTIFY_TRAFFIC_RESETtrueuser.traffic_resetТрафик сброшен, лимит доступен
WEBHOOK_NOTIFY_SUB_DELETEDtrueuser.deletedПодписка удалена из панели
WEBHOOK_NOTIFY_SUB_REVOKEDtrueuser.revokedКлюч подписки обновлён
WEBHOOK_NOTIFY_FIRST_CONNECTEDtrueuser.first_connectedПервое подключение к VPN
WEBHOOK_NOTIFY_NOT_CONNECTEDtrueuser.not_connectedПодписка активна, но нет подключения
WEBHOOK_NOTIFY_BANDWIDTH_THRESHOLDtrueuser.bandwidth_usage_threshold_reachedИспользовано N% трафика
WEBHOOK_NOTIFY_DEVICEStrueuser_hwid_devices.added/deletedНовое устройство / устройство удалено

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

Подписка истекает завтра:
🔴 Подписка истекает завтра!

Осталось менее 24 часов. Продлите подписку прямо сейчас.

[Продлить подписку] [Закрыть]
Лимит трафика исчерпан:
⚠️ Достигнут лимит трафика

Вы исчерпали весь доступный трафик.
Докупите трафик или дождитесь сброса.

[Докупить трафик] [Моя подписка] [Закрыть]
Первое подключение:
🎉 Первое подключение!

Вы впервые подключились к VPN. Добро пожаловать!

[Моя подписка] [Закрыть]

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

Некоторые webhook-события обрабатываются без уведомления пользователю:
СобытиеЧто происходит
user.modifiedСинхронизация данных подписки (трафик, даты, статус)
user.createdЛогирование создания пользователя в панели
Все переменные WEBHOOK_NOTIFY_* можно менять без перезапуска бота через админ-панель (Настройки).

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

ПеременнаяОписание
SERVER_STATUS_MODEdisabled, external_link, external_link_miniapp, xray
SERVER_STATUS_EXTERNAL_URLСсылка на внешний мониторинг
SERVER_STATUS_METRICS_URLURL метрик XrayChecker
MONITORING_INTERVALИнтервал проверки (секунды, по умолчанию 60)
Бот отправляет уведомления администраторам при:
  • Падении сервера (недоступен)
  • Высокой нагрузке CPU/RAM
  • Аномальном трафике
  • Восстановлении после падения