3.4. Includes im Dialplan
Includes bringen Struktur und Ordnung in große Dialpläne. Mit einem
Include können andere Contexte in den aktuellen Context eingebaut (also
"included") werden.
Die Reihenfolge beim Include
Asterisk sucht, bevor es einen anderen Context einbindet
(include), immer erst im aktuellen Context nach einem Treffer (einem
Match). Gibt es einen Treffer, wird dieser benutzt. Gibt es keinen
Treffer, wird das erste Include aufgerufen und dort nach einem Treffer
gesucht. Dies funktioniert rekursiv nach unten – auch
verschachtelt: Es können also auch Includes innerhalb von Includes
abgearbeitet werden.
Im Zweifelsfall können Sie zum Debuggen auch hier die Applikation
dialplan show nummer@name-des-contextes
benutzen, um
herauszufinden, welche Regel von Asterisk angewendet wird.
Anmerkung
Benutzer von Asterisk 1.2 müssen anstatt dialplan
show
immer show dialplan
eingeben.
Ein paar Beispiele:
[general]
[verkauf]
include => intern
include => extern
[intern]
exten => 2000,1,Dial(SIP/2000)
[extern]
exten => 03012345678,1,Dial(SIP/03012345678)
Wenn mit diesem Dialplan im Context
verkauf
die
Nummer 2000 angerufen wird, dann können wir mit dem CLI-Befehl
dialplan show 2000@verkauf
den Ablauf
analysieren:
*CLI> dialplan show 2000@verkauf
[ Included context 'intern' created by 'pbx_config' ]
'2000' => 1. Dial(SIP/2000) [pbx_config]
-= 1 extension (1 priority) in 1 context. =-
*CLI>
Wenn wir jetzt im Context
verkauf
wie folgt erweitern
...
[general]
[verkauf]
include => intern
include => extern
exten => 2000,1,Answer()
exten => 2000,2,Playback(hello-world)
exten => 2000,3,Hangup()
[intern]
exten => 2000,1,Dial(SIP/2000)
[extern]
exten => 03012345678,1,Dial(SIP/03012345678)
... dann bekommen wir folgende Analyse des Dialplans
angezeigt:
*CLI> dialplan show 2000@verkauf
[ Context 'verkauf' created by 'pbx_config' ]
'2000' => 1. Answer() [pbx_config]
2. Playback(hello-world) [pbx_config]
3. Hangup() [pbx_config]
[ Included context 'intern' created by 'pbx_config' ]
'2000' => 1. Dial(SIP/2000) [pbx_config]
-= 2 extensions (4 priorities) in 2 contexts. =-
*CLI>
Asterisk wird also den Sprachbaustein
hello-world
abspielen und nicht zum Telefon 2000
durchstellen, und das, obwohl das Include vorher im Dialplan auftaucht.
Das liegt daran, dass erst alle Möglichkeiten innerhalb eines Contextes
und dann erst die Includes abgearbeitet werden.
Durch die Fähigkeit, Includes auch zeitgesteuert durchzuführen,
kann man mit diesem Mechanismus sehr leicht Tag- und Nachtschaltungen
durchführen.
include => context|<uhrzeit>|<wochentag>|<tag-des-monats>|<monat>
Die
Wochentage und Monate werden immer durch die ersten drei Buchstaben
des entsprechenden englischen Begriffs bestimmt. Die Wochentage heißen
also: mon, tue, wed, thu, fri, sat, sun.
Wenn eine Firma an Wochentagen von 9:00 bis 17:00 Uhr und
samstags von 9:00 bis 14:00 Uhr geöffnet hat, kann ein Dialplan für
sie wie folgt aussehen:
; Tag
include => tagschaltung|09:00-17:00|mon-fri|*|*
include => tagschaltung|09:00-14:00|sat|*|*
include => anrufbeantworter
[tagschaltung]
exten => 2000,1,Dial(SIP/2000)
[anrufbeantworter]
exten => 2000,1,VoiceMail(2000,u)