我目前正在开发一个基于TAPI的应用程序,以便使用我们的思科IP电话系统为我们呼叫中心的座席提供“智能呼叫者ID”。当有电话打进来,座席在他们的工作站上用“真正的”电话接电话时,驻留在工作站系统托盘中的应用程序就会获取呼叫远程端的号码,并通过一个中央数据库运行该号码,以查看该号码是否属于我们的某个客户公司或他们的代表。如果是这样的话,我们将显示代理现在正在与谁交谈的信息(人员或客户位置名称、公司、头衔等)。
我使用Julmar优秀的ATAPI库开发了一个概念验证,可以监控我隔间的电话,并让它工作得很好。然而,座席的电话有一个显著的不同之处;它们插入sidecar模块,并将另外14个分机连接到我们的1-800寻线线路。
我现在遇到的问题是,我不仅需要知道呼叫何时连接,而且需要知道它何时连接到我正在监控的单个电话,位于运行应用程序的工作站下面。目前,我可以看到所有800条线路上的线路状态更改,但我无法区分哪些线路状态更改是由我监控的电话设备的操作直接导致的;显然,我可以监控电话状态和线路状态的更改,但如果在800区块上振铃的两个呼叫几乎同时由两个座席代答,我无法区分哪部电话接听了哪一个呼叫。
此信息必须在TAPI接口中的某处可用,如果可能没有被ATAPI包装的话。任何关于我应该看什么的提示,希望来自以前做过这件事的人,非常感谢。
发布于 2012-12-14 02:18:50
我找到了解决方法。
对于那些只想插入即走的人来说,ATAPI库有点虚伪。TapiLine的CallStateChanged事件使用一个接受CallStateEventArgs作为EventArgs参数的委托。然而,事实证明CallStateEventArgs是一个基类。功能,但不是所有情况下都是完整的。
当连接调用时,实际传递给事件的是一个ConnectedCallStateEventArgs实例。此派生类使用ConnectModes枚举类型的模式只读字段,不仅显示基类的旧CallStates和新模式,还显示思科文档中引用的“呼叫状态模式”。
在思科文档中,如果您正在监听共享线路(例如来自800区块),并且与您监听的线路实例相关联的电话代答或加入了该线路上的呼叫,则呼叫状态模式将为"LINECONNECTEDMODE_ACTIVE“。如果你的电话不是通话的一方,它就是"LINECONNECTEDMODE_INACTIVE“。如果线路不是共享的,则线路上任何已连接呼叫的连接模式都将为零( ATAPI库中的“None”;如果您获得此值,则假定您的电话是呼叫的一方)。
使用这条附加信息,可以知道与线路相关联的电话实际上正在通话中。对于您使用可访问线路的TAPI实例监控的每部电话,您将获得该特定800数据块线路的一条线路实例,这样您就可以知道您正在监视的两部、三部或十部电话中哪一部接到了呼叫。如果您没有在一台计算机/TAPI实例上监听多部电话,并且/或者您监听的任何电话上的呼叫都处于非活动状态,则无法区分哪部电话有该呼叫;只能知道您的电话没有。
这对我来说已经足够了;代理只需要知道他们在与谁交谈,而不需要知道其他任何人。如果我们需要为楼层经理的办公桌提供一个帐户来监控所有20部电话,我们可以稍后再处理。
https://stackoverflow.com/questions/13770368
复制相似问题