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
2. Macros no Asterisk
São sub-rotinas que tem o objetivo de simplificar o
plano de discagem eliminando a necessidade de
repetição de regras.
As macros funcionam como funções dentro do plano
discagem onde pode ser passado parâmetros a serem
executados dentro da macro.
3. 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.
4. Macros no Asterisk
As macros funcionam semelhantes aos contextos dentro do
arquivo 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és
da extensão s do asterisk que significa start, ou, seja não
pode ser usada nenhuma extensão diferente de s.
5. 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 de
comandos para cada extensão.
Sintaxe na chamada de uma Macro:
Macro(NomeDaMacro, arg1, arg2,..., argN)
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 de
ARGn acordo com a ordem de chamada.
Contém o valor da variável CONTEXT durante a chamada da
MACRO_CONTEXT macro.
Contém o valor da variável EXTEN durante a chamada da
MACRO_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.
10. Macros no Asterisk
Comando Goto:
O comando Goto, muda a ordem de execução do plano de
discagem.
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. 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)
exten=> _40XX,n(indisponivel),VoiceMail(${EXTEN},u)
exten=> _40XX,n,HangUp()
exten=> _40XX,n(ocupado),VoiceMail(${EXTEN},b)
exten=> _40XX,n,HangUp()
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:
Sintaxe:
GoToIf(expressão lógica ? [destino se verdadeiro] : [destino se falso])
13. Macros no Asterisk
Operadores 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. Macros no Asterisk
Operadores 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. 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.
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:
VARIÁVEL DESCRIÇÃO
CHANUNAVAIL 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 fosse
CANCEL completada.
DONTCALL Chamadas são rejeitadas, pelo modo de privacidade.
O destino decidiu enviar a chamada para o menu, pelo modo de
TORTURE privacidade.
INVALIDARGS Alguns dos argumentos passados estavam inválidos.
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:
;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. 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:
;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. 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:
;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
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).
Sintaxe:
IF(expressão?valor_se_verdadeiro:valor_se_falso)
23. Macros no Asterisk
Exemplo 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ível
exten => s,n,HangUp()
exten=> s,n(busy),VoiceMail(${MACRO_EXTEN},b) ;Ocupado
exten => s,n,HangUp()
24. Macros no Asterisk
Exemplo 7 – Sala de Conferência:
[ramais]
include=>conferencia
include=>gravacao
[conferencia]
exten => _3456XXXX,1,Macro(conferencia,${EXTEN:-4},3)
[macro-conferencia]
exten=> s,1,Answer
exten=> 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. Macros no Asterisk
Comando 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. 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. 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.
;meetme.conf
[rooms]
conf=>sala,senha
;Exemplo
conf=> 2020
conf=> 2020,123456
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}
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. 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 contextos
dentro de um plano de discagem, fazendo o uso do conceito de
funções e passagem de parâmetros que são utilizados em
linguagens de programação.
As macros podem ser usadas para todos os tipos de
funcionalidades no asterisk, como URA, Voicemail, Meetme,
Filas, SIP, IAX e etc.
Fazer uso de macros é uma boa pratica para construção do plano
de discagem.
30. Contato, Criticas, Sugestões e Dúvidas
Email:
vicente.proj@hotmail.com
Endereço do You Tube:
http://www.youtube.com/user/voipjava
Web sites sugeridos para pesquisa:
www.asterisk.org
www.digium.com
www.voip-info.org