Platform HTTP API

Формат взаимодействия

Запросы к API выполняются по протоколу HTTP. Входные и выходные структуры данных передаются в теле запроса и ответа в формате JSON.

Авторизация

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

Для этого каждый запрос должен содержать заголовок, либо аргумент X-Authorization с токеном соединения в формате AccessKey token,

Например заголовком:
POST /apps/activate HTTP/1.1
Host: api.unibell.ru
X-Authorization: AccessKey d8ac9959r12b43545da9034
или
Authorization: Basic d8ac9959r12b43545da9034

либо параметром:
POST api.unibell.ru/apps/activate?X-Authorization=AccessKey d8ac9959r12b43545da9034

Формат ответов

JSON схема любого ответа содержит параметр status типа string со следующими значениями:

Значение statusОписание
okБез ошибок
invalidAccessKeyErrorНеверный AccessKey
requiredJsonErrorВ теле запроса требуется JSON
invalidSchemeErrorНеверная схема JSON
invalidDataErrorОшибочные входные данные
prohibitedForAppErrorЗапрещено для данного приложения
prohibitedForServiceErrorЗапрещено для данной услуги
rpcErrorКоммуникационная ошибка

Например:

    {
        …
        “status”: “ok”
        ....
    }

Некоторые GET запросы поддерживают постраничный вывод. Для управления постраничным выводом используются следующие параметры:

ПараметрОписание
pageЗапрашиваемый номер страницы
per_pageКоличество элементов на странице
disable_paginationОтключить постраничный вывод

Например,

GET api.unibell.ru/media?page=1&per_page=10

В ответе на такой запрос будет содержаться json объект pagination:

    {
        …
        "pagination": {
            "totalItems": 2,
            "currentPage": 1,
            "totalPages": 1
        }
        ....
    }

где:

ПараметрОписание
totalItemsОбщее количество элементов
currentPageПорядковый номер страницы
totalPagesОбщее количество страниц

Формат запросов

Управление медиатекой

Медиатека — иерархическое хранилище различных файлов пользователя, напоминающее файловую систему. Объектами хранения медиатеки являются файлы и папки. Файлы могут быть разбиты по папкам. Доступ к медиатеке осуществляется с помощью ЛК или данного API.

ПараметрОписание
totalItemsОбщее количество элементов
currentPageПорядковый номер страницы
totalPagesОбщее количество страниц

Получение списка всех объектов

Запрос

GET api.unibell.ru/media

Ответ

    {
        "status":  "ok",
        "pagination": {
            "totalItems":  2,
            "currentPage":  1,
            "totalPages":  1
        },
        "media": [
            {
                "createdDateTime":  "2020-02-12 18:09:10",
                "id":  65,
                "name":  "Гимны",
                "isFolder":  1
            },
            {
                "createdDateTime":  "2020-03-04 13:17:47",
                "id":  74,
                "name":  такой молодой.mp3",
                "isFolder":  0
            }
        ]
    }

media — массив объектов медиатеки содержащие следующие параметры:

ПараметрОписание
idУникальный идентификатор медиаресурса
nameНаименование
createdDateTimeДата\время загрузки
isFolderПризнак того, что данный объект является папкой. 1 — да, 0 — нет

Получение конкретного объекта

Запрос

GET api.unibell.ru/media/id, где id — уникальный идентификатор медиаресурса

Ответ

Для папок возвращается список вложенных файлов:

    {
        "status": "ok",
        "pagination": {
            "totalPages": 1,
            "totalItems": 2,
            "currentPage": 1
        },
        "media": [
            {
                "isFolder": 0,
                "name": "Гимн пионэров.mp3",
                "createdDateTime": "2020-02-12 18:19:05",
                "id": 67
            },
            {
                "isFolder": 0,
                "name": "Гимн СССР.mp3",
                "createdDateTime": "2020-02-12 18:19:18",
                "id": 68
            }
        ]
    } 

Для файлов возвращается запрашиваемый файл.

Создание папки

Запрос

POST api.unibell.ru/media

    {
        "name": "asdasd"
    }
ПараметрОписание
nameНаименование папки

Ответ

   {
        "status": "ok",
        "media": {
            "name": "asdasd2",
            "createdDateTime": "2020-04-06 18:44:45",
            "isFolder": 1,
            "id": 111
        }
    } 

Загрузка файла

Запрос

POST api.unibell.ru/media — помещает файл в корневую папку
POST api.unibell.ru/media/folder_id — помещает файл в указанную папку

Файл передается в теле запроса посредством Content-Type: multipart/form-data

Ответ

    {
        "status": "ok",
        "media": {
            "name": "test",
            "createdDateTime": "2020-04-06 18:44:45",
            "isFolder": 0,
            "id": 112
        }
    }

Переименование объекта

Запрос

PUT api.unibell.ru/media/id, где id — уникальный идентификатор медиаресурса

    {
        "name": "asdasd"
    }

Ответ

    {
        "status": "ok",
        "media": {
            "name": "asdasd",
            "createdDateTime": "2020-04-06 18:44:45",
            "isFolder": 1,
            "id": 111
        }
    } 

Удаление объекта

Запрос

DELETE api.unibell.ru/media/id, где id — уникальный идентификатор медиаресурса

Ответ

    {
        “status”: “ok”
    }

Управление приложениями

Активация приложения

Выполняет активацию заранее созданного приложения.

Запрос

POST api.unibell.ru/apps/activate

{
  "reference": "123456789",
  "sourceAddr": "XXXXXXXXXXX",
  "destAddr": "XXXXXXXXXXX",
  "scenarioData": "text=Привет, как дела?"
}
ПараметрТипОписание
referencestringПользовательский параметр с которым будет вызван callback по результатам выполнения приложения
sourceAddrstringИсходящий номер
destAddrstringНомер телефона получателя
scenarioDatastringПеременные сценария для данного приложения. Представляет из себя набор пар параметр=значение, разделенных знаком — &.

Ответ

    {
        “status”: “ok”
    }

Запуск приложения с повторами

Запуск приложения с повторами — это процесс инициирования вызова, при котором автоматически повторяется попытка в случае неудачного исхода, таких как занятость линии, отсутствие ответа, неудачный звонок или успешный ответ. Настройка повторов позволяет задать условия и параметры для каждого сценария.

Пример

Если звонок абоненту не удался из-за занятой линии (repeatBusy), автоматически повторяется попытка через установленный интервал (repeatBusyInt) до тех пор, пока не исчерпается количество попыток (repeatBusyCount).

Запрос

POST api.unibell.ru/apps/activate

Тело запроса

{
  "numberId": 14019763,
  "abonentListId": 13296,
  "startDateTime": "2024-10-31 09:00:00",
  "workStartTime": "2024-10-31 09:00:00",
  "workEndTime": "2024-10-31 21:00:00",
  
  "isRepeat": 1,
  "repeatBusy": 1,
  "repeatBusyCount": 10,
  "repeatBusyInt": 30,
  "repeatAnswered": 1,
  "repeatAnsweredCount": 15,
  "repeatAnsweredInt": 35,
  "repeatFailed": 1,
  "repeatFailedCount": 1,
  "repeatFailedInt": 1,
  "repeatNoAnswer": 1,
  "repeatNoAnswerCount": 150,
  "repeatNoAnswerInt": 150
}
ПараметрыТипОписание
numberId
или
numberPoolId
intID A-номера
ID Пула-номеров
abonentListIdintID B-номеров
startDateTimetimedatestampВременная метка начала момента запуска
workStartTimetimedatestampНачало работы сценария
workEndTimetimedatestampКонец работы сценария
isRepeatintРазрешение повторов:
0 — не совершаются
1 — совершаются
repeatBusyintПовтор при занятом номере
repeatAnsweredintПовтор при успешном ответе
repeatFailedintПовтор при неудачном звонке
repeatNoAnswerintПовтор при отсутствии ответа
repeatBusyCount,
repeatAnsweredCount,
repeatFailedCount,
repeatNoAnswerCount
intКоличество повторов
repeatBusyInt,
repeatAnsweredInt,
repeatFailedInt,
repeatNoAnswerInt
intИнтервал повторного звонка (в секундах)

Ответ

{
    "status": "ok",
    "requestId": "37b873131de218352d63f980cb71b41b"
}

При исполнении приложения могут быть настроены callback по протоколу HTTP/HTTPS. Callback настраивают на два вида события — начало исполнения(Start callback) и завершение исполнения(End callback). Поддерживается Basic авторизация. Параметры передаются в URL запроса.

Например,
GET www.host.ru?type=startCallback&reference=324234

Параметры передаваемые в startCallback:

ПараметрОписание
referenceПользовательский параметр переданный в запросе активации
typeТип callback запроса, в данном случае — startCallback

Параметры передаваемые в endCallback:

ПараметрОписание
referenceПользовательский параметр переданный в запросе активации
typeТип callback запроса, в данном случае — endCallback
stateРезультат выполнения приложения
errorКод ошибки, либо 0 — в случае успешного выполнения
durationДлительность вызова
appKeyAPI ключ приложения

где, state — результат выполнения сценария:

stateЗначениеОписание
STATE_OK2Приложение выполнено успешно
STATE_ERR5Ошибка в результате выполнения

error — код ошибки:

errorЗначениеОписание
ERR_NO_ANSWER16Абонент не взял трубку, попытки дозвона исчерпаны
ERR_BUSY17Абонент занят, попытки дозвона исчерпаны
ERR_ALERTING19Абонент не доступен
ERR_CONGESTION34Перегрузка каналов связи
ERR_PLAY1001Ошибка воспроизведения файла, файл не найден, неверный формат
ERR_TTS1002, 1017Ошибка TTS преобразования
ERR_ASR1003Ошибка ASR преобразования

Скачивание диалога

Для получения записи разговора, необходимо отправить запрос по следующему адресу:

GET https://api.unibell.ru/dialog_record_by_reference?reference=987654

Где:

  • reference — пользовательский параметр, полученный в endCallback.

Заголовки:

X-Authorization: AccessKey d8ac9959r12b43545da9034
или
Authorization: Basic d8ac9959r12b43545da9034

Если неверный AccessKey:

{
    "status": "invalidAccessKeyError"
}

Если запись по какой-либо причине не будет найдена, придёт ответ с кодом 404 NOT FOUND и телом ответа:

{
    "errorReason": "No records found"
}

Проверка баланса

Запрос

GET api.unibell.ru/balance

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

Ответ

     {
        "personalAccountId": "0000000000",
        "balance": "100.0"
     }
На этой странице