Executes a previously defined macro.
Macro(macroname[,arg1[,arg2[,...]]])
Executes a macro defined in the context
macro- by handing the
channel over to the macronames extension in the macro and returning
after the macro has finished running.
The called extension, context and priority are passed to the
macro in the variables ${MACRO_EXTEN},
${MACRO_CONTEXT} and ${MACRO_PRIORITY}. The
arguments are passed to the macro in ${ARG1},
${ARG2}, and so on.
Macro() returns -1 if any step in
the macro returns -1, otherwise it returns 0. If the variable
${MACRO_OFFSET} is set when the macro finishes, the
application will continue executing at priority
n+1+MACRO_OFFSET if it exists,
otherwise it will continue at n+1.
If Goto() is called from within
the macro, macro execution ends and the call continues in the priority
specified in Goto().
; define a macro that counts down from the provided value:
[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,Macro(countdown,3) ; call the macro "countdown" with AR
G1=3
exten => 124,1,Macro(countdown,5) ; call the macro "countdown" with AR
G1=5
|
|
|
Internal help for this application in Asterisk 1.4: -= Info about application 'Macro' =-
[Synopsis]
Macro Implementation
[Description]
Macro(macroname|arg1|arg2...): Executes a macro using the context
'macro-<macroname>', jumping to the 's' extension of that context and
executing each step, then returning when the steps end.
The calling extension, context, and priority are stored in ${MACRO_EXTEN
},
${MACRO_CONTEXT} and ${MACRO_PRIORITY} respectively. Arguments become
${ARG1}, ${ARG2}, etc in the macro context.
If you Goto out of the Macro context, the Macro will terminate and contr
ol
will be returned at the location of the Goto.
If ${MACRO_OFFSET} is set at termination, Macro will attempt to continue
at priority MACRO_OFFSET + N + 1 if such a step exists, and N + 1 otherw
ise.
WARNING: Because of the way Macro is implemented (it executes the priori
ties
contained within it via sub-engine), and a fixed per-thread
memory stack allowance, macros are limited to 7 levels
of nesting (macro calling macro calling macro, etc.); It
may be possible that stack-intensive applications in deeply nes
ted macros
could cause asterisk to crash earlier than this limit.
diff output to internal help in Asterisk 1.2: 22,23c22,23 < may be possible that stack-intensive applications in deeply n ested macros < could cause asterisk to crash earlier than this limit. --- > may be possible that stack-intensive applications in deeply n ested > macros could cause asterisk to crash earlier than this limit. |
See also. the section called “Goto()”, the section called “Gosub()”