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. Получение файла отчета

    Название файла передать в метод:

    GET /get_file/file?task_code=<GUID>&filename=report.pdf 
    

    HTML - аналогично, только указываем html файл отчета

    Если у вас есть необходимость в специфической аналитике и отчетности по данным взаимодействия с вашими клиентами напишите ваш запрос на адрес электронной почты info@transcripto.ru мы сделаем все возможное для реализации индивидуального требования.

    1) Регистрация и авторизация

    Регистрация пользователя

    Для получения URL, логина и пароля для доступа к API Transcripto напишите письмо на адрес info@transcripto.ru, указав следующую информацию:

    После рассмотрения запроса вы получите доступ к API: уникальный URL, логин и пароль для авторизации.


    Получение токена (API KEY)

    POST /auth/login

    Для получения токена (api_key) вызовите метод /auth/login — получите токен для доступа к приватным методам API.

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

    curl -X POST "https://<host>/auth/login" \
      -H "Content-Type: application/json" \
      --data-raw '{
        "email": "user@example.com",
        "password": "secret123"
      }'
    

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

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

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

    {
      "call_activity_tree": {
        "2024": {
          "08": { "28": 1, "29": 1, "30": 1 }
        },
        "2025": {
          "10": {
            "01": 247, "02": 316, "03": 448, "04": 191, "05": 102,
            "06": 375, "07": 207, "08": 183, "09": 199, "10": 164,
            "11": 117, "12": 79, "13": 218, "14": 112, "15": 229,
            "16": 170, "17": 174, "18": 132, "19": 75, "20": 82
          }
        }
      },
      "directories": [ { "id": 70, "name": "Продвижение сайта" } ],
      "email": "transcripto@paymaster.md",
      "errorcode": 0,
      "last_tasks": [
        {
          "created_at": "2025-10-20T08:45:25.670423+00:00Z",
          "directory_id": null,
          "file_path": "exten-110-060865882-20251020-112158-1760948518.13620249.wav",
          "id": "b7a62594-a664-4519-b0de-077b5522e245",
          "status": "completed",
          "task_length": 6.4
        },
        {
          "created_at": "2025-10-20T08:45:22.964481+00:00Z",
          "directory_id": null,
          "file_path": "q-888-060501523-20251020-114310-1760949769.13620656.wav",
          "id": "04a7b144-e43b-4792-affa-65a030c1b6bf",
          "status": "completed",
          "task_length": 2.0
        }
      ],
      "message": "Login successful",
      "tariff": {
        "calls_enabled": true,
        "days_left": 64,
        "end_date": "2025-12-23T09:26:14.868326Z",
        "id": 4,
        "identifier": "enterprise",
        "image_generation_enabled": true,
        "name": "Enterprise",
        "remaining_resources": {
          "available_audio_minutes": 4994,
          "available_call_minutes": 9655,
          "available_image_tokens": 98,
          "available_text_tokens": 600000
        },
        "start_date": "2025-07-24T09:26:14.868326Z",
        "transcription_enabled": true,
        "usage": {
          "used_audio_minutes": 5006,
          "used_call_minutes": 0,
          "used_image_tokens": 9902,
          "used_text_tokens": 0
        }
      },
      "token": "<jwt>",
      "user_id": 83
    }
    

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

    ПараметрТипОписание
    call_activity_treeobjectСтруктура активности звонков по датам и годам
    call_activity_tree.{год}.{месяц}.{день}intКоличество звонков в этот день
    directoriesarrayСписок директорий пользователя
    directories[].idintИдентификатор директории
    directories[].namestringНазвание директории
    emailstringEmail пользователя
    errorcodeintКод ошибки (0 при успешной авторизации)
    last_tasksarrayСписок последних задач пользователя
    last_tasks[].created_atdatetimeДата и время создания задачи
    last_tasks[].directory_idint/nullID директории (если есть)
    last_tasks[].file_pathstringИмя файла задачи
    last_tasks[].idstringУникальный код задачи (UUID)
    last_tasks[].statusstringСтатус задачи
    last_tasks[].task_lengthfloatДлительность задачи (в минутах)
    messagestringСообщение от сервера (например, "Login successful")
    tariffobjectИнформация об активном тарифе пользователя
    tariff.idintИдентификатор тарифа
    tariff.namestringНазвание тарифа
    tariff.identifierstringУникальный идентификатор тарифа
    tariff.days_leftintКоличество дней до окончания тарифа
    tariff.calls_enabledboolПоддержка звонков
    tariff.transcription_enabledboolПоддержка транскрибации
    tariff.image_generation_enabledboolПоддержка генерации изображений
    tariff.start_datedatetimeДата начала действия тарифа
    tariff.end_datedatetimeДата окончания действия тарифа
    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.usageobjectИспользованные ресурсы тарифа
    tariff.usage.used_audio_minutesintИспользовано минут аудио
    tariff.usage.used_call_minutesintИспользовано минут звонков
    tariff.usage.used_text_tokensintИспользовано текстовых токенов
    tariff.usage.used_image_tokensintИспользовано токенов изображений
    tokenstringJWT-токен (api_key) для дальнейших запросов к API
    user_idintУникальный идентификатор пользователя

    2) Счёт (Баланс)

    Получить текущий баланс и данные активного тарифа

    GET /user/tariff

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

    curl -X GET "https://<host>/user/tariff" \
      -H "Authorization: Bearer <jwt>"
    

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

    ПараметрТипОбязательныйОписание
    Нет параметров в URL/теле. Требуется заголовок Authorization: Bearer <jwt>.

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

    {
      "success": true,
      "errorcode": 0,
      "tariff": {
        "id": 3,
        "name": "Pro",
        "identifier": "pro",
        "days_left": 12,
        "calls_enabled": true,
        "transcription_enabled": true,
        "image_generation_enabled": false,
        "start_date": "2025-10-01T00:00:00Z",
        "end_date": "2025-11-30T23:59:59Z",
        "remaining_resources": {
          "available_audio_minutes": 1150,
          "available_call_minutes": 300,
          "available_text_tokens": 1500000,
          "available_image_tokens": 0
        },
        "usage": {
          "used_audio_minutes": 350,
          "used_call_minutes": 20,
          "used_text_tokens": 500000,
          "used_image_tokens": 0
        }
      }
    }
    

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

    ПараметрТипОписание
    successboolПризнак успешного выполнения запроса
    errorcodeintКод ошибки (0 при успешном запросе)
    tariffobjectИнформация об активном тарифе пользователя
    tariff.idintИдентификатор тарифа
    tariff.namestringНазвание тарифа
    tariff.identifierstringУникальный идентификатор тарифа
    tariff.days_leftintКоличество дней до окончания тарифа
    tariff.calls_enabledboolПоддержка звонков включена
    tariff.transcription_enabledboolПоддержка транскрибации включена
    tariff.image_generation_enabledboolПоддержка генерации изображений включена
    tariff.start_datedatetimeДата начала действия тарифа (ISO 8601)
    tariff.end_datedatetimeДата окончания действия тарифа (ISO 8601)
    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.usageobjectИспользованные ресурсы тарифа
    tariff.usage.used_audio_minutesintИспользовано минут аудио
    tariff.usage.used_call_minutesintИспользовано минут звонков
    tariff.usage.used_text_tokensintИспользовано текстовых токенов
    tariff.usage.used_image_tokensintИспользовано токенов изображений

    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)Публичный код задачи.

    4) Получение результатов

    Получить все задачи пользователя с указанными фильтрами

    POST /tasks/filter
    GET /tasks/filter

    Назначение. Гибкая выборка задач по множеству критериев: базовые поля задачи, фильтры по аналитике звонков и по ответам чек‑листов. Пагинация поддерживается для обоих методов. Результат отсортирован по updated_at по убыванию.

    Пример запроса (POST, JSON в теле):

    curl -X POST "https://<host>/tasks/filter" \
      -H "Authorization: Bearer <JWT>" \
      -H "Content-Type: application/json" \
      -H "Accept-Language: ru" \
      -d '{
        "task_type": "call",
        "status": "completed",
        "date_from": "2025-10-01",
        "date_to": "2025-10-31",
        "operator_name": "Иванов",
        "call_type": "inbound",
        "tags_any": ["eSIM","APN"],
        "customer_satisfaction_score_min": 7,
        "script_alignment_min": 60,
        "checklist_id": 7,
        "answers": ["Да"],
        "page": 1,
        "per_page": 12
      }'
    

    Пример запроса (GET, только query‑параметры):

    curl -G "https://<host>/tasks/filter" \
      -H "Authorization: Bearer <JWT>" \
      -H "Accept-Language: ru" \
      --data-urlencode "task_type=call" \
      --data-urlencode "status=completed" \
      --data-urlencode "date_from=2025-10-01" \
      --data-urlencode "date_to=2025-10-31" \
      --data-urlencode "operator_name=Иванов" \
      --data-urlencode "tags_any=eSIM,APN" \
      --data-urlencode "customer_satisfaction_score_min=7" \
      --data-urlencode "page=1" \
      --data-urlencode "per_page=12"
    

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

    ПараметрТипОбязательныйОписание
    task_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нетПодстроковый поиск по имени оператора (без учёта регистра).
    prioritystringнетПриоритет из аналитики звонка.
    tags_anystring \string[]нет
    tags_allstring \string[]нет
    tonestringнетТональность разговора (из аналитики).
    problem_typestringнетТип проблемы (из аналитики).
    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_politenessboolнетВежливость оператора (по аналитике).
    resolved_statusstringнетСтатус разрешения обращения (по аналитике).
    checklist_idintнетФильтр по конкретному вопросу чек‑листа.
    answersstring \string[]нет
    pageintнетНомер страницы (по умолчанию 1).
    per_pageintнетРазмер страницы (по умолчанию 10).
    Accept-LanguageheaderнетЯзык локализации (ru, en и т.п.).

    Примечания: - Фильтрация по тегам (tags_any, tags_all) выполняется по текстовому полю тегов аналитики. - Если переданы и checklist_id, и answers, выбираются задачи, где ответ на этот вопрос совпадает с любым из указанных значений. - Сортировка фиксирована: updated_at DESC.

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

    {
      "tasks": [
        {
          "id": 12345,
          "type": "call",
          "status": "completed",
          "file_name": "rec_2025-10-20_0845.wav",
          "created_at": "2025-10-20T08:45:14+00:00",
          "updated_at": "2025-10-20T08:47:10+00:00",
    
          "operator_name": "Иванов",
          "call_time": "2025-10-20T08:45:00+00:00",
          "call_type": "inbound",
          "call_date": "2025-10-20",
    
          "error_message": null,
          "directory_id": 123,
          "task_length": 64.2,
          "task_code": "9289bd97-ac8c-41b3-bce8-fbcd86f1da7c",
          "report_type": null,
          "customer_satisfaction_score": 8
        }
      ],
      "pagination": {
        "current_page": 1,
        "per_page": 12,
        "total_tasks": 34,
        "total_pages": 3
      }
    }
    

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

    ПараметрТипОписание
    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Длительность разговора в секундах для call; 0 для chat/email.
    tasks[].task_codestringПубличный уникальный код задачи (code_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

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

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

    curl -X POST "https://<host>/tasks/filters/save"   -H "Authorization: Bearer <JWT>"   -H "Content-Type: application/json"   -d '{
        "name": "Критичные звонки — октябрь",
        "criteria": {
          "task_type": "call",
          "priority": "Высокий",
          "date_from": "2025-10-01",
          "date_to": "2025-10-31",
          "operator_politeness": true,
          "customer_satisfaction_score_min": 8
        }
      }'
    

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

    ПараметрТипОбязательныйОписание
    namestringдаЧеловекочитаемое название фильтра. Если фильтр с таким именем уже существует у пользователя — будет обновлён.
    criteriaobject (JSON)даПроизвольные критерии фильтрации задач. Поддерживаются ключи, аналогичные эндпойнту фильтрации задач (например, task_type, status, date_from, date_to, priority, script_alignment_min, customer_satisfaction_score_min, operator_politeness, tags_any, tags_all, checklist_id, answers и т. д.).

    Пример успешного ответа (200)

    { "success": true, "message": "Filter created or updated" }
    

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

    ПараметрТипОписание
    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": "Высокий",
            "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 с критериями фильтрации.
    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даИдентификатор фильтра, который нужно удалить.

    Пример успешного ответа (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) Загрузка отчётов

    Общие принципы


    Получить PDF‑отчёт по задаче

    GET /user/callreport/file?task_code=<GUID>&filename=<file.pdf>

    Возвращает PDF‑отчёт, связанный с задачей task_code, если отчёт готов и файл доступен на диске.

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

    curl -G "https://<host>/user/callreport/file"   --data-urlencode "task_code=9360911d-34ce-4e1f-9259-2ba0a1b96ae7"   --data-urlencode "filename=report_78157.pdf"   -o report_78157.pdf
    

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

    ПараметрТипОбязательныйОписание
    task_codestring (GUID)даПубличный код задачи. Допустим формат без дефисов.
    filenamestringдаИмя файла отчёта (например, report_78157.pdf).

    Успешный ответ

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

    Пример: json { "success": false, "error_code": 4041, "error_message": "Task not found" }

    КодСообщение
    4001task_code and filename are required
    4041Task not found
    4042Report file path is not set
    4043File missing on disk
    5000Internal server error

    Получить HTML‑отчёт по задаче (если включено)

    GET /user/callreport/html?task_code=<GUID>&filename=<file.html>

    Возвращает HTML‑отчёт, связанный с задачей task_code. Поведение аналогично PDF‑эндпойнту, отличается только тип контента.

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

    curl -G "https://<host>/user/callreport/html"   --data-urlencode "task_code=9360911d-34ce-4e1f-9259-2ba0a1b96ae7"   --data-urlencode "filename=report_78157.html"   -o report_78157.html
    

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

    ПараметрТипОбязательныйОписание
    task_codestring (GUID)даПубличный код задачи. Допустим формат без дефисов.
    filenamestringдаИмя HTML‑файла отчёта (например, report_78157.html).

    Успешный ответ

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

    КодСообщение
    4001task_code and filename are required
    4041Task not found
    4042Report file path is not set
    4043File missing on disk
    5000Internal server error

    11) Коды ошибок

    Содержит полный список кодов ошибок API с их назначением — от неверного формата данных до внутренних ошибок сервера.

    Ниже приведены возможные коды ошибок API.

    КодОписание
    4001Неверный формат данных/параметров
    4002Отсутствует обязательный параметр
    4012Неверный/просроченный токен
    4020Не указан task_code
    4021Задача не найдена
    4023Неавторизовано
    4024Файл не загружен / ошибка скачивания
    4025Неподдерживаемый формат файла
    4026Ошибка кодировки файла
    4030–4037Ошибки валидации пользователя
    4033Пользователь не найден
    4034Тариф не найден
    4041Ресурс недоступен
    4043Неверная ссылка YouTube
    4044Нет активного тарифа
    4045Отсутствуют обязательные поля
    4046Сумма/валюта не совпадает с тарифом
    4047Неподдерживаемый file_type или валюта
    4050Недостаточно ресурсов тарифа
    4052Не удалось определить длительность аудио
    4053Чек-лист/запись не найдены
    4054Дублирующийся вопрос чек-листа
    4055Нельзя редактировать — уже есть ответы
    4056Доступ запрещён
    4057Данные анализа/результата не найдены
    4060Не переданы start_date/end_date
    4061Неверный формат даты
    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