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