# Обработка ошибок и повторные попытки

### A. Обзор

Конвейер загрузки и обработки видео разработан для обеспечения надежности и устойчивости. На каждом этапе — от загрузки файла до финального анализа видео — система предусматривает возможные сбои. Обработка ошибок встроена на нескольких уровнях, а автоматические повторные попытки реализуются там, где это уместно. Это гарантирует, что временные ошибки не прерывают пользовательский опыт, а все сбои регистрируются для диагностики.

### B. Категории ошибок

**1. Ошибки на стороне клиента (HTTP 4xx)**

* **400 Bad Request:**
  * Возникает, когда клиент отправляет некорректные данные (например, отсутствуют обязательные поля, такие как `video` или `user_id`, или неверный формат файла).
  * Ошибки валидации входных полей (например, неподходящий тип файла или неверный формат временной метки).
* **401 Unauthorized:**
  * Срабатывает, когда токен доступа отсутствует или недействителен.
* **403 Forbidden:**
  * Возвращается, когда у пользователя отсутствуют необходимые разрешения (например, не-администратор пытается создать сеанс от имени другого пользователя).
* **404 Not Found:**
  * Возникает, если запрашиваемый ресурс (например, конкретный сеанс или видеофайл) недоступен.
* **422 Unprocessable Entity:**
  * Используется, когда тип файла верный, но его невозможно обработать (например, повреждение видеофайла, сбои шифрования/дешифрования).

**2. Ошибки на стороне сервера (HTTP 5xx)**

* **500 Internal Server Error:**
  * Ловит непредвиденные проблемы во время серверной обработки, такие как необработанные исключения в модулях обработки видео.
* **503 Service Unavailable:**
  * Указывает на временную недоступность сервиса, возможно из-за высокой нагрузки или технического обслуживания.

### C. Стратегия повторных попыток

**1. Механизм автоматических повторных попыток**

Для временных ошибок — особенно сетевых проблем или временной перегрузки серверов — система использует стратегию повторных попыток с **экспоненциальной задержкой**:

* **Триггеры повторных попыток:**
  * Тайм-ауты сети, сброс соединения, ошибки HTTP 503 или 500, указывающие на временный сбой.
* **Политика повторных попыток:**
  * Клиент (или сама служба обработки) автоматически повторяет неудачную операцию до 3–5 раз.
  * Задержки между попытками увеличиваются экспоненциально (например, 1 секунда, 2 секунды, 4 секунды), чтобы избежать перегрузки серверов.
* **Размыкатель цепи (Circuit Breaker):**
  * Если определенная конечная точка постоянно дает сбои сверх максимального числа попыток, система “размыкает” цепь, временно прекращает повторные попытки, регистрирует ошибку и уведомляет систему мониторинга.

**2. Ручное вмешательство и запасные варианты**

* **Запасные варианты:**
  * В случаях, когда видеофайл не удается обработать после всех повторных попыток, система может перейти к выдаче общего сообщения об ошибке (с возможностью вручную повторно инициировать загрузку) и сохранить детали сбоя для поддержки.
* **Обратная связь пользователю:**
  * API возвращает четкие сообщения об ошибках и коды ошибок, которые могут использоваться фронтендом для информирования пользователей (например, “Загрузка не удалась из-за проблем с сетью. Пожалуйста, попробуйте снова позже.”).
* **Логирование и оповещения:**
  * Все ошибки — включая те, что вызывают повторные попытки — регистрируются с деталями (сообщение об ошибке, временная метка, затронутый ресурс). Эта информация используется для отладки и может инициировать оповещения о критических проблемах.

### D. Детали реализации

* **Формат ответа об ошибке:**\
  Каждый ответ об ошибке включает JSON-структуру:

```
{
  "error": "Detailed error message describing what went wrong.",
  "error_code": "SPECIFIC_ERROR_CODE"
}
```

* **Сопоставление кодов состояния:**\
  Каждая конечная точка в API настроена на возврат специфичных кодов состояния HTTP для ожидаемых сценариев ошибок.
* **Мониторинг и аналитика:**\
  Наш сервер непрерывно отслеживает частоту ошибок и попытки повторения, автоматически корректируя пороги и информируя инженерные команды о потенциальных проблемах.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.aikynetix.app/ru/api-documentation/video-upload-and-processing-workflow/error-handling-and-retries.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
