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.

3.4.1. Syntax

include => Name-des-anderen-Contextes

3.4.2. Beispiel

[general]

[verkauf]
include => intern
include => extern

[intern]
exten => 2000,1,Dial(SIP/2000)

[extern]
exten => 03012345678,1,Dial(SIP/03012345678)

3.4.3. 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.

3.4.4. Includes zeitgesteuert

Durch die Fähigkeit, Includes auch zeitgesteuert durchzuführen, kann man mit diesem Mechanismus sehr leicht Tag- und Nachtschaltungen durchführen.

Syntax

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.

Beispiel

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)