Name

Macro() — Calls a previously defined macro

Synopsis

    Macro(macroname,arg1,arg2...)

Executes a macro defined in the context named 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 arg1, arg2, etc. become ${ARG1}, ${ARG2}, etc. in the macro context.

Macro() returns -1 if any step in the macro returns -1, and 0 otherwise. If ${MACRO_OFFSET} is set at termination, this application will attempt to continue at priority MACRO_OFFSET+n+1 if such a step exists, and at n+1 otherwise. (In both cases, n stands for the current priority.)

If you call the Goto() application inside of the macro, the macro will terminate and control will go to the destination of the Goto().

    ; define a macro to count down from the specified value
    [macro-countdown]
    exten => s,1,Set(COUNT=${ARG1})
    exten => s,2,While($[ ${COUNT} > 0])
    exten => s,3,SayNumber(${COUNT})
    exten => s,4,Set(COUNT=$[ ${COUNT} - 1 ])
    exten => s,5,EndWhile()

    ; call our macro with two different values
    [example]
    exten => 123,1,Macro(countdown,10)
    exten => 124,1,Macro(countdown,5)

See Also

Goto(), Chapter 6

Get Asterisk: The Future of Telephony now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.