【问题标题】:Asterisk 11 Who Hanged Up?Asterisk 11 谁挂断了电话?
【发布时间】:2019-09-27 17:28:07
【问题描述】:

我有一个 Asterisk 11 PBX,我正在使用 github AsterNET.AMI 库开发一个 Windows 服务应用程序来连接我的 PBX。到这里一切正常,我可以发送命令并读取传入的事件消息。

但是现在我需要基于我认为可以轻松检索的信息在我的软件上开发一项功能。我要查找的信息是——谁挂断了电话?

我在谷歌上搜索了很多,我可以找到一些答案,其中大多数都在谈论在 CDR 上设置 G 选项,但也有一些关于这种方法的注意事项。仍然像这样,我无法为我的场景获取任何有价值的信息。

也许如果我告诉你我的工作场景你可以帮助我。走吧,我要拆开这个:

  • 我确实有一个来电者从手机打来电话,这个电话是打到我的内部 PBX 分机

  • 我的 PSTN 中继是直接连接到我的 PBX 的 E1/R2

  • 无论主叫方或被叫方是否总是挂断,我确实有 hangup_cause 的“正常清除”消息

  • 我知道我正在从我的服务提供商那里收到有关释放设备的信息,因为如果我通过 CSTA 使用 Siemens 3800 Hipath,我可以检索此信息。

所以黄金问题是:在这种情况下,我如何检索谁是释放设备?

【问题讨论】:

    标签: asterisk asteriskami asternet


    【解决方案1】:

    您可以在拨号应用程序中尝试组合使用 g 和 F 选项。 g 选项允许在被叫方挂断时执行拨号计划,而 F 选项允许您在主叫方挂断时继续执行到您选择的上下文、扩展、优先级。 因此,您可以通过通话结束后正在执行的拨号计划了解哪一方挂断。 在此处查找有关这些选项的更多信息:https://www.voip-info.org/asterisk-cmd-dial/

    【讨论】:

    • 它涉及弄乱 CDR,我认为这不是一个好方法。我可以通过阅读 HangupRequest 事件来做到这一点。
    【解决方案2】:

    几乎完全阅读 Asterisk 文档后,我能找到的唯一方法是阅读 HangupRequest 事件消息。

    由于我使用AsterNet.AMI 库来连接和管理我的 Asterisk,所以我稍微更改了源代码以让事件处理程序读取 HangupRequest 事件。

    HangupRequest 事件写入如下消息:

    Event: HangupRequest
    Privilege: call,all
    Channel: SIP/8103-000001be
    ChannelState: 6
    ChannelStateDesc: Up
    CallerIDNum: 8103
    CallerIDName: Agent 8103
    ConnectedLineNum: 51999887766
    ConnectedLineName: 51999887766
    Language: en
    AccountCode:
    Context: from-internal
    Exten: 8100
    Priority: 1
    Uniqueid: 1569618521.446
    Linkedid: 1569618519.445
    

    所以根据HangupRequest Event Asterisk documentation我可以注意到消息中的频道是与发布设备相关的频道,CallerIDNum和CallerIDName也与之相关。

    这个功能现在还没有在 github 库上实现,但我会推到那里并要求他们在下一个版本中包含。

    但我不知道在哪里可以在 FreePBX Admin 上阅读此信息。

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多