SlideShare una empresa de Scribd logo
1 de 30
Descargar para leer sin conexión
Macros no Asterisk


 Vicente de Paula Nobre
vicente.proj@hotmail.com
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.
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.
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.
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)
Macros no Asterisk
Exemplo 1 – Uso Simples:

[ramais]
exten=> _40XX,1,Macro(BemVindo, hello-world, SIP/${EXTEN},20)

[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()
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.
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) ; Ocupado
exten=> s-NOANSWER,1,VoiceMail(${ARG3},u) ; Indisponível
exten=> s-CHANUNAVAIL,1,VoiceMail(${ARG3},u) ; Indisponível
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)
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()
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])
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
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
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.
Macros no Asterisk
Exemplo 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ível
exten=> s,n,HangUp()
exten=> s,n(ocupado),VoiceMail(${ARG2},b) ; Ocupado
exten=> s,n,HangUp()
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.
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
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
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
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(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})
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)
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()
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
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)
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()
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
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
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.
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

Más contenido relacionado

La actualidad más candente

Open Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere LibertyOpen Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere LibertyTakakiyo Tanaka
 
半日でわかる コンテナー技術 (応用編)
半日でわかる コンテナー技術 (応用編)半日でわかる コンテナー技術 (応用編)
半日でわかる コンテナー技術 (応用編)Toru Makabe
 
Itamae-Serverspec入門
Itamae-Serverspec入門Itamae-Serverspec入門
Itamae-Serverspec入門辰徳 斎藤
 
Chefで始めるWindows Server構築
Chefで始めるWindows Server構築Chefで始めるWindows Server構築
Chefで始めるWindows Server構築Takashi Kanai
 
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~junichi anno
 
[SC03] Active Directory の DR 対策~天災/人災/サイバー攻撃、その時あなたの IT 基盤は利用継続できますか?
[SC03] Active Directory の DR 対策~天災/人災/サイバー攻撃、その時あなたの IT 基盤は利用継続できますか? [SC03] Active Directory の DR 対策~天災/人災/サイバー攻撃、その時あなたの IT 基盤は利用継続できますか?
[SC03] Active Directory の DR 対策~天災/人災/サイバー攻撃、その時あなたの IT 基盤は利用継続できますか? de:code 2017
 
Always on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイントAlways on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイントMasayuki Ozawa
 
Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能kimulla
 
20180918_ops on azure-main
20180918_ops on azure-main20180918_ops on azure-main
20180918_ops on azure-mainJun Misawa
 
How to connect to cisco asa
How to connect to cisco asaHow to connect to cisco asa
How to connect to cisco asaIT Tech
 
C34 Always On 可用性グループ 構築時のポイント by 小澤真之
C34 Always On 可用性グループ 構築時のポイント by 小澤真之C34 Always On 可用性グループ 構築時のポイント by 小澤真之
C34 Always On 可用性グループ 構築時のポイント by 小澤真之Insight Technology, Inc.
 
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~de:code 2017
 
S3 を単純ストレージとして 利用する手段の比較
S3 を単純ストレージとして 利用する手段の比較S3 を単純ストレージとして 利用する手段の比較
S3 を単純ストレージとして 利用する手段の比較真治 米田
 
MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形yoku0825
 
As-Isシステム分析は入出力から始めよ
As-Isシステム分析は入出力から始めよAs-Isシステム分析は入出力から始めよ
As-Isシステム分析は入出力から始めよKent Ishizawa
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動Takashi Takizawa
 
Azure monitoring and alert v0.2.21.0707
Azure monitoring and alert v0.2.21.0707Azure monitoring and alert v0.2.21.0707
Azure monitoring and alert v0.2.21.0707Ayumu Inaba
 

La actualidad más candente (20)

Open Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere LibertyOpen Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere Liberty
 
半日でわかる コンテナー技術 (応用編)
半日でわかる コンテナー技術 (応用編)半日でわかる コンテナー技術 (応用編)
半日でわかる コンテナー技術 (応用編)
 
Itamae-Serverspec入門
Itamae-Serverspec入門Itamae-Serverspec入門
Itamae-Serverspec入門
 
Chefで始めるWindows Server構築
Chefで始めるWindows Server構築Chefで始めるWindows Server構築
Chefで始めるWindows Server構築
 
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
Azure ad の導入を検討している方へ ~ active directory の構成パターンと正しい認証方式の選択~
 
[SC03] Active Directory の DR 対策~天災/人災/サイバー攻撃、その時あなたの IT 基盤は利用継続できますか?
[SC03] Active Directory の DR 対策~天災/人災/サイバー攻撃、その時あなたの IT 基盤は利用継続できますか? [SC03] Active Directory の DR 対策~天災/人災/サイバー攻撃、その時あなたの IT 基盤は利用継続できますか?
[SC03] Active Directory の DR 対策~天災/人災/サイバー攻撃、その時あなたの IT 基盤は利用継続できますか?
 
Always on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイントAlways on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイント
 
Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能
 
20180918_ops on azure-main
20180918_ops on azure-main20180918_ops on azure-main
20180918_ops on azure-main
 
How to connect to cisco asa
How to connect to cisco asaHow to connect to cisco asa
How to connect to cisco asa
 
C34 Always On 可用性グループ 構築時のポイント by 小澤真之
C34 Always On 可用性グループ 構築時のポイント by 小澤真之C34 Always On 可用性グループ 構築時のポイント by 小澤真之
C34 Always On 可用性グループ 構築時のポイント by 小澤真之
 
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
 
S3 を単純ストレージとして 利用する手段の比較
S3 を単純ストレージとして 利用する手段の比較S3 を単純ストレージとして 利用する手段の比較
S3 を単純ストレージとして 利用する手段の比較
 
MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形
 
MySQL 5.5 Guide to InnoDB Status
MySQL 5.5 Guide to InnoDB StatusMySQL 5.5 Guide to InnoDB Status
MySQL 5.5 Guide to InnoDB Status
 
As-Isシステム分析は入出力から始めよ
As-Isシステム分析は入出力から始めよAs-Isシステム分析は入出力から始めよ
As-Isシステム分析は入出力から始めよ
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動
 
Azure monitoring and alert v0.2.21.0707
Azure monitoring and alert v0.2.21.0707Azure monitoring and alert v0.2.21.0707
Azure monitoring and alert v0.2.21.0707
 
Lets Encrypt!
Lets Encrypt!Lets Encrypt!
Lets Encrypt!
 
Goss入門
Goss入門Goss入門
Goss入門
 

Similar a Macros no asterisk

Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoronaldoferraz
 
Construindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com AsteriskConstruindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com AsteriskRodrigo R Passos
 
Construindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com AsteriskConstruindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com AsteriskRodrigo R Passos
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9Nando Vieira
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2michellobo
 
007 programando em python - funcoes
007   programando em python - funcoes007   programando em python - funcoes
007 programando em python - funcoesLeandro Barbosa
 
Introdução ao CMake
Introdução ao CMakeIntrodução ao CMake
Introdução ao CMakePaulo Remoli
 
Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidademetzen
 
Ruby e Erlang de mãos dadas
Ruby e Erlang de mãos dadasRuby e Erlang de mãos dadas
Ruby e Erlang de mãos dadasÉverton Ribeiro
 
TechEd 2005: Novos Recursos T-SQL (SQL 2005)
TechEd 2005: Novos Recursos T-SQL (SQL 2005)TechEd 2005: Novos Recursos T-SQL (SQL 2005)
TechEd 2005: Novos Recursos T-SQL (SQL 2005)Fabrício Catae
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocosRicardo Bolanho
 
Mini Curso de Python para Coding Dojo
Mini Curso de Python para Coding DojoMini Curso de Python para Coding Dojo
Mini Curso de Python para Coding DojoFabricio NErdmann
 
10 Boas Práticas de Programação
10 Boas Práticas de Programação10 Boas Práticas de Programação
10 Boas Práticas de ProgramaçãoCarlos Schults
 

Similar a Macros no asterisk (20)

Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programação
 
Tw Course Ajax 2007 Ap05
Tw Course Ajax 2007 Ap05Tw Course Ajax 2007 Ap05
Tw Course Ajax 2007 Ap05
 
Construindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com AsteriskConstruindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com Asterisk
 
Construindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com AsteriskConstruindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com Asterisk
 
NotORM
NotORMNotORM
NotORM
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2
 
007 programando em python - funcoes
007   programando em python - funcoes007   programando em python - funcoes
007 programando em python - funcoes
 
PHP Básico - Parte 3
PHP Básico - Parte 3PHP Básico - Parte 3
PHP Básico - Parte 3
 
Introdução ao CMake
Introdução ao CMakeIntrodução ao CMake
Introdução ao CMake
 
Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidade
 
Curso de Excel VBA
Curso de Excel VBACurso de Excel VBA
Curso de Excel VBA
 
Ruby e Erlang de mãos dadas
Ruby e Erlang de mãos dadasRuby e Erlang de mãos dadas
Ruby e Erlang de mãos dadas
 
Código Limpo
Código LimpoCódigo Limpo
Código Limpo
 
TechEd 2005: Novos Recursos T-SQL (SQL 2005)
TechEd 2005: Novos Recursos T-SQL (SQL 2005)TechEd 2005: Novos Recursos T-SQL (SQL 2005)
TechEd 2005: Novos Recursos T-SQL (SQL 2005)
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocos
 
Mini Curso de Python para Coding Dojo
Mini Curso de Python para Coding DojoMini Curso de Python para Coding Dojo
Mini Curso de Python para Coding Dojo
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
10 Boas Práticas de Programação
10 Boas Práticas de Programação10 Boas Práticas de Programação
10 Boas Práticas de Programação
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
 

Macros no asterisk

  • 1. Macros no Asterisk Vicente de Paula Nobre vicente.proj@hotmail.com
  • 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)
  • 6. Macros no Asterisk Exemplo 1 – Uso Simples: [ramais] exten=> _40XX,1,Macro(BemVindo, hello-world, SIP/${EXTEN},20) [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 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.
  • 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}) exten=> s,4,HangUp()
  • 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. 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.
  • 16. Macros no Asterisk Exemplo 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ível exten=> s,n,HangUp() exten=> s,n(ocupado),VoiceMail(${ARG2},b) ; Ocupado exten=> s,n,HangUp()
  • 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
  • 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(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. 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