Да, это RESTful API в натуре.
Пока имеются следующие ресурсы:
Asterisk 12 REST Data Models
Asterisk 12 Asterisk REST API
Asterisk 12 Bridges REST API
Asterisk 12 Channels REST API
Asterisk 12 Endpoints REST API
Asterisk 12 Events REST API
Asterisk 12 Recordings REST API
Asterisk 12 Sounds REST API
Asterisk 12 Applications REST API
Asterisk 12 Playbacks REST API
Asterisk 12 Devicestates REST API
Asterisk 12 Mailboxes REST API
Или, интерфейсы к Каналам, Девайсам, Бриджам, Записям, Звукам. Вероятно, будут наращивать мощности 🙂
Ну и главная фишка, это возможность подключения через 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])
Молодцы, что сказать 🙂
Главные ссылки:
ссылка на оригинал статьи http://habrahabr.ru/post/225007/
Добавить комментарий