Reguläre Ausdrücke und Variablen im dialplan
In meinem Dialplan bekommt ein SIP-Telefon eine vierstellige Nummer. In der einfachsten Version wird bei der Wahl einer Telefonnummer (Extension) versucht, das jeweilige SIP-Gerät anzurufen. Für jedes hinzugekommene SIP-Telefon in der sip.conf
wäre der Dialplan (extensions.ael) anzupassen. Das muss nicht sein, wenn man mit regulären Ausdrücken (regular expressions) arbeitet. Aktuell findet man im Dialplan zum Beispiel folgende Extension:
7424 => {
Dial(SIP/7424);
}
Mit der folgenden Extension kann definiert werden, das alle vierstelligen Rufnummern zwischen 1111 und 9999 dieselben Applikationen ausführen:
_ZZZZ => {
Dial(SIP/7424);
}
Das Pattern wird mit dem Unterstrich (_) eingeleitet. Die folgenden Zeichen beschreiben den Aufbau des Patterns (Suchmusters). Ein Z
steht hier für eine Zahl zwischen 1 und 9, während zum Beispiel ein X
für eine Ziffer von 0 bis 9 und das N
für eine Ziffer von 2 bis 9 steht. Wenn im Dialplan keine andere Extension genauer zutrifft, wird bei vierstelligen Rufnummern immer das SIP-gerät 7424
angerufen. Darum kümmern wir uns gleich noch. Da im Dialplan aber neben dem Pattern noch die Extension 3246
für den Echotest existirt, bildet diese eine Ausnahme der gerade definierten Extension.
Für Asterisk ist es übrigens egal, wo innerhalb eines Contextes Reguläre Ausdrücke oder “normale Rufnummern” definiert werden. Es wird immer der vollständige Dialplan untersucht und das Beste Ergebnis verwendet. Der neue Dialplan ist im CLI mit dem Befehl reload
einzulesen. Der folgende Test zeigt, wie sich Asterisk bei der Rufnummer 6268
verhält:
debian*CLI> dialplan show 6268@intern
[ Context 'intern' created by 'pbx_ael' ]
'_ZZZZ' => 1. Dial(SIP/7424) [pbx_ael]
-= 1 extension (1 priority) in 1 context. =-
debian*CLI>
Das der Echotest unter der Rufnummer 3246
trotzdem noch funktioniert, kann leicht überprüft werden:
debian*CLI> dialplan show 3246@intern
[ Context 'intern' created by 'pbx_ael' ]
'3246' => 1. Answer() [pbx_ael]
2. Playback(demo-echotest) [pbx_ael]
3. Echo() [pbx_ael]
4. Hangup() [pbx_ael]
'_ZZZZ' => 1. Dial(SIP/7424) [pbx_ael]
-= 2 extensions (5 priorities) in 1 context. =-
debian*CLI>
Wie man sieht, wird zuerst der reguläre Echotest aufgeführt. Erst danach wird angezeigt, dass das Pattern für generelle vierstellige Nummern auch greifen würde.
Einführung in Variablen
Eine Variable kann als Platzhalter für konkrete Inhalte angesehen werden und wird gerade
in der Programmierung verwendet, um auf wechselnde Situationen reagieren zu können. Auch Asterisk stellt Variablen zur Verfügung und bietet die Möglichkeit, diese zur laufzeit eines Gesprächs selbst zu erstellen oder zu verändern. Daher hier ein einfaches Beispiel.
Die Variable ${EXTEN}
In jeder Extension steht automatisch die Variable ${EXTEN}
zur Verfügung. In ihr wird die gewählte Telefonnummer gespeichert. Dadurch kann die Extension zum Anrufen eines SIP-Telefons flexibel gestaltet werden. Die fertige Extension zum Anruf eines Telefons mit einer vierstelligen Nummer sieht also komplett so aus:
_ZZZZ => {
Dial(SIP/${EXTEN});
}
Jetzt hat man eine Extension, die bei vierstelligen Nummern versucht das entsprechende SIP-Gerät anzurufen.
In folgenden Artikeln wird auf die Verwendung von Variablen erneut eingegangen, indem zum Beispiel der Zugang zum Mailboxsystem oder Konferenzen gezeigt wird.
Datum der Veröffentlichung: Sonntag, 08.11.2009