Повтор webhook-запроса

Replay повторно отправляет сохранённый инспектором HTTP-запрос только на настроенную цель исходного туннеля; произвольный внешний адрес выбрать нельзя.

Описание

Общее описание функционала

Повтор запроса (Replay) позволяет безопасно отправить заново входящий HTTP-запрос, который был зафиксирован инспектором трафика на вашем туннеле — например, вызов вебхука от внешнего сервиса. Запрос уходит только на настроенную цель этого туннеля; произвольные внешние адреса недоступны.

Как пользователь может использовать

  • Разработчик получил вебхук с ошибкой 500, находит событие в инспекторе и повторяет запрос на локальный сервис после исправления кода.
  • Пользователь меняет путь или добавляет тестовое тело запроса, чтобы воспроизвести сценарий без повторного вызова извне.
  • Пользователь сравнивает код ответа и время ответа после повтора с исходным событием.
  • Владелец туннеля проверяет обработчик вебхука на staging-окружении через туннель.

Как это реализовано в сервисе

Сервис восстанавливает метод, путь и безопасные заголовки из сохранённого события, применяет ваши правки и отправляет запрос через тот же туннель на его целевой адрес. Если на тарифе включён захват тел запросов и тело запроса сохранено целиком, оно подставляется автоматически; иначе тело можно указать вручную в форме повтора или в overrides.body. Обрезанное сохранённое тело не отправляется без явной подстановки. Учётные данные, cookies и служебные заголовки удаляются. Результат повтора (код ответа и длительность) возвращается сразу в интерфейсе.

Справочник API

Запросы и ответы

Повтор запроса

POST /api/v1/inspector/events/{eventId}/replay

Требуется авторизация и доступ к туннелю события. Доступна на тарифах с функцией «Webhooks & Replay».

Тело запроса

ПолеОписание
modeНеобязательно, устарело. Значения cloud и local эквивалентны — запрос идёт на цель туннеля.
overrides.methodНеобязательный HTTP-метод.
overrides.pathНеобязательный путь и query (должен начинаться с /). Заменяет путь и query из события.
overrides.headersНеобязательные дополнительные заголовки (без cookies, Authorization, Host и др.).
overrides.bodyНеобязательное тело запроса (до 32 КБ). Если не указано и для события сохранено полное тело запроса (захват тел на тарифе), используется сохранённое значение. Новое непустое значение принимается и при обрезанном или скрытом сохранённом теле; в этом случае передаётся только заданное тело. Без него повтор такого тела завершается ответом 400.

Исходный Content-Type и разрешённые заголовки сохраняются при повторе. Значения, скрытые или обрезанные при захвате, не передаются. Разрешённые значения в overrides.headers заменяют соответствующие исходные заголовки.

Успешный ответ 200

ПолеОписание
event_idИдентификатор исходного события.
downstream_statusHTTP-код ответа целевого сервиса.
duration_msВремя доставки в миллисекундах.
deliveredtrue, если ответ от цели получен.

Подробнее — в разделе ограничения повтора вебхука.

Ошибки

Отказы и восстановление

СитуацияHTTPСообщение (пример)
Нет входа401unauthorized
Нет доступа к туннелю / функции403forbidden
Событие не найдено404event not found
Событие не пригодно для повтора400event is not replayable
Сохранённое тело запроса обрезано, а overrides.body не указано400stored request body was truncated; provide a body override to replay
Событие обрезано политикой захвата (уровень метаданных)400cannot replay truncated event
Недопустимый путь или заголовок в overrides400описание валидации
Туннель не активен или клиент не подключён400 / 503tunnel is not active / tunnel client is not connected
Превышен лимит запросов429rate limit exceeded
Цель недоступна (таймаут, отказ)502 / 504понятная подсказка шлюза
Внутренняя ошибка500internal server error

Ответ 4xx или 5xx от целевого сервиса при успешной доставке возвращается в поле downstream_status с кодом 200 у API повтора.

Ограничения

Границы использования

  • Повторяются только HTTP/HTTPS-события, помеченные как пригодные для повтора.
  • Тело запроса при повторе: если на тарифе включён захват тел и тело сохранено без обрезки — подставляется автоматически; если тело не сохранялось (только метаданные) — нужно указать overrides.body или поле в форме повтора; если сохранённое тело обрезано или скрыто, для повтора нужно явно задать новое тело. В форме повтора можно указать его в поле «Request body», а в API — через overrides.body (до 32 КиБ).
  • Назначение фиксировано: целевой адрес туннеля из события, без выбора другого хоста.
  • При повторе сохраняются исходный тип содержимого и разрешённые заголовки. Значения, скрытые или обрезанные при захвате, не передаются. Заголовки авторизации, cookies, Host и hop-by-hop не передаются и не могут быть добавлены через overrides.
  • Для повтора клиент туннеля должен быть подключён; иначе доставка невозможна.
  • Действует лимит частоты запросов и ограничение по времени ожидания ответа цели.