2006 年 11 月 23 日
对于绝大多数 Web 开发人员来说,输出 HTML、XHTML 乃至 XML 是一项微不足道的任务,它只不过是创建和部署 Web 应用程序的常规流程。从显示 Internet 页面到应答电话呼叫看似一个巨大的飞跃,但实际并非如此。在这篇文章中,您将看到相同的技术如何帮助您动态创建 Web 页面以便接听(虚拟的)电话并应答呼叫。
在过去五年中,Web 得到了比以往任何时候都长足的发展。一度主要以文本为基础的软件程序媒介 “Web 浏览器” 现已发展成为一种可供任何具有连通性的设备使用的信息源。最早列入可访问 Web 页面的设备列表的是移动电话,随后是寻呼机、手持设备、个人电子助理和其他任何可通过无线连接连入 Web 的设备。在最近几年,电话也加入了这一阵营,通过普通电话线路使用 Web 程序的呼声也越来越高。
这种最新型的应用程序(用户通过电话访问在线服务)的更恰当的名称是电话应用程序(telephone application)。显而易见,由于电话无法用来 “单击一个链接”,应用程序交互几乎全部是通过语音处理的。用户不是采用单击链接的方式,而是说出 “账户信息” 或使用键盘按预先录制好的指令进行操作。
通过现有(或略加修改的)Web 应用程序为电话提供服务的能力是一种强大的想法,也是许多 Web 开发人员都渴望探索的领域之一。关于 Web 应用程序与电话应用程序,要了解的最重要的一件事就是您实际上可以使用相同的技术组合来创建这两种应用程序。HTML、XHTML 和 XML 是 Web 界面之下最常用的三种底层技术,VoiceXML(或简称为 VXML)则是一种密切相关的技术,它使得电话客户机可以利用 Web 交互。JavaServer Pages 与 servlet、PHP 脚本以及 Ruby 应用程序均可响应电话请求,就像响应那些进入手持设备或 Web 浏览器的请求一样轻松。在这篇文章中,我们主要关注使用 Java 平台为简单的 VoiceXML 应用程序提供服务,但您可将本文介绍的方法同样地应用到 PHP、Perl 或您选择的任何编程语言。
VoiceXML、CCXML 还是 CallXML?
|
构建语音应用程序最常用的标准就是 VoiceXML。绝大多数 VXML 浏览器都支持 VoiceXML 2.0,本文通篇将使用这个版本的 VXML。VXML 符合 W3C 规范且发展迅速,目前的版本依然是 v2.1。VXML 3.0 即将推出。
CCXML 是 Call Control XML 的缩写,也是电话标记方面符合 W3C 规范的最新一员。CCXML 比大多数 VoiceXML 实现更为高级,提供了对回叫、事件侦听器和多路及多方会话的支持。但除非您特别需要这些属性,否则最好的选择或许是继续使用 VoiceXML,VoiceXML 更加稳定,应用也更广泛。
CallXML 是特定于 Voxeo 的一种平台。CallXML 学习起来非常轻松,并提供了对按键电话(touchtone)输入的支持(请注意,它并不支持语音识别)。CallXML 的最大缺陷就是特定于厂商。Voxeo 是一个非常出色的站点,具有无数资源,但被一家厂商锁定绝对不是个好主意。此时,大多数开发人员会再次发现,VoiceXML 更适合他们的需求。
VoiceXML 101
在接触 VoiceXML 世界的 Java 方面之前,您应大致理解 VoiceXML 应用程序的工作原理。之后,我将为您介绍一个非常简单的 VoiceXML 应用程序。示例应用程序将使您能够查看 VXML 文件,同时确保您有权访问(且可使用)Voxeo 的 call-assignment 服务,这个服务对本文后面的内容非常关键。
一个简单的 VXML 页面
VoiceXML 最少要以一个 VXML 文件开始,使用 VoiceXML 风格的 XML 版本告诉电话应用程序它们应该以及能够作些什么。清单 1 给出了一个非常简单的 VXML 文件。将这个文件保存到您的本机上。
清单 1. 一个非常简单的 VXML 文件
<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.1"> <form> <block> <prompt> Things are working correctly! Congratulations. </prompt> </block> </form> </vxml> |
对于 VoiceXML 来说,这非常基础,如果您对语法的了解还不够清楚,请查看 参考资料 中列出的其他 VoiceXML 文章。清单 1 中的 VXML 文件只包含一条提示信息,未提供任何交互功能,在处理 Java 代码的一节中,您将看到更高级的用法。但目前,使用这个简单的测试用例来确保您的环境工作正常。
上传应用程序
接下来,将您的 VXML 文件放在某个可以访问的位置。如果您有 ISP,只需将 VXML 文件上传到您的 Web 站点,您可能也会希望在 Web 根目录下为您的 VoiceXML 文件创建一个目录,例如 /voicexml 或 /voice。确保这些目录和文件可通过 Web 访问(如果您不清楚如何进行这些操作,请咨询您的系统管理员或 ISP)。
如果您没有 ISP,那么可以在 Voxeo 注册,以便使用该站点的 File Manager。您应已建立了一个 Voxeo 账户,它附带 10 MB 的主机空间,因此这是个不错的免费选择。(10 MB 可以容纳大量 VXML 文件!)
使 VXML 应用程序联机之后,我们还想确定能够通过在 Web 浏览器中输入 URL 来访问它。根据您所使用的具体浏览器不同,可能会要求您下载 XML 文件,也可能会在您的浏览器中以某种形式呈现它。这只是一个测试,确保您的 VXML 可用,因此即使您的计算机没有开始跟您交谈,也不要太过忧虑。VXML 联机后,也就作好了将其与一个电话号码连接的准备。
为您的应用程序分配一个电话号码
|
与传统的 Web 应用程序不同,您无法直接打开 Web 浏览器然后浏览您的 VXML 文件,至少在您希望获得语音应答时不能这样做。为了测试基于电话的应用程序,您显然需要一台电话,这就意味着一个呼叫号码。有许多高成本的方法可以将号码映射到 VoiceXML 应用程序,但对于测试、登台(staging)和开发而言,Voxeo 提供了一种出色的免费映射服务。
导航到 Voxeo.com,登录(使用页面左上角的字段)。在 Account 菜单中选择 Application Manager,如 图 1 所示。
图 1. 使用 Voxeo Application Manager
选择 Add Application,然后选择 VoiceXML 2.0 作为部署平台。
接下来,提供您的 VXML 文件的 URL,另外还有您的应用程序的名称,您可以按照自己的偏好任选名称。图 2 展示了访问我的 VXML 文件的设置。从 Application Phone Number 下拉菜单中选择 Staging 选项。这将为应用程序分配一个临时登台电话号码(temporary staging phone number),以使您可以真正地用您自己的电话呼叫这个号码。
图 2. 将一个 VXML 文件映射到一个电话号码
单击 Create Application,Voxeo 将为您的应用程序分配一些电话号码。图 3 展示了最终屏幕(略微向下滚动了一点),以及 VXML 文件的所有访问点。
图 3. 成功映射!
这一功能值得您花时间去注册 Voxeo,您现在可以通过长途电话号码、800 免费电话号码和 Skype 访问您的 VXML 文件,而这些方法还只是其中的一小部分。这非常好,因为您不必使用 Voxeo 工具去测试应用程序。更好的是,您可以让您的老板在无需具备 Voxeo 站点账户的情况下完成测试!
测试应用程序
剩下的工作就是呼叫一个 Voxeo 提供的号码。拨号后,您的 VXML 应用程序应获取号码,并让您知道(用一种单调机械的声音):“Things are working correctly! Congratulations.”
好,就是这样:在大约五分钟内,您使您的电话与一个 XML 文件进行了交谈。现在就可以看看 Java 代码了,并了解如何动态地生成 VXML。
Java 和 VXML
这里,大多数 Java 开发人员都试图在自己的 Java Servlet 中手工编码 VXML,添加数百行的 out.println()
语句、为输出的内容类型而操心,通常也会给许多应用程序增加严重且不必要的复杂性。动手处理那些较为复杂的编程任务之前(只要应用得当,它们都是很有用的),请先通过本节了解一些关于 VoiceXML Servlet 编程的最基本的内容。