30
Macros no Asterisk Vicente de Paula Nobre [email protected]

Macros No Asterisk

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

Page 1: Macros No Asterisk

Macros no Asterisk

Vicente de Paula [email protected]

Page 2: Macros No Asterisk

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.

Page 3: Macros No Asterisk

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.

Page 4: Macros No Asterisk

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.

Page 5: Macros No Asterisk

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)

Page 6: Macros No Asterisk

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()

Page 7: Macros No Asterisk

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.

Page 8: Macros No Asterisk

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()

Page 9: Macros No Asterisk

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)

Page 10: Macros No Asterisk

� 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)

Page 11: Macros No Asterisk

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()

Page 12: Macros No Asterisk

� 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])

Page 13: Macros No Asterisk

� 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

Page 14: Macros No Asterisk

� 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

Page 15: Macros No Asterisk

� 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.

Page 16: Macros No Asterisk

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()

Page 17: Macros No Asterisk

� 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.

Page 18: Macros No Asterisk

� 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

Page 19: Macros No Asterisk

� 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

Page 20: Macros No Asterisk

� 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]

Page 21: Macros No Asterisk

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})

Page 22: Macros No Asterisk

� 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)

Page 23: Macros No Asterisk

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()

Page 24: Macros No Asterisk

� 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

Page 25: Macros No Asterisk

� 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)

Page 26: Macros No Asterisk

� 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()

Page 27: Macros No Asterisk

� 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

Page 28: Macros No Asterisk

� 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

Page 29: Macros No Asterisk

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.

Page 30: Macros No Asterisk

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