dem*_*ian 4 voip asterisk asteriskami
我正在制作一个应该能够监控我的Asterisk服务器上的呼叫的Web应用程序.我可以使用URL上的Javascript WebSocket连接到ARI ws://(host):8088/ari/events?app=dialer并且它可以工作.问题是我只从通过ARI进行的呼叫中获取事件.来自Zoiper等其他客户的电话未注册.在另一方面,Asterisk有AJAM它采用长轮询上http://(host):8088/rawman?action=waitevent和它注册的所有客户端,(ARI,Zoiper和其他人)电话,但这里只有信息谁在呼叫(主叫),没有人(被叫).
所以,我的问题是,如何从所有客户端(最好)使用WebSockets获取实时调用事件,以显示谁在调用谁.谢谢.
ARI使用基于订阅的模型进行事件.引用维基上的文档:
默认情况下,Asterisk中的资源不会将有关自身的事件发送到连接的ARI应用程序.为了获得有关资源的事件,必须发生以下三种情况之一:
- 资源必须是进入Stasis拨号方案应用程序的通道.在这种情况下隐式创建订阅.当频道离开Stasis dialplan应用程序时,隐式销毁订阅.
- 当频道在Stasis拨号方案应用程序中时,该频道可以与其他资源(例如桥接器)交互.当渠道与资源交互时,会对该资源进行订阅.当Stasis拨号方案应用程序中没有其他通道与资源交互时,隐式订阅将被销毁.
- 任何时候,ARI应用程序都可以通过应用程序操作订阅Asterisk中的资源.当该资源存在时,ARI应用程序拥有该订阅.
因此,您通过ARI WebSocket获取有关频道事件的原因是因为它进入了Stasis拨号方案应用程序.然而,这不是获取事件的唯一方法.
如果您对来自其他事件源的事件感兴趣,可以使用应用程序资源订阅这些资源.例如,如果我想接收与PJSIP端点"Alice"相关的所有事件,我会使用以下内容订阅:
POST https://localhost:8080/ari/applications/my_app/subscription?eventSource=endpoint:PJSIP%2FAlice
Run Code Online (Sandbox Code Playgroud)
请注意,对端点的预订会隐式地为您订阅为该端点创建的所有通道.如果要订阅特定技术的所有端点,还可以订阅资源本身:
POST https://localhost:8080/ari/applications/my_app/subscription?eventSource=endpoint:PJSIP
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11134 次 |
| 最近记录: |