# VoiceXML

VoiceXML ('VXML) acronimo di Voice eXtensible Markup L'anguage, definito dal World Wide Web Consortium (W3C), rappresenta lo standard in formato XML per la creazione di dialoghi interattivi tra una persona ed un computer.
La piattaforma VoiceXML lavora in modo analogo a un browser HTML: i documenti VoiceXML vengono scaricati da un server web e interpretati e trasformati in voce da un Voice Gateway residente sul computer dell'utente finale.

## Applicazioni

VoiceXML è un linguaggio progettato per realizzare sistemi di presentazione e interazione vocali, denominati Voice User Interface (VUI, in italiano interfaccia utente vocale), usando la linea telefonica per l'accesso ai dati.
VoiceXML permette la creazione di logiche di dialogo uomo-macchina in linguaggio naturale attraverso l'integrazione con diverse tecnologie, tra cui:
* Dual-Tone Multi-Frequency
* Riconoscimento vocale
* Sintesi vocale
* Speaker Verification
* Video in streaming o preregistrati
Il linguaggio VoiceXML è espressamente concepito per operazioni e applicazioni orientate al web: questo consente di produrre documenti VoiceXML anche in modo dinamico e interattivo con l'utente, attraverso linguaggi server side (ASP, ASP.NET, JSP, PHP, ecc.), così come avviene per le pagine web.

## Caratteristiche

Alcune delle caratteristiche del linguaggio VoiceXML sono:
* Linguaggio di markup concepito per creare applicazioni vocali: VoiceXML è stato progettato appositamente per la creazione di applicazioni vocali, la gestione dei dialoghi, e l'integrazione con le funzioni di riconoscimento e sintesi vocale.
* Separazione del codice per le interazioni utente dal codice dell'applicazione: la separazione delle logiche di programmazione da quelle di presentazione è un requisito fondamentale, sia per la verticalizzazione di applicazioni esistenti, sia per lo sviluppo in team di applicazioni vocali.
* Struttura modulare: la struttura stessa del linguaggio permette la creazione di dialoghi, grammatiche e logiche di interazione che possono essere resi modulari. Questi elementi possono essere conservati separatamente e riutilizzati in altre applicazioni.
* Portabilità e semplicità di sviluppo: VoiceXML è stato creato per essere utilizzato indipendentemente dalle piattaforme e per nascondere al programmatore le logiche di più basso livello. Lo sviluppatore di applicazioni vocali, infatti, non dovrà preoccuparsi della gestione del motori di riconoscimento o sintesi vocale, ma si potrà concentrare sulla creazione dell'interfaccia utente.

## Come funziona

L'utente si connette tramite il proprio telefono (senza dover usare un particolare browser o plugin) ad un Voice Gateway attraverso la rete telefonica ordinaria.
Il Voice Gateway svolge le seguenti funzioni:
* interpreta il documento VoiceXML;
* produce un messaggio vocale attraverso la sintesi vocale;
* riceve ed interpreta i comandi dall'utente (tramite la tastiera a toni, via DTMF o tramite comandi vocali, via riconoscimento vocale);
* dialoga con il server web attraverso il protocollo HTTP.
Il server web, una volta ricevute le richieste dal Voice Gateway, rende disponibili i documenti VoiceXML per la loro interpretazione e conversione in voce verso l'utente finale.

## Esempio

Esempio di un documento VoiceXML:
L'interpretazione di questa pagina VoiceXML da parte del Voice Gateway fa pronunciare le parole "Ciao Mondo!" tramite un sistema integrato di sintesi vocale.
Esempi di applicazioni possibili sono: posta elettronica, informazioni di servizio di pubblica utilità (meteo, traffico...), quotazioni di borsa, call center, gestione delle scorte, servizi per il tempo libero (oroscopi, eccetera).

## Storia del linguaggio

Un primo linguaggio di markup per interazioni vocali via telefono, il Phone Markup Language (PML) fu sviluppato dai Bell Laboratories di AT&T. Lo sviluppo proseguì anche quando i Bell Laboratories furono scorporati da AT&T e integrati in Lucent Technology.
Nel frattempo anche IBM e Motorola svilupparono i loro linguaggi di markup vocali, denominati rispettivamente SpeechML e VoxML.
Nel marzo 1999 IBM, AT&T, Lucent e Motorola decisero di unificare gli sviluppi su una base comune, dando vita al VoiceXML Forum che nell'agosto 1999 iniziò le specifiche del linguaggio VoiceXML, pubblicando la versione 1.0 nel marzo 2000. Il nuovo linguaggio di markup, grazie anche alle somiglianze con l'HTML, ebbe subito un'ampia diffusione. L'attore italiano principale nelle attività del forum è stato lo CSELT.
Nel marzo 2004, la versione 2.0 di VoiceXML divenne una raccomandazione ufficiale del W3C che ne cura gli sviluppi e le evoluzioni.
A giugno 2007 il W3C ha distribuito la versione 2.1 di VoiceXML, che presenta una serie di estensioni garantendo la compatibilità all'indietro con la versione precedente.
A giugno 2009 il W3C ha distribuito la seconda versione draft dell'edizione 3.0 di VoiceXML, che prevede ulteriori estensioni tra cui l'identificazione e la verifica della voce e la cattura e riproduzione di video.

## Standard collegati

Nel quadro delle attività collegate alle applicazioni vocali, il W3C ha ulteriormente separato il controllo delle interfacce vocale definendo diversi linguaggi di markup, ognuno orientato verso aspetti specifici.

### SRGS e SISR

Speech Recognition Grammar Specification (SRGS) è il linguaggio utilizzato per scrivere le grammatiche (insiemi di regole) utilizzate dal riconoscitore vocale per riconoscere gli input utente.
Semantic Interpretation for Speech Recognition(SISR) viene utilizzato per controllare l'interpretazione semantica, inserendo le opportune istruzioni nelle grammatiche, per manipolare i risultati ottenuti dal riconoscimento vocale in base al contesto applicativo.

### PLS

Pronunciation Lexicon Specification (PLS) viene utilizzato sia dal riconoscitore vocale sia dal sintetizzatore per controllare la corretta pronuncia di una parola, soprattutto in applicazioni multilingue.

### SSML

Speech Synthesis Markup Language (SSML) viene usato per migliorare la prosodia delle frasi controllando aspetti quali enfasi, timbro vocale, volume sonoro e velocità di lettura.

### CCXML

Call Control eXensible Markup Language (CCXML) viene usato per la gestione delle telefonate. Permette di accettare una chiamata in entrata, effettuare una chiamata in uscita, terminare una chiamata e collegare più chiamate in conferenza.