開発の難しさと機能セットに関して、これら 2 つの実装の違いをよりよく理解するために、これら 2 つの実装の違いを調査する任務を負っていますが、2 つの間の明確で簡潔な比較は見つかりませんでした。
2 に答える
VoiceXML、TwiML、PlivoXML などの違いについて質問されていると思います。Tropo と Nexmo の両方が VoiceXML をサポートしているため、これは特定のベンダーではなく、XML 形式 (および関連するプラットフォーム) の比較です。TiwML に似ていますが、ユニークなので、PlivoXML を追加しました。免責事項: 私はNexmoで働いています。
3 つすべてが、通話中に何が起こるか、つまり、マシンが発信者とどのように対話するかを説明します。基本的には通話用の HTML であり、ユーザーに情報を提示したり (音声を再生したり、テキストを読んだり)、ユーザーから情報を取得したり (音声を録音したり、音声を認識したり、数字を押したり) できます。
携帯性
VoiceXML は業界標準であり、HTML と同様に W3C によって管理されています。TwiML と PlivoXML はどちらも独自仕様です。つまり、VoiceXML アプリケーションは特定のベンダーに縛られていません。
入力
3 つすべてが、オーディオの録音または 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>
出力
3 つすべてが、テキスト読み上げとオーディオの再生 (リンクで参照) の両方をサポートしています。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 ドキュメントは、実際には一度に 1 つのものしか収集できません。ユーザーから数字または録音を取得することは、単一の要素を持つフォーム ポストに似ています。
VoiceXML フォームは単一の入力に限定されず、認識された音声、DTMF プレス、録音の複数のフィールドを含みます。また、VoiceXML を使用すると、そのデータを同じドキュメント内で再生したり、ユーザーに読み返したりすることができます。これは単なる変数であるためです。実際、1 つの 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>
転送
3 つすべてが、進行中の通話に 2 番目のレグを追加することをサポートしています。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>
拡張性: 3 つすべてで、コールが別の 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 の Docs、Nexmo の VXML Quickstarts、およびW3C の VXML Documentationに基づく/コピーされた例。