Введение
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. Получение файла отчета
Название файла передать в метод:
# PDF
curl -G "https://<host>/user/callreport/file" \
--data-urlencode "task_code=<GUID>" \
--data-urlencode "filename=report_78157.pdf"
# HTML
curl -G "https://<host>/user/callreport/file" \
--data-urlencode "task_code=<GUID>" \
--data-urlencode "filename=report_78157.html"
Если у вас есть необходимость в специфической аналитике и отчетности по данным взаимодействия с вашими клиентами напишите ваш запрос на адрес электронной почты info@transcripto.ru мы сделаем все возможное для реализации индивидуального требования.
1) Регистрация и авторизация
Регистрация пользователя
Для получения URL, логина и пароля для доступа к API Transcripto напишите письмо на адрес info@transcripto.ru, указав следующую информацию:
- Название компании, страна, город
- Сфера деятельности
- Примерное количество звонков в сутки
- Примерное количество сообщений (чаты/мессенджеры) в сутки
- Контактный телефон, ФИО
После рассмотрения запроса вы получите доступ к API: уникальный URL, логин и пароль для авторизации.
Получение токена (API KEY)
POST /auth/login
Для получения токена (JWT) вызовите метод /auth/login — он вернёт токен для доступа к приватным методам API.
Пример запроса (cURL):
curl -X POST "https://<host>/auth/login" -H "Content-Type: application/json" --data-raw '{
"email": "user@example.com",
"password_hash": "2bb80d537b1da3e38bd30361aa855686bde0...<hash>",
"captcha_token": "<captcha-token>"
}'
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| string | да | Эл. почта пользователя. | |
| password_hash | string | да | Хэш пароля пользователя. |
| captcha_token | string | да | Токен CAPTCHA для подтверждения запроса. |
Пример ответа (200):
{
"message": "Login successful",
"error_code": 0,
"token": "<jwt>",
"locale": "ru",
"user_id": 83,
"email": "user@example.com",
"tariff": {
"id": 4,
"name": "Enterprise",
"identifier": "enterprise",
"days_left": 64,
"start_date": "2025-07-24T09:26:14.868326Z",
"end_date": "2025-12-23T09:26:14.868326Z",
"remaining_resources": {
"available_audio_minutes": 4994,
"available_call_minutes": 9655,
"available_text_tokens": 600000,
"available_image_tokens": 98
},
"usage": {
"used_audio_minutes": 5006,
"used_call_minutes": 0,
"used_text_tokens": 0,
"used_image_tokens": 9902
},
"transcription_enabled": true,
"image_generation_enabled": true,
"calls_enabled": true
},
"directories": [
{ "id": 70, "name": "Продвижение сайта" }
],
"last_tasks": [
{
"directory_id": null,
"status": "completed",
"id": "b7a62594-a664-4519-b0de-077b5522e245",
"created_at": "2025-10-20T08:45:25.670423Z",
"file_path": "exten-110-060865882-20251020-112158-1760948518.13620249.wav",
"task_length": 6.4
},
{
"directory_id": null,
"status": "completed",
"id": "04a7b144-e43b-4792-affa-65a030c1b6bf",
"created_at": "2025-10-20T08:45:22.964481Z",
"file_path": "q-888-060501523-20251020-114310-1760949769.13620656.wav",
"task_length": 2.0
}
],
"call_activity_tree": {
"2025": { "10": { "01": 247, "02": 316 } }
}
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| message | string | Сообщение об успешной авторизации. |
| error_code | int | Код ошибки (0 при успехе). |
| token | string (JWT) | Токен авторизации для приватных методов. |
| locale | string | Язык по умолчанию для пользователя. |
| user_id | int | Идентификатор пользователя. |
| string | Email пользователя. | |
| tariff | object | Информация об активном тарифе пользователя (см. поля ниже). |
| tariff.id | int | Идентификатор тарифа. |
| tariff.name | string | Название тарифа. |
| tariff.identifier | string | Уникальный идентификатор тарифа. |
| tariff.days_left | int | Количество дней до окончания тарифа. |
| tariff.start_date | datetime | Дата начала действия тарифа (ISO 8601). |
| tariff.end_date | datetime | Дата окончания действия тарифа (ISO 8601). |
| 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.used_audio_minutes | int | Израсходовано минут аудио. |
| tariff.usage.used_call_minutes | int | Израсходовано минут звонков. |
| tariff.usage.used_text_tokens | int | Израсходовано текстовых токенов. |
| tariff.usage.used_image_tokens | int | Израсходовано токенов изображений. |
| tariff.transcription_enabled | bool | Поддержка транскрибации включена. |
| tariff.image_generation_enabled | bool | Поддержка генерации изображений включена. |
| tariff.calls_enabled | bool | Поддержка звонков включена. |
| directories | array | Список директорий пользователя. |
| directories[].id | int | Идентификатор директории. |
| directories[].name | string | Название директории. |
| last_tasks | array | Последние задачи пользователя (до 5 шт.). |
| last_tasks[].directory_id | int \ | null |
| last_tasks[].status | string | Статус задачи. |
| last_tasks[].id | string (uuid) | Публичный код задачи (code_uuid). |
| last_tasks[].created_at | datetime | Дата/время создания (ISO 8601, Z). |
| last_tasks[].file_path | string | Имя файла (для аудио/звонков). |
| last_tasks[].task_length | number | Длительность, минуты. |
| call_activity_tree | object | Дерево активности звонков по годам/месяцам/дням. |
2) Счёт (Баланс)
Получить текущий баланс и данные активного тарифа
GET /user/tariff
Возвращает информацию об активном тарифе пользователя, остатках ресурсов и расходе. Требуется JWT‑авторизация.
Пример запроса (cURL):
curl -X GET "https://<host>/user/tariff" -H "Authorization: Bearer <JWT>" -H "Accept-Language: ru"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| — | — | — | Нет параметров в URL/теле. Требуется заголовок Authorization: Bearer <JWT>. |
Пример ответа (200)
{
"success": true,
"errorcode": 0,
"tariff": {
"id": 4,
"name": "Enterprise",
"identifier": "enterprise",
"days_left": 64,
"text_tokens": 600000,
"image_tokens": 98,
"limits": {
"audio_minutes": 10000,
"call_minutes": 9655,
"text_tokens": 600000,
"image_tokens": 10000,
"report_count": 25,
"video_minutes": 3000,
"chat_count": 500
},
"remaining_resources": {
"available_audio_minutes": 4994,
"available_call_minutes": 9655,
"available_text_tokens": 600000,
"available_image_tokens": 98,
"available_report_count": 24,
"available_video_minutes": 2980,
"available_chat_count": 500
},
"usage": {
"used_audio_minutes": 5006,
"used_call_minutes": 0,
"used_text_tokens": 0,
"used_image_tokens": 9902,
"used_report_count": 1,
"used_video_minutes": 20,
"used_chat_count": 0
},
"transcription_enabled": true,
"image_generation_enabled": true,
"calls_enabled": true,
"start_date": "2025-07-24T09:26:14.868326Z",
"end_date": "2025-12-23T09:26:14.868326Z",
"price": {
"currency": "USD",
"value": 99.9
}
}
}
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешного выполнения запроса. |
| errorcode | int | Код ошибки (0 при успехе). |
| tariff | object | Информация об активном тарифе пользователя (см. поля ниже). |
| tariff.id | int | Идентификатор тарифа. |
| tariff.name | string | Название тарифа. |
| tariff.identifier | string | Уникальный идентификатор тарифа. |
| tariff.days_left | int | Количество полных дней до окончания действия тарифа (округление вверх, минимум 0). |
| tariff.text_tokens | int | Legacy: дублирует remaining_resources.available_text_tokens для обратной совместимости. |
| tariff.image_tokens | int | Legacy: дублирует remaining_resources.available_image_tokens для обратной совместимости. |
| tariff.limits | object | Лимиты тарифа. |
| tariff.limits.audio_minutes | int | Максимум минут аудио по тарифу. |
| tariff.limits.call_minutes | int | Максимум минут звонков по тарифу. |
| tariff.limits.text_tokens | int | Максимум текстовых токенов. |
| tariff.limits.image_tokens | int | Максимум токенов генерации изображений. |
| tariff.limits.report_count | int | Лимит отчётов (business‑отчёты). |
| tariff.limits.video_minutes | int | Лимит минут видео. |
| tariff.limits.chat_count | int | Лимит обращений в чат‑аналитику. |
| 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.remaining_resources.available_report_count | int | Доступное количество отчётов. |
| tariff.remaining_resources.available_video_minutes | int | Доступные минуты видео. |
| tariff.remaining_resources.available_chat_count | int | Доступное количество обращений в чат‑аналитику. |
| tariff.usage | object | Фактически израсходованные ресурсы (рассчитываются как limit - remaining, не ниже 0). |
| tariff.usage.used_audio_minutes | int | Израсходованные минуты аудио. |
| tariff.usage.used_call_minutes | int | Израсходованные минуты звонков. |
| tariff.usage.used_text_tokens | int | Израсходованные текстовые токены. |
| tariff.usage.used_image_tokens | int | Израсходованные токены генерации изображений. |
| tariff.usage.used_report_count | int | Использованные отчёты. |
| tariff.usage.used_video_minutes | int | Израсходованные минуты видео. |
| tariff.usage.used_chat_count | int | Использовано обращений в чат‑аналитику. |
| tariff.transcription_enabled | bool | Включена ли транскрибация. |
| tariff.image_generation_enabled | bool | Включена ли генерация изображений. |
| tariff.calls_enabled | bool | Включена ли работа со звонками. |
| tariff.start_date | datetime | Дата начала действия тарифа (ISO 8601, UTC, Z). |
| tariff.end_date | datetime | Дата окончания действия тарифа (ISO 8601, UTC, Z). |
| tariff.price | object | (Опционально) Цена тарифа для региона из Accept-Language. |
| tariff.price.currency | string | Валюта. |
| tariff.price.value | number | Стоимость. |
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) | Публичный код задачи. |
Создание задачи на формирование отчёта (звонки/чаты)
POST /user/callreport — JSON
Создаёт задачу на формирование отчёта за период по вашим звонкам/чатам.
Пример запроса (cURL):
curl -X POST "https://<host>/user/callreport" -H "Authorization: Bearer <JWT>" -H "Accept-Language: ru" -H "Content-Type: application/json" -d '{
"start_date": "2025-10-01",
"end_date": "2025-10-31",
"report_type": "standard"
}'
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| start_date | date \ | datetime | да |
| end_date | date \ | datetime | да |
| report_type | string | нет | Тип отчёта: standard (по умолчанию) \ |
Пример ответа (200)
{
"success": true,
"error_code": 0,
"success_message": "Report task created",
"report_task_code": "b7a62594-a664-4519-b0de-077b5522e245",
"available_report_count": 7
}
Поле
available_report_countприсутствует только при типеbusinessи показывает остаток квоты отчётов после списания.
Описание параметров (ответ)
| Параметр | Тип | Описание |
| success | bool | Признак успешной постановки задачи. |
| error_code | int | Код ошибки (0 при успехе). |
| success_message | string | Сообщение об успехе. |
| report_task_code | string (uuid) | Публичный код задачи отчёта (GUID). |
| available_report_count | int | Остаток квоты отчётов (только для business). |
Возможные ошибки (HTTP 200, JSON)
| Код | Описание |
| 4023 | Неавторизован (нет/неверный JWT). |
| 4060 | Не переданы даты (start_date/end_date). |
| 4061 | Неверный формат дат. |
| 4062 | start_date позже end_date. |
| 4602 | Нет активного тарифа или исчерпана квота отчётов для business. |
| 5000 | Общая внутренняя ошибка. |
4) Получение результатов
Получить все задачи пользователя с указанными фильтрами
POST /tasks/filter
GET /tasks/filter
Назначение. Гибкая выборка задач по множеству критериев: базовые поля задачи, поиск по текстам, фильтры по аналитике звонков (только через *_id) и по ответам чек‑листов. Пагинация для обоих методов. Важно: дата‑фильтры применяются к Task.call_datetime (UTC).
Пример запроса (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",
"message": "эсим настройка",
"operator_name": "Иванов",
"call_type": "inbound",
"tags_any": "eSIM,APN",
"script_alignment_min": 60,
"customer_satisfaction_score_min": 7,
"tone_id": [1,2],
"resolved_status_id": 5,
"priority_id": 3,
"funnel_stage_id": [4,5],
"risk_signal_id": null,
"sales_signal_id": null,
"operator_politeness": [4,5],
"operator_politeness_min": 3,
"operator_politeness_max": 5,
"length_min": 3.5,
"length_max": 120,
"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 "message=эсим" --data-urlencode "operator_name=Иванов" --data-urlencode "call_type=inbound" --data-urlencode "tags_any=eSIM,APN" --data-urlencode "tone_id=1,2" --data-urlencode "priority_id=3" --data-urlencode "resolved_status_id=5" --data-urlencode "operator_politeness=4,5" --data-urlencode "operator_politeness_min=3" --data-urlencode "operator_politeness_max=5" --data-urlencode "length_min=3.5" --data-urlencode "length_max=120" --data-urlencode "checklist_id=7" --data-urlencode "answers=Да" --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 | нет | Подстроковый поиск по имени оператора (ILIKE). |
| message | string | нет | Поиск по текстам: CallsAnalysis.summary, TaskResult.original_text, TaskResult.normalized_text. |
| tone_id | int \ | int[] | нет |
| resolved_status_id | int \ | int[] | нет |
| priority_id | int \ | int[] | нет |
| funnel_stage_id | int \ | int[] | нет |
| risk_signal_id | int \ | int[] | нет |
| sales_signal_id | int \ | int[] | нет |
| 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 | int \ | int[] | нет |
| operator_politeness_min | int | нет | Нижняя граница оценки (1..5). |
| operator_politeness_max | int | нет | Верхняя граница оценки (1..5). |
| tags_any | string \ | string[] | нет |
| tags_all | string \ | string[] | нет |
| length_min | number | нет | Мин. длительность задачи (минуты) по Task.task_length. |
| length_max | number | нет | Макс. длительность задачи (минуты) по Task.task_length. |
| checklist_id | int | нет | Фильтр по вопросу чек‑листа. |
| answers | string \ | string[] | нет |
| page | int | нет | Номер страницы (по умолчанию 1). |
| per_page | int | нет | Размер страницы (по умолчанию 10). |
| Accept-Language | header | нет | Язык локализации (ru, en и т.п.). |
Примечания: -
tags_anyиtags_allпринимают CSV-строку или массив; дляGETможно передатьtags_any=a,b,c. - Если заданы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 | Длительность задачи в минутах (для chat/email возвращается 0). |
| tasks[].task_code | string (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
Создаёт новый фильтр или обновляет существующий по имени (для текущего пользователя). Поле criteria должно передаваться в том же формате, что и параметры эндпойнта /tasks/filter.
Пример запроса (cURL):
curl -X POST "https://<host>/tasks/filters/save" -H "Authorization: Bearer <JWT>" -H "Content-Type: application/json" -d '{
"name": "Критичные звонки — октябрь",
"criteria": {
"task_type": "call",
"status": "completed",
"date_from": "2025-10-01",
"date_to": "2025-10-31",
"message": "жалоба",
"call_type": "inbound",
"operator_name": "Иванов",
"tone_id": [1,2],
"resolved_status_id": 5,
"priority_id": 3,
"funnel_stage_id": [4,5],
"risk_signal_id": null,
"sales_signal_id": null,
"script_alignment_min": 60,
"customer_satisfaction_score_min": 8,
"operator_politeness": [4,5],
"operator_politeness_min": 3,
"operator_politeness_max": 5,
"tags_any": "eSIM,APN",
"length_min": 2,
"length_max": 90,
"checklist_id": 7,
"answers": ["Да","Частично"],
"page": 1,
"per_page": 12
}
}'
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| name | string | да | Название фильтра. Если существует — будет обновлён. |
| criteria | object (JSON) | да | Ключи соответствуют /tasks/filter: task_type, status, date_from, date_to, message, call_type, operator_name, tone_id, resolved_status_id, priority_id, funnel_stage_id, risk_signal_id, sales_signal_id, script_alignment_min/max, customer_satisfaction_score_min/max, operator_politeness (список значений 1..5), operator_politeness_min/max, tags_any, tags_all, length_min/max, checklist_id, answers, page, per_page. |
Пример успешного ответа (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_id": 3,
"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 с критериями фильтрации (см. /tasks/filter). |
| 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 | да | Идентификатор фильтра (в URL). |
Пример ответа (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) Загрузка файлов отчётов
В этом разделе собраны методы для скачивания готовых файлов отчётов и экспортов.
Важно: метод /get_file требует JWT‑авторизацию; метод /user/callreport/file не требует JWT — доступ по task_code.
Отчёт по обращениям за период (callreport): PDF/HTML
GET /user/callreport/file?task_code=<GUID>&filename=<name>
Назначение. Скачивание готового файла отчёта, сформированного задачей типа callreport. Авторизация идёт только по GUID задачи (task_code).
Примеры запросов (cURL):
# PDF (без JWT)
curl -G "https://<host>/user/callreport/file" --data-urlencode "task_code=b7a62594-a664-4519-b0de-077b5522e245" --data-urlencode "filename=report_78157.pdf"
# HTML (без JWT)
curl -G "https://<host>/user/callreport/file" --data-urlencode "task_code=b7a62594-a664-4519-b0de-077b5522e245" --data-urlencode "filename=report_78157.html"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| task_code | string | да | Публичный GUID задачи (Task.code_uuid) или её короткий код. |
| filename | string | да | Имя файла, сохранённого на сервере (например, report_78157.pdf). |
Пример ответа (успех)
- Статус:
200 OK - Заголовки:
Content-Type: application/pdfилиtext/html;Content-Disposition: attachment; filename="<filename>" - Тело: бинарное содержимое файла.
Ошибки (HTTP 200, JSON)
| Код | Сообщение (кратко) |
| 4001 | task_code and filename are required |
| 4002 | Invalid filename |
| 4003 | Invalid path |
| 4041 | Task not found |
| 4044 | User id not found for task |
| 4043 | File missing on disk |
| 5001 | Внутренняя ошибка обработчика |
| 5000 | Общая внутренняя ошибка |
DOCX‑отчёт по звонку
GET /get_file?file_type=docx_call&task_code=<GUID>
Назначение. Генерация и скачивание DOCX‑отчёта по задаче‑звонку (структура: оригинальный текст, шапка, метаданные, аналитика, проблемы, чек‑лист).
Пример запроса (cURL):
curl -G "https://<host>/get_file" -H "Authorization: Bearer <JWT>" --data-urlencode "file_type=docx_call" --data-urlencode "task_code=b7a62594-a664-4519-b0de-077b5522e245"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| file_type | string | да | Всегда docx_call. |
| task_code | string | да | Публичный GUID задачи пользователя. |
Пример ответа (успех)
- Статус:
200 OK - Заголовки:
Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document;Content-Disposition: attachment; filename="call_report_task<ID>.docx" - Тело: бинарное содержимое DOCX.
Ошибки (HTTP 200, JSON)
| Код | Сообщение (кратко) |
| 4023 | Неавторизован (нет/неверный JWT) |
| 4045 | Нет task_code |
| 4021 | Задача не найдена у пользователя |
| 4056 | Неверный тип задачи (ожидается звонок) |
| 4057 | Нет данных анализа/чек‑листов |
| 5002 | Ошибка БД |
| 5000 | Общая внутренняя ошибка |
TXT‑отчёт по звонку
GET /get_file?file_type=txt_call&task_code=<GUID>
Назначение. Генерация и скачивание TXT‑отчёта по задаче‑звонку (основные поля аналитики и чек‑листы в текстовом виде).
Пример запроса (cURL):
curl -G "https://<host>/get_file" -H "Authorization: Bearer <JWT>" --data-urlencode "file_type=txt_call" --data-urlencode "task_code=b7a62594-a664-4519-b0de-077b5522e245"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| file_type | string | да | Всегда txt_call. |
| task_code | string | да | Публичный GUID задачи пользователя. |
Пример ответа (успех)
- Статус:
200 OK - Заголовки:
Content-Type: text/plain; charset=utf-8;Content-Disposition: attachment; filename="call_report_task<ID>.txt" - Тело: текстовый файл.
Ошибки (HTTP 200, JSON)
| Код | Сообщение (кратко) |
| 4023 | Неавторизован (нет/неверный JWT) |
| 4045 | Нет task_code |
| 4021 | Задача не найдена у пользователя |
| 4056 | Неверный тип задачи (ожидается звонок) |
| 4057 | Нет данных анализа/чек‑листов |
| 5002 | Ошибка БД |
| 5000 | Общая внутренняя ошибка |
DOCX‑отчёт по YouTube‑задаче
GET /get_file?file_type=docx_youtube&task_code=<GUID>
Назначение. Генерация и скачивание DOCX‑отчёта по задаче YouTube (оригинальный/нормализованный текст, выжимка, короткий пост, блог‑пост).
Пример запроса (cURL):
curl -G "https://<host>/get_file" -H "Authorization: Bearer <JWT>" --data-urlencode "file_type=docx_youtube" --data-urlencode "task_code=b7a62594-a664-4519-b0de-077b5522e245"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| file_type | string | да | Всегда docx_youtube. |
| task_code | string | да | Публичный GUID задачи пользователя. |
Пример ответа (успех)
- Статус:
200 OK - Заголовки:
Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document;Content-Disposition: attachment; filename="youtube_report_task<ID>.docx" - Тело: бинарное содержимое DOCX.
Ошибки (HTTP 200, JSON)
| Код | Сообщение (кратко) |
| 4023 | Неавторизован (нет/неверный JWT) |
| 4045 | Нет task_code |
| 4021 | Задача не найдена у пользователя |
| 4061 | Неверный тип задачи (ожидается youtubenew) |
| 4062 | Неверный статус задачи (ожидается completed) |
| 4057 | Нет данных (TaskResult пуст) |
| 5002 | Ошибка БД |
| 5000 | Общая внутренняя ошибка |
TXT‑отчёт по YouTube‑задаче
GET /get_file?file_type=txt_youtube&task_code=<GUID>
Назначение. Генерация и скачивание TXT‑отчёта по задаче YouTube.
Пример запроса (cURL):
curl -G "https://<host>/get_file" -H "Authorization: Bearer <JWT>" --data-urlencode "file_type=txt_youtube" --data-urlencode "task_code=b7a62594-a664-4519-b0de-077b5522e245"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| file_type | string | да | Всегда txt_youtube. |
| task_code | string | да | Публичный GUID задачи пользователя. |
Пример ответа (успех)
- Статус:
200 OK - Заголовки:
Content-Type: text/plain; charset=utf-8;Content-Disposition: attachment; filename="youtube_report_task<ID>.txt" - Тело: текстовый файл.
Ошибки (HTTP 200, JSON)
| Код | Сообщение (кратко) |
| 4023 | Неавторизован (нет/неверный JWT) |
| 4045 | Нет task_code |
| 4021 | Задача не найдена у пользователя |
| 4061 | Неверный тип задачи |
| 4062 | Неверный статус задачи |
| 4057 | Нет данных |
| 5002 | Ошибка БД |
| 5000 | Общая внутренняя ошибка |
Исходный аудиофайл звонка
GET /get_file?file_type=audio&task_code=<GUID>
Назначение. Скачивание исходного аудиофайла, прикреплённого к задаче‑звонку.
Пример запроса (cURL):
curl -G "https://<host>/get_file" -H "Authorization: Bearer <JWT>" --data-urlencode "file_type=audio" --data-urlencode "task_code=b7a62594-a664-4519-b0de-077b5522e245"
Описание параметров (запрос)
| Параметр | Тип | Обязательный | Описание |
| file_type | string | да | Всегда audio. |
| task_code | string | да | Публичный GUID задачи пользователя. |
Пример ответа (успех)
- Статус:
200 OK - Заголовки:
Content-Type: audio/*(по исходному файлу);Content-Disposition: attachment; filename="<original-or-server-name>" - Тело: бинарное содержимое аудиофайла.
Ошибки (HTTP 200, JSON)
| Код | Сообщение (кратко) |
| 4023 | Неавторизован (нет/неверный JWT) |
| 4045 | Нет task_code |
| 4021 | Задача не найдена у пользователя |
| 4046 | Файл не найден на диске |
| 5002 | Ошибка БД |
| 5000 | Общая внутренняя ошибка |
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