Anrufweiterleitung

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
[Warnung]

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 $DIALOUT-Variable im Konfigurationsteil mit dem Befehl Busy vorbelegen.