Страница 1 из 1

Настройка ARI для получения событий через WebSoket

Добавлено: 22 янв 2024, 10:10
AlexPeresvet
Приветствую всех присутствующих!, коллеги. Проблема состоит в следующем: есть задача получать события из астериска через /ari/events. В качестве "подопытного" используется FreePBX 16 с asterisk 18 Мною были выполнены следующие настройки:
Изображение
и
Изображение
.
После этого ARI запросы не использующие WebSoket "заработали".
Изображение

При попытке отправить запрос использующий WebSoket, ws://ipaddr:58088/asterisk/ari/events?app=hello&subscribeAll=true&api_key=login:pass в ответ получаю 404 ошибку.
В дебаге получаю следующее:

[2024-01-17 12:38:10] DEBUG[23175]: http.c:1958 httpd_helper_thread: HTTP opening session. Top level
[2024-01-17 12:38:10] DEBUG[23175]: http.c:1417 handle_uri: HTTP Request URI is /asterisk/ari/events?app=hello&subscribeAll=true&api_key=login:pass
[2024-01-17 12:38:10] DEBUG[23175]: http.c:1472 handle_uri: match request [asterisk/ari/events] with handler [httpstatus] len 10
[2024-01-17 12:38:10] DEBUG[23175]: http.c:1472 handle_uri: match request [asterisk/ari/events] with handler [ari] len 3
[2024-01-17 12:38:10] DEBUG[23175]: http.c:1472 handle_uri: match request [asterisk/ari/events] with handler [ws] len 2
[2024-01-17 12:38:10] DEBUG[23175]: http.c:1494 handle_uri: Requested URI [asterisk/ari/events] has no handler
[2024-01-17 12:38:10] DEBUG[23175]: http.c:568 ast_http_send: HTTP keeping session open. status_code:404
[2024-01-17 12:38:10] DEBUG[23175]: http.c:2015 httpd_helper_thread: HTTP closing session. Top level

Путем гугления нашел аналогичные ситуации, в случае если не все необходимые модули включены или не корректная настройка внутреннего веб сервера. Проверил модули все включено:

SAGA*CLI> module show like ari
Module Description Use Count Status Support Level
res_ari.so Asterisk RESTful Interface 10 Running core
res_ari_applications.so RESTful API module - Stasis application 0 Running core
res_ari_asterisk.so RESTful API module - Asterisk resources 0 Running core
res_ari_bridges.so RESTful API module - Bridge resources 0 Running core
res_ari_channels.so RESTful API module - Channel resources 0 Running core
res_ari_device_states.so RESTful API module - Device state resour 0 Running core
res_ari_endpoints.so RESTful API module - Endpoint resources 0 Running core
res_ari_events.so RESTful API module - WebSocket resource 0 Running core
res_ari_model.so ARI Model validators 10 Running core
res_ari_playbacks.so RESTful API module - Playback control re 0 Running core
res_ari_recordings.so RESTful API module - Recording resources 0 Running core
res_ari_sounds.so RESTful API module - Sound resources 0 Running core
12 modules loaded

Веб сервер запущен и вроде настроен правильно:
http show status
HTTP Server Status:
Prefix:
Server: Asterisk/18.20.0
Server Enabled and Bound to 0.0.0.0:8088

HTTPS Server Enabled and Bound to [::]:8089

Enabled URI's:
/httpstatus => Asterisk HTTP General Status
/ari/... => Asterisk RESTful API
/ws => Asterisk HTTP WebSocket

Была идея что не корректно составлен URL, в частности смущал ключ app=hello&subscribeAll=true, Но после изучения документации выяснил что в случае присутствия subscribeAll=true, ключ app игнорируется.

Нужна помощь, возможно кто то сталкивался с подобной проблемой.

Re: Настройка ARI для получения событий через WebSoket

Добавлено: 22 янв 2024, 11:36
Zavr2008
https://asterisk-pbx.ru/wiki/asterisk/ari/ari_start
*CLI> module show like res_http_websocket.so
Module Description Use Count Status
res_http_websocket.so HTTP WebSocket Support 2 Running
1 modules loaded

Re: Настройка ARI для получения событий через WebSoket

Добавлено: 22 янв 2024, 11:59
AlexPeresvet
Модуль работает:
SAGA*CLI> module show like res_http
Module Description Use Count Status Support Level
res_http_media_cache.so HTTP Media Cache Backend 1 Running core
res_http_websocket.so HTTP WebSocket Support 5 Running core
2 modules loaded

Re: Настройка ARI для получения событий через WebSoket

Добавлено: 22 янв 2024, 12:58
Zavr2008
дальше через wscat как в статье.

Re: Настройка ARI для получения событий через WebSoket

Добавлено: 22 янв 2024, 14:06
AlexPeresvet
Я изначально тестировал с включенным модулем res_http_websocket.so. С wscat результат тот же.
> [root@SAGA ~]wscat -c "ws:////127.0.0.1:8088/asterisk/ari/events?api_key=login:pass&subscribeAll=true"
error: Unexpected server response: 404
> [root@SAGA ~]# wscat -c "ws:////127.0.0.1:8088/asterisk/ari/events?api_key=login:pass&app=qwer"
error: Unexpected server response: 404
> [root@SAGA ~]# wscat -c "ws:////127.0.0.1:8088/asterisk/ari/events?api_key=login:pass&app=qwer&subscribeAll=true"
error: Unexpected server response: 404

"qwer " - зарегистрирован в диал плане.

[from-internal-additional-custom]
exten => 1,1,NoOp()
same => n,Answer()
same => n,Stasis(qwer)
same => n,Hangup()

Re: Настройка ARI для получения событий через WebSoket

Добавлено: 22 янв 2024, 15:20
Zavr2008
ari show status что говорит?

Также может поможет вот это: https://github.com/asterisk/ari-py/issues/29

Re: Настройка ARI для получения событий через WebSoket

Добавлено: 22 янв 2024, 16:46
AlexPeresvet
SAGA*CLI> ari show status
ARI Status:
Enabled: Yes
Output format: pretty
Auth realm: Asterisk REST Interface
Allowed Origins: localhost:8088
User count: 1


Статью посмотрю, спасибо

Re: Настройка ARI для получения событий через WebSoket

Добавлено: 23 янв 2024, 12:15
Zavr2008

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

require => res_http_websocket.so ; HTTP WebSocket Support, needed for res_ari_events
require => res_ari.so ; Asterisk RESTful Interface
require => res_ari_applications
require => res_ari_asterisk.so
require => res_ari_bridges
require => res_ari_channels.so
require => res_ari_device_states.so ; RESTful API module - Device state resources
require => res_ari_endpoints.so
require => res_ari_events.so
require => res_ari_model.so ; ARI Model validators
require => res_ari_playbacks.so
require => res_ari_recordings.so
require => res_ari_sounds
require => res_stasis.so ; Stasis application support
require => app_stasis.so ; Stasis dialplan application
require => res_stasis_answer.so
require => res_stasis_device_state.so ; Stasis application device state support
require => res_stasis_playback.so ; Stasis application playback support
require => res_stasis_recording.so ; Stasis application recording support
require => res_stasis_snoop.so ; Stasis application snoop support

Re: Настройка ARI для получения событий через WebSoket

Добавлено: 23 янв 2024, 20:35
AlexPeresvet
SAGA*CLI> module show like ari
Module Description Use Count Status Support Level
res_ari.so Asterisk RESTful Interface 10 Running core
res_ari_applications.so RESTful API module - Stasis application 0 Running core
res_ari_asterisk.so RESTful API module - Asterisk resources 0 Running core
res_ari_bridges.so RESTful API module - Bridge resources 0 Running core
res_ari_channels.so RESTful API module - Channel resources 0 Running core
res_ari_device_states.so RESTful API module - Device state resour 0 Running core
res_ari_endpoints.so RESTful API module - Endpoint resources 0 Running core
res_ari_events.so RESTful API module - WebSocket resource 0 Running core
res_ari_model.so ARI Model validators 10 Running core
res_ari_playbacks.so RESTful API module - Playback control re 0 Running core
res_ari_recordings.so RESTful API module - Recording resources 0 Running core
res_ari_sounds.so RESTful API module - Sound resources 0 Running core
12 modules loaded
SAGA*CLI> module show like stasis
Module Description Use Count Status Support Level
app_stasis.so Stasis dialplan application 0 Running core
res_stasis.so Stasis application support 17 Running core
res_stasis_answer.so Stasis application answer support 1 Running core
res_stasis_device_state.so Stasis application device state support 1 Running core
res_stasis_playback.so Stasis application playback support 3 Running core
res_stasis_recording.so Stasis application recording support 4 Running core
res_stasis_snoop.so Stasis application snoop support 1 Running core
7 modules loaded
SAGA*CLI> module show like websocket
Module Description Use Count Status Support Level
res_http_websocket.so HTTP WebSocket Support 5 Running core
res_pjsip_transport_websocket.so PJSIP WebSocket Transport Support 0 Running core
2 modules loaded

Проверил все модули работают.