6.4. Makro

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!

Makro-Basics

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.
Weitere Informationen zu Makros finden Sie unter Abschnitt C.81, „Macro().

Tipp

Mit der Applikation MacroExclusive() kann man sicherstellen, dass das konkrete Makro immer nur einmal zu einem gegebenen Zeitpunkt aufgerufen wird (siehe Abschnitt C.82, „MacroExclusive()).