Chinaunix首页 | 论坛 | 博客
  • 博客访问: 805275
  • 博文数量: 780
  • 博客积分: 7000
  • 博客等级: 少将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-12 09:11
文章分类

全部博文(780)

文章存档

2011年(1)

2008年(779)

我的朋友
最近访客
[8]

分类:

2008-09-12 09:24:01

呼叫者和 VXML 生成者之间的差异

    清单 7 也展示了 Voice XML 与动态生成的 VXML 的另外一项特性:呼叫者可能并非 VXML 本身。例如,假设有一名居住在新西兰的用户呼叫 清单 7 所示的应用程序。若当时新西兰时间是 10:00 PM,但输出 VXML 的位于科罗拉多州的丹佛,两者之间问候的消息可能非常古怪,例如 “您起得真早,早上好!” 这完全不恰当,情况还有可能更糟:如果您已为每周的特定日子添加好了问候语,那么实际上总会出现匹配错误。

    根本问题源于 VXML 和 Java 是在特定服务器所在的位置和时区运行的,但可为世界各地的呼叫者所用。如果您的 servlet 未考虑到这方面的问题,就会令一些呼叫者倍感困惑。您有以下几种选择:

  • 忽略差异,寄希望于呼叫者了解您的服务器并非在他们所在的时区运行代码。
  • 明确声明日期和时间对应于服务器所在位置。例如,下午问候语可以是 “本地现在是下午。祝您愉快”。
  • 编写代码询问时区或与 GMT 的时差,然后根据这一信息提供问候语。

    遗憾的是,这些选择中没有任何一种富于吸引力。第一种选择的所作所为正如所说明的那样:基本忽略呼叫者。不言而喻,忽略呼叫者绝非 赢得和维持业务关系的正确方法。第二种想法 —— 给出本地时间并明确说明这是本地时间 —— 也没有太大的帮助,因为这种方法依然倾向于忽略呼叫者,只是在此过程中考虑得略微周全一些。

    最后一种选择乍看上去似乎很有吸引力,可以很容易地编写出 VXML,允许用户提供一个与 GMT 的时差值,然后根据该信息应答。但呼叫者倾向于尽可能迅速地获得信息,应答提示越多,惹恼呼叫者的风险就越大,他们可能会不满地挂断电话。因此,除非您提供的以日期或时间为基础的服务,否则要求呼叫者指明时区就是浪费资源。甚至可能更糟的是,很多呼叫者并不知道自己所在地与 GMT 的时差,因此您要面临提供时区、时区缩写、夏令时……那将是一个冗长烦琐的列表。

    那么我们为什么要介绍这种基于日期的 VXML 生成呢?很大程度上是因为它正展示了这些问题!您需要密切关注您的听众,尽力只提供那些与他们有关的信息,而不是与您的服务器或您所在地有关的信息。

    对于基于日期的处理,您要学习的课程就是:或许应该采用一种更好的最终选择来应对呼叫者,除非绝对必要,否则应完全避免采用基于日期或时间的事务。如果您预计到将有来自其他时区的呼叫者,那么提供与时间相关的功能就是自找麻烦。这一原则同样适用于任何随州、国家或陆地标线的不同可能发生变化的数据。

    最后,有很多时候使用 servlet 输出 VXML 并非良策。如果您只是要从一个静态文件中提取 VXML,使用 servlet 带来的好处极为有限(可能只有一点灵活性而已),但要添加代码、编译、调试、一个 servlet 引擎和其他许许多多的东西,从而使语音应用程序的复杂性大为增加。在这些简单的情况下,应继续使用静态 VXML 文件。

    致此,您已看到,有时 servlet 生成的 VXML 并无 意义。在结束本文之前,考虑以下几种情况,在这些时候使用 Java 这样的语言是绝佳 的电话应用程序解决方案。此处未提供完整的示例,以后的文章中将予以介绍。

    最显而易见的与 VoiceXML 相关的 Java 应用程序就是:使用数据库提供动态 VXML 输出。这或许也是大部分读者在选择阅读本文时希望了解的内容(但这篇文章中没有核心示例,因此您可能未学到足够多的知识)。无论如何,JDBC 都能使您轻松连接数据库,然后利用 SQL 查询的结果填充 VXML。

     例如,您要开发一个表,包含 VXM 的全部语法信息,然后将这些语法载入您所输出的每个 VXML 文件中。您不必为每一个 VXML 文件编码语法,而是可以在类似的文件间共享语法。更好的是,您可在所有 servlet 或一个特定 servlet 的实例中预载入这些语法。从而得益于将语法存储在数据库中,无需浪费成本为每个请求载入语法。

    另外一项出色的 Java 功能 —— 特别是在与 servlet、JSP 和基于 Web 的编程相关时 —— 就是在会话中存储用户凭证的能力。这为您带来稳定的身份验证和授权,以及高度定制的内容。

    例如,考虑一个语音应用程序,从询问用户 ID 号和 PIN 开始(与当今的大多数银行或金融应用程序类似)。您可根据数据库(依靠 Java 平台的强大力量)对这些凭证进行验证,然后将呼叫者的 ID 存储到一个会话变量中。此后,每个处理这名呼叫者的请求的 Java servlet 或 JSP 都可根据这些凭证了解为用户提供哪些选择。

    尽管许多 VoiceXML 替代产品都提供了类似的功能性,但很少有产品以与其基于 Web 的应用程序版本之间共享代码为自豪。换言之,Java 平台允许您在 VoiceXML 应用程序及其基于 Web 的版本间共享的不仅仅是数据库,还包括代码组件。生成 VXML 的 servlet 可使用相同的身份验证和授权工具类作为生成 HTML 和 XHTML 的 servlet,应答电话呼叫的 JSP 可与处理 HTTP 请求的 JSP 共享缓存数据库连接。因而,您将得到一个能够处理多种类型客户机的应用基础设施,而不必为每种类型的客户机创建一个完整的应用程序。

    本文蜻蜓点水地介绍了可用 VXML 和 Java 平台实现的功能。介绍了开发 VXML 的过程,然后为您展示了如何将 Java 技术整合到这一过程之中。介绍过程中给出了很多线索,告诉您利用 Java 代码来开发丰富、动态的 VoiceXML 应用程序的所有有趣的方式。

    我还说明了 VoiceXML 开发人员在语音应用程序误用 Java 技术的几种常见形式。处理日期和时间时耍小聪明、试图提供地方性的服务或是忘却服务器当地时间和呼叫者当地时间之间的差异无疑会令用户灰心离去。应将 Java 视为 VoiceXML 的一种工具,不要滥用 DateCalendar 类。

    在后续的文章中,我将继续探讨这些主题和更多内容,以本文给出的原则为基础进行扩展。如果您希望了解构建丰富的语音应用程序、开发与数据库交互的电话应用程序、跟踪用户、提供个性化内容的更多内容,请继续关注本系列文章。另外,访问 Voxeo.com,获得一两个 servlet,来提供您自己的 VXML。请继续关注下期文章,了解更多内容。

 

         [8]  

【责编:Peng】

--------------------next---------------------

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