【问题标题】:Detect incoming call with Asterisk and who the call is going to使用 Asterisk 检测来电以及呼叫的对象
【发布时间】:2010-03-03 23:36:58
【问题描述】:

我目前正在编写一个 Windows 服务,该服务使用 Asterisk AMI 来检测何时有来电,然后根据来电者和去往者执行 Web 请求。有谁知道 Asterisk 中的一个事件,我可以监听这两个细节?我需要系统外正在呼叫的人的号码,但我可以用来识别被呼叫的内部电话号码的任何东西都可以,只要它可以在星号之外使用。

我正在查看这些事件,它们都有外部调用者的号码,但是它们都没有链接到内部调用者,除了唯一ID,除非我在服务中构建这些字典,否则我不会可以使用。

【问题讨论】:

    标签: c# asterisk telephony


    【解决方案1】:

    所以最后我设法通过仅使用 AMI 并监听呼叫事件来做到这一点。通过我们想要访问的内容,我监听了 Newchannel 事件、Dial 事件和 Hangup 事件,尽管如果你所追求的只是呼叫的人数和他们呼叫的人数,我很确定你可以摆脱监控只是拨号事件。

    每次收到 Newchannel 事件时,我都会创建一个 Channel 对象并将其添加到当前位于 Asterisk 服务器上的 Channel 列表中。然后,通过使用 Begin 的子事件监听 Dial 事件,我能够提取通话双方的唯一频道 ID,然后获取相关号码。收到 Hangup 事件后,我删除了正在销毁的频道。虽然我们还没有足够的时间来测试它,但现在这似乎工作得很好,所以希望它是正确的。

    【讨论】:

      【解决方案2】:

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

      我们试图这样做但失败了,所以我们做了一些邪恶的事情:)

      我们所做的是编写 agi 脚本,然后他们使用 Manager 界面调用它们,然后抓取命令行。

      诸如核心显示频道之类的东西简洁等,它的 ikky 但它有效.. 我们使用正则表达式来解析字符串输出,然后从那里获取信息,这样做的唯一问题是你必须每次都观看你打补丁,因为命令行的输出往往会改变补丁。

      如果您确实发现了一种使用 c# api 而不是使用 agi 的方法,我会非常感兴趣,但是如果不使用 agi 脚本,我们就无法使用 api 做我们想做的事情。

      【讨论】:

      • 谢谢,我目前正在研究其他一些选项,如果我能得到一些工作,我会告诉你。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多