
## Начните с карточки {#overview}

Откройте отправку в **Outbound → Requests**. Запись запроса, сводка и подробный отчёт могут появляться в разное время. Ошибка подробностей не доказывает сбой HTTP-вызова. **Refresh** обновляет отображаемые сведения, а не запускает задание заново.

## Сводка и квота {#summary}

Сводка показывает региональное состояние, времена, признак сохранения ответа, размер исходного тела и попытки. Поля `quota_admitted`, `admitted_at` и `wait_reason` помогают отличить допуск к исполнению от ожидания. Неизвестная квота ожидается до первой попытки; неположительная отклоняет отправку без HTTP. Уже принятое API задание не обязательно начало вызов получателя.

## Попытки {#attempts}

Для каждой попытки проверяйте `attempt_id`, номер, начало/завершение, HTTP-код, ошибку, прочитанные и сохранённые байты, `body_truncated` и `read_complete`. Незавершённые значения могут отсутствовать или быть `null`; это не подтверждение успешного завершения. При сетевом отказе кабинет и JSON попытки могут показывать HTTP status `0`: HTTP-ответ получателя не получен. Ноль не является HTTP-кодом ответа; смотрите ошибку и диагностические события попытки.

Если попыток нет, обновите снимок позднее и проверьте ожидание. Если вызов неудачен, изучайте его ошибку и окончательный статус задания, а не только отдельный промежуточный `5xx`.

![Неуспешные попытки Outbound: HTTP status 0, request_failed и Load delivery details](/images/docs/outbound/failed-attempts-en.jpg)

*Сетевой отказ в демонстрационной истории: HTTP status 0 требует разбора ошибки и подробностей попытки. Демонстрационный кабинет, английский интерфейс.* [Открыть полный размер](/images/docs/outbound/failed-attempts-en.jpg).

## Подробности в кабинете {#dashboard}

Нажмите **Load delivery details**, затем при наличии продолжения **Load more details**. Кабинет собирает метаданные запроса, диагностику попыток и транспортные события. Сетевые/TLS/HTTP-события представлены с временами; полный JSON сохраняет остальные поля.

Сведения о запросе могут появиться раньше диагностики попыток и событий соединения. Пока доступна **Load more details**, получены ещё не все страницы отчёта; продолжайте загрузку. Наличие одного готового документа не означает, что весь отчёт уже загружен. При сообщении о смене подробностей нажмите **Refresh** и начните загрузку заново. Если подробности не удаётся отобразить, не считайте отсутствие блока доказательством отсутствия попытки.

## Сводка через API {#api-summary}

`GET /outbound/requests/{request_id}/http` возвращает доступную сводку с `available=true`, `status_version`, `details_revision` и `snapshot`. Возьмите `details_revision` из этого ответа; это не идентификатор запроса и не номер попытки. Все чтения требуют API-токен и пустое тело запроса.

## Постраничные подробности {#api-details}

Сохраните номер ревизии как `ADAL_DETAILS_REVISION`. Первый запрос:

```bash
curl --fail-with-body --silent --show-error --get \
  --header "Authorization: Bearer $ADAL_API_TOKEN" \
  --data-urlencode "details_revision=$ADAL_DETAILS_REVISION" \
  "$ADAL_API_URL/outbound/requests/$ADAL_REQUEST_ID/http/details"
```

Ответ содержит `available`, `details_revision`, `records` и `next_cursor`. Для продолжения передайте ту же ревизию и полученный непустой `cursor`, кодируя его как значение query. Не придумывайте курсор и не начинайте страницы с новой сводкой между ними. Пустой `next_cursor` означает конец этой последовательности.

`records` содержат фрагменты формата `json_documents_base64_fragments_v1`: `document`, `part`, `encoding`, `data`, `document_bytes`. Документ 0 — запрос, 1–10 — попытки, 11 — транспортные события. Декодируйте base64 **каждого** фрагмента отдельно, соединяйте байты документа по порядку частей, проверяйте `document_bytes`, затем разбирайте полный UTF-8 JSON. Транспортный документ — массив, остальные — объекты. Это не массив уже готовых документов в каждом ответе.

Не смешивайте ревизии, не игнорируйте пропущенные/повторные части и зацикливание курсора. При `409 revision_changed` отбросьте неполную сборку, получите новую сводку и начните заново.

## Недоступность {#unavailable}

- `409 not_yet_available` — данные ещё не готовы; повторите чтение позднее.
- `409` с `duplicate_of` — это дубль; переходите к оригиналу.
- `available=false`, `reason=expired` — HTTP-данные истекли, журнал может оставаться.
- `404` — запись не найдена или не принадлежит аккаунту; проверьте ID и доступ.
- `503` — временный отказ получения данных, а не достоверный исход HTTP-доставки.

Параметры диагностики отличаются от фильтров журнала: не отправляйте `page` или `region` в `/http/details`.

## Безопасный разбор {#security}

Подробности могут содержать адреса, заголовки и чувствительные данные. Не вставляйте весь JSON в публичную задачу. Для поддержки используйте ID, время и безопасное описание этапа. Скачивание тела и признаки полноты — [в отдельной статье](/ru/docs/outbound/http-data); расписание — [в повторах](/ru/docs/common/retries).
