Модуль Автоинформатор
Предоставляет 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?

