Chinaunix首页 | 论坛 | 博客
  • 博客访问: 160368
  • 博文数量: 19
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 416
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-10 12:39
文章分类

全部博文(19)

文章存档

2009年(13)

2008年(6)

我的朋友

分类:

2008-11-08 21:43:29

1) OpenVXI的解释器运行在单独的线程中,也就是说如果是服务器端程序每一路解释程序需要一个线程。请在下载源代码中的找到入口主程序,大致处理步骤如下:
     - VXIplatformEnableCall,表示可以开始接听电话了;
     - VXIplatformWaitForCall,以阻塞方式等待呼入电话;
     - VXIplatformProcessDocument,解释vxml文件。
2) VXIplatformProcessDocument的功能是解释vxml语言,通过回调的方式调用实现提供的具体功能,包括呼叫控制功能(VXItelInterface接口,在osbtel.cpp中实现)、放音功能(VXIpromptInterface接口,在osbprompt.cpp中实现)、收号/ASR识别/录音功能(VXIrecInterface接口,在osbrec.cpp中实现);
3) 如前文所述,编写测试vxml脚本并画出OpenVXI解释器接口调用的UML序列图很重要;当然也必须了解各接口输入/输出参数的含义。有必要了解VXI开头的各VXI包装数据结构类,特别是VXIMap;接口设计通过此通用的map机制来传递多个参数,以维持接口的稳定性。

以上为扩展VXI程序的两类关键接口点。具体实现视应1) OpenVXI的解释器运行在单独的线程中,也就是说如果是服务器端程序每一路解释程序需要一个线程。请在下载源代码中的找到入口主程序,大致处理步骤如下:
     - VXIplatformEnableCall,表示可以开始接听电话了;
     - VXIplatformWaitForCall,以阻塞方式等待呼入电话;
     - VXIplatformProcessDocument,解释vxml文件。
2) VXIplatformProcessDocument的功能是解释vxml语言,通过回调的方式调用实现提供的具体功能,包括呼叫控制功能(VXItelInterface接口,在osbtel.cpp中实现)、放音功能(VXIpromptInterface接口,在osbprompt.cpp中实现)、收号/ASR识别/录音功能(VXIrecInterface接口,在osbrec.cpp中实现);
3) 如前文所述,编写测试vxml脚本并画出OpenVXI解释器接口调用的UML序列图很重要;当然也必须了解各接口输入/输出参数的含义。有必要了解VXI开头的各VXI包装数据结构类,特别是VXIMap;接口设计通过此通用的map机制来传递多个参数,以维持接口的稳定性。

以上为扩展VXI程序的两类关键接口点。具体实现视应用环境,是只需要一个解释线程的客户端应用,还是要处理若干并发线程的服务器端应用。如果是服务器端程序,请特别注意接口文档中说明的每个接口函数是同步的还是异步的。

如果是服务器应用,同为开源程序的ACE库非常适合使用,例如同步接口方法考虑采用Active Object模式。我个人借鉴了Reactor模式,在基于VXI的IVR产品中采用全局事件队列的方式(也可借用Dialogic事件队列),以消除处理代码中的线程间同步。主处理线程上的事件处理均为异步模式(如Dialogic API支持异步调用),对不支持异步调用的第三方产品(如某些TTS引擎客户端API)则采用HalfSync/HalfAsync模式。

最后,根据个人的经验教训,有几点说明:
1) 请特别留意正确处理呼叫挂机事件,因为主叫方可能在任何时刻挂机,并且这是一个底层机制(如Dialogic API)的异步通知事件;
2) OSBtelTransferBridge转移;
3) vxml没有明确定义接收/发送传真,而这也是一个潜在需求;
4) vxml没有明确定义IVR在呼叫中心中的应用场景,例如传递应用数据(UUI)、报工号等;
5) 未充分利用BeginSession/EndSession接口,这是一组非常恰当的申请资源/释放资源点。

用环境,是只需要一个解释线程的客户端应用,还是要处理若干并发线程的服务器端应用。如果是服务器端程序,请特别注意接口文档中说明的每个接口函数是同步的还是异步的。

如果是服务器应用,同为开源程序的ACE库非常适合使用,例如同步接口方法考虑采用Active Object模式。我个人借鉴了Reactor模式,在基于VXI的IVR产品中采用全局事件队列的方式(也可借用Dialogic事件队列),以消除处理代码中的线程间同步。主处理线程上的事件处理均为异步模式(如Dialogic API支持异步调用),对不支持异步调用的第三方产品(如某些TTS引擎客户端API)则采用HalfSync/HalfAsync模式。

最后,根据个人的经验教训,有几点说明:
1) 请特别留意正确处理呼叫挂机事件,因为主叫方可能在任何时刻挂机,并且这是一个底层机制(如Dialogic API)的异步通知事件;
2) OSBtelTransferBridge转移;
3) vxml没有明确定义接收/发送传真,而这也是一个潜在需求;
4) vxml没有明确定义IVR在呼叫中心中的应用场景,例如传递应用数据(UUI)、报工号等;
5) 未充分利用BeginSession/EndSession接口,这是一组非常恰当的申请资源/释放资源点。

阅读(1865) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-11-17 13:12:33

谢谢,哥们,我现在也在研究这个东东,刚刚开始,有点晕了都,多谢指点,让我有点了头绪,还希望以后多多指点,俺的QQ:85174905