我一直在使用 C# 构建一个 WinForms 桌面应用程序,该应用程序使用 Aster.NET(以前/从 Asterisk.NET 派生)与 Asterisk 交互。我们在可靠地识别和跟踪与单个分机/用户相关的调用方面遇到了真正的麻烦。
我们遇到的问题是由于 Asterisk 触发/触发的事件具有不可预测/模糊的性质,它们根据调用在到达分机前的路由方式而变化很大。
例如,事件序列/格式在以下情况下是不同的:调用在盲转之前命中 IVR;如果调用在被转接之前到达 IVR;如果调用直接转到用户的分机。
Asterisk 使用不同的唯一 ID 跟踪调用的每一方(例如,调用的传入方与调用的接收方具有不同的 UID)的方式进一步阻碍了这一点。虽然我们已经设法在(后来变得丑陋!)代码中解决了这一问题,但我们仍然遇到了解决调用可能采用的不同路由路径的问题。
因此,我正在寻找有关如何执行以下操作的任何建议:
- 可靠地识别用户分机的来电
- 我们需要能够识别被调用的分机和始发调用者 ID(在盲转或有人值守转接以及来自外部的直接调用之后)
- 可靠地跟踪来电的唯一 ID,因为它用于链接到通话录音
- 可靠地识别来自用户分机的拨出电话
- 牢记与上述相同的注意事项
就目前而言,我们有一个极其复杂的事件处理程序链,它们根据应用程序的“当前状态”以不同方式运行。
举个例子:如果我们检测到 ChannelState 为 6('Up')的 NewStateEvent,我们会检查进程中是否有正在进行的调用和 UID 是否匹配,如果是那么当前的调用已经被接听了。如果 UID 不匹配,但其他因素匹配(例如 channel 、连接线路编号等),那么我们将其视为调用的“另一方”(即接收方或传入方)。
我不确定问题出在 API 还是 AMI 上 - 但无论是哪个问题都让我们头疼不已。
非常感谢任何建议。
最佳答案
您可以更新到 Asterisk 12 吗? AMI 中的 channel 名称现在在 Asterisk 12 中是稳定的。
https://wiki.asterisk.org/wiki/display/AST/AMI+v2+Specification
关于c# - 使用 C# 和 Aster.NET 可靠地识别和跟踪 Asterisk 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21459508/