AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

мониторинг состояний абонентов в браузере

Newbies/FAQ Forum 22 сообщений 08.02.2017 11:40 - 14.02.2017 14:51
#1 08.02.2017 11:40

мониторинг состояний абонентов в браузере

Есть asterisk 13.1.0, на нем настроил в manager.conf отдачу событий на порт 5038
по телнету коннектится, события прилетают.

хочу теперь как то это отдавать в web браузер.
Браузер поддерживает Websocket, но не пойму как связать с отдачей тех событий с этим протоколом
Еще в системе есть commit server realplexor, но пока то же не понимаю как его можно связать

видел примеры на node.js но перейти на него нельзя

мож кто просветит, как это все связать

сейчас у меня работает по аяксу через таймер, запрашивается из командной строки asteriska состояния абонентов, каналов.
но этот вариант съедает большое кол-во ресурсов при большой нагрузке порядка 50-70 одновременных вызовов
#2 08.02.2017 13:24
Проверьте в http.conf разрешена ли работа астер-http и все пароли. а далее уж и примеры запускать-смотреть
#3 08.02.2017 14:28
[general]
enabled=yes
bindaddr=0.0.0.0
bindport=8080
prefix=asterisk
enablestatic=yes
;tlsenable=yes ; enable tls - default no.
;tlsbindport=4433 ; port to use - default is 8089
;tlsbindaddr=0.0.0.0 ; address to bind to - default is bindaddr.



http show status
HTTP Server Status:
Prefix: /asterisk
Server Enabled and Bound to 0.0.0.0:8080

Enabled URI's:
/asterisk/httpstatus => Asterisk HTTP General Status
/asterisk/phoneprov/... => Asterisk HTTP Phone Provisioning Tool
/asterisk/amanager => HTML Manager Event Interface w/Digest authentication
/asterisk/arawman => Raw HTTP Manager Event Interface w/Digest authentication
/asterisk/manager => HTML Manager Event Interface
/asterisk/rawman => Raw HTTP Manager Event Interface
/asterisk/static/... => Asterisk HTTP Static Delivery
/asterisk/amxml => XML Manager Event Interface w/Digest authentication
/asterisk/mxml => XML Manager Event Interface
/asterisk/ws => Asterisk HTTP WebSocket
#5 08.02.2017 17:12
Mr.Dimas писал(а):Браузер поддерживает Winsocked
Все же наверно речь о Winsock. Не рекомендую.
Все же лучше WebSocket, который уже поддерживается ведущими браузерами и далее будет развиваться.
Mr.Dimas писал(а):мож кто просветит, как это все связать
AMI PHP скрипт Браузер
#7 09.02.2017 08:55
Все уже написано, до вас. Используйте ARI. Я же дал вам ссылку.
#9 09.02.2017 11:48
Я прошу прощения, ну просто любопытно. А куда делся? ARI с 12-ой версии присутствует "из коробки". Его достаточно просто "включить".
#10 09.02.2017 14:11
[url=http://asteriskforum.ru/viewtopic.php?p=84350#84350][img]http://asteriskforum.ru/images/quotebackarrow.gif[/img][/url] xelas @ Чт Фев 09, 2017 11:48 писал(а):Я прошу прощения, ну просто любопытно. А куда делся? ARI с 12-ой версии присутствует "из коробки". Его достаточно просто "включить".
собирал сам, и не усмотрел что этот модуль туда не вошел
пересобрать нельзя
можно конечно модуль подсунуть хитрым образом http://uzlec.ru/kompilyaciya-i-ustanovk ... erisk.html
но, это крайний вариант.
#11 10.02.2017 07:03
xelas, с ARI и вызовом придется управлять не диалпланом, а скриптом. ARI не будет отдавать события по каналам, которые не в Stasis.
Даже с ARI писать придется в любом случае, т.к. ARI сервер, а клиента придется рисовать ручками.
Вот моя статья, а вот тут мой пример того что было реализовано в рамках этой статьи.
Mr.Dimas писал(а):демона php, который будет слушать события AMI и отправлять в сокет
Тут главное схема, а не язык программирования. Я писан на PHP, мне он нравится больше. Вы можете писать на чем нравится вам.
#12 10.02.2017 07:08
Вы не правы. Будет.
У меня именно так и работает. Без стазиса. Вебприложение показывает статусы, звонки, каналы. Еще раз: без Statsis.
Мы уже тут на этом форуме с кем то осбуждали как это делается. Можно поискать.
#13 10.02.2017 07:14
xelas, об этом сказано в доке:
https://wiki.asterisk.org/wiki/pages/vi ... d=29395573
Channels not in a Stasis dialplan application generally cannot be manipulated by ARI - the purpose of ARI, after all, is to build your own dialplan application, not manipulate an existing one.
Посему не поверю пока не увижу доказуху. Пруфлинк ? Пример ?
#14 10.02.2017 08:04
Вирус, ну даже в вашей выделенной цитате написано: cannot be manipulated
Да, каналом управлять без Stasis нельзя. А вот подписаться на получение статуса канала, бриджа, девайса -- без проблем. Надо только подписаться на необходимые события:
https://wiki.asterisk.org/wiki/display/ ... -subscribe
#15 11.02.2017 06:47
xelas, когда я писал статью, я пробовал и я не мог получать события по каналу если он не в stasis.
По линку. Да я читал это не раз, но:
subscribe: POST /applications/{applicationName}/subscription
Subscribe an application to a event source. Returns the state of the application after the subscriptions have changed
https://wiki.asterisk.org/wiki/display/ ... pplication
Application
Details of a Stasis application
Т.е. опять все упирается в Stasis.

Может дело в том, что я пользовал chan_sip, а не chan_pjsip. pjsip я не пробовал. У вас какой используется ?
Пример и вывод дебага WS вы можете привести
#16 12.02.2017 08:27
Я использую PJSIP.
Дебаг приведу как только доберусь до работы.
Но поверте мне на слово. Все работает :)
#17 13.02.2017 06:58
Ок, я не тороплюсь :)
"Доверяй, но проверяй" - старая школа ;)
#18 13.02.2017 08:11
Ну, собственно, каких вам логов надо?

Цитата:
[[email protected] asterisk]# grep -i stas ext*.conf
[[email protected] asterisk]#


На скриншотах -- подписка на события по девайсу, и собственно сами события. Подписаться можно и по маске.

Используемые комманды:
Код:
wscat -c 'wc://telegk.olma.ru:8088/ari/events?api_key=aritest:aritest123&app=Test'

Код:
curl -v -u aritest:aritest123 -X POST "http://telegk.olma.ru:8088/ari/applicat ... IP/1111dev"


Собственно, говоря, стазис кроме того, что позволяет управлять каналом, просто сам подписывает приложение, на получение статусов канала, в котором отработал стазис.
Но никто не мешает вам самостоятельно подписаться на евенты канала, предварительно получив его ID вот таким образом, как на скриншотах или же получив полный список каналов отдельным запросом.

И вот видео, как это работает "в быту". Вебприложение, которое получает статусы аппаратов, кто и куда звонил.
На видео звонок с номера 7691 на номер 1111.
Собственно, не знаю как еще доказать, что все работает.

https://youtu.be/jL17rp_BFgY
#19 14.02.2017 07:27
xelas писал(а):&app=Test
Не ну чесслово, прямо разрыв шаблона для меня:
https://wiki.asterisk.org/wiki/display/ ... s+REST+API
eventWebsocket: GET /events
WebSocket connection for events.
Query parameters
app: string - (required) Applications to subscribe to.
Allows comma separated values.
И чудеса: т.е. вы получаете статусы по несуществующему Application...

Код: Выделить всё

wscat -c 'wc://telegk.olma.ru:8088/ari/events?api_key=aritest:aritest123&app=NewNewTest'

Код: Выделить всё

curl -v -u aritest:aritest123 -X POST "http://telegk.olma.ru:8088/ari/applications/NewNewTest/subscription?eventSource=endpoint:PJSIP/ENDPOINTNAME"
(где ENDPOINTNAME ессно сущ.номер)
Что выдаст ?

Так же на скрине видно, что у вас 13.5.0, а когда я писал статью я использовал 13.6.0. Вы на других версиях тестили ?
xelas писал(а):И вот видео, как это работает "в быту"
Если бы при этом была бы открыта консоль F12 и вкладка Network или Console, в которой были бы видны приход событий через ws или обработка этих событий... А так это видео для домохозяек :) а не для разрабов.

Вообщем я понял, видимо мне самому придется вернуться к этой теме ещё раз, как дойдут руки. Сделал себе пометку в todo листе.
#20 14.02.2017 07:36
Видео просто как пример конечного приложения.
Система несколько шире чем представляется. У нас написана трехзвенка. Asterisk - сервер на питоне, который общается с ARI - клиент в браузере.
Сделано так, что бы не плодить приложений на каждом клиенте.
Да, версия 13.5, запланирован апдейт, но руки не дошли.

Собственно, почему вы говорите что приложения не существует? В момент открытия websocket-а оно и создается.

Код: Выделить всё

> [[email protected] ~]$ wscat -c 'wc://telegk.olma.ru:8088/ari/events?api_key=aritest:aritest123&app=NewNewTest' connected (press CTRL+C to quit) > 

Код: Выделить всё

В этот момент в астериске: [Feb 14 09:35:15] Creating Stasis app 'NewNewTest' [Feb 14 09:35:15] == WebSocket connection from '10.123.123.93:50576' for protocol '' accepted using version '13' [Feb 14 09:35:15] Activating Stasis app 'NewNewTest' telegk1*CLI> 
Делаем подписку:

Код: Выделить всё

[[email protected] ~]$ curl -v -u aritest:aritest123 -X POST "http://telegk.olma.ru:8088/ari/applications/NewNewTest/subscription?eventSource=endpoint:PJSIP/1111dev" * About to connect() to telegk.olma.ru port 8088 * Trying 10.123.190.2... connected * Connected to telegk.olma.ru (10.123.190.2) port 8088 * Server auth using Basic with user 'aritest' > POST /ari/applications/NewNewTest/subscription?eventSource=endpoint:PJSIP/1111dev HTTP/1.1 > Authorization: Basic YXJpdGVzdDphcml0ZXN0MTIz > User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5 > Host: telegk.olma.ru:8088 > Accept: */* > < HTTP/1.1 200 OK < Server: Asterisk/13.5.0 < Date: Tue, 14 Feb 2017 06:31:49 GMT < Cache-Control: no-cache, no-store < Content-type: application/json < Content-Length: 134 { "name": "NewNewTest", "channel_ids": [], "bridge_ids": [], "endpoint_ids": [ "PJSIP/1111dev" ], "device_names": [] Connection #0 to host telegk.olma.ru left intact
#21 14.02.2017 11:41
И кстати, почему мы не используем Statis для управления каналами: не знаю, как в текущей версии, то в 13.5 если Stasis вызван в диалплане в тот момент, когда приложения не существует -- обработка диалплана прерывается. Что, как вы понимаете, совсем не хорошо.
#22 14.02.2017 14:51
xelas писал(а):Asterisk - сервер на питоне, который общается с ARI - клиент в браузере.
Оно и понятно и это именно так и рекомендуется делать, и о чем и говорит документация.
xelas писал(а):В момент открытия websocket-а оно и создается.
Да, но каналов, то в нем нет... вот в чем штука.
если Stasis вызван в диалплане в тот момент, когда приложения не существует -- обработка диалплана прерывается.
Честно не помню как было в 13.6.0 в подобной ситуации. Но что у Stasis есть:
This application will set the following channel variable upon completion: ${STASISSTATUS}
это точно. Проверить все не могу, тестовый стенд давно разобрали, а время, на сбор нового и тесты, пока, увы и ах, нет...