Esistono molti linguaggi lato server per realizzare delle applicationi web. Uno dei più diffusi è PHP. Da quanto abbiamo appreso fino ad ora il VoiceXML mutua le tecnologie relative all'ambiente internet, e le riutilizza per l'interazione con l'utente attraverso un media diverso il telefono; per uno sviluppatore PHP realizzare applicazioni VoiceXML non è troppo complesso, l'approcio, per semplificare, è quello di sostituire alle conoscenze dei tag HTML quelle dei tag VoiceXML.
Proviamo a prendere la classica applicazione dell'ora esatta, l'utente chiama un numero di telefono e l'operatore virtuale da il benvenuto, e poi scandisce chiaramente il giorno mese anno e ora. Come opzione possibile può chiedere all'operatore se vuole sapere l'ora/data di un altro paese oppure finisce se l'operatore riaggancia terminandone l'esecuzione. Il codice PHP per la prima parte sara:
<?php
/* Modifichiamo il Content-Type del documento
*/
header("Content-type: application/voicexml+xml");
/* dichiariamo la versione del documento xml
* che a causa dei caratteri < e ?
* non puo' essere scritta direttamente
*/
echo '<?xml version="1.0"?>';
?>
<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
<form id="main">
<block>
<!-- Messggio di benvenuto -->
<prompt bargin="false">
Benvenuto nel servizio ora esatta di HTML.it
</prompt>
<goto src="#showtime">
</block>
</form>
<?php
/* Si possono mischiare parti di codice VXML e PHP
* attraverso la funzione date()
* ricaviamo l'ora corrente
*/
// es 10 Marzo, 2005
$data = date("j F, Y");
// 15:16
$ore = date("G:i");
$messaggio=$data. ". Ore ".$ore;
?>
<form id="showtime">
<block>
<prompt bargin="false">
<!-- Legge la data e l'Ora -->
<?=$messaggio; ?>
</prompt>
<goto src="#showtime">
</block>
</form>
<form id="asktime">
<field name="nation" type="dafinire">
<prompt>
<!-- Definiamo una grammatica in linea-->
<grammar type="application/srgs+xml">
<rule id="myRule">
<one-of>
<item> New York
<tag><![CDATA[<nation newyork>]]></tag> </item>
<item> Mosca
<tag><![CDATA[<nation mosca>]]></tag> </item>
<item> Sidney
<tag><![CDATA[<nation sidney>]]></tag> </item>
</one-of>
</rule>
</grammar>
Se vuoi sapere che ore sono in un altro paese?
Scegli fra New York, Mosca, Sidney
oppure riaggancia il ricevitore.
</prompt>
<filled>
<!-- Inoltriamo la variabile ottenuta dalla grammatica alla nuova pagina voicexml
attreverso un submit in modalità post -->
<submit next="moretime.php" method="post" namelist="nation"/>
</filled>
<noinput>
Non ho capito per favore riprova
<reprompt/>
</noinput>
</field>
</form>
</vxml>
Come si può vedere il flusso del codice è molto semplice, ed è la classica impostazione di un programma PHP, l'unica differenza è che qui vengono miscelati i TAG VoiceXML anzichè quelli html.
Andiamo ad analizzare brevemente le parti importanti del codice:
- come prima operazione è buona norma cambiare il content-type del documento da html a "application/voicexml+xml", in modo che il server voicexml interpreti correttamente il documento,
- utilizziamo la funzione di echo per generare il descrittore <?xml version="1.0"?> a causa dell'impossobilità di integrare direttamente i caratteri <? e ?> in un pagina senza creare problemi al preprocessore del PHP.
- dichiariamo la variabile contente la data, generata dalle funzioni PHP
- utilizziamo la funzione propmt del VoiceXML per chiedere all'utente se si desidera avere l'ora di un'altra nazione, a questo punto se l'utente pronuncia il nome di una città viene richiesta al web server il file moretime.php e viene passato attravers il metodo post, la variabile nation.
Il file successivo che si chiamerà moretime.php segue le tracce del precedente, ma in piu' riceve il valore del field nation, che verrà letto dal php attraverso
$_POST['nation'];
sucessivamente l'elaborazione calcola l'ora/data per la città scelta e pronuncia il risultato attraverso prompt.
<?php
//Cambiamo il Content-Type del documento
header("Content-type: application/voicexml+xml");
//dichiariamo la versione del documento xml che a causa dei caratteri < e ? non puo' fatta essere direttamente
echo '<?xml version="1.0"?>';
//Leggo la variabile passata attraverso il post
$nation=$_POST['nation'];
?>
<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
<form id="main">
<block>
<!-- Messggio di benvenuto --><prompt bargin="false">
Orario per la nazione <?=$nation?>
</prompt>
<goto src="#showtime"></block>
</form>
<?php
/*Calcoliamo la data nella nazione*/
switch ($nation){
case 'newyork':
$time=mktime()-(3600*6);
case 'mosca';
$time=mktime()+(3600*2);
case 'sidney';
$time=mktime()+(3600*10);
}
$data = date("j F, Y",$time); //ad esempio 10 Marzo, 2005,
$ore = date("G:i",$time); //ad esempio 15:16
$messaggio=$data. ". Ore ".$ore;
?>
<form id="showtime">
<block>
<prompt bargin="false">
<!-- Legge la data e l'Ora -->
<?=$messaggio; ?></prompt>
</form>
</vxml>
Come vediamo, anche in questo secondo listato, abbiamo utilzzato il codice PHP per gestire l'elaborazione degli orari e della data, salvandole in due diverse variabili, nella parte seguente abbiamo utilizzato PHP per elaborare anche il messaggio da utilizzare nel prompt.
Una volta elaborati le informazioni, le abbiamo "incollate" nel nuovo documento VoiceXML generato, nella sezione del "prompt", per far leggere il messaggio al nostro utente.