Ruft ein zuvor definiertes Makro auf, aber nur eines zu einem
gegebenen Zeitpunkt.
MacroExclusive(macroname
[,Arg1
[,Arg2
[,...
]]])
Führt – wie Macro()
– ein im Context
macro-macroname
definiertes Makro
aus (und nur das eine!), indem es zur s
-Extension dieses
Contextes springt und nach der Ausführung des Makros zurückkehrt. Wird das
Makro, während es bereits läuft, an einer anderen Stelle des Dialplanes noch
einmal aufgerufen, so muss diese Instanz warten, bis das erste Makro fertig
abgearbeitet ist.
Die angerufene Extension, Context und Priorität sind innerhalb des
Makros in ${MACRO_EXTEN}
, ${MACRO_CONTEXT}
und
${MACRO_PRIORITY}
verfügbar. Die Parameter Arg1
,
Arg2
... werden im Makro-Context zu ${ARG1}
,
${ARG2}
usw.
Macro()
liefert -1 zurück, falls irgendein Schritt des
Makros -1 zurückliefert, sonst 0. Falls bei Beendigung des Ablaufs
${MACRO_OFFSET}
gesetzt ist, versucht die Anwendung, bei
Priorität n+1+MACRO_OFFSET
fortzufahren, falls ein solcher
Schritt existiert, sonst bei n+1.
Falls die Goto()
-Anwendung aus dem Makro heraus
aufgerufen wird, wird das Makro enden und die Kontrolle an das Ziel von
Goto()
gehen.
; ein Makro definieren, das vom übergebenen Wert herunterzählt:
[macro-countdown]
exten => s,1,Set(COUNT=${ARG1})
exten => s,n,While($[ ${COUNT} > 0])
exten => s,n,SayNumber(${COUNT})
exten => s,n,Set(COUNT=$[ ${COUNT} - 1 ])
exten => s,n,EndWhile()
[default]
exten => 123,1,MacroExclusive(countdown,3) ; das Makro "countdown" mit ARG1=3 aufrufen
exten => 124,1,MacroExclusive(countdown,5) ; das Makro "countdown" mit ARG1=5 aufrufen
— in Asterisk 1.2 nicht vorhanden —