c# - 与 Cisco 电话的 TAPI;使用 "sidecar"800 模块

标签 c# cisco tapi

我目前正在开发一个基于 TAPI 的应用程序,以便使用我们的 Cisco IP 电话系统向调用中心的代理提供“智能来电显示”。当有电话打入并且客服人员在其工作站的“真实”电话上接听电话时,位于工作站系统托盘中的应用程序会获取调用远程端的号码,并通过中央数据库运行该号码查看该号码是否属于我们的客户公司之一或其代表。如果是这样,我们会显示有关代理正在与谁交谈的信息(人员或客户位置名称、公司、职位等)。

我使用 Julmar 的优秀 ATAPI 开发了一个概念验证来监控我隔间的手机。库,并使其运行良好。但代理商的电话有显着差异;它们插入一个 sidecar 模块,另外 14 个分机连接到我们的 1-800 寻线。

我现在遇到的问题是,我不仅需要知道调用何时连接,还需要知道调用何时连接到我正在监视的单个电话(位于运行应用程序的工作站下方)。目前,我可以看到所有 800 条线路上的线路状态变化,但我无法判断哪些线路状态变化是我正在监控的电话设备操作的直接结果;显然,我可以监控电话状态和线路状态的变化,但如果两个座席几乎同时接听 800 block 上响铃的两个电话,我就无法分辨哪部电话接到了哪个电话。

此信息只需在 TAPI 接口(interface)中的某个位置可用(如果可能没有被 ATAPI 封装的话)。任何关于我应该看什么的提示,希望来自以前做过这件事的人,我们都很感激。

最佳答案

我找到了修复方法。

对于那些只想即插即用的人来说,ATAPI 库有点不诚实。 TapiLine 的 CallStateChanged 事件(您 Hook 以获取连接调用的通知)使用接受 CallStateEventArgs 作为 EventArgs 参数的委托(delegate)。然而,事实证明 CallStateEventArgs 是一个基类。功能齐全,但并不适合所有情况。

连接调用时实际传递给事件的是 ConnectedCallStateEventArgs 实例。此派生类不仅公开基类的旧的和新的 CallStates,而且还公开 Cisco 文档中引用的“调用状态模式”,使用 ConnectModes 枚举类型的 Mode 只读字段。

根据 Cisco 文档,如果您正在监控共享线路(例如来自 800 block ),并且该线路上的调用由与您正在监控的线路实例关联的电话接听或加入,则调用状态模式将为“LINECONNECTEDMODE_ACTIVE”。如果您的手机不是通话方,则为“LINECONNECTEDMODE_INACTIVE”。如果线路未共享,则线路上任何已连接调用的连接模式都将为零(ATAPI 库中的“无”;如果您获得此值,则假设您的手机是调用方)。

使用这条附加信息,可以知道与线路关联的电话实际上正在通话。对于您使用可以访问该线路的 TAPI 实例监控的每部电话,您将获得该特定 800 block 线路的一个线路实例,因此您可以知道您正在监视的两部、三部或十部电话中的哪部接到了调用。如果您没有在一台计算机/TAPI 实例上监控多部电话,和/或您正在监控的任何电话上的调用均未处于事件状态,则您无法判断哪部电话有调用;只是您的手机

这对我来说已经足够了;代理只需要知道他们正在与谁交谈,而不是其他任何人。如果我们需要为楼层经理的办公 table 创建一个帐户来监控拥有 800 个 block 的所有 20 部电话,我们可以稍后处理。

关于c# - 与 Cisco 电话的 TAPI;使用 "sidecar"800 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13770368/

相关文章:

c# - 只有标题数据的 WPF Datagrid 水平滚动

C# CRC 实现

java - Cisco CVP 与自定义修改元素集成

python - 使用python Telnet cisco交换机

c# - 不使用 IntPtr 的 SafeHandle

c# - 用C#打电话

c# - 如何在 Windows 资源管理器中打开文件夹?

c# - Windows 10 中虚拟桌面的编程控制

.net - 捕获 VPN 使用统计信息