background image

WOJSKOWA AKADEMIA TECHNICZNA 

im. Jarosława Dąbrowskiego 

 
 
 
 

 

 

 
 
 

SYSTEMY DIALOGOWE 

SPRAWOZDANIE Z ĆWICZENIA nr 5 

 

Temat: 

Portal głosowy.  

Zasady języka VXML – prosta aplikacja głosowa. 

 

 

 
 

 

Wykonał: plut. pchor. Radosław WOŹNIAK  

Grupa: I9G1S1 

 
 

 
 

 

background image

 

1. 

TREŚĆ ZADANIA 

 

1. 

Sporządzić schemat strukturalny (elementy i powiązania - rysunek) 
oraz o

pisać działanie portalu głosowego. 

2. 

Zaprojektować prostą aplikację głosową (temat aplikacji wybiera 
student): 

a)  identyfikacja aplikacji (

przykładowe dialogi); 

b)  opracowanie modelu (scenariusza) dialogu w postaci 

schematu blokowego; 

c) 

opis dostępu użytkownika do aplikacji. 

2.  Utworzenie aplikacji w postaci dokumentu VXML: 

a) 

opatrzyć komentarzem wszystkie jej znaczniki. 

b)  testowanie (iteracyjne) w celu udoskonalenia interfejsu. 

 
Zadania szcze

gółowe dotyczące projektowania aplikacji głosowych: 

1) 

określenie wiadomości podpowiadanych w celu wydobycie 
informacji od użytkownika; 

2) 

sformułowanie gramatyki opisującej słowa i frazy, które rozmówca 
może wypowiedzieć w odpowiedzi na podpowiedź (prompt); 

3) 

opisanie sposobu radzenia sobie w przypadku wystąpienia błędów 
(ang. error handler), aby pomóc rozmówcy rozwiązać problemy, 
które pojawią się, gdy urządzenie rozpoznawania mowy nie 
rozpozna jego wypowiedzi. 

 
Przykładowe tematy aplikacji głosowych: 

 

składanie i obsługa zamówień 

  zawiadomienie o wypadkach 

  budzenie telefoniczne 

 

śledzenie lotów 

 

głosowy dostęp do poczty głosowej 

 

wybieranie głosowe połączenia telefonicznego 

  gaze

ty audio (podawanie wiadomości) 

  opowiadanie bajek 

 

wypełnianie formularza 

  przelicznik waluty 

 

… 

 
 
 
 
 
 

background image

2.  WYNIKI 

 
Zad.1. 
 

Portal  głosowy  jest  to  system,  który  pozwala  użytkownikom  na  dostęp  do 

informacji  znajdujących  się  w  sieci  Internet  poprzez  telefon.  Używa  do  tego 

technologii  rozpoznawania  mowy  oraz  tzw.  „text  to  speech"  (TTS)  w  celu 

dostosowania  interfejsu  użytkownika  do  możliwości  nawigacji  po  stronach  portalu 

głosowego  przez  telefon  używając  komend  głosowych.  Ideą  portali  głosowych  jest 

więc  umożliwienie  użytkownikom  dostępu  do  zasobów  internetowych  poprzez 

telefon. 

 

 

Rys.1. Schemat strukturalny portalu głosowego (rysunek zapożyczony ze strony 

studio.tellme.com). 

 

Platforma głosowa jest tutaj widoczna jako brama łącząca sieć telefoniczną z 

Internetem. Rozwijanie portalu głosowego w oparciu o język VXML jest analogiczne i 

zgodne  z  technikami  wytwarzania  tradycyjnych  serwisów  opartych  o  język  HTML. 

Warto  jednak  zauważyć,  że  obsługa  klienta za  pomocą  portalu  głosowego  narzuca 

zupełnie  inne  podejście  do  interfejsu  użytkownika,  zmieniają  się  wymagania 

narzucone 

na 

interfejs  oraz  problemy  z  jakimi  styka  się  projektant.  

  

Przeglądarka głosowa jako kluczowy komponent omawianej architektury różni 

się w sposób znaczący od serwisów opartych o platformę IVR. Przeglądarka głosowa 

przechwytuje  dialog  między  użytkownikiem,  a  następnie  pobiera  konkretne  dane  z 

repozytorium  serwisu.  Serwerem  aplikacji  może  być  dowolny  serwer  tego  typu. 

Rodzaj bazy danych również zależy od preferencji osoby projektującej serwis. 

 

background image

ZAD.2 i 3. 

 

W  celu  realizacji  zadania  zaprojektować  prostą  aplikację  głosową 

odpowiedzialną  za  składanie  i  obsługę  zamówień  w  pizzerii.  Jest  to  uproszczona 

aplikacja,  klient  ma  do  wyboru  5  z  góry  ustalonych  rodzajów  pizz,  4  ustalone 

rozmiary. W celu dalszego kontaktu i oddzwonienia klient jest proszony o podanie lub 

wpisanie  swojego  numeru  telefonu.  W  trakcie  rozmowy,  jeśli  komunikator  nie 

zrozumie lun nie usłyszy pytania, informuje o tym fakcie i ponawia swoje zapytanie. 

Klient ma na końcu możliwość odsłuchania swojego zamówienia i potwierdzenia go 

oraz  jeśli  chce  może  zamówić  kolejną  pizze.  Zadanie  zrealizowałem  w  języku 

angielskim. 

 

Przykładowe dialogi: 

 

Podkreślenie – to pytania aplikacji. 

o  Kursywa 

– to odpowiedź potencjalnego klienta. 

 

Dialog nr.1 - bezproblemowy 

  Welcome to the Hot Pizza Service! What kind of pizza would you like to order? 

We have peperoni, margerita, havana, winter and hothothot! 

o  peperoni 

  Do you want a small, medium, large or a XXL pizza? 

o  Small 

  Please say or enter your phone number. 

o  123 123 123 

  Do  you  want  to  have  a  Small  pizza  peperoni?  And  you  number  is 

123 123 123? 

o  Yes 

  Your pizza will be delivered in 30 minutes.Thanks for your order. Do you want 

to order more pizza? 

o  No 

  Thanks for your calling! 

 

 
 

background image

Dialog  nr.2 

–  z  drobnymi  pomyłkami  klienta,  takimi  jak  nie  odpowiednie  słowa  lub 

milczenie 

  Welcome to the Hot Pizza Service! What kind of pizza would you like to order? 

We have peperoni, margerita, havana, winter and hothothot! 

o  I do not know? 

  I did not recognize that pizza. Please try again. What kind of pizza would you 

like to order? We have peperoni, margerita, havana, winter and hothothot! 

o  winter 

  Do you want a small, medium, large or a XXL pizza? 

(…silence…) 

  I did not hear anything.  Please try again. Do you want a small, medium, large 

or a XXL pizza? 

o  Small 

  Please say or enter your phone number. 

o  I do not remember! 

  Incorect  phone  number.  Please  try  again.  Please  say  or  enter  your  phone 

number. 

o  123 123 123 

  Do you want to have a Small pizza winter? And you number is 123 123 123? 

o  Yes 

  Your pizza will be delivered in 30 minutes.Thanks for your order. Do you want 

to order more pizza? 

o  No 

  Thanks for your calling! 

 
Dialog nr.3 

– klient rozmyśla się co do swojego wyboru i wybiera inną pizze. 

  Welcome to the Hot Pizza Service! What kind of pizza would you like to order? 

We have peperoni, margerita, havana, winter and hothothot! 

o  peperoni 

  Do you want a small, medium, large or a XXL pizza? 

o  Small 

  Please say or enter your phone number. 

o  123 123 123 

background image

  Do  you  want  to  have  a  Small  pizza  peperoni?  And  you  number  is 

123 123 123? 

o  No 

  Your order has been cancelled. Do you want to order more pizza? 

o  Yes 

  Welcome to the Hot Pizza Service! What kind of pizza would you like to order? 

We have peperoni, margerita, havana, winter and hothothot! 

o  peperoni 

  Do you want a small, medium, large or a XXL pizza? 

o  Small 

  Please say or enter your phone number. 

o  123 123 123 

  Do  you  want  to  have  a  Small  pizza  peperoni?  And  you  number  is 

123 123 123? 

o  Yes 

  Your pizza will be delivered in 30 minutes.Thanks for your order. Do you want 

to order more pizza? 

o  No 

  Thanks for your calling! 

 
 

Przykładowe dialogi odzwierciedlają tylko kilka przypadków komunikacji pomiędzy 

klientem  a  aplikacją.  Na  podstawie  schematu  (rys.2.)  można  stworzyć  znacznie 
więcej dialogów. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

background image

 
 

 

Rys.2. Model dialogu w postaci schematu blokowego. 

 
 

Schemat blokowy odzwierciedla m.in. przykładowe dialogi zaprezentowane 

wcześniej, a także na jego podstawie zaimplementowałem aplikacje w vxml. 

 

 
 

background image

<?xml version="1.0" encoding="UTF-8"?> <!-- zgodnosc wezsji xml i kodowanie znakow --> 
<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xml:lang="en-US"> <!-- zgodnosc wersji vxml oraz jezyk --> 
    <form id="powitanie"> <!-- formatka, w programie wykorzystalem tylko jeden formularz--> 
 

<property name="bargein" value="false"/> <!-- aplikacja nie przerwie swojej wypowiedzi,  na skutek pytania klienta --


 

<block>  <!--tag block nie wymaga interakcji z klientem --> 

        <prompt bargein="false"> <!-- 

interpreter odczyta tekst i prześle go do użytkownika--> 

                Welcome to the Hot Pizza Service! 
        </prompt> 
 

</block> 

        <field name="rodzaj">  <!-- ten tag powoduje przyjmowanie info od klienta--> 
            <prompt> <!-- 

interpreter odczyta tekst i prześle go do użytkownika--> 

                What kind of pizza would you like to order? We have peperoni, margerita, havana, winter and hothothot!  
            </prompt> 
 

 

 

<grammar mode="voice" root="rodzajepizzy"> <!-- 

definiuje odpowiedzi, które interpreter 

przyjmie dla tego pola.--> 
 

 

 

 

<rule id="rodzajepizzy" scope="public"> 

 

 

 

 

 

<one-of> <!-- wybor jednej opcji-itema ponizej--> 

 

 

 

 

 

 

<item>peperoni</item> 

 

 

 

 

 

 

<item>margerita</item> 

 

 

 

 

 

 

<item>havana</item> 

 

 

 

 

 

 

<item>winter</item> 

 

 

 

 

 

 

<item>hothothot</item> 

 

 

 

 

 

</one-of> 

 

 

 

 

</rule> 

 

 

 

</grammar> 

 

 

 

<nomatch> <!-- gdy nie rozpozna syg wej--> 

 

 

 

 

I did not recognize that pizza. Please try again. 

 

 

 

<reprompt/> <!--

spowoduje powtórzenie prompta --> 

 

 

 

</nomatch> 

            <noinput>  <!-- 

gdy nei odbierze żadnego syg wej --> 

 

 

 

 

I did not hear anything.  Please try again. 

 

 

 

<reprompt/>  <!--

spowoduje powtórzenie prompta --> 

 

 

 

</noinput> 

        </field> 
 
 

 

<field name="rozmiar"> 

            <prompt> <!-- 

interpreter odczyta tekst i prześle go do użytkownika--> 

                Do you want a small, medium, large or a XXL pizza? 
            </prompt> 
 

 

 

<grammar mode="voice" root="rozmiarpizzy">  <!-- 

definiuje odpowiedzi, które interpreter 

przyjmie dla tego pola.--> 
 

 

 

 

<rule id="rozmiarpizzy" scope="public"> 

 

 

 

 

 

<one-of> 

 

 

 

 

 

 

<item>small</item> 

 

 

 

 

 

 

<item>medium</item> 

 

 

 

 

 

 

<item>large</item> 

 

 

 

 

 

 

<item>XXL</item> 

 

 

 

 

 

</one-of> 

 

 

 

 

</rule> 

 

 

 

</grammar> 

 

 

 

<nomatch> 

 

 

 

 

I did not recognize your answer. Please try again. 

 

 

 

<reprompt/>  <!--

spowoduje powtórzenie prompta --> 

 

 

 

</nomatch> 

            <noinput> 
 

 

 

 

I did not hear anything.  Please try again. 

 

 

 

<reprompt/>  <!--

spowoduje powtórzenie prompta --> 

 

 

 

</noinput> 

        </field> 
 

 

 

 

 

<field name="telefon" type="phone"> 

 

 

 

<prompt> <!-- 

interpreter odczyta tekst i prześle go do użytkownika--> 

 

 

 

 

Please say or enter your phone number. 

 

 

 

</prompt> 

 

 

 

<nomatch> 

 

 

 

 

Incorect phone number. Please try again. 

 

 

 

 

 

 

 

<reprompt/>  <!--

spowoduje powtórzenie prompta --> 

 

 

 

</nomatch> 

 

 

 

<noinput> 

 

 

 

 

I did not hear anything. Please try again. 

 

 

 

<reprompt/>  <!--

spowoduje powtórzenie prompta --> 

 

 

 

</noinput> 

 

 

</field> 

 
        <field name="potwierdzenie"> 

background image

            <prompt> <!-- 

interpreter odczyta tekst i prześle go do użytkownika--> 

                Do you want to have a <value expr="rozmiar"/> pizza <value expr="rodzaj"/>? 
 

 

 

 

And you number is <value expr="telefon"/>? 

            </prompt> 
 

 

 

<grammar mode="voice" root="potwierdz">  <!-- 

definiuje odpowiedzi, które interpreter przyjmie 

dla tego pola.--> 
 

 

 

 

<rule id="potwierdz" scope="public"> 

 

 

 

 

 

<one-of> 

 

 

 

 

 

 

<item>yes</item> 

 

 

 

 

 

 

<item>no</item> 

 

 

 

 

 

</one-of> 

 

 

 

 

</rule> 

 

 

 

</grammar> 

 

 

 

<nomatch> 

 

 

 

 

I did not recognize your answer. Please try again. 

 

 

 

<reprompt/>  <!--

spowoduje powtórzenie prompta --> 

 

 

 

</nomatch> 

            <noinput> 
 

 

 

 

I did not hear anything.  Please try again. 

 

 

 

<reprompt/>  <!--

spowoduje powtórzenie prompta --> 

 

 

 

</noinput> 

 

 

 

<filled> 

 

 

 

 

<if cond="potwierdzenie == 'yes'">  <!-- warunek if - jesli spelniony to wykonuje--> 

 

 

 

 

 

<prompt> <!-- 

interpreter odczyta tekst i prześle go do użytkownika--> 

 

 

 

 

 

 

Your pizza will be delivered in 30 minutes. 

 

 

 

 

 

 

Thanks for your order. 

 

 

 

 

 

</prompt> 

 

 

 

 

<else/>  <!--jesli if nie spelniony to to sie wykonuje --> 

 

 

 

 

 

<prompt> <!-- interpreter odczyta tek

st i prześle go do użytkownika--> 

 

 

 

 

 

   Your order has been cancelled. 

 

 

 

 

 

</prompt> 

 

 

 

 

</if> 

 

 

 

</filled> 

 

 

</field>   

 

 

 

<field name="jeszczeraz"> 

 

 

 

<prompt> <!-- 

interpreter odczyta tekst i prześle go do użytkownika--> 

                Do you want to order more pizza? 
            </prompt> 
 

 

 

<grammar mode="voice" root="jeszcze">  <!-- 

definiuje odpowiedzi, które interpreter przyjmie dla 

tego pola.--> 
 

 

 

 

<rule id="jeszcze" scope="public"> 

 

 

 

 

 

<one-of> 

 

 

 

 

 

 

<item>yes</item> 

 

 

 

 

 

 

<item>no</item> 

 

 

 

 

 

</one-of> 

 

 

 

 

</rule> 

 

 

 

</grammar> 

 

 

 

<nomatch> 

 

 

 

 

I did not recognize your answer. Please try again. 

 

 

 

<reprompt/>  <!--

spowoduje powtórzenie prompta --> 

 

 

 

</nomatch> 

            <noinput> 
 

 

 

 

I did not hear anything.  Please try again. 

 

 

 

<reprompt/>  <!--

spowoduje powtórzenie prompta --> 

 

 

 

</noinput> 

 

 

 

<filled> 

 

 

 

 

<if cond="jeszczeraz == 'yes'"> 

 

 

 

 

 

<clear/> 

 

 

 

 

 

<goto next="#powitanie"/>  <!-- przejscie do poczatku formularza z 

id=powitanie --> 
 

 

 

 

<else/> 

 

 

 

 

 

<prompt> <!-- interpreter odczyt

a tekst i prześle go do użytkownika--> 

 

 

 

 

 

   Thanks for your calling! 

 

 

 

 

 

</prompt> 

 

 

 

 

</if> 

 

 

 

</filled> 

 

 

</field> 

    </form>  <!--zakonczenie formularza --> 
</vxml>  <!-- zamkniecie kodu vxml -->

 

 

Rys.3. Listing kodu aplikacji głosowej w vxml. (jest dołączony do sprawozdania w 

pliku vxml z komentarzami i bez). 

 

background image

10 

 

Rys.4. Zrzut ekranu potwierdzający dodanie aplikacji do portalu VOXEO. 

 

 

Rys.5. Zrzut ekranu z danymi kontaktowymi do aplikacji. 

 
 
 
 

background image

11 

 

Rys.6. Zrzut ekranu potwierdzający nawiązanie połączenia z aplikacją głosową. 

 

W celu uruchomienia aplikacji głosowej zarejestrowałem i zalogowałem się na 

stronie: 

https://evolution.voxeo.com/

Wykorzystałem  zakładkę  ACCOUNT  -> 

Application  Manager

,  uzupełniłem  wymagane  pola  zgodnie  z  zaleceniami 

prowadzącego  i  utworzyłem  aplikację.  Dostęp  do  aplikacji  można  uzyskać  dzięki 

numerowi skype

, widoczny na zrzutach ekranów (rys.5 i 6). 

 

 

 

 

3. 

WNIOSKI i SPOSTRZEŻENIA. 

 

Zadanie  zostało  zrealizowane  w  całości,  udało  się  zaprojektować, 

zaimplementować  i  wykonać  aplikacje  głosową.  Zadanie  dotyczy  obsługi  klienta 

zamawiającego pizze. Jest to znacznie okrojona i uproszczona aplikacja. Klient ma 

do  wyboru  rodzaje  pizz  i  ich  rozmiary,  jeżeli  wykorzysta  inne  słowo  niż  podane, 

background image

12 

pyta

nie  zostanie  mu  przeczytane  jeszcze  raz.  Także  przy  podawaniu  numeru 

telefonu  jeśli  się  pomyli.  Przy  każdym  odczekiwaniu  na  odpowiedz  klienta,  w 

przypadku  jego  braku  zostanie  powtórzone  pytanie.  Klient  pod  konie  konwersacji 

odsłuchuje swojego zamówienia i ma możliwość jego potwierdzenia lub odrzucenia. 

Na koniec klient może zorzyc zamówienie na nowa pizze lub zakończyć rozmowę 

 

Pytania  zostały  skonstruowane  tak  aby  klient  miał  możliwość  usłyszenia 

możliwości odpowiedzi (oprócz pytań oczekujących tylko odp.  tak lub nie). Sytuacje 

kiedy  klient  odpowie  inaczej  niż  komunikator  tego  oczekuje,  usłyszy  ponownie 

pytanie. 

 

Aplikacje  głosowe  mogą  znacznie  ułatwić  i  przyspieszyć  zdobywanie 

informacji,  zamawianie  różnych  produktów  lub  usług  przez  interesantów.  Mogą 

zautomatyzować  i  zmniejszyć  koszty  ponoszone  przez  firmy  wykorzystujące 

telemarketing,  czy  call  centra.  Niestety  m

oże  to  wiązać  się  z  utratą  pracy  przez 

pewna liczbę osób.