WOJSKOWA AKADEMIA TECHNICZNA
im. Jarosława Dąbrowskiego
WYDZIAŁ CYBERNETYKI
Sprawozdanie z laboratorium
nr 2
Temat: Standard VXML: zmienne, wyrażenia,
formularze, subdialog. Sterowanie
porządkiem interpretacji w dokumencie
VXML.
Autor:
Prowadzący:
inż Łukasz Śledzik
dr inż. Andrzej Wiśniewski
W a r s z a w a 2012
Treść zadania:
Wykorzystując standard VXML zaimplementować sposoby sterowania porządkiem
interpretacji wewnątrz formularza.
1. Opracować scenariusz dialogu.
2. Sformułować program z funkcjami sterującymi (goto, if)
3. Zastosować w formularzu pole <field> z atrybutami:
expr
cond
4. Zastosować subdialog:
tag <subdialog> z atrybutami name (zmienna wejściowa) i src
tag <param> z atrybutami name i expr
tag <return> z atrybutem namelist
5. Dokonać testowania programu na portalu głosowym Voxeo.
Rozwiązanie:
1.
Scenariusz (przykład)
S - IVR
U - użytkownik
S: Welcome In automatic call center. Please enter Your phone number.
U: (entering phone number)
S: Please enter Your password.
U: (entering password)
S: Login correct. What would You like to do? You can choose between: balance, validity, my
services, available services, manage services.
U: Balance
S: Your account balance is 10 $. What would You like to do? You can choose between:
balance, validity, my services, available services, manage services.
U: Validity
S: Your account validity is 30 days.
U: (disconnected)
SCHEMAT BLOKOWY:
2.
Zastosowanie funkcji sterujących goto oraz if:
Funkcje sterujące goto zostały zastosowane w celu przejścia do formularzy o
wskazanych nazwach. Należy jednak pamiętać, iż przez zastosowanie tejże instrukcji
niemożliwe będzie zapamiętanie wartości pól.
W instrukcji sterującej if sprawdzany jest warunek cond, który może mieć wartość
logiczną true bądź false.
Poniższy przykład pokazuje zarówno wykorzystanie funkcji if, jaki i przejście z
subdialogu count do subdialogu delivery z wykorzystaniem funkcji sterującej goto:
<subdialog name="SubD_1" src="Subdialog_File.xml">
<param name="question" expr="' Welcome in automatic call center. Please enter
Your phone number. Please enter Your password.
Login correct. What would You like to do? You can choose between: balance,
validity, my services, available services, manage services.'"/>
<filled>
<if cond="SubD_1.response =='balance'">
<prompt>
Your account balance is 10$.
</prompt>
<elseif cond="SubD_1.response =='validity'"/>
<prompt>
Your account validity is 30 days.
</prompt>
<elseif cond="SubD_1.response =='my services'"/>
<prompt>
Your services one two three.
</prompt>
<elseif cond="SubD_1.response =='available services'"/>
<prompt>
Available services one two three.
</prompt>
<elseif cond="SubD_1.response =='manage services'"/>
<prompt>
You have chosen manage services option.
</prompt>
<goto nextitem="SubD_2"/>
<else/>
<nomatch>
Sorry, I didn't get that. Please repeat.
<reprompt/>
</nomatch>
<noinput>
Sorry, I can't hear you. Please repeat.
<reprompt/>
</noinput>
</if>
<goto nextitem="SubD_1"/>
</filled>
</subdialog>
3.
Zastosowanie pola <field> z atrybutami expr i cond:
Atrybut expr nadaje danemu polu wartość tego atrybutu. W poniższym przykładzie
atrybut expr zapewnia nam odczytanie przez IVR wiadomości, natomiast w
przyszłości można go użyć do potwierdzenia poprawności rozpoznania słowa
wypowiedzianego przez użytkownika z odpowiednikiem w zdefiniowanej gramatyce:
<param name="question" expr="'You can choose between buy and delete service.
What would You like to do?'"/>
Co do atrybutu cond, to decyduje on o wejściu do pola. Jest to atrybut reprezentujący
warunek. W przypadku jego realizowane jest polecenie, np.:
<if cond="SubD_2.response=='buy'">
<prompt>
You have chosen buy service option.
</prompt>
Natomiast warunek cond może posłużyć również do opracowania prostego
uwierzytelniania użytkowników poprzez sprawdzenie poprawności podanego przez
owego użytkownika hasła.
4.
Zastosowanie subdialogu (tag <subdialog> z atrybutami name i src; tag <param>
z atrybutami name i expr; tag <return> z atrybutem namelist)
:
Subdialog pozwala na przenie sienie sterowania do innego pliku *.xml, pozwalając na
przekazanie i zwracanie wartości parametrów. Poniżej przykład w praktyce:
Fragment pliku subD.xml:
<subdialog name="SubD_1" src="Subdialog_File.xml">
<param name="question" expr="' Welcome in automatic call center. Please
enter Your phone number. Please enter Your password.
Login correct. What would You like to do? You can choose between:
balance, validity, my services, available services, manage services.'"/>
<filled>
<if cond="SubD_1.response =='balance'">
<prompt>
Your account balance is 10$.
</prompt>
<elseif cond="SubD_1.response =='validity'"/>
<prompt>
Your account validity is 30 days.
</prompt>
<elseif cond="SubD_1.response =='my services'"/>
<prompt>
Your services one two three.
</prompt>
<elseif cond="SubD_1.response =='available services'"/>
<prompt>
Available services one two three.
</prompt>
<elseif cond="SubD_1.response =='manage services'"/>
<prompt>
You have chosen manage services option.
</prompt>
<goto nextitem="SubD_2"/>
<else/>
<nomatch>
Sorry, I didn't get that. Please repeat.
<reprompt/>
</nomatch>
<noinput>
Sorry, I can't hear you. Please repeat.
<reprompt/>
</noinput>
</if>
<goto nextitem="SubD_1"/>
</filled>
</subdialog>
Fragment pliku SubdialogFile.xml:
<field name="response" cond="true">
<grammar type="text/gsl"> [balance validity my services available services
manage services] </grammar>
<grammar type="text/gsl"> [buy delete] </grammar>
<grammar type="text/gsl"> [yes no] </grammar>
<prompt>
<value expr="question"/>
</prompt>
<filled>
<return namelist="response"/>
</filled>
</field>
Uwagi dotyczące testowania aplikacji na portalu głosowym Voxeo z wykorzystaniem
Skype:
W czasie realizacji zadania napotkano dziwne zachowanie serwera głosowego Voxeo
przy połączeniu przez Skype. Otóż aplikacja czasami nie chciała się uruchomić.
Nawiązywane było połączenie, natomiast dopiero po kilku próbach aplikacja
startowała. W pozostałych przypadkach połączenie albo było zrywane bez żadnej
informacji, albo aplikacja nie reagowała na wprowadzane dane głosowe.
Jeśli chodzi o pozostałe trudności związane z testowaniem aplikacji, związane były
one z początkowymi literówkami w kodzie xml. Wbudowany debbuger pozwolił
jednak na wskazanie i poprawienie popełnionych błędów.
Nr Skype:
+990009369996159568