VoiceXML 和 TwiML / PlivoXML 之间有什么区别?
What are the differences between VoiceXML and TwiML / PlivoXML?
我的任务是研究这两种实现之间的差异,以便更好地理解两者在开发难度和功能集方面的差异,但我没有发现两者之间有任何清晰简洁的比较。
我想你是在问 VoiceXML、TwiML 和 PlivoXML 之间的区别。 Tropo 和 Nexmo 都支持 VoiceXML,因此这是对 XML 格式(和相关平台)的比较,而不是特定供应商的比较。我添加了 PlivoXML,因为它类似于 TiwML,但又是独一无二的。免责声明:我为 Nexmo.
工作
这三个都描述了在 phone 调用期间发生的事情 - 机器如何与调用者交互。本质上 HTML 用于 phone 调用,允许您向用户呈现信息(播放音频、阅读文本),或从用户那里获取信息(录制音频、识别语音、按数字)。
便携性
语音XML 是行业标准,与 HTML 一样,它是 managed by the W3C。 TwiML 和 PlivoXML 都是专有的。这意味着 VoiceXML 应用程序不依赖于特定供应商。
输入
这三个都支持录制音频或捕获 DTMF(按键)。 VoiceXML 支持语法,允许您识别语音,并调整该识别引擎。 TwiML 和 PlivoXML 没有这种支持。
TwiML 示例(期待 DTMF):
<Response>
<Gather action="process.php">
<Say>Press a few digits.</Say>
</Gather>
</Response>
语音XML示例(期待DTMF或识别):
<vxml version = "2.1">
<form>
<field name="department">
<prompt>Press 1 or say sales, press 2 or say support.</prompt>
<grammar xml:lang="en-US" root = "TOPLEVEL" mode="voice" >
<rule id="TOPLEVEL" scope="public">
<one-of>
<item> sales </item>
<item> support </item>
</one-of>
</rule>
</grammar>
<grammar xml:lang="en-US" root = "TOPLEVEL" mode="dtmf" >
<rule id="TOPLEVEL" scope="public">
<one-of>
<item> 1 <tag> out.department="sales"; </tag> </item>
<item> 2 <tag> out.department="support"; </tag> </item>
</one-of>
</rule>
</grammar>
</field>
<block>
<submit next="../php/form.php" method="post"/>
</block>
</form>
</vxml>
输出
这三个都支持文本到语音和播放音频(由 link 引用)。 Plivo 还允许您使用 API 为正在进行的通话播放音频,但这在 PlivoXML.
的上下文之外
TwiML 示例:
<Response>
<Say>Hello From TwiML</Say>
</Response>
语音XML示例:
<vxml version="2.1">
<form>
<block>
<prompt>Hello from VXML!</prompt>
</block>
</form>
</vxml>
变量和状态
TwiML 和 PlivoXML 允许您像浏览器一样跟踪一些 session;然而,VoiceXML 有一个更有用的状态概念,允许您在多个请求之间共享变量。
TwiML 或 PlivoXML 文档一次只能真正收集一件事 从用户那里获取数字或记录实际上类似于具有单个元素的表单 post。
语音XML表单不局限于单一输入,包含识别语音、DTMF、录音等多个字段。 VoiceXML 还允许在同一文档中向用户播放/读回该数据,因为它只是一个变量。事实上,单个 VoiceXML 文档可以有多个表单,用户可以在这些表单之间导航。
语音XML示例:
<form id="welcome">
<field name="customer_type">
<prompt>Say 'new' or press 1 if you're a new customer, press 2 or say 'existing' if you have an account.</prompt>
<grammar xml:lang="en-US" root = "TOPLEVEL" mode="voice" >
...
</grammar>
<grammar xml:lang="en-US" root = "TOPLEVEL" mode="dtmf" >
...
</grammar>
</field>
<filled>
<prompt cond="customer_type=='new'">
Thanks for contacting us.
</prompt>
<prompt cond="customer_type=='existing'">
Thanks for being a loyal customer.
</prompt>
<goto expr="'#' + customer_type" />
</filled>
</form>
会议和队列
TwiML 和 PlivoXML 支持在 XML 文档中添加对会议的呼叫。 TwiML 还支持直接来自 TwiML 的队列概念(并向其添加调用)(PlivoXML 不支持该队列)。 VoiceXML 在 VXML 文档中没有会议或排队的概念(但是,API 可以提供一种外部机制来将多个活动呼叫一起会议)。
_TwiML 示例:
<Response>
<Dial>
<Conference>Room 1234</Conference>
</Dial>
</Response>
转会
这三者都支持为正在进行的通话添加第二条线路。 VoiceXML 允许您使用传输的输出来指导文档的其余部分。
TwiML 示例:
<Response>
<Dial timeout="10" record="true">415-123-4567</Dial>
</Response>
语音XML示例:
<vxml version = "2.1">
<form>
<transfer name="result" dest="tel:+14158058810" bridge="true">
<prompt>Please wait while we transfer you.</prompt>
<grammar xml:lang="en-US" root = "TOPLEVEL" mode="voice">
<rule id="TOPLEVEL" scope="public">
<one-of>
<item> disconnect </item>
</one-of>
</rule>
</grammar>
</transfer>
<filled>
<if cond="result == 'busy'">
<prompt>Sorry, they're busy.</prompt>
<elseif cond="result == 'noanswer'" />
<prompt>Sorry, they didn't answer.</prompt>
<else />
<prompt>You spoke for <value expr="result$.duration" /> seconds.</prompt>
</if>
<if cond="result$.inputmode == 'voice'">
You ended the call by saying, <value expr="result$.utterance" />.
</if>
</filled>
<block>
Thanks for using the transfer element.
</block>
</form>
</vxml>
可扩展性:这三个都允许调用遵循一些概念 links 到另一个 VoiceXML / TwiML / PlivoXML 文件.但是,VoiceXML 具有子对话的概念,其中控制权转移到另一个 VoiceXML 应用程序,并且 return 值被传递回调用应用程序。这可以允许与(或开发)通用外部服务集成。
语音XML示例:
<form id="billing_adjustment">
<var name="account_number"/>
<var name="home_phone"/>
<subdialog name="accountinfo" src="acct_info.vxml#basic">
<filled>
<!-- Note the variable defined by "accountinfo" is
returned as an ECMAScript object and it contains two
properties defined by the variables specified in the
"return" element of the subdialog. -->
<assign name="account_number" expr="accountinfo.acctnum"/>
<assign name="home_phone" expr="accountinfo.acctphone"/>
</filled>
</subdialog>
....
</form>
示例基于/复制自 Twilio's Docs, Nexmo's VXML Quickstarts, and the W3C's VXML Documentation.
只是在这里添加一个选项,即 Restcomm https://www.restcomm.com/
请注意,Restcomm 也有语音识别功能 a.k.a 自动语音识别或 ASR。
此外,Restcomm 还附带可视化设计器工具,允许通过简单的拖放功能定义呼叫流程。
Restcomm 和 Twilio、Plivo 等在 VXML 之上添加了许多功能,例如 WebRTC。
所有这些还公开了 SDK,因此开发人员可以直接在 Android 或 iOS 之上开发应用程序。
这些相对于 VXML 的最大优势是 API 的简单性。作为开发人员,您希望专注于业务逻辑,而不是陷入复杂的 XML 结构。 API 的公开 JSON 是开发人员最强大的灵活性。
Br,
阿米特
我的任务是研究这两种实现之间的差异,以便更好地理解两者在开发难度和功能集方面的差异,但我没有发现两者之间有任何清晰简洁的比较。
我想你是在问 VoiceXML、TwiML 和 PlivoXML 之间的区别。 Tropo 和 Nexmo 都支持 VoiceXML,因此这是对 XML 格式(和相关平台)的比较,而不是特定供应商的比较。我添加了 PlivoXML,因为它类似于 TiwML,但又是独一无二的。免责声明:我为 Nexmo.
工作这三个都描述了在 phone 调用期间发生的事情 - 机器如何与调用者交互。本质上 HTML 用于 phone 调用,允许您向用户呈现信息(播放音频、阅读文本),或从用户那里获取信息(录制音频、识别语音、按数字)。
便携性
语音XML 是行业标准,与 HTML 一样,它是 managed by the W3C。 TwiML 和 PlivoXML 都是专有的。这意味着 VoiceXML 应用程序不依赖于特定供应商。
输入
这三个都支持录制音频或捕获 DTMF(按键)。 VoiceXML 支持语法,允许您识别语音,并调整该识别引擎。 TwiML 和 PlivoXML 没有这种支持。
TwiML 示例(期待 DTMF):
<Response>
<Gather action="process.php">
<Say>Press a few digits.</Say>
</Gather>
</Response>
语音XML示例(期待DTMF或识别):
<vxml version = "2.1">
<form>
<field name="department">
<prompt>Press 1 or say sales, press 2 or say support.</prompt>
<grammar xml:lang="en-US" root = "TOPLEVEL" mode="voice" >
<rule id="TOPLEVEL" scope="public">
<one-of>
<item> sales </item>
<item> support </item>
</one-of>
</rule>
</grammar>
<grammar xml:lang="en-US" root = "TOPLEVEL" mode="dtmf" >
<rule id="TOPLEVEL" scope="public">
<one-of>
<item> 1 <tag> out.department="sales"; </tag> </item>
<item> 2 <tag> out.department="support"; </tag> </item>
</one-of>
</rule>
</grammar>
</field>
<block>
<submit next="../php/form.php" method="post"/>
</block>
</form>
</vxml>
输出
这三个都支持文本到语音和播放音频(由 link 引用)。 Plivo 还允许您使用 API 为正在进行的通话播放音频,但这在 PlivoXML.
的上下文之外TwiML 示例:
<Response>
<Say>Hello From TwiML</Say>
</Response>
语音XML示例:
<vxml version="2.1">
<form>
<block>
<prompt>Hello from VXML!</prompt>
</block>
</form>
</vxml>
变量和状态
TwiML 和 PlivoXML 允许您像浏览器一样跟踪一些 session;然而,VoiceXML 有一个更有用的状态概念,允许您在多个请求之间共享变量。
TwiML 或 PlivoXML 文档一次只能真正收集一件事 从用户那里获取数字或记录实际上类似于具有单个元素的表单 post。
语音XML表单不局限于单一输入,包含识别语音、DTMF、录音等多个字段。 VoiceXML 还允许在同一文档中向用户播放/读回该数据,因为它只是一个变量。事实上,单个 VoiceXML 文档可以有多个表单,用户可以在这些表单之间导航。
语音XML示例:
<form id="welcome">
<field name="customer_type">
<prompt>Say 'new' or press 1 if you're a new customer, press 2 or say 'existing' if you have an account.</prompt>
<grammar xml:lang="en-US" root = "TOPLEVEL" mode="voice" >
...
</grammar>
<grammar xml:lang="en-US" root = "TOPLEVEL" mode="dtmf" >
...
</grammar>
</field>
<filled>
<prompt cond="customer_type=='new'">
Thanks for contacting us.
</prompt>
<prompt cond="customer_type=='existing'">
Thanks for being a loyal customer.
</prompt>
<goto expr="'#' + customer_type" />
</filled>
</form>
会议和队列
TwiML 和 PlivoXML 支持在 XML 文档中添加对会议的呼叫。 TwiML 还支持直接来自 TwiML 的队列概念(并向其添加调用)(PlivoXML 不支持该队列)。 VoiceXML 在 VXML 文档中没有会议或排队的概念(但是,API 可以提供一种外部机制来将多个活动呼叫一起会议)。
_TwiML 示例:
<Response>
<Dial>
<Conference>Room 1234</Conference>
</Dial>
</Response>
转会
这三者都支持为正在进行的通话添加第二条线路。 VoiceXML 允许您使用传输的输出来指导文档的其余部分。
TwiML 示例:
<Response>
<Dial timeout="10" record="true">415-123-4567</Dial>
</Response>
语音XML示例:
<vxml version = "2.1">
<form>
<transfer name="result" dest="tel:+14158058810" bridge="true">
<prompt>Please wait while we transfer you.</prompt>
<grammar xml:lang="en-US" root = "TOPLEVEL" mode="voice">
<rule id="TOPLEVEL" scope="public">
<one-of>
<item> disconnect </item>
</one-of>
</rule>
</grammar>
</transfer>
<filled>
<if cond="result == 'busy'">
<prompt>Sorry, they're busy.</prompt>
<elseif cond="result == 'noanswer'" />
<prompt>Sorry, they didn't answer.</prompt>
<else />
<prompt>You spoke for <value expr="result$.duration" /> seconds.</prompt>
</if>
<if cond="result$.inputmode == 'voice'">
You ended the call by saying, <value expr="result$.utterance" />.
</if>
</filled>
<block>
Thanks for using the transfer element.
</block>
</form>
</vxml>
可扩展性:这三个都允许调用遵循一些概念 links 到另一个 VoiceXML / TwiML / PlivoXML 文件.但是,VoiceXML 具有子对话的概念,其中控制权转移到另一个 VoiceXML 应用程序,并且 return 值被传递回调用应用程序。这可以允许与(或开发)通用外部服务集成。
语音XML示例:
<form id="billing_adjustment">
<var name="account_number"/>
<var name="home_phone"/>
<subdialog name="accountinfo" src="acct_info.vxml#basic">
<filled>
<!-- Note the variable defined by "accountinfo" is
returned as an ECMAScript object and it contains two
properties defined by the variables specified in the
"return" element of the subdialog. -->
<assign name="account_number" expr="accountinfo.acctnum"/>
<assign name="home_phone" expr="accountinfo.acctphone"/>
</filled>
</subdialog>
....
</form>
示例基于/复制自 Twilio's Docs, Nexmo's VXML Quickstarts, and the W3C's VXML Documentation.
只是在这里添加一个选项,即 Restcomm https://www.restcomm.com/
请注意,Restcomm 也有语音识别功能 a.k.a 自动语音识别或 ASR。
此外,Restcomm 还附带可视化设计器工具,允许通过简单的拖放功能定义呼叫流程。
Restcomm 和 Twilio、Plivo 等在 VXML 之上添加了许多功能,例如 WebRTC。
所有这些还公开了 SDK,因此开发人员可以直接在 Android 或 iOS 之上开发应用程序。
这些相对于 VXML 的最大优势是 API 的简单性。作为开发人员,您希望专注于业务逻辑,而不是陷入复杂的 XML 结构。 API 的公开 JSON 是开发人员最强大的灵活性。
Br, 阿米特