В Asterisk версии 12 появился REST интерфейс (Asterisk REST Interface — ARI)

В Asterisk версии 12 появился REST интерфейс (Asterisk REST Interface — ARI).Да, это RESTful API в натуре.

Пока имеются следующие ресурсы:

Asterisk Bridges Channels Endpoints Events Recordings Sounds Applications Playbacks Devicestates Mailboxes Или, интерфейсы к Каналам, Девайсам, Бриджам, Записям, Звукам. Вероятно, будут наращивать мощности :-)

Ну и главная фишка, это возможность подключения через WebSocket на /ari/events и в режиме постоянного соединения получать события.В отличие от AMI, тут гуляют объекты в JSON формате, и работать с событиями крайне удобно.Например, оригинация звонка выглядит так:

data = { 'endpoint': 'SIP/%s' % provider, 'extension': number, 'context': 'out', 'priority': '1', 'channelId': channel_id, 'timeout': '60', }

ret = ari_post ('channels', data=data) События самые разные. В том числе можно по GET сгенерировать событие, и самому получить его как UserEvent через WebSocket. Так сказать, Asterisk как шина передачи данных :-{P

Подключение звонка в WebSocket приложение делается из диалплана командой Stasis.

Вот так выглядит диалплан:

exten => 1,1, Wait (1.5) same => n, Stasis (dialer) ; dialer is the name of the application same => n, Wait (2) same => n, Hangup () Из WebSocket’а можно выйти через вызов /channels/{channelId}/continue, и управление из WebSocket’a перейдет обратно в диалплан Asterisk’a.

Это как будто AMI и AGI в одном флаконе.

Кстати, имеется вкуснейшая плюшка в виде браузера по API.

Вот скриншот:

image

Ну и поглядев внимательно на API, надумал пачку UseCases:

Providers monitoring Call spy Conference manager User device monitoring Recording manager Monitor ^ Spy ^ Record ^ Conference ^ Dialer

Похоже на переход на другой уровень.

Asterisk12 сохраняя телефонный комбайн для админа, дает разработчику приближенный по удобству интерфейс не хуже FreeSWITCH. IMHO. Там XML, тут JSON.

А если вспомнить о функции CURL, то получается, у диалплана вырастают тааакие руки :-)

*CLI> core show function CURL

-= Info about function 'CURL' =-

[Synopsis] Retrieves the contents of a URL

[Description] url — URL to retrieve post-data — Optional data to send as a POST (GET is default action)

[Syntax] CURL (url[, post-data])

Молодцы, что сказать :-)

Главные ссылки:

© Habrahabr.ru