Bersyong Orihinal: W3C Orihinal
Mayakda/Translator: Joseph Rinoza Plazo.

Ang original na texto ay kinupkop ng internasyonal na copyright. Pakituon ng pansin ang original na reperensya mula sa mga hyperlinks para sa mas malalim na pagkaunawa."This translated text may contain conversion errors. Please refer to the original document at WC3 for normative version."

Dave Raggett   Paano magsimula sa VoiceXML 2.0

Dave Raggett, iniayon noong ika-14 ng Nobyembre, 2001

Ito ay isang maikling introduksiyon sa VoiceXML. Ito ay nagsimula sa ilang slides na nakapaglakbay sa buong mundo ni Scott McGlashan ng HP. Si Scott ay nagco-Co-Chair sa W3C Working Group at namumuno sa VoiceXML Subgroup.

Mga Nilalaman

VoiceXML Introduksyon

telephone, voicexml interpreter and website

Ano ba ang VoiceXML? Aba, ito ay isang XML language para sa pagagagawa ng mga Web Pages na iyong ginagamit sa pamamagitan sa pakikinig ng mga sinasabing prompts at jingles, at iniaayos sa pamamagitan ng pagkakasabing input. Kung gusto mong malaman kung paano ito, mayroong mga dumaraming voice portals na puwede mong tawagan at subukan. Ilang mga site din ang nag-aalok ng free hosting para saVoiceXML. Ilang patuntunan para sa mga site na ito ay makikita sa FAQ na nasa overview.

Ang VoiceXML ay hindi HTML. Ang HTML ay ginawa para sa mga nakikitang Web pages at walang pagpigil sa user-application interaksiyon na kailangan para sa nasasabing interface. Sa pagsasalita isa lang ang maririnig mo kada isang bese (para bang nagbabasa ka ng diyaryo sa pamamagitan ng times 10 na magnifying glass). Ang VoiceXML at iningatang idisenyo para magamit ng mga may-akda nang buong kontrol sa sinasabing dialog sa gumagamit at sa aplikasyon. Ang aplikasyon at gumagamit ay nagsasalitan sa pagsasabi: ang aplikasyon ay tinatawag ang gumagamit, at ang gumagamit ay sumasagot.

Ang mga VoiceXML na dokumento ay nagsasabi ng:

Pinapadali ng VoiceXML ang mabilisang paggawa ng mga bagong aplikasyon at pinuprotektahan ang mga developer sa mga mababang lebel at detalye ng aplikasyon. Hinihiwalay nito ang user-interaction mula sa service logic. Ang spesipikasyon ng W3C VoiceXML 2.0 ang katuturang sanggunian sa VoiceXML. Puwede mo ring makita ang ibang kaparehong gawa sa W3Cs sa voice browser overview page.

Mga Susing Kaisipan

Nagisimula ang session pa gang gumagamit ay nagsimulang mag-interact sa Voice XML interpreter at tumutuloy habang ang Voice XML dokumento ay naglululan at inaalisan. Nagtatapos ang sesyon pag ini-request ng gumagamit, Voice XML dokumento o ng kontexto ng interpreter. Ang Platform ang nagbibigay ng katuturan sa default session behavior, pero puwede itong ma-overrdie din ng Voice XML

Ang mga Voice XML dokumento ay nagbibigay ng katuturan sa mga aplikasyon bilang isang set na mga pinangalanang dialog states. Ang gumagamit ay palaging nasa isang dialog state kahit kalian. Kada dialog ay isinasaad ang susunod na dialog sa transisyon sa URL.

Ang mga Voice XML dialog ay naglalaman ng: mga forms at menus. Ang menu ay nagprepresenta sa gumagamit mga pagpipiliang opsiyon at ang mga transisyon papunta sa ibang dialog state ay base sa seleksiyon ng gumagamit. Ang form ay nagsasabi ng interaksiyon na kumokolekta ng mga halaga para sa mga fields na nasa form. Ang isang field ay maaaring magsaad ng prompt, ang hinihining input, at mga alituntuin sa ebalwasyon. Ang form ay maaaring isumite sa server sa parehong paraan para sa HTML.

Ang application ay isang set ng mga Voice XML dokumento na nakikipaghati sa parehong aplikasyon ng ugat na dokumento. Ang ugat na dokumento ay nalo-load nang automatic pag ang isa sa mga aplikasyon ay na-load, at nananatiling naka-load hanggang magkarron ng transisyon sa ibang aplikasyon, o kung ang tawag ay maputol. Ang impormasyon sa ugat na dokumento ay makukuha sa lahat ng dokumento na pareho ang aplikasyon.

several VoiceXML documents can share the same application root document

Ang isang dialog state ay may isa o ilang grammars, o balarila na iniaayon dito, na ginagamit upang ilarawan ang inaasahang user input, na maaaring sinasabing input o sa mga touch-tone (DTMF) key press. Sa pinakamadaling kaso, ang mga dialog grammar lang ang alisto sa ganoong dialog. Sa ibang komplikadong kaso, ang ibang grammar ay maaari ding maging listo.

A Ang subdialog ay para namang function call: pinapahintulutan ka nitong sa bagong dialog at pagkatapos ay bumabalik sa orihinal na dialog, habang napananatili ang local na state information para sa nasabing dialog. Ang mga subdialgo ay maaaring magamit sa pagumpirmasyon at paggawa ng aklatan ng mga magagmit uling dialog para sa ibang gawaing kumon.

inheritance model for catching events
Ang Voice XML ay pinapahintulutan kang magbigay ng katuturan sa mga variables para sa pagkupkop ng data.

Ang mga Events naman ay nakikita pa gang gumagamit ay hindi nakaresponde sa prompt, o pag ang input ay hindi maintindihan. Ang Voice XML ay pinapayagan kang sumulat ng mga handler para mahuli ang mga event. Sumusunod ito pagkatapos ng isang inheritance model, at ang mga event ay maaaring mahuli sa mataas na lebel pag walang makatugon na handler sa lebel ng dialog.

Ang Voice XML ay puwedeng gamitan ng scripting (ECMA Script) pag kailangan mo ng adisyunal na control sa aplikasyon,. Ang Voice XML ay gumagmit ng form filling metaphor. Puwede mong ikatha ang isang complex grammar para sa pagkolekta ng mga halaga ng ilang field sa isang responde. Ang mga walang-laman na filed ay maaaring magamit sa pamamagitan ng espesyal na subdialog na naikonteksto sa tigi-tigisang dialog.

Mga Halimbawa sa Voice XML

Ito ay isang simpleng Voice XML na aplikasyon. Ito ay nagsasabi ng Welcome to Travel Planner! at nagpapatugtog ng maikling audio advertising jingle na lumalabas pagkatapos

<?xml version="1.0" encoding="ISO-8859-1"?>
<vxml version="2.0" lang="en">
<form>
<block>
<prompt bargein="false">Welcome to Travel Planner!
<audio src="http://www.adline.com/mobile?code=12s4"/>

</prompt>
</block>
</form>
</vxml>

Ang sumunod na ehemplo ay nagpapakita ng tatlong pagpipilian: sports, weather o news.

<?xml version="1.0"?>
<vxml version="2.0">
<menu>

  <prompt>
    Say one of: <enumerate/>
  </prompt>
  <choice next="http://www.sports.example/start.vxml">
     Sports
  </choice>

  <choice next="http://www.weather.example/intro.vxml">
     Weather
  </choice>
  <choice next="http://www.news.example/news.vxml">
     News
  </choice>
  <noinput>Please say one of <enumerate/></noinput>

</menu>
</vxml>

Ang dialog ay maaaring mangyari nang ganito:

Computer: Say one of: Sports; Weather; News.
Human: Astrology
Computer: I did not understand what you said.
(a platform-specific default message.)
Computer: Say one of: Sports; Weather; News.
Human: Sports
Computer: (proceeds to http://www.sports.example/start.vxml)

Ito pa ang isang ehemplo, na ngayon, gagamit ng form para itanong sa gumagamit na mamili ng city at number of travelers. Pag nakuha ang impormasyon, ito ay isinusumite sa web server:

<?xml version="1.0" encoding="ISO-8859-1"?>
<vxml version="2.0" lang="en">
<form>

<field name="city">

<prompt>Where do you want to travel to?</prompt>
<option>Edinburgh</option>
<option>New York</option>
<option>London</option>
<option>Paris</option>

<option>Stockholm</option>
</field>

<field name="travellers" type="number">
<prompt>How many are travelling to <value expr="city"/>?</prompt>
</field>

<block>
<submit next="http://localhost/handler" namelist="city travellers"/>
</block>

</form>
</vxml>

Pinapahintulutang ka ng Voice XML na magbigay ng mas progresibong detalyadong prompt pag ang gumagamit ay nahihirapang sumagot. Ito ay sa pamamagitan ng counter na nag-iincrement palagi kada gamit. Ang susunod na ehemplo ay nagpapakita ng field na nangongolekta ng ilang tao ang maglalakbay. Ang gumagamit ay unang tinatanong ng: How many are traveling to Boston? Pag walang nakuhang kaukulang sagot ang gumagamit ay tinatanong naman ng: Please, tell me the number of people traveling. Ang nomatch element ay pinapayagan kang magpaalala kung ang gumagamit ay sumagot nang maliban sa numero:

<field name="travellers" type="number">

<prompt count="1">
How many are travelling to <value expr="city"/>? 
</prompt>

<prompt count="2">
Please tell me the number of people travelling.
</prompt>

<prompt count="3">
To book a flight, you must tell me the number
of people travelling to <value expr="city"/>.
</prompt>

<nomatch>
<prompt>Please say just a number.</prompt>
<reprompt/>
</nomatch>       


</field>

Ang ehemplong ito ay nagche-check naman ng value ng field pagkatapos itong makolekta. Ginagamit ito para magsaad ng babala pa gang isinaad na number of travelers sa grupo lumagpas ng labingdalawa:

<field name="travellers" type="number">
<prompt>How many are travelling to <value expr="city"/>?</prompt>

<filled> 
<var name="num_travellers" expr="travellers + 0"/>

<if cond="num_travellers > 12"> 
       <prompt>
         Sorry, we only handle groups of up to 12 people.
       </prompt> 
<clear namelist="travellers"/>
</if> 
</filled> 

</field>

Pinapayagan ka rin ng Voice XML na magsaad ng subdialog na nagagamit sa mga pangkraniwang gawain. Ito naman ay ehemplo ng kumpirmasyon sa dialog na kung saan ang kumpirmasyon ay tinatanong na magpasya na tanggapin ang naunang input o hindi:

<form id="ynconfirm">
<var name="user_input"/>

<field name="yn" type="boolean">

<prompt>Did you say <value expr="user_input"/></prompt>

<filled>
<var name="result" expr="false"/>
<if cond="yn">
<assign name="result" expr="true"/>
</if>
<return namelist="result"/>
</filled>

</field>

</form>

Kung sinasabi ng speech recognizer na hindi nito naintindihan ang sinagot ng gumagamit, pinapahintulutan ka ng Voice XML na gumamit nang mas naaayon na dialog. Sa susunod na ehemplo, ang gumagamit ay hinihingan ng kumpirmasyon kung ang confidence score ng city name ay less than 0.7, pero kung less than 0.3, ang gumagamit ay tatanungin muli ang city name:

<field name="city">
<prompt>Which city?</prompt>
...  
<filled>
<if cond="city$.confidence < 0.3">

<prompt>Sorry, I didnt get that</prompt>
<clear namelist="city"/>
<elseif cond="city$.confidence < 0.7"/>
<assign name="utterance" expr="city$.utterance"/>
<goto nextitem="confirmcity"/>
</if>
</filled>

</field>

<subdialog name="confirmcity" src="#ynconfirm" cond="false">
<param name="user_input" expr="utterance"/>
<filled>
<if cond="confirmcity.result==false">
<clear namelist="city"/>
</if>
</filled>

</subdialog>

Kung ang confidence ay les than 0.3, sasabihan ang gumagamit ng - Sorry, I didn not get that - at hihingan uli ng city name. Kung ang confidence ay less than 0.7, ang generic confirmation dialog ay lalabas. Ang subdialog element ay parang subroutine call. Aang param element ay ginagamit sa pagpasa ng data sa subdialog.

Puwede ring gamitin ang grammar sa mga hiwaly na file. Ang susunod na ehemplo ay gumagamit ng grammar sa trade.xml:

<form name="trader">

<field name="company">
  <prompt> Which company do you want to trade?</prompt>

  <grammar src="trade.xml#company" type="application/grammar+xml"/>
</field> 

<field name="action">
  <prompt>
    do you want to buy or sell shares in
    <value expr="company"/>?
  </prompt>
  <grammar src="trade.xml#action" type="application/grammar+xml"/>

</field>

</form>

Puwedeng gamitin ang import element para mag-import ng mga batas sa grammar para magamit mo sila sa locally defined grammars. Dito sa susunod, iniisip na ang politeness.xml ay nagsasaad ng mga batas na nagngangalang startPolite (e.g. please) at endPolite (e.g. thank you):

<grammar xml:lang="en">

<import uri="http://please.com/politeness.xml" name="polite"/> 

<rule name="command" scope="public">  

<ruleref import="polite#startPolite"/> 
<ruleref uri="#action"/> 
<ruleref uri="#object"/>  
<ruleref import="polite#endPolite"/>
</rule>

<rule name="action" scope="public"> 
<choice> 
<item tag="buy"> buy </item> 

<item tag="sell"> sell </item> 
</choice> 
</rule> 

<rule name="company" scope="public">
<choice> 
<item tag="ericsson"> ericsson </item> 

<item tag="nokia"> nokia </item> 
</choice> 
</rule>
</grammar>

Sa susunod na ehemplo para sa isang stock trading na aplikasyon, ang gumagamit ay puwedeng sumagot ng maikling parirala katulad ng -buy ericsson- na nakaset pareho sa kumpanya at sa trade (buy o sell). Ang grammar sa paggamit nito at nakasaad sa -trade.xml.- Kung di sumagot ang gumagamit nang maigi, tutugon ang aplikasyon nang mas simpleng aksiyon, na ipro-prompt una ang kumpanya at pagkatapos naman ay ang trade. Ang field elements ay iniiskip kung ang corresponding field value ay nagawa na.

<form name="trader"> 

<grammar src="trade.xml#command" type= "application/grammar+xml"/>

<initial name="start">
<prompt>What trade do you want to make?</prompt>
<nomatch count="1"> 
<prompt>Please say something like 'buy ericsson' </prompt>

<reprompt/>
</nomatch> 
<nomatch count="2">
Sorry, I didn't understand your request. Let's try something simpler. 
<assign name="start" expr="true"/> 
</nomatch> 
</initial>

<field name="company"> ... </field> 

<field name="action"> ... </field>
</form>

Puwedeng bigyan ng aplikasyon ang gumagamit ng tsansang pumunta sa ibang gawain sa pamamagitan ng pagsasabi ng kaukulang command. Ang grammar ditto ay puwedeng maisaad sa lebel ng dokumento o sa aplikasyon ng ugat na dokumento. Ito ang isang ehemplo ng document level command menu:

<?xml version="1.0" encoding="ISO-8859-1"?>
<vxml version="2.0" lang="en">

<form name="trader"> 
 ...

</form>

<menu name="portal-commands" scope="document"> 
<choice expr="http://www.wl.com?action=car">Car hire</choice>
<choice expr="http://www.wl.com?action=hotel">Hotel reservations</choice>
<choice expr="http://www.wl.com?action=news">Today's news</choice>

</menu>

...
</vxml>

Para magamit ang aplikasyon ng ugat na dokumento, gamitin ang application attribute sa vxml element:

<?xml version="1.0" encoding="ISO-8859-1"?>

<vxml version="2.0" lang="en" 
   application="http://buster/portal?sessionID=12d4rf65hg4" >

...
</vxml>

Ehemplo ito ng ugat na dokumento na puwedeng magamit ang command para bumalik sa portal home page. Kasama sa ehemplong ito ang handler para sa panghuli ng -noninput- na event kung di sila nahuli ng mga mababamg lebel na handler, e.g. on each dialog:

<form name="portal-commands" scope="document"> 
<field name="action">
<grammar src="http://buster/portal/commands.xml"
 type="application/grammar+xml"/>
</field> 

<block>
<submit next="http://www.wl.com"/>
</block>
</form>
<var name="portal-help" expr=
"To return to your portal home, say home page, or press 0."/>

<catch event="noinput">
Sorry, I didn't hear anything.
</catch>

Para Makakuha ng Higit na Impormasyon

Ang W3Cs ispesipikasyon para sa VoiceXML 2.0 ang makapangyarihang ispesipikasyon para sa Voice XML. Para sa higit na impormasyon tungkol sa W3C Speech Interface Framework at ibang kaukulang ispesipikasyon, pumunta sa W3C Voice Browser Activity. Mga miyembro ng W3C ay puwedeng kumuha ng access ng pinakabagong specs na dinidebelop ng Voice Browser working group. Mga kaukulang tutoryal at marami pang magagamit na pointer ay makikita sa VoiceXML Forums website.

Nagbabalak pa akong magdagdag ng maraming seksiyon tungkol sa speech grammar at speech synthesis pati na mga komentaryo sa W3Cs na trabaho sa multimodal at iba pang mga paksa.

Mabuhay at sulat na!

Dave Raggett <dsr@w3.org>

Copyright © 2002-2003 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply. Your interactions with this site are in accordance with our public and Member privacy statements.