Podpowiedzi
Wcześniej zarejestrowane dane audio
Interpreter VXML może przekształcać tekst na sygnał mowy - jest to wygodne przy projektowaniu i debagowaniu aplikacji.
Jednak zarejestrowane wypowiedzi są preferowane przez użytkownika ze względu na ich jakość. Oprócz tego istnieją biblioteki nagrań typowych (podpowiedzi i efektów dźwiękowych), które można wykorzystać w aplikacji
Przykład
<prompt>
<audio
src="http://www.yourcompany.com/audio/welcome.wav">
Welcome to the telephone message service.
</audio>
</prompt>
Atrybut src specyfikuje URI pliku dźwiękowego. Tutaj oprócz tej specyfikacji tag audio zawiera również tekst, jako dodatkową wiadomość, która zostaje wygenerowana przez TTS, gdy plik o podanym adresie nie będzie dostępny. Można tak postępować nawet, gdy jeszcze nie mamy zarejestrowanych plików audio.
Czasami wygodnie jest zastosować wyrażenie JavaScript do konstrukcji URI, np.:
<audio
expr="'http://www.yourcompany.com/audio/'
+ userlanguage + '/welcome.wav'"
/>
(wyrażenie łączy dwa łańcuchy znaków i zmienną nazwaną userlanguage - aby uczynić aplikację wielojęzyczną, dla rejestracji w różnych językach umieszczonych w osobnych katalogach, o nazwie zapisanej wcześniej w dialogu w zmiennej userlanguage).
Uwaga: jak widać tag <audio> może być albo kontenerem lub pojedynczym tagiem - w tym drugim przypadku należy pamiętać o zamykającym slashu (/) przed >.
Przerywanie podpowiedzi
Normalnie, podpowiedzi mogą być przerywane (interpreter przerywa podpowiedź, gdy wykryje na wejściu sygnał mowy).
Jednak, nieraz chcemy, aby użytkownik wysłuchał podpowiedzi do końca.
<prompt bargein="false">
<audio src="advertisement.wav">
</prompt>
Można sterować przerywaniem w całej aplikacji, wykorzystując tag <property>
<property name="bargein" value="false"/>
aby uniemożliwić przerywanie w całym dokumencie (wartość domyślna jest true).
Wykorzystanie tagu <reprompt>
Są dwa typy błędów: noinput i nomatch
Są trzy tagi do obsługi tych błędów: <noinput>, < nomatch> i <reprompt>
Gdy pojawi się błąd interpreter odszukuje aktywny element <noninput> lub <nomatch>, aby przypomnieć użytkownikowi podpowiedź, i oczekuje na wypowiedź.
Można zdefiniować <noninput> i < nomatch> na górnym poziomie dokumentu, np.:
<noinput>Sorry, I didn't hear you. </noinput>
<nomatch>Sorry, I didn't understand you. </nomatch>
Uwaga: ginie kontekst źródła błędu, interpreter po wygenerowaniu tekstu czeka na reakcję użytkownika (i liczy na jego pamięć).
Aby przypomnieć użytkownikowi na co ma odpowiedzieć stosuje się pusty tag <reprompt>
Przykład:
<noinput>Sorry, I didn't hear you.<reprompt/> </noinput>
<nomatch>Sorry, I didn't understand you.<reprompt/></nomatch>
<field name="op">
<prompt>Choose add, subtract, multiply, or divide.</prompt>
<grammar type="application/x-nuance-gsl">
[add subtract multiply divide]
</grammar>
...
Interakcja z użytkownikiem może być następująca:
Aplikacja: |
Choose add, subtract, multiply, or divide. |
Użytkownik: |
Truncate. |
Aplikacja: |
Sorry, I didn't understand you. Choose add, subtract, multiply, or divide. |
Użytkownik: |
<silence> |
Aplikacja: |
Sorry, I didn't hear you. Choose add, subtract, multiply, or divide. |
Użytkownik: |
Exponentiate. |
Aplikacja: |
Sorry, I didn't understand you. Choose add, subtract, multiply, or divide. |
Można podpowiedzi z informacjami o błędach stopniować.
Miarą kłopotów użytkownika może być liczba błędów przez niego popełnianych w pojedynczej instrukcji.
Interpreter umożliwia zliczanie ile razy od momentu wejścia do formularza lub menu był generowany:
<prompt>
<noinput>
<nomatch>
dla obiektu wejściowego, elementu <initial> lub menu
Można zastosować te liczniki, aby oznaczyć podpowiedzi za pomocą atrybutu count dla tagów <prompt>, <noinput> i <nomatch>.
Przykład:
<noinput>Sorry, I didn't hear you. <reprompt/></noinput>
<nomatch>Sorry, I didn't understand you. <reprompt/></nomatch>
<field name="itemnumber" type="digits">
<prompt>Please enter the item number.</prompt>
<prompt count="3">Please say the item number of the product you wish to buy, or enter it on the telephone keypad.</prompt>
<prompt count="4">If you need help choosing an item, please enter zero. Otherwise, please say the item number of the product you wish to buy, or enter it on the telephone keypad.</prompt>
</field>
Pole ma trzy prompty, dwa z nich mają wartości count.
Gdy użytkownik początkowo wchodzi do pola, interpreter użyje prompta bez count. Przy pierwszym błędzie interpreter wygeneruje odpowiedni prompt sorry, a za nim prompt bez licznika, np.:
Sorry, I didn't hear you. Please enter the item number.
Gdy licznik prompta osiągnie 3, interpreter wygeneruje odpowiedni prompt sorry, a za nim prompt licznikiem równym 3, np.:
Sorry, I didn't understand you. Please say the item number of the product you wish to buy, or enter it on the telephone keypad.
W końcu, gdy licznik osiągnie 4, interpreter wygeneruje odpowiedni prompt sorry, a za nim prompt z licznikiem równym 4, np.:
Sorry, I didn't understand you. If you need help choosing an item, please enter zero. Otherwise, please say the item number of the product you wish to buy, or enter it on the telephone keypad.
Ponieważ można zastosować liczniki również do <noinput> i <nomatch>, można promty jeszcze bardziej zróżnicować:
<noinput>Sorry, I didn't hear you.<reprompt/></noinput>
<nomatch>Sorry, I didn't understand you.<reprompt/></nomatch>
<nomatch count="2">I'm sorry, I still didn't understand you.<reprompt/> </nomatch>
<nomatch count="3">I seem to be having a lot of trouble understanding. <reprompt/></nomatch>
<field name="itemnumber" type="digits">
<prompt>Please enter the item number.</prompt>
<prompt count="2">Please say the item number of the product you wish to buy, or enter it on the telephone keypad.</prompt>
<prompt count="3">If you need help choosing an item, please enter zero. Otherwise, please say the item number of the product you wish to buy, or enter it on the telephone keypad.</prompt>
</field>
Teraz w tym samym czasie, gdy generowane są informacje o błędzie związane z kontekstem, globalne informacje <nomatch> są również zmieniane.
Można przeprowadzić następującą interakcję:
Aplikacja: |
Please enter the item number. |
Użytkownik: |
The red dress. |
Aplikacja: |
Sorry, I didn't understand you. Please enter the item number. |
Użytkownik: |
A dress. |
Aplikacja: |
I'm sorry, I still didn't understand you. Please say the item number of the product you wish to buy, or enter it on the telephone keypad |
Użytkownik: |
I want a dress. |
Aplikacja: |
I seem to be having a lot of trouble understanding. If you need help choosing an item, please enter zero. Otherwise, please say the item number of the product you wish to buy, or enter it on the telephone keypad. |