Ein Makro ist eine Art Unterprogramm. Es kann komplexe Workflows
enthalten und dann im restlichen Dialplan immer mit einer einzigen Zeile
aufgerufen werden. Ein einfaches Beispiel kann so
aussehen:
[macro-anruf]
exten => s,1,Dial(SIP/${MACRO_EXTEN},10)
exten => s,n,VoiceMail(${MACRO_EXTEN})
Ein solches Makro würde im Rest des Dialplans dann wie folgt
aufgerufen werden:
[verkauf]
exten => _2XXX,1,Macro(anruf)
[hausmeister]
exten => _2XXX,1,Macro(anruf)
Bei einem zweizeiligen Makro ist der Effekt natürlich nicht so groß
wie bei einem langen Makro, aber es ist klar, worum es geht.
Die Benutzung oder Nichtbenutzung von Makros spaltet die
Asterisk-Entwicklergemeinde in zwei Lager. Für die eine Hälfte machen sie
den Dialplan übersichtlicher, und für die andere Hälfte machen sie ihn
total unübersichtlich. Entscheiden Sie selbst, zu welcher Gruppierung Sie
gehören!
Bei der Definition eines Makros sind folgende Punkte zu
beachten:
Bei der Definition eines Makros gibt es nur eine Extension
(die s
-Extension).
Auf die ursprünglichen Variablen
${EXTEN}
und
${CONTEXT}
kann innerhalb des Makros nicht
direkt zugegriffen werden. Das geschieht über die Variablen
${MACRO_EXTEN}
und
${MACRO_CONTEXT}
.
Beim Aufruf eines Makros können zusätzliche Argumente
übergeben werden (durch Komma oder Pipe abgetrennt). Diese können im
Makro mit ${ARGn}
(n
ist dabei
eine natürliche Zahl) abgerufen werden.
Ein Makro wird durch [macro-macroname]
definiert
und mit der Applikation Macro()
im Dialplan
aufgerufen.