配置Asterisk 13以支持WebSockets/WebRTC

问题描述:

我有一台装有debian 9的虚拟机。我已经通过apt-get安装了Asterisk 13.14.1,并且我已经配置了它有三个用户,其中两个是sip用户(Zoiper APP )和另一个webrtc用户(使用http://jssip.net/的自定义应用程序)。自定义应用程序非常基本,使用代码可以在https://github.com/versatica/JsSIP中找到。然而,而不是使用:配置Asterisk 13以支持WebSockets/WebRTC

var socket = new JsSIP.WebSocketInterface('wss://mypbxipaddress'); 

我用

var socket = new JsSIP.WebSocketInterface('ws://mypbxipaddress'); 

的SIP用户似乎正常工作。然而,我有问题与webrtc用户,我认为是在服务器端,特别是在websocket。在我收到以下错误连接期间客户端:

main.js:158470 WebSocket connection to 'ws://mypbxipaddress/' failed: Error during WebSocket handshake: Unexpected response code: 200 

此外,我曾尝试wscat(NPM封装)

wscat -s echo -c ws://mypbxipaddress:arandomport 

和我接收:

error: Error: connect ECONNREFUSED mypbxipaddress:arandomport 

最后我已经在

asterisk -rvvvvv 

http show status 

和获取:

HTTP Server Status: 
Prefix: 
Server: Asterisk/13.14.1~dfsg-2 
Server Enabled and Bound to 0.0.0.0:8080 

Enabled URI's: 
/httpstatus => Asterisk HTTP General Status 
/phoneprov/... => Asterisk HTTP Phone Provisioning Tool 
/static/... => Asterisk HTTP Static Delivery 
/ari/... => Asterisk RESTful API 
/ws => Asterisk HTTP WebSocket 

Enabled Redirects: 
    None. 

与/ WS =表示>星号HTTP网页套接字,即网页套接字处于活动状态。

关于如何进一步调试的建议?

感谢 Symeon

答案就简单多了,一如既往。我不得不改变

var socket = new JsSIP.WebSocketInterface('ws://mypbxipaddress:8088/ws'); 

我的结论来,经过一番寻找的样子:

asterisk -rvvvvv 
http show status 

有它提到的“服务器启用并绑定到mypbxipaddress:8088”上,这是在定义/等/星号/ http.conf中

bindaddr=mypbxipaddress 
bindport=8088 

1)了解更多关于WebSocket的,做tcpdump的。

2)做星号调试

asterisk -r 
core set debug 10 
+0

核心设置调试10没有任何区别。我没有收到任何消息。但是,对于tcpdump,我收到以下可能指示某事的消息: 05:54:53.080539 IP deviceip.54978> PBXIP.5060:SIP:REGISTER sip:172.26.41.2; transport = UDP SIP/2.0 05:54:53.080975 IP PBXIP.80> deviceip.35469:标志[P.],seq 1:3325,ack 576,win 236,选项[nop,nop,TS val 12025967 ecr 139793604],长度3324:HTTP:HTTP/1.1 200 OK 05:54:53.081863 IP PBXIP.5060> deviceip.54978:SIP:SIP/2.0 401未经授权 –

你应该尝试:wscat -s echo -c ws://mypbxipaddress:8080/ws 因为:Server Enabled and Bound to 0.0.0.0:8080/ws => Asterisk HTTP WebSocket

您也可以检查,如果插座在LISTEN状态:

netstat -lna | grep 8080