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

в 0:57, , рубрики: AGI, AMI, asterisk, метки: , ,

В 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])

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

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

Автор: litnimax

Источник

Поделиться

* - обязательные к заполнению поля