2010-06-29 20 views
1

J'utilise vxml alimenté par un moteur similaire à TellMe. J'ajoute la reconnaissance vocale aux invites téléphoniques pour un système de messagerie vocale. Le nouveau menu demandera d'abord à l'utilisateur d'entrer des informations vocales, et si aucune correspondance n'est trouvée, ou si aucune entrée n'est donnée, l'utilisateur est à nouveau invité avec des options de tonalité.vxml: Puis-je basculer entre l'invite vocale et les invites d'énumération?

Les menus originaux ressemblent à ceci:

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

Le nouveau menu ressemble à ceci:

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

Cependant, je veux utiliser le comportement <enumerate> et <choice> dans le menu original reprompt à la place du texte long (qui est trop long et provoque une erreur).

VOICI LA QUESTION: existe-t-il un moyen d'utiliser le premier style d'invite dans le second style d'invite? puis-je mettre et à l'intérieur d'un champ? et comment ferais-je cela?

Répondre

0

L'élément de choix est spécifique au menu. Alors que vous pouvez utiliser énumération dans une invite générale, la façon dont il est utilisé dans le premier exemple, il lie les invites à l'entrée autorisée. Pour un champ, vous obtenez les entrées disponibles d'une grammaire définie. Sur ce dernier point, votre extrait ne mentionne pas la grammaire et le champ n'indique pas de type. La grammaire est-elle définie à un niveau supérieur dans le document VoiceXML ou dans une grammaire intégrée? Sinon, cela peut être la source de votre erreur.

Vous pouvez utiliser la reconnaissance vocale avec des menus et des choix, mais la façon dont les sélections sont définies par l'énumération:

Ceci est un exemple modifié de la spécification 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> 

Si vous mettez Les invites dans un tableau ECMAScript, vous pourriez probablement utiliser l'énumération aussi bien.

En général, je recommande l'approche sur le terrain. Vous bénéficiez d'une plus grande flexibilité pour fournir des invites riches et gérer les erreurs. menu/choice est un mécanisme de raccourci destiné à des cas simples et limités.

+0

Donc, je peux utiliser '

' pour les invites de reconnaissance vocale au lieu de '
'? C'est bon à savoir. mais voici ma question: dire que je devais être capable de basculer entre deux menus différents en fonction du temps ou non l'utilisateur a activé la reconnaissance vocale. Dans un '' je peux simplement mettre un '' pour changer l'invite. puis-je faire cela dans la balise ''? – mtmurdock

+0

Selon la DTD VoiceXML (http://www.w3.org/TR/voicexml20/vxml.dtd), le seul élément autorisé dans un choix est une grammaire. Par conséquent, vous ne pouvez pas le faire dans un élément de choix. Vous pouvez dans un formulaire. Pour la meilleure expérience utilisateur, je recommande un clip sonore pour chaque chemin et utilise le srcexpr de l'élément audio avec votre drapeau pour sélectionner le clip correct. –

+0

Merci. J'ai trouvé quelque chose d'un peu différent, mais vous m'avez mis sur la bonne voie. :) – mtmurdock