O'Reilly logo

Asterisk: The Future of Telephony by Leif Madsen, Jared Smith, Jim Van Meggelen

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required