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

iam*_*iam 5 c# asterisk asteriskami

我一直在使用C#构建WinForms桌面应用程序,该应用程序使用Aster.NET(以前/从Asterisk.NET分叉)与Asterisk交互。我们确实无法可靠地识别和跟踪与单个分机/用户相关的呼叫。

我们遇到的问题是由于Asterisk触发/触发的事件具有不可预测/模糊的性质,它们的变化很大,具体取决于呼叫到达分机之前路由的方式。

例如,在以下情况下,事件顺序/格式是不同的:呼叫在被盲目转移之前命中了IVR;如果呼叫在被转移前打到IVR;如果呼叫直接转到用户的分机。

Asterisk使用不同的唯一ID跟踪呼叫的每一端的方式(例如,呼叫的传入端具有与呼叫的接收端不同的UID),这进一步受到阻碍。尽管我们设法在(随后很丑陋!)代码中对此进行了说明,但在考虑该呼叫可以采用的不同路由路径方面仍然遇到了问题。

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

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

就目前而言,我们拥有极其复杂的事件处理程序链,这些事件处理程序根据应用程序的“当前状态”进行不同的操作。

举一个例子:如果我们检测NewStateEvent与ChannelState 6的(“上”),我们检查是否有过程正在进行的呼叫那的UID匹配,如果是的话,那么当前呼叫已被应答。如果UID不匹配,但其他因素匹配(例如,通道,connectedlinenum等),则我们将其视为呼叫的“另一端”(即接收方或传入方)。

我不确定问题是出在API还是AMI上-但是无论是什么原因,这都使我们有些头疼。

任何建议,不胜感激。

sru*_*ell 2

您可以更新到 Asterisk 12 吗?AMI 中的通道名称现在在 Asterisk 12 中稳定。

https://wiki.asterisk.org/wiki/display/AST/AMI+v2+规范

  • 如果您正在使用 AsteriskNOW,我认为您需要等到 FreePBX(这是 AsteriskNOW 用户的 GUI)更新以支持 Asterisk 12。这项工作已基本完成。http://blogs.digium.com/2014/01/14/freepbx-12-coming-soon/ (2认同)