1

私はTellMeに似たエンジンを搭載したvxmlを使用しています。音声メールシステムの電話プロンプトに音声認識を追加します。新しいメニューは、最初にユーザーに口頭での入力を求めます。一致するものが見つからない場合、または入力が与えられていない場合、ユーザーはタッチトーンオプションで再度プロンプトが表示されます。

元のメニューは次のようになります。

<menu id="msgedit">
        <prompt><enumerate><value expr="_prompt"/>press <value expr="_dtmf"/>.</enumerate></prompt>
        <choice dtmf="9" next="#checkurgent">To deliver your message </choice>
        <choice dtmf="7" next="#playmsg">To play your message </choice> 
        <choice dtmf="3" next="#rerecord">To discard your message and record over </choice>
        <choice dtmf="2" next="#addtomsg">To add to your message </choice>
        <choice dtmf="6" next="#testnumber">To enter a phone number where you may be reached </choice>
        <choice dtmf="1" next="#cancel">To cancel making a message </choice>
        <!-- handle no input/no match -->   
</menu>

新しいメニューは次のようになります。

<form id="msgedit">
      <field name="choice">
         <prompt>
         <if count == 0">
            Please choose one of the following. 
            deliver, play back, rerecord, add to, 
            enter a callback number, or cancel.
            <else/>
            Please choose one of the following. 
            To deliver your message, press 9. 
            To play back your message, press 7. 
            To discard your message and rerecord, press 3. 
            To add to your message, press 2. 
            To enter a callback number, press 6. 
            To cancel your message, press 1.
         </if>
         </prompt>
      </field>
      <filled>
         <if cond="choice == 'deliver' || choice == '9'">
            <goto next="#checkurgent"/>
            <elseif cond="choice == 'play' || choice == '7'"/>
            <goto next="#playmsg"/>
            <elseif cond="choice == 'rerecord' || choice == '3'"/>
            <goto next="#rerecord"/>
            <elseif cond="choice == 'add' || choice == 'add to' || choice == '2'"/>
            <goto next="#addtomsg"/>
            <elseif cond="choice == 'enter callback number' || choice == 'callback number' || choice =='6'"/>
            <goto next="#testnumber"/>
            <elseif cond="choice == 'cancel' || choice =='1'"/>
            <goto next="#cancel"/>
            <else/>
            <throw event="nomatch"/>
         </if>
      </filled>
      <!-- handle no input/no match -->
   </form>

ただし、長いテキスト(長すぎてエラーが発生する)の代わりに、元のメニューの<enumerate>and動作を使用して再プロンプトを表示したいと思います。<choice>

ここに質問があります:プロンプトの2番目のスタイル内でプロンプトの最初のスタイルを使用する方法はありますか?フィールドの中に入れてもいいですか?どうすればいいですか?

4

1 に答える 1

0

選択要素はメニューに固有です。一般的なプロンプトでenumerateを使用できますが、最初の例で使用されている方法では、プロンプトを許可された入力に関連付けています。フィールドの場合、定義された文法から利用可能な入力を取得しています。

後者の点では、スニペットは文法について言及しておらず、フィールドはタイプを示していません。文法はVoiceXMLドキュメント内のより高いレベルで定義されていますか、それとも組み込みの文法ですか?そうでない場合は、それがエラーの原因である可能性があります。

メニューと選択肢で音声認識を使用できますが、選択肢を列挙で定義する方法は次のとおりです。

これは、VoiceXML2.0仕様から変更された例です。

<menu>
  <choice dtmf="1" next="http://www.sports.example.com/vxml/start.vxml">
    <grammar src="sports.grxml" type="application/srgs+xml"/>
    Press 1 or say Sports for sports scores
  </choice>
  <choice dtmf="2" next="http://www.weather.example.com/intro.vxml">
   <grammar src="weather.grxml" type="application/srgs+xml"/>
   Press 2 or say weather for weather
  </choice>
  <choice dtmf="3" next="http://www.stargazer.example.com/voice/astronews.vxml">
   <grammar src="astronews.grxml" type="application/srgs+xml"/>
   press 3 or say Stargazer astrophysics for ?
  </choice>
</menu>

プロンプトをECMAScript配列に入れる場合は、おそらく列挙も使用できます。

一般的に、私はフィールドアプローチをお勧めします。豊富なプロンプトとエラー処理を提供するための柔軟性が大幅に向上します。menu / choiceは、単純で限られたケースを対象としたショートカットメカニズムです。

于 2010-06-30T12:11:13.753 に答える