API документация
На данный момент работают следующие методы взаимодействия по RestAPI
Токен для определенного VPS (АТС) получается на странице настроек VPS есть кнопка копировать
- Методы для запуска и настройки автообзвонов по API
- Линии виртуального АТС
- Конференц-звонок по запросу из API
- POST события и методы начала звонка и вызова из CRM
- GET метод: Получить список внутренних номеров сотрудников
- GET методы речевой аналитики записанных разговоров
- Маршрут API запрос
Методы для запуска и настройки автообзвонов по 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
«Вызов (конференция) по запросу» автоматически соединяет инициатора с абонентами из заданного списка. Сначала звонок поступает инициатору, после его ответа система последовательно обзванивает номера получателей. Для управления сценарием звонка предусмотрены четыре опциональных аудиофайла:
- «Файл оповещения инициатору» (приветствие в начале),
- «Файл оповещения соединяемому» (сообщение абоненту перед разговором),
- «Файл оповещения следующей попытки» (информирует инициатора о переборе номеров при неудаче) и
- «Файл оповещения когда не удалось соединить» (финальное сообщение при недозвоне по всему списку).
Если файл не выбран, соответствующий этап проходит без звукового уведомления. Оповещения прикрепляются в разделы "файлы"
Метод 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> (Попытки)
}
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 и т.п.)
Адрес для инициации исходящего звонока, требуется token
Response
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
[
{
"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
[
{
"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'
Example Response
{
"answer": {
"begin_time": 1716209468,
"aicallid": "664b4741bfsssa0ssdf2757ef7",
"stereoaudio": "/stereo/CALL_ID"
}
}
Headers (9)
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
{
"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>
}
{
action_type: "peer",
action_data: "2000",
}
{
action_type: "queue",
action_data: "6000",
}
{
action_type: "ivr",
action_data: "111",
}
{
action_type: "trunk",
action_data: "998765432",
}
{
action_type: "hangup",
action_data: "123",
}