代码之家  ›  专栏  ›  技术社区  ›  Dan Lowe

使用ARI监视桥梁相关事件

  •  1
  • Dan Lowe  · 技术社区  · 10 年前

    我正在尝试使用星号ARI来观看与桥梁相关的事件。我使用的是星号13.6.0。

    具体来说,我想知道何时创建或销毁了一个网桥,何时用户(频道)加入或离开了网桥。在我的服务器上,网桥在有人拨入时动态创建,在最后一个成员离开网桥时自动销毁。

    使用 node-ari-client Asterisk项目中的库,并遵循他们的一些示例代码,这就是我目前所拥有的。

    var client = require("ari-client");
    var util = require("util");
    
    client.connect("http://localhost:8088", "username", "password")
    
    .then(function (ari) {
    
        ari.once("StatisStart", channelJoined);
    
        function channelJoined (event, incoming) {
    
            incoming.on("BridgeCreated", function(event, bridge) {
                console.log(util.format("Bridge created: %s", bridge.id));
            });
    
            incoming.on("BridgeDestroyed", function(event, bridge) {
                console.log(util.format("Bridge destroyed: %s", bridge.id));
            });
    
            incoming.on("ChannelEnteredBridge", function(event, channel) {
                console.log(util.format("Bridge was joined by: %s", channel.id));
            });
    
            incoming.on("ChannelLeftBridge", function(event, channel) {
                console.log(util.format("Bridge was joined by: %s", channel.id));
            });
        }
    
        ari.start("bridge-watcher");
    })
    
    .done();
    

    我希望 .on() 当各种事件发生时,处理程序将打印到控制台。然而,呼叫进入桥接器,离开桥接器时,控制台永远不会打印任何内容。

    如果重要的话,下面是 npm ls 显示我正在使用的版本。节点为v0.10.36。

    ├─┬ ari-client@0.5.0
    │ ├── backoff-func@0.1.2
    │ ├── bluebird@2.9.34
    │ ├── node-uuid@1.4.1
    │ ├─┬ swagger-client@2.0.26
    │ │ ├── btoa@1.1.1
    │ │ └─┬ shred@0.8.10
    │ │   ├── ax@0.1.8
    │ │   ├── cookiejar@1.3.1
    │ │   ├── iconv-lite@0.2.11
    │ │   └── sprintf@0.1.1
    │ ├── underscore@1.6.0
    │ └─┬ ws@0.4.31
    │   ├── commander@0.6.1
    │   ├── nan@0.3.2
    │   ├── options@0.0.5
    │   └── tinycolor@0.0.1
    ├── bluebird@3.1.1
    └─┬ util@0.10.3
      └── inherits@2.0.1
    
    1 回复  |  直到 10 年前
        1
  •  2
  •   Matt Jordan    10 年前

    具体来说,我想知道何时创建了一座桥,或者 当用户(频道)加入或离开网桥时。在…上 我的服务器,网桥是在有人拨入时动态创建的 当最后一个成员离开桥时自动销毁。

    记住: 主要的,重要的 ARI的目的是 build your own dialplan applications ,而不是监视整个星号。因此,默认情况下,您的外部应用程序不会订阅Asterisk中的资源。作为 Channels in a Stasis Application 章节解释:

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

    1. 资源必须是进入Stasis拨号计划应用程序的频道。在这种情况下,将隐式创建订阅。当频道离开Stasis拨号计划应用程序时,订阅被隐式销毁。

    2. 当一个频道在Stasis拨号计划应用程序中时,该频道可能与其他资源交互,例如网桥。当频道与资源交互时,将订阅该资源。当Stasis拨号计划应用程序中不再有频道与资源交互时,隐式订阅将被破坏。

    3. 在任何时候,ARI应用程序都可以通过应用程序操作订阅星号中的资源。当该资源存在时,ARI应用程序拥有订阅。

    如果您希望自动获取Asterisk中频道使用的资源的事件 bridge-watcher 除非你做以下两件事之一,否则你不会得到它们:

    1. 使用 applications resource 。这对于相对静态和/或寿命较长的资源很好,如端点、静态网桥(如用于会议的网桥)、邮箱和设备状态。对于临时性资源,它不起作用。

    2. 在Asterisk 13.6.0及更高版本中,您现在可以在连接WebSocket时订阅所有事件源。在里面 node-ari-client ,您将执行以下操作:

      阿丽。start(桥牌观察者,true);

    但是,您应该注意,即使您订阅了所有资源,也不会显式地 拥有 他们你只需要自动观看它们。所有权的概念在ARI中非常重要,特别是当它涉及到你可以和不能对渠道做什么以及什么时候做。我链接的维基页面提供了一些合理的文档说明这是如何工作的。