Модуль Автоинформатор
Предоставляет REST API для формирования кампаний по автоматическому набору внешних номеров
Если есть свободный сотрудник, то модуль набирает номер телефона из пула кампании
Когда клиент отвечает, выполняется соединение с внутренним номером очереди или сотрудника
Если внутренний номер занят, то вызов автоматически завершается
Авторизация в REST API
Для всех запросов, кроме локальных, требуется авторизация.
По умолчанию для авторизации можно использовать административный пароль web интерфейса.
Если необходимо ограничить права к настройкам АТС - то можно задействовать модуль «Управление доступом в систему».
Запрос
curl 'http://172.16.156.223/admin-cabinet/session/start' \
-X 'POST' --cookie-jar auth-cookies.txt \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
-H 'X-Requested-With: XMLHttpRequest' \
--data 'login=admin&password=adminpassword'«
login» - admin, имя пользователя web интерфейса«
password» - adminpassword, пароль пользователя web интерфейса«
172.16.156.223» - адрес сервера MikoP
Результат:
{"success":true,"reload":false,"message":[]}Пример выполнения запросов:
curl -b auth-cookies.txt \
'http://172.16.156.223pbxcore/api/sip/getPeersStatuses'Опросы
Позволяют организовать автоматический опрос клиента. Средствами API возможно описать перечень вопросов, связи между ними и варианты ответов.
Возможно использовать механизм генерации речи или готовые mp3 / wav файлы.
Добавление опроса
Пример cURL:
JSON='{
"name": "New polling",
"questions": [
{
"questionId": "1",
"questionText": "Добрый день, у нас есть новый товар, для заказа товара нажмите 1, не интересует - нажмите 2, для отказа от подписке нажмите 3",
"press": [
{
"key": "1",
"action": "playback",
"value": "\"Спасибо за выбор этого товара\"",
"valueOptions": "text"
},
{
"key": "3",
"action": "playback",
"value": "\"Спасибо за ваш ответ\"",
"valueOptions": "text"
}
],
"nextQuestion": ""
}
]
}';
curl -X POST -d "$JSON" http://127.0.0.1/pbxcore/api/module-dialer/v1/polling"
crmId" - идентификатор опроса, если указан, то будет создан новый опрос с этим ID либо отредактирован существующий, если пуст, то параметр будет назначен автоматически"
name" - наименование опроса"
questions" - массив вопросов"
question['questionId']" - порядковый номер (идентификатор) вопроса"
question['nextQuestion']" - идентификатор следующего вопроса"
question['questionText']" - текст вопроса, для возможности генерации Yandex SpeechKit"
question['lang']" - код языка для Yandex SpeechKit к примеру "ru-RU""
question['questionFile']" - полный путь к файлу wav, если указан, то "questionText" не используется"
press['key']" - добавочный номер, который должен нажать клиент"
press['action']" - действие, которое должно быть выполненоaction "
playback" - воспроизвести медиафайл, сохранить набранный номерaction "
dial" - набрать добавочный номер, завершить опросaction "
answer" - сохранить набранный клиентом номер
"
press['valueOptions']" - используется при "action "playback""option "
file" - следует указать полный путь к wav файлуoption "
text" - текст для возможности генерации Yandex SpeechKit
Пример ответа на запрос:
{
"result": true,
"data": {
"id": "7",
"crmId": 7,
"name": "New polling"
},
"messages": [],
"function": "",
"processor": "",
"pid": 13416
}Получение списка опросов
Пример запроса cURL
curl 'http://127.0.0.1/pbxcore/api/module-dialer/v1/polling'Пример ответа
{
"result": true,
"data": {
"results": [
{
"id": "8",
"crmId": "8",
"name": "New polling"
},
{
"id": "9",
"crmId": "9",
"name": "New polling"
},
{
"id": "10",
"crmId": "10",
"name": "\u041e\u043f\u0440\u043e\u0441 \u043e \u043d\u043e\u0432\u043e\u043c \u0442\u043e\u0432\u0430\u0440\u0435"
}
]
},
"messages": [],
"function": "",
"processor": "",
"pid": 28941
}Получение данных опроса по ID
Пример запроса cURL
curl 'http://127.0.0.1/pbxcore/api/module-dialer/v1/polling/7'где "
7" - идентификатор опроса.
Пример ответа:
{
"result": true,
"data": {
"id": "7",
"crmId": "7",
"name": "New polling",
"questions": [
{
"id": "79",
"questionText": "\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0442\u043e\u0432\u0430\u0440, \u0434\u043b\u044f \u0437\u0430\u043a\u0430\u0437\u0430 \u0442\u043e\u0432\u0430\u0440\u0430 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 1, \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 2, \u0434\u043b\u044f \u043e\u0442\u043a\u0430\u0437\u0430 \u043e\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0435 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 3",
"questionFile": null,
"lang": "ru-RU",
"press": [
{
"key": "1",
"action": "playback",
"value": "\"\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u044b\u0431\u043e\u0440 \u044d\u0442\u043e\u0433\u043e \u0442\u043e\u0432\u0430\u0440\u0430\"",
"valueOptions": null,
"nextQuestion": null
},
{
"key": "2",
"action": "playback",
"value": "\"\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u0430\u0448 \u043e\u0442\u0432\u0435\u0442\"",
"valueOptions": null,
"nextQuestion": null
}
]
}
]
},
"messages": [],
"function": "",
"processor": "",
"pid": 16875
}Задачи для опроса
Задача позволяет описать все номера телефонов, которые следует оповестить, связать их с опросом или направить вызов на сотрудника / группу сотрудников.
Создать опрос
JSON="{
"name": "New pollingtask",
"state": 0,
"innerNum": "9",
"innerNumType": "polling",
"maxCountChannels": 1,
"dialPrefix": "999",
"numbers": [
{
"number": "79522233446"
},
{
"number": "79522233416"
}
]
}";
curl -X POST -d "$JSON" http://127.0.0.1/pbxcore/api/module-dialer/v1/task«
name» - наименование задачи, можно оставить пустым«
state» - состояние / статус0- открыт / разрешен1- закрыт / завершен2- пауза
«
id» и «crmId» - идентификатор обзвона, если пустой, то будет создан новый«
innerNumType» - если «polling» - направить обзвон на «опрос»«
innerNum» - идентификатор опроса или внутренний номер очереди / сотрудника«
maxCountChannels» - максимальное количество допустимых одновременных звонков в рамках задачи«
dialPrefix» - перед набором, к номеру телефона будет добавлен этот префикс. Опция позволяет выбрать нужный исходящий маршрут звонка«
numbers» - массив номеров телефонов, которые следует опросить
Пример ответа:
{
"result": true,
"data": {
"id": "41",
"crmId": "41",
"name": "New pollingtask",
"innerNum": "9",
"innerNumType": "polling",
"maxCountChannels": 1,
"state": 0,
"dialPrefix": "999"
},
"messages": [],
"function": "",
"processor": "",
"pid": 2593
}Получение данных задачи и результатов
curl -X GET http://127.0.0.1/pbxcore/api/module-dialer/v1/task/36где "36" - идентификатор задачи
пример ответа:
{
"result": true,
"data": {
"id": "41",
"crmId": "41",
"name": "New pollingtask",
"innerNum": "9",
"innerNumType": "polling",
"maxCountChannels": "1",
"state": "1",
"dialPrefix": "999",
"results": [
{
"id": "132",
"taskId": "41",
"phoneId": "9522233446",
"phone": "79522233446",
"linkedId": "mikopbx-1724235065.54",
"callFile": "dialer-41-79522233446-9.call",
"result": "SUCCESS_POLLING",
"outDialState": null,
"inDialState": null,
"state": "EVENT_POLLING_END",
"verboseCallId": "[C-0000001b]",
"cause": null,
"params": "s:0:\"\";",
"changeTime": "1724235073",
"countTry": null,
"timeCallAllow": "0",
"closeTime": "1724235073"
}
],
"resultsPoling": [
{
"id": "45",
"taskId": "41",
"questionCrmId": "0",
"pollingId": "9",
"phoneId": "9522233446",
"phone": "79522233446",
"result": "1",
"exten": "1",
"changeTime": "1724235071.0536"
}
]
},
"messages": [],
"function": "",
"processor": "",
"pid": 2514
}"
results" - результаты и статус звонка"
phoneId" - последние 10 цифр номера клиента, префиксы удалены"
linkedId" - идентификатор звонка, по нему можно отфильтровать историю звонков"
verboseCallId" - идентификатор verbose лога"
changeTime" - дата модификации записи"
result" - результат звонка
"
resultsPoling" - результат опроса"
questionCrmId" - идентификатор вопроса"
pollingId" - идентификатор опроса"
phoneId" - последние 10 цифр номера клиента, префиксы удалены"
result" - результат ввода"
exten" - введенный номер в тональном режиме"
changeTime" - дата модификации записи
Расшифровка статусов (result) звонка
«
FAIL_USER_NO_ANSWER» - До клиента дозвонились, пользователь не ответил, к примеру завершил вызов«
FAIL_USER_BUSY» - До клиента дозвонились, пользователи заняты или не доступны«
FAIL_CLIENT_H_BEFORE_ANSWER» - До клиента дозвонились, клиент положил трубку до ответа сотрудника (не дождался)«
FAIL_ROUTE» - До клиента не дозвонились, нет маршрута для звонка по номеру клиента, нет провайдера на MIkoPBX«
FAIL_PROVIDER» - До клиента не дозвонились, провайдер не доступен, не активен, ошибка регистрации«
SUCCESS_USER_H» - Успешный звонок, трубку положил сотрудник«
SUCCESS_CLIENT_H» - Успешный звонок, трубку положил клиент«
SUCCESS_POLLING» - Опрос пройден успешно.«
FAIL_POLLING» - Опрос не пройден«
SUCCESS» - Успешный звонок«
FAIL» - Безуспешный вызов, проблема не классифицирована
Получение статусов
Получение статуса звонков
curl -X GET http://127.0.0.1/pbxcore/api/module-dialer/v1/results/{changeTime}где "changeTime" - timestamp, возвращает данные начиная с указанной даты
{
"result": true,
"data": {
"results": [
{
"id": "134",
"taskId": "1000000001",
"phoneId": "9522233446",
"phone": "79522233446",
"linkedId": "mikopbx-1724323615.3",
"callFile": "dialer-1000000001-79522233446-10.call",
"result": "SUCCESS_POLLING",
"outDialState": null,
"inDialState": null,
"state": "EVENT_POLLING_END",
"verboseCallId": "[C-00000003]",
"cause": null,
"params": "s:0:\"\";",
"changeTime": "1724323625",
"countTry": null,
"timeCallAllow": "0",
"closeTime": "1724323625"
},
{
"id": "135",
"taskId": "1000000002",
"phoneId": "9522233446",
"phone": "79522233446",
"linkedId": "mikopbx-1724324361.6",
"callFile": "dialer-1000000002-79522233446-10.call",
"result": "SUCCESS_POLLING",
"outDialState": null,
"inDialState": null,
"state": "EVENT_POLLING_END",
"verboseCallId": "[C-00000005]",
"cause": null,
"params": "s:0:\"\";",
"changeTime": "1724324376",
"countTry": null,
"timeCallAllow": "0",
"closeTime": "1724324376"
}
]
},
"messages": [],
"function": "",
"processor": "",
"pid": 28941
}"
results" - результаты и статус звонка"
phoneId" - последние 10 цифр номера клиента, префиксы удалены"
linkedId" - идентификатор звонка, по нему можно отфильтровать историю звонков"
verboseCallId" - идентификатор verbose лога"
changeTime" - дата модификации записи"
result" - результат звонка
Получение статуса опросов
Пример запроса cURL
curl -X GET http://127.0.0.1/pbxcore/api/module-dialer/v1/polling-results/{changeTime}где "changeTime" - timestamp, возвращает данные начиная с указанной даты
Пример ответа:
{
"result": true,
"data": {
"results": [
{
"id": "48",
"taskId": "1000000002",
"questionCrmId": "0",
"pollingId": "10",
"phoneId": "9522233446",
"phone": "79522233446",
"result": "3",
"exten": "3",
"changeTime": "1724324374.2487"
}
]
},
"messages": [],
"function": "",
"processor": "",
"pid": 28941
}"
results" - результат опроса"
questionCrmId" - идентификатор вопроса"
pollingId" - идентификатор опроса"
phoneId" - последние 10 цифр номера клиента, префиксы удалены"
result" - результат ввода"
exten" - введенный номер в тональном режиме"
changeTime" - дата модификации записи
Медиа файлы
Заранее подготовленные медиа файлы могут быть использованы в опросах для оповещения клиентов.
Загрузка файла на АТС
Рекомендованные параметры аудио файла mp3
Channels : 1
Sample Rate : 8000
Precision : 16-bit
Bit Rate : 16.0k
Sample Encoding: MPEG audio (layer I, II or III)Пример загрузки файла на АТС средствами cURL
curl -F "[email protected]" 'http://127.0.0.1/pbxcore/api/module-dialer/v1/audio'Имя файла "1.mp3" будет являться его идентификатором. При загрузке нового файла с прежним именем старый файл будет заменен на новый.
Пример ответа:
{
"result": true,
"data": {
"filename": "\/storage\/usbdisk1\/mikopbx\/custom_modules\/ModuleAutoDialer\/db\/audio\/474d57f8204699fbb2249f20dede5f8e.mp3"
},
"messages": [],
"function": "",
"processor": "",
"pid": 10884
}«
result» - результат операции, булево«
filename» - полный путь к загруженному файлу, его можно использовать при создании «опроса»
Получение списка файлов
Пример загрузки файла на АТС средствами cURL
curl 'http://127.0.0.1/pbxcore/api/module-dialer/v1/audio'Пример ответа:
{
"result": true,
"data": [
{
"id": "1",
"name": "1.mp3",
"path": "\/storage\/usbdisk1\/mikopbx\/custom_modules\/ModuleAutoDialer\/db\/audio\/474d57f8204699fbb2249f20dede5f8e.mp3"
}
],
"messages": [],
"function": "",
"processor": "",
"pid": 27195
}Удаление аудиофайла
Пример загрузки файла на АТС средствами cURL
curl -X DELETE 'http://127.0.0.1/pbxcore/api/module-dialer/v1/audio/1.mp3'Пример ответа
{
"result": true,
"data": [],
"messages": [],
"function": "",
"processor": "",
"pid": 22226
}Last updated
Was this helpful?

