我目前正在编写一个 Windows 服务,该服务使用 Asterisk AMI 来检测呼叫何时进入,然后根据呼叫的来源和目标执行 Web 请求。有谁知道 Asterisk 中的一个事件,我可以监听这两个细节?我需要系统外正在呼叫的人的号码,但我可以用来识别被呼叫的内部电话号码的任何东西都可以,只要它可以在星号之外使用。
我正在查看这些事件,它们都有外部调用者的号码,但是除了唯一ID之外,它们都没有链接到内部调用者,除非我在服务中构建这些字典,否则我将无法采用。
所以最后我设法通过只使用 AMI 并监听呼叫事件来做到这一点。通过我们想要访问的内容,我监听了 Newchannel 事件、Dial 事件和 Hangup 事件,尽管如果你所追求的只是呼叫的人数和他们呼叫的人数,我很确定你可以摆脱监控只是拨号事件。
每次收到 Newchannel 事件时,我都会创建一个 Channel 对象并将其添加到当前位于 Asterisk 服务器上的 Channels 列表中。然后,通过使用 Begin 的子事件监听 Dial 事件,我能够提取通话双方的唯一频道 ID,然后获取相关号码。收到 Hangup 事件后,我删除了正在销毁的频道。虽然我们没有足够的时间来测试它,但现在这似乎工作得很好,所以希望它是正确的。
我确实有一个想法,但你可能不喜欢这个答案:)
我们试图这样做但失败了,所以我们做了一些邪恶的事情:)
我们所做的是编写 agi 脚本,他们使用 Manager 界面调用它们,然后抓取命令行。
诸如核心显示频道简洁之类的东西,它的ikky但它有效..我们使用正则表达式来解析字符串输出,然后从那里获取信息,这样做的唯一问题是你每次修补时都必须观看命令行的输出倾向于将补丁更改为补丁。
如果您确实发现了一种使用 c# api 而不是使用 agi 的方法,我会非常感兴趣,但是如果最终不求助于 agi 脚本,我们就无法使用 api 做我们想做的事情。