VoiceXML – Voice eXtensible Markup Language
VoiceXML je W3C štandard navrhnutý na vytváranie audio dialógov, ktoré podporujú syntetizovanú reč, digitalizované audio, rozpoznanie hovoreného a DTMF vstupu, nahrávanie hovoreného vstupu a telefóniu. Umožňuje analogický vývoj hlasových aplikácií ako HTML pre vizuálne aplikácie.
Tak ako sú HTML dokumenty interpretované vizuálnym web prehliadačom, tak sú VoiceXML dokumenty interpretované hlasovým prehliadačom. Bežná architektúra je rozmiestniť skupiny hlasových prehliadačov pripojených k PSTN tak aby užívatelia mohli pomocou telefónu interagovať s hlasovými aplikáciami.
VoiceXML používa značky, ktoré inštruujú hlasový prehliadač aby poskytol syntézu reči, automatické rozpoznávanie reči, správu dialógov a prehrávanie audio signálu.
Dva hlavné smery použitia VoiceXML:
- Spôsob ako poskytnúť hlasové služby webovým stránkam.
- Otvorená architektúra pre budovanie interaktívnych, hlasových, telefónnych služieb novej generácie.
Výsledkom nasledujúceho príkladu sú slová Hello world v syntetizovanej reči:
<vxmlversion="2.0"xmlns="http://www.w3.org/2001/vxml"> <form> <block> <prompt> Hello world! </prompt> </block> </form> </vxml>
Hello World príklad vo VoiceXML
Elementom najvyššej úrovne je <vxml>, čo je hlavný kontajner pre dialógy. Existujú 2 typy dialógov: form a menu. Form slúžia na prezentáciu informácií a pre zhromažďovanie vstupu, menu ponúkajú voľby, čo urobiť ďalej.
<?xml version="1.0" encoding="UTF-8"?> <vxml xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml > http://www.w3.org/TR/voicexml20/vxml.xsd" version="2.0"> <form> <field name="drink"> <prompt>Dáte si kávu, čaj, mlieko alebo nič?</prompt> <grammar src="drink.grxml" type="application/srgs+xml"/> </field> <block> <submit next="http://www.drink.example.com/drink2.asp"/> </block> </form> </vxml>
Odoslanie skriptu užívateľovho výberu nápoja na server
Na vstup sa využíva pole field. Užívateľ musí poskytnúť hodnotu do poľa field pred tým než sa bude pokračovať na ďalší element.
Príklad interakcie:
P(počítač): Dáte si kávu, čaj, mlieko alebo nič?
U(užívateľ): Pomarančový džús.
P: Nerozumiem čo ste povedali. (defaultná správa závislá od konkrétnej platformy)
P: Dáte si kávu, čaj, mlieko alebo nič?
U: Čaj.
P: (pokračuje v dokumente drink2.asp)
Architektúra:
VoiceXML aplikácia pozostáva z viacerých komponentov:
- Aplikačný server – typicky Web server, ktorý obsluhuje logiku aplikácie a môže obsahovať databázu alebo rozhrania k externej databáze alebo transakčnému serveru.
- VoiceXML telefónny server – platforma, na ktorej beží VoiceXML interpretátor, ktorý vystupuje ako klient pre aplikačný server. Interpretátor rozumie VoiceXML dialógom, kontroluje rečové a telefónne zdroje. Tie zahŕňajú ASR, TTS, prehrávanie a nahrávanie audio signálu ako aj rozhranie pre telefónnu sieť.
- Sieť štýlu Internetu – TCP/IP paketová sieť, ktorá spája aplikačný server s telefónnym serverom prostredníctvom HTTP.
- Telefónna sieť – typicky PSTN, ale môže to byť aj privátna telefónna sieť (ako PBX), alebo VoIP paketová sieť. Volajúcim zariadením je akýkoľvek telefón schopný sa pripojiť k telefónnej sieti.
Komponenty VoiceXML aplikácie
Vzťah medzi tradičnou webovou aplikáciou a webovou aplikáciou z využitím hlasových služieb:
Koncepty
VoiceXML dokument (alebo množina dokumentov nazývaná aplikácia) tvorí konverzačný stroj konečných stavov. Používateľ je v určitom čase vždy iba v jednom konverzačnom stave alebo dialógu. Každý dialóg určuje nasledujúci dialóg na ktorý sa má prejsť. Prechody (transitions) sú určené použitím URI, ktoré definujú nasledujúci dokument a dialóg. Ak URI neodkazuje na dokument, predpokladá sa aktuálny, ak nie je špecifikovaný dialóg prejde sa na prvý. Vykonávanie sa ukončí pokiaľ dialóg neukazuje na žiadneho nasledovníka, alebo ak obsahuje element ktorý explicitne ukončuje konverzáciu.
Dialógy a poddialógy (dialogs, subdialogs)
Sú 2 typy dialógov – formuláre (forms) a menu (menus). Formuláre definujú interakciu, ktorá zbiera hodnoty pre premenné členov formulára. Každé pole (field) môže špecifikovať gramatiku, ktorá definuje povolené vstupy pre dané pole. Gramatika formulárovej úrovne (form-level) môže byť použitá na naplnenie viacerých polí naraz. Menu poskytuje používateľovi možnosti voľby, na základe jeho voľby potom prejde na daný dialóg.
Poddialóg je ako volanie funkcie v tom zmysle že môže vyvolať novú interakciu a vrátiť sa späť k pôvodnému formuláru. Inštancie premenných, gramatiky, a stavové informácie sú uložené a dostupné po návrate do volajúceho dokumentu. Poddialógy sa môžu použiť na vytvorenie potvrdzujúcej sekvencie, ktorá môže potrebovať databázový dotaz, na vytvorenie dokumentmi zdieľaných komponentov v jednej aplikácii alebo na vytvorenie znovu použiteľnej knižnice dialógov zdieľanej medzi viacerými aplikáciami.
Relácie (sessions)
Relácia začína interakciou medzi používateľom a kontextom VoiceXML interpretátora, pokračuje načítaním a spracovaním dokumentov a končí ak je to vyžiadané používateľom, dokumentom alebo kontextom.
Aplikácie (Applications)
Aplikácia je skupina dokumentov, zdieľajúca spoločný aplikačný koreňový dokument. Koreňový dokument je načítaný vždy pri každej interakcii používateľa s aplikáciou a uvoľní sa ak sa prejde na dokument patriaci inej aplikácii. Premenné koreňového dokumentu sú prístupné všetkým dokumentom aplikácie a jeho gramatiky sú aktívne počas celého trvania aplikácie.
Prechádzanie medzi dokumentmi v aplikácii
Gramatiky (grammars)
Každý dialóg je spojený s jednou alebo viac rečovými alebo DTMF gramatikami. V strojovo zameraných aplikáciách, je každá gramatika dialógu aktívna iba ak je používateľ v danom dialógu. V aplikáciách so zmiešanou iniciatívou, kde sa používateľ a stroj striedajú v určovaní čo sa má stať ďalej, niektoré dialógy sú označené aby ich gramatiky ostali aktívne aj keď je používateľ v inom dialógu rovnakého dokumentu alebo v inom dokumente rovnakej aplikácie. Čo prináša flexibilitu do hlasových aplikácií.
Udalosti (events)
VoiceXML poskytuje mechanizmus na vypĺňanie formulárov, ktorý zvláda normálny používateľský vstup. Na viac definuje mechanizmus na spracovanie udalostí, ktoré nie sú pokryté mechanizmom formulára.
Udalosti môžu byť vyvolané platformou a interpretátorom za rôznych podmienok. Sú zachytávané záchytnými elementmi alebo ich syntaktickými skratkami. Každý element, v ktorom môže vzniknúť udalosť môže špecifikovať záchytné elementy. Na viac sa dedia od zapuzdrujúcich elementov vyššej vrstvy.
Linky (links)
Linka podporuje zmiešanú iniciatívu. Špecifikuje aktívnu gramatiku kedykoľvek je používateľ v dosahu linky. Ak používateľov vstup súhlasí z gramatikou linky, kontrola sa presunie do cieľovej URI linky. Linka môže byť použitá na vyvolanie udalosti alebo na prechod do cieľovej URI.
Elementy VoiceXML
Element
|
Účel
|
<assign>
|
Pridelí hodnotu premennej
|
<audio>
|
Prehrá audio klip
|
<block>
|
Kontajner (neinteraktívneho) spustiteľného kódu
|
<catch>
|
Zachytí udalosť
|
<choice>
|
Definuje položku menu
|
<clear>
|
Vymaže jednu alebo viac premenných formulára
|
<disconnect>
|
Zruší spojenie
|
<else>
|
Použité v <if> elementoch
|
<elseif>
|
Použité v <if> elementoch
|
<enumerate>
|
Skratka pre vymenovanie volieb v menu
|
<error>
|
Zachytí chybovú udalosť
|
<exit>
|
Opustí spojenie
|
<field>
|
Deklarácia vstupného poľa vo formulári
|
<filled>
|
Akcia, ktorá sa vykoná po naplnení poľa
|
<form>
|
Dialóg na prezentáciu informácií a zber dát
|
<goto>
|
Prechod na iný dialóg v rovnakom alebo inom dokumente
|
<grammar>
|
Špecifikuje gramatiku rozpoznávania reči alebo DTMF
|
<help>
|
Zachytí help udalosť
|
<if>
|
Jednoduchá podmienečná logika
|
<initial>
|
Deklaruje počiatočnú logiku po vstupe do formulára (so zmiešanou iniciatívou)
|
<link>
|
Špecifikuje spoločný prechod pre všetky dialógy z dosahu linky
|
<log>
|
Generuje debug správu
|
<menu>
|
Dialóg na výber z rôznych cieľov
|
<meta>
|
Definuje metadata položku ako pár názov/hodnota
|
<metadata>
|
Definuje metadata informácie použitím metadata schémy
|
<noinput>
|
Zachytí noinput udalosť
|
<nomatch>
|
Zachytí nomatch udalosť
|
<object>
|
Ovplyvňuje vlastné rozšírenie
|
<option>
|
Špecifikuje možnosť vo <field>
|
<param>
|
Parameter v <object> alebo <subdialog>
|
<prompt>
|
Posiela syntézu reči alebo audio výstup používateľovi
|
<property>
|
Kontroluje nastavenia implementačnej platformi
|
<record>
|
Nahrá audio vzorku
|
<reprompt>
|
Prehrá výzvu poľa ak je zmenené pri udalosti
|
<return>
|
Návrat z poddialógu
|
<script>
|
Špecifikuje blok ECMAScript skriptovacej logiky na strane klienta
|
<subdialog>
|
Vyvolá iný dialóg ako poddialóg aktuálneho
|
<submit>
|
Pošle hodnoty dokumentovému serveru
|
<throw>
|
Vyvolá udalosť
|
<transfer>
|
Presunie volajúceho na iný cieľ
|
<value>
|
Vloží hodnotu výrazu do výzvy (prompt)
|
<var>
|
Deklaruje premennú
|
<vxml>
|
Element najvyššej úrovne v každom dokumente VoiceXML
|
Štruktúra dokumentu a vykonávanie
VoiceXML dokument je hlavne tvorený elementmi najvyššej úrovne nazývanými dialógy. Sú 2 typy dialógov – formuláre, menu. Dokument môže tiež obsahovať <meta> a <metadata>, <var> a <script>, <property>, <catch> a <link> elementy.
Vykonávanie z jedného dokumentu
Vykonávanie začína defaultne prvým dialógom. Každý dialóg počas svojho vykonávania určí nasledujúci dialóg, ktorý sa má vykonať. Ak tak neurobí vykonávanie sa ukončí.
V nasledujúcom príklade máme premennú „hi“ dokumentovej úrovne, ktorá obsahuje uvítanie. Jej hodnota je použitá v prvom formulári ako výzva (prompt). Ako náhle ju prehrá, presunie sa na formulár nazvaný „say_goodbye“, ktorý prehrá používateľovi „Goodbye!“. Keďže sa druhý formulár nepresúva na ďalší dialóg, dokument sa ukončí.
<vxml xmlns="http://www.w3.org/2001/vxml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/vxml
http://www.w3.org/TR/voicexml20/vxml.xsd"
version="2.0">
<meta name="author" content="John Doe"/>
<meta name="maintainer" content="hello-support@hi.example.com"/>
<var name="hi" expr="'Hello World!'"/>
<form>
<block>
<value expr="hi"/>
<goto next="#say_goodbye"/>
</block>
</form>
<form id="say_goodbye">
<block>
Goodbye!
</block>
</form>
</vxml>
Príklad Hello World s dvoma formulármi
Implementácie
OpenVXI– prenositeľný open – source VoiceXML interpretátor vyvinutý firmou
SpeechWorks. Môže byť použitý zadarmo v komerčných aplikáciách a umožňuje
modifikovanie. Tesne sa riadi VoiceXML 2.0 špecifikáciou.
JVoiceXML – je open – source interpretátor pre Javu podporujúci Java API ako JSAPI
a JTAPI. Implementuje VoiceXML 2.0 je platformovo nezávislý a zadarmo.
Vocalocity – implementuje poslednú špecifikáciu VoiceXML 2.0. Vocalocity softvér je
navrhnutý špecificky pre OEM a Channel Partners, ktorí poskytujú unikátne
otvorené riešenia pre svojich zákazníkov. Podporuje viacero telefónií, ASR a TTS prostriedkov rovnako ako aj viacero operačných systémov.
Phonologies InterpreXer Server – je abstraktnou implementáciou VoiceXML 2.1
špecifikácie, môže byť integrovaný s akoukoľvek platformou telefónie, alebo
komunikačným riešením, ktoré zamýšľajú použitie VoiceXML funkcionality.
Podporuje rozoznávanie reči (použitím MRCPv2 based speech recognition
prostriedku) alebo „touch tone“ DTMF cez syntetizovanú reč (použitím MRCPv2
text–to-speech prostriedku) alebo prehrávaním nahraného audia. Je najvhodnejší
pre vysoko škálovateľné OEM implementácie.
PublicVoiceXML – je open source implementácia kompletného VoiceXML 2.0
prehliadača. Je navrhnutý pre lacný telefonický hardvér, využívajúci DTMF
navigáciu s pripojením na text to speech a speech recognition moduly od tretích
strán. Príklady a podpora sú dostupné aj pre mobilný svet.
Príbuzné štandardy:
W3C Speech Interface Framework definuje ďalšie štandardy úzko spojené s VoiceXML:
SRGS a SISR
Speech Recognition Grammar Specification hovorí rozpoznávaču reči aké vetné vzory by mal očakávať. Tieto vetné vzory sa nazývajú gramatiky (grammars). Potom ako rozpoznávač reči určí najpravdepodobnejšiu vetu akú počul, potrebuje z tejto vety získať jej sémantický význam, ktorý potom vráti VoiceXML interpretátorovi. Táto sémantická interpretácia je špecifikovaná v štandarde Semantic Interpretation for Speech Recognition.
SISR je použitý vo vnútri SRGS na špecifikáciu sémantických výsledkov spojených s gramatikami (ECMAScript prevody, ktoré vytvárajú sémantickú štruktúru vrátenú rozpoznávačom reči).
SSML
Speech Synthesis Markup Language dopĺňa textové výzvy informáciami ako ich najlepšie vyrenderovať v syntetickej reči (aký hlas rečového syntetizátora zvoliť, kedy hovoriť hlasnejšie a kedy tichšie).
PLS
Pronunciation Lexicon Specification definuje ako sú slová vyslovované. Vygenerované informácie o vyslovovaní sú používané rozpoznávačmi reči ako aj rečovými syntetizátormi.
CCXML
Call Control eXtensible Markup Language je doplnkový W3C štandard. CCXML interpretátor je používaný niektorými VoiceXML platformami na správu počiatočných nastavení hovoru medzi volajúcim a hlasovým prehliadačom (voice browser) a na poskytnutie telefonických služieb ako prenos hovoru a jeho odpojenie pre hlasový prehliadač. Môže byť použitý aj v platformách na kontrolu hovorov, ktoré nemajú vzťah s VoiceXML. Umožňuje vývojárom vytvárať telefónne aplikácie využívajúce rozšírené smerovanie hovorov, konferencie pre viac účastníkov, inteligentnú analýzu priebehu hovoru, centrum hovorov / CTI (Computer Telephony Integration) a viac.
CCXML pozostáva z dvoch rozdielnych komponentov:
- Stavového automatu a prostredia reagujúceho na udalosti.
- Sady primitív na kontrolu hovoru a udalostí nezávislých od protokolu.
Tiež obsahuje rozšíriteľný model procesora I/O udalostí, ktorý umožňuje ľahkú integráciu s externými systémami ako platforiem CTI centra hovoru, asynchrónnych zdrojov udalostí, záložných databáz a platforiem podnikových správ.
Na obrázku je vidieť spôsob použitia CCXML platformy vo VoiceXML a SIP prostredí. V tomto prípade CCXML využíva kontrolu hovorov založenú na SIPe smerom k volajúcim ako aj k sieťovým zdrojom ako VoiceXML serveru a konferenčnému serveru. Všetka kontrola hovorov a ich smerovanie je riešené CCXML platformou, ktorá je riadená CCXML dokumentmi z jedného, alebo viacerých webových serverov a vstupom z rôznych procesorov I/O udalostí.
MSML, MSCML, MediaCTRL
Pri niektorých aplikáciách je niekedy nevyhnutná vzájomná interakcia niekoľkých vetiev hovoru napr. pri konferencii viacerých účastníkov. VoiceXML má určité nedostatky v tomto smere, preto niektoré firmy navrhli špecifické skriptovacie jazyky aby sa s tým vysporiadali. Media Server Markup Language od Convedia, Media Server Control Markup Language od Snowshore. Tieto jazyky obsahujú háky (hooks), na to aby externé skripty (ako VoiceXML) mohli bežať vo vetvách hovoru, kde je potrebná IVR funkcionalita.
Existuje pracovná skupina IETF pod názvom MediaCTRL (media control), ktorá pracuje na nasledovníkovi týchto skriptovacích jazykov, o ktorom sa predpokladá že sa vyvinie do otvoreného a široko adoptovaného štandardu.
Ďalšie skriptovacie jazyky
MSPL – Microsoft SIP processing language
MSPL je skriptovací jazyk používaný na filtrovanie a smerovanie SIP správ. Známe ako „message filters“, sú tieto skripty vstavané v aplikačných manifestoch Office Communications Server aplikácií. MSPL nepodporuje aritmetiku, deklaráciu typov alebo cykly mimo foreach.
SCML – Service Creation Markup Language
SCML je novou generáciou značkovacích jazykov pre skriptovanie aplikácií alebo servisov v NGN (Next Generation Network).
SCML Server závisí od funkcionality poskytovanej capability servermi pod ktorými beží. Pomocou SCML skriptov SCML server odoberá udalosti vyvolané capability servermi a spracúva ich. Spracovanie obvykle končí návratom odpovede.
Capability server – vo všeobecnosti sú to koncové body, koncové systémy (ako telefóny alebo PC) siete NGN. Koncové systémy môžu poskytovať lokalizačné informácie, byť pôvodcami hovorov príp. akceptovať, odmietnuť alebo poslať ďalej prichádzajúce hovory. Call servre, ktoré sú špecializáciou capability servrov môžu byť v následujúcich módoch:
- Proxy mód – posiela hovor ďalej na iný capability server alebo koncové zariadenie, následne určí čo urobiť s prípadnou odpoveďou.
- Redirect mód – informuje sieť o alternatívnej adrese pre prichádzajúci hovor.
- Reject mód – informuje vysielajúci systém, že požiadavka nemôže byť vykonaná.
- 3rd party controller mód – vytvorý nový koordinovaný hovor pozvaním 2 alebo viacerých koncových systémov.
SCML server – poskytuje prostredie v ktorom môžu byť SCML skripty umiestnené a aktivované. SCML skript sa riadi jednou alebo viacerými SCML schémami a popisuje službu.
CPL – Call Processing Language
CPL je jazyk, ktorý popisuje a kontroluje služby Internetovej telefónie. Nie je zviazaný so žiadnou určitou signalizačnou architektúrou alebo protokolom: predpokladá sa jeho použitie so SIP (Session Initiation Protocol) aj s H.223.
CPL dokáže opísať veľké množstvo služieb a funkcií, ale je natoľko limitovaný aby mohol bezpečne bežať na serveroch Internetovej telefónie. Užívatelia nemajú možnosť urobiť niečo komplexnejšie (nebezpečnejšie) ako popísať služby Internetovej telefónie, nie je možné tvoriť cykly alebo rekurziu.
Je založený na XML (Extensible Markup Language), preto je jednoduché ho parsovať a existuje preňho veľa verejne dostupných parserov.
Príklady CPL skriptov:
Príklad č. 1:
Jednoduchý skript na presmerovanie všetkých prichádzajúcich hovorov na jedinú, zadanú adresu.
<cpl>
<incoming>
<location url="sip:palo@example.com">
<redirect/>
</location>
</incoming>
</cpl>
Príklad č. 2:
Skript slúžiaci na blokovanie hovorov od neznámych účastníkov.
<cpl>
<incoming>
<address-switch field="origin" subfield="user">
<address is="anonymous">
<reject status="reject" reason="I reject anonymous calls"/>
</address>
</address-switch>
</incoming>
</cpl>
Príklad č. 3:
Ak má prichádzajúci hovor prioritu rovnú, alebo väčšiu ako „urgent“ prijme ho. Inak sa overuje jazyk pokiaľ je slovenský („sk“) predá ho slovenskému operátorovi, v ostatných prípadoch ho predá anglickému.
<cpl>
<incoming>
<priority-switch>
<priority greater="urgent"/>
<otherwise>
<language-switch>
<language matches="sk">
<location url="sip:slovak@operator.example.com">
<proxy/>
</location>
</language>
<otherwise>
<location url="sip:english@operator.example.com">
<proxy/>
</location>
</otherwise>
</language-switch>
</otherwise>
</priority-switch>
</incoming>
</cpl>
Príklad č. 4:
Prichádzajúce hovory medzi pondelkom a piatkom v čase od 9:00 do 17:00 sú predávané normálne. Avšak ak príde hovor mimo tohto času je presmerovaný na voicemail službu používateľa.
<cpl>
<time-switch>
<time dtstart=9 dtend=5 wkst=MO|TU|WE|TH|FR>
<lookup source=registration>
<success>
<proxy />
</success>
</lookup>
</time>
<otherwise>
<location url=sip:primo@voicemail.server.com>
<proxy />
</location>
</otherwise>
</time-switch>
</cpl>
Zdroje:
http://cidr-report.org/ietf/idref/draft-bakker-jain-scml/