Przykład dialogu:
S: Please enter your 4 digit pin code.
U: 1234
S: Good Morning Mr. Eisenzopf. How may I help you?
Dokument VXML implementujący ten interfejs:
<?xml version="1.0"?>
<vxml version="1.0" >
<form id="hello">
<field name="pin">
<prompt>Please enter your 4 digit pin code.</prompt>
<filled>
<submit next="http://www.webreference.com/cgi-bin/perl/20/pin.pl"/>
</filled>
</field>
</form>
</vxml>
Wejście użytkownika dla pola “pin” jest przekazywane do skryptu CGI specyfikowanego za pomocą atrybutu next elementu submit. Skrypty dla wejść VXML są praktycznie takie same jak skrypty dla formularzy HTML.
Element filled może pojawić się albo wewnątrz elementu field:
<?xml version="1.0"?>
<vxml version="1.0" >
<form id="hello">
<field name="pin">
<prompt>Please enter your 4 digit pin code.</prompt>
<filled>
<submit next="http://www.webreference.com/cgi-bin/perl/20/pin.pl"/>
</filled>
</field>
</form>
</vxml>
albo wewnątrz formularza form, ale poza polem:
<?xml version="1.0"?>
<vxml version="1.0" >
<form id="hello">
<field name="pin">
<prompt>Please enter your 4 digit pin>
</field>
<field name="ccnum">
<prompt>Please enter your credit card number.</prompt>
</field>
<filled>
<submit next="http://www.webreference.com/cgi-bin/perl/20/pin.pl"/>
</filled>
</form>
</vxml>
To umożliwia sterowanie wejściem zarówno na poziomie pola i/lub formularza.
Można przetwarzać wartości pola za każdym razem, gdy są wpisane lub można czekać aż wszystkie pola zostaną wypełnione.
Są inne atrybuty, których można użyć do sterowania jak i co się wysyła.
Domyślnie wysyłane są wartości formularza poprzez protokół HTTP do określonego miejsca URL za pomocą metody GET (umieszcza się w adresie URL, po znaku „?‟, pary „parametr=wartość‟ połączone znakiem „&‟) Można zastosować metodę POST za pomocą atrybutu method:
<submit next=http://www.webreference.com/cgi-bin/perl/20/pin.pl method="POST"/> Podczas przesyłania wartości pól za pomocą elementu filled z poziomu formularza (w przeciwieństwie do pola) można kontrolować (za pomocą atrybutu namelist), które pola są przesyłane:
<submit next=http://www.webreference.com/cgi-bin/perl/20/pin.pl namelist="ccnum"/> Dodatkowo jest wiele innych sposobów oddziaływania na pole wejściowe Można odesłać użytkownika do innego formularza:
<filled>
<goto next="#first_name"/>
</filled>
lub włączyć wiadomość:
<filled>
<prompt>Thank you Mr. Rich. It will take 24 to 48 hours money into your off-shore accounts.</prompt>
<submit next="http://www.textant.com/cgi-bin/launder.pl"/>
</filled>
Można przetwarzać wejścia bez przekazywania ich do skryptów Najprostszą alternatywą jest element result. Jeżeli wartość atrybutu name pasuje do wartości pola, będzie wykonana instrukcja wewnątrz:
<?xml version="1.0"?>
<vxml version="1.0" >
<form id="hello">
<field name="pin">
<prompt>Please enter your 4 digit pin code.</prompt>
<filled>
<result name="1234">
<prompt>Good Morning Mr. Eisenzopf. How may I help
you?</prompt>
<goto next="#secret_laboratory"/>
</result>
<result name="2468">
<prompt>Good Morning Mr. King. How may I help
you?</prompt>
<goto next="#control_room"/>
</result>
</filled>
</field>
</form>
</vxml>
Element result może dopasowywać proste łańcuchy, nie ma mocy instrukcji warunkowych, jak if i else.
Działa dobrze, gdy jest predefiniowany zbiór wejść, które użytkownik może wprowadzić. Jeżeli treść będzie bardziej dynamiczna, jak kod PIN, wtedy może być potrzebna instrukcja warunkowa.
Dalej wykorzystany zostanie scenariusz z PIN-em.
Opracowany zostanie skrypt CGI, który dostarczy odpowiedź na wejście użytkownika.
Zakończony formularz VXML ma następującą postać (Example 4. [example4.xml]):
<?xml version="1.0"?>
<vxml version="1.0" >
<form id="login">
<field name="pin">
<grammar>
<![CDATA[
Four_digits
]]>
</grammar>
<prompt>Please enter your 4 digit pincode.</prompt>
<filled>
<submit next="http://www.webreference.com/cgi-
bin/perl/20/pin.pl"/>
</filled>
<noinput count="1">No PIN entered.
<reprompt/>
</noinput>
<noinput count="2">You must enter your PIN number to proceed.
<reprompt/>
</noinput>
<noinput count="3">Please press or say exactly four numbers.
</noinput>
<nomatch count="1">Invalid pin code.
<reprompt/>
</nomatch>
<nomatch count="2">Please press or say exactly four numbers.
<reprompt/>
</nomatch>
<nomatch count="3">Too many attempts. Please call back another
<exit/>
</nomatch>
</field>
</form>
</vxml>
Skrypt CGI zostanie napisany w Perl. Umiejętność wykorzystania modułu Perl CGI pm pozwoli operować na wejściowym formularzu VXML.
#!/usr/bin/perl -w
use strict;
use CGI;
my %users = (
'1234' => 'Eisenzopf',
'2468' => 'King'
my $q = new CGI;
my $pin = $q->param('pin');
print "Content-Type: text/xml\n\n";
print <<VXML;
<?xml version="1.0"?>
<vxml>
<form>
<block>
VXML
print "Good Morning Mr. $users{$pin}. How may I help you?"
|| "$pin is an invalid pin code.";
print <<VXML;
</block>
</form>
</vxml>
VXML
Została napisana nowa wersja modułu CGI.pm. Wartość pola pin uzyskujemy za pomocą linii kodu:
my $pin = $q->param('pin');
Jest ważne, aby upewnić się, że zwracany jest właściwy nagłówek http. Domyślny nagłówek nie będzie pracował właściwie. Należy użyć następującej instrukcji jako pierwszego wyjścia do Tellme:
print "Content-Type: text/xml\n\n";
Pozostała część skryptu jest zwykłym perlem. Odnajdujemy nazwisko użytkowników wykorzystując ich kody PIN. Jeżeli znajdziemy nazwisko witamy ich, w przeciwnym wypadku zwracamy błąd. Jest to bardzo prosty skrypt, lecz jest to pierwsza próba opracowania dynamicznej aplikacji VXML.