Повтор 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.
  • Для повтора клиент туннеля должен быть подключён; иначе доставка невозможна.
  • Действует лимит частоты запросов и ограничение по времени ожидания ответа цели.