Upload
vicente-de-paula
View
149
Download
21
Embed Size (px)
DESCRIPTION
Essa apresentação contém os benefícios de utilização de macros no asterisk.Qualquer duvida podem mandar um email para:[email protected] visitar o endereço do you tube que contém muitos vídeos ensinando a configurar o asterisk.http://www.youtube.com/user/voipjava
Citation preview
Macros no Asterisk
Vicente de Paula [email protected]
Macros no Asterisk� São sub-rotinas que tem o objetivo de simplificar o
plano de discagem eliminando a necessidade derepetição de regras.
� As macrosfuncionamcomo funçõesdentrodo plano� As macrosfuncionamcomo funçõesdentrodo planodiscagem onde pode ser passado parâmetros a seremexecutados dentro da macro.
Macros no Asterisk� Benefícios na Utilização de Macros:
� Centraliza a lógica do código em um único ponto.� Facilidade na manutenção.� Melhor Organização do plano de discagem.� Melhor Organização do plano de discagem.
Macros no Asterisk� As macros funcionam semelhantes aos contextos dentro do
arquivoextensions.conf.
� Porém uma macro é definida através da seguinte sintaxe:
� [macro-Nome da Macro]� [macro-Nome da Macro]
� Além disso as macros devem sempre ser executadas atravésda extensãos do asterisk que significa start, ou, seja nãopode ser usada nenhuma extensão diferente des.
Macros no Asterisk� As macros são usadas para processar extensões de forma
que não seja necessário a criação de varias linhas decomandos para cada extensão.
Sintaxe na chamada de uma Macro:� Sintaxe na chamada de uma Macro:
�Macro(NomeDaMacro, arg1, arg2,..., argN)
Macros no Asterisk� Exemplo 1 – Uso Simples:
[ramais]exten=> _40XX,1,Macro(BemVindo, hello-world, SIP/${EXTEN},20)
[macro-BemVindo][macro-BemVindo]exten=> s,1,Answerexten=> s,n,Wait(1)exten=> s,n,PlayBack(${ARG1})exten=> s,n,Dial (${ARG2}, ${ARG3})exten=> s,n,HangUp()
Macros no Asterisk
Variáveis de Canal Nome da Variável Descrição
ARGnUsado para passar parâmetros para as macros, são enumerados de acordo com a ordem de chamada.
Contém o valorda variável CONTEXT durante a chamada da MACRO_CONTEXT
Contém o valorda variável CONTEXT durante a chamada da macro.
MACRO_EXTENContém o valor da variável EXTEN durante a chamada da macro.
MACRO_PRIORITY Contém o número da prioridade que chamou a macro.
MACRO_OFFSETInfluencia na prioridade de execução ao sair da macro.Se ${MACRO_OFFSET} , for colocado no termino, a macro tentará continuar na prioridade MACRO_OFFSET+N+1, se tal passo existir e N+1caso contrario.
Macros no Asterisk� Exemplo 2 – Correio de Voz:
[ramais]exten=> _40XX,1,Macro(chamada, SIP/${EXTEN},20, tTwW, 200@email)
[macro-chamada]exten=> s,1,Dial(${ARG1}, ${ARG2}, ${ARG3})exten => s,2,GoToIf($[${DIALSTATUS} = ANSWER] ? 4)exten => s,3,VoiceMail(${ARG4}) exten=> s,4,HangUp()
Macros no Asterisk� Exemplo 3 – Correio de Voz Melhorado:
[ramais]exten=> _40XX,1,Macro(ramal, SIP, ${EXTEN},200@email)exten=> _30XX,1,Macro(ramal, IAX2, ${EXTEN}, 300@email)
[macro-ramal]exten=> s,1,Dial(${ARG1}/${ARG2},20,tTwW)exten=> s,n,Goto(s-${DIALSTATUS},1)
exten=> s-BUSY,1,VoiceMail(${ARG3},b) ; Ocupadoexten=> s-NOANSWER,1,VoiceMail(${ARG3},u) ; Indisponívelexten=> s-CHANUNAVAIL,1,VoiceMail(${ARG3},u) ; Indisponível
exten=> _30XX,1,Macro(ramal, IAX2, ${EXTEN}, 300@email)
� Comando Goto:� O comando Goto, muda a ordem de execução do plano de
discagem.
Macros no Asterisk
Sintaxe:
;Desvia para um contexto, extensão e prioridade especificada.GoTo(contexto, extensão, prioridade)
;Desvia para a extensão e a prioridade dentro do próprio contexto.GoTo(extensão, prioridade)
;Desvia para prioridade especificada dentro do próprio contexto.GoTo(prioridade)
Macros no Asterisk� Exemplo 3 - Sem o Uso da Macro:
[ramais]exten=> _40XX,1,Dial(SIP/${EXTEN},20,tTwW)exten=> _40XX,n,GotoIf($[${DIALSTATUS}=CHANUNAVAIL | ${DIALSTATUS}=NOANSWER] ? indisponivel: ocupado)${DIALSTATUS}=NOANSWER] ? indisponivel: ocupado)exten=> _40XX,n(indisponivel),VoiceMail(${EXTEN},u)exten=> _40XX,n,HangUp()exten=> _40XX,n(ocupado),VoiceMail(${EXTEN},b)exten=> _40XX,n,HangUp()
� Comando GotoIf:�O comando GoToIf, muda o fluxo do plano de discagem de
acordo com o resultado de uma expressão lógica:
Macros no Asterisk
Sintaxe:Sintaxe:
GoToIf(expressão lógica ? [destino se verdadeiro] : [destino se falso])
� Operadores Lógicos:�O exemplo anterior usou o operador lógico | (Ou, Or do
inglês) na funçãoGoToIf, existem vários operadoreslógicos, como descrito na tabela abaixo:
Macros no Asterisk
Operadores Lógicos Descrição
& E
| OU
= Igual
> Maior que
< Menor que
>= Maior ou igual que
<= Menor ou igual que
!= Diferente
� Operadores Matemáticos:�No asterisk também existem os operadores matemáticos,
que podem ser usados para sofisticar o seu plano dediscagem, como descrito na tabela abaixo:
Macros no Asterisk
Operadores Matemáticos DescriçãoOperadores Matemáticos Descrição
+ Soma
- Subtração
* Multiplicação
/ Divisão
% Modulo
� Exemplos:
Macros no Asterisk
Operação Descrição
$[${TOTAL} + 4] Soma 4 ao conteúdo da variável TOTAL.
$[${EXTEN} = 4000]Se a variável ${EXTEN}for igual a 4000,retorna 1 para verdadeiro, caso contrario 0parafalso.parafalso.
$[${DIALSTATUS} != BUSY] Se a variável DIALSTATUS fordiferentede BUSY, retorna 1 para verdadeiro, casocontrario 0 para falso.
$[${VALOR1}>=10 & ${VALOR2}<=20]Se o VALOR1for maior ou igual a 10 e oVALOR2 for menor igual a 20 retorna 1para verdadeiro, caso contrario 0 para falso.
${${PREFIXO}=085 | ${PREFIXO}=011]Se o PREFIXOfor igual a 085 ou se oPREFIXO for igual a 011, retorna 1 paraverdadeiro, caso contrario 0 para falso.
Macros no Asterisk� Exemplo 4 - Criação da Macro Correio:
[macro-ramal]exten=> s,1,Dial(${ARG1}/${ARG2},20,tTwW)
[ramais]exten=> _40XX,1,Macro(ramal, SIP, ${EXTEN})exten=> _30XX,1,Macro(ramal, IAX2, ${EXTEN})
exten=> s,1,Dial(${ARG1}/${ARG2},20,tTwW)exten=> s,n,Macro(correio,${DIALSTATUS},${ARG2})
[macro-correio]exten=> s,1,GotoIf($[${ARG1}=CHANUNAVAIL|${ARG1}=NOANSWER|${ARG1}=CONGESTION]?indisponivel:ocupado)exten=> s,n(indisponivel),VoiceMail(${ARG2},u) ; Indisponívelexten=> s,n,HangUp()exten=> s,n(ocupado),VoiceMail(${ARG2},b) ; Ocupadoexten=> s,n,HangUp()
� Retorno da Variável DIALSTATUS:�O exemplo anterior, usou alguns tipos de status que a variável
DIALSTATUS do asterisk retorna, a tabela abaixo os descreve:
Macros no Asterisk
VARIÁVEL DESCRIÇÃO
CHANUNAVAIL Canal de destino indisponível.
NOANSWER O destino não atendeu a chamada.
BUSY O destino estava ocupado.BUSY O destino estava ocupado.
ANSWER Chamada atendida.
CONGESTION Não havia canais disponíveis para completar a chamada.
CANCELO originador da chamada cancelou antes que a chamada fosse completada.
DONTCALL Chamadas são rejeitadas, pelo modo de privacidade.
TORTUREO destino decidiu enviar a chamada para o menu, pelo modo de privacidade.
INVALIDARGS Alguns dos argumentos passados estavam inválidos.
� Exemplo 4 – Observação – Criação da Conta SIP:� Para que funcionem os exemplos anteriores, devem-se criar as
contas SIP ou IAX e o VoiceMail:
Macros no Asterisk
;Arquivo sip.conf[4001]host=dynamic
;Arquivo sip.conf[general]port=5060 host=dynamic
type=friendcontext=ramaisusername=4001secret=4001callerid=vicente<4001>mailbox=4001;mailbox=200@email
port=5060bindaddr=0.0.0.0disallow=allallow=alawlanguage=pt_BR
� Exemplo 4 – Observação – Criação da Conta IAX:� Para que funcionem os exemplos anteriores, devem-se criar as
contas SIP ou IAX e o VoiceMail:
Macros no Asterisk
;Arquivo iax.conf[3001]host=dynamic
;Arquivo iax.conf[general]port=4569 host=dynamic
type=friendauth=md5context=ramaisusername=3001secret=3001callerid=3001mailbox=3001;mailbox=300@email
port=4569bindaddr=0.0.0.0disallow=allallow=gsmlanguage=pt_BR
� Exemplo 4 – Observação – Criação do VoiceMail:� Para que funcionem os exemplos anteriores, devem-se criar as
contas SIP ou IAX e o VoiceMail:
Macros no Asterisk
;Arquivo voicemail.conf[general][email protected]=5maxmsg=100maxmsg=100delete=noattach=yes[email]include => general200 =>123,vicente,[email protected] => 789564,maria,[email protected][4001]include => general4001 => 845962,jose,[email protected][3001]include => general3001 => 145263,fulano,[email protected]
Macros no Asterisk� Exemplo 5 - Criação da Macro status:
[ramais]exten=> _40XX,1,Macro(ramal,SIP,${EXTEN})exten=> _30XX,1,Macro(ramal,IAX2,${EXTEN})
[macro-ramal]exten=> s,1,Dial(${ARG1}/${ARG2},20,tTwW)exten=> s,n,GotoIf($[${DIALSTATUS}!=ANSWER}]?status:desliga)exten=> s,n,GotoIf($[${DIALSTATUS}!=ANSWER}]?status:desliga)exten=> s,n(status),Macro(status,${DIALSTATUS},${ARG2})exten=> s,n(desliga),HangUp()
[macro-status]exten=> s,1,Set(STATUS=${IF($[${ARG1}=NOANSWER|${ARG1}=CHANUNAVAIL|${ARG1}=CONGESTION] ? u:b)})exten=> s,n,Macro(correio,${ARG2},${STATUS})
[macro-correio]exten=> s,1,VoiceMail(${ARG1},${ARG2})
� Comando IF: �O comando IF, testa uma expressão lógica.�Se a expressão for verdadeira, esse comando retorna o
valor posterior a ? (interrogação), se não retorna o valor posterior aos : (dois pontos).
Macros no Asterisk
posterior aos : (dois pontos).
Sintaxe:
IF(expressão?valor_se_verdadeiro:valor_se_falso)
Macros no Asterisk� Exemplo 6 – Uso de Variáveis de Canal:
[empresa]exten => _40XX,1,Macro(RH, SIP/${EXTEN},20,tTwW)
[macro-RH][macro-RH]exten=> s,1,Dial(${ARG1},${ARG2},${ARG3}) exten=> s,n,GotoIf($[${DIALSTATUS}=CHANUNAVAIL]?chanunavail:busy) exten=> s,n(chanunavail),VoiceMail(${MACRO_EXTEN},u) ;Indisponívelexten => s,n,HangUp()exten=> s,n(busy),VoiceMail(${MACRO_EXTEN},b) ;Ocupadoexten => s,n,HangUp()
� Exemplo 7 – Sala de Conferência:Macros no Asterisk
[ramais]include=>conferenciainclude=>gravacao
[conferencia]exten => _3456XXXX,1,Macro(conferencia,${EXTEN:-4},3)
[macro-conferencia]exten=> s,1,Answerexten=> s,1,Answerexten=> s,n,Set(quantidade= ${ARG2})exten=> s,n,MeetMeCount(${ARG1}, participantes)exten=> s,n,GotoIf($[${participantes}=${quantidade}]?desliga:sala)exten=> s,n(sala),MeetMe(${ARG1})exten=> s,n(desliga),NoOp(Esta sala de conferencia esta com sua capacidade maxima!)exten=> s,n,PlayBack(/var/lib/asterisk/sounds/conferencia/anuncio)exten=> s,n,NoOp(Com ${participantes} participantes!)exten=> s,n,PlayBack(/var/lib/asterisk/sounds/conferencia/digito${participantes})exten=> s,n,Wait(1)exten=> s,n,HangUp
� Comando Set:�O comando Set possibilita definir o valor de uma
variável em tempo de execução.�Sintaxe:
Macros no Asterisk
Set(nome_da_variável = valor_da_variável)
� Exemplo 7 – Sala de Conferência – Gravação do Anuncio:
Macros no Asterisk
[gravacao]
exten=>200,1,Wait(1)exten=>200,n,PlayBack(beep)exten=>200,n,PlayBack(beep)exten=>200,n,Record(/var/lib/asterisk/sounds/conferencia/anuncio:gsm)exten=>200,n,HangUp()
exten=>201,1,Wait(1)exten=>201,n,PlayBack(beep)exten=>201,n,Record(/var/lib/asterisk/sounds/conferencia/digito3:gsm)exten=>201,n,HangUp()
� Exemplo 7 – Sala de Conferência – Criação das Salas
� Para que funcione o exemplo anterior é preciso criar uma sala de conferência no arquivo meetme.conf.
Macros no Asterisk
;meetme.conf;meetme.conf[rooms]conf=>sala,senha
;Exemploconf=> 2020conf=> 2020,123456
� Manipulação de Variáveis:�O exemplo anterior usou o conceito de substring.�O asterisk é capaz de manipular uma variável, retornado partes de
seu conteúdo inicial:�Suponha que a variável ${EXTEN} possua o valor 34561405:�Sintaxe:${variável:posição inicial:comprimento}
Macros no Asterisk
VARIÁVEL RETORNO
${EXTEN:1} 4561405
${EXTEN:0:1} 3
${EXTEN:2:5} 5614
${EXTEN:4:7} 1405
${EXTEN:-4} 1405
${EXTEN:-4:3} 140
Conclusão� As macros no asterisk deixam o código mais simples de se fazer
alterações.
� Pode-se utilizar uma mesma macro para diversos outros contextosdentro de um plano de discagem, fazendo o uso do conceito defunções e passagemde parâmetrosque são utilizados emfunções e passagemde parâmetrosque são utilizados emlinguagens de programação.
� As macros podem ser usadas para todos os tipos defuncionalidades no asterisk, como URA, Voicemail, Meetme,Filas, SIP, IAX e etc.
� Fazer uso de macros é uma boa pratica para construção do planode discagem.
Email:[email protected]
Endereço do You Tube:http://www.youtube.com/user/voipjava
Contato, Criticas, Sugestões e Dúvidas
http://www.youtube.com/user/voipjava
Web sites sugeridos para pesquisa:www.asterisk.org
www.digium.com
www.voip-info.org