All'interno del nostro documento è possibile inserire dei file
audio pre-registrati, che non solo possono sostituire alcune sezioni
dei nostri dialoghi, ma anche aumentare la sensazione di "realismo"
dell' applicazione
La prima cosa da fare per usare dei file audio è indicare
il percorso dove risiedono.
1. |
<?xml version="1.0"?> |
2. |
<vxml version="1.0"> |
3. |
<property name="audio.path"
|
4. |
value="..\..\wav\"/> |
Alla linea 3 viene utilizzato l'elemento property il quale introduce il "percorso
dei file audio".
La linea 4, invece, stabilisce invece la posizione (relativa) della
cartella che conterrà i file wav.
Ovviamente è possibile usare un percorso assoluto invece che
uno relativo.
Script
Una delle funzionalià fondamentali del VoiceXML è la
capacità di contenere scripts.
Vediamo ora il primo esempio di script.
Per prima cosa dichiariamo due variabili: exist e badInputCounter entrambe dichiarate all'interno dei tag vxml e quindi con
valenza globale.
Useremo la variabile exist per definire se il nome specificato è
già presente nell' elenco dei nomi, mentre useremo badInputCounter
per salvare il numero dei noinput e nomatch che verranno generati
da un particolare input.
5. |
<var name="badInputCounter"
expr="0"/> |
Se ricordate, precendentemente, avevamo visto che era possibile definire
dei nomatch e dei noinput con valenza globale, i quali pero' presentavano il
problema di non permettere di tracciare il numero di errori fatti dall'utente
e quindi restituire un messaggio appropriato o gestire differentemente
l'evento.
In questo caso tale "tracking" viene realizzato per mezzo della variabile badInputCounter
6. |
<nomatch> |
7. |
<script><![CDATA[ |
8. |
badInputCounter=badInputCounter+1; |
9. |
echo "nomatch
counter: ",badInputCounter,endl; |
10. |
]]></script> |
11. |
|
12. |
Sorry, I didn't
understand what you said. |
13. |
<if cond="badInputCounter
= = 3"> |
14. |
<goto
nextitem="end"/> |
15. |
</if> |
16. |
</nomatch> |
Uno script è un elemento come gli altri, con un suo tag di
apertura e di chiusura (rispettivamente linea 7 e 10).
Subito dopo l'apertura dell'elemento script troviamo il tag !CDATA.
il quale indica al browser VoiceXML di ignorare il
codice contenuto al suo interno (ad esempio potremmo decidere di usare
caratteri speciali al suo interno senza temere di incorrere in errori
da parte del server Voice)
La porzione di codice verrà invece processata dall'interprete
dello script.
Alla riga 8 viene incrementato di uno il valore della variabile badInputCounter,
mentre la riga 9 ne mostra il valore.
"Mostrare" il valore non equivale ad utilizzare l'elemento prompt: l'utente
non udirà mai il valore di un testo esplicitato con echo, ma
semplicemente, diciamo che il valore viene reso disponibile all'applicazione
VoiceXML, insieme al resto della riga 9 che viene chiusa da terminatore endl.
La linea 13 controlla il valore della variabile e se uguale a 3 sposta
l'esecuzione alla linea 14 che termina l'applicazione.
17. |
<noinput> |
18. |
<script><![CDATA[ |
19. |
badInputCounter=badInputCounter+1; |
20. |
echo "nomatch
counter: ",badInputCounter,endl; |
21. |
]]></script> |
22. |
|
23. |
<if cond="badInputCounter
= = 3"> |
24. |
<goto
nextitem="end"/> |
25. |
</if> |
26. |
No input was received. |
27. |
</nomatch> |
28. |
|
Ora che abbiamo scritto il codice per gestire gli eventi di noinput
e di nomatch vediamo come possiamo catturare la data fornita dall'utente e
prenotare la conference room.
29. |
<form id="month"
scope="document"> |
30. |
<block> |
31. |
<audio src= "lesson4001.wav"> |
32. |
Welcome to the Cambridge Conference
Room Scheduling System. |
33. |
If you are unsure of the
formats accepted by each field, say |
34. |
help or enter a question mark
at the user prompt. |
35.. |
</audio> |
36. |
</block> |
37. |
<field name="calendar"
type="date" scope="document"> |
38. |
<grammar> help </grammar> |
39. |
40. |
<audio src= "lesson4002.wav"> |
41. |
For what date
would you like |
42. |
to schedule
the conference room? |
43. |
</audio> |
44. |
<help> |
45. |
<audio src= "lesson4003.wav"> |
46. |
The
format for date is yyyymmdd. |
47. |
</audio> |
48. |
</help> |
49. |
<filled> |
50. |
<prompt> |
51. |
<audio src= "lesson4004.wav"> |
52. |
I think
you said |
53. |
</audio> |
54. |
<value expr="calendar"
class="date"/> |
55. |
</prompt> |
56. |
<goto nextitem="time"/> |
57. |
</filled> |
58. |
</field> |
Ad esclusione dell'elemento audio, il resto del codice appare ormai
familiare.
L'elemento audio, che fa la sua comparsa alla linea 31, indica che
un file deve essere eseguito al posto di un prompt. Il file, come
visto nelle prime righe, sarà un file wav.
Se il file audio non viene trovata viene letta la stringa all'interno
del tag audio.
I due tipi di lettura posso essere usati contemporaneamente, come
vediamo alle righe 51-54.
Adesso scriviamo l'ultima parte del codice, ovvero quella necessaria
per catturare l'ora alla quale prenotare la nostra conference room.
59. |
<field name="time"
type="time" scope="document"> |
60. |
<audio
src= "lesson4005.wav"> |
61. |
What
time would you like the conference room? |
62. |
</audio> |
63. |
<help> |
64. |
<audio
src= "lesson4006.wav"> |
65.. |
The
format for time is hhssx. |
66. |
</audio> |
67. |
</help> |
68. |
<filled> |
69. |
<prompt> |
70. |
<audio
src= "lesson4002.wav"> |
71. |
I
think you said |
72. |
</audio> |
73. |
<value
expr="time" class="time"/> |
74. |
</prompt> |
75. |
<goto
nextitem="end"/> |
76. |
</filled> |
77. |
</field> |
78. |
<block name="end"> |
79. |
<prompt> |
80. |
<audio
src= "lesson4008.wav"> |
81. |
Thank
you for using the Cambridge Conference Room |
82. |
Scheduling
System. You have scheduled a conference for |
83. |
</audio> |
84. |
<value
expr="calendar" class="date"/> |
85. |
<value
expr="time" class="time"/> |
86. |
</prompt> |
87. |
<exit/> |
88. |
</block> |
89. |
</form> |
90. |
</vxml> |