В 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.
Вот скриншот:
Ну и поглядев внимательно на 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])
Молодцы, что сказать :-)
Главные ссылки: