Macros no asterisk

2,525 views
2,412 views

Published on

Essa apresentação mostra a utilização de macros no asterisk.

Qualquer duvida podem mandar um email para:

vicente.proj@hotmail.com

Ou visitar o endereço do you tube que contém muitos vídeos ensinando a configurar o asterisk.

http://www.youtube.com/user/voipjava

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,525
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
130
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Macros no asterisk

  1. 1. Macros no Asterisk Vicente de Paula Nobrevicente.proj@hotmail.com
  2. 2. Macros no AsteriskSão sub-rotinas que tem o objetivo de simplificar oplano de discagem eliminando a necessidade derepetição de regras.As macros funcionam como funções dentro do planodiscagem onde pode ser passado parâmetros a seremexecutados dentro da macro.
  3. 3. Macros no AsteriskBenefí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.
  4. 4. Macros no AsteriskAs macros funcionam semelhantes aos contextos dentro doarquivo extensions.conf.Porém uma macro é definida através da seguinte sintaxe: [macro-Nome da Macro]Além disso as macros devem sempre ser executadas atravésda extensão s do asterisk que significa start, ou, seja nãopode ser usada nenhuma extensão diferente de s.
  5. 5. Macros no AsteriskAs macros são usadas para processar extensões de formaque não seja necessário a criação de varias linhas decomandos para cada extensão.Sintaxe na chamada de uma Macro: Macro(NomeDaMacro, arg1, arg2,..., argN)
  6. 6. Macros no AsteriskExemplo 1 – Uso Simples:[ramais]exten=> _40XX,1,Macro(BemVindo, hello-world, SIP/${EXTEN},20)[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()
  7. 7. Macros no Asterisk Variáveis de Canal Nome da Variável Descrição Usado para passar parâmetros para as macros, são enumerados deARGn acordo com a ordem de chamada. Contém o valor da variável CONTEXT durante a chamada daMACRO_CONTEXT macro. Contém o valor da variável EXTEN durante a chamada daMACRO_EXTEN macro.MACRO_PRIORITY Contém o número da prioridade que chamou a macro. Influencia na prioridade de execução ao sair da macro.MACRO_OFFSET 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.
  8. 8. Macros no AsteriskExemplo 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()
  9. 9. Macros no AsteriskExemplo 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
  10. 10. Macros no AsteriskComando Goto:O comando Goto, muda a ordem de execução do plano dediscagem.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)
  11. 11. Macros no AsteriskExemplo 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)exten=> _40XX,n(indisponivel),VoiceMail(${EXTEN},u)exten=> _40XX,n,HangUp()exten=> _40XX,n(ocupado),VoiceMail(${EXTEN},b)exten=> _40XX,n,HangUp()
  12. 12. Macros no AsteriskComando GotoIf: O comando GoToIf, muda o fluxo do plano de discagem de acordo com o resultado de uma expressão lógica:Sintaxe:GoToIf(expressão lógica ? [destino se verdadeiro] : [destino se falso])
  13. 13. Macros no AsteriskOperadores Lógicos: O exemplo anterior usou o operador lógico | (Ou, Or do inglês) na função GoToIf, existem vários operadores lógicos, como descrito na tabela abaixo: Operadores Lógicos Descrição & E | OU = Igual > Maior que < Menor que >= Maior ou igual que <= Menor ou igual que != Diferente
  14. 14. Macros no AsteriskOperadores Matemáticos: No asterisk também existem os operadores matemáticos, que podem ser usados para sofisticar o seu plano de discagem, como descrito na tabela abaixo: Operadores Matemáticos Descrição + Soma - Subtração * Multiplicação / Divisão % Modulo
  15. 15. Macros no Asterisk Exemplos: Operação Descrição$[${TOTAL} + 4] Soma 4 ao conteúdo da variável TOTAL. Se a variável ${EXTEN} for igual a 4000,$[${EXTEN} = 4000] retorna 1 para verdadeiro, caso contrario 0 para falso.$[${DIALSTATUS} != BUSY] Se a variável DIALSTATUS for diferente de BUSY, retorna 1 para verdadeiro, caso contrario 0 para falso. Se o VALOR1 for maior ou igual a 10 e o$[${VALOR1}>=10 & ${VALOR2}<=20] VALOR2 for menor igual a 20 retorna 1 para verdadeiro, caso contrario 0 para falso. Se o PREFIXO for igual a 085 ou se o${${PREFIXO}=085 | ${PREFIXO}=011] PREFIXO for igual a 011, retorna 1 para verdadeiro, caso contrario 0 para falso.
  16. 16. Macros no AsteriskExemplo 4 - Criação da Macro Correio:[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,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()
  17. 17. Macros no AsteriskRetorno 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: VARIÁVEL DESCRIÇÃOCHANUNAVAIL Canal de destino indisponível.NOANSWER O destino não atendeu a chamada.BUSY O destino estava ocupado.ANSWER Chamada atendida.CONGESTION Não havia canais disponíveis para completar a chamada. O originador da chamada cancelou antes que a chamada fosseCANCEL completada.DONTCALL Chamadas são rejeitadas, pelo modo de privacidade. O destino decidiu enviar a chamada para o menu, pelo modo deTORTURE privacidade.INVALIDARGS Alguns dos argumentos passados estavam inválidos.
  18. 18. Macros no AsteriskExemplo 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: ;Arquivo sip.conf ;Arquivo sip.conf [general] [4001] port=5060 host=dynamic bindaddr=0.0.0.0 type=friend disallow=all context=ramais allow=alaw username=4001 language=pt_BR secret=4001 callerid=vicente<4001> mailbox=4001 ;mailbox=200@email
  19. 19. Macros no AsteriskExemplo 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: ;Arquivo iax.conf ;Arquivo iax.conf [general] [3001] port=4569 host=dynamic bindaddr=0.0.0.0 type=friend disallow=all auth=md5 allow=gsm context=ramais language=pt_BR username=3001 secret=3001 callerid=3001 mailbox=3001 ;mailbox=300@email
  20. 20. Macros no AsteriskExemplo 4 – Observação – Criação do VoiceMail: Para que funcionem os exemplos anteriores, devem-se criar as contas SIP ou IAX e o VoiceMail: ;Arquivo voicemail.conf [general] format=gsm serveremail=asterisk@hotmail.com maxlogins=5 maxmsg=100 delete=no attach=yes [email] include => general 200 =>123,vicente,vicente.proj@hotmail.com 300 => 789564,maria,maria@gmail.com [4001] include => general 4001 => 845962,jose,jose@yahoo.com.br [3001] include => general 3001 => 145263,fulano,fulano@email.com
  21. 21. Macros no AsteriskExemplo 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(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})
  22. 22. Macros no AsteriskComando 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).Sintaxe:IF(expressão?valor_se_verdadeiro:valor_se_falso)
  23. 23. Macros no AsteriskExemplo 6 – Uso de Variáveis de Canal:[empresa]exten => _40XX,1,Macro(RH, SIP/${EXTEN},20,tTwW)[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()
  24. 24. Macros no AsteriskExemplo 7 – Sala de Conferência:[ramais]include=>conferenciainclude=>gravacao[conferencia]exten => _3456XXXX,1,Macro(conferencia,${EXTEN:-4},3)[macro-conferencia]exten=> 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
  25. 25. Macros no AsteriskComando Set: O comando Set possibilita definir o valor de uma variável em tempo de execução. Sintaxe: Set(nome_da_variável = valor_da_variável)
  26. 26. Macros no Asterisk Exemplo 7 – Sala de Conferência – Gravação do Anuncio:[gravacao]exten=>200,1,Wait(1)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()
  27. 27. Macros no AsteriskExemplo 7 – Sala de Conferência – Criação das SalasPara que funcione o exemplo anterior é preciso criaruma sala de conferência no arquivo meetme.conf.;meetme.conf[rooms]conf=>sala,senha;Exemploconf=> 2020conf=> 2020,123456
  28. 28. Macros no AsteriskManipulaçã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} 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
  29. 29. ConclusãoAs macros no asterisk deixam o código mais simples de se fazeralterações.Pode-se utilizar uma mesma macro para diversos outros contextosdentro de um plano de discagem, fazendo o uso do conceito defunções e passagem de parâmetros que 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.
  30. 30. Contato, Criticas, Sugestões e DúvidasEmail:vicente.proj@hotmail.comEndereço do You Tube:http://www.youtube.com/user/voipjavaWeb sites sugeridos para pesquisa:www.asterisk.orgwww.digium.comwww.voip-info.org

×