В 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])
Молодцы, что сказать :-)
Главные ссылки:
- wiki.asterisk.org/wiki/display/AST/Getting+Started+with+ARI
- wiki.asterisk.org/wiki/display/AST/Asterisk+12+ARI
Автор: litnimax