• Nenhum resultado encontrado

Macros no Asterisk. Vicente de Paula Nobre

N/A
N/A
Protected

Academic year: 2021

Share "Macros no Asterisk. Vicente de Paula Nobre"

Copied!
30
0
0

Texto

(1)

Macros no Asterisk

Vicente de Paula Nobre

(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



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]

 [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:



Sintaxe na chamada de uma Macro:

(6)

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,Answer exten=> s,n,Wait(1)

exten=> s,n,PlayBack(${ARG1})

exten=> s,n,Dial (${ARG2}, ${ARG3}) exten=> s,n,HangUp()

(7)

Macros no Asterisk

Variáveis de Canal

Nome da Variável Descrição

ARGn

Usado para passar parâmetros para as macros, são enumerados de acordo com a ordem de chamada.

Contém o valor da variável CONTEXT durante a chamada da

MACRO_CONTEXT

Contém o valor da variável CONTEXT durante a chamada da macro.

MACRO_EXTEN

Conté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_OFFSET

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

(8)

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

(9)

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) ; Ocupado

exten=> s-NOANSWER,1,VoiceMail(${ARG3},u) ; Indisponível

exten=> s-CHANUNAVAIL,1,VoiceMail(${ARG3},u) ; Indisponível

(10)



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.

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

${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)



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:

(13)



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:

Macros no Asterisk

Operadores Lógicos Descrição

& E

| OU

= Igual

> Maior que

< Menor que

>= Maior ou igual que

<= Menor ou igual que

(14)



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:

Macros no Asterisk

Operadores Matemáticos Descrição Operadores Matemáticos Descrição

+ Soma

- Subtração

* Multiplicação

/ Divisão

(15)



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 0 para falso.

para falso.

$[${DIALSTATUS} != BUSY] Se a variável DIALSTATUS for diferente

de BUSY, retorna 1 para verdadeiro, caso

contrario 0 para falso.

$[${VALOR1}>=10 & ${VALOR2}<=20]

Se o VALOR1 for maior ou igual a 10 e o VALOR2 for menor igual a 20 retorna 1 para verdadeiro, caso contrario 0 para falso.

${${PREFIXO}=085 | ${PREFIXO}=011]

Se o PREFIXO for igual a 085 ou se o PREFIXO for igual a 011, retorna 1 para verdadeiro, caso contrario 0 para falso.

(16)

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ível

exten=> s,n,HangUp()

exten=> s,n(ocupado),VoiceMail(${ARG2},b) ; Ocupado

(17)



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.

CANCEL

O originador da chamada cancelou antes que a chamada fosse completada.

DONTCALL Chamadas são rejeitadas, pelo modo de privacidade.

TORTURE

O destino decidiu enviar a chamada para o menu, pelo modo de privacidade.

(18)



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=friend context=ramais username=4001 secret=4001 callerid=vicente<4001> mailbox=4001 ;mailbox=200@email port=5060 bindaddr=0.0.0.0 disallow=all allow=alaw language=pt_BR

(19)



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=friend auth=md5 context=ramais username=3001 secret=3001 callerid=3001 mailbox=3001 ;mailbox=300@email port=4569 bindaddr=0.0.0.0 disallow=all allow=gsm language=pt_BR

(20)



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] format=gsm [email protected] maxlogins=5 maxmsg=100 maxmsg=100 delete=no attach=yes [email] include => general 200 =>123,vicente,[email protected] 300 => 789564,maria,[email protected] [4001] include => general 4001 => 845962,jose,[email protected] [3001] include => general 3001 => 145263,fulano,[email protected]

(21)

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

(22)



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:

(23)

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ível

exten => s,n,HangUp()

exten=> s,n(busy),VoiceMail(${MACRO_EXTEN},b) ;Ocupado

(24)



Exemplo 7 – Sala de Conferência:

Macros no Asterisk

[ramais] include=>conferencia include=>gravacao [conferencia] exten => _3456XXXX,1,Macro(conferencia,${EXTEN:-4},3) [macro-conferencia] exten=> s,1,Answer 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)

(25)



Comando Set:

O comando Set possibilita definir o valor de uma variável em tempo de execução.

Sintaxe:

Macros no Asterisk

(26)



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

(27)



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 ;Exemplo conf=> 2020 conf=> 2020,123456

(28)



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

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

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

Referências

Documentos relacionados

Quanto aos aspectos metodológicos, a presente pesquisa descritivo- analítica estrutura-se como bibliográfica, quanto ao tipo, pois tem como referencial teórico

SIPREVININDO Aborda a segurança do trabalhador, dos seus trajetos e no ambiente de trabalho; AS AVENTURAS DO LOBO MAL Comédia adaptada para linguagem circense O CIRCO DO

A situação de namoro também é um fator cada vez mais importante a ser considerado, pois assume especial relevância neste grupo de idade, principalmente nas mais jovens (menores de

A contratransferência era vista como espécie de resistência que se manifestava no psicanalista em relação a seu paciente, resistência essa devida ao surgimento de

Ainda, neste trabalho, houve alguns aspectos em que significantemente não ocorreram alterações, como a presença de sub-harmônicos em M1XM2XM3, a presença de

para Geniuskit bifamiliar Variante para ligação da campainha externa e campainha suplementar para Geniuskit monofamiliar e bifamiliar cadores suplementares para Geniuskit

Apesar da estrutura dialógica do romance, podemos dizer então que esse diálogo é quase sempre perturbado, ou pela falta de contato direto entre as personagens, ou mesmo pela

A dissertação apresentada divide-se em capítulos temáticos que abordam: o patrimônio cultural e sua relação com o patrimônio documental e os arquivos universitários; a