Includes im Dialplan

Includes bringen Struktur und Ordnung in grosse Dialpläne. Mit einem Include können andere Contexte in den aktuellen Context eingebaut (also "included") werden.

Syntax

include => Name-des-anderen-Contextes

Beispiel

[general]

[verkauf]
include => intern
include => extern

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

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

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 vollzogen 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 heraus zu finden, 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 analysieren:

*CLI> dialplan show 2000@verkauf
[ Included context 'intern' created by 'pbx_config' ]
  '2000' =>         1. Dial(SIP/2000)                             [pbx_c
onfig]

-= 1 extension (1 priority) in 1 context. =-
*CLI>

Wenn wir jetzt im Context verkauf jetzt 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 Dialplanes aufgezeigt:

*CLI> dialplan show 2000@verkauf
[ Context 'verkauf' created by 'pbx_config' ]
  '2000' =>         1. Answer()                                   [pbx_c
onfig]
                    2. Playback(hello-world)                      [pbx_c
onfig]
                    3. Hangup()                                   [pbx_c
onfig]
[ Included context 'intern' created by 'pbx_config' ]
  '2000' =>         1. Dial(SIP/2000)                             [pbx_c
onfig]


-= 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, das erst alle Möglichkeiten innerhalb eines Contextes und dann erst die Includes abgearbeitet werden.

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 Begriffes bestimmt. Wochentage: 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. Dann kann ein Dialplan dafür 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)