Вебхук панели
Панель может пушить события боту — тогда изменения на панели отражаются на локальных подписках мгновенно, не дожидаясь синхронизации.
Настройка
- В
.envзадайREMNAWAVE__WEBHOOK_SECRET— общий секрет. - На панели укажи 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.enabled | ACTIVE |
user.disabled | DISABLED |
user.expired | EXPIRED |
user.limited | LIMITED |
user.deleted | DELETED |
user.updated / user.modified | Выводится из payload: пользователь активен → ACTIVE, иначе DISABLED |
Вместе со статусом каждое применённое событие обновляет на подписке использованный трафик, дату истечения (если пришла в payload) и время последнего вебхука. Обработка идемпотентна — повторное событие безвредно.
user.created — только IMPORTED
user.created прилетает и для пользователей, которых создавали не вы (в том числе для созданных самим ботом). Бот реагирует на него только если пользователь помечен тегом IMPORTED; остальные user.created игнорируются — иначе получилось бы двойное создание.
Ответ
{"accepted": true, "applied": true}applied: false — событие принято, но локальной подписки под этот UUID нет либо тип события не применяется.
