Повтор webhook-запроса
Replay повторно отправляет сохранённый инспектором HTTP-запрос только на настроенную цель исходного туннеля; произвольный внешний адрес выбрать нельзя.
Описание
Общее описание функционала
Повтор запроса (Replay) позволяет безопасно отправить заново входящий HTTP-запрос, который был зафиксирован инспектором трафика на вашем туннеле — например, вызов вебхука от внешнего сервиса. Запрос уходит только на настроенную цель этого туннеля; произвольные внешние адреса недоступны.
Как пользователь может использовать
- Разработчик получил вебхук с ошибкой 500, находит событие в инспекторе и повторяет запрос на локальный сервис после исправления кода.
- Пользователь меняет путь или добавляет тестовое тело запроса, чтобы воспроизвести сценарий без повторного вызова извне.
- Пользователь сравнивает код ответа и время ответа после повтора с исходным событием.
- Владелец туннеля проверяет обработчик вебхука на staging-окружении через туннель.
Как это реализовано в сервисе
Сервис восстанавливает метод, путь и безопасные заголовки из сохранённого события, применяет ваши правки и отправляет запрос через тот же туннель на его целевой адрес. Если на тарифе включён захват тел запросов и тело запроса сохранено целиком, оно подставляется автоматически; иначе тело можно указать вручную в форме повтора или в overrides.body. Обрезанное сохранённое тело не отправляется без явной подстановки. Учётные данные, cookies и служебные заголовки удаляются. Результат повтора (код ответа и длительность) возвращается сразу в интерфейсе.
Справочник API
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 КБ). Если не указано и для события сохранено полное тело запроса (захват тел на тарифе), используется сохранённое значение. При обрезанном сохранённом теле поле обязательно. |
Успешный ответ 200
| Поле | Описание |
| --- | --- |
| event_id | Идентификатор исходного события. |
| downstream_status | HTTP-код ответа целевого сервиса. |
| duration_ms | Время доставки в миллисекундах. |
| delivered | true, если ответ от цели получен. |
Подробнее — в разделе ограничения повтора вебхука.
Ошибки
Ошибки
| Ситуация | HTTP | Сообщение (пример) |
| --- | --- | --- |
| Нет входа | 401 | unauthorized |
| Нет доступа к туннелю / функции | 403 | forbidden |
| Событие не найдено | 404 | event not found |
| Событие не пригодно для повтора | 400 | event is not replayable |
| Сохранённое тело запроса обрезано, а overrides.body не указано | 400 | stored request body was truncated; provide a body override to replay |
| Событие обрезано политикой захвата (уровень метаданных) | 400 | cannot replay truncated event |
| Недопустимый путь или заголовок в overrides | 400 | описание валидации |
| Туннель не активен или клиент не подключён | 400 / 503 | tunnel is not active / tunnel client is not connected |
| Превышен лимит запросов | 429 | rate limit exceeded |
| Цель недоступна (таймаут, отказ) | 502 / 504 | понятная подсказка шлюза |
| Внутренняя ошибка | 500 | internal server error |
Ответ 4xx или 5xx от целевого сервиса при успешной доставке возвращается в поле downstream_status с кодом 200 у API повтора.
Ограничения
Известные ограничения
- Повторяются только HTTP/HTTPS-события, помеченные как пригодные для повтора.
- Тело запроса при повторе: если на тарифе включён захват тел и тело сохранено без обрезки — подставляется автоматически; если тело не сохранялось (только метаданные) — нужно указать
overrides.bodyили поле в форме повтора; если тело было обрезано лимитом захвата — автоматический повтор блокируется до явной подстановки тела. - Назначение фиксировано: целевой адрес туннеля из события, без выбора другого хоста.
- Заголовки авторизации, cookies, Host и hop-by-hop не передаются и не могут быть добавлены через overrides.
- Для повтора клиент туннеля должен быть подключён; иначе доставка невозможна.
- Действует лимит частоты запросов и ограничение по времени ожидания ответа цели.