NAV
http cURL JavaScript (fetch)
  • Введение
  • 1) Регистрация и авторизация
  • 2) Счёт (Баланс)
  • 3) Задачи
  • 4) Получение результатов
  • 5) Чек-листы
  • 6) Директории
  • 7) Категории звонков
  • 8) Поисковые фильтры
  • 9) Скрипты проверки звонков
  • 10) Загрузка файлов отчётов
  • 11) Коды ошибок
  • 12) Тарифы
  • Введение

    Transcripto API — это REST-интерфейс для подключения к интеллектуальной системе, которая автоматически транскрибирует звонки, анализирует чаты и формирует аналитические и бизнес-отчёты.

    API позволяет встроить обработку клиентских коммуникаций прямо в вашу CRM, колл-центр или корпоративную платформу — от загрузки данных до получения метрик и готовых визуальных отчётов.


    Как это работает

    1. Импорт звонков и сообщений

    Вы можете передавать данные несколькими способами:

    Система автоматически создаёт задачу на обработку и сохраняет все данные в вашей учетной записи.

    2. Преобразование речи в текст

    Загруженные аудиозаписи транскрибируются, система превращает речь в текст, разделяет спикеров (оператор / клиент), фиксирует длительность, время и другие метаданные.

    Подробнее: детали задачи · список задач по фильтрам

    3. Анализ и извлечение метрик

    ИИ-модуль анализирует полученные тексты:

    Результаты сохраняются в базе данных и доступны по API в виде структурированного JSON-документа.

    Подробнее: calls_analysis

    4. Отчёты и аналитика

    Transcripto формирует два типа отчётов:

    Оба вида отчётов доступны в формате 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>"
      }'
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    emailstringдаЭл. почта пользователя.
    password_hashstringдаХэш пароля пользователя.
    captcha_tokenstringдаТокен 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 } }
      }
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    messagestringСообщение об успешной авторизации.
    error_codeintКод ошибки (0 при успехе).
    tokenstring (JWT)Токен авторизации для приватных методов.
    localestringЯзык по умолчанию для пользователя.
    user_idintИдентификатор пользователя.
    emailstringEmail пользователя.
    tariffobjectИнформация об активном тарифе пользователя (см. поля ниже).
    tariff.idintИдентификатор тарифа.
    tariff.namestringНазвание тарифа.
    tariff.identifierstringУникальный идентификатор тарифа.
    tariff.days_leftintКоличество дней до окончания тарифа.
    tariff.start_datedatetimeДата начала действия тарифа (ISO 8601).
    tariff.end_datedatetimeДата окончания действия тарифа (ISO 8601).
    tariff.remaining_resources.available_audio_minutesintДоступные минуты аудио.
    tariff.remaining_resources.available_call_minutesintДоступные минуты звонков.
    tariff.remaining_resources.available_text_tokensintДоступные текстовые токены.
    tariff.remaining_resources.available_image_tokensintДоступные токены изображений.
    tariff.usage.used_audio_minutesintИзрасходовано минут аудио.
    tariff.usage.used_call_minutesintИзрасходовано минут звонков.
    tariff.usage.used_text_tokensintИзрасходовано текстовых токенов.
    tariff.usage.used_image_tokensintИзрасходовано токенов изображений.
    tariff.transcription_enabledboolПоддержка транскрибации включена.
    tariff.image_generation_enabledboolПоддержка генерации изображений включена.
    tariff.calls_enabledboolПоддержка звонков включена.
    directoriesarrayСписок директорий пользователя.
    directories[].idintИдентификатор директории.
    directories[].namestringНазвание директории.
    last_tasksarrayПоследние задачи пользователя (до 5 шт.).
    last_tasks[].directory_idint \null
    last_tasks[].statusstringСтатус задачи.
    last_tasks[].idstring (uuid)Публичный код задачи (code_uuid).
    last_tasks[].created_atdatetimeДата/время создания (ISO 8601, Z).
    last_tasks[].file_pathstringИмя файла (для аудио/звонков).
    last_tasks[].task_lengthnumberДлительность, минуты.
    call_activity_treeobjectДерево активности звонков по годам/месяцам/дням.

    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
        }
      }
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    errorcodeintКод ошибки (0 при успехе).
    tariffobjectИнформация об активном тарифе пользователя (см. поля ниже).
    tariff.idintИдентификатор тарифа.
    tariff.namestringНазвание тарифа.
    tariff.identifierstringУникальный идентификатор тарифа.
    tariff.days_leftintКоличество полных дней до окончания действия тарифа (округление вверх, минимум 0).
    tariff.text_tokensintLegacy: дублирует remaining_resources.available_text_tokens для обратной совместимости.
    tariff.image_tokensintLegacy: дублирует remaining_resources.available_image_tokens для обратной совместимости.
    tariff.limitsobjectЛимиты тарифа.
    tariff.limits.audio_minutesintМаксимум минут аудио по тарифу.
    tariff.limits.call_minutesintМаксимум минут звонков по тарифу.
    tariff.limits.text_tokensintМаксимум текстовых токенов.
    tariff.limits.image_tokensintМаксимум токенов генерации изображений.
    tariff.limits.report_countintЛимит отчётов (business‑отчёты).
    tariff.limits.video_minutesintЛимит минут видео.
    tariff.limits.chat_countintЛимит обращений в чат‑аналитику.
    tariff.remaining_resourcesobjectТекущие остатки ресурсов по тарифу.
    tariff.remaining_resources.available_audio_minutesintДоступные минуты аудио.
    tariff.remaining_resources.available_call_minutesintДоступные минуты звонков.
    tariff.remaining_resources.available_text_tokensintДоступные текстовые токены.
    tariff.remaining_resources.available_image_tokensintДоступные токены генерации изображений.
    tariff.remaining_resources.available_report_countintДоступное количество отчётов.
    tariff.remaining_resources.available_video_minutesintДоступные минуты видео.
    tariff.remaining_resources.available_chat_countintДоступное количество обращений в чат‑аналитику.
    tariff.usageobjectФактически израсходованные ресурсы (рассчитываются как limit - remaining, не ниже 0).
    tariff.usage.used_audio_minutesintИзрасходованные минуты аудио.
    tariff.usage.used_call_minutesintИзрасходованные минуты звонков.
    tariff.usage.used_text_tokensintИзрасходованные текстовые токены.
    tariff.usage.used_image_tokensintИзрасходованные токены генерации изображений.
    tariff.usage.used_report_countintИспользованные отчёты.
    tariff.usage.used_video_minutesintИзрасходованные минуты видео.
    tariff.usage.used_chat_countintИспользовано обращений в чат‑аналитику.
    tariff.transcription_enabledboolВключена ли транскрибация.
    tariff.image_generation_enabledboolВключена ли генерация изображений.
    tariff.calls_enabledboolВключена ли работа со звонками.
    tariff.start_datedatetimeДата начала действия тарифа (ISO 8601, UTC, Z).
    tariff.end_datedatetimeДата окончания действия тарифа (ISO 8601, UTC, Z).
    tariff.priceobject(Опционально) Цена тарифа для региона из Accept-Language.
    tariff.price.currencystringВалюта.
    tariff.price.valuenumberСтоимость.

    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"
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    filefileдаАудиофайл звонка (WAV/MP3/OGG и др.). Минимальная длительность ≈ 2 сек.
    directory_idintнетID директории (значение 0 трактуется как null).
    operator_namestringнетИмя/метка оператора (по умолчанию global).
    client_idstringнетИдентификатор клиента.
    call_typestringнетinbound \
    call_datedateнетДата звонка YYYY-MM-DD.
    call_datetimedatetimeнетПолная дата/время в ISO 8601 с TZ (например, 2025-10-20T10:00:00+03:00).
    processing_typestringнетРежим постановки в очередь: standard \

    Пример ответа (200)

    {
      "id": 101,
      "error_code": 0,
      "code": "a1bc2d3e-4f56-7890-abcd-ef1234567890"
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    idintВнутренний идентификатор задачи.
    error_codeintКод ошибки (0 при успехе).
    codestring (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_urlstring (URL)даПрямая ссылка на аудиофайл.
    directory_idintнетID директории.
    operator_namestringнетИмя/метка оператора (по умолчанию global).
    client_idstringнетИдентификатор клиента.
    call_typestringнетinbound \
    call_datedateнетYYYY-MM-DD.
    call_datetimedatetimeнетISO 8601 с TZ.
    processing_typestringнетРежим: analysis \

    Пример ответа (200)

    {
      "id": 102,
      "error_code": 0,
      "code": "9360911d-34ce-4e1f-9259-2ba0a1b96ae7"
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    idintВнутренний идентификатор задачи.
    error_codeintКод ошибки (0 при успехе).
    codestring (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"
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    filefileдаАудиофайл. Минимальная длительность ≈ 2 сек.
    directory_idintнетID директории.
    file_langstringнетКод языка/локали (по умолчанию 00 — автоопределение).

    Пример ответа (200)

    {
      "id": 103,
      "error_code": 0,
      "code": "a1bc2d3e-4f56-7890-abcd-ef1234567890"
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    idintВнутренний идентификатор задачи.
    error_codeintКод ошибки (0 при успехе).
    codestring (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_pathstring (URL)даСсылка на видео.
    directory_idintнетID директории.
    file_langstringнетКод языка/локали (по умолчанию 00).

    Пример ответа (200)

    {
      "id": 104,
      "error_code": 0,
      "code": "b2cd3e4f-5678-90ab-cdef-0123456789ab",
      "demo": false
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    idintВнутренний идентификатор задачи.
    error_codeintКод ошибки (0 при успехе).
    codestring (uuid)Публичный код задачи.
    demoboolПризнак демо-режима (обычно 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"
      }'
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    textstring \nullнет
    chunksarray \nullнет
    operator_namestringнетИмя/метка оператора.
    call_datedateнетYYYY-MM-DD \

    Пример ответа (200)

    {
      "success": true,
      "error_code": 0,
      "success_message": "Chat analysis task created",
      "task_code": "c0ffee00-1234-5678-aaaa-bbbbbbbbbbbb"
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного добавления.
    error_codeintКод ошибки (0 при успехе).
    success_messagestringСообщение об успехе.
    task_codestring (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_datedate \datetimeда
    end_datedate \datetimeда
    report_typestringнетТип отчёта: 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 и показывает остаток квоты отчётов после списания.

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешной постановки задачи.
    error_codeintКод ошибки (0 при успехе).
    success_messagestringСообщение об успехе.
    report_task_codestring (uuid)Публичный код задачи отчёта (GUID).
    available_report_countintОстаток квоты отчётов (только для business).

    Возможные ошибки (HTTP 200, JSON)

    КодОписание
    4023Неавторизован (нет/неверный JWT).
    4060Не переданы даты (start_date/end_date).
    4061Неверный формат дат.
    4062start_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_codestring (UUID \legacy)нет
    task_idintнетВнутренний идентификатор задачи.
    date_fromdate \datetimeнет
    date_todate \datetimeнет
    task_typestringнетТип задачи: call, chat, email, audio, youtubenew, callreport.
    statusstringнетСтатус: pending, processing, audio_completed, completed, completed2, error.
    call_typestringнетТип звонка: inbound \
    operator_namestringнетПодстроковый поиск по имени оператора (ILIKE).
    messagestringнетПоиск по текстам: CallsAnalysis.summary, TaskResult.original_text, TaskResult.normalized_text.
    tone_idint \int[]нет
    resolved_status_idint \int[]нет
    priority_idint \int[]нет
    funnel_stage_idint \int[]нет
    risk_signal_idint \int[]нет
    sales_signal_idint \int[]нет
    script_alignment_minnumberнетМин. соответствие скрипту (0–100).
    script_alignment_maxnumberнетМакс. соответствие скрипту (0–100).
    customer_satisfaction_score_minintнетМин. CSAT (0–10).
    customer_satisfaction_score_maxintнетМакс. CSAT (0–10).
    operator_politenessint \int[]нет
    operator_politeness_minintнетНижняя граница оценки (1..5).
    operator_politeness_maxintнетВерхняя граница оценки (1..5).
    tags_anystring \string[]нет
    tags_allstring \string[]нет
    length_minnumberнетМин. длительность задачи (минуты) по Task.task_length.
    length_maxnumberнетМакс. длительность задачи (минуты) по Task.task_length.
    checklist_idintнетФильтр по вопросу чек‑листа.
    answersstring \string[]нет
    pageintнетНомер страницы (по умолчанию 1).
    per_pageintнетРазмер страницы (по умолчанию 10).
    Accept-LanguageheaderнетЯзык локализации (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
      }
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    tasksarrayСписок найденных задач.
    tasks[].idintИдентификатор задачи.
    tasks[].typestringТип задачи.
    tasks[].statusstringСтатус обработки.
    tasks[].file_namestring \null
    tasks[].created_atdatetime \null
    tasks[].updated_atdatetime \null
    tasks[].operator_namestring \null
    tasks[].call_timedatetime \null
    tasks[].call_typestring \null
    tasks[].call_datedate \null
    tasks[].error_messagestring \null
    tasks[].directory_idint \null
    tasks[].task_lengthnumberДлительность задачи в минутах (для chat/email возвращается 0).
    tasks[].task_codestring (uuid)Публичный код задачи.
    tasks[].report_typestring \null
    tasks[].customer_satisfaction_scoreint \null
    paginationobjectИнформация постраничной навигации.
    pagination.current_pageintТекущая страница.
    pagination.per_pageintРазмер страницы.
    pagination.total_tasksintОбщее число найденных задач.
    pagination.total_pagesintЧисло страниц.

    Получить детальные данные по задаче

    GET /gettask

    Назначение. Вернуть основную информацию о задаче: статусы, файлы, даты, длительность, краткий «сырой» текст/нормализованный текст (если есть), привязки и ошибки.

    Пример запроса (cURL):

    curl -G "https://<host>/gettask"   -H "Authorization: Bearer <JWT>"   --data-urlencode "task_code=9360911d-34ce-4e1f-9259-2ba0a1b96ae7"
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    task_codeuuid-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": "Оператор: Добрый день, Смайл Телеком, меня зовут Ольга..."
      }
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    error_codeintКод ошибки (0 при успехе).
    idintВнутренний идентификатор задачи.
    typestringcall \
    statusstringpending \
    file_namestring \null
    created_atdatetimeДата/время создания (ISO 8601, с TZ).
    updated_atdatetimeДата/время обновления (ISO 8601, с TZ).
    call_datedate \null
    error_messagestring \null
    directory_idint \null
    report_typestring \null
    task_codeuuid-stringПубличный GUID задачи.
    task_lengthnumberДлительность/размер исходных данных.
    task_resultobject \null

    Заметки


    Получить анализ по задаче

    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_codepath-uuidдаGUID задачи в пути URL.
    Accept-LanguageheaderнетЛокализация человекочитаемых текстов (если доступны).

    Пример ответа (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
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного ответа.
    error_codeintКод ошибки (0 при успехе).
    task_codeuuid-stringGUID задачи.
    call_datetimedatetimeВремя звонка (ISO 8601, с TZ).
    call_typestringinbound \
    duration_secintДлительность разговора в секундах.
    transcriptobjectКраткая статистика по расшифровке.
    transcript.languagestringЯзык транскрипции (BCP-47).
    transcript.turnsintКоличество реплик (диалоговых ходов).
    analysisobjectИтоговая аналитика по разговору.
    analysis.summarystringКраткое резюме разговора.
    analysis.sentimentstringОбщая тональность (positive/neutral/negative).
    analysis.scoresobjectНормированные метрики (например, CSAT).
    analysis.actionsstring[]Рекомендуемые следующие шаги.
    analysis.tagsstring[]Массив тегов по звонку.
    analysis.analysis_notesobjectДетализированные «заметки» по разговору (сигналы, намерения и т.п.).
    call_checklistsarrayРезультаты чек-листов по звонку.
    category_idsint[]Категории (если классификация выполнена).
    customer_satisfaction_scoreint \null

    Заметки

    5) Чек-листы

    API для управления вопросами чек-листа и работы с ответами по задачам.


    Получить активные вопросы чек-листа

    GET /checklist
    GET /checklist/{user_id} — опционально, для администратора

    Пример запроса (cURL):

    curl -X GET "https://<host>/checklist"   -H "Authorization: Bearer <JWT>"
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    user_idpath-intнетИдентификатор пользователя (вариант GET /checklist/{user_id}). Без параметра — активные чек-листы текущего пользователя.
    AuthorizationheaderдаBearer <JWT> токен.

    Пример ответа (200)

    {
      "success": true,
      "error_code": 0,
      "data": [
        { "id": 1, "question": "Оператор представился клиенту?", "is_active": true },
        { "id": 2, "question": "Оператор уточнил цель звонка?", "is_active": true }
      ]
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    error_codeintКод ошибки (0 при успехе).
    dataarrayСписок активных вопросов чек-листа.
    data[].idintИдентификатор вопроса.
    data[].questionstringТекст вопроса.
    data[].is_activeboolПризнак активности вопроса.

    Пагинация

    Не используется для данного метода (возвращаются все активные вопросы).


    Создать вопрос чек-листа

    POST /checklist

    Создаёт новый вопрос чек-листа для текущего пользователя.

    Пример запроса (cURL):

    curl -X POST "https://<host>/checklist"   -H "Authorization: Bearer <JWT>"   -H "Content-Type: application/json"   -d '{ "question": "Оператор представился клиенту?" }'
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    questionstringдаТекст вопроса чек-листа.

    Пример ответа (200)

    {
      "success": true,
      "error_code": 0,
      "message": "Checklist question created",
      "data": { "id": 101, "question": "Оператор представился клиенту?", "is_active": true }
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    error_codeintКод ошибки (0 при успехе).
    messagestringСлужебное сообщение об успешном создании.
    dataobjectСозданный вопрос чек-листа.
    data.idintИдентификатор вопроса.
    data.questionstringТекст вопроса.
    data.is_activeboolПризнак активности (по умолчанию 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_idpath-intдаИдентификатор вопроса в URL.
    questionstringдаНовый текст вопроса.

    Пример ответа (200)

    {
      "success": true,
      "error_code": 0,
      "message": "Checklist question updated",
      "data": { "id": 101, "question": "Оператор чётко представился клиенту?", "is_active": true }
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    error_codeintКод ошибки (0 при успехе).
    messagestringСообщение об успешном обновлении.
    dataobjectОбновлённый вопрос чек-листа.
    data.idintИдентификатор вопроса.
    data.questionstringТекст вопроса.
    data.is_activeboolПризнак активности.

    Удалить (скрыть) вопрос чек-листа

    POST /checklist/delete/{checklist_id}

    Удаляет/скрывает вопрос чек-листа.

    Пример запроса (cURL):

    curl -X POST "https://<host>/checklist/delete/101"   -H "Authorization: Bearer <JWT>"
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    checklist_idpath-intдаИдентификатор вопроса, передаётся в URL.

    Пример ответа (200)

    {
      "success": true,
      "error_code": 0,
      "message": "Checklist question deleted",
      "id": 101
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    error_codeintКод ошибки (0 при успехе).
    messagestringСообщение об успешном удалении/скрытии.
    idintИдентификатор удалённого вопроса.

    Получить ответы чек-листа по задаче

    GET /checklist/answer/{task_id}

    Возвращает ответы на вопросы чек-листа по конкретной задаче.

    Пример запроса (cURL):

    curl -X GET "https://<host>/checklist/answer/12345"   -H "Authorization: Bearer <JWT>"
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    task_idpath-intдаИдентификатор задачи.
    AuthorizationheaderдаBearer <JWT> токен.

    Пример ответа (200)

    {
      "success": true,
      "error_code": 0,
      "data": [
        { "checklist_id": 1, "question": "Оператор представился клиенту?", "answer": "Да" },
        { "checklist_id": 2, "question": "Оператор уточнил цель звонка?", "answer": "Нет" }
      ]
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    error_codeintКод ошибки (0 при успехе).
    dataarrayСписок ответов по задаче.
    data[].checklist_idintИдентификатор вопроса чек-листа.
    data[].questionstringТекст вопроса (для удобства клиента).
    data[].answerstringОтвет пользователя/оператора.

    Правила формирования полей

    Примеры элементов

    Вопрос чек-листа: json { "id": 7, "question": "Проговорил условия тарифа?", "is_active": true }

    Ответ по задаче: json { "checklist_id": 7, "question": "Проговорил условия тарифа?", "answer": "Да" }

    Заметки

    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": "Отдел продаж" }
      ]
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    error_codeintКод ошибки (0 при успехе).
    directoriesarrayСписок директорий пользователя.
    directories[].idintИдентификатор директории.
    directories[].namestringНазвание директории.

    Создать директорию

    POST /user/directories

    Создаёт новую директорию для организации задач пользователя.

    Пример запроса (cURL):

    curl -X POST "https://<host>/user/directories"   -H "Authorization: Bearer <JWT>"   -H "Content-Type: application/json"   -d '{ "name": "Новая директория" }'
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    namestringдаНазвание новой директории.

    Пример ответа (200)

    {
      "success": true,
      "error_code": 0,
      "directory": { "id": 123, "name": "Новая директория" }
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    error_codeintКод ошибки (0 при успехе).
    directoryobjectСозданная директория.
    directory.idintИдентификатор созданной директории.
    directory.namestringНазвание созданной директории.

    Удалить директорию

    DELETE /user/directories/delete/{directory_id}

    Удаляет указанную директорию. Внимание: путь содержит один directory_id в конце.

    Пример запроса (cURL):

    curl -X DELETE "https://<host>/user/directories/delete/123"   -H "Authorization: Bearer <JWT>"
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    directory_idpath-intдаИдентификатор удаляемой директории (передаётся в URL).

    Пример ответа (200)

    {
      "error_code": 0,
      "message": "Directory deleted successfully"
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    error_codeintКод ошибки (0 при успехе).
    messagestringСообщение об успешном удалении.

    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
      }'
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    qstringнетПоиск по части name/description.
    parent_idint \nullнет
    pageintнетНомер страницы (по умолчанию 1).
    per_pageintнетРазмер страницы (по умолчанию 20).
    Authorizationheaderда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
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    error_codeintКод ошибки (0 при успехе).
    itemsarrayМассив категорий на текущей странице.
    items[].idintИдентификатор категории.
    items[].namestringНазвание категории.
    items[].descriptionstring \null
    items[].parent_idint \null
    items[].children_countintКоличество дочерних категорий.
    items[].created_atdatetimeДата/время создания (ISO 8601).
    items[].updated_atdatetimeДата/время изменения (ISO 8601).
    totalintОбщее количество записей по фильтрам.
    pageintНомер текущей страницы.
    per_pageintРазмер страницы.

    Создать категорию

    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 }'
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    namestringдаНазвание категории.
    descriptionstringнетОписание.
    parent_idint \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"
      }
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    error_codeintКод ошибки (0 при успехе).
    success_messagestringСообщение об успешном сохранении.
    dataobjectСозданная категория (см. поля ниже).
    data.idintИдентификатор.
    data.namestringНазвание.
    data.descriptionstring \null
    data.parent_idint \null
    data.created_atdatetimeВремя создания (ISO 8601).
    data.updated_atdatetimeВремя изменения (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 }'
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    idpath-intдаИдентификатор категории в URL.
    category_idintнетИдентификатор в теле (перекрывает id из URL).
    namestringнетНовое название.
    descriptionstringнетНовое описание.
    parent_idint \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"
      }
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    error_codeintКод ошибки (0 при успехе).
    success_messagestringСообщение об успешном сохранении.
    dataobjectОбновлённая категория (см. поля в «Создать категорию»).

    Удалить категорию

    POST /user/call_categories/delete/{id}

    Удаляет категорию пользователя.

    Пример запроса (cURL):

    curl -X POST "https://<host>/user/call_categories/delete/12"   -H "Authorization: Bearer <JWT>"
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    idpath-intдаИдентификатор категории.

    Пример ответа (200)

    {
      "success": true,
      "error_code": 0,
      "message": "Deleted successfully"
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    error_codeintКод ошибки (0 при успехе).
    messagestringСообщение об успешном удалении.

    Коды ошибок (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
        }
      }'
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    namestringдаНазвание фильтра. Если существует — будет обновлён.
    criteriaobject (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" }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    messagestringСлужебное сообщение об операции.

    Возможные ошибки (HTTP 200, JSON)

    КодСообщение (пример)Описание
    4045Required fields are missingНе переданы обязательные поля name и/или criteria.
    5000Internal 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"
        }
      ]
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    countintКоличество найденных фильтров.
    filtersarrayМассив сохранённых фильтров.
    filters[].idintИдентификатор фильтра.
    filters[].namestringНазвание фильтра.
    filters[].criteriaobjectJSON с критериями фильтрации (см. /tasks/filter).
    filters[].created_atstring (ISO)Дата/время создания.

    Удалить сохранённый фильтр

    POST /tasks/filters/delete/{filter_id}

    Удаляет сохранённый фильтр по его идентификатору.

    Пример запроса (cURL):

    curl -X POST "https://<host>/tasks/filters/delete/42"   -H "Authorization: Bearer <JWT>"
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    filter_idpath-intдаИдентификатор фильтра (в URL).

    Пример ответа (200)

    { "success": true, "message": "Filter deleted" }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    messagestringСлужебное сообщение об операции.

    Возможные ошибки (HTTP 200, JSON)

    КодСообщение (пример)Описание
    4066Filter not foundФильтр с таким filter_id у текущего пользователя не найден.
    5000Internal server errorВнутренняя ошибка сервера.

    Заметки

    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
      }'
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    qstringнетПоиск по identifier/title (частичное совпадение).
    only_activeboolнетВозвращать только активные (true/1/yes).
    pageintнетНомер страницы (по умолчанию 1).
    per_pageintнетРазмер страницы (по умолчанию 20).
    Authorizationheaderда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"
        }
      ]
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    error_codeintКод ошибки (0 при успехе).
    totalintОбщее количество записей.
    pageintНомер текущей страницы.
    per_pageintРазмер страницы.
    itemsarrayСписок скриптов.
    items[].idintИдентификатор скрипта.
    items[].identifierstringУникальный идентификатор скрипта в рамках пользователя.
    items[].titlestringНазвание скрипта.
    items[].descriptionstring \null
    items[].is_activeboolПризнак активности.
    items[].versionintВерсия скрипта.
    items[].script_bodystringТекст скрипта (простой текст).
    items[].created_atdatetimeВремя создания (ISO 8601).
    items[].updated_atdatetimeВремя изменения (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": "Здравствуйте! Меня зовут ..."
      }'
    

    Описание параметров (запрос)

    ПараметрТипОбязательныйОписание
    identifierstringдаУникальный идентификатор скрипта (в рамках пользователя).
    titlestringдаНазвание скрипта (непустая строка).
    descriptionstringнетОписание скрипта.
    is_activeboolнетПризнак активности (по умолчанию true).
    versionintнетВерсия (по умолчанию 1).
    script_bodystringдаТекст скрипта (непустой простой текст).

    Пример ответа (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"
      }
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    error_codeintКод ошибки (0 при успехе).
    success_messagestringСообщение об успешном сохранении.
    dataobjectСозданный скрипт (поля аналогичны объекту в списке).

    Изменить скрипт

    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_idpath-int \intда
    identifierstringнетНовый уникальный идентификатор (не пустой, уникальный).
    titlestringнетНовое название (не пустое).
    descriptionstringнетНовое описание.
    is_activeboolнетНовый признак активности.
    versionintнетНовая версия (целое число).
    script_bodystringнетНовый текст скрипта (непустой простой текст).

    Пример ответа (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"
      }
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    error_codeintКод ошибки (0 при успехе).
    success_messagestringСообщение об успешном сохранении.
    dataobjectОбновлённый скрипт (поля аналогичны объекту в списке).

    Удалить скрипт

    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_idpath-int \intда

    Пример ответа (200)

    {
      "success": true,
      "error_code": 0,
      "message": "Deleted successfully"
    }
    

    Описание параметров (ответ)

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса.
    error_codeintКод ошибки (0 при успехе).
    messagestringСообщение об успешном удалении.

    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_codestringдаПубличный GUID задачи (Task.code_uuid) или её короткий код.
    filenamestringдаИмя файла, сохранённого на сервере (например, report_78157.pdf).

    Пример ответа (успех)

    Ошибки (HTTP 200, JSON)

    КодСообщение (кратко)
    4001task_code and filename are required
    4002Invalid filename
    4003Invalid path
    4041Task not found
    4044User id not found for task
    4043File 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_typestringдаВсегда docx_call.
    task_codestringдаПубличный GUID задачи пользователя.

    Пример ответа (успех)

    Ошибки (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_typestringдаВсегда txt_call.
    task_codestringдаПубличный GUID задачи пользователя.

    Пример ответа (успех)

    Ошибки (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_typestringдаВсегда docx_youtube.
    task_codestringдаПубличный GUID задачи пользователя.

    Пример ответа (успех)

    Ошибки (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_typestringдаВсегда txt_youtube.
    task_codestringдаПубличный GUID задачи пользователя.

    Пример ответа (успех)

    Ошибки (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_typestringдаВсегда audio.
    task_codestringдаПубличный GUID задачи пользователя.

    Пример ответа (успех)

    Ошибки (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Неверный формат даты
    4062start_date позже end_date
    4070Библиотека DOCX недоступна
    5000Внутренняя ошибка
    5002Ошибка базы данных
    5003Ошибка генерации отчёта

    12) Тарифы

    Базовые ставки


    Скидки по минутам и сообщениям

    Скидки применяются к базовым ставкам только для тарифов Enterprise и Enterprise+.

    ПланСкидкаЦена за минутуЦена за чат
    Pro3.00 ₽/мин1.00 ₽/чат
    Enterprise−10%2.70 ₽/мин0.90 ₽/чат
    Enterprise+−20%2.40 ₽/мин0.80 ₽/чат

    Таблица пакетов

    ПланВключено в пакетЦена за единицу в пакетеЦена пакета (₽)Перерасход в этом плане
    Pro5 000 мин + 5 000 чатов3.00 ₽/мин, 1.00 ₽/чат20 000 ₽3.00 ₽/мин, 1.00 ₽/чат
    Enterprise10 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.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