Voxeo Prophecy平台开发VoiceXML应用
2008/11/20
一、简介图1. 基于SIP的VoiceXML应用典型结构
一个简单的VoiceXML页面
如下示例VoiceXML页面首先用话音提示主叫方:“What zip code would you like to
search?”,当用户说出“Three two eight zero one”或者按下一串数字(比如说32801#),ZIP变量获取数值“32801”,并传递给链接地址http://ws.cdyne.com/WeatherWS/Weather
.asmx/GetCityForecastByZIP?ZIP=32801。最终由GetCityForecastByZIP脚本(实际上是一个Web
Service接口)来处理输入和生成进一步的VoiceXML页面。如果有错误或者用户没有按任何键,那么话音提示会一再重复。
<vxml version="2.1">
<form>
<field name="ZIP">
<prompt> Welcome to the Weather Lookup Tool!
What zip code would you like to search? </prompt>
</field>
<catch event="noinput error help">
Please enter the 5-digit ZIP code followed by the pound key.
</catch>
<block>
<submit next="http://ws.cdyne.com/WeatherWS/Weather.asmx/GetCityForecastByZIP"
namelist="ZIP"/>
</block>
</form>
</vxml>
图2. VoiceXML语音浏览器操作
图2显示了SIP-VoiceXML浏览器的组件和操作状态变迁:
1. 当浏览器接收到一个新进来的SIP呼叫后,它创建三个不同线程:RTP接收线程、RTP发送线程和VoiceXML解释器线程。RTP接收线程从主叫方接收媒体数据包并调用DTMF检测模块;RTP发送线程将媒体数据包以流的方式发送给主叫方。一个单独的发送线程帮助维护外出数据报的固定带宽(比如针对G.711音频的64
kb/s),而不考虑语音合成速度。初始的VoiceXML页面地址可以预先配置在浏览器中,或者编码到SIP请求。例如,如果主叫方拨打sip:dialog.vxml.http%3a//dialogs.server.com/script32.vxml@vxmlservers.com,那么该呼叫将到达运行在vxmlservers.com上的浏览器,然后从script32.vxml取得初始VoiceXML页面。
另一方面,如果request-uri是sip:7137@cs.columbia.edu,那么将用缺省的预先配置的初始VoiceXML
URL链接(比如会议服务的)去调用解释器。
2. 解释器线程使用初始URL呼叫XML parser。
3. XML parser从Web服务器或本地文件系统取得页面(基于初始URL)。
4. XML parser将返回的XML文档表示成一个树结构。
5. 解释器线程在来自VoiceXML文档的选定表单上调用表单解释算法(Form Interpretation
Algorithm, FIA )。
6. FIA基于VoiceXML文档内容调用各种其它模块。例如,它可以调用TTS SDK合成任何语音提示。
7. FIA也可以调用HTTP fetcher模块取得外部语法文件,或者用于语音提示的媒体文件。XML parser通过其内置HTTP客户机取得VoiceXML页面。
8. HTTP fetcher通过HTTP GET/POST方法来检索文档。
9. 使用HTTP fetcher从Web服务器检索到的媒体文件被分段成交互式电话数据包,并且排队等待发送线程以流的方式发送给主叫方。
10. 语音合成器(Speech synthesizer)输出也分段和排队发送到主叫方。
11. VoiceXML文档可以在文档的不同范围指定语法规则。FIA可以基于VoiceXML页面的当前执行范围为匹配引擎设置活动语法。
12. RTP接收线程接收RTP媒体数据包,并且调用DTMF检测器。
13. 任何检测到的DTMF数字被传给语法匹配引擎。
14. DTMF按键可以通过多种方式从主叫方传送到浏览器。一种方法是并不把它们从话音中区别开来,而是使用相同的音频编解码器对它们进行编码。但是低带宽音频编解码器可能扭曲了带内DTMF按键的特性,导致它们难以检测。第二种首选的方法是使用“电话事件”来携带数字码而不是在RTP数据包中的编码音频。在第一种情形,浏览器必须做DTMF检测,而第二种情况下,主叫方或网关必须做DTMF检测。RTP接收模块将电话事件直接转发给语法匹配引擎。还有一种方法是在SIP
INFO消息中传输DTMF。
15. 语法匹配引擎尝试把接收到的数字与任何活动语法进行匹配,并在找到匹配时通知FIA。
16. RTP发送线程定期把媒体数据包发给主叫方。在静默时不发送数据包。
四、使用Voxeo Prophecy简化VoiceXML应用开发
通过使用Voxeo公司提供的Prophecy开放应用平台,我们可以快速地创建、集成和部署VoIP应用,它所提供的可视化Web界面设计工具可以使我们不必写一行代码,即可完成一个复杂而有趣的应用。
首先要做的是花一些时间前往http://cn.voxeo.com/prophecy/,免费下载一个Prophecy
8.0。安装完成后,会在系统托盘区生成一个Voxeo Prophecy v8.0.221.3图标,选择Prophecy
Home,在打开的Voxeo Prophecy网页中点击Prophecy Designer即开始了我们创建VoiceXML项目的轻松之旅。该设计工具将整个VoiceXML应用以图表或树状结构直观地呈现给开发者,可以方便地控制和修改其交互流程,如图3所示。
图3. Prophecy可视化设计工具
项目设计完成后,我们需要发布它,只须简单地点击左下角的Publish链接即可。每次发布项目后,都会生成一个新的版本,我们可以通过Project菜单的Project
Settings查看所有版本。
接下来,我们可以把这个项目映射成一个IVR应用了。在先前打开的Voxeo Prophecy网页中,点击Administration链接,打开一个Management
Console页面,点击Call Routing,为我们的应用选择一条映射路径,比如说Route ID为“vxml”,在Route
Type字段选择“Designer”,App Name选择项目名称(比如“Weather Lookup”),滚动到页面底部,点击Save
Changes按钮保存。
最后,交卷的时刻到了,我们的应用到底能不能用呢?让我们来测试一下。打开Prophecy自带的SIP Phone,如图4所示,给sip:vxml@127.0.0.1拨号。当我们听到扬声器传来“Welcome
to the Weather Lookup Tool...”,Prophecy没有令我们失望,我们已经拥有一个免费的“天气播音员”了,我们只要告诉它想查找的城市的五位邮政编码(比如“10027”),就可以收听纽约市的天气情况了。当然,本示例项目实现的是美国的城市天气播报,读者完全可以在其基础上,实现中国的城市天气预报。
图4. Voxeo SIP Phone
独乐乐不如与众乐乐,读者是不是很想与自己的朋友分享这个成果呢?没有问题,Voxeo替您考虑到了,它提供了免费的开发人员门户,您只要访问http://evolution.voxeo
.com/,免费注册一个帐号,就可以象使用Prophecy一样,方便地将您的应用搬到该站点上,Voxeo自动给您的应用映射开通了各种通过Internet或传统电话进行访问的途径。本文的美国城市天气查找(Weather
Lookup Tool)应用已经部署在上面了,读者可以通过以下几种途径来执行它:
CTI论坛编辑
Voxeo VoiceObjects 统一自服务提高满意度 2009-09-23 |
Voxeo携Prophecy10高度亮相SpeechTEK2009 2009-09-03 |
拥有中文TTS的Prophecy IVR语音平台 2009-08-17 |
Voxeo发布开源的电话“云计算”服务平台 2009-08-12 |
自助式语音平台开发利器Prophecy Platform 2009-08-03 |