Hier spricht das WWW

Nicht nur Sehbehinderte wollen das Web akustisch nutzen. Reisende könnten per Handy von überall auf derart aufbereiteten Inhalt zugreifen. VoiceXML verspricht, für Entwickler eine standardisierte Schnittstelle jenseits von HTML zu bieten.

In Pocket speichern vorlesen Druckansicht 4 Kommentare lesen
Lesezeit: 11 Min.
Von
  • Tobias Fritz
Inhaltsverzeichnis

VoiceXML, die Sprache für das akustische Web, dürfte eine Vielzahl von Vorteilen bieten: E-Commerce per Telefon, Zugriff auf private E-Mail, Bankkonto-Anfragen und mehr sind teilweise schon realisiert. E-Plus bietet seit Anfang 2001 den E-Plus Voice Assistant (E.V.A.), mit dessen Hilfe sich Kunden über Nachrichten, Sportergebnisse, Wetter und Verkehr informieren können. Außerdem kann E.V.A. für jeden Benutzer ein Adressbuch mit bis zu 100 Einträgen anlegen und zu jedem Eintrag vier verschiedene Rufnummern sowie die E-Mail-Adresse, Faxnummer und weitere Informationen speichern. Um eine Person aus dem Adressbuch anzurufen wählt man einfach E.V.A. an, sagt den Namen der gewünschten Person und wird mit der zugehörigen Nummer verbunden.

Außerdem bieten sich neue Ansätze für Intranet-Anwendungen; von traditioneller Kundenbetreuung (Customer Care) und Customer Relationship Management (CRM) ganz zu schweigen.

Mehr Infos

Online-Ressourcen

‘Voice Browser’ Activity (Voice-Homepage beim W3C)

www.w3.org/Voice/

Spezifikation der Voice Extensible Markup Language (Voice XML)

www.w3.org/TR/voicexml20/

Dave Raggett; Getting started with VoiceXML 2.0 (November 2001)

www.w3.org/Voice/Guide/

Sites für Entwickler

studio.tellme.com/

cafe.bevocal.com/

developer.voicegenie.com/

community.voxeo.com/

www.heyanita.com/

www.pipebeach.com/

Interaktive Sprachdialogsystem (IVR, Interactive Voice Response) waren bis vor kurzem teuer und kaum standardisiert. Mit dem Ziel, durch einen neuen Standard die Ressourcen des WWW übers Telefon zugänglich zu machen, gründeten deshalb AT&T, Lucent und Motorola im März 1999 das VoiceXML Forum, dem sich bald IBM anschloss. Der im Mai 2000 dem W3C vorgelegte Entwurf für die VoiceXML-Spezifikation Version 1.0 hat sich im Folgenden zu einem Standard von IVR-Systemen entwickelt, und mehrere Produkte verstehen es (IBMs WebSphere Voice Server, Nuances Voice Web Server und Motorolas Mya Voice Platform). Anfang August hat Oracle Unterstützung von Voice-Anwendungen im Application Server Wireless (9i) angekündigt. Und seit Oktober 2001 liegt ein Entwurf für Version 2 von VoiceXML vor (siehe Kasten ‘Online-Ressourcen’).

Vorhandene ‘normale’ Webinhalte lassen sich mit VoiceXML für das Telefon konvertieren. Durch ein XSLT-Stylesheet lässt sich neben HTML außerdem VoiceXML erzeugen. Damit könnten Personen, denen der Zugang zum Internet versperrt ist oder die notwendigen PC-Kenntnisse fehlen, wenigstens eingeschränkt im Internet surfen. Vor allem Blinden würde auf diese Weise ebenfalls der Zugang zum Web wesentlich vereinfacht. Mit VoiceXML könnte man sich die online veröffentlichten Artikel seiner bevorzugten Tageszeitung vorlesen lassen.

Laut der Spezifikation, die eine Reihe von fachkundigen und vom Ergebnis betroffenen Herausgebern beim W3C betreuen, beschreibt VoiceXML folgende Aspekte der Interaktion zwischen Mensch und Maschine:

  • synthetische Sprachausgabe
  • Ausgaben von Audiodateien
  • Spracherkennung
  • Erkennung von Tonwahl-Impulsen
  • Aufnahme von Spracheingaben
  • Telefondienste wie Anrufweiterleitung und Verbindungsabbruch

Wie jedes XML-Dokument muss ein VoiceXML-Dokument mit <?xml version="1.0"?> beginnen. Den Rest schließen <vxml version="2.0"> und </vxml> ein. Innerhalb des vxml-Elements ist üblicherweise jedes Dokument in einzelne Dialoge aufgeteilt, die entweder das Element form oder menu eingrenzen, wobei Formulare Nutzereingaben in Variablen speichern und davon abhängig Aktionen ausführen (ähnlich HTML-Formularen), während Menüelemente nur eine Liste anbieten, aus der der Benutzer auswählen kann (wie eine Linkliste in HTML). Danach, eingeschlossen vom Element block, folgt beispielsweise ein Text. Das notorisch bekannte ‘Hello World’ in VoiceXML sähe folgendermaßen aus:

<?xml version="1.0"?>
<vxml version="2.0">
<form>
<block>Hello World</block>
</form>
</vxml>

Obiges Script demonstriert die Fähigkeit der synthetischen Sprachausgabe von IVR-Systemen (oft ‘Text to Speech’, TTS, genannt). Dazu muss der Browser ‘wissen’, dass Elemente wie prompt oder block über das TTS-Modul auszugeben sind. Statt TTS zu nutzen, kann eine Audiodatei ausgegeben werden. Deren Nachteil besteht in dem Aufwand, den gewünschten Text aufzunehmen und in einer Audiodatei zu speichern. Dazu kommt, dass aus dem VoiceXML-Quellcode nicht mehr zu entnehmen ist, welcher Text abzuspielen ist. Andererseits ist die Qualität einer Sprachdatei normalerweise hörbar besser als TTS und eröffnet zusätzlich die Möglichkeit, die Stimme selbst auszuwählen. Wer ein eigenes VoiceXML-Gateway betreiben möchte, sollte außerdem wissen, dass die Ausgabe einer Sprachdatei die CPU wesentlich weniger belastet als TTS. Der Sourcecode mit Ausgabe einer Sprachdatei sieht folgendermaßen aus:

<?xml version="1.0"?>
<vxml version="2.0">
<form>
<block>
<audio src="http://foo.foo.foo/hello_world.wav"/>
</block>
</form>
</vxml>

Die wichtigste Fähigkeit von IVR-Systemen präsentiert Listing 1: Spracherkennung (ASR, (Automatic Speech Recognition) und die damit verbundene Interaktivität. Es bietet dem Anrufer zunächst ein Menü, bei dem er zwischen ‘weather’, ‘news’ oder ‘washing machine’ auswählen kann. Sagt er ‘weather’, verzweigt das Script zur Form mit der id ‘weather’ im selben Dokument. Wählt er ‘news’, kann er sich Nachrichten des Heise-Verlags anhören (der Link existiert in Wirklichkeit nicht). Und unter ‘washing machine’ könnte der Nutzer der Zukunft in den Dialog mit seiner Waschmaschine treten. <catch event="nomatch noinput help"> fängt die Ereignisse nomatch (das vom Benutzer Gesprochene lässt sich weder ‘weather’ noch ‘news’ noch ‘washing machine’ zuordnen), noinput (der Benutzer ist eine vordefinierte Zeitspanne stumm geblieben) und help (der Benutzer hat ‘help’ gesagt) ab und teilt mit <reprompt/> dem VoiceXML-Browser mit, den Inhalt des prompt-Elements noch einmal auszugeben.

Mehr Infos

Listing 1: Ausgabe über Spracherkennung

<?xml version="1.0"?>
<vxml version="2.0">
<menu id="menu">
<prompt>
Welcome creature! Please choose between weather, news or
washing machine:
</prompt>
<choice next="#weather">weather</choice>
<choice next="http://www.heise.de/news.vxml">news</choice>
<choice next="http://www.server.zuhause/wash.vxml">
washing machine
</choice>
<catch event="nomatch noinput help">
<reprompt />
</catch>
</menu>
<form id="weather">
<block>
It will rain a lot today! Better bring your umbrella.
<goto next="#menu"/>
</block>
</form>
</vxml>

Statt per Sprache mit einer VoiceXML-Anwendung zu kommunizieren bietet sich die Eingabe von Tonwahlimpulsen (DTMF, Dual Tone Multiple Frequency) über die Tastatur des Telefons an. Dies erlaubt Nutzern mit starkem Akzent, Sprachbehinderungen et cetera, mit dem IVR-System zu kommunizieren und sollte deshalb in Dialoge eingebaut werden. Außerdem quasi zwingend ist die Benutzung von DTMF bei Eingabe von PINs, denn der Kollege soll vielleicht nicht unbedingt Zugriff auf mein Bankkonto bekommen. Obiges Script mit DTMF sieht aus wie Listing 2.

Mehr Infos

Listing 2: Ausgabe per DTMF

<?xml version="1.0"?>
<vxml version="2.0">
<menu id="menu">
<prompt>
Welcome creature! Please say weather, news or washing machine or
press 1 for weather, 2 for news and 3 for washing machine.
</prompt>
<choice dtmf="1" next="#weather">weather</choice>
<choice dtmf="2" next="http://www.heise.de/news.vxml">news</choice>
<choice dtmf="3" next="http://www.server.zuhause/wash.vxml">
washing machine
</choice>
<catch event="nomatch noinput help">
<reprompt />
</catch>
</menu>
<form id="weather">
<block>
It will rain a lot today! Better bring your umbrella.
<goto next="#menu"/>
</block>
</form>
</vxml>

Wie man dort den Zeilen 8, 9 und 10 entnehmen kann, ist in diesem Fall die Ansage des Wetters mit der Taste ‘1’, News mit der Taste ‘2’ und die Waschmaschine mit Taste ‘3’ assoziiert.

Ein weiteres nützliches Feature von VoiceXML ist die Aufnahme von Spracheingaben. Ein Element wie <record name="userinput"> nimmt Text auf und speichert ihn in der Variablen userinput. Das Ergebnis kann ein Script an einen Server weiterleiten und dort speichern. Listing 3 erlaubt die Aufnahme eines Memos, das sich zu einem späteren Zeitpunkt wieder abrufen lässt.

Mehr Infos

Listing 3: Weiterleitung an ein Script

<?xml version="1.0"?> 
<vxml version="2.0">
<form>
<record name="userinput" beep="true" maxtime="60s" dtmfterm="true">
<prompt>
Please say your comment! When you're done, press pound.
</prompt>
<noinput>
I didn't hear anything, please try again!
</noinput>
<filled>
<submit next="http://foo.foo.foo/upload.vxml" namelist="userinput"
method="post" caching="safe"/>
</filled>
</record>
</form>
</vxml>

Schließlich erlaubt Voice-XML die Weiterleitung sowie das Beenden des Anrufs. Letzteres erledigt das Element <disconnect/>, während <transfer dest="phone://1234567"> eine Verbindung zur Nummer 1234567 herstellt. Die automatische Anrufweiterleitung ist bei der Realisierung des Zugriffs via VoiceXML auf ein Adressbuch nützlich: Man sagt einfach den Namen der gesuchten Person, und VoiceXML kümmert sich um den Rest.

Dialog zwischen VoiceXML-Systemen und Menschen können Menüs wie in Listing 2 und 3 sein, oft aber sind Formulare notwendig, die über die in den beiden Listings enthaltenen hinausgehen. Es kann etwa notwendig sein, Feldinhalte an Anwendungen wie Datenbankrecherche weiterzureichen, um Ergebnisse zu zeigen. Listing 4 besteht aus einem Formular, das Informationen zu Büchern ausgeben soll. Es enthält zwei Felder: Autor und Sprache.

Mehr Infos

Listing 4: Formular

<?xml version="1.0"?> 
<vxml version="2.0">
<form id="litsuche">
<block>
<prompt bargein="false">
Suche nach Büchern auf Deutsch und Englisch
<audio src="http://www.ix-ads.de/ads/aktuell.wav"/>
</prompt>
</block>
<field name="autor">
<prompt>Name des Autors oder der Autorin?</prompt>
<grammar src="autoren.grxml"
type="application/grammar+xml"/>
<catch event="help">
Sprechen Sie bitte den Namen des Autors.
</catch>
</field>
<field name="sprache">
<prompt>Sprache des Werkes?</prompt>
<grammar src="sprachen.grxml"
type="application/grammar+xml"/>
<catch event="help">
Nennen Sie bitte die Sprache des Werkes.
</catch>
</field>
<block>
<submit next="/cgi-bin/suchbuch"
namelist=" autor sprache"/>
</block>
</form>
</vxml>

Zunächst hat das Formular eine ID, damit es von außen ansprechbar ist (was hier nicht geschieht). Der Eingangsblock beinhaltet ein Element prompt statt einfachen Text, weil die Anwendung Werbung ‘senden’ soll - die Audiodatei aktuell.wav. Diese wiederum darf der Benutzer nicht durch Sprechen unterbrechen, was das Attribut bargein="false" bewirkt (‘barge in’ heißt auf Deutsch: hereinplatzen).

Beide Felder haben einen Namen (autor, sprache), sodass sich über if cond erfragen ließe, ob sprache einen Wert hat, und die Seite im negativen Falle gleich eine Zuweisung vornähme. Für beide Felder existiert eine Grammatik, die die möglichen Äußerungen der Benutzer definiert. Wie die auszusehen hat, definieren andere W3C-Spezifikationen, beispielsweise die ‘Speech Recognition Grammar Specification for the W3C Speech Interface Framework’.

Hilfetexte, hier nicht enthaltene Defaultwerte und die Verzweigung in eine Aktion (cgi-bin/suchbuch) sind nicht die einzigen weiteren Formularteile. Denn der weiteren Komplizierung sind kaum Grenzen gesetzt. So können die Rechner allein das Vorgehen bestimmen (in so genannten directed forms), es sind aber auch solche machbar, die außer der VoiceXML-Seite dem Benutzer Initiative ‘gönnen’ (mixed initiative forms).

Leider ist der Aufbau eines funktionierenden IVR-Systems noch nicht mit der Installation etwa eines Webservers zu vergleichen, sondern ungleich komplizierter. Neben der Software sind meistens spezielle Telefonie-Interface-Karten oder ein Voice-over-IP-Gateway notwendig, so dass es für den interessierten Entwickler kaum möglich ist ‘mal schnell ein IVR-System hochzuziehen’. Deswegen sind in den vergangenen ein bis zwei Jahren so genannte VoiceXML Developer Gateways entstanden, die es erlauben, eigene VoiceXML-Applikationen zu generieren und vor allem zu testen. Zu nennen sind hier insbesondere Tellme, BeVocal, VoiceGenie, Voxeo und Hey Anita (siehe ‘Online-Ressourcen’).

Wer die in diesem Artikel beschriebenen Scripts oder eigene Anwendungen ausprobieren will, sollte sich bei einem dieser VoiceXML Developer Gateways eine Zugangsberechtigung zulegen. Dabei ist zu beachten, dass nicht alle tatsächlich kompatibel zu VoiceXML 2.0 sind. Wegen der Schnelligkeit des Zugangs sowie der umfangreichen Tools, die das Developer Gateway Tellme bietet, sind obige Scripts dort getestet. Wer sicher gehen möchte, dass alles funktioniert, sollte deshalb Tellme benutzen.

In den Einstellungen seines Accounts auf einem VoiceXML-Gateway sollte man entweder eine URL angeben, die auf eine VoiceXML-Datei verweist oder die Datei lokal auf dem Server des Providers speichern. An dieser Stelle erklärt sich, weshalb alle Texte in den Listings englisch gehalten sind: Sowohl die TTS- als auch die ASR-Engines der VoiceXML Developer Gateways sprechen beziehungsweise verstehen nur diese Sprache. Ausgenommen ist Listing 4, da hier das Fehlen der Grammar-Dateien das Funktionieren zunächst ausschließt. Die einzige mir bekannte Firma mit installiertem deutschen TTS und ASR ist die 1998 gegründete Pipebeach AB, die allerdings über ihr Application-Partnerprogramm keinen Zugang für Privatpersonen, sondern nur für Firmen und Organisationen bietet.

Wie man dem Überblick über die Voice-Browser-Webzentrale des W3C entnehmen kann, gibt es im Bereich der Sprachausgabe und Spracherkennung noch viel zu tun. Im Jahre 2002 sollen Recommendations der ‘Speech Recognition Grammar’ sowie der ‘Speech Synthesis Markup Language’ fertig sein. Und als Note existiert derzeit ein XHTML-VoiceXML-Profil, das die Einbindung von VoiceXML-Modulen in ‘normale’ Webanwendungen vorbereitet. Das starke Interesse, das die Entwickler von Sprachsoftware und Developer Gateways an VoiceXML bisher gezeigt haben, lässt auf eine schnelle Anpassung an die neuen Standards schließen.

Tobias Fritz
ist Java-Programmierer bei Nexui S.p.A. in Italien.

Mehr Infos

iX-TRACT

  • Mit VoiceXML, einer beim W3C in Entwicklung befindlichen Spezifikation für das akustische Web, können Entwickler Audioanwendungen mit einer standardisierten Sprache realisieren.
  • Texte können in Sprache gewandelt oder in Form einer Audiodatei an den Surfer oder das Handy geschickt werden.
  • VoiceXML erlaubt das Programmieren von Dialogen zwischen Mensch und Maschinen durch Menüs und Formulare.

(hb)