img

Интересное про ARI (Asterisk REST Interface)

21 ноября
20:00
Бесплатный вебинар
Введение в Docker
Ведущий — Филипп Игнатенко.
Руководитель центра разработки
Записаться
img
img

В 2013 году, вместе с бета – релизом Asterisk 12 астериск - комьюнити был представлен новый API, который получил гордое название - ARI (Asterisk REST Interface). Что это и как им пользоваться, если вы любите php - рассказываем в статье.


Зачем Asterisk нужен новый API?

Все мы привыкли, что Asterisk имеет два интерфейса: Asterisk Manager Interface (AMI) и Asterisk Gateway Interface (AGI). AMI это асинхронный интерфейс, который используется для управления вызовами, инициацией звонков и всем, что попадает под определение «call control». AGI, в свою очередь, предоставляет синхронный интерфейс манипуляции одним каналом, являясь своего рода «прослойкой» между диалпланом и внешними скриптами. Важно отметить, что на время выполнения, AGI блокирует поток.

В связке, оба интерфейса неплохо справляются с задачами, связанными с различного рода манипуляциями с каналами и диалпланом Asterisk. Но разработка сложного и многоуровневого приложения может стать по настоящему трудной задачей для разработчика, в которой придется задействовать AGI и AMI одновременно.

Именно в этот момент на помощь приходит ARI (Asterisk REST Interface). Отметим, что ARI не заменяет AGI или AMI. Новый интерфейс позволяет разработчикам заменить управление на уровне диалплана внешними приложениями (скриптами). Тем самым, ARI упрощает жизнь разработчикам бизнес – приложений, которые используют Asterisk в качестве коммуникационной платформы.

Интересное про ARI (Asterisk REST Interface)

ARI дает девелоперам высокоуровневый REST интерфейс, через который доступно управление базовыми операциями Asterisk, например, такими как каналы, мосты (бриджи), конечные устройства, управление медиа – потоками, записью разговоров и так далее. Информация об этих объектах передается в асинхронном режиме событиями JSON поверх WebSocket.

Только представьте: раньше, чтобы овладеть подобным набором инструментов, вам необходимо было иметь навыки программирования на C и разработать свой собственный модуль и внедрить в Asterisk. С использованием ARI, приложения могут быть написаны на вашем любимом языке, будь то Python, Ruby, PHP или JavaScript! Для удобства, ниже мы привели библиотеки и ссылки на них для различных языков программирования:

Библиотека Язык программирования Ресурс
ari4java Java https://github.com/l3nz/ari4java
ari-py Python https://github.com/asterisk/ari-py
AsterNET.ARI C#/.NET https://asternetari.codeplex.com/
node-ari-client JavaScript (node) https://github.com/asterisk/node-ari-client
phpari PHP http://www.phpari.org/

Подведем итог: новый интерфейс ARI дает новые возможности не только для Asterisk комьюнити, но и для разработчиков бизнес приложений. От слов к делу, переходим к настройке.


Настройка phpari

Поскольку ARI это технология, базирующаяся на WebSocket, первым делом необходимо внести некоторые настройки в файл http.conf, который находится в директории /etc/asterisk/:

cd /etc/asterisk/
vim http.conf

Приводим файл к следующему виду:

[general]
enabled = yes
bindaddr = 127.0.0.1

Далее, «сетапим» файл ari.conf, открыв его командой vim ari.conf:

[general]
enabled = yes
pretty = yes

[имя_вашего_пользователя]
type = user
read_only = no
password = пароль_для_пользователя

В секции [имя_вашего_пользователя], укажите юзернейм, а в секции password его соответствующий пароль. Перегружаем Asterisk:

asterisk –rv
core restart now

Теперь мы установим phpari. Установку будем производить с помощью composer:

Если у вас не установлен composer, вы можете скачать его по этой ссылке.

Открываем для редактирования файл composer.json и добавляем в него следующий код:

{
    "require": {
        "php": ">=5.3.9",
        "educoder/pest": "1.0.0",
        "devristo/phpws": "dev-master",
        "greenfieldtech-nirs/phpari": "dev-master"
    }
}

После чего запускаем команду:

composer install

Необходимая библиотека будет загружена. Переходим в директорию /vendor/greenfieldtech-nirs/phpari и открываем для редактирования файл phpari.ini:

cd /vendor/greenfieldtech-nirs/phpari
vim phpari.ini

Редактируем следующим образом:

[general]
debug=0
logfile=console ; #если хотите логировать ARI в консоль, то оставьте данное поле без изменений. Если хотите логировать в файл, то укажите полный путь к нему;

[asterisk_ari]
username= имя_вашего_пользователя
password= пароль_для_пользователя
host=IP_адрес_Asterisk
port=8088
endpoint=/ari
transport=ws ; #нешфированный транспорт, wss для шифрования;

Отлично. Теперь давайте соберем простенький .php скрипт, который будет показывать активные каналы. Для этого, в директории, где у нас находится скачанная библиотека phpari и соответственно директория /vendor, создаем файл ari.php и наполяем его следующей конфигурацией:

require_once "vendor/autoload.php";
$ariCon = new phpari();
print_r($ariCon->channels()->channel_list());

Сохраняем. Сделайте 1 активный вызов на вашем Asterisk (например, позвонив с софтфона на софтфон). Переходим в консоль, и даем команду на выполнение этого скрипта:

php ari.php

Если все сделано правильно, в консоли мы увидим JSON – ответ, в котором будут переданы параметры активного канала: context, exten, caller, accountcode и прочие.


Как вызвать приложение?

Вызвать приложение из диалплана очень просто. Для этого, необходимо использовать Stasis:

exten => _XXXX,1,Stasis(ваше_приложение) 

Что именно умеет ARI?

Кратко поговорим о том, какие именно операции умеет совершать ARI:

Метод Путь Описание
GET /channels/{channelId} Получить информацию о канале с channelId
POST /channels/{channelId} Создать канал с указанным channelId
DELETE /channels/{channelId} Удалить (Hang Up) канал
POST /channels/{channelId}/continue Возврат в диалплан (выход из скрипта)
POST /channels/{channelId}/continue Возврат в диалплан (выход из скрипта)
POST /channels/{channelId}/answer Ответить на канал
POST /channels/{channelId}/mute "Замьютить" канал
DELETE /channels/{channelId}/mute "Снять мьют" с канала
POST /channels/{channelId}/hold Поставить вызов на удержание
DELETE /channels/{channelId}/hold Снять вызов с удержания
POST /channels/{channelId}/play Воспроизвести медиа файл
POST /channels/{channelId}/record Начать запись
GET /bridges Лист всех активных мостов (бриджей)
GET /bridges Лист всех активных мостов (бриджей)
POST /bridges/{bridgeId}/addChannel Добавить канал к бриджу
POST /bridges/{bridgeId}/removeChannel Удалить канал с бриджа
GET /endpoints Список оконечных устройств
GET /endpoints/{tech} Список оконечных устройств, которые функционируют по указанной технологии
GET /endpoints/{tech}/{resource} Детальная информация по оконечному устройству
GET /sounds Список звуков
GET /sounds/{soundId} Список звуков
Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
DevOps
Скидка 25%
DevOps-инженер с нуля
Научитесь использовать инструменты и методы DevOps для автоматизации тестирования, сборки и развертывания кода, управления инфраструктурой и ускорения процесса доставки продуктов в продакшн. Станьте желанным специалистом в IT-индустрии и претендуйте на работу с высокой заработной платой.
Получи бесплатный
вводный урок!
Пожалуйста, укажите корректный e-mail
отправили вводный урок на твой e-mail!
Получи все материалы в telegram и ускорь обучение!
img
Еще по теме:
img
Привет, дорогой читатель! В повседневной работе зачастую не хватает автоматизации. Поэтому, мы решили создать калькулятор инстал
img
Мы подумали, а почему бы не консолидировать все знания по Cisco VoIP продуктам и их настройке в единый документ? Добавить в них
img
Привет! Для удобства, мы структурировали все материалы по графическому интерфейсу FreePBX в нашей базе знаний в единый файл. Сам
img
Вам, как сетевому инженеру, крайне важно разбираться в том, каким образом вызовы VoIP влияют на пропускную способность канала в
img
В этой статье расскажем как отправлять различные СМС сообщения пользователям, позвонившим в контакт-центр Октелл и запросившим т
img
Всем современным кампаниям, производящим товары и оказывающим услуги, необходимо иметь специалистов, работающих с потенциальными
21 ноября
20:00
Бесплатный вебинар
Введение в Docker