Asterisk 星号11谁挂断了电话?

Asterisk 星号11谁挂断了电话?,asterisk,asteriskami,asternet,Asterisk,Asteriskami,Asternet,我有一个Asterisk 11 PBX,我正在开发一个Windows服务应用程序,使用github AsterNET.AMI库连接我的PBX。在这里一切正常之前,我可以发送命令并读取传入的事件消息 但现在我需要在我的软件上开发一个功能,它基于一个我认为很容易检索的信息。我要找的信息是-谁挂断了电话 我在谷歌上搜索了很多,找到了一些答案,其中大部分都是关于在CDR上设置G选项的,但也有一些关于这种方法的考虑。尽管如此,我还是无法为我的场景获取任何有价值的信息 也许如果我告诉你我的工作方案,你可以帮

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

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

我在谷歌上搜索了很多,找到了一些答案,其中大部分都是关于在CDR上设置G选项的,但也有一些关于这种方法的考虑。尽管如此,我还是无法为我的场景获取任何有价值的信息

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

  • 我确实有一个打电话的人用手机打电话,这个电话是从我的内部PBX分机传入的

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

  • 无论是来电者还是被叫者挂断电话,我都会收到“正常清除”的信息来说明挂断的原因

  • 我知道我正在从我的服务提供商那里收到关于释放装置的信息,因为如果我使用西门子3800 Hipath over CSTA,我可以检索到这些信息


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

您可以在拨号应用程序中尝试g和F选项的组合。g选项允许在被叫方挂断时执行dialplan,而F选项允许在调用者挂断时继续执行您选择的上下文、扩展、优先级。 因此,您可以通过呼叫结束后执行的拨号计划来了解哪一方正在挂断。
请在此处查找有关这些选项的更多信息:

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

由于我使用库来连接和管理我的星号,所以我稍微修改了源代码,让事件处理程序读取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
因此,根据我可以注意到的消息中的通道是与释放设备相关的通道,CallerIDNum和CallerIDName也与释放设备相关

这个特性现在还没有在github库上实现,但是我将把它推到那里,并要求他们在下一个版本中包含它


但是我不知道在哪里可以阅读免费PBX管理员的这些信息。

它会干扰CDR,我认为这不是一个好方法。我可以通过阅读HangupRequest事件来做到这一点。