Asterisk app Macro
Приложение Asterisk Macro выполняет переход в специальный контекст, передавая специфические параметры и если приказано возвращается в исходный контекст.
Описание
При выполнении macro используется контекст macro-<name>, только со стандартным расширением 's'.
В этом контексте исполняются все назначенные шаги и по окончании возвращаются в родительский контекст,
где продолжается выполнение диалплана.
Вызываемые расширение (extension), контекст и приоритет сохраняются в переменных:
${MACRO_EXTEN}, ${MACRO_CONTEXT} и ${MACRO_PRIORITY} соответственно.
Аргументы становятся данными Macro-контекста.
Если произвести переход из Macro-контекста командой GoTo в другой контекст,
Macro утратит контроль и передаст его назначенному в 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 otherwise.
WARNING!!!: Because of the way Macro is implemented (it executes the priorities 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 nested macros could cause asterisk to crash earlier than this limit. It is advised that if you need to deeply nest macro calls, that you use the Gosub application (now allows arguments like a Macro) with explict Return() calls instead. WARNING!!!: Use of the application 'WaitExten' within a macro will not function as expected. Please use the 'Read' application in order to read DTMF from a channel currently executing a macro.
Синтаксис
Macro(name[,arg1[,arg2[,…]]])
Аргументы
name - Macro-<name> имя контекста.
См также
Использование Макросов в Asterisk
Вам может потребоваться создать множество екстеншенов (расширений) очень похожих друг на друга. Чтобы упростить работу с диалпланом используются Макросы. Для создания макроса используется контекст имя которого начинается с «macro-» и далее уникальное имя макроса. Выполнение макроса начинается с ектеншена 's'. В макросах используются локальные переменные:
${MACRO_EXTEN} – Екстеншен вызываемый макросом ${MACRO_CONTEXT} – Контекст вызываемый макросом ${MACRO_PRIORITY} – активный приоритет вызываемый макросом ${MACRO_OFFSET} – если установлено вызывает смещение n + ${MACRO_OFFSET} ${ARGn} – аргумент 'n' в макросе.
[macro-oneline] ; ; Однолинейный телефон ; ; ${ARG1} – Телефон ; exten => s,1,Dial(${ARG1},20) exten => s,2,Voicemail(u${MACRO_EXTEN}) exten => s,3,Hangup exten => s,102,Voicemail(b${MACRO_EXTEN}) exten => s,103,Hangup [macro-twoline] ; ; Двухлинейный телефон ; ; ${ARG1} – Телефон (линия) 1 ; ${ARG2} – Телефон (линия) 2 ; exten => s,1,Dial(${ARG1},20) exten => s,2,Voicemail(u${MACRO_EXTEN}) exten => s,102,Dial(${ARG2},20) exten => s,103,Voicemail(b${MACRO_EXTEN}) [default] exten => 1000,1,Macro(oneline,DAHDI/1) exten => 1001,1,Macro(oneline,SIP/1001) exten => 1002,1,Macro(twoline,DAHDI/3,DAHDI/4)
Когда макросы [macro-oneline] и [macro-twoline] созданы, в контексте [default] надо написать только одну сроку для выполнения нескольких стандартных действий.