如何从Asterisk REST API(ARI)获取所有拨号程序事件?

如何从Asterisk REST API(ARI)获取所有拨号程序事件?,asterisk,voip,asteriskami,Asterisk,Voip,Asteriskami,我正在制作一个web应用程序,它应该能够监视我的Asterisk服务器上的调用。我可以通过URLws://(主机):8088/ARI/events?app=dialer上的Javascript WebSocket连接到ARI,并且可以正常工作。问题是我只从通过ARI进行的调用中获取事件。来自其他客户端(如Zoiper)的呼叫未注册。另一方面,Asterisk有一个AJAM,它在http://(主机):8088/rawman?action=waitevent上使用长轮询,并注册来自所有客户端(AR

我正在制作一个web应用程序,它应该能够监视我的Asterisk服务器上的调用。我可以通过URL
ws://(主机):8088/ARI/events?app=dialer
上的Javascript WebSocket连接到ARI,并且可以正常工作。问题是我只从通过ARI进行的调用中获取事件。来自其他客户端(如Zoiper)的呼叫未注册。另一方面,Asterisk有一个AJAM,它在http://(主机):8088/rawman?action=waitevent上使用长轮询,并注册来自所有客户端(ARI、Zoiper和其他)的呼叫,但只有信息谁在呼叫(呼叫者),而不是谁在呼叫(被呼叫者)


所以,我的问题是,如何从所有客户(最好是使用WebSocket)获取显示谁在呼叫谁的实时呼叫事件。谢谢。

ARI使用基于订阅的活动模型。从以下文件中引用:

默认情况下,星号中的资源不会向连接的ARI应用程序发送有关其自身的事件。要获取有关资源的事件,必须发生以下三种情况之一:

  • 该资源必须是输入计划应用程序的通道。在这种情况下,将隐式创建订阅。这个 当通道离开时,订阅将被隐式销毁 计划应用程序
  • 当通道位于应用程序中时,该通道可能与其他资源(如网桥)交互。而渠道 与资源交互时,对该资源进行订阅。 当应用程序中没有更多通道交互时 对于资源,隐式订阅将被销毁
  • 在任何时候,ARI应用程序都可以通过应用程序操作订阅星号中的资源。而 资源存在时,ARI应用程序拥有订阅
  • 因此,您通过ARI WebSocket获取有关频道的事件的原因是它进入了应用程序。然而,这并不是获取事件的唯一方法

    如果您对来自其他事件源的事件感兴趣,可以使用资源订阅这些资源。例如,如果我希望接收与PJSIP端点“Alice”相关的所有事件,我将使用以下命令进行订阅:

    POST https://localhost:8080/ari/applications/my_app/subscription?eventSource=endpoint:PJSIP%2FAlice
    
    请注意,对端点的订阅隐式地向您订阅为该端点创建的所有通道。如果要订阅特定技术的所有端点,还可以订阅资源本身:

    POST https://localhost:8080/ari/applications/my_app/subscription?eventSource=endpoint:PJSIP
    

    为了更清楚地了解Matt Jordan已经提供的内容,以下是一个他建议的示例:

    ws://(主机):8088/ari/events?app=dialer&subscibeAll=true 添加SubscribeAll=true实现您想要的=)

    可能会对某人有所帮助:

    订阅通道、网桥和端点上的所有事件

    POST http://localhost:8088/ari/applications/appName/subscription?api_key=user:password&eventSource=channel:,bridge:,endpoint:
    
    退订

    DELETE http://localhost:8088/ari/applications/appName/subscription?api_key=user:password&eventSource=channel:__AST_CHANNEL_ALL_TOPIC,bridge:__AST_BRIDGE_ALL_TOPIC,endpoint:__AST_ENDPOINT_ALL_TOPIC
    

    我订阅了PJSIP,现在它出现在该应用程序的“endpoint_id”下。“请注意,对端点的订阅隐式订阅您所有的频道”,它似乎没有收到与频道相关的“ChannelDtmfReceived”。这是一个正确的答案,否则您将被复制。
    DELETE http://localhost:8088/ari/applications/appName/subscription?api_key=user:password&eventSource=channel:__AST_CHANNEL_ALL_TOPIC,bridge:__AST_BRIDGE_ALL_TOPIC,endpoint:__AST_ENDPOINT_ALL_TOPIC