Dynamiczne aplikacje VXML

background image

Na podstawie Tutorial20.pdf


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
spec

yfikowanego za pomocą atrybutu next elementu submit. Skrypty dla wejść

VXML są praktycznie takie same jak skrypty dla formularzy HTML.

background image

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.

background image

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>

background image

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.
D

ział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.

background image

Dynamiczne aplikacje VXML

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'

background image

);
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.


Wyszukiwarka

Podobne podstrony:
Dynamiczne aplikacje VXML
Ajax Niezbednik projektanta dynamicznych aplikacji
Dynamika1
Aplikacje internetowe Kopia
Techniki wywierania wplywu oparte na dynamice interakcji
Analiza dynamiczna chodu w fazie podporu
Dokumenty aplikacyjne CV list
dynamika bryly sztywnej(1)

więcej podobnych podstron