我的任务是研究这两种实现之间的差异,以便在开发困难和特性集方面更好地理解这两种实现之间的差异,但我没有发现这两种实现之间的任何清晰和简明的比较。
最佳答案
我想你是在问voicexml、twiml和plivoxml之间的区别。Tropo和Nexmo都支持VoiceXML,因此这是XML格式(和相关平台)的比较,而不是特定的供应商。我添加了plivoxml,因为它类似于tiwml,但很独特。免责声明:我为Nexmo工作。
这三种方法都描述了电话通话过程中发生的事情——机器如何与呼叫者交互。基本上是用于电话呼叫的html,允许您向用户呈现信息(播放音频、读取文本)或从用户获取信息(录制音频、识别语音、按数字)。
便携性
voicexml是一个行业标准,它和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>
VoiceXML示例(需要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>
产量
这三个都支持文本到语音和播放音频(由链接引用)。plivo还允许您使用api播放正在进行的调用的音频,但这不在plivoxml的上下文中。
Twiml示例:
<Response>
<Say>Hello From TwiML</Say>
</Response>
VoiceXML示例:
<vxml version="2.1">
<form>
<block>
<prompt>Hello from VXML!</prompt>
</block>
</form>
</vxml>
变量和状态
twiml和plivoxml允许您像浏览器一样跟踪某些会话;但是,voicexml有一个更有用的状态概念,允许您在多个请求之间共享变量。
twiml或plivoxml文档一次只能收集一个东西,从用户那里获取数字或记录实际上类似于使用单个元素的表单帖子。
voicexml表单不限于单个输入,并且包含多个可识别语音、dtmf压力机、录制的字段。voicexml还允许在同一文档中播放/读取数据给用户,因为它只是一个变量。实际上,一个voicexml文档可以有多个表单,用户可以在这些表单之间导航。
VoiceXML示例:
<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>
VoiceXML示例:
<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>
可扩展性:这三种方法都允许调用遵循到另一个voicexml/twiml/plivoxml文档的链接概念。然而,voicexml有子目录的概念,在子目录中,控制权被转移到另一个voicexml应用程序,返回值被传回调用应用程序。这可以允许与(或开发)通用外部服务集成。
VoiceXML示例:
<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和W3C's VXML Documentation的示例。