Technomax API

Документация для разработчиков — интеграция голосовых и чат-ботов

Обзор API

Technomax предоставляет REST API для интеграции омниканальной платформы голосовых и чат-ботов в ваши системы.

Базовый URL

https://login.technomax.com.kz/api/iam/v1

Аутентификация

Все запросы к API требуют JWT-токен в заголовке Authorization:

Authorization: Bearer YOUR_JWT_TOKEN

Формат данных

API принимает и возвращает данные в формате JSON. Все запросы должны содержать заголовок:

Content-Type: application/json

Аутентификация

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

Вход пользователя

Аутентификация пользователя и получение JWT-токена.

POST /auth/login

Параметры запроса

Параметр Тип Обязательный Описание
email String Да Email пользователя
password String Да Пароль пользователя
companyId Integer Нет ID компании
ttl Integer Нет Время жизни токена (секунды)
codeTfa String Нет Код двухфакторной аутентификации

Пример запроса

curl -X POST https://login.technomax.com.kz/api/iam/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "password": "***"
  }'

Ответ

Параметр Тип Описание
token String JWT-токен доступа для обращений к API платформы Technomax
refreshToken String Refresh-токен для получения нового токена после истечения текущего

Пример ответа

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "refreshToken": "dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4..."
}

Коды ответа

200 Успешная аутентификация
400 Неверные параметры запроса
426 Требуется двухфакторная аутентификация
5XX Ошибка сервера

Выход пользователя

Удаление токена аутентификации.

POST /auth/logout

Пример запроса

curl -X POST https://login.technomax.com.kz/api/iam/v1/auth/logout \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

Коды ответа

200 Успешный выход
400 Неверный токен
5XX Ошибка сервера

Обновление токена

Получение нового токена доступа с использованием refresh-токена.

POST /auth/refresh

Параметры запроса

Параметр Тип Обязательный Описание
refreshToken String Да Refresh-токен из предыдущего ответа

Пример запроса

curl -X POST https://login.technomax.com.kz/api/iam/v1/auth/refresh \
  -H "Content-Type: application/json" \
  -d '{
    "refreshToken": "dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4..."
  }'

Ответ

Возвращает новые token и refreshToken в том же формате, что и /auth/login.

Пользователи

Управление пользователями системы.

Список пользователей

GET /users

Детали пользователя

GET /users/{userId}

Создание пользователя

POST /users

Обновление пользователя

PUT /users/{userId}

Сообщения

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

Создание сообщения

POST /messaging/batch

Список сообщений

GET /messaging/messages

Отмена отправки

POST /messaging/cancel

Боты

Управление голосовыми и чат-ботами платформы Technomax.

Список ботов

GET /bot/bots

Создание бота

POST /bot/bots

Детали бота

GET /bot/bots/{botId}

Обновление бота

PUT /bot/bots/{botId}

Запуск диалога

POST /bot/dialogs/start

Чат-сессии

Управление чат-сессиями и сообщениями.

Список чатов

GET /chat/chats

Создание чата

POST /chat/chats

Детали чата

GET /chat/chats/{chatId}

Сообщения чата

GET /chat/chats/{chatId}/messages

Отправка сообщения

POST /chat/chats/{chatId}/messages

Телефония — запуск звонков

API для создания заданий на автоматический обзвон и запуска одиночных исходящих звонков через платформу Technomax.

Базовый URL: https://twin24.ai/cis/api/v1

Все запросы требуют JWT-токен в заголовке Authorization: Bearer YOUR_TOKEN.

Создание задания на обзвон

Метод позволяет создать новое задание на автоматический обзвон. После успешного выполнения будет возвращён идентификатор созданного задания. Время запуска зависит от параметра startType.

POST /telephony/autoCall

Параметры запроса

Параметр Тип Обязательный Описание
name String Да Название задания
defaultExec String Да Всегда robot
defaultExecData String Да ID сценария бота для обзвона
secondExec String Да Действие при переадресации: end (завершить), ignore (ничего), ch (передать на канал)
secondExecData String Да, если secondExec=ch ID канала для перевода
cidType String Да Определяемый номер: default (по умолчанию для транка), gornum (один номер), pool (группа номеров)
cidData String Да, если cidType=gornum/pool ID сущности в cidType
startType String Да Режим запуска: manual (вручную), time (в указанное время)
startMoment String Да, если startType=time Дата и время начала (ГГГГ-ММ-ДД ЧЧ:ММ)
scheduleId String Нет ID расписания обзвона
callStrategy String Нет STEP_2_STEP — последовательная; PARALLEL — параллельная (CPS > 1)
cps Float Да Интенсивность обзвона. Формула: 1 + N/100 для N звонков/сек, 1 - N/100 для 1 звонка в N секунд
checkPhone Boolean Нет Проверка номера телефона
phoneNormalization String Нет Нормализация номера (например, RU)
sendReportAfterFinish Boolean Нет Отправить отчёт после завершения
webhookUrls Array Нет Массив объектов webhook для получения событий (см. раздел Вебхуки ниже)
additionalOptions Object Нет Дополнительные настройки: запись звонков, распознавание роботов, ФЗ-230 и др.
redialStrategyOptions Object Нет Стратегия перезвона: лимиты по кандидатам, номерам, обработка занят/не отвечает

Пример запроса

curl -X POST https://twin24.ai/cis/api/v1/telephony/autoCall \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{
    "name": "Тестовый обзвон",
    "defaultExec": "robot",
    "defaultExecData": "228cc4fa-92f2-4709-94e3-7344a96a5903",
    "secondExec": "ch",
    "secondExecData": "48a77bd7-8762-4e0f-a277-4ef77e36c41b",
    "cidType": "gornum",
    "cidData": "9a67dee5-398e-4570-9426-fbb3f067b270",
    "startType": "manual",
    "callStrategy": "STEP_2_STEP",
    "cps": 1.03,
    "checkPhone": true,
    "phoneNormalization": "RU",
    "sendReportAfterFinish": true,
    "webhookUrls": [
        {
            "url": "https://example.com/webhook",
            "partialResults": true,
            "delay": 4,
            "events": {
                "CALL_ENDED": {"name": "CALL_ENDED", "value": true},
                "CANDIDATE_CHANGED": {"name": "CANDIDATE_CHANGED", "value": true},
                "AUTOCALL_STATUS_CHANGED": {"name": "AUTOCALL_STATUS_CHANGED", "value": true}
            }
        }
    ],
    "additionalOptions": {
        "recordCall": true,
        "detectRobot": true,
        "fz230": true
    }
}'

Коды ответа

200 Задание создано, возвращён ID
400 Неверные параметры запроса
5XX Ошибка сервера

Запуск одиночного звонка

Метод создаёт задание на обзвон, добавляет кандидата и запускает звонок. Все настройки, кроме сценария бота, берутся из шаблона задания по умолчанию. В течение одних суток повторные вызовы добавляют кандидатов в уже созданное задание.

POST /telephony/autoCallCandidate/single

Параметры запроса

Параметр Тип Обязательный Описание
phone Array[String] Да Список номеров телефона для звонка
botSettingsId String Да ID сценария бота для звонка
variables Object Нет Пользовательские переменные кандидата (например, {"Имя": "Николай"})
timezone Integer Нет Часовой пояс (смещение от UTC+0 в секундах, от -43200 до 43200)
callbackData Object Нет Произвольные данные (ID клиента и т.д.), возвращаются в webhook без изменений

Пример запроса

curl -X POST https://twin24.ai/cis/api/v1/telephony/autoCallCandidate/single \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{
    "phone": ["79991234567"],
    "botSettingsId": "2656622a-57b2-478f-acf9-6167120d18bf",
    "variables": {
        "Имя": "Николай",
        "Возраст": "28"
    },
    "timezone": 16800,
    "callbackData": {
        "clientId": "12345"
    }
}'

Коды ответа

200 Звонок запущен
400 Неверные параметры запроса
5XX Ошибка сервера

Вебхуки (Webhooks)

Вебхуки — HTTP-обратные вызовы для получения событий от платформы. Система гарантированной доставки повторяет отправку в течение 24 часов при не-200 ответе (экспоненциальные интервалы).

IP-адрес отправителя: 87.251.83.190. Рекомендуется добавить в вайтлист весь диапазон: 87.251.83.160/27.

Важно: вебхуки могут приходить в некорректном порядке (например, CANDIDATE_CHANGED раньше CALL_ENDED).

Типы событий

Событие Описание
CALL_ENDED Вызов завершён
CANDIDATE_CHANGED Обновлён статус обработки кандидата
CALL_REDIRECTED Выполнен перевод на оператора
RECALL_SCHEDULED Запланирован перезвон
EFFICIENCY_REACHED Принудительно изменён признак результативности звонка
AUTOCALL_STATUS_CHANGED Смена статуса задания на обзвон

Пример payload: AUTOCALL_STATUS_CHANGED

{
    "event": "AUTOCALL_STATUS_CHANGED",
    "id": "b839e537-e055-4a26-a504-e1f8fb74c01f",
    "status": "HALTED",
    "occurredOn": "2025-07-18T07:03:58+00:00"
}

Статусы задания на обзвон

Статус Описание
PREPARINGЗадание готовится к запуску
READYЗадание готово к запуску
ERROR_PREPARINGОшибка подготовки задания
PAUSED_SCHEDULEПриостановлено по расписанию
PAUSED_NOBODYПриостановлено — некому звонить
PAUSED_NO_CIDПриостановлено — не выбран CallerID
PAUSED_NO_ROUTEПриостановлено — нет маршрута
PAUSED_NO_MONEYОстановлено из-за отрицательного баланса
HALTEDЗадание остановлено окончательно
TIMEOUTАварийная остановка
NO_NEXT_CALLНе удалось рассчитать время следующего звонка
DELETINGЗадание удаляется
MAX_CPSПревышен лимит CPS

Настройка webhook в задании

При создании задания через POST /telephony/autoCall укажите массив webhookUrls:

"webhookUrls": [
    {
        "url": "https://your-server.com/webhook",
        "partialResults": true,
        "delay": 4,
        "events": {
            "CALL_ENDED": {"name": "CALL_ENDED", "value": true},
            "CANDIDATE_CHANGED": {"name": "CANDIDATE_CHANGED", "value": true},
            "CALL_REDIRECTED": {"name": "CALL_REDIRECTED", "value": true},
            "RECALL_SCHEDULED": {"name": "RECALL_SCHEDULED", "value": true},
            "EFFICIENCY_REACHED": {"name": "EFFICIENCY_REACHED", "value": true},
            "AUTOCALL_STATUS_CHANGED": {"name": "AUTOCALL_STATUS_CHANGED", "value": true}
        }
    }
]

Параметры: url — адрес для получения webhook; partialResults — получать промежуточные результаты; delay — задержка перед отправкой (секунды); events — какие события получать.

Коды ошибок

API возвращает стандартные HTTP-коды и JSON-объекты с описанием ошибок.

Формат ошибки

{
  "timestamp": 1544098870,
  "type": "MyNamespace\\MyClass",
  "error": "Описание ошибки",
  "details": {
    "additional": "information"
  }
}

Основные коды

Код Описание
200 Успешный запрос
400 Неверные параметры запроса
426 Требуется двухфакторная аутентификация
5XX Внутренняя ошибка сервера