Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Le grammatiche predefinite

Grammatiche predefinite, controllo di flusso e Ecma script
Grammatiche predefinite, controllo di flusso e Ecma script
Link copiato negli appunti

Abbiamo osservato che al fine di guidare il riconoscimento dell'input, sia esso vocale o tramite tastiera telefonica (DTMF), vengono usati dei particolari dizionari, chiamati grammatiche.

L'uso delle grammatiche dunque si rivela fondamentale all'interno di un'applicazione vocale, in quanto consentono di riconoscere tutti i valori che gli utenti devono poter pronunciare, e le possibili combinazioni di questi valori.

Le grammatiche possono essere di tre tipi:

  • Built In o predefinite
  • Interne o "in linea"
  • Esterne (su file esterno)

Grammatiche predefinte (Built In)

Per alcuni campi è possibile utilizzare delle grammatiche predefinite, questo ci permette di semplificare lo sviluppo della nostra applicazione e richiamare il tipo di grammatica che ci serve senza doverla costruire.

Per richiamarle basta esplicitare la tipologia di grammatica predefinita che vogliamo utilizzare a livello del singolo campo:

<field type = "digits" name = "field1">

Esistono diverse tipologie di grammatiche predefinite che sono:

BOOLEAN

Accetta i valori "Si", "No", 1 (positivo), 2 (negativo). Il valore viene salvato come "vero" o "falso" e può essere letto attraverso, per esempio, l'espressione <say-as> vmxl:boolean" per generare frasi positive o negative. ecco come può essere usata:

Listato 3.1: Grammatica di tipo Boolean

...
 <form>
  <field name="field1" type="boolean">
   <prompt> Sicuro? </prompt>
   <filled>
    <if cond="field1">
     Hai detto si.
    <else/>
     Hai detto no.
    </if>
   </filled>
  </field>
 </form>
...

In questo caso abbiamo utilizzato la grammatica predefinita di tipo "boolean" per far si che l'utente potesse immettere soltanto valori come "si", "no", oppure digitare "1" e "2". Qualora l'utente scelga un valore diverso il risultato sarà un evento di "nomatch".

Nel listato 3.1 possiamo inoltre notare che abbiamo utilizzato due nuovi elementi per gestire il flusso del nostro voicexml: il tag: <if> ed il tag <else>. Questi operatori logici indicano all'interprete che, qualora il campo filed1 sia vero (<if cond="field1">), di leggere all'utente la frase "hai detto si", e, in caso contrario (<else/>), leggergli "hai detto no".

DIGITS

Un'altra tipologia di grammatica predefinita è quella rappresentata da "digits", che accetta sequenze di numeri (DTMF) ma solo da 1 a 9, non è possibile, per esempio, dire ventuno. Anche in questo caso facciamo un rapido esempio per capire come usarla.

Listato 3.2: Grammatica di tipo Digits

...
<field type = "digits" name = "field1">
 <prompt>
  Dimmi una cifra, scandendo i numeri uno alla volta
 </prompt>
 <filled>
  hai detto <value expr = "field1.split('').join(' ')" />
 </filled>
</field>
...

In questo listato abbiamo usato nuovamente il tag <value> per richiamare il valore della variabile contenuta nel campo "field1", ma questa volta abbiamo usato all'interno dell'attributo "expr" una espressione in linguaggio Ecma script, meglio conosciuto come Javascript.

NUMBER

Proseguiamo il nostro excursus sulle tipologie di grammatiche predefinite con la "number". Simile a digits, ma accetta anche numeri a più cifre, in DTMF supporta l'uso del "*" come punto decimale, il valore del vampo viene convertito e salvato in numero, e pu&grave essere richiamato utilizzando, ad esempio, la seguente espressione <say-as> vmxl:number".

Listato 3.2: Grammatica di tipo Digits

...
<field type = "numbers" name = "field1">
 <prompt>
  Quanti pezzi di questo articolo desideri?
 </prompt>
 <filled>
  hai detto <value expr = "field1" />.
 </filled>
</field>
...

Vi sono altre tipologie di grammatiche predefinite che sono:

  • date: accetta valori DTMF (4 per l'anno, 2 per il mese, 2 per il giorno), oppure frasi che specificano la data con giorno mese ed anno. Viene salvato come stringa a lunghezza fissa con il formato "yyyymmdd" ad esempio 20041231. Se un valore non viene capito viene riempito con ???.
  • currency: accetta DTMF in formato "UUUmmmm,nn" dove "*" corrisponde al punto decimale e "UUU" il tipo di valuta o frasi che specifichino una data valuta.
  • phone: accetta come input validi frasi che includano numeri telefonici. In caso di DTMF il tasto "*" representa l'estensione del numero telefonico. Il risultato è una stringa che contiene un numero di telefono e, opzionale, può contenere il carattere "x" seguito da altri numeri, ad esempio: "8005551234x789".

Per maggiori informazioni sulle tipologie di grammatiche consultare le specifiche VoiceXML 2.0.

Ti consigliamo anche