Введение
Transcripto API — это REST-интерфейс для подключения к интеллектуальной системе, которая автоматически транскрибирует звонки, анализирует чаты и формирует аналитические и бизнес-отчёты.
API позволяет встроить обработку клиентских коммуникаций прямо в вашу CRM, колл-центр или корпоративную платформу — от загрузки данных до получения метрик и готовых визуальных отчётов.
Как это работает
1. Импорт звонков и сообщений
Вы можете передавать данные несколькими способами:
- загрузкой аудиофайла напрямую (
multipart/form-data); - указанием веб-ссылки на файл (например, из облачного или S3-хранилища CRM);
- передачей текстовых диалогов и чатов.
Система автоматически создаёт задачу на обработку и сохраняет все данные в вашей учетной записи.
2. Преобразование речи в текст
Загруженные аудиозаписи транскрибируются, система превращает речь в текст, разделяет спикеров (оператор / клиент), фиксирует длительность, время и другие метаданные.
Подробнее: детали задачи · список задач по фильтрам
3. Анализ и извлечение метрик
ИИ-модуль анализирует полученные тексты:
- определяет темы и намерения;
- оценивает эмоциональный тон и вежливость операторов;
- проверяет соблюдение скриптов и SLA;
- выявляет риски, ошибки операторов, возможности продаж и др.
Результаты сохраняются в базе данных и доступны по API в виде структурированного JSON-документа.
Подробнее: calls_analysis
4. Отчёты и аналитика
Transcripto формирует два типа отчётов:
- Отчёты по качеству работы операторов за период — метрики вежливости, удовлетворённости, соблюдения скрипта и пр.;
- Бизнес-отчёт за период — KPI, динамика показателей, ключевые темы и рекомендации для руководителей.
Оба вида отчётов доступны в формате PDF или HTML и легко интегрируются в CRM, BI или внутренние порталы. Примеры отчетов: PDF HTML
Как использовать API
Ниже приведён типичный сценарий интеграции.
1. Авторизация
Получите токен доступа:
POST /auth/login
Используйте его в заголовке Authorization: Bearer <token> во всех последующих запросах.
2. Импорт звонков или чатов
Создание задачи на обработку звонка (можно передать файл или ссылку):
POST /addtaskcall
POST /addtaskcallbyurl
Создание задачи на анализ текстовой коммуникации с клиентом, чаты, мессенджеры, email переписка:
POST /add_chat_analysis_task
API вернёт уникальный task_code для отслеживания статуса или код ошибки с описанием проблемы.
3. Проверка статуса задачи
Проверить состояние конкретной задачи:
GET /gettask?task_code=<GUID>
Получить список всех задач по заданным критериям фильтра:
GET /user/tasks/filter
4. Получение аналитики
После того как задача с типом 'call' (звонок) или 'chat' (чат) получила статус 'completed' (обработка завершена) можно запросить детальный анализ и текст коммуникации методом:
GET /api/calls_analysis/{task_code}
5. Создание задачи на подготовку отчетов.
Для того чтобы загрузить файл отчета по обращениям за период необходимо создать задачу с указанием идентификатора отчета соответствующего типа:
POST /user/callreport
Получить идентификатор задачи из ответа на запрос, методом gettask отслеживать статус. Дождаться измнения статуса на 'completed', в ответе метода gettask получить названия файлов.
6. Получение файла отчета
Название файла передать в метод:
GET /get_file/file?task_code=<GUID>&filename=report.pdf
HTML - аналогично, только указываем html файл отчета
Если у вас есть необходимость в специфической аналитике и отчетности по данным взаимодействия с вашими клиентами напишите ваш запрос на адрес электронной почты info@transcripto.ru мы сделаем все возможное для реализации индивидуального требования.
1) Регистрация и авторизация
Регистрация пользователя
Для получения URL, логина и пароля для доступа к API Transcripto напишите письмо на адрес info@transcripto.ru, указав следующую информацию:
- Название компании, страна, город
- Сфера деятельности
- Примерное количество звонков в сутки
- Примерное количество сообщений (чаты/мессенджеры) в сутки
- Контактный телефон, ФИО
После рассмотрения запроса вы получите доступ к API: уникальный URL, логин и пароль для авторизации.
Получение токена (API KEY)
POST /auth/login
Для получения токена (api_key) вызовите метод /auth/login — получите токен для доступа к приватным методам API.
Пример запроса (cURL):
curl -X POST "https://<host>/auth/login" \
-H "Content-Type: application/json" \
--data-raw '{
"email": "user@example.com",
"password": "secret123"
}'
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| string | да | Эл. почта пользователя. | |
| password | string | да | Пароль пользователя. |
Пример ответа (200):
{
"call_activity_tree": {
"2024": {
"08": { "28": 1, "29": 1, "30": 1 }
},
"2025": {
"10": {
"01": 247, "02": 316, "03": 448, "04": 191, "05": 102,
"06": 375, "07": 207, "08": 183, "09": 199, "10": 164,
"11": 117, "12": 79, "13": 218, "14": 112, "15": 229,
"16": 170, "17": 174, "18": 132, "19": 75, "20": 82
}
}
},
"directories": [ { "id": 70, "name": "Продвижение сайта" } ],
"email": "transcripto@paymaster.md",
"errorcode": 0,
"last_tasks": [
{
"created_at": "2025-10-20T08:45:25.670423+00:00Z",
"directory_id": null,
"file_path": "exten-110-060865882-20251020-112158-1760948518.13620249.wav",
"id": "b7a62594-a664-4519-b0de-077b5522e245",
"status": "completed",
"task_length": 6.4
},
{
"created_at": "2025-10-20T08:45:22.964481+00:00Z",
"directory_id": null,
"file_path": "q-888-060501523-20251020-114310-1760949769.13620656.wav",
"id": "04a7b144-e43b-4792-affa-65a030c1b6bf",
"status": "completed",
"task_length": 2.0
}
],
"message": "Login successful",
"tariff": {
"calls_enabled": true,
"days_left": 64,
"end_date": "2025-12-23T09:26:14.868326Z",
"id": 4,
"identifier": "enterprise",
"image_generation_enabled": true,
"name": "Enterprise",
"remaining_resources": {
"available_audio_minutes": 4994,
"available_call_minutes": 9655,
"available_image_tokens": 98,
"available_text_tokens": 600000
},
"start_date": "2025-07-24T09:26:14.868326Z",
"transcription_enabled": true,
"usage": {
"used_audio_minutes": 5006,
"used_call_minutes": 0,
"used_image_tokens": 9902,
"used_text_tokens": 0
}
},
"token": "<jwt>",
"user_id": 83
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| call_activity_tree | object | Структура активности звонков по датам и годам |
| call_activity_tree.{год}.{месяц}.{день} | int | Количество звонков в этот день |
| directories | array | Список директорий пользователя |
| directories[].id | int | Идентификатор директории |
| directories[].name | string | Название директории |
| string | Email пользователя | |
| errorcode | int | Код ошибки (0 при успешной авторизации) |
| last_tasks | array | Список последних задач пользователя |
| last_tasks[].created_at | datetime | Дата и время создания задачи |
| last_tasks[].directory_id | int/null | ID директории (если есть) |
| last_tasks[].file_path | string | Имя файла задачи |
| last_tasks[].id | string | Уникальный код задачи (UUID) |
| last_tasks[].status | string | Статус задачи |
| last_tasks[].task_length | float | Длительность задачи (в минутах) |
| message | string | Сообщение от сервера (например, "Login successful") |
| tariff | object | Информация об активном тарифе пользователя |
| tariff.id | int | Идентификатор тарифа |
| tariff.name | string | Название тарифа |
| tariff.identifier | string | Уникальный идентификатор тарифа |
| tariff.days_left | int | Количество дней до окончания тарифа |
| tariff.calls_enabled | bool | Поддержка звонков |
| tariff.transcription_enabled | bool | Поддержка транскрибации |
| tariff.image_generation_enabled | bool | Поддержка генерации изображений |
| tariff.start_date | datetime | Дата начала действия тарифа |
| tariff.end_date | datetime | Дата окончания действия тарифа |
| tariff.remaining_resources | object | Остаток доступных ресурсов тарифа |
| tariff.remaining_resources.available_audio_minutes | int | Доступные минуты аудио |
| tariff.remaining_resources.available_call_minutes | int | Доступные минуты звонков |
| tariff.remaining_resources.available_text_tokens | int | Доступные текстовые токены |
| tariff.remaining_resources.available_image_tokens | int | Доступные токены изображений |
| tariff.usage | object | Использованные ресурсы тарифа |
| tariff.usage.used_audio_minutes | int | Использовано минут аудио |
| tariff.usage.used_call_minutes | int | Использовано минут звонков |
| tariff.usage.used_text_tokens | int | Использовано текстовых токенов |
| tariff.usage.used_image_tokens | int | Использовано токенов изображений |
| token | string | JWT-токен (api_key) для дальнейших запросов к API |
| user_id | int | Уникальный идентификатор пользователя |
2) Счёт (Баланс)
Получить текущий баланс и данные активного тарифа
GET /user/tariff
Пример запроса (cURL):
curl -X GET "https://<host>/user/tariff" \
-H "Authorization: Bearer <jwt>"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| — | — | — | Нет параметров в URL/теле. Требуется заголовок Authorization: Bearer <jwt>. |
Пример ответа (200)
{
"success": true,
"errorcode": 0,
"tariff": {
"id": 3,
"name": "Pro",
"identifier": "pro",
"days_left": 12,
"calls_enabled": true,
"transcription_enabled": true,
"image_generation_enabled": false,
"start_date": "2025-10-01T00:00:00Z",
"end_date": "2025-11-30T23:59:59Z",
"remaining_resources": {
"available_audio_minutes": 1150,
"available_call_minutes": 300,
"available_text_tokens": 1500000,
"available_image_tokens": 0
},
"usage": {
"used_audio_minutes": 350,
"used_call_minutes": 20,
"used_text_tokens": 500000,
"used_image_tokens": 0
}
}
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса |
| errorcode | int | Код ошибки (0 при успешном запросе) |
| tariff | object | Информация об активном тарифе пользователя |
| tariff.id | int | Идентификатор тарифа |
| tariff.name | string | Название тарифа |
| tariff.identifier | string | Уникальный идентификатор тарифа |
| tariff.days_left | int | Количество дней до окончания тарифа |
| tariff.calls_enabled | bool | Поддержка звонков включена |
| tariff.transcription_enabled | bool | Поддержка транскрибации включена |
| tariff.image_generation_enabled | bool | Поддержка генерации изображений включена |
| tariff.start_date | datetime | Дата начала действия тарифа (ISO 8601) |
| tariff.end_date | datetime | Дата окончания действия тарифа (ISO 8601) |
| tariff.remaining_resources | object | Остаток доступных ресурсов тарифа |
| tariff.remaining_resources.available_audio_minutes | int | Доступные минуты аудио |
| tariff.remaining_resources.available_call_minutes | int | Доступные минуты звонков |
| tariff.remaining_resources.available_text_tokens | int | Доступные текстовые токены |
| tariff.remaining_resources.available_image_tokens | int | Доступные токены изображений |
| tariff.usage | object | Использованные ресурсы тарифа |
| tariff.usage.used_audio_minutes | int | Использовано минут аудио |
| tariff.usage.used_call_minutes | int | Использовано минут звонков |
| tariff.usage.used_text_tokens | int | Использовано текстовых токенов |
| tariff.usage.used_image_tokens | int | Использовано токенов изображений |
3) Задачи
Создание задачи на обработку звонка (файл)
POST /addtaskcall — multipart/form-data
Создаёт задачу на обработку звонка по загруженному файлу.
Пример запроса (cURL):
curl -X POST "https://<host>/addtaskcall" \
-H "Authorization: Bearer <JWT>" \
-F "file=@/path/to/call.wav" \
-F "directory_id=123" \
-F "operator_name=Иван" \
-F "client_id=C-42" \
-F "call_type=inbound" \
-F "call_date=2025-10-20" \
-F "call_datetime=2025-10-20T10:00:00+03:00" \
-F "processing_type=standard"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| file | file | да | Аудиофайл звонка (WAV/MP3/OGG и др.). Минимальная длительность ≈ 2 сек. |
| directory_id | int | нет | ID директории (значение 0 трактуется как null). |
| operator_name | string | нет | Имя/метка оператора (по умолчанию global). |
| client_id | string | нет | Идентификатор клиента. |
| call_type | string | нет | inbound \ |
| call_date | date | нет | Дата звонка YYYY-MM-DD. |
| call_datetime | datetime | нет | Полная дата/время в ISO 8601 с TZ (например, 2025-10-20T10:00:00+03:00). |
| processing_type | string | нет | Режим постановки в очередь: standard \ |
Пример ответа (200)
{
"id": 101,
"error_code": 0,
"code": "a1bc2d3e-4f56-7890-abcd-ef1234567890"
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| id | int | Внутренний идентификатор задачи. |
| error_code | int | Код ошибки (0 при успехе). |
| code | string (uuid) | Публичный код задачи. |
Возможные ошибки (HTTP 200, JSON)
| Код | Описание |
| 4001 | Некорректные параметры (в т.ч. неверный directory_id или call_datetime без TZ). |
| 4024 | Файл не передан. |
| 4025 | Неподдерживаемый формат файла. |
| 4026 | Ошибка декодирования файла (кодировка). |
| 4044 | Нет активного тарифа. |
| 4050 | Недостаточно минут на тарифе (звонки). |
| 4091 | Дубликат файла (совпадает исходное имя у уже загруженной задачи). |
| 4092 | Аудио слишком короткое (< 2 сек) или превышено ограничение длины. |
| 5000 | Внутренняя ошибка сервера. |
Создание задачи на обработку звонка по URL
POST /addtaskcallbyurl — JSON
Создаёт задачу на обработку звонка, скачивая аудио по ссылке.
Пример запроса (cURL):
curl -X POST "https://<host>/addtaskcallbyurl" \
-H "Authorization: Bearer <JWT>" \
-H "Content-Type: application/json" \
-d '{
"file_url": "https://example.com/rec_001.wav",
"directory_id": 123,
"operator_name": "Иван",
"client_id": "C-42",
"call_type": "outbound",
"call_date": "2025-10-20",
"call_datetime": "2025-10-20T10:00:00+03:00",
"processing_type": "analysis"
}'
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| file_url | string (URL) | да | Прямая ссылка на аудиофайл. |
| directory_id | int | нет | ID директории. |
| operator_name | string | нет | Имя/метка оператора (по умолчанию global). |
| client_id | string | нет | Идентификатор клиента. |
| call_type | string | нет | inbound \ |
| call_date | date | нет | YYYY-MM-DD. |
| call_datetime | datetime | нет | ISO 8601 с TZ. |
| processing_type | string | нет | Режим: analysis \ |
Пример ответа (200)
{
"id": 102,
"error_code": 0,
"code": "9360911d-34ce-4e1f-9259-2ba0a1b96ae7"
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| id | int | Внутренний идентификатор задачи. |
| error_code | int | Код ошибки (0 при успехе). |
| code | string (uuid) | Публичный код задачи. |
Возможные ошибки (HTTP 200, JSON)
| Код | Описание |
| 4001 | Некорректные параметры (в т.ч. call_datetime без TZ). |
| 4002 | Не передан file_url. |
| 4024 | Ошибка загрузки файла по URL. |
| 4044 | Нет активного тарифа. |
| 4050 | Недостаточно минут на тарифе (звонки). |
| 4092 | Аудио слишком короткое/пустой файл после скачивания. |
| 5000 | Внутренняя ошибка сервера. |
Создание задачи на обработку аудио (файл)
POST /addtaskaudio — multipart/form-data
Добавляет задачу на обработку произвольного аудиофайла.
Пример запроса (cURL):
curl -X POST "https://<host>/addtaskaudio" \
-H "Authorization: Bearer <JWT>" \
-F "file=@/path/to/audio.mp3" \
-F "directory_id=321" \
-F "file_lang=00"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| file | file | да | Аудиофайл. Минимальная длительность ≈ 2 сек. |
| directory_id | int | нет | ID директории. |
| file_lang | string | нет | Код языка/локали (по умолчанию 00 — автоопределение). |
Пример ответа (200)
{
"id": 103,
"error_code": 0,
"code": "a1bc2d3e-4f56-7890-abcd-ef1234567890"
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| id | int | Внутренний идентификатор задачи. |
| error_code | int | Код ошибки (0 при успехе). |
| code | string (uuid) | Публичный код задачи. |
Возможные ошибки (HTTP 200, JSON)
| Код | Описание |
| 4024 | Файл не передан. |
| 4025 | Неподдерживаемый формат файла. |
| 4026 | Ошибка декодирования файла (кодировка). |
| 4044 | Нет активного тарифа. |
| 4050 | Недостаточно минут на тарифе (аудио). |
| 4092 | Аудио слишком короткое/слишком длинное. |
| 5000 | Внутренняя ошибка сервера. |
Создание задачи на обработку YouTube
POST /addtaskyoutube — JSON
Добавляет задачу на транскрибацию аудио из видео по ссылке (поддерживаются YouTube/VK/TikTok и др.).
Пример запроса (cURL):
curl -X POST "https://<host>/addtaskyoutube" \
-H "Authorization: Bearer <JWT>" \
-H "Content-Type: application/json" \
-d '{
"file_path": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"directory_id": 555,
"file_lang": "00"
}'
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| file_path | string (URL) | да | Ссылка на видео. |
| directory_id | int | нет | ID директории. |
| file_lang | string | нет | Код языка/локали (по умолчанию 00). |
Пример ответа (200)
{
"id": 104,
"error_code": 0,
"code": "b2cd3e4f-5678-90ab-cdef-0123456789ab",
"demo": false
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| id | int | Внутренний идентификатор задачи. |
| error_code | int | Код ошибки (0 при успехе). |
| code | string (uuid) | Публичный код задачи. |
| demo | bool | Признак демо-режима (обычно false для приватного API). |
Возможные ошибки (HTTP 200, JSON)
| Код | Описание |
| 4017 | Неверный/неподдерживаемый URL. |
| 4044 | Нет активного тарифа. |
| 5000 | Внутренняя ошибка сервера. |
Создание задачи на анализ чата (текст)
POST /add_chat_analysis_task — JSON
Принимает текст/чанки диалога, создаёт задачу типа chat и ставит её в очередь анализа.
Пример запроса (cURL):
curl -X POST "https://<host>/add_chat_analysis_task" \
-H "Authorization: Bearer <JWT>" \
-H "Content-Type: application/json" \
-d '{
"text": "Диалог с клиентом...",
"chunks": null,
"operator_name": "Оператор 1",
"call_date": "2025-10-20"
}'
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| text | string \ | null | нет |
| chunks | array \ | null | нет |
| operator_name | string | нет | Имя/метка оператора. |
| call_date | date | нет | YYYY-MM-DD \ |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"success_message": "Chat analysis task created",
"task_code": "c0ffee00-1234-5678-aaaa-bbbbbbbbbbbb"
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного добавления. |
| error_code | int | Код ошибки (0 при успехе). |
| success_message | string | Сообщение об успехе. |
| task_code | string (uuid) | Публичный код задачи. |
4) Получение результатов
Получить все задачи пользователя с указанными фильтрами
POST /tasks/filter
GET /tasks/filter
Назначение. Гибкая выборка задач по множеству критериев: базовые поля задачи, фильтры по аналитике звонков и по ответам чек‑листов. Пагинация поддерживается для обоих методов. Результат отсортирован по updated_at по убыванию.
Пример запроса (POST, JSON в теле):
curl -X POST "https://<host>/tasks/filter" \
-H "Authorization: Bearer <JWT>" \
-H "Content-Type: application/json" \
-H "Accept-Language: ru" \
-d '{
"task_type": "call",
"status": "completed",
"date_from": "2025-10-01",
"date_to": "2025-10-31",
"operator_name": "Иванов",
"call_type": "inbound",
"tags_any": ["eSIM","APN"],
"customer_satisfaction_score_min": 7,
"script_alignment_min": 60,
"checklist_id": 7,
"answers": ["Да"],
"page": 1,
"per_page": 12
}'
Пример запроса (GET, только query‑параметры):
curl -G "https://<host>/tasks/filter" \
-H "Authorization: Bearer <JWT>" \
-H "Accept-Language: ru" \
--data-urlencode "task_type=call" \
--data-urlencode "status=completed" \
--data-urlencode "date_from=2025-10-01" \
--data-urlencode "date_to=2025-10-31" \
--data-urlencode "operator_name=Иванов" \
--data-urlencode "tags_any=eSIM,APN" \
--data-urlencode "customer_satisfaction_score_min=7" \
--data-urlencode "page=1" \
--data-urlencode "per_page=12"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| task_code | string (UUID \ | legacy) | нет |
| task_id | int | нет | Внутренний идентификатор задачи. |
| date_from | date \ | datetime | нет |
| date_to | date \ | datetime | нет |
| task_type | string | нет | Тип задачи. Примеры: call, chat, email, audio, youtubenew, callreport. |
| status | string | нет | Статус обработки. Примеры: pending, processing, audio_completed, completed, completed2, error. |
| call_type | string | нет | Тип звонка: inbound \ |
| operator_name | string | нет | Подстроковый поиск по имени оператора (без учёта регистра). |
| priority | string | нет | Приоритет из аналитики звонка. |
| tags_any | string \ | string[] | нет |
| tags_all | string \ | string[] | нет |
| tone | string | нет | Тональность разговора (из аналитики). |
| problem_type | string | нет | Тип проблемы (из аналитики). |
| script_alignment_min | number | нет | Минимальное соответствие скрипту (0–100). |
| script_alignment_max | number | нет | Максимальное соответствие скрипту (0–100). |
| customer_satisfaction_score_min | int | нет | Нижняя граница CSAT (0–10). |
| customer_satisfaction_score_max | int | нет | Верхняя граница CSAT (0–10). |
| operator_politeness | bool | нет | Вежливость оператора (по аналитике). |
| resolved_status | string | нет | Статус разрешения обращения (по аналитике). |
| checklist_id | int | нет | Фильтр по конкретному вопросу чек‑листа. |
| answers | string \ | string[] | нет |
| page | int | нет | Номер страницы (по умолчанию 1). |
| per_page | int | нет | Размер страницы (по умолчанию 10). |
| Accept-Language | header | нет | Язык локализации (ru, en и т.п.). |
Примечания: - Фильтрация по тегам (
tags_any,tags_all) выполняется по текстовому полю тегов аналитики. - Если переданы иchecklist_id, иanswers, выбираются задачи, где ответ на этот вопрос совпадает с любым из указанных значений. - Сортировка фиксирована:updated_at DESC.
Пример ответа (200)
{
"tasks": [
{
"id": 12345,
"type": "call",
"status": "completed",
"file_name": "rec_2025-10-20_0845.wav",
"created_at": "2025-10-20T08:45:14+00:00",
"updated_at": "2025-10-20T08:47:10+00:00",
"operator_name": "Иванов",
"call_time": "2025-10-20T08:45:00+00:00",
"call_type": "inbound",
"call_date": "2025-10-20",
"error_message": null,
"directory_id": 123,
"task_length": 64.2,
"task_code": "9289bd97-ac8c-41b3-bce8-fbcd86f1da7c",
"report_type": null,
"customer_satisfaction_score": 8
}
],
"pagination": {
"current_page": 1,
"per_page": 12,
"total_tasks": 34,
"total_pages": 3
}
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| tasks | array | Список найденных задач. |
| tasks[].id | int | Идентификатор задачи. |
| tasks[].type | string | Тип задачи. |
| tasks[].status | string | Статус обработки. |
| tasks[].file_name | string \ | null |
| tasks[].created_at | datetime \ | null |
| tasks[].updated_at | datetime \ | null |
| tasks[].operator_name | string \ | null |
| tasks[].call_time | datetime \ | null |
| tasks[].call_type | string \ | null |
| tasks[].call_date | date \ | null |
| tasks[].error_message | string \ | null |
| tasks[].directory_id | int \ | null |
| tasks[].task_length | number | Длительность разговора в секундах для call; 0 для chat/email. |
| tasks[].task_code | string | Публичный уникальный код задачи (code_uuid). |
| tasks[].report_type | string \ | null |
| tasks[].customer_satisfaction_score | int \ | null |
| pagination | object | Информация постраничной навигации. |
| pagination.current_page | int | Текущая страница. |
| pagination.per_page | int | Размер страницы. |
| pagination.total_tasks | int | Общее число найденных задач. |
| pagination.total_pages | int | Число страниц. |
Получить детальные данные по задаче
GET /gettask
Назначение. Вернуть основную информацию о задаче: статусы, файлы, даты, длительность, краткий «сырой» текст/нормализованный текст (если есть), привязки и ошибки.
Пример запроса (cURL):
curl -G "https://<host>/gettask" -H "Authorization: Bearer <JWT>" --data-urlencode "task_code=9360911d-34ce-4e1f-9259-2ba0a1b96ae7"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| task_code | uuid-string | да | Публичный GUID задачи. |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"id": 112233,
"type": "call",
"status": "completed",
"file_name": "rec_2025-10-01_0750.wav",
"created_at": "2025-10-01T07:50:00+00:00",
"updated_at": "2025-10-01T08:02:31+00:00",
"call_date": "2025-10-01",
"error_message": null,
"directory_id": 77,
"report_type": null,
"task_code": "9360911d-34ce-4e1f-9259-2ba0a1b96ae7",
"task_length": 16.62,
"task_result": {
"blog_post": null,
"image_prompt": null,
"normalized_text": null,
"original_text": "Оператор: Добрый день, Смайл Телеком, меня зовут Ольга..."
}
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| error_code | int | Код ошибки (0 при успехе). |
| id | int | Внутренний идентификатор задачи. |
| type | string | call \ |
| status | string | pending \ |
| file_name | string \ | null |
| created_at | datetime | Дата/время создания (ISO 8601, с TZ). |
| updated_at | datetime | Дата/время обновления (ISO 8601, с TZ). |
| call_date | date \ | null |
| error_message | string \ | null |
| directory_id | int \ | null |
| report_type | string \ | null |
| task_code | uuid-string | Публичный GUID задачи. |
| task_length | number | Длительность/размер исходных данных. |
| task_result | object \ | null |
Заметки
- При бизнес-ошибке будут выставлены
error_code/error_message; прочие поля могут бытьnull/пусты (HTTP 200). task_result.*присутствуют, только если соответствующие режимы обработки были включены/выполнены.
Получить анализ по задаче
GET /api/calls_analysis_v2/{task_code}
Назначение. Вернуть структуру аналитики по звонку/задаче: нарратив, намерения, причины обращения, сигналы, рекомендации, оценки (CSAT/эмоции/вежливость), теги, чек-листы и т.д.
Пример запроса (cURL):
curl -X GET "https://<host>/api/calls_analysis_v2/9360911d-34ce-4e1f-9259-2ba0a1b96ae7" -H "Authorization: Bearer <JWT>" -H "Accept: application/json" -H "Accept-Language: ru"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| task_code | path-uuid | да | GUID задачи в пути URL. |
| Accept-Language | header | нет | Локализация человекочитаемых текстов (если доступны). |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"task_code": "9360911d-34ce-4e1f-9259-2ba0a1b96ae7",
"call_datetime": "2025-10-01T07:50:00+00:00",
"call_type": "inbound",
"duration_sec": 996,
"transcript": {
"language": "ru",
"turns": 128
},
"analysis": {
"summary": "Клиент хочет подключить eSIM и статический IP для удалённого доступа; оператор объяснил шаги, подтвердил тариф и пообещал прислать SMS с инструкциями.",
"sentiment": "positive",
"scores": {
"csat": 9,
"politeness": 0.95,
"empathy": 0.86
},
"actions": [
"Отправить SMS с инструкциями по активации eSIM",
"Передать параметры APN для стабильного соединения",
"Проверить наличие сбоев в районе клиента"
],
"tags": ["eSIM","APN","Static IP","Remote access"],
"analysis_notes": {
"decision_driver": "оформление eSIM + статический IP",
"emotional_dynamics": "спокойная, благодарная",
"funnel_stage": "квалификация",
"intention": "получить стабильный удалённый доступ",
"key_obstacles": "отсутствует активация eSIM в ЛК; возможные сетевые сбои",
"next_action": "клиент ждёт SMS-подтверждение и инструкции",
"operator_commitments": "отправить SMS, дать APN, проверить сбои",
"product_or_service": "мобильная связь, eSIM, статический IPv4",
"reason_for_contact": "активация eSIM, проблемы с VoLTE",
"risk_signals": "нет",
"root_cause": "техническая",
"sales_signals": "апселл"
}
},
"call_checklists": [
{
"checklist_id": 7,
"title": "Скрипт приветствия",
"score": 0.9,
"answers": [
{"question_id": 1, "title": "Представился оператор", "value": true},
{"question_id": 2, "title": "Проверил данные клиента", "value": true}
]
}
],
"category_ids": [101, 202],
"customer_satisfaction_score": 9
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного ответа. |
| error_code | int | Код ошибки (0 при успехе). |
| task_code | uuid-string | GUID задачи. |
| call_datetime | datetime | Время звонка (ISO 8601, с TZ). |
| call_type | string | inbound \ |
| duration_sec | int | Длительность разговора в секундах. |
| transcript | object | Краткая статистика по расшифровке. |
| transcript.language | string | Язык транскрипции (BCP-47). |
| transcript.turns | int | Количество реплик (диалоговых ходов). |
| analysis | object | Итоговая аналитика по разговору. |
| analysis.summary | string | Краткое резюме разговора. |
| analysis.sentiment | string | Общая тональность (positive/neutral/negative). |
| analysis.scores | object | Нормированные метрики (например, CSAT). |
| analysis.actions | string[] | Рекомендуемые следующие шаги. |
| analysis.tags | string[] | Массив тегов по звонку. |
| analysis.analysis_notes | object | Детализированные «заметки» по разговору (сигналы, намерения и т.п.). |
| call_checklists | array | Результаты чек-листов по звонку. |
| category_ids | int[] | Категории (если классификация выполнена). |
| customer_satisfaction_score | int \ | null |
Заметки
- Структура блока
analysisможет расширяться без изменения версии API (добавление ключей). - При отсутствии каких-либо подсистем (категории, чек-листы) соответствующие поля могут быть пустыми/
null. - В случае бизнес-ошибки возвращается
success: falseи заполненныеerror_code/error_message(HTTP 200).
5) Чек-листы
API для управления вопросами чек-листа и работы с ответами по задачам.
Получить активные вопросы чек-листа
GET /checklist
GET /checklist/{user_id} — опционально, для администратора
Пример запроса (cURL):
curl -X GET "https://<host>/checklist" -H "Authorization: Bearer <JWT>"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| user_id | path-int | нет | Идентификатор пользователя (вариант GET /checklist/{user_id}). Без параметра — активные чек-листы текущего пользователя. |
| Authorization | header | да | Bearer <JWT> токен. |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"data": [
{ "id": 1, "question": "Оператор представился клиенту?", "is_active": true },
{ "id": 2, "question": "Оператор уточнил цель звонка?", "is_active": true }
]
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| error_code | int | Код ошибки (0 при успехе). |
| data | array | Список активных вопросов чек-листа. |
| data[].id | int | Идентификатор вопроса. |
| data[].question | string | Текст вопроса. |
| data[].is_active | bool | Признак активности вопроса. |
Пагинация
Не используется для данного метода (возвращаются все активные вопросы).
Создать вопрос чек-листа
POST /checklist
Создаёт новый вопрос чек-листа для текущего пользователя.
Пример запроса (cURL):
curl -X POST "https://<host>/checklist" -H "Authorization: Bearer <JWT>" -H "Content-Type: application/json" -d '{ "question": "Оператор представился клиенту?" }'
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| question | string | да | Текст вопроса чек-листа. |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"message": "Checklist question created",
"data": { "id": 101, "question": "Оператор представился клиенту?", "is_active": true }
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| error_code | int | Код ошибки (0 при успехе). |
| message | string | Служебное сообщение об успешном создании. |
| data | object | Созданный вопрос чек-листа. |
| data.id | int | Идентификатор вопроса. |
| data.question | string | Текст вопроса. |
| data.is_active | bool | Признак активности (по умолчанию true). |
Изменить вопрос чек-листа
POST /checklist/{checklist_id}
Редактирует текст вопроса, если по нему ещё нет неподходящих зависимостей (бизнес-ограничения могут применяться).
Пример запроса (cURL):
curl -X POST "https://<host>/checklist/101" -H "Authorization: Bearer <JWT>" -H "Content-Type: application/json" -d '{ "question": "Оператор чётко представился клиенту?" }'
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| checklist_id | path-int | да | Идентификатор вопроса в URL. |
| question | string | да | Новый текст вопроса. |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"message": "Checklist question updated",
"data": { "id": 101, "question": "Оператор чётко представился клиенту?", "is_active": true }
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| error_code | int | Код ошибки (0 при успехе). |
| message | string | Сообщение об успешном обновлении. |
| data | object | Обновлённый вопрос чек-листа. |
| data.id | int | Идентификатор вопроса. |
| data.question | string | Текст вопроса. |
| data.is_active | bool | Признак активности. |
Удалить (скрыть) вопрос чек-листа
POST /checklist/delete/{checklist_id}
Удаляет/скрывает вопрос чек-листа.
Пример запроса (cURL):
curl -X POST "https://<host>/checklist/delete/101" -H "Authorization: Bearer <JWT>"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| checklist_id | path-int | да | Идентификатор вопроса, передаётся в URL. |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"message": "Checklist question deleted",
"id": 101
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| error_code | int | Код ошибки (0 при успехе). |
| message | string | Сообщение об успешном удалении/скрытии. |
| id | int | Идентификатор удалённого вопроса. |
Получить ответы чек-листа по задаче
GET /checklist/answer/{task_id}
Возвращает ответы на вопросы чек-листа по конкретной задаче.
Пример запроса (cURL):
curl -X GET "https://<host>/checklist/answer/12345" -H "Authorization: Bearer <JWT>"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| task_id | path-int | да | Идентификатор задачи. |
| Authorization | header | да | Bearer <JWT> токен. |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"data": [
{ "checklist_id": 1, "question": "Оператор представился клиенту?", "answer": "Да" },
{ "checklist_id": 2, "question": "Оператор уточнил цель звонка?", "answer": "Нет" }
]
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| error_code | int | Код ошибки (0 при успехе). |
| data | array | Список ответов по задаче. |
| data[].checklist_id | int | Идентификатор вопроса чек-листа. |
| data[].question | string | Текст вопроса (для удобства клиента). |
| data[].answer | string | Ответ пользователя/оператора. |
Правила формирования полей
question— непустая строка. Рекомендуется лаконичная формулировка в утвердительной форме.answer— строка. Допускается «Да»/«Нет» или любой свободный текст по бизнес-логике.is_active— булево; неактивные вопросы не возвращаются вGET /checklist.task_id— внутренний идентификатор задачи (см. раздел «Задачи»).- Все даты/время (если присутствуют) — ISO 8601 с таймзоной.
Примеры элементов
Вопрос чек-листа:
json
{ "id": 7, "question": "Проговорил условия тарифа?", "is_active": true }
Ответ по задаче:
json
{ "checklist_id": 7, "question": "Проговорил условия тарифа?", "answer": "Да" }
Заметки
- Повторная отправка ответа на тот же
checklist_idдля одной и той жеtask_idперезапишет прошлый ответ. - Неизвестные/скрытые вопросы игнорируются при массовой записи ответов.
- В случае бизнес-ошибок возвращается
success: falseс заполненнымиerror_codeиerror_messageпри HTTP 200.
6) Директории
Раздел для управления пользовательскими директориями, в которых хранятся задачи.
Получить список директорий
GET /user/directories
Возвращает все директории, созданные пользователем.
Пример запроса (cURL):
curl -X GET "https://<host>/user/directories" -H "Authorization: Bearer <JWT>"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| — | — | — | Нет параметров в URL/теле. Требуется заголовок Authorization: Bearer <JWT>. |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"directories": [
{ "id": 70, "name": "Продвижение сайта" },
{ "id": 71, "name": "Отдел продаж" }
]
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| error_code | int | Код ошибки (0 при успехе). |
| directories | array | Список директорий пользователя. |
| directories[].id | int | Идентификатор директории. |
| directories[].name | string | Название директории. |
Создать директорию
POST /user/directories
Создаёт новую директорию для организации задач пользователя.
Пример запроса (cURL):
curl -X POST "https://<host>/user/directories" -H "Authorization: Bearer <JWT>" -H "Content-Type: application/json" -d '{ "name": "Новая директория" }'
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| name | string | да | Название новой директории. |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"directory": { "id": 123, "name": "Новая директория" }
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| error_code | int | Код ошибки (0 при успехе). |
| directory | object | Созданная директория. |
| directory.id | int | Идентификатор созданной директории. |
| directory.name | string | Название созданной директории. |
Удалить директорию
DELETE /user/directories/delete/{directory_id}
Удаляет указанную директорию. Внимание: путь содержит один directory_id в конце.
Пример запроса (cURL):
curl -X DELETE "https://<host>/user/directories/delete/123" -H "Authorization: Bearer <JWT>"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| directory_id | path-int | да | Идентификатор удаляемой директории (передаётся в URL). |
Пример ответа (200)
{
"error_code": 0,
"message": "Directory deleted successfully"
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| error_code | int | Код ошибки (0 при успехе). |
| message | string | Сообщение об успешном удалении. |
7) Категории звонков
Справочник категорий звонков. Позволяет создавать древовидную структуру тематик обращений (родитель → дочерние).
Список категорий
POST /user/call_categories/list
Возвращает категории пользователя с поддержкой поиска и пагинации.
Пример запроса (cURL, JSON в теле):
curl -X POST "https://<host>/user/call_categories/list" -H "Authorization: Bearer <JWT>" -H "Content-Type: application/json" -d '{
"q": "тех",
"parent_id": null,
"page": 1,
"per_page": 10
}'
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| q | string | нет | Поиск по части name/description. |
| parent_id | int \ | null | нет |
| page | int | нет | Номер страницы (по умолчанию 1). |
| per_page | int | нет | Размер страницы (по умолчанию 20). |
| Authorization | header | да | Bearer <JWT> токен. |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"items": [
{
"id": 1,
"name": "Продажи",
"description": "Звонки по продажам",
"parent_id": null,
"children_count": 2,
"created_at": "2025-10-20T12:35:41+00:00",
"updated_at": "2025-10-22T09:10:00+00:00"
}
],
"total": 3,
"page": 1,
"per_page": 10
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| error_code | int | Код ошибки (0 при успехе). |
| items | array | Массив категорий на текущей странице. |
| items[].id | int | Идентификатор категории. |
| items[].name | string | Название категории. |
| items[].description | string \ | null |
| items[].parent_id | int \ | null |
| items[].children_count | int | Количество дочерних категорий. |
| items[].created_at | datetime | Дата/время создания (ISO 8601). |
| items[].updated_at | datetime | Дата/время изменения (ISO 8601). |
| total | int | Общее количество записей по фильтрам. |
| page | int | Номер текущей страницы. |
| per_page | int | Размер страницы. |
Создать категорию
POST /user/call_categories/create
Создаёт новую категорию пользователя.
Пример запроса (cURL):
curl -X POST "https://<host>/user/call_categories/create" -H "Authorization: Bearer <JWT>" -H "Content-Type: application/json" -d '{ "name": "Техподдержка", "description": "Обращения по тех. вопросам", "parent_id": null }'
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| name | string | да | Название категории. |
| description | string | нет | Описание. |
| parent_id | int \ | null | нет |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"success_message": "Saved successfully",
"data": {
"id": 12,
"name": "Техподдержка",
"description": "Обращения по тех. вопросам",
"parent_id": null,
"created_at": "2025-10-20T12:35:41+00:00",
"updated_at": "2025-10-20T12:35:41+00:00"
}
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| error_code | int | Код ошибки (0 при успехе). |
| success_message | string | Сообщение об успешном сохранении. |
| data | object | Созданная категория (см. поля ниже). |
| data.id | int | Идентификатор. |
| data.name | string | Название. |
| data.description | string \ | null |
| data.parent_id | int \ | null |
| data.created_at | datetime | Время создания (ISO 8601). |
| data.updated_at | datetime | Время изменения (ISO 8601). |
Изменить категорию
POST /user/call_categories/edit/{id}
Изменяет свойства категории. ID берётся из URL; можно также передать category_id в теле запроса (если есть, он имеет приоритет).
Пример запроса (cURL):
curl -X POST "https://<host>/user/call_categories/edit/12" -H "Authorization: Bearer <JWT>" -H "Content-Type: application/json" -d '{ "name": "Техподдержка (L2)", "description": "Сложные технические вопросы", "parent_id": 2 }'
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| id | path-int | да | Идентификатор категории в URL. |
| category_id | int | нет | Идентификатор в теле (перекрывает id из URL). |
| name | string | нет | Новое название. |
| description | string | нет | Новое описание. |
| parent_id | int \ | null | нет |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"success_message": "Saved successfully",
"data": {
"id": 12,
"name": "Техподдержка (L2)",
"description": "Сложные технические вопросы",
"parent_id": 2,
"created_at": "2025-10-20T12:35:41+00:00",
"updated_at": "2025-10-22T09:10:00+00:00"
}
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| error_code | int | Код ошибки (0 при успехе). |
| success_message | string | Сообщение об успешном сохранении. |
| data | object | Обновлённая категория (см. поля в «Создать категорию»). |
Удалить категорию
POST /user/call_categories/delete/{id}
Удаляет категорию пользователя.
Пример запроса (cURL):
curl -X POST "https://<host>/user/call_categories/delete/12" -H "Authorization: Bearer <JWT>"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| id | path-int | да | Идентификатор категории. |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"message": "Deleted successfully"
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| error_code | int | Код ошибки (0 при успехе). |
| message | string | Сообщение об успешном удалении. |
Коды ошибок (HTTP 200) {#kody-oshibok-http-200}
| Код | Описание |
| 4023 | Не авторизован / пользователь не найден |
| 4045 | Нельзя удалить категорию, у которой есть дочерние записи |
| 4059 | Категория не найдена (или недоступна пользователю) |
| 5000 | Внутренняя ошибка сервера |
8)Поисковые фильтры
API для сохранения, получения списка и удаления сохранённых поисковых фильтров задач.
Общее: все методы требуют JWT‑авторизацию. Ошибки возвращаются с HTTP 200 и телом { "success": false, "error_code": <int>, "error_message": "<string>" }.
Сохранить конфигурацию фильтров
POST /tasks/filters/save
Создаёт новый фильтр или обновляет существующий по имени (для текущего пользователя).
Пример запроса (cURL):
curl -X POST "https://<host>/tasks/filters/save" -H "Authorization: Bearer <JWT>" -H "Content-Type: application/json" -d '{
"name": "Критичные звонки — октябрь",
"criteria": {
"task_type": "call",
"priority": "Высокий",
"date_from": "2025-10-01",
"date_to": "2025-10-31",
"operator_politeness": true,
"customer_satisfaction_score_min": 8
}
}'
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| name | string | да | Человекочитаемое название фильтра. Если фильтр с таким именем уже существует у пользователя — будет обновлён. |
| criteria | object (JSON) | да | Произвольные критерии фильтрации задач. Поддерживаются ключи, аналогичные эндпойнту фильтрации задач (например, task_type, status, date_from, date_to, priority, script_alignment_min, customer_satisfaction_score_min, operator_politeness, tags_any, tags_all, checklist_id, answers и т. д.). |
Пример успешного ответа (200)
{ "success": true, "message": "Filter created or updated" }
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| message | string | Служебное сообщение об операции. |
Возможные ошибки (HTTP 200, JSON)
| Код | Сообщение (пример) | Описание |
| 4045 | Required fields are missing | Не переданы обязательные поля name и/или criteria. |
| 5000 | Internal server error | Внутренняя ошибка сервера. |
Список сохранённых фильтров
GET /tasks/filters/list
Возвращает все сохранённые фильтры текущего пользователя.
Пример запроса (cURL):
curl -X GET "https://<host>/tasks/filters/list" -H "Authorization: Bearer <JWT>"
Пример ответа (200)
{
"success": true,
"count": 2,
"filters": [
{
"id": 42,
"name": "Критичные звонки — октябрь",
"criteria": {
"task_type": "call",
"priority": "Высокий",
"date_from": "2025-10-01",
"date_to": "2025-10-31"
},
"created_at": "2025-10-31T12:00:00"
},
{
"id": 43,
"name": "Чаты с низким CSAT",
"criteria": {
"task_type": "chat",
"customer_satisfaction_score_max": 4
},
"created_at": "2025-11-01T09:15:00"
}
]
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| count | int | Количество найденных фильтров. |
| filters | array | Массив сохранённых фильтров. |
| filters[].id | int | Идентификатор фильтра. |
| filters[].name | string | Название фильтра. |
| filters[].criteria | object | JSON с критериями фильтрации. |
| filters[].created_at | string (ISO) | Дата/время создания. |
Удалить сохранённый фильтр
POST /tasks/filters/delete/{filter_id}
Удаляет сохранённый фильтр по его идентификатору.
Пример запроса (cURL):
curl -X POST "https://<host>/tasks/filters/delete/42" -H "Authorization: Bearer <JWT>"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| filter_id | path-int | да | Идентификатор фильтра, который нужно удалить. |
Пример успешного ответа (200)
{ "success": true, "message": "Filter deleted" }
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| message | string | Служебное сообщение об операции. |
Возможные ошибки (HTTP 200, JSON)
| Код | Сообщение (пример) | Описание |
| 4066 | Filter not found | Фильтр с таким filter_id у текущего пользователя не найден. |
| 5000 | Internal server error | Внутренняя ошибка сервера. |
Заметки
- Поле
criteria— это произвольный JSON с критериями для эндпойнта фильтрации задач (см. раздел «Получить все задачи пользователя с указанными фильтрами»). - Все ответы используют
HTTP 200. Успех определяется полемsuccess.
9) Скрипты проверки звонков
API для управления скриптами проверки звонков (создание, изменение, удаление, выборка).
Получить список скриптов
POST /user/call_check_scripts/list
Возвращает список скриптов пользователя с поддержкой фильтрации и пагинации.
Пример запроса (cURL):
curl -X POST "https://<host>/user/call_check_scripts/list" -H "Authorization: Bearer <JWT>" -H "Content-Type: application/json" -d '{
"q": "welcome",
"only_active": true,
"page": 1,
"per_page": 10
}'
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| q | string | нет | Поиск по identifier/title (частичное совпадение). |
| only_active | bool | нет | Возвращать только активные (true/1/yes). |
| page | int | нет | Номер страницы (по умолчанию 1). |
| per_page | int | нет | Размер страницы (по умолчанию 20). |
| Authorization | header | да | Bearer <JWT> токен. |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"total": 2,
"page": 1,
"per_page": 10,
"items": [
{
"id": 11,
"identifier": "welcome_v1",
"title": "Приветствие клиента",
"description": "Скрипт приветствия и проверки данных",
"is_active": true,
"version": 1,
"script_body": "Здравствуйте! Меня зовут ...",
"created_at": "2025-10-20T12:35:41Z",
"updated_at": "2025-10-22T09:10:00Z"
}
]
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| error_code | int | Код ошибки (0 при успехе). |
| total | int | Общее количество записей. |
| page | int | Номер текущей страницы. |
| per_page | int | Размер страницы. |
| items | array | Список скриптов. |
| items[].id | int | Идентификатор скрипта. |
| items[].identifier | string | Уникальный идентификатор скрипта в рамках пользователя. |
| items[].title | string | Название скрипта. |
| items[].description | string \ | null |
| items[].is_active | bool | Признак активности. |
| items[].version | int | Версия скрипта. |
| items[].script_body | string | Текст скрипта (простой текст). |
| items[].created_at | datetime | Время создания (ISO 8601). |
| items[].updated_at | datetime | Время изменения (ISO 8601). |
Создать скрипт
POST /user/call_check_scripts/create
Создаёт новый скрипт проверки звонков.
Пример запроса (cURL):
curl -X POST "https://<host>/user/call_check_scripts/create" -H "Authorization: Bearer <JWT>" -H "Content-Type: application/json" -d '{
"identifier": "welcome_v1",
"title": "Приветствие клиента",
"description": "Скрипт приветствия и проверки данных",
"is_active": true,
"version": 1,
"script_body": "Здравствуйте! Меня зовут ..."
}'
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| identifier | string | да | Уникальный идентификатор скрипта (в рамках пользователя). |
| title | string | да | Название скрипта (непустая строка). |
| description | string | нет | Описание скрипта. |
| is_active | bool | нет | Признак активности (по умолчанию true). |
| version | int | нет | Версия (по умолчанию 1). |
| script_body | string | да | Текст скрипта (непустой простой текст). |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"success_message": "Saved successfully",
"data": {
"id": 11,
"identifier": "welcome_v1",
"title": "Приветствие клиента",
"description": "Скрипт приветствия и проверки данных",
"is_active": true,
"version": 1,
"script_body": "Здравствуйте! Меня зовут ...",
"created_at": "2025-10-20T12:35:41Z",
"updated_at": "2025-10-20T12:35:41Z"
}
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| error_code | int | Код ошибки (0 при успехе). |
| success_message | string | Сообщение об успешном сохранении. |
| data | object | Созданный скрипт (поля аналогичны объекту в списке). |
Изменить скрипт
POST /user/call_check_scripts/edit/{script_id}
Обновляет свойства скрипта. script_id берётся из URL; при наличии поля script_id в теле — оно имеет приоритет.
Пример запроса (cURL):
curl -X POST "https://<host>/user/call_check_scripts/edit/11" -H "Authorization: Bearer <JWT>" -H "Content-Type: application/json" -d '{
"script_id": 11,
"identifier": "welcome_v2",
"title": "Приветствие клиента (расшир.)",
"description": "Добавлен блок верификации",
"is_active": true,
"version": 2,
"script_body": "Здравствуйте! Меня зовут ..., давайте сверим данные ..."
}'
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| script_id | path-int \ | int | да |
| identifier | string | нет | Новый уникальный идентификатор (не пустой, уникальный). |
| title | string | нет | Новое название (не пустое). |
| description | string | нет | Новое описание. |
| is_active | bool | нет | Новый признак активности. |
| version | int | нет | Новая версия (целое число). |
| script_body | string | нет | Новый текст скрипта (непустой простой текст). |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"success_message": "Saved successfully",
"data": {
"id": 11,
"identifier": "welcome_v2",
"title": "Приветствие клиента (расшир.)",
"description": "Добавлен блок верификации",
"is_active": true,
"version": 2,
"script_body": "Здравствуйте! Меня зовут ..., давайте сверим данные ...",
"created_at": "2025-10-20T12:35:41Z",
"updated_at": "2025-10-22T09:10:00Z"
}
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| error_code | int | Код ошибки (0 при успехе). |
| success_message | string | Сообщение об успешном сохранении. |
| data | object | Обновлённый скрипт (поля аналогичны объекту в списке). |
Удалить скрипт
POST /user/call_check_scripts/delete/{script_id}
Удаляет скрипт. script_id берётся из URL; при наличии поля script_id в теле — оно имеет приоритет.
Пример запроса (cURL):
curl -X POST "https://<host>/user/call_check_scripts/delete/11" -H "Authorization: Bearer <JWT>"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| script_id | path-int \ | int | да |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"message": "Deleted successfully"
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| error_code | int | Код ошибки (0 при успехе). |
| message | string | Сообщение об успешном удалении. |
10) Загрузка отчётов
Общие принципы
- Авторизация: по
task_code(GUID/UUID или тот же код без дефисов). JWT‑токен не требуется для скачивания файла отчёта. - Ошибки: всегда
HTTP 200с телом{ "success": false, "error_code": <int>, "error_message": <string> }. - Кэширование: отдача файла с
conditional=true— клиент может использоватьETag/If-Modified-Since(зависит от версии Quart/Flask). - Безопасность имени файла: обрабатывается на сервере; фактический путь берётся из поля задачи (
task.file_path).
Получить PDF‑отчёт по задаче
GET /user/callreport/file?task_code=<GUID>&filename=<file.pdf>
Возвращает PDF‑отчёт, связанный с задачей task_code, если отчёт готов и файл доступен на диске.
Пример запроса (cURL):
curl -G "https://<host>/user/callreport/file" --data-urlencode "task_code=9360911d-34ce-4e1f-9259-2ba0a1b96ae7" --data-urlencode "filename=report_78157.pdf" -o report_78157.pdf
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| task_code | string (GUID) | да | Публичный код задачи. Допустим формат без дефисов. |
| filename | string | да | Имя файла отчёта (например, report_78157.pdf). |
Успешный ответ
- Статус:
200 OK - Заголовки:
Content-Type: application/pdf(+Content-Disposition: attachment; filename="<filename>") - Тело: бинарное содержимое PDF‑файла.
Ошибки (HTTP 200, JSON)
Пример:
json
{ "success": false, "error_code": 4041, "error_message": "Task not found" }
| Код | Сообщение |
| 4001 | task_code and filename are required |
| 4041 | Task not found |
| 4042 | Report file path is not set |
| 4043 | File missing on disk |
| 5000 | Internal server error |
Получить HTML‑отчёт по задаче (если включено)
GET /user/callreport/html?task_code=<GUID>&filename=<file.html>
Возвращает HTML‑отчёт, связанный с задачей task_code. Поведение аналогично PDF‑эндпойнту, отличается только тип контента.
Пример запроса (cURL):
curl -G "https://<host>/user/callreport/html" --data-urlencode "task_code=9360911d-34ce-4e1f-9259-2ba0a1b96ae7" --data-urlencode "filename=report_78157.html" -o report_78157.html
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| task_code | string (GUID) | да | Публичный код задачи. Допустим формат без дефисов. |
| filename | string | да | Имя HTML‑файла отчёта (например, report_78157.html). |
Успешный ответ
- Статус:
200 OK - Заголовки:
Content-Type: text/html; charset=utf-8(+Content-Disposition: attachment; filename="<filename>") - Тело: содержимое HTML‑файла.
Ошибки (HTTP 200, JSON)
| Код | Сообщение |
| 4001 | task_code and filename are required |
| 4041 | Task not found |
| 4042 | Report file path is not set |
| 4043 | File missing on disk |
| 5000 | Internal server error |
11) Коды ошибок
Содержит полный список кодов ошибок API с их назначением — от неверного формата данных до внутренних ошибок сервера.
Ниже приведены возможные коды ошибок API.
| Код | Описание |
| 4001 | Неверный формат данных/параметров |
| 4002 | Отсутствует обязательный параметр |
| 4012 | Неверный/просроченный токен |
| 4020 | Не указан task_code |
| 4021 | Задача не найдена |
| 4023 | Неавторизовано |
| 4024 | Файл не загружен / ошибка скачивания |
| 4025 | Неподдерживаемый формат файла |
| 4026 | Ошибка кодировки файла |
| 4030–4037 | Ошибки валидации пользователя |
| 4033 | Пользователь не найден |
| 4034 | Тариф не найден |
| 4041 | Ресурс недоступен |
| 4043 | Неверная ссылка YouTube |
| 4044 | Нет активного тарифа |
| 4045 | Отсутствуют обязательные поля |
| 4046 | Сумма/валюта не совпадает с тарифом |
| 4047 | Неподдерживаемый file_type или валюта |
| 4050 | Недостаточно ресурсов тарифа |
| 4052 | Не удалось определить длительность аудио |
| 4053 | Чек-лист/запись не найдены |
| 4054 | Дублирующийся вопрос чек-листа |
| 4055 | Нельзя редактировать — уже есть ответы |
| 4056 | Доступ запрещён |
| 4057 | Данные анализа/результата не найдены |
| 4060 | Не переданы start_date/end_date |
| 4061 | Неверный формат даты |
| 4062 | start_date позже end_date |
| 4070 | Библиотека DOCX недоступна |
| 5000 | Внутренняя ошибка |
| 5002 | Ошибка базы данных |
| 5003 | Ошибка генерации отчёта |
12) Тарифы
Базовые ставки
- Звонки: 3 ₽/мин
- Чаты: 1 ₽/чат (до 10 КБ текста)
Скидки по минутам и сообщениям
Скидки применяются к базовым ставкам только для тарифов Enterprise и Enterprise+.
| План | Скидка | Цена за минуту | Цена за чат |
| Pro | — | 3.00 ₽/мин | 1.00 ₽/чат |
| Enterprise | −10% | 2.70 ₽/мин | 0.90 ₽/чат |
| Enterprise+ | −20% | 2.40 ₽/мин | 0.80 ₽/чат |
Таблица пакетов
| План | Включено в пакет | Цена за единицу в пакете | Цена пакета (₽) | Перерасход в этом плане |
| Pro | 5 000 мин + 5 000 чатов | 3.00 ₽/мин, 1.00 ₽/чат | 20 000 ₽ | 3.00 ₽/мин, 1.00 ₽/чат |
| Enterprise | 10 000 мин + 10 000 чатов | 2.70 ₽/мин, 0.90 ₽/чат | 36 000 ₽ | 2.70 ₽/мин, 0.90 ₽/чат |
| Enterprise+ | >10 000 мин и/или >10 000 чатов | 2.40 ₽/мин, 0.80 ₽/чат | по объёму | 2.40 ₽/мин, 0.80 ₽/чат |
Что входит во все планы
- Хранение обращений — 1 год
- 31 бизнес-отчёт в месяц
- Неограниченное число отчётов по качеству работы операторов
Транскрибация аудиодиалогов без аналитики
Стоимость: 1.5 ₽/мин
Развёртывание в контуре компании
| Статья | Разово (₽) | Периодичность (₽) | Краткое описание (железо/ПО) | Производительность (ориентировочная) |
| Оборудование (2× DGX Spark) | ≈ 2 600 000 ₽ | — | Кластер из 2 узлов на GB10 Grace Blackwell Superchip (GPU Blackwell Gen-5 Tensor, FP4 поддержка) + 20-ядерный ARM (10× Cortex-X925, 10× Cortex-A725); NVLink-C2C 900 ГБ/с, латентность < 20 нс; 128 ГБ LPDDR5x ~273 ГБ/с (unified); NVMe SSD до 4 ТБ/узел; 10–25 GbE | Аудио: ~15 000–30 000 аудиомин/сутки (≈ 5 000–10 000 звонков по 3 мин) • Чаты: ~50 000–120 000 чатов/сутки • Смешанный: ~3 000–6 000 звонков + ~30 000–70 000 чатов/сутки |
| Лицензия ПО Transcripto (серверная) | ≈ 1 600 000 ₽ | — | Платформа транскрибации и аналитики: ASR/диаризация, отчёты, RBAC/SSO, API/веб-хуки, шифрование, журналирование | — |
| Итого разово (железо + ПО + внедрение) | ≈ 4 200 000 ₽ | — | Поставка, монтаж, развёртывание в периметре, документирование, приёмка | — |
| Поддержка (обновления, саппорт, Jira) | — | ≈ 190 000 ₽/мес | Регулярные обновления, мониторинг, линия поддержки, обработка инцидентов и тикетов | — |
По всем вопросам обращаться по электронной почте info@transcripto.ru