Skip to content

Вебхук панели

Панель может пушить события боту — тогда изменения на панели отражаются на локальных подписках мгновенно, не дожидаясь синхронизации.

Настройка

  1. В .env задай REMNAWAVE__WEBHOOK_SECRET — общий секрет.
  2. На панели укажи URL вебхука: https://твой-домен/webhook/panel — и тот же секрет.

Эндпоинт принимает POST /webhook/panel.

Проверка подписи

Каждый запрос проверяется по HMAC-SHA256: подпись — hex-digest от сырого тела запроса на ключе REMNAWAVE__WEBHOOK_SECRET, заголовок — x-remnawave-signature. Сравнение — constant-time. Неверная или отсутствующая подпись → 403, событие не обрабатывается.

Какие события применяются

Обрабатываются события user.*, у которых в payload есть uuid panel-user'а. Локальная подписка ищется по этому UUID; если бот её не знает — событие принимается, но не применяется (applied: false).

Событие панелиСтатус локальной подписки
user.enabledACTIVE
user.disabledDISABLED
user.expiredEXPIRED
user.limitedLIMITED
user.deletedDELETED
user.updated / user.modifiedВыводится из payload: пользователь активен → ACTIVE, иначе DISABLED

Вместе со статусом каждое применённое событие обновляет на подписке использованный трафик, дату истечения (если пришла в payload) и время последнего вебхука. Обработка идемпотентна — повторное событие безвредно.

user.created — только IMPORTED

user.created прилетает и для пользователей, которых создавали не вы (в том числе для созданных самим ботом). Бот реагирует на него только если пользователь помечен тегом IMPORTED; остальные user.created игнорируются — иначе получилось бы двойное создание.

Ответ

json
{"accepted": true, "applied": true}

applied: false — событие принято, но локальной подписки под этот UUID нет либо тип события не применяется.

MIT License · сделано для тех, кто продаёт VPN, а не настраивает ботов