Beta Test!
Asterisk-Schulungen und Consulting vom Autor dieses Buches finden Sie auf http://www.amooma.de. |
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 ist nur über eine Nummer von außen erreichbar, und die Mitglieder der Familie Meier wollen ein interaktives Anrufverteilsystem einsetzen. Das folgende Beispiel zeigt, wie so etwas mit VoiceXML realisiert werden könnte:
Beispiel 10.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 time="300ms"/></prompt></block> <block><prompt>Druecken Sie die 1, um mit Horst Meier verbunden zu werden.<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 werden.<break time="300ms"/></prompt></block> <block><prompt>Oder druecken Sie die 4, um mit Lisa Meier verbunden zu werden.<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 Dokumentes gibt der Voicebrowser Instruktionen an den Anrufer, was dieser zu tun hat, um seinen gewünschten Gesprächspartner zu erreichen. Das <field> Element, welches 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 Lattenzaun bewirkt das Laden eines neuen VoiceXML Dokuments, während bei einem next-Attribut mit Lattenzaun ein anderer Dialogabschnitt innerhalb des selben 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 Kontext 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> Element erreicht wurde, leitet der Voicebrowser den Anruf an die angegebene Destination weiter. Das dest-Attribut muß 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/weiterleitung.vxml) exten => 4295,3,Hangup
Beachten Sie, dass es sich bei einem Anruf-Transfer um ein sehr mächtiges Feature handelt, das aber bei falscher Anwendung nicht ungefährlich ist! Machen Sie sich bewußt, 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 $DIALOUT
Variable im Konfigurationsteil mit dem Befehl Busy vorbelegen.
© by Stefan Wintermeyer