API документация

На данный момент работают следующие методы взаимодействия по RestAPI

Токен для определенного VPS (АТС) получается на странице настроек VPS есть кнопка копировать

Методы для запуска и настройки автообзвонов по API

Авторизация

Все методы проходят авторизация по методы Authorization: Bearer token в хедере каждого метода

Создать автообзвон

Метод POST
https://cld.alovoice.uz/mapi/addAutorule

Параметры multipart/form-data

record - .mp3 файл (обязательно)

recipients - .csv файл (обязательно)

name - Название (обязательно)

from - Дата начало промежутка обзвона формат:YYYY.MM.DD [2025.04.25] (обязательно)

to - Дата конца промежутка обзвона формат:YYYY.MM.DD [2025.04.25] (обязательно)

fromtime - Начало времени промежутка обзвона формат: HH:MM [18:10] (обязательно)

totime - Конец времени промежутка обзвона формат: HH:MM [20:59] (обязательно)

trunks - Номера линий (транков) для звонка, несколько транков разделяются запятыями: "712037006" (обязательно)

maxline - Максимум одновременных линия для звонков, цифра Пример: 2 (по умолчанию 1)

goodtime - Максимум секунд после поднятия трубки клиентом, чтобы считать звонок успешным, цифра Пример: 5 (по умолчанию 3)

tryes - Количество попыток для дозвона: цифра Пример: 5 (по умолчанию 2)

paused - 0 или 1, если 0 - при наступлении времени в параметрах запуститься обзвон иначе нет

timezone - Временная зона в формате utc +5 (по умолчанию "utc +5")

Пример вызова на cURL
curl --location --request POST 'https://cld.alovoice.uz/mapi/addAutorule' \
--header 'Authorization: Bearer 22dfbb22-d073-4422-b322-22949d14a022' \
--form 'record=@"/C:/Users/Tug/Music/001_ChooseLang_Uz_Ru.mp3"' \
--form 'recipients=@"/C:/Users/Tug/Downloads/recipients.csv"' \
--form 'name="TestAutocalls1"' \
--form 'from="2025.04.25"' \
--form 'to="2025.04.25"' \
--form 'fromtime="18:00"' \
--form 'totime="20:59"' \
--form 'trunks="712037006"' \
--form 'maxline="3"' \
--form 'goodtime="4"' \
--form 'tryes="5"' \
--form 'paused="0"' \
--form 'timezone="utc +5"'
Пример ответа сервера
{
    "id": 123,
    "name": "TestAutocalls1",
    "from": "2025-04-25",
    "to": "2025-04-25",
    "fromtime": "18:00:00",
    "totime": "20:59:59",
    "trunks": [ "253" ],
    "record": "/play/1231238fba81bfa19c254df73b123123",
    "recipients": 0,
    "maxline": "3",
    "goodtime": "4",
    "tryes": "5",
    "paused": "0",
    "status": "new",
    "timezone": 18000,
    "updatedAt": "2025-04-25T09:14:24.747Z",
    "createdAt": "2025-04-25T09:14:24.747Z"
}

Получить автообзвон

Метод GET

https://cld.alovoice.uz/mapi/getAutorule/123

Параметры multipart/form-data

id - индентификатор сохранённого прежде на сервере автообзвона

Пример вызова на cURL

curl --location --request GET 'https://cld.alovoice.uz/mapi/getAutorule/40' \
--header 'Authorization: Bearer 22dfbb22-d073-4422-b322-22949d14a022' \

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

{
    "id": 123,
    "name": "TestAutocalls1",
    "from": "2025-04-25",
    "to": "2025-04-25",
    "fromtime": "18:00:00",
    "totime": "20:59:59",
    "trunks": [ "253" ],
    "record": "/play/123458fba81bfa19c254df73b07123123",
    "recipients": 0,
    "maxline": "3",
    "goodtime": "4",
    "tryes": "5",
    "paused": "0",
    "status": "new",
    "timezone": 18000,
    "updatedAt": "2025-04-25T09:14:24.747Z",
    "createdAt": "2025-04-25T09:14:24.747Z"
}

Получить доступные линии (trunks)

Метод GET

https://cld.alovoice.uz/mapi/getMyTrunks

Параметры multipart/form-data

id - индентификатор сохранённого прежде на сервере автообзвона

Пример вызова на cURL

curl --location --request GET 'https://cld.alovoice.uz/mapi/getMyTrunks' \
--header 'Authorization: Bearer 22dfbb22-d073-4422-b322-22949d14a022' \

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

["551234567","712345678"]

Линии виртуального АТС

Получить доступные линии (trunks)

Метод GET

https://cld.alovoice.uz/mapi/getMyTrunks

Параметры multipart/form-data

id - индентификатор сохранённого прежде на сервере автообзвона

Пример вызова на cURL

curl --location --request GET 'https://cld.alovoice.uz/mapi/getMyTrunks' \
--header 'Authorization: Bearer 22dfbb22-d073-4422-b322-22949d14a022' \

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

["551234567","712345678"]

Конференц-звонок по запросу из API

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

  1. «Файл оповещения инициатору» (приветствие в начале),
  2. «Файл оповещения соединяемому» (сообщение абоненту перед разговором),
  3. «Файл оповещения следующей попытки» (информирует инициатора о переборе номеров при неудаче) и
  4. «Файл оповещения когда не удалось соединить» (финальное сообщение при недозвоне по всему списку).

Если файл не выбран, соответствующий этап проходит без звукового уведомления. Оповещения прикрепляются в разделы "файлы"

Метод POST
https://cld.alovoice.uz/requestcall/{token}

Параметры при соединении двух контактов (двухсторонний звонок) multipart/form-data

{

  "callfrom": {"phone": "712037006", "lang": "ru"},
  "callto": [{"phone": "994412860", "lang": "ru"}, {"phone": "977076909", "lang": "uz"}, {"phone": "914379766", "lang": "ru"}],
  "extid": "123123"
}

{

  "callfrom": {"phone": "712037006", "lang": "ru"},
  "callto": [{"queue": "1"}],
  "extid": "123123"
}

{

  "callfrom": {"phone": "712037006", "lang": "ru"},
  "callto": [{"queue": "6000"}],
  "extid": "123123"
}

Параметры при соединении контакта с IVR multipart/form-data

{
  "callto": "712037006",
  "ivrid": 222,
  "fromline": 712037006
  "extid": "123123"
}

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

callto - Номер принимающий звонок [XXXXXXX или +XXXXXXXXXXXX] (обязательно)

ivrid - ID IVR из настроек VPS в AloVoice

fromline - Номер линии который доступен VPSу в AloVoice

extid - ID или уникальный номер звонка в вашей системе

callfrom - Номер инициатора двухстороннего звонока [XXXXXXX или +XXXXXXXXXXXX] (обязательно если двухсторонний звонок)

lang - Язык общения по IVR (по умолчанию ru или выбор в IVR)

Ожидаемый результат (если есть обратный урл для результатов)

URL для обратных результатов передается специалистам AloVoice для регистрации

{
	id: <int> (ID звонка),
	from_number: <string> (Номер инициатора двухстороннего звонока),
	to_number: <string> (Номер принимавшего звонок),
	trunk_number: <string|int> (Номер линии),
	begin_time: <int> (Время звонка - UnixTimestamp),
	answer_time: <int> (Время ответа на звонок - UnixTimestamp),
	end_time: <int> (Время окончания звонка - UnixTimestamp),
	duration: <int> (Длительность звонка),
	dialstatus: <string> (Статус звонка),
	record: <string> (Ссылка к записи звонка),
	externalid: <int> (Внешний ID звонка),
	attempts: <array|object|string> (Попытки)
}

Входящий запрос по APIЗвонок Инициатору🔈 Файл: Оповещение инициатору(Если задан)Звонок Соединяемому(По списку)Успех?Нет / Занят🔈 Файл: След. попыткаСледующий номерСписок пуст🔈 Файл: Не удалосьКонец звонкаДа🔈 Файл: СоединяемомуСОЕДИНЕНИЕРазговор начат

POST события и методы начала звонка и вызова из CRM

Эти методы будут вызывать хендлера (URL вашей системы CRM/ERP и т.д. с обработчиком), который вам нужно создать в своей системе. Тогда при возникновении определённых событий в телефонии по этому хендлеру будет передаваться массив данных в вашу систему. Эти хендлеры вы должны будете сохранить в меню "ИНТЕГРАЦИИ" вашей vPBX https://cld.alovoice.uz/ 

POST Событие: Начало звонка

${callstart_handler_url}

В ответ handler должн вернуть

id - integer (max:12) или string (max:32)

зарегистрированного звонка в СРМ

Response (plaintext)

1

Bodyraw (json)
{
    "inner_phone": <integer>,
    "number": "+X.",
    "line": <integer|string>,
    "type": ("inc"|"out"|"int"),
    "start_time": <unix_timestamp>,
}
Example Request (curl)
curl --location -g '${callstart_handler_url}' \
--data '{
    "inner_phone": <integer>,
    "number": "+X.",
    "line": <integer|string>,
    "type": ("inc"|"out"|"int"),
    "start_time": <unix_timestamp>,
}'
Response
empty response

or

{
  callto: "99 123 45 67"
}
Example Response

No response body
This request doesn't return any response body

POST Событие: Конец звонка

${callend_handler_url}

Фиксируется окончание звонка по id переданным в начале звонка

Response (plaintext)

true

Коды статуса звонка

200 Успешный звонок.
304 Пропущенный звонок.
603 Отклонено.
603-S Вызов отменен.
403 Запрещено.
404 Неверный номер.
486 Занято.
484 Данное направление не доступно.
503 Данное направление не доступно.
480 Временно не доступен.
402 Недостаточно средств на счету.
423 Заблокировано
OTHER Не определен.

Body raw (json)
{
    "call_id": <integer|string>,
    "finish_time":  <unix_timestamp>,
    "duration":  <integer>,
    "status_code": ( 200 | 304 | 603 | 404 ),
    "record": "https://cld.alovoice.uz/....."
}
Example Request (curl)
curl --location -g '${callend_handler_url}' \
--data '{
    "call_id": <integer|string>,
    "finish_time":  <unix_timestamp>,
    "duration":  <integer>,
    "status_code": ( 200 | 304 | 603 | 404 ),
    "record": "https://cld.alovoice.uz/....."
}'
Example Response

No response body
This request doesn't return any response body

POST Метод: Инициация вызова из вашей системы (CRM/ERP и т.п.)

https://cld.alovoice.uz/outcall/YOUR TOKEN

Адрес для инициации исходящего звонока, требуется token

Response

Plain Text

true|false


Body raw (json)

{
    "call_id": "e5e456se456s56w456",
    "inner_phone": 2424,
    "number":"+998994412860",
    "user_id":  22
}
Example Request (curl)


curl --location 'https://cld.alovoice.uz/outcall/YOUR TOKEN' \
--data '{
    "call_id": "e5e456se456s56w456",
    "inner_phone": 2424,
    "number":"+998994412860",
    "user_id":  22
}
'


Example Response

No response body
This request doesn't return any response body

GET метод: Получить список внутренних номеров сотрудников

https://cld.alovoice.uz/getpeers/YOUR_TOKEN

Получение списка номеров для сотрудников, для совершения звонков и для приёма входящих обращений

Response 

json
[
    {
        "number":100, "secret":"voip123", "type":"sip" 
    },
    {
        "number":200, "secret":"voip123", "type":"sip" 
    },
    {
        "number":300, "secret":"voip123", "type":"sip" 
    }
]

Headers

token                    YOURTOKEN

Example Request (curl)

Метод: Получить список внутренних звонков (curl)

curl --location 'https://cld.alovoice.uz/getpeers/YOUR_TOKEN' \
--header 'token: YOURTOKEN'
Example Response
200OK
Body (json)

[
    {
        "id": 8396,
        "number": 2005,
        "username": 2005,
        "secret": "asdasdasd",
        "paystatus": "free",
        "status": "off",
        "block": 0,
        "dnd": false,
        "isws": false,
        "lastip": null,
        "isdef": null,
        "extnumber": "default",
        "rule": 0,
        "trunk_id": 37,
        "amoid": false,
        "bxid": false,
        "windowsapp": "https://cld.alovoice.uz/xxx",
        "mobileqr": "https://cld.alovoice.uz/xxx",
        "payto": 0
    },
    {
        "id": 395,
        "number": 2004,
        "username": 2004,
        "secret": "sxsxsx",
        "paystatus": "free",
        "status": "off",
        "block": 0,
        "dnd": false,
        "isws": false,
        "lastip": null,
        "isdef": null,
        "extnumber": "default",
        "rule": 0,
        "trunk_id": 37,
        "amoid": false,
        "bxid": false,
        "windowsapp": "https://cld.alovoice.uz/xxx",
        "mobileqr": "https://cld.alovoice.uz/xxx",
        "payto": 0
    },
    {...}
]

GET методы речевой аналитики записанных разговоров

GETМетод: Отправить запись звонка на AI-анализ



https://cld.alovoice.uz/callsendai/YOUR_TOKEN/CALL_ID
Example Request (curl)

curl --location 'https://cld.alovoice.uz/callsendai/YOUR_TOKEN/CALL_ID'
200 OK
Example Response

json
{
  "answer": {
    "begin_time": 1716209468,
    "aicallid": "664b4741bfsssa0ssdf2757ef7",
    "stereoaudio": "/stereo/CALL_ID"
  }
}
Headers (9)
Server nginx
Date Wed, 22 May 2024 06:20:56 GMT
Content-Type application/json; charset=utf-8
Content-Length 1674
Connection keep-alive
X-Powered-By Express
Access-Control-Allow-Origin *
ETag W/"68a-ltGHghH0LqScAJEW6o3W/k0iw+o"
X-Frame-Options ALLOWALL

GET Метод: Получить результаты анализа AI записи звонка

https://cld.alovoice.uz/callgetairesult/YOUR_TOKEN/CALL_ID
Example Request (curl)
curl --location 'https://cld.alovoice.uz/callgetairesult/YOUR_TOKEN/CALL_ID'

200 OK

Example Response
json
{
  "answer": {
    "begin_time": 1716207617,
    "aicallid": "664b400ccccc3235a7cd17f",
    "stalk": [
      {
        "begin": 1120,
        "end": 2960,
        "direction": "operator",
        "text": "assalomu alaykum",
        "fragment_id": "664b423209f8892adba7206f"
      },
      {
        "begin": 4720,
        "end": 6280,
        "direction": "client",
        "text": "assalomu alaykum",
        "fragment_id": "664b423209f8892adba72070"
      }
    ],
    "tags": [
      {
        "name": "Нет представления компании",
        "value": "",
        "visible": null,
        "tag_type": "rule"
      },
      {
        "name": "Нет дополнительной информации",
        "value": "",
        "visible": null,
        "tag_type": "rule"
      },
      {
        "name": "Приветсвие",
        "value": "Приветствие",
        "visible": null,
        "tag_type": "rule",
        "begin": 1120,
        "end": 2960,
        "match_text": "assalomu alaykum",
        "fragment_id": "664b423209f8892adba7206f"
      },
      {
        "name": "Прощание",
        "value": "Прощание",
        "visible": null,
        "tag_type": "rule",
        "begin": 233800,
        "end": 235880,
        "match_text": "salomat bo'ling",
        "fragment_id": "664b423209f8892adba7208f"
      },
      {
        "name": "Прощание",
        "value": "Прощание",
        "visible": null,
        "tag_type": "rule",
        "begin": 233800,
        "end": 235880,
        "match_text": "salomat",
        "fragment_id": "664b423209f8892adba7208f"
      }
    ],
    "stereoaudio": "/stereo/CALL_ID"
  }
}

Маршрут API запрос

При установлении типа маршрута "API запрос" и выдачи в параметры URL для выполнения запроса выполнится POST запрос с JSON объектом { from_number: "номер звонившего", line_number: "номер линии", queue_number: "номер очереди если есть",  direction: "направление звонка"} 

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

URL

https://ip.4u.uz/mywbhk.php

Body

{
  "from_number": "974244100",
  "line_number": "712037006",
  "queue_number": 6000,
  "direction": <inc|out>
}
В ответ должен запрос должен получить один из вариантов следующего шага для звонка, если в ответе будет не правильный тип шага или не правильный аргумент типа то звонок завершится сразу.
Перевод на внутренний номер:
Типа шага: "peer", аргумент "action_data" - внутренний номер сотрудника, пример объекта:

{
    action_type: "peer",
    action_data: "2000",
}
 
Перевод в отдел:
Типа шага: "queue", аргумент "action_data" - номер отдела, пример объекта: 

{
    action_type: "queue",
    action_data: "6000",
}
 
Перевод в IVR голосовое меню:
Типа шага: "ivr", аргумент "action_data" - ID голосового меню из настроек, пример объекта: 

{
    action_type: "ivr",
    action_data: "111",
}
 
Звонок на внешний номер:
Типа шага: "trunk", аргумент "action_data" - Номер мобильного или городского телефона кому надо звонить, пример объекта: 

{
    action_type: "trunk",
    action_data: "998765432",
}
 
Завершить звонок с голосовым уведомлением или без уведомления:
Типа шага: "hangup", аргумент "action_data" - ID звукового файла из списка. если не задать action_data - то звонок завершиться сразу, пример объекта: 

{
    action_type: "hangup",
    action_data: "123",
}