Erinnern wir uns an das Kapitel zum Voicemailsystem des Asterisk und an die Einrichtung der verschiedenen Mailboxen für die Familie Meier. Nehmen wir einmal an, der Asterisk der Familie Meier wäre nur über eine Nummer von außen erreichbar, und die Mitglieder der Familie Meier würden ein interaktives Anrufverteilsystem einsetzen wollen. Das folgende Beispiel zeigt, wie so etwas mit VoiceXML realisiert werden könnte:
Beispiel 20.6. weiterleitung.vxml
<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0"> <form> <block><prompt>Hier ist der Telefonanschluss der Familie Meier.<break ti me="300ms"/></prompt></block> <block><prompt>Druecken Sie die 1, um mit Horst Meier verbunden zu werde n.<break time="300ms"/></prompt></block> <block><prompt>Druecken Sie die 2, um mit Eva Meier verbunden zu werden. <break time="300ms"/></prompt></block> <block><prompt>Druecken Sie die 3, um mit Peter Meier verbunden zu werde n.<break time="300ms"/></prompt></block> <block><prompt>Oder druecken Sie die 4, um mit Lisa Meier verbunden zu w erden.<break time="300ms"/></prompt></block> <field><prompt timeout="10s"/><noinput><exit/></noinput></field> </form> <link next="#transfer1" dtmf="1"></link> <form id="transfer1">Man <transfer dest="tel:200" bridge="false" /> </form> <link next="#transfer2" dtmf="2"></link> <form id="transfer2"> <transfer dest="tel:201" bridge="false" /> </form> <link next="#transfer3" dtmf="3"></link> <form id="transfer3"> <transfer dest="tel:202" bridge="false" /> </form> <link next="#transfer4" dtmf="4"></link> <form id="transfer4"> <transfer dest="tel:203" bridge="false" /> </form> </vxml>
Am Anfang des Dokuments gibt der Voicebrowser Instruktionen an den Anrufer, was dieser zu tun hat, um seinen gewünschten Gesprächspartner zu erreichen. Das <field>-Element, das nach 10 Sekunden Untätigkeit die Verbindung beendet, kennen wir bereits aus dem Kapitel zur DTMF-Eingabe.
Auch das <link>-Element haben wir dort kennengelernt. Allerdings ist hier die Syntax nun ein klein wenig anders. Der Unterschied liegt im #-Zeichen. Ein next-Attribut ohne # bewirkt das Laden eines neuen VoiceXML-Dokuments, während bei einem next-Attribut mit # ein anderer Dialogabschnitt innerhalb desselben Dokuments angesprungen wird. Kommt Ihnen das irgendwie bekannt vor? Bei HTML-Dokumenten gibt es beim <a>-Element eine ähnliche Logik!
Wie man in diesem Beispiel sieht, können durchaus mehrere <form>-Elemente in einem VoiceXML-Dokument existieren. Sie werden durch eine eindeutige ID unterschieden und über die DTMF-getriggerten <link>-Elemente angesprungen. Die genaue Position der <link>-Elemente im Dokument ist nur insofern von Bedeutung, als dass sie im Context des <vxml>-Elements stehen und damit permanent aktiv sind. Man hätte die <link>-Elemente aber auch zu einem Linkblock zusammenfassen können, ohne etwas an der Funktionalität zu ändern.
Wenn nun durch das Erkennen eines DTMF-Tons eines der unteren <form>-Elemente erreicht wurde, leitet der Voicebrowser den Anruf an die angegebene Destination weiter. Das dest-Attribut muss gemäß RFC 2806 (URLs for Telephone Calls) http://www.ietf.org/rfc/rfc2806.txt angegeben werden.
Das Attribut bridge="false"
bedeutet, dass
sich der Voicebrowser nicht weiter um diese Verbindung kümmert, sondern
mit der Weiterleitung des Anrufs an die angegebene Nummer seine
Schuldigkeit getan hat.
Mit dem Hastenix-Skript können Sie auch dieses Beispiel interaktiv
testen. Sie werden aber nur dann erfolgreich weitervermittelt werden, wenn
Sie auf Ihrem Asterisk entsprechende interne Teilnehmer mit den Rufnummern
200 bis 203 eingerichtet haben und die $DIALOUT
Konfigurationsvariable so gesetzt haben, dass die Ausführung des
Dial-Kommandos erlaubt ist.
; ; Hastenix-Beispiel zur Weitervermittlung ; exten => 4295,1,Answer exten => 4295,2,AGI(hastenix.pl|http://hastenix.hawhaw.de/aaw/weiterleit ung.vxml) exten => 4295,3,Hangup
Beachten Sie, dass es sich bei einem Anruf-Transfer um ein
mächtiges, damit aber auch problematisches Feature handelt, das bei
sorgloser Anwendung zu großen Unannehmlichkeiten führen kann! Halten Sie
sich bitte stets vor Augen, dass mit dem
<transfer>-Element ein entfernter Webserver die
Kontrolle darüber hat, welche abgehenden Verbindungen ein Voicebrowser
aufbaut. Im Hastenix-Skript können Sie jegliche Nutzung des
<transfer>-Elements dadurch unterbinden, dass Sie
die |