Domanda

Sto usando VXML alimentato da un motore simile a TellMe. Ho l'aggiunta di riconoscimento vocale per le richieste del telefono per un sistema di posta vocale. Il nuovo menu sarà prima richiesta all'utente per l'input verbale, e se viene trovata alcuna corrispondenza, oppure se non viene dato alcun input, all'utente viene richiesto di nuovo con le opzioni di contatto di tono.

I menu originali simile a questa:

<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>

I nuovi look del menu come questo:

<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>

Tuttavia, voglio usare il <enumerate> e il comportamento <choice> dal menu originale per reprompt al posto del lungo testo (che è troppo lungo e causa un errore).

ecco la domanda: c'è un modo per utilizzare il primo stile del prompt entro il secondo stile di pronta? Posso mettere e all'interno di un campo? e come dovrei farlo?

È stato utile?

Soluzione

L'elemento scelta è specifica al menu. Mentre può usare enumerate in istruzioni generali, il modo in cui viene utilizzato nel primo esempio, si sta legando le istruzioni per l'ingresso consentita. Per un campo, si stanno ottenendo gli ingressi disponibili da una grammatica definita.

In merito a quest'ultimo punto, il frammento non menziona la grammatica né il campo indica un tipo. È la grammatica definita a un livello superiore all'interno del documento VoiceXML o costruito in grammatica? Se no, che può essere la fonte del vostro errore.

È possibile utilizzare il riconoscimento vocale con menu e scelte, ma il modo in cui le selezioni sono definite con l'enumerazione:

Questo è un esempio modificato dalla specifica VoiceXML 2.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>

Se si mettono le istruzioni in un array ECMAScript, probabilmente si potrebbe utilizzare l'enumerazione pure.

In generale, mi sento di raccomandare l'approccio campo. Si guadagna una maggiore flessibilità per la fornitura di istruzioni ricchi e la gestione degli errori. Menu / scelta è un meccanismo di collegamento che si intende per semplice, casi limitati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top