我目前正在开发一个基于TAPI的应用程序,使用我们的思科IP电话系统为呼叫中心的座席提供“智能来电显示”。当呼叫进来并且代理在其工作站上的“真实”电话上接听时,位于工作站系统托盘中的应用程序将获取呼叫远程端的号码,并通过中央数据库运行它查看该号码是否属于我们的客户公司或其代表。如果是,我们会显示有关代理人正在与谁交谈的信息(个人或客户位置名称,公司,职位等)。
我开发了一个概念验证,使用Julmar优秀的ATAPI库来监控我的隔间的电话,并使其运行良好。然而,代理商的手机有很大差异;它们插入一个侧车模块,另外还有14个延伸线连接到我们的1-800点线。
我现在遇到的问题是,我不仅要知道呼叫何时连接,还要知道它是否连接到我正在监控的单个电话,它位于运行应用程序的工作站下面。目前,我可以看到所有800线路上的线路状态变化,但我无法分辨哪个线路状态变化是我正在监控的电话设备动作的直接结果;很明显我可以监控手机状态和线路状态的变化,但是如果两个座席几乎同时接听到800个座位上的两个呼叫,我就无法判断哪个电话接到了哪个电话。
如果可能未被ATAPI包装,则必须在TAPI接口的某处提供此信息。对于我应该关注的内容的任何提示,希望来自之前完成此操作的人,都会受到赞赏。
答案 0 :(得分:4)
我找到了解决办法。
ATAPI库对于那些只想插入和移动的人来说有点不诚实。 TapiLine的CallStateChanged事件,当您挂钩以通知已连接的调用时,使用一个委托,该委托接受CallStateEventArgs作为EventArgs参数。但是,事实证明CallStateEventArgs是一个基类。功能齐全,但并非完整适用于所有情况。
连接呼叫时实际传递给事件的是ConnectedCallStateEventArgs实例。此派生类不仅使用ConnectModes枚举类型的Mode只读字段公开基类的旧和新CallStates,还公开Cisco文档中引用的“调用状态模式”。
从思科文档中,如果您正在监控共享线路(例如800块),并且该线路上的呼叫被与您正在监控的线路实例关联的电话接听或加入,则呼叫状态模式将是“LINECONNECTEDMODE_ACTIVE”。如果您的手机不是通话的一方,则为“LINECONNECTEDMODE_INACTIVE”。如果线路未共享,线路上任何已连接呼叫的连接模式将为零(ATAPI库中为“无”;如果获得此值,则假设您的电话是呼叫的一方)。
使用这条额外的信息,可以知道与该线路相关联的电话实际上正在通话中。对于您正在使用可以访问线路的TAPI实例监控的每部电话,您将获得该特定800块线路的一个线路实例,这样您就可以知道您正在观看的两部或三部或十部电话中的哪一部接到了电话。如果您没有监控一台计算机/ TAPI实例上的多个电话,和/或您正在监控的任何电话上的呼叫未激活,您无法分辨哪个电话 接听电话;只有你的手机不。
这对我来说已经足够了;代理人只需要知道他们在和谁说话,而不是其他任何人。如果我们需要一个账户管理员的桌子来监控所有20块拥有800块电话的电话,我们可以稍后处理。