基于TSAPI协议的CTI应用
基于TSAPI协议的CTI应用
摘要 本文介绍了一种小型呼叫中心的软硬件构建方案。方案参照和使用了目前计算机网络和电话网络的接口标准协议TSAPI,详细 论述了CTI技术的核心设备通信服务器的典型结构,给出了用TSAPI协议实现对坐席(Agent)和ACD进行控制的应用程序模块。提出了基于 TSAPI协议建立呼叫中心的可行方案,探讨其经济性和实用性。
关键词  计算机电话集成    TSAPI协议  客户/服务器  套接字
计算机电话集成(CTI,Computer Telephony Integration) 是指通过软硬件接口及控制设备把电话和计算机信息处理集成在一起, 实现对语音、数据、视频等的相互融合,增强通信能力的一种技术[1]。近几年来,随着通信网络数字化的飞速发展和计算机处理能力的不断提高,通信技术和计算机技术相互渗透的进程明显加快,CTI技术也随之得到了广泛的应用。其中呼叫中心是最主要的应用领域。
对于CTI技术而言,CTI应用标准是CTI技术发展的关键因素。目前流行的CTI标准主要有CSTA
( Computer Supported Telecommunication  Application)、TAPI(Telephony API)、TSAPI(Telephony Services API)、JTAPI(Java Telephony API)。本文以目前应用最为广泛的TSAPI协议为基础,介绍了一种呼叫中心的硬件结构组成及其软件实现。
2  基于TSAPI协议的CTI系统硬件架构
本文以正在建设的某地119火警报警服务中心(Call Center)电话调度工程为例,提出了基于TSAPI协议的CTI建设方案。方案参考ECTF(Enterprise Computer Telephony Forum)定义的TSAPI系统设计标准模式,采用客户/服务器(C/S,Client/server)组网模型,通过局域网实现电话交换系统 (PBX, Private Branch  Exchange)、电话服务器(TS,Telephony server)和应用通讯程序之间的三方连接【2】,本方案在TSAPI标准构架的基础上做了进一步的改进,设立警情服务器(Agent Server)和通讯服务器(Communication server )。
警情服务器用于集中监控坐席电话状态,传递系统内部消息和完成呼叫分配等工作。通讯服务器主要负责接收解析数据包和消息,并通过内部协议将数据 包翻译为TSAPI协议的标准格式发往电话服务器,与排队机(ACD)或者交换机(PBX)进行信息交换,达到了使用TSAPI协议对坐席电话控制的目 的。事实上警情服务器和通讯服务程序是整个系统内信息交换的枢纽。
本文设计的CTI系统总体结构如图1所示:
3 软件结构设计
3.1 整体实现技术
基于通讯服务程序在系统中所要实现的功能,程序设计遵循了以下几点原则:
.应用通讯程序采用WindowsNT/2000服务模式运行。通讯服务程序在后台自动运行,与用户不需过多交互,故采用Windows NT/2000服务模式进行安全,避免人为因素造成的通讯中断。
.通讯服务程序采用多线程编程方式。通讯服务需要接收警情服务器、电话服务器两个方向上的数据包及消息并处理,且数据包、TSAPI消息到达的时间及数量是完全异步的。因而采用多线程及同步异步等灵活多样的模式。
.在TSAPI基础上自定义内部通讯协议。为了便于警情服务器和通讯服务器对各坐席进行监控和管理,定义了内部通讯协议,把控制命令封装成数据包的形式在系统内部传送。
3.2  TSAPI程序总体流程
在程序设计之前,首先要明确TSAPI协议实现CTI功能时,首先利用AcsOpenStream()函数在通讯应用程序和电话服务器之间开启 一条通信虚拟通道:ACS流(Application Control services stream),当电话服务器返回创建成功的确认消息ACSOpenStreamConfEvent后, ACS流成功开启,然后应用程序就可以与电话服务器进行通信【3】
应用程序在处理TSAPI消息时,使用cstaMonitorDevice ( )函数开启对该电话的监控,以获得该电话的相关呼叫消息。通常,应用程序会接收到两种消息类型:确认消息(消息头为CstaConfEvent)和事件消 息(消息头为CstaUnsolicitedEvent)。
3.3  功能模块设计
通讯服务器软件由两大部分组成,分别为服务控制台部分、通讯服务程序部分。其中服务控制台部分主要负责通讯服务程序的初始化。通讯服务程序部分 主要功能是实现警情服务器和电话服务器之间的协议转换,完成基本呼叫控制、信息获取等功能。按照总体设计要求,将通讯服务器划分为五大功能模块,分别 为:TSAPI消息获取与分配模块、TSAPI消息处理模
块、数据包收发模块、数据包处理模块和辅助功能模块。整个通讯服务器软件程序采用VC++6.0 编写。
下面将对各个模块的结构及功能进行简要介绍:
3.3.1  通讯服务控制台模块
通讯服务控制台模块主要功能:在应用程序初始化时,需要对服务模式的通讯服务程序进行控制。当通讯应用程序初次运行时需要在注册表中创建子键用于存储应用程序相关信息,同时在用户界面上操作人员能够完成启动服务、停止服务、设置自动/手动启动服务模式等交互操作。
3.3.2  TSAPI消息获取与分发模块
在TSAPI消息获取与分发模块建立两个线程【4】:CtsapiWnd 和CQueueCsta。其中,CQueueCsta线程主要负责对电话服务器(TS)的消息缓冲区进行轮询,每10毫秒进行一次,如缓冲区由空状态变为 存储了消息,CQueueCsta线程通过自定义消息WM_TSAPIMSG通知CTsapiWnd线程对缓冲区的消息进行读取。
CTsapiWnd线程主要负责TSAPI确认消息及事件消息的读取与分发,当接收到WM_TSAPIMSG消息后,CTsapiWnd线程就 会到电话服务器消息缓冲区中提取消息,并根据消息句柄将消息分发到相应的线程。如果消息缓冲区队列中不止一条消息存在,则CTsapiWnd线程在分发完 上一条消息后,会继续对自身发WM_TSAPIMSG消息,通知自己继续读取消息直至取完为止。
3.3.3   TSAPI消息处理模块
TSAPI消息处理模块由CMessThread线程组成。主要负责解释CTsapiWnd线程转发过来的消息,从中提取出与设备及呼叫相关的信息,并对设备记录表进行相应存储、删除、更新等操作,使程序能够随时掌握设备当前最新的状态信息。
通常,CTsapiWnd线程会接收到两种消息类型:确认消息(消息头为CstaConfEvent) 、事件消息(消息头为 CstaUnsolicitedEvent)。CMessThread线程主要负责对这两类消息进行处理,其中,对事件消息的处理是最重要的。 CMessThread线程将消息分解,提取出程序对呼叫进行控制时需要的信息,然后根据消息类型对设备记录进行相应操作。例 如,CSTA_CONNECTION_CLEARED消息表示一个通话连接的清除【3】,即控制ACD,使得
呼叫的一方挂机,清除建立的连接。
下面再讨论有关消息接收与分发线程和消息处理线程间的同步问题。对于同一条消息,只有发送与解析同步,才能使得应用 程序的桌面状态和电话设备二者关联一致。为此,CMessThread线程与CTsapiWnd线程间采用同步事件标记hCounter来对两者进行同 步。使得同一时间只能对同一条消息进行分发和处理。
3.3.4  数据包接收模块
数据包接收模块由CServiceWnd线程组成,负责创建一个异步模式套接字,接收警情服务器发过来的各类数据命令包。
thread技术
为了避免因为对数据包的处理延时而有可能造成的接收数据包丢失问题,通讯服务将数据包的处理与接收分为两个完全异步的线程。线程之间以消息作为 通讯机制,当CServiceWnd线程接收到一个数据包时,并不要求数据包处理线程马上同步处理,而是将数据包排入一个队列Q,并利用消息 WM_COMMANDARRIVE通知处理线程CThread有数据包在排队。
3.3.5   数据包处理模块
数据包处理模块由CThread线程来实现,该线程负责对警情服务器转发过来的各类数据包进行解析处理。
当CThread线程接收到CServiceWnd线程发送过来的WM_COMMANDARRIVE消息时,就去队列Q中取出数据包并处理,根 据数据包类型将其拆包分解,翻译为TSAPI协议的相应API函数,然后发往电话服务器,对呼叫和座席状态进行控制。系统传送、读取、处理的数据包主要是 根据系统内部协议制定的各种控制命令包。当数据包处理线程CThread对数据包进行拆包处理时,根据内部定义的通信协议进行操作。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。