background image

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 

background image

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.

 

background image

 

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: 

background image

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.'"/> 
 
 

background image

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

background image

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'"/> 

background image

 

<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:

 

background image

 
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