Skip to Content

Локально отлаживать вебхуки сложно, потому что RevRoute должен достучаться до вашего эндпоинта из публичного интернета. Здесь — самая быстрая схема настройки и куда смотреть, когда что-то идёт не так.

Отправка тестового события из дашборда

Никаких тулзов не нужно, чтобы проверить, что вебхук доступен:

Откройте вебхук

Зайдите в Настройки → Вебхуки и кликните на нужный вебхук.

Выберите событие

Нажмите Отправить тестовое событие, выберите триггер (например lead.created) и нажмите Отправить.

Посмотрите доставку

Откройте вкладку Логи. Для каждой доставки видны тело запроса, статус ответа, тело ответа и round-trip duration. Кликните по строке, чтобы посмотреть сырой payload и заголовки.

Тестовые события содержат реалистичные, но фейковые данные — в аналитике и партнёрских дашбордах они не появятся.

Туннелирование на localhost через ngrok

Чтобы тестировать против реального dev-сервера, выставьте его в интернет через ngrok :

# в одном терминале — ваше приложение pnpm dev # слушает http://localhost:3000 # в другом терминале — туннель ngrok http 3000

ngrok напечатает публичный HTTPS-URL вида https://1a2b-203-0-113-42.ngrok-free.app. Используйте этот URL (плюс ваш путь) как webhook URL в RevRoute:

https://1a2b-203-0-113-42.ngrok-free.app/api/webhooks/revroute
📝

URL ngrok меняется при каждом перезапуске туннеля на бесплатном плане. Используйте reserved domain (платный план), если не хотите обновлять URL вебхука постоянно.

У ngrok есть встроенный инспектор запросов на http://127.0.0.1:4040 — вы видите точный запрос, который пришёл от RevRoute, и можете повторить его без обращения к дашборду. Это самый быстрый dev-цикл.

Альтернативные туннели

Принцип одинаковый: получить https://-URL, вставить его в настройки вебхука.

Логи и ретраи

Каждая попытка доставки хранится 30 дней во вкладке Логи вебхука.

КолонкаЗначение
StatusHTTP-статус от вашего эндпоинта (- = timeout или DNS-ошибка)
AttemptНомер попытки — 1 это исходная доставка
DurationВремя от отправки запроса до получения ответа
EventТриггер (lead.created и т.д.)

Кликните на строку, чтобы посмотреть сырой запрос/ответ. Кнопка Replay отправит тот же payload без ожидания следующего ретрая.

Типичные ошибки

СимптомСамая частая причина
Connection refuseddev-сервер не запущен или ngrok-туннель умер
401 invalid signatureТело распарсилось до хэширования — см. Проверка подписи
Timeout (10s)Эндпоинт делает тяжёлую работу синхронно — перенесите в очередь
404 not foundНесовпадение пути URL (например /webhook vs /webhooks)
Вебхук автоматически отключился20+ подряд неудач — почините эндпоинт, затем включите его обратно

Быстрая проверка через curl

Можно сэмулировать запрос RevRoute локально без ngrok:

SECRET="whsec_..." BODY='{"id":"evt_test","event":"lead.created","createdAt":"2026-05-15T12:00:00Z","data":{}}' SIG=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$SECRET" -hex | awk '{print $2}') curl -X POST http://localhost:3000/api/webhooks/revroute \ -H "Content-Type: application/json" \ -H "Revroute-Signature: $SIG" \ --data-raw "$BODY"

Это самый быстрый способ протестировать код проверки подписи в изоляции.

Перед продакшеном

Перед включением в production убедитесь:

  • URL эндпоинта https:// с валидным сертификатом
  • Проверка подписи включена, секрет лежит в secrets manager
  • Обработчик возвращает 2xx в течение ~1 секунды, тяжёлое уходит в очередь
  • Есть алертинг на 4xx/5xx в логах
  • Существует staging-вебхук на pre-prod окружение

См. также: Обзор вебхуков и страницу Вебхук не срабатывает.

Last updated on