DTMF-Eingabe

Ein wesentlicher Bestandteil von VoiceXML ist das Thema Spracherkennung und die Definition von Grammatiken. Eine Sprachanwendung wird natürlich erst dann interaktiv, wenn der Anrufer durch eigene Eingaben in den Ablauf eingreifen kann. Mit den bisher behandelten Funktionen ließe sich ja gerade einmal eine Ansagemaschine realisieren.

Da der Asterisk mit Bordmitteln jedoch keine Spracherkennung unterstützt , wollen wir auf dieses Thema nicht näher eingehen, sondern uns dem kleinen Bruder der Spracherkennung zuwenden: der DTMF-Erkennung.

Ein DTMF-Signal wird erzeugt, wenn der Anrufer während eines Sprachdialogs eine Taste seines Telefons drückt. In den vorherigen Kapiteln zum Thema Dialplan haben wir gesehen, dass der Asterisk hervorragend mit DTMF-Eingaben während einer Verbindung umgehen kann. Schreiben wir ein rudimentäres Sprachportal der Apfelmus GmbH einmal in VoiceXML-Schreibweise:

Beispiel 20.3. dtmf.vxml

<?xml version="1.0" encoding="UTF-8"?>
<vxml version="2.0">
<form>
<block><prompt>Willkommen im Sprachportal der Apfelmus GmbH
<break time="300ms"/></prompt></block>
<block><prompt>Für eine Beschreibung unserer neuen Produkte drücken Si
e bitte die eins.
  <break time="300ms"/></prompt></block>
<block><prompt>Für allgemeine Informationen über unsere Firma drücken
 Sie bitte die zwei.
  <break time="300ms"/></prompt></block>
<field><prompt timeout="10s"/><noinput><exit/></noinput></field>
</form>
<link next="products.vxml" dtmf="1"></link>
<link next="info.vvxml" dtmf="2"></link>
</vxml>


Die ersten Zeilen dieses Dokuments kennen Sie bereits. Nach den drei Ansageblöcken kommt aber jetzt ein <field>-Element. Dieses Element signalisiert dem Voicebrowser, dass er jetzt auf eine Eingabe des Benutzers warten soll. Bei dem <noinput>-Element handelt es sich um ein sogenanntes Event, das der Voicebrowser in bestimmten Situationen sendet. In unserem Fall sendet er es dann, wenn 10 Sekunden lang keine Eingabe erfolgte. Das <exit>-Element überträgt die Kontrolle wieder an den Interpreter, was hier nichts anderes heißt, als dass die Verbindung beendet wird.

Nach dem bisher Gesagten würde der Voicebrowser anhand dieses Dokuments 3 Ansagen spielen, 10 Sekunden warten und dann die Verbindung beenden. Wenn da nicht noch die <link>-Elemente am Ende des Dokuments wären! Hier wird nämlich dem Voicebrowser mitgeteilt, was er tun soll, wenn er im Verlauf der Verbindung das Drücken der Taste 1 bzw. 2 erkennt: Er soll in diesem Fall das aktuelle VoiceXML-Dokument verlassen und ein neues VoiceXML-Dokument laden und ausführen.

Erwähnenswert ist noch die Position der <link>-Elemente im Dokument. Je nachdem, wo diese Elemente positioniert sind, entscheidet der Voicebrowser, ob die Erkennung eines DTMF-Tones berücksichtigt werden soll oder nicht. In unserem Beispiel stehen die Links im Context des gesamten Dokuments. Somit muss der Voicebrowser während der gesamten Verbindung ein Ohr darauf haben, ob der Anrufer eine der Tasten 1 bzw. 2 gedrückt hat.

Mit dem Hastenix-Skript können Sie dieses Beispiel interaktiv testen, wenn Sie Ihren Dialplan erneut erweitern und danach die 4293 wählen:

;
; Hastenix-Beispiel zur DTMF-Eingabe
;
exten => 4293,1,Answer
exten => 4293,2,AGI(hastenix.pl|http://hastenix.hawhaw.de/aaw/dtmf.vxml)
exten => 4293,3,Hangup