Aplicações do Dialplan do Asterisk 20
Comando:
Macro()
Sinopse:
Implementação de Macro.
Descrição:
Executa uma macro utilizando o contexto especificado pelo nome da macro, saltando para a extensão 's' desse contexto e executando cada passo sequencialmente. O controle retorna ao ponto de chamada quando os passos da macro são concluídos.
A extensão, contexto e prioridade da chamada original são armazenados nas variáveis MACRO_EXTEN, MACRO_CONTEXT e MACRO_PRIORITY, respectivamente. Os argumentos passados para a macro se tornam acessíveis como ARG1, ARG2, etc., dentro do contexto da macro.
Se um comando Goto for encontrado fora do contexto da macro, a execução da macro será interrompida e o controle retornará ao ponto onde o Goto foi executado.
Se a variável MACRO_OFFSET estiver definida no momento da finalização da macro, a macro tentará continuar a execução na prioridade MACRO_OFFSET + N + 1, se essa prioridade existir, ou N + 1 caso contrário.
Atenção: Devido à forma como a macro é implementada (executando as prioridades dentro dela através de um sub-motor) e a uma alocação fixa de pilha de memória por thread, as macros são limitadas a 7 níveis de aninhamento (macro chamando macro, chamando macro, etc.). Aplicações que utilizam muita pilha em macros profundamente aninhadas podem causar a falha do Asterisk antes desse limite. Recomenda-se que, se você precisar aninhar chamadas de macro profundamente, use a aplicação Gosub (que agora permite argumentos como uma Macro) com chamadas explícitas a Return().
Atenção: O uso da aplicação WaitExten dentro de uma macro não funcionará como esperado. Utilize a aplicação Read para ler DTMF de um canal que esteja executando uma macro.
Sintaxe:
Macro(name,arg1,[arg2[,...]])
Fonte: Asterisk Wiki