c# - 使用 C# 和 Aster.NET 可靠地识别和跟踪 Asterisk 调用

标签 c# asterisk asteriskami

我一直在使用 C# 构建一个 WinForms 桌面应用程序,该应用程序使用 Aster.NET(以前/从 Asterisk.NET 派生)与 Asterisk 交互。我们在可靠地识别和跟踪与单个分机/用户相关的调用方面遇到了真正的麻烦。

我们遇到的问题是由于 Asterisk 触发/触发的事件具有不可预测/模糊的性质,它们根据调用在到达分机前的路由方式而变化很大。

例如,事件序列/格式在以下情况下是不同的:调用在盲转之前命中 IVR;如果调用在被转接之前到达 IVR;如果调用直接转到用户的分机。

Asterisk 使用不同的唯一 ID 跟踪调用的每一方(例如,调用的传入方与调用的接收方具有不同的 UID)的方式进一步阻碍了这一点。虽然我们已经设法在(后来变得丑陋!)代码中解决了这一问题,但我们仍然遇到了解决调用可能采用的不同路由路径的问题。

因此,我正在寻找有关如何执行以下操作的任何建议:

  1. 可靠地识别用户分机的来电
    • 我们需要能够识别被调用的分机和始发调用者 ID(在盲转或有人值守转接以及来自外部的直接调用之后)
    • 可靠地跟踪来电的唯一 ID,因为它用于链接到通话录音
  2. 可靠地识别来自用户分机的拨出电话
    • 牢记与上述相同的注意事项

就目前而言,我们有一个极其复杂的事件处理程序链,它们根据应用程序的“当前状态”以不同方式运行。

举个例子:如果我们检测到 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/

相关文章:

c# - Azure Key Vault 和证书 - .NET Framework ClientCertificateCredential 对 Secret 的访问

c# - 在 C# 中使用 C++ 方法

c# - 使VS2010项目文件提示路径默认为绝对路径?

c - Asterisk :双重释放或损坏(fasttop)

asterisk - 如何检查 Asterisk 中的文件是否存在

asterisk - 使用粘附发起调用

c# - 加密二维码的开源实现

mysql - MySQL配置ODBC后报错

asterisk - SipML5 和 Asterisk 在 makeCall 中返回 488

asterisk - 如何从 Asterisk REST API (ARI) 获取所有拨号事件?