VoiceXML是一种基于XML的语音交互标记语言,用于定义电话语音菜单等应用的对话逻辑,需配合ASR/TTS平台运行,核心是控制语音输入输出及异常处理流程。

VoiceXML 是一种基于 XML 的标记语言,专门用来构建语音交互应用,比如电话语音菜单、语音助手后端流程、自动客服系统等。它不处理语音识别或合成的具体技术细节,而是定义“对话逻辑”——告诉语音平台:什么时候听用户说话、听什么、怎么回应、出错了怎么办。
VoiceXML 的核心作用
它像网页的 HTML,但面向语音通道:HTML 控制屏幕显示和点击,VoiceXML 控制语音播放、语音输入、语义理解跳转。实际运行时,需要搭配语音平台(如 Cisco CVP、Genesys Engage、Asterisk + VoiceXML Gateway 或云服务如 Amazon Connect)来完成语音识别(ASR)、文本转语音(TTS)和会话管理。
一个最简 VoiceXML 文档长什么样
以下是一个能播放欢迎语、等待用户说“你好”或“再见”的基础示例:
<?xml version="1.0" encoding="UTF-8"?><vxml version="2.1">
<form>
<field name="greeting">
<prompt>您好,欢迎致电,请说你好或再见</prompt>
<grammar type="text/plain">
你好
再见
</grammar>
<noinput>
<prompt>没听到声音,请再说一次</prompt>
</noinput>
<nomatch>
<prompt>没听懂,请说你好或再见</prompt>
</nomatch>
<filled>
<prompt><value expr="greeting"/>,很高兴为您服务</prompt>
<goto next="#exit"/>
</filled>
</field>
</form>
<form id="exit">
<block><prompt>再见!</prompt></block>
</form>
</vxml>
编写 VoiceXML 应用的关键点
-
语法必须严格合规:XML 格式不能有错位、未闭合标签或非法字符;版本声明(如
vxml version="2.1")需与平台兼容 -
语音识别靠 grammar 定义:可内嵌 plain text 规则(适合固定词)、SRGS(W3C 标准语法)或外链语法文件;复杂语义建议用 SRGS + 语义解释(
<tag>)提取参数 -
状态靠 field / form / block 管理:每个
<field>是一个“语音交互单元”,包含 prompt(说)、grammar(听)、filled(听到了怎么做)、noinput/nomatch(异常处理) - 逻辑跳转用 <goto> 或 <submit>:跳到本页另一 form、重载当前页、或提交数据到后台服务器(常用 POST)
-
别直接操作麦克风或音频流:VoiceXML 不提供底层音频控制;播放音效、调节音量、混音等需依赖平台扩展(如
<audio>标签支持有限,或用平台私有标签)
开发和测试建议
- 本地写好 .vxml 文件后,部署到支持 VoiceXML 的 Web 服务器(如 Apache/Nginx),确保 MIME 类型为
application/voicexml+xml - 用真实电话拨打接入号(如 SIP 中继或 PSTN 网关),或使用模拟器(如 Voxeo Evolution、CVP Simulator、Amazon Connect 测试面板)验证流程
- 重点关注三类失败场景:静音超时(noinput)、识别失败(nomatch)、语法未覆盖(如用户说“喂”但 grammar 只写了“你好”)
- 生产环境务必加日志和错误上报:在
<catch event="error">或<catch event="connection.disconnect.hangup">中记录上下文,方便排查 ASR/TTS 故障
基本上就这些。VoiceXML 本身不难学,难点在于语音交互设计——用户怎么说、机器怎么听、听不清怎么引导、业务逻辑如何自然嵌入语音流。写好一份 VoiceXML,一半靠语法,一半靠对真实通话场景的理解。










