2010-03-03 69 views
4

我目前正在写一个Windows服务,使用星号AMI来检测呼叫何时进入,然后根据来自谁来执行网络请求和它将要去哪里。有没有人知道Asterisk的一个事件,我可以听包括这两个细节?我需要系统外部正在呼叫的人的号码,但只要可以在星号之外使用,我可以用来识别被呼叫的内部电话号码的任何号码都可以。检测呼叫与星号和谁打来的电话

我在看事件,他们都有外部调用者的号码,但他们没有一个链接到内部调用方,除了uniqueid,除非我建立这些服务中的字典我不会是能够使用。

有没有人有任何想法?

回答

5

所以最终我设法通过仅使用AMI和监听呼叫事件来实现这一点。通过我们想要访问的内容,我聆听了Newchannel事件,Dial事件和Hangup事件,但是如果您所追求的是呼叫的次数和呼叫次数,我相信您可以远离监控只是拨号事件。

每次收到Newchannel事件时,我都创建了一个Channel对象,并将它添加到当前位于Asterisk服务器上的Channel列表中。然后,通过使用开始子事件监听拨号事件,我可以提取呼叫中涉及的双方的唯一频道ID,然后获取所涉及的号码。收到Hangup事件后,我删除了正在销毁的频道。虽然我们没有全部时间来测试它,所以希望它是正确的,但现在看起来这很好。

0

我有一个想法,但你可能不喜欢的答案:)

我们试图做到这一点,失败了,所以我们做了一件坏事:)

我们没有打算写AGI脚本和他们使用Manager界面调用它们,然后刮擦命令行。

像核心节目频道简洁等东西,它的ikky,但它的工作..我们使用正则表达式来解析字符串输出,然后从那里抓取信息,唯一的问题就是,你必须观看每一个你修补的时候,因为命令行的输出往往会将修补程序更改为修补程序。

如果你确实发现了一种使用c#api而不使用agi的方法,我会非常感兴趣,但是我们只是无法做到api所期望的,而最终不使用agi脚本。

+0

谢谢,我正在研究一些其他选项,我会告诉你,如果我能找到工作。 – 2010-03-07 04:21:26