0

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

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

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

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

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

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

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

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

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

4

2 回答 2

0

在几乎完全阅读 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 文档,我可以注意到消息中的通道是与释放设备相关的通道,CallerIDNum 和 CallerIDName 也与之相关。

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

但是我不知道在哪里可以阅读 FreePBX Admin 上的这些信息。

于 2019-09-30T19:07:00.330 回答
0

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

于 2019-09-28T20:34:54.373 回答