您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 往来文书 > 41【融合通讯】【TAPI编程实验1——秘书代呼】
学生实验指导手册(高级)实验三:TAPI编程实验1——秘书代呼【实验名称】TAPI编程实验1——秘书代呼【实验目的】通过阅读、分析实验提供的秘书代呼软件范例(demo)源代码,完成实验中要求的增补代码,使得deomo程序可以被编译、链接、运行,并通过TAPI接口控制软交换服务器实现电话转接的功能。通过这个编程实验,学生可以熟悉标准TAPI接口的使用方法,掌握在PC上开发TAPI应用程序的基本流程。【背景描述】“小林,帮我查一下吴校长的手机号码!我有要事找他。”……“刘主任,您记好了,号码是138xxxxxxxx。”刘主任实在受不了这样的工作方式了——每天都要这样麻烦秘书小林好几次。“能否让小林代呼,呼通后再转给我呢?哈,真是一个好想法。”【实验原理】TAPI(TelephonyApplicationProgramInterface电话应用程序接口)是微软开发的标准应用程序接口(API),使得PC能够通过运行Windows系统来使用电话服务。TAPI被设计用来在同一个网络中同时支持IP及传统电话。一台PC如果安装了TAPI的应用软件,它可以控制各种电话相关设备,包括支持TAPI命令的软交换服务器来完成各种操作。这些API屏蔽了软交换服务器的底层操作,通过函数调用的方式实现了应用程序和软交换服务器之间的双向通讯,使得外部的应用程序可以通过网络来控制软交换服务器的行为,以及与软交换进行数据交换,获得应用程序需要的各种通讯参数。实验中的软交换服务器,遵循TAPI规范,向TAPI软件开放了应用程序接口。在本实验中,根据DEMO程序,通过TAPI接口开发出如下应用――秘书代呼功能:有A、B、C三台IP电话机(可以是运行在PC上的软件IP电话,也可以是专门的硬件IP电话机)。首先C(客户)与A(秘书)建立通话,然后秘书A把客户C的通话转到B(老板)的电话上,让客户C和老板B建立起直接的通话;也可以反过来,由秘书A先拨通客户C的电话,然后转给老板B。第16页共30页学生实验指导手册(高级)【实验步骤】第一步准备工作¾详细阅读《RG-VCTAPI使用指南》。¾准备好开发环境:安装有win98以上操作系统的PC、安装VISUALC++。¾Demo程序提供了基于VISUALC++的工程,在开发系统中打开相应的工程文件。第二步安装TSPTSP是“TAPIServiceProvider”的缩写,它实际上就是windows系统中TAPI程序的驱动,一个TSP就是一个可以使TAPI应用程序和不同类型的TAPI设备沟通的驱动程序。要使得应用程序能够控制某个TAPI设备(在本实验中,就是控制RG-VX9000E软交换服务器),就必须先安装和设备相关的TSP文件。安装过程如下:¾将RG-VXTAPI.tsp文件拷贝到$windows\system32目录下。¾控制面板-电话和调制解调器选项-高级页中添加RG-VXTAPI.tsp。¾配置程序运行环境,包括RG-VX9000E服务器以及TSP,然后运行实验提供的示例程序(tapisample.exe)判断环境是否配置正确。详细配置步骤请参见《RG-VXTAPI使用指南》第三章、第二节“TSP安装、卸载”。第三步阅读DEMO程序1、开发基本服务功能详细内容请参看文档《RG-VXTAPIDemo说明》,以下对所涉及的函数作一简要说明:在通过TAPI进行远程通讯程序设计时,必不可少的是要调用lineInitialize()函数以初始化TAPI,以及调用lineOpen()函数以打开线路,然后才能使用呼叫代答功能;除此之外,为了编写可靠的远程通讯程序,还应调用有关检测线路设备能力的函数,检测TAPI版本兼容性的函数,检测线路当前使用状态的函数等等,以适应各种情况;昀后调用lineClose()函数以关闭线路,调用lineShutdown()函数将程序与TAPI断开。1)初始化TAPI调用lineInitialize函数在应用程序中完成TAPI线路的初始化,第三个参数是一个回调函数,用来通知应用程序的各种事件。该函数返回1个TAPI使用句柄和系统可用TAPI线路数目,并指明TAPI使用的通信机制。LONGWINAPIlineInitialize(LPHLINEAPPlphLineApp,HINSTANCEhInstance,LINECALLBACKlpfnCallback,LPCWSTRlpszFriendlyAppName,LPDWORDlpdwNumDevs,LPDWORDlpdwAPIVersion,LPLINEINITIALIZEEXPARAMSlpLineInitializeExParams)第17页共30页学生实验指导手册(高级)参数说明{lphLineApp:TAPI应用程序句柄地址hInstance:程序实例句柄lpfnCallback:回调函数地址lpszFriendlyAppName:程序名称地址lpdwNumDevs:设备个数地址lpdwAPIVersion:API版本地址lpLineInitializeExParams:初始化结构参数}详见MSDN中对于此接口的说明。2)协商TAPI的版本调用lineNegotiateAPIVersion函数协商TAPI的版本。应用程序把API使用版本通知给TAPI,返回与TAPI通信所能使用的版本。LONGWINAPIlineNegotiateAPIVersion(HLINEAPPhLineApp,DWORDdwDeviceID,DWORDdwAPILowVersion,DWORDdwAPIHighVersion,LPDWORDlpdwAPIVersion,LPLINEEXTENSIONIDlpExtensionID)参数说明{hLineApp:TAPI应用程序句柄dwDeviceID:设备IDdwAPILowVersion:低API版本dwAPIHighVersion:高API版本lpdwAPIVersion:API版本地址lpExtensionID:ExtensionID地址}详见MSDN中对于此接口的说明。3)检查线路设备能力调用lineGetDevCaps函数查询特定的线路设备,得到线路实际电话能力。该函数返回LINEDEVCAPS类型的数据结构。设备的能力包括如下信息:TAPI服务提供者、交换机信息、字符串格式、载波方式、数据传输率等,例如SVCTAPI的服务提供者为RG-VXTAPIServiceProvider,dwBearerModes为LINEBEARERMODE_VOICE,dwMediaModes为LINEMEDIAMODE_INTERACTIVEVOICE,dwLineFeatures为LINEFEATURE_MAKECALLLONGWINAPIlineGetDevCaps(HLINEAPPhLineApp,DWORDdwDeviceID,DWORDdwAPIVersion,DWORDdwExtVersion,LPLINEDEVCAPSlpLineDevCaps)第18页共30页学生实验指导手册(高级)参数说明{hLineApp:TAPI应用程序句柄dwDeviceID:设备IDdwAPIVersion:API版本dwExtVersion:Extension版本lpLineDevCaps:设备能力地址}详见MSDN中对于此接口的说明。4)打开线路设备调用lineOpen函数打开指定线路设备,并提供后续监视和控制线路的功能。lineOpen返回线路设备的句柄,用以完成以后对此设备的各种操作。第二参数可以对线路的通话特权进行限制,例如:LINECALLPRIVILEGE_NONE无特权LINECALLPRIVILEGE_MONITOR线路监控LINECALLPRIVILEGE_OWNER线路拥有,可以处理通话第三个参数表示线路支持的媒体类型,例如LINEMEDIAMODE_INTERACTIVEVOICE表示交互式语音通话。打开线路后,调用lineSetStatusMessages对支持的状态改变事件消息进行设置,可以过滤部分消息。如果第二个和第三个参数为LINEDEVSTATE_ALL和LINEADDRESSSTATE_ALL就表示支持线路状态改变和地址状态改变的所有消息。LONGWINAPIlineOpen(HLINEAPPhLineApp,DWORDdwDeviceID,LPHLINElphLine,DWORDdwAPIVersion,DWORDdwExtVersion,DWORD_PTRdwCallbackInstance,DWORDdwPrivileges,DWORDdwMediaModes,LPLINECALLPARAMSconstlpCallParams)参数说明{hLineApp:TAPI应用程序句柄dwDeviceID:设备IDlphLine:呼叫句柄指针dwAPIVersion:API版本dwExtVersion:Extension版本dwCallbackInstance:程序实例地址dwPrivileges:特权等级dwMediaModes:媒体模式lpCallParams:呼叫参数}详见MSDN中对于此接口的说明。第19页共30页学生实验指导手册(高级)5)呼叫代答在呼叫接听之后,将主叫转移到其它被叫。如A呼叫B,B接听,在通话过程中,B将A的呼叫转移到C,此时B挂断,C振铃。LONGWINAPIlineBlindTransfer(HCALLhCall,LPCSTRlpszDestAddress,DWORDdwCountryCode)参数说明{hCall:呼叫句柄lpszDestAddress:转移地址dwCountryCode:地区码,如果为0使用默认值}详见MSDN中对于此接口的说明。6)关闭线路通过lineClose函数关闭线路,使其可以被其它应用程序使用,同时释放了呼叫的句柄。LONGWINAPIlineClose(HLINEhLine)参数说明{hLine:线路句柄}详见MSDN中对于此接口的说明7)终止TAPI调用调用lineShutdown函数关闭指定TAPI线路,并释放该线路占用的资源。LONGWINAPIlineShutdown(HLINEAPPhLineApp)参数说明{hLineApp:TAPI应用程序句柄}详见MSDN中对于此接口的说明8)其它如果我们需要在线路中对线路的相关信息进行设置,例如我们可以打开线路的时候把默认配置信息保存起来,为当前线路进行个性化配置,然后在关闭线路还原默认配置即可。调用lineConfigDialogEdit得到线路配置对话框,配置完成后调用lineSetDevConfig获得刚才的配置结构,保存起来,并使得改变后的线路设置生效。例如:配置当前线路信息时,函数调用顺序如下:lineGetDevConfig-lineConfigDialogEdit-lineSetDevConfig-lineGetDevConfig调用lineGetAddressStatus获得特定地址的状态信息,例如正在使用的线路数目,当前获得的通话数目。调用lineGetAddressCaps获得特定地址的电话参数,在lpAddressCaps提供该地址的电话能力描述。调用lineGetCallInfo获得指定线路上的通话句柄对应的通话相关信息,例如主叫者ID、名字,被叫者ID、名字,线路连接ID、名字。调用lineGetCallStatus获得指定线路上的通话句柄对应的通话状态。第20页共30页学生实验指导手册(高级)2、开发附加服务功能1)呼叫打开线路后,就可以进行呼叫了。调用函数lineMakeCall进行呼叫,lineMakeCall使用lineOpen返回的线路句柄,返回带有拥有者特权的当前呼叫的句柄,用于对本次呼叫进行以后的操作。若函数lineMakeCall返回呼叫有问题,由LINE_REPLY消息提供呼叫的状态。LONGWINAPIlineMakeCall(HLI
本文标题:41【融合通讯】【TAPI编程实验1——秘书代呼】
链接地址:https://www.777doc.com/doc-837457 .html