Аudio-archive-back — это REST API сервис для чтения данных распознавания из медиа-архива. Федеральный Audiogram использует S3 хранилище для хранения данных, включая:
- Информацию о запросах на асинхронное распознавание речи из аудиофайла, сделанных ранее.
- Результаты асинхронного распознавания речи.
- Исходное аудио, которое использовалось для распознавания речи.
- VAD-метки, которые были определены в исходном аудио.
- Антиспуфинг метки, которые были определены в исходном аудио.
Результат асинхронного распознавания речи сохраняется в S3 хранилище и затем извлекается из него для последующего использования. Остальные данные, хранящиеся в S3, могут использоваться при отладке, если распознавание речи не дало ожидаемых результатов. Для получения данных из S3 хранилища используется REST API, описываемый в настоящем документе.
REST API для доступа в аудиоархив полностью открыт и не требует аутентификации.
Текущая версия REST API (v2) располагается по следующему пути:
https://{api_address}/archive/api/v2/
Для обратной совместимости с предыдущей версией указывайте только адрес сервера:
https://{api_address}
Каждый запрос на распознавание речи сохраняется в S3 хранилище, включая сам запрос и его конфигурацию. Прежде чем работать с конкретным запросом необходимо получить список запросов, указав интересующий промежуток дат. Ответ будет содержать ID каждого запроса, которое затем будет использоваться в качестве параметра в остальных REST API запросах. Ответ так же содержит ID трассировки и ID сессии, которые могут быть использованы в соответствующих API-запросах в качестве входных параметров.
GET {base-URL}/clients/{client_id}/requests
| Параметр | Тип данных | Обязательность | Описание |
|---|---|---|---|
| client_id | string | Да | Client ID из Keycloak под которым выполнялся запрос. |
| Параметр | Тип данных | Обязательность | Описание |
|---|---|---|---|
| dateFrom | string($date-time) | Нет | Дата с которой начать поиск запросов. |
| dateTo | string($date-time) | Нет | Дата, которой закончить поиск. |
Код 200. Успешный ответ. Содержит список запросов.
| Параметр | Тип данных | Описание |
|---|---|---|
| id | string | ID записи в S3 хранилище. |
| created_at | string($date-time) | Дата и время выполнения запроса. |
| trace_id | string | ID трассировки. |
| session_id | string | ID сессии. |
| request_id | string | ID запроса. |
{
"data": [
{
"id": "string",
"created_at": "2025-07-09T21:57:28.177Z",
"trace_id": "string",
"session_id": "string",
"request_id": "string"
}
]
}
Код 422. Ошибка валидации. Возникает, если один из входных параметров не прошёл валидацию.
| Параметр | Тип данных | Описание |
|---|---|---|
| detail [ | ||
| { | ||
| loc[ ] | string | Содержит информацию о входном параметре, который явился причиной ошибки. |
| msg | string | Описание ошибки. |
| type | string | Тип ошибки. Возможные типы ошибок перечислены в конце этой главы в секции Типы ошибок. |
| } | ||
| ] |
{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string"
}
]
}
Данный ресурс позволяет получать список запросов по ID сессии, которая была создана в процессе выполнения запроса.
GET {base-URL}/clients/{client_id}/sessions/{session_id}/requests
| Параметр | Тип данных | Обязательность | Описание |
|---|---|---|---|
| client_id | string | Да | Client ID из Keycloak под которым выполнялся запрос. |
| session_id | string | Да | ID сессии. |
Код 200. Успешный ответ. Содержит список запросов.
| Параметр | Тип данных | Описание |
|---|---|---|
| id | string | ID записи в S3 хранилище. |
| created_at | string($date-time) | Дата и время выполнения запроса. |
| trace_id | string | ID трассировки. |
| session_id | string | ID сессии. |
| request_id | string | ID запроса. |
{
"data": [
{
"id": "string",
"created_at": "2025-07-09T21:57:28.177Z",
"trace_id": "string",
"session_id": "string",
"request_id": "string"
}
]
}
Код 422. Ошибка валидации. Возникает, если один из входных параметров не прошёл валидацию. Все ответы об ошибке валидации имеют одинаковую структуру. Смотрите описание первого запроса в этом документе.
GET {base-URL}/clients/{client_id}/traces/{trace_id}/requests
| Параметр | Тип данных | Обязательность | Описание |
|---|---|---|---|
| client_id | string | Да | Client ID из Keycloak под которым выполнялся запрос. |
| trace_id | string | Да | ID трассировки. |
Код 200. Успешный ответ. Содержит список запросов.
| Параметр | Тип данных | Описание |
|---|---|---|
| id | string | ID записи в S3 хранилище. |
| created_at | string($date-time) | Дата и время выполнения запроса. |
| trace_id | string | ID трассировки. |
| session_id | string | ID сессии. |
| request_id | string | ID запроса. |
{
"data": [
{
"id": "string",
"created_at": "2025-07-09T21:57:28.177Z",
"trace_id": "string",
"session_id": "string",
"request_id": "string"
}
]
}
Код 422. Ошибка валидации. Возникает, если один из входных параметров не прошёл валидацию.
Исходное аудио также сохраняется в S3 хранилище. При необходимости его можно получить, используя данный ресурс.
GET {base-URL}/clients/{client_id}/requests/{request_id}/audio
| Параметр | Тип данных | Обязательность | Описание |
|---|---|---|---|
| client_id | string | Да | Client ID из Keycloak под которым выполнялся запрос. |
| request_id | string | Да | ID запроса. |
Код 200. Успешный ответ. Возвращает аудио в формате “audio/wav” (media type).
Код 422. Ошибка валидации. Возникает, если один из входных параметров не прошёл валидацию.
Вместе с исходным аудио в S3 хранилище сохраняется конфигурация, которая использовалась при построении запроса. Данный ресурс позволяет получить аудио вместе с конфигурационными параметрами в формате (media type) “multipart/related”.
GET {base-URL}/clients/{client_id}/requests/{request_id}/full_request
| Параметр | Тип данных | Обязательность | Описание |
|---|---|---|---|
| client_id | string | Да | Client ID из Keycloak под которым выполнялся запрос. |
| request_id | string | Да | ID запроса. |
Код 200. Успешный ответ. Возвращает аудио и параметры конфигурации запроса в формате (media type) “multipart/related”.
| Параметр | Тип данных | Описание |
|---|---|---|
| audio | string($binary) | Аудио |
| audio_headers {} | Аудио хедеры. | |
| request_config {} | Параметры конфигурации, которые использовались при выполнении запроса. |
{
"audio": "string",
"audio_headers": {},
"request_config": {}
}
Код 422. Ошибка валидации. Возникает, если один из входных параметров не прошёл валидацию.
После того как асинхронное распознавание речи выполнено на стороне сервера, результат необходимо загрузить на стороне клиента из S3 хранилища. Для этого используется ресурс, описываемый в данной секции.
GET {base-URL}/clients/{client_id}/requests/{request_id}/transcript
| Параметр | Тип данных | Обязательность | Описание |
|---|---|---|---|
| client_id | string | Да | Client ID из Keycloak под которым выполнялся запрос. |
| request_id | string | Да | ID запроса. |
Код 200. Успешный ответ. Содержит текст и сопутствующую информацию.
| Параметр | Тип данных | Описание |
|---|---|---|
| transcript | string | Полученный текст. |
| confidence | number | Коэффициент достоверности (степень уверенности) распознанных фраз. |
| words [ | Результат распознавания речи с разбивкой по словам. | |
| { | ||
| word | string | Слово. |
| confidence | number | Коэффициент достоверности. |
| start_time { | Временная метка конца распознанного слова относительно начала аудиопотока. | |
| nanos | integer | Наносекунды. |
| seconds | integer | Полные секунды. |
| } | ||
| end_time { | Временная метка конца распознанного слова относительно начала аудиопотока. | |
| nanons | integer | Наносекунды. |
| seconds | integer | Полные секунды. |
| } | ||
| } | ||
| ] | ||
| start_time { | Временная метка начала распознанной фразы относительно начала аудиопотока. | |
| nanons | integer | Наносекунды. |
| seconds | integer | Полные секунды. |
| } | ||
| end_time { | Временная метка конца распознанной фразы относительно начала аудиопотока. | |
| nanons | integer | Наносекунды. |
| seconds | integer | Полные секунды. |
| } |
{
"data": [
{
"transcript": "string",
"confidence": 0,
"words": [
{
"word": "string",
"confidence": 0,
"start_time": {
"nanos": 0,
"seconds": 0
},
"end_time": {
"nanos": 0,
"seconds": 0
}
}
],
"start_time": {
"nanos": 0,
"seconds": 0
},
"end_time": {
"nanos": 0,
"seconds": 0
}
}
]
}
Код 422. Ошибка валидации. Возникает если один из входных параметров не прошёл валидацию.
Во время распознавания речи выполняется и сохраняется в S3 хранилище разметка голосовой активности (VAD). При необходимости разметку можно получить из хранилища.
GET {base-URL}/clients/{client_id}/requests/{request_id}/voice_activity_marks
| Параметр | Тип данных | Обязательность | Описание |
|---|---|---|---|
| client_id | string | Да | Client ID из Keycloak под которым выполнялся запрос. |
| request_id | string | Да | ID запроса. |
Код 200. Успешный ответ. Содержит список голосовых отметок.
| Параметр | Тип данных | Описание |
|---|---|---|
| [ | ||
| { | ||
| mark_type | Enum: VA_MARK_NONE, VA_MARK_BEGIN, VA_MARK_END |
Тип отметки. |
| offset_ms | integer($int64) | Смещение от начала аудиофайла в миллисекундах. |
| } | ||
| ] |
{
"data": [
{
"mark_type": "string",
"offset_ms": 0
}
]
}
Код 422. Ошибка валидации. Возникает если один из входных параметров не прошёл валидацию.
Во время распознавания речи выполняется и сохраняется в S3 хранилище разметка антиспуфинга. При необходимости разметку можно получить из хранилища.
GET {base-URL}/clients/{client_id}/requests/{request_id}/anti_spoofing_marks
| Параметр | Тип данных | Обязательность | Описание |
|---|---|---|---|
| client_id | string | Да | Client ID из Keycloak под которым выполнялся запрос. |
| request_id | string | Да | ID запроса. |
Код 200. Успешный ответ. Содержит список отметок антиспуфинга.
| Параметр | Тип данных | Описание |
|---|---|---|
| [ | ||
| { | ||
| attack_type | Enum: LOGICAL, PHYSICAL, ALL_TYPES |
Тип спуфинг-атаки. |
| attack_result | Enum: ATTACK_DETECTED, GENUINE |
ATTACK_DETECTED: Зафиксирована спуфинг-атака (бот пытается выдать себя за человека). GENUINE: Голос принадлежит человеку. |
| confidence | number | Коэффициент достоверности (степень уверенности) в том, что это спуфинг-атака. |
| start_time_ms | integer | Начальная метка временного отрезка, который анализировался на предмет спуфинг-атаки. |
| end_time_ms | integer | Конечная метка временного отрезка, который анализировался на предмет спуфинг-атаки. |
| } | ||
| ] |
{
"data": [
{
"attack_type": "string",
"attack_result": "string",
"confidence": 0,
"start_time_ms": 0,
"end_time_ms": 0
}
]
}
Код: 422. Ошибка валидации. Возникает если один из входных параметров не прошёл валидацию.
Один из перечисленных типов ошибок возвращается в параметре type в ответе на каждый из запросов в аудиоархив.
| Тип ошибки | Описание |
|---|---|
| type_error.integer | Значение не является целым числом. |
| type_error.string | Значение не является строкой. |
| type_error.float | Значение не является числом с плавающей точкой. |
| type_error.bool | Значение не является булевым. |
| type_error.list | Значение не является списком. |
| type_error.dict | Значение не является словарём. |
| value_error.missing | Отсутствует обязательное поле. |
| value_error.any_str.min_length | Строка короче минимально допустимой длины. |
| value_error.any_str.max_length | Строка длиннее максимально допустимой длины. |
| value_error.number.not_ge | Число меньше минимально допустимого (greater or equal). |
| value_error.number.not_le | Число больше максимально допустимого (less or equal). |
| value_error.enum | Значение не входит в перечисление (enum). |
| value_error.const | Значение не совпадает с константой. |
| value_error.date | Неверный формат даты. |
| value_error.datetime | Неверный формат даты и времени. |
| value_error.url.scheme | Неверная схема URL. |
| value_error.url.host | Неверный хост в URL. |
| value_error.regex | Строка не соответствует регулярному выражению. |
| value_error.list.min_items | Список содержит меньше элементов, чем требуется. |
| value_error.list.max_items | Список содержит больше элементов, чем разрешено. |
| value_error.dict.min_properties | Словарь содержит меньше ключей, чем требуется. |
| value_error.dict.max_properties | Словарь содержит больше ключей, чем разрешено. |
| type_error.none.allowed | Значение не может быть None. |
| type_error.union | Значение не подходит ни под один из вариантов union. |
Liveness и readiness пробы используются для определения работоспособности и готовности Kubernetes контейнера (сервиса), который предоставляет доступ в S3 хранилище.
Определяет работоспособность контейнера.
GET {base-URL}/probes/liveness
Параметры отсутствуют.
Код 200. Успешный ответ.
| Параметр | Тип данных | Описание |
|---|---|---|
| status | string | Статус, показывающий работоспособен ли контейнер или его надо перезапустить. |
Определяет готовность контейнера.
GET {base-URL}/probes/readiness
Параметры отсутствуют.
Код: 200. Успешный ответ.
| Параметр | Тип данных | Описание |
|---|---|---|
| status | string | Статус, показывающий готов ли контейнер принимать трафик или его надо перезапустить. |