Your SlideShare is downloading. ×
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Livro asterisk v_office_atualizado2
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Livro asterisk v_office_atualizado2

3,488

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,488
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
433
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Asterisk PBX Guia de Configuração Como construir e configurar um PABX com Software Livre Segunda Geração Edição Revisada e Ampliada Julho/2006 Por: Flávio Eduardo de Andrade Gonçalves flavio.goncalves@voffice.com.br
  • 2. III Todos os direitos reservados. É proibida a reprodução total ou parcial deste livro.
  • 3. IV Prefácio Esta é a segunda geração do eBook Asterisk Guia de Configuração, a primeira foi lançada em março de 2005. Fiz o teste do dCAP da Digium em Maio de 2006 e tive o privilégio de passar na primeira tentativa, o livro ajudou bastante, apenas dois dos vinte alunos do Asterisk Bootcamp passaram no dCAP. O material contido neste livro tem quase tudo referente ao teste. O objetivo principal da revisão foi atualizar para a versão 1.2. No momento em que você receber este eBook é provável que a versão 1.4 já tenha sido lançada. Acompanhar um software que lança uma nova versão à cada 6 meses não é muito fácil. Este eBook contou com um fiel escudeiro que aparece como co-autor, Alexandre Keller que tem me ajudado muito com os cursos de Asterisk e com os testes práticos. Os capítulos quatro e quinze são em boa parte de autoria dele. Estou mudando a forma de comercialização do livro também, privilegiando os eBooks. Este possuem diversas vantagens, a primeira é ecológica, evitar o uso do papel, outros pontos que posso citar são a facilidade de carregar dentro de um laptop ou pendrive e ainda poder pesquisar. A parte ruim fica por conta da pirataria, que tento minimizar com uma tarja cinza como fundo do livro. Sei que é difícil combater a pirataria e vai da consciência de cada um. O Asterisk PBX é revolucionário nas áreas de telefonia IP e PABX baseado em software. Durante anos o mercado de telefonia foi ligado a equipamentos proprietários fabricados por companhias multinacionais. A convergência de dados e voz em pouco tempo vai fazer com que a telefonia seja apenas mais uma aplicação das redes, tornando os atuais PABX obsoletos. Com a entrada do Asterisk, mais e mais empresas vão poder experimentar recursos como URA - unidade de resposta audível, DAC – distribuição automática de chamadas, mobilidade, correio de voz, e conferência antes restritas a grandes companhias. Não tivemos a pretensão de ensinar tudo que existe sobre o Asterisk, pois isto seria uma missão impossível. Nossa pretensão neste material é de que o leitor possa ter acesso aos principais recursos e a partir deles descobrir e implementar recursos mais avançados. Eu espero que vocês se divirtam tanto aprendendo o Asterisk quanto eu me diverti escrevendo sobre ele. Flávio Eduardo de Andrade Gonçalves Diretor Geral V.Office Networks flavio.goncalves@voffice.com.br
  • 4. V Agradecimentos Tenho aqui de agradecer a minha família pela paciência de me ver trabalhando as madrugadas e fins de semana para que este material pudesse ser escrito. Agradeço à Clarice minha esposa e companheira pelo incentivo e apoio e a Ana Cristina Gonçalves, Cristiano Soares e Alexandre Keller por resolver todos os entraves como publicação, distribuição, capa, marketing que possibilitaram que este material chegasse aos usuários e a minha filha Anna Letícia pelo desenho da mascote do Asterisk na contra capa. Críticas sugestões, erros de grafia e conteúdo Todos as pessoas que eu conheço detestam ser criticadas. Eu não me excluo desse grupo, mas gostando ou não, as críticas quando construtivas são a melhor forma de evolução e melhoria constante. Este livro e o curso no qual se baseia tiveram um grande “feedback” de alunos e leitores durante os anos de 2005 e 2006. Os capítulos de bilhetagem e uma abordagem mais profunda de AMI e AGI contida no capítulo quatorze foram sugestões de usuários. Outra sugestão acatada foi o uso de placas digium e configuração real nos cursos. Apesar dos custos elas agora estão presentes e os alunos podem ver como se carrega realmente uma placa da Digium. Por mais que nos esforcemos, sempre há erros de grafia e conteúdo. Ficamos agradecidos a qualquer um que os aponte e nos permita corrigir. Quaisquer erros podem ser comunicados em: oops@voffice.com.br
  • 5. VI Sumário INTRODUÇÃO AO ASTERISK ..........................................................1 1.1 OBJETIVOS DO CAPÍTULO................................................................1 1.2 O QUE É O ASTERISK .....................................................................1 1.2.1 QUAL O PAPEL DA DIGIUM?..............................................................2 1.2.2 O PROJETO ZAPATA .......................................................................3 1.3 PORQUE O ASTERISK? ...................................................................5 1.3.1 REDUÇÃO DE CUSTOS EXTREMA .........................................................5 1.3.2 TER CONTROLE DO SEU SISTEMA DE TELEFONIA .......................................5 1.3.3 AMBIENTE DE DESENVOLVIMENTO FÁCIL E RÁPIDO....................................6 1.3.4 RICO E ABRANGENTE EM RECURSOS ....................................................6 1.3.5 É POSSÍVEL PROVER CONTEÚDO DINÂMICO POR TELEFONE...........................6 1.3.6 PLANO DE DISCAGEM FLEXÍVEL E PODEROSO ..........................................6 1.3.7 RODA NO LINUX E É CÓDIGO ABERTO...................................................6 1.3.8 LIMITAÇÕES DA ARQUITETURA DO ASTERISK ..........................................6 1.4 ARQUITETURA DO ASTERISK............................................................7 1.4.1 CANAIS.....................................................................................7 1.4.2 CODECS E CONVERSÕES DE CODEC...................................................9 1.4.3 PROTOCOLOS ..............................................................................9 1.4.4 APLICAÇÕES ............................................................................. 10 1.5 VISÃO GERAL DO ASTERISK...........................................................10 1.6 DIFERENÇAS ENTRE O VELHO E O NOVO MUNDO ..................................11 1.6.1 TELEFONIA USANDO O VELHO MODELO DE PABX/SOFTSWITCH................... 11 1.6.2 TELEFONIA DO JEITO ASTERISK ....................................................... 12 1.7 CONSTRUINDO UM SISTEMA DE TESTE ..............................................13 1.7.1 UM FXO, UM FXS...................................................................... 13 1.7.2 VOIP SERVICE PROVIDER, SOFTFONE OU ATA...................................... 13 1.7.3 PLACA CLONE FXO, SOFTFONE OU ATA ............................................. 13 1.8 CENÁRIOS DE USO DO ASTERISK.....................................................14 1.8.1 IP PBX................................................................................... 14 1.8.2 ATUALIZAÇÃO DE PABX EXISTENTE PARA SUPORTAR VOIP. ...................... 15 1.8.3 INTERLIGAÇÃO DE FILIAIS ATRAVÉS DE VOIP ....................................... 16 1.8.4 SERVIDOR DE APLICAÇÕES (URA, CONFERÊNCIA, CORREIO DE VOZ) ........... 16 1.8.5 MEDIA GATEWAY........................................................................ 17 1.8.6 PLATAFORMA DE CONTACT CENTER ................................................... 18 1.9 SUMÁRIO..................................................................................18 1.10 QUESTIONÁRIO ........................................................................19 BAIXANDO E INSTALANDO ..........................................................21 2.1 OBJETIVOS DO CAPÍTULO..............................................................21 2.2 INTRODUÇÃO .............................................................................21 2.3 HARDWARE MÍNIMO....................................................................21
  • 6. VII 2.3.1 MONTANDO O SEU SISTEMA............................................................ 22 2.3.2 QUESTÕES DE COMPARTILHAMENTO DE IRQ ........................................ 22 2.4 ESCOLHENDO UMA DISTRIBUIÇÃO DO LINUX. ....................................23 2.4.1 REQUISITOS DO LINUX ................................................................. 23 2.4.2 PACOTES NECESSÁRIOS. ............................................................... 23 2.5 INSTALANDO O LINUX PARA ATENDER AO ASTERISK............................24 2.6 PREPARANDO O DEBIAN PARA O ASTERISK. ......................................34 2.7 OBTENDO E COMPILANDO O ASTERISK .............................................36 2.7.1 OBTENDO OS FONTES DO ASTERISK .................................................. 36 2.7.2 COMPILANDO O DRIVER ZAPTEL ....................................................... 37 2.8 COMPILANDO O ASTERISK ............................................................37 2.9 INICIANDO E PARANDO O ASTERISK ................................................38 2.9.1 PARÂMETROS DE LINHA DE COMANDO DO ASTERISK................................ 38 2.9.2 ABAIXO OS PARÂMETROS DISPONÍVEIS............................................... 38 2.10 INICIANDO O ASTERISK EM TEMPO DE INICIALIZAÇÃO. ......................39 2.11 INICIANDO O ASTERISK USANDO UM USUÁRIO DIFERENTE DE ROOT. .....39 2.12 CONSIDERAÇÕES SOBRE A INSTALAÇÃO DO ASTERISK ........................40 2.12.1 SISTEMAS EM PRODUÇÃO............................................................. 40 2.12.2 CONSIDERAÇÕES SOBRE A REDE .................................................... 40 2.13 SUMÁRIO ................................................................................41 2.14 QUESTIONÁRIO ........................................................................41 PRIMEIROS PASSOS ...................................................................43 3.1 OBJETIVOS DO CAPÍTULO..............................................................43 3.2 INTRODUÇÃO .............................................................................43 3.3 GRAMÁTICA DOS ARQUIVOS DE CONFIGURAÇÃO..................................43 3.3.1 GRUPO SIMPLES ......................................................................... 44 3.3.2 FORMATO DE OBJETO COM HERANÇA DE OPÇÕES.................................... 44 3.3.3 OBJETO ENTIDADE COMPLEXA ......................................................... 44 3.4 CONFIGURANDO UMA INTERFACE COM A REDE PÚBLICA OU COM UM PABX 45 3.4.1 INSTALANDO A PLACA X100P CLONE................................................. 46 3.5 CONFIGURAÇÃO DOS TELEFONES IP SIP ..........................................57 3.5.1 ARQUIVO EXEMPLO DO SIP.CONF SEÇÃO GERAL [GENERAL] ....................... 58 3.5.2 OPÇÕES PARA CADA TELEFONE ........................................................ 58 3.5.3 EXEMPLO COMPLETO DO SIP .......................................................... 58 3.6 INTRODUÇÃO AO PLANO DE DISCAGEM .............................................59 3.6.1 CONTEXTOS.............................................................................. 59 3.6.2 EXTENSÕES .............................................................................. 60 3.6.3 PRIORIDADES............................................................................ 61 3.6.4 APLICAÇÕES ............................................................................. 61 3.6.5 CRIANDO UM AMBIENTE DE TESTES ................................................... 61 3.6.6 CRIANDO UM PLANO DE DISCAGEM SIMPLES ......................................... 63 UM EXEMPLO MAIS ÚTIL ........................................................................ 65 INTERLIGANDO CANAIS COM A APLICAÇÃO DIAL() .......................................... 66 3.7 LABORATÓRIOS ..........................................................................66 3.7.1 LIGANDO ENTRE TELEFONES. .......................................................... 67
  • 7. VIII 3.7.2 LIGANDO PARA A REDE PÚBLICA USANDO A PLACA ZAPTEL ......................... 67 3.7.3 RECEBENDO LIGAÇÕES USANDO AUTO-ATENDIMENTO. ............................. 67 3.8 SUMÁRIO..................................................................................68 3.9 QUESTIONÁRIO ..........................................................................68 CANAIS ANALÓGICOS E DIGITAIS...............................................71 4.1 OBJETIVOS................................................................................71 4.2 CONCEITOS BÁSICOS...................................................................... 71 4.2.1 SINALIZAÇÃO DE SUPERVISÃO......................................................... 71 4.2.2 SINALIZAÇÃO DE ENDEREÇAMENTO ................................................... 72 4.2.3 SINALIZAÇÃO DE INFORMAÇÃO ........................................................ 72 4.3 INTERFACES DE ACESSO A REDE PÚBLICA ..........................................73 4.4 USANDO INTERFACES FXS, FXO E E+M..........................................73 4.4.1 INTERFACES FX (FOREIGN EXCHANGE).............................................. 73 4.4.2 INTERFACES E & M ..................................................................... 74 4.4.3 SINALIZAÇÃO NOS TRONCOS .......................................................... 74 4.5 LINHAS DIGITAIS E1/T1, SINALIZAÇÃO CAS E CCS. .........................75 4.5.1 SINALIZAÇÃO E ENQUADRAMENTO E1 ................................................ 76 4.5.2 SINALIZAÇÃO CAS, E1-R2-BRASIL ................................................. 76 4.5.3 SINALIZAÇÃO CCS, E1-ISDN-PRI. ................................................ 76 4.6. CONFIGURANDO UM CANAL DE TELEFONIA NO ASTERISK......................77 4.6.1 PROCEDIMENTOS GERAIS DE CONFIGURAÇÃO VÁLIDOS NOS TRÊS CASOS ........ 77 4.7 EXEMPLO 1 - INSTALAÇÃO DE UMA PORTA FXO E OUTRA FXS ...............77 4.7.1 INSTALANDO UMA PLACA TDM400P COM UMA PORTA FXS E OUTRA PORTA FXO. .................................................................................................... 78 4.7.2 CONFIGURAÇÃO DO ARQUIVO ZAPTEL.CFG ........................................... 79 4.7.3 CARREGAR OS DRIVERS DE KERNEL ................................................... 79 4.7.4 USANDO O UTILITÁRIO ZTTEST. ....................................................... 79 4.7.5 USANDO O UTILITÁRIO ZTCFG ......................................................... 80 4.7.6 CONFIGURAÇÃO DO ARQUIVO ZAPATA.CONF ......................................... 80 4.8 EXEMPLO 2 – CARGA DE DOIS CANAIS E1-ISDN ...............................80 4.8.1 INSTALAÇÃO DA PLACA TE205P ...................................................... 81 4.8.2 CONFIGURAÇÃO DO ARQUIVO ZAPTEL.CONF ......................................... 81 4.8.3 CARGA DO DRIVER DA PLACA ZAPTEL ................................................. 82 4.8.4 USANDO O UTILITÁRIO ZTTEST ........................................................ 82 4.8.5 VERIFICANDO CONFLITOS DE INTERRUPÇÃO ......................................... 83 4.8.6 USANDO O UTILITÁRIO ZTCFG ......................................................... 83 4.8.7 CONFIGURAÇÃO DOS CANAIS “ZAPATA.CONF”....................................... 84 4.8.8 COMANDOS PARA VERIFICAÇÃO ....................................................... 84 4.9 CONFIGURANDO MFC/R2 ............................................................88 4.9.1 ENTENDENDO O PROBLEMA ............................................................ 88 4.9.2 ENTENDENDO O PROTOCOLO MFC/R2 ............................................... 88 4.9.3 SEQÜÊNCIA DE UMA CHAMADA MFC/R2............................................. 92 4.9.4 O DRIVER UNICALL ..................................................................92 4.9.5 CONFIGURANDO A PLACA ZAPTEL PARA OPERAR COM MFC/R2 ...........93 4.9.6 INSTALANDO E COMPILANDO AS BIBLIOTECAS.................................93
  • 8. IX 4.9.7 INTEGRANDO O CANAL UNICALL AO ASTERISK ...................................... 94 4.9.8 CONFIGURANDO O CANAL UNICALL.................................................... 95 4.9.9 RESOLVENDO PROBLEMAS EM UM CANAL UNICALL. ................................. 98 4.10 OPÇÕES DE CONFIGURAÇÃO DO ARQUIVO ZAPATA.CONF ...................101 4.10.1 OPÇÕES GERAIS, INDEPENDENTES DO TIPO DE CANAL.......................... 101 4.10.2 OPÇÕES PARA CONEXÕES COM REDE ISDN...................................... 102 4.10.3 OPÇÕES DE IDENTIFICADOR DE CHAMADAS (CALLER ID). ..................... 103 4.10.4 OPÇÕES DE QUALIDADE DE ÁUDIO ................................................ 104 4.10.5 OPÇÕES DE BILHETAGEM ........................................................... 105 4.10.6 OPÇÕES DE ACOMPANHAMENTO DA CHAMADA ................................... 105 4.10.7 OPÇÕES PARA TELEFONES LIGADOS A LINHAS FXS ............................. 106 4.10.8 OPÇÕES PARA CANAIS FXO........................................................ 106 4.11 NOMENCLATURA DOS CANAIS ZAP..............................................107 4.12 NOMENCLATURA DOS CANAIS UNICALL.........................................107 4.13 QUESTIONÁRIO ......................................................................108 VOZ SOBRE IP ...........................................................................111 5.1 OBJETIVOS..............................................................................111 5.2 INTRODUÇÃO ...........................................................................111 5.3 BENEFÍCIOS DA VOZ SOBRE IP.....................................................111 5.3.1 APLICAÇÕES PARA CALL-CENTERS .................................................. 112 5.3.2 SISTEMA DE MENSAGENS UNIFICADO ............................................... 112 5.3.3 CHAMADA BASEADA EM CARTÃO..................................................... 112 5.4 ARQUITETURA DO ASTERISK E VOZ SOBRE IP ..................................113 5.5 COMO ESCOLHER UM PROTOCOLO ..................................................114 5.5.1 SIP ..................................................................................... 114 5.5.2 IAX..................................................................................... 114 5.5.3 MGCP.................................................................................. 115 5.5.4 H323 .................................................................................. 115 5.6 CONCEITO DE PEERS, USERS E FRIENDS.........................................116 5.7 CODECS E CONVERSÃO DE CODECS ................................................117 5.8 COMO ESCOLHER O CODEC.........................................................118 5.9 OVERHEAD CAUSADO PELOS CABEÇALHOS. ......................................118 5.11 ENGENHARIA DE TRÁFEGO.........................................................119 5.10.1 SIMPLIFICAÇÕES .................................................................... 119 5.10.2 MÉTODO DE ERLANG B ............................................................. 120 5.11 ESTRATÉGIAS DE REDUÇÃO DO USO DE BANDA PASSANTE ..................121 5.10.1 IMPACTO DA COMPRESSÃO DE CABEÇALHO RTP................................. 121 5.10.2 IMPACTO DO MODO TRUNKED EM IAX. ........................................... 122 5.11 SUMÁRIO ..............................................................................122 5.12 QUESTIONÁRIO ......................................................................123 O PROTOCOLO IAX ....................................................................125 6.1 OBJETIVOS DO CAPÍTULO ...........................................................125 6.2 INTRODUÇÃO ...........................................................................125
  • 9. X 6.3 TEORIA DE OPERAÇÃO ................................................................126 6.4 FORMATO DOS FRAMES ..............................................................127 6.4.1 FRAME COMPLETO ..................................................................... 127 6.4.2 MINIFRAME ............................................................................ 128 6.5 USO DE BANDA PASSANTE ...........................................................128 6.6 NOMENCLATURA DOS CANAIS.......................................................130 6.6.1 FORMATO DE UMA CONEXÃO DE SAÍDA. ............................................ 130 6.6.2 EXEMPLOS DE CANAIS DE SAÍDA: ................................................... 130 6.6.3 FORMATO DE UMA CONEXÃO DE ENTRADA.......................................... 131 6.6.4 EXEMPLO DE CANAIS DE ENTRADA .................................................. 131 6.7 CENÁRIOS DE USO.....................................................................131 6.7.1 CONECTANDO UM SOFTFONE IAX AO ASTERISK................................... 132 6.7.2 LAB – INSTALANDO UM SOFTFONE IAX ............................................ 138 6.7.2 CONECTANDO-SE A UM PROVEDOR BASEADO EM IAX2........................... 140 6.7.3 LAB – CONECTANDO-SE AO FREEWORLDDIALUP USANDO IAX2................. 140 6.7.4 CONECTANDO SERVIDORES ASTERISK USANDO IAX2 TRUNK................... 142 6.8 AUTENTICAÇÃO NO IAX .............................................................144 6.8.1 CONEXÕES DE ENTRADA.............................................................. 144 6.8.2 CONEXÕES DE SAÍDA ................................................................. 146 6.9 CONFIGURAÇÃO DO ARQUIVO IAX.CONF .........................................147 6.9.1 CONFIGURAÇÃO DO ENDEREÇAMENTO .............................................. 148 6.9.2 SELEÇÃO DOS CODECS: .............................................................. 148 6.9.3 CONFIGURAÇÃO DO BUFFER DE JITTER E MARCAÇÃO DE PACOTES:.............. 149 6.9.4 PARÂMETROS ADICIONAIS PARA TIPO “USER”:.................................... 150 6.10 COMANDOS DE DEPURAÇÃO DO IAX2. .........................................151 6.11 SUMÁRIO ..............................................................................153 6.12 QUESTIONÁRIO ......................................................................155 O PROTOCOLO SIP.....................................................................157 7.1 OBJETIVOS..............................................................................157 7.2 VISÃO GERAL...........................................................................157 7.2.1 TEORIA DA OPERAÇÃO DO SIP...................................................... 157 7.2.2 PROCESSO DE REGISTRO DO SIP................................................... 159 7.2.3 OPERAÇÃO DO SIP EM MODO PROXY. .............................................. 160 7.2.4 OPERAÇÃO EM MODO DE REDIRECT. ................................................ 160 7.2.5 SIP NO MODO ASTERISK............................................................. 161 7.3 ARQUIVO DE CONFIGURAÇÃO SIP.CONF ..........................................162 7.3.1 CONFIGURAÇÃO DA SEÇÃO GERAL [GENERAL]..................................... 162 7.4 CONFIGURANDO UM CLIENTE SIP .................................................164 7.4.1 PASSO 1 – CONFIGURANDO O SIP.CONF ........................................... 164 7.4.2 PASSO 2 CONFIGURANDO O TELEFONE ............................................. 164 7.4.3 PASSO 3 – DEFINIR A EXTENSÃO NO ARQUIVO SIP.CONF ........................ 165 7.4.4 OPÇÕES DE CONFIGURAÇÃO PARA OS TELEFONES ................................. 165 7.4.5 LIMITAÇÕES E CUIDADOS COM CLIENTES SIP ..................................... 168 7.5 CONECTANDO-SE A UM PROVEDOR SIP. .........................................168 7.5.1 PASSO 1: REGISTRAR O PROVEDOR (SIP.CONF) .................................. 169
  • 10. XI 7.5.2 - PASSO 2: CONFIGURAR O [PEER] (SIP.CONF) .................................. 169 7.5.3 PASSO 3: CRIAR UMA ROTA DE SAÍDA NO PLANO DE DISCAGEM. ............... 169 7.5.4 OPÇÕES DE CONFIGURAÇÃO ESPECÍFICAS PARA PROVEDORES ................... 170 7.6 AUTENTICAÇÃO DAS CHAMADAS SIP ENTRANTES..............................171 7.7 NOMENCLATURA DOS CANAIS SIP ................................................172 7.8 SIP NAT TRAVERSAL................................................................173 7.8.1 FULL CONE (CONE COMPLETO) ..................................................... 174 7.8.2 RESTRICTED CONE (CONE RESTRITO) ............................................. 175 7.8.3 PORT RESTRICTED CONE (CONE RESTRITO POR PORTA)......................... 175 7.8.4 SIMÉTRICO............................................................................. 176 7.8.5 RESUMO DOS TIPOS DE FIREWALL .................................................. 176 7.9 NAT NA PASSAGEM DA SINALIZAÇÃO SIP.......................................176 7.10 NAT NO FLUXO DE MÍDIA RTP...................................................177 7.11 FORMAS DE PASSAGEM PELO NAT...............................................178 7.11.1 UPNP ................................................................................. 179 7.11.2 STUN – SIMPLE TRAVERSAL OF UDP NAT ..................................... 179 7.11.3 ALG – APLICATION LAYER GATEWAY............................................. 181 7.11.4 CONFIGURAÇÃO MANUAL ........................................................... 181 7.11.5 COMEDIA CONEXION ORIENTED MEDIA........................................ 182 7.11.6 TURN – TRAVERSAL USING RELAY NAT......................................... 182 7.11.7 ICE – INTERACTIVITY CONNECTIVITY ESTABLISHMENT ........................ 183 7.12 SOLUÇÕES PRÁTICAS PARA O ASTERISK .......................................183 7.12.1 PARÂMETROS DO ASTERISK USADOS PARA ATRAVESSAR NAT................. 183 7.12.2 CENÁRIOS DO ASTERISK COM NAT............................................... 185 7.13 CONSIDERAÇÕES FINAIS SOBRE O NAT........................................186 7.14 QUESTIONÁRIO ......................................................................187 RECURSOS BÁSICOS DO PLANO DE DISCAGEM..........................189 8.1 OBJETIVOS DO CAPÍTULO............................................................189 8.2 INTRODUÇÃO ...........................................................................189 8.3 ESTRUTURA DO ARQUIVO EXTENSIONS.CONF ...................................189 8.3.1 SEÇÃO [GENERAL] .................................................................... 190 8.3.2 SEÇÃO [GLOBALS] .................................................................... 191 8.4 CONTEXTOS E EXTENSÕES ...........................................................192 8.4.1 INTRODUÇÃO A CONTEXTOS E EXTENSÕES ......................................... 192 8.4.2 COMO OS CONTEXTOS SÃO USADOS?............................................... 193 8.5 EXTENSÕES .............................................................................194 8.5.1 LITERAIS ............................................................................... 194 8.5.2 PADRÕES............................................................................... 194 8.5.3 ESPECIAIS ............................................................................. 195 8.5.4 DEFININDO EXTENSÕES .............................................................. 196 8.6 VARIÁVEIS..............................................................................198 8.6.5 VARIÁVEIS ESPECÍFICAS DE APLICAÇÕES........................................... 200 8.6.6 VARIÁVEIS ESPECÍFICAS PARA MACROS ............................................ 201 8.6.7 VARIÁVEIS DE AMBIENTE............................................................. 202 8.7 EXPRESSÕES............................................................................202
  • 11. XII 8.7.1 OPERADORES .......................................................................... 202 8.8 FUNÇÕES ................................................................................203 8.8.1 COMPRIMENTO DA STRING........................................................... 203 8.8.2 SUBSTRINGS........................................................................... 204 8.8.3 CONCATENAÇÃO DE STRINGS........................................................ 204 8.9 O PLANO DE DISCAGEM NA PRÁTICA ..............................................205 8.9.1 DISCANDO ENTRE RAMAIS. .......................................................... 205 8.9.2 DISCANDO PARA UM DESTINO EXTERNO............................................ 207 8.9.3 DISCANDO 0 PARA PEGAR UMA LINHA EXTERNA. .................................. 208 8.9.4 FORÇANDO UMA ÚNICA OPERADORA ................................................ 208 8.9.5 RECEBENDO UMA CHAMADA NA TELEFONISTA...................................... 208 8.9.6 RECEBENDO UMA LIGAÇÃO COM DDR .........................................209 8.9.7 TOCANDO VÁRIAS EXTENSÕES....................................................... 209 8.9.8 EVITANDO O TELEMARKETING........................................................ 209 8.9.9 ROTEAMENTO PELO ORIGINADOR DA CHAMADA.................................... 209 8.9.10 USANDO VARIÁVEIS NO PLANO DE DISCAGEM.................................... 210 8.10 O ESTILO DA VERSÃO 1.2 .........................................................210 8.11 CRIANDO UM PLANO DE DISCAGEM SIMPLES ..................................211 8.11.1 CENTRAL DE QUATRO PORTAS FXO E 16 RAMAIS SIP.......................... 211 8.11.2 CENTRAL COM UM E1 DE 15 CANAIS E 50 RAMAIS SIP........................ 212 8.12 SUMÁRIO ..............................................................................212 8.13 QUESTIONÁRIO ......................................................................213 RECURSOS AVANÇADOS DO PLANO DE DISCAGEM ....................215 9.1 OBJETIVOS..............................................................................215 9.2 INCLUSÃO DE CONTEXTOS ...........................................................215 9.2.1 LIMITANDO A DISCAGEM PARA NÚMEROS DDD E DDI ........................... 216 9.3 COMO O PLANO DE DISCAGEM ENCONTRA A EXTENSÃO .......................217 9.3.1 PROCESSO “ENCONTRA ENQUANTO VOCÊ DISCA”. ................................ 218 9.3.2 EXEMPLO ............................................................................... 220 9.3.3 ORDEM DE BUSCA DOS PADRÕES DE EXTENSÃO ................................... 221 9.3.4 CONTROLANDO O ORDENAMENTO ................................................... 222 9.4 RECEBENDO UMA CHAMADA EM UM MENU DE VOZ. .............................222 9.5 SWITCHES, ENCAMINHANDO PARA OUTRO ASTERISK .........................226 9.6 MACROS .................................................................................227 9.7 A BASE DE DADOS DO ASTERISK ...................................................228 9.7.1 FAMÍLIAS............................................................................... 228 9.72 FUNÇÕES................................................................................ 228 9.7.3 EXEMPLO DE USO DO ASTERISK DB. ............................................... 228 9.8 PROGRAMANDO O RECURSO DE LISTA NEGRA. ..................................229 9.9 CONTEXTOS BASEADOS EM HORÁRIO..............................................230 9.10 ABRINDO UM NOVO TOM DE DISCAGEM COM DISA..........................232 9.11 LIMITANDO O NÚMERO DE CHAMADAS SIMULTÂNEAS .......................233 9.12 UM PLANO DE DISCAGEM NA PRÁTICA ..........................................234 9.12.1 PASSO 1 - CONFIGURANDO OS CANAIS. ......................................... 234 9.12.2 PASSO 2 - CONFIGURANDO O PLANO DE DISCAGEM ............................ 236
  • 12. XIII 9.12.3 RECEPÇÃO DAS CHAMADAS......................................................... 236 9.13 QUESTIONÁRIO ......................................................................239 CONFIGURANDO RECURSOS AVANÇADOS..................................241 10.1 OBJETIVOS............................................................................241 10.2 SUPORTE AOS RECURSOS DE PABX .............................................241 10.2.1 RECURSOS COM SUPORTE PARA TODO TIPO DE CANAL .......................... 241 10.2.2 RECURSOS COM SUPORTE EM TELEFONES SIP ................................... 242 10.2.3 PARA TELEFONES ANALÓGICOS (ZAP). ........................................... 243 10.3 ESTACIONAMENTO DE CHAMADAS................................................243 10.3.1 DESCRIÇÃO:......................................................................... 243 10.3.2 LISTA DE TAREFAS PARA CONFIGURAÇÃO......................................... 244 10.4 CAPTURA DE CHAMADAS - CALL-PICKUP .......................................244 10.4.1 DESCRIÇÃO .......................................................................... 244 10.4.2 LISTA DE TAREFAS PARA HABILITAR A CAPTURA.................................. 245 10.5 TRANSFERÊNCIA DE CHAMADAS - CALL TRANSFER...........................245 10.5.1 DESCRIÇÃO .......................................................................... 245 10.5.2 LISTA DE TAREFAS PARA CONFIGURAR ............................................ 245 10.6 CONFERÊNCIA – CALL CONFERENCE ............................................246 10.6.1 FORMATO: ........................................................................... 246 10.6.2 DESCRIÇÃO:......................................................................... 246 10.6.3 CÓDIGOS DE RETORNO: ............................................................ 247 10.6.4 DETALHE DAS OPÇÕES:............................................................. 247 10.6.5 LISTA DE TAREFAS DE CONFIGURAÇÃO............................................ 248 10.5.6 EXEMPLOS............................................................................ 248 10.5.7 ARQUIVO DE CONFIGURAÇÃO DO MEETME()..................................... 248 10.7 GRAVANDO UMA LIGAÇÃO .........................................................249 10.8 MÚSICA EM ESPERA – MUSIC ON HOLD.........................................250 EDITE OS ARQUIVOS PARA HABILITAR MÚSICA EM ESPERA ............................... 250 10.9 QUESTIONÁRIO ......................................................................252 DAC DISTRIBUIÇÃO AUTOMÁTICA DE CHAMADAS.....................253 11.1 OBJETIVOS............................................................................253 11.2 INTRODUÇÃO .........................................................................253 11.3 MEMBROS .............................................................................254 11.4 ESTRATÉGIAS.........................................................................254 11.5 MENU PARA O USUÁRIO ............................................................255 11.6 NOVOS RECURSOS...................................................................255 11.7 CONFIGURAÇÃO......................................................................255 11.7.1 LISTA DE TAREFAS .................................................................. 255 11.7.2. CRIAR A FILA DE ATENDIMENTO. ................................................. 256 11.7.3 DEFINIR PARÂMETROS DOS AGENTES. ............................................ 256 11.7.4 CRIAR OS AGENTES NO ARQUIVO.................................................. 257 11.7.5 COLOCAR A FILA NO PLANO DE DISCAGEM....................................... 257 11.7.6 CONFIGURAR A GRAVAÇÃO ......................................................... 257
  • 13. XIV 11.7.7 APLICAÇÕES DE APOIO PARA AS FILAS............................................ 258 11.8 FUNCIONAMENTO DAS FILAS......................................................258 11.8.1 LOGIN DO AGENTE .................................................................. 258 11.9 QUESTIONÁRIO ......................................................................260 O CORREIO DE VOZ....................................................................263 12.1 OBJETIVOS............................................................................263 12.2 INTRODUÇÃO .........................................................................263 12.3 LISTA DE TAREFAS PARA CONFIGURAÇÃO ......................................263 12.3.1 CONFIGURANDO O ARQUIVO VOICEMAIL.CONF................................... 263 12.3.2 CONFIGURANDO O ARQUIVO EXTENSIONS.CONF................................. 264 12.3.3 USANDO A APLICAÇÃO VOICEMAILMAIN()....................................... 264 12.3.4 SINTAXE DO VOICEMAIL(): ........................................................ 265 12.3.5 CÓDIGOS DE RETORNO ............................................................ 267 12.4 ARQUIVO DE CONFIGURAÇÃO DO VOICEMAIL.................................267 12.4.1 CONFIGURAÇÕES DA SEÇÃO [GENERAL].......................................... 267 12.4.2 VARIÁVEIS PARA EMAILSUBJECT E EMAILBODY. .................................. 272 12.4.3. CONFIGURAÇÕES PARA AS SEÇÕES [CONTEXT] .............................. 272 12.5 INTERFACE WEB PARA O CORREIO DE VOZ. ...................................273 12.6 SUMÁRIO ..............................................................................273 12.7 QUESTIONÁRIO ......................................................................274 BILHETAGEM NO ASTERISK .......................................................277 13.1 INTRODUÇÃO .........................................................................277 13.2 OBJETIVOS: ..........................................................................277 13.3 FORMATO DOS BILHETES DO ASTERISK.........................................277 13.4 CÓDIGOS DE CONTA E CONTABILIZAÇÃO AUTOMÁTICA......................278 13.5 MÉTODOS DE ARMAZENAMENTO DO CDR ......................................279 13.5.1 DRIVERS DE ARMAZENAMENTO DISPONÍVEIS..................................... 279 13.5.2 ARMAZENANDO EM CSV............................................................ 279 13.5.3 ARMAZENANDO EM UMA BASE DE DADOS MYSQL............................... 279 13.6 APLICAÇÕES ..........................................................................281 13.6.1 SETACCOUNT ........................................................................ 281 13.6.2 SETAMAFLAGS...................................................................... 281 13.6.3 NOCDR()............................................................................ 281 13.6.4 RESETCDR()........................................................................ 281 13.6.5 SET(CDR(USERFIELD)=VALUE).................................................. 281 13.6.6 APPENDCDRUSERFIELD(VALUE) ................................................. 282 13.7 USANDO AUTENTICAÇÃO DOS USUÁRIOS .......................................282 13.8 USANDO AS SENHAS DO CORREIO ELETRÔNICO ..............................282 13.9 SUMÁRIO ..............................................................................284 13.10 QUESTIONÁRIO ....................................................................284 INTEGRAÇÃO DO ASTERISK USANDO AGI E AMI .......................287
  • 14. XV 14.1INTRODUÇÃO..........................................................................287 14.2 OBJETIVOS DESTE CAPÍTULO......................................................287 14.3 PRINCIPAIS FORMAS DE EXTENDER O ASTERISK .............................287 14.4 ESTENDENDO O ASTERISK ATRAVÉS DA CONSOLE............................288 14.5 ESTENDENDO O ASTERISK USANDO O APLICATIVO SYSTEM ...............288 14.5.1 EXEMPLO DE USO DO APLICAÇÃO SYSTEM() ..................................... 288 14.6 O QUE É O AMI ......................................................................289 14.6.1 QUE LINGUAGEM UTILIZAR ?....................................................... 289 14.6.2 COMPORTAMENTO DO PROTOCOLO ................................................ 289 14.6.3 TIPOS DE PACOTES.................................................................. 289 14.7 CONFIGURANDO USUÁRIOS E PERMISSÕES ....................................290 14.7.1 LOGANDO-SE NO AMI .............................................................. 291 14.7.2 LOGANDO-SE NO AMI VIA PHP. .................................................. 291 14.7.3 PACOTES DO TIPO ACTION ......................................................... 291 14.7.4 COMANDOS DO TIPO ACTION ...................................................... 291 14.7.5 PACOTES DO TIPO EVENT........................................................... 293 14.8 ASTERISK MANAGER PROXY ......................................................294 14.8.1 INSTALANDO E CONFIGURANDO O ASTMANPROXY ............................... 295 14.9 ASTERISK GATEWAY INTERFACE.................................................296 14.9.1 USANDO O AGI ..................................................................... 298 14.9.2 EXEMPLO DE AGI ................................................................... 300 14.9.3 DEADAGI ........................................................................... 301 14.9.4 FASTAGI............................................................................ 302 14.10 ALTERANDO O CÓDIGO FONTE ..................................................302 14.11 SUMÁRIO ............................................................................303 14.12 QUESTIONÁRIO ....................................................................304 ASTERISK REAL-TIME................................................................307 15-1 INTRODUÇÃO.........................................................................307 15.2 OBJETIVOS DESTE CAPÍTULO......................................................307 15.3 MODO DE FUNCIONAMENTO DO ASTERISK REAL TIME ......................307 15.4 LAB 1 INSTALANDO O ASTERISK REAL/TIME ...............................308 15.5 COMO CONFIGURAR O ASTERISK REAL TIME..................................309 15.6 CONFIGURAÇÃO DA BASE DE DADOS.............................................311 15.6 LAB 2 – INSTALANDO O BANCO E CRIANDO AS TABELAS ...................312 15.6.1 CRIANDO AS TABELAS NO MYSQL. ............................................... 312 15.7 LAB 3 – CONFIGURANDO E TESTANDO O ARA................................315 15.7 SUMÁRIO ..............................................................................316 15.8 QUESTIONÁRIO ......................................................................317 RESPOSTA DOS EXERCÍCIOS .....................................................321 RESPOSTAS DO CAPÍTULO 1..............................................................321 RESPOSTAS DO CAPÍTULO 2..............................................................323 RESPOSTAS DO CAPÍTULO 3..............................................................325 RESPOSTAS DO CAPÍTULO 4 ..............................................................328
  • 15. XVI RESPOSTAS DO CAPÍTULO 5..............................................................330 RESPOSTAS DO CAPÍTULO 6..............................................................332 RESPOSTAS DO CAPÍTULO 7..............................................................334 RESPOSTAS DO CAPÍTULO 8..............................................................336 RESPOSTAS DO CAPÍTULO 9..............................................................338 RESPOSTAS DO CAPÍTULO 10............................................................340 RESPOSTAS DO CAPÍTULO 11............................................................341 RESPOSTAS DO CAPÍTULO 12............................................................343 RESPOSTAS DO CAPÍTULO 13 ............................................................345 RESPOSTAS DO CAPÍTULO 14 ............................................................347 RESPOSTAS DO CAPÍTULO 15 ............................................................349
  • 16. XVII Página deixada intencionalmente em branco
  • 17. Introdução ao Asterisk Neste capítulo vamos aprender o que é o Asterisk, qual é sua arquitetura e como pode ser utilizado. 1.1 Objetivos do capítulo Ao final deste capítulo o leitor estará apto a: • Explicar o que é o Asterisk, como surgiu e sua relação com outros projetos como o Zapata Telephony e qual o papel da Digium no Asterisk. • Reconhecer a arquitetura básica do Asterisk e se familiarizar com conceitos como aplicações, canais e codecs. • Descobrir diversos cenários onde o Asterisk poderia ser usado. 1.2 O que é o Asterisk O Asterisk é um software de PABX que usa o conceito de software livre (GPL). A Digium, empresa que promove o Asterisk, investe em ambos, o desenvolvimento do código fonte e em hardware de telefonia de baixo custo que funciona com o Asterisk . O Asterisk roda em plataforma Linux e outras plataformas Unix com ou sem hardware conectando a rede pública de telefonia, PSTN (Public Service Telephony Network). O Asterisk permite conectividade em tempo real entre as redes PSTN e redes VoIP. O Asterisk é muito mais que um PABX padrão, com ele você não apenas tem um excepcional upgrade do seu PABX “convencional”, como também adiciona novas funcionalidades a ele, tais como: • Conectar empregados trabalhando de casa para o PABX do escritório sobre conexões de banda larga. • Conectar escritórios em vários estados sobre IP. Isto pode ser feito pela Internet ou por uma rede IP privada. • Dar aos funcionários, correio de voz, integrado com a “web” e seu e-mail. Capítulo 1
  • 18. 2 | Capítulo 1 | Introdução ao Asterisk • Construir aplicações de resposta automática por voz, que podem conectar você ao sistema de pedidos, por exemplo, ou ainda outras aplicações internas. • Dar acesso ao PABX da companhia para usuários que viajam, conectando sobre VPN de um aeroporto ou hotel. • E muito mais... O Asterisk inclui muitos recursos que só eram encontrados em sistemas de mensagem unificada “topo de linha” como: • Música em espera para clientes esperando nas filas, suportando streaming de media assim como música em MP3. • Filas de chamada onde agentes de forma conjunta atendem as chamadas e monitoram a fila. • Integração para sintetização da fala (text-to-speech). • Registro detalhado de chamadas (call-detail-records) para integração com sistemas de tarifação. • Integração com reconhecimento de voz (Tal como o software de código aberto para reconhecimento de voz). • A habilidade de interfacear com linhas telefônicas normais, ISDN em acesso básico (2B+D) e primário (30B+D). 1.2.1 Qual o papel da Digium? A Digium é baseada em Huntsville, Alabama, ela é a criadora e desenvolvedora primária do Asterisk, o primeiro PABX de código aberto da indústria. Usado em conjunto com as placas de telefonia PCI, ele oferece uma abordagem estratégica com excelente relação custo/benefício para o transporte de voz e dados sobre arquiteturas TDM, comutadas e redes Ethernet. A Digium é hoje o principal patrocinador do Asterisk e um dos líderes na indústria do PABX em código aberto, sendo Mark Spencer o criador e principal mantenedor do Asterisk, ele é hoje admirado pelo grande trabalho que fez e pela responsabilidade que carrega. A Digium oferece o Asterisk em três tipos de licenciamento: Asterisk GPL (GNU Public License) A licença GPL é a mais encontrada, ela permite que você use e altere o código. A restrição existente é que quaisquer alterações no código fonte têm de ser redistribuídas. Em outras palavras, se você altera o Asterisk tem de fornecer o código fonte das alterações e for passar o código adiante.
  • 19. 1.2 O que é o Asterisk | 3 Asterisk Business Edition O Asterisk Business Edition é uma licença comercial do Asterisk. Ela não possui recursos adicionais em comparação com a versão GPL, com exceção da proteção contra cópia. A grande vantagem da licença comercial é para desenvolvedores que não desejam abrir o código fonte de seus produtos e não podem ou querem usar a versão GPL. Asterisk OEM O Asterisk OEM foi criado para fabricantes de centrais telefônicas que não desejam mostrar aos seus clientes que a central foi criada com o Asterisk. 1.2.2 O projeto Zapata O projeto ZAPATA foi conduzido por Jim Dixon. Ele é o responsável pelo desenvolvimento do hardware da DIGIUM. É interessante ressaltar que o hardware também é aberto e pode ser produzido por qualquer empresa. Hoje a placa com quatro E1/T1s é produzida pela Digium, Sangoma e também pela Varion. A história do projeto zapata pode ser vista em: http://www.asteriskdocs.org/modules/tinycontent/index.php?id=10) Uma pequena tradução pode ser encontrada abaixo, Por Jim Dixon Há 20 ou 25 anos atrás, a AT&T começou a oferecer uma API permitindo aos usuários customizar a funcionalidade de seu sistema de correio de voz e auto-atendimento chamado Audix. O Audix rodava em plataforma Unix e custava como tudo em telefonia até o momento, milhares de dólares por porta com uma funcionalidade bastante limitada. Em uma tentativa de tornar as coisas possíveis e atrativas (Especialmente para quem não tinha um PABX AT&T) alguns fabricantes vieram com uma placa que podia ser colocada em um PC que rodava DOS e respondia a uma única linha telefônica (FXO apenas). As placas não tinham uma qualidade tão boa quanto as atuais e muitas terminaram como secretárias eletrônicas igualmente ruins. Novas placas de telefonia foram lançadas com preços muito salgados e as companhias continuaram gastando na faixa de milhares de dólares por porta. Afinal de contas, mesmo com as margens altas de muitos fabricantes, as placas de telefonia possuíam muita capacidade de processamento na forma de DSPs, processadores de sinais digitais. Se você observar ainda hoje um gateway de voz sobre ip, vai ver que boa parte do custo ainda está relacionada aos DSPs.
  • 20. 4 | Capítulo 1 | Introdução ao Asterisk No entanto, o poder de processamento dos microcomputadores continuou crescendo. De forma a provar o conceito inicial comprei uma placa Mitel89000C “ISDN Express Development Card” e escrevi um driver para o FreeBSD. A placa ocupou bem pouco processamento de um Pentium III 600Mhz, provando que se não fosse à limitação do I/O (A placa gerenciava de forma ineficiente o I/O exigindo muitos wait-states) ela poderia atender de 50 a 75 canais. Como resultado do sucesso, eu sai e comprei o necessário para criar um novo desenho de cartão ISA que usasse o I/O de forma eficiente. Eu consegui dois T1s (48 canais) de dados transferidos sobre o barramento e o PC gerenciou isto sem problemas. Então eu tinha as placas e ofereci-as para venda (Umas 50 foram vendidas) e coloquei o desenho completo (incluindo arquivos de plotagem da placa) na web. . Como o conceito era revolucionário e sabia que faria ondas na indústria, Eu decidi colocar um nome inspirado no revolucionário mexicano e dei o nome à organização de Emiliano Zapata e decidi chamar a placa de “tormenta”. Assim começou a telefonia ZAPATA. Escrevi um driver completo e coloquei na rede. A resposta que eu obtive foi quase sempre, “ótimo e você tem para Linux?”. Pessoalmente eu nunca havia visto o linux rodar antes, mas fui rapidamente ao Fry’s (Uma loja enorme de produtos eletrônicos, famosa nos EUA) e comprei uma cópia do Linux Red Hat 6.0. Eu dei uma olhada nos drivers e usei o Vídeo Spigot como base para traduzir o driver de BSD para Linux. De qualquer forma minha experiência com Linux não era grande e comecei a ter problemas em desenvolver o módulo do kernel na forma de módulos carregáveis. De qualquer forma liberei-o na Net sabendo que algum guru no Linux iria rir dele e talvez me ajudar a reformatá-lo em “Linuquês” apropriado. Em 48 horas eu recebi um e-mail de um sujeito no Alabama (Mark Spencer), que se ofereceu para fazer exatamente isto. Notei apenas que, ele disse que tinha algo que seria perfeito para a coisa toda (O Asterisk). Neste momento o Asterisk era um conceito funcional, mas não tinha uma forma real de funcionar de forma prática e útil. O casamento do sistema de telefonia Zapata e o desenho da biblioteca de hardware/driver e interface permitiram a ele crescer para ser um PABX real que poderia falar com telefones e linhas reais. Além disso, Mark era brilhante em VOIP, redes, na parte interna do sistema etc., e tinha um grande interesse em telefones e telefonia, mas tinha experiência limitada em sistemas de telefonia e como eles funcionavam, particularmente na área de interfaces de hardware. Desde o início eu estava e sempre estive lá para ajudá-lo nestas áreas, ambos fornecendo informação e implementando código nos drivers e no switch
  • 21. 1.3 Porque o Asterisk? | 5 (PABX). Nós e mais recentemente outros, fizemos um bom time trabalhando em um objetivo comum de trazer o estado da arte em tecnologia de Telecom ao público por um custo realista. Desde o cartão ISA, eu desenhei o “Tormenta 2 PCI Quad T1/E1, o qual o Mark vende como Digium T400P e E400P, e agora a Varion está vendendo como V400P (Ambos T1 e E1). Todos os arquivos de projeto (incluindo foto e arquivos de plotagem) estão disponíveis em zaptelephony.org (http://www.zapatatelephony.org) para uso público. Como qualquer um pode ver, com o trabalho dedicado de Mark (um monte do meu e outras pessoas) nos drivers da Zaptel e no software do Asterisk, estas tecnologias que vêm de um longo tempo estão crescendo e melhorando a cada dia”. 1.3 Porque o Asterisk? Eu me lembro do meu primeiro contato com o Asterisk, a primeira reação ao encontrarmos algo novo que compete com aquilo que conhecemos é rejeitar. Foi o que aconteceu, na primeira vez que vi o Asterisk ele concorria com uma solução que eu estava apresentando. De qualquer forma, eu sempre procuro levantar todas as informações sobre as alternativas aos projetos que faço e tento descobrir quais os pontos fortes e fracos de uma solução como o Asterisk. Posso dizer que após alguns dias eu fiquei pasmo, sabia que o Asterisk traria uma mudança profunda em todo o mercado de telecomunicações e voz sobre IP. O Asterisk é o Apache da telefonia. Deixe-me então dar várias razões para o Asterisk. 1.3.1 Redução de custos extrema Se você comparar um PABX convencional com o Asterisk talvez à diferença seja pequena, principalmente pelo custo do hardware e dos telefones IP. Entretanto, o Asterisk só pode ser comparado a um PABX digital estado da arte. Comparar uma central analógica de quatro troncos e 16 ramais com o Asterisk é no mínimo injusto. Quando você adiciona recursos avançados como voz sobre IP, URA e DAC, a diferença de custo a menos, pode chegar a diversas vezes. Para dar um exemplo, uma única porta de URA hoje com acesso a um mainframe, cotada recentemente para um cliente nosso, custou pelo menos 10 vezes o preço que custaria com Asterisk. 1.3.2 Ter controle do seu sistema de telefonia Este é um dos benefícios mais citados, ao invés de esperar alguém configurar o seu PABX proprietário (alguns nem mesmo dão a senha para
  • 22. 6 | Capítulo 1 | Introdução ao Asterisk o cliente final), configure você mesmo. Total liberdade e interface padrão. No fim das contas é LINUX. 1.3.3 Ambiente de desenvolvimento fácil e rápido O Asterisk pode ser programado em C com as APIs nativas, ou em qualquer outra linguagem usando AGI. 1.3.4 Rico e abrangente em recursos Como temos ressaltado desde o início, poucos são os recursos encontrados em equipamentos PABX vendidos no mercado que não possam ser encontrados ou criados no Asterisk. Já o reverso, para encontrar tudo que tem no Asterisk em um PABX convencional... 1.3.5 É possível prover conteúdo dinâmico por telefone. Como o Asterisk é programado com C ou outras linguagens de domínio da maioria dos programadores, as possibilidades de prover conteúdo dinâmico por telefone são sem limite. 1.3.6 Plano de discagem flexível e poderoso Mais uma vez o Asterisk se supera. Se pensarmos, a maioria das centrais, nem mesmo rota de menor custo possuem. Com o Asterisk este processo é simples e prático. 1.3.7 Roda no Linux e é código aberto Uma das coisas mais fantásticas do Linux é a comunidade de software livre. Quando eu acesso o Wiki, ou os fóruns de software em código aberto eu percebo que a adoção de usuários é muito rápida, milhares de questões e relato de problemas são enviados todos os dias. O Asterisk é provavelmente um dos softwares que mais pessoas têm disponíveis para testes e avanços. Isto torna o código estável e permite a rápida resolução de problemas. 1.3.8 Limitações da arquitetura do Asterisk O Asterisk usa a CPU do servidor para processar os canais de voz, ao invés de ter um DSP (processador de sinais digitais) dedicado a cada canal. Enquanto isto permitiu que o custo fosse reduzido para as placas E1/T1, o sistema é muito dependente da performance da CPU. Minha recomendação é preservar ao máximo a CPU do Asterisk, rodá-lo sempre em uma máquina dedicada e testar o dimensionamento antes de implantar. Em minha opinião, o Asterisk deve ser sempre implementado em uma VLAN específica para VoIP, qualquer tempestade de broadcasts
  • 23. 1.4 Arquitetura do Asterisk | 7 causada por loops ou vírus pode comprometer o seu funcionamento devido ao uso de CPU das placas de rede quando este fenômeno acontece. 1.4 Arquitetura do Asterisk APIdeformatodearquivo Asterisk APIdetraduçãodeCodecs Gsm,ALaw,Ulaw,G.723, G729,ADPCM,MP3,Speex, LPC10 GSM,WAV,G723af,MP3 Figura 1.1 Arquitetura do Asterisk. A figura acima mostra a arquitetura básica do Asterisk. Vamos explicar abaixo os conceitos relacionados à figura acima como canais, codecs e aplicações. 1.4.1 Canais Um canal é o equivalente a uma linha telefônica na forma de um circuito de voz digital. Ele geralmente consiste de ou um sinal analógico em um sistema POTS1 ou alguma combinação de CODEC e protocolo de sinalização (GSM com SIP, Ulaw com IAX). No início as conexões de telefonia eram sempre analógicas e por isso, mais suscetíveis a ruídos e eco. Mais recentemente, boa parte da telefonia passou para o sistema digital, onde o sinal analógico é codificado na forma digital usando normalmente PCM (Pulse Code Modulation). Isto permite que um canal de voz seja codificado em 64 Kilobits/segundo sem compactação. Alguns dos hardwares que o Asterisk suporta: 1 POTS – Plain Old Telephony System, sistema de telefonia convencional, baseado normalmente em linhas analógicas.
  • 24. 8 | Capítulo 1 | Introdução ao Asterisk • Zaptel – Wildcard T410P – Placa E1/T1 com quatro portas (PCI 3.3 volts apenas) Zaptel – Wildcard T405P – Placa E1/T1 com quatro portas (PCI 5 volts apenas) Zaptel – TDM400P – Placa com quatro portas para tel. analógicos e ADSI, Zaptel - TE110P – Placa com E1/T1 com uma porta, meio- comprimento. Quicknet, - as placas quicknet, tanto PhoneJack quanto LineJack podem ser usadas com o Asterisk. • ISDN4Linux – É um driver antigo para placas ISDN BRI, acesso básico. Placas neste padrão poderão ser usadas no Asterisk. ISDN CAPI – É a outra forma de suportar as placas ISDN BRI no Linux. Placas que suportam este padrão poderão ser usadas com o Asterisk. • Voicetronix: possui placas com maior densidade de canais FXS e FXO que as da Digium. Canais que o Asterisk suporta: • Agent: Um canal de agente DAC. • Console: Cliente de console do Linux, driver para placas de som (OSS ou ALSA). • H323: Um dos protocolos mais antigos de VoIP, usado em muitas implementações. • IAX e IAX2: Inter-Asterisk Exchange Protocol, o próprio protocolo do Asterisk. • MGCP: Media Gateway Control Protocol, outro protocolo de VOIP. • Modem: Usado para linhas ISDN e não modems. • NBS: Usado para broadcast de som. • Phone: Canal de telefonia do Linux. • SIP: Session Initiation Protocol, o protocolo de VoIP mais comum. • Skinny: Um driver para o protocolo dos telefones IP da Cisco. • VOFR: voz sobre frame-relay da Adtran. • VPB: Linhas telefônicas para placas da Voicetronix. • ZAP: Para conectar telephones e linhas com placas da Digium. Também usado para TDMoE (TDM sobre Ethernet) e para o Asterisk zphfc (ISDN em modo NT). • Unicall: Usado para linhas digitais com sinalização E1/R2. Alguns drivers que podem ser instalados:
  • 25. 1.4 Arquitetura do Asterisk | 9 • Bluetooth: Permite o uso de dispositivos Bluetooth para mudar o roteamento. • CAPI: canal ISDN CAPI • mISDN: canal mISDN channel • SCCP: Um driver alternativo para o Skinny. 1.4.2 Codecs e Conversões de CODEC Obviamente é desejado colocar tantas chamadas quanto possíveis em uma rede de dados. Isto pode ser feito codificando em uma forma que use menos banda passante. Este é o papel do CODEC (COder/DECoder), alguns CODECs como o g.729 permite codificar a 8 Kilobits por segundo, uma compressão de 8 para 1. Outros exemplos são ulaw, alaw, gsm e ilbc. O Asterisk suporta os seguintes CODECs: • G.711 ulaw (usado nos EUA) – (64 Kbps). • G.711 alaw (usado na Europa e no Brasil) – (64 Kbps). • G.723.1 – Modo Pass-through • G.726 - 32kbps no Asterisk 1.0.3, 16/24/32/40kbps • G.729 – Precisa de licença, a menos que esteja usando o modo pass-thru.(8Kbps) • GSM – (12-13 Kbps) • iLBC – (15 Kbps) • LPC10 - (2.5 Kbps) • Speex - (2.15-44.2 Kbps) 1.4.3 Protocolos Enviar dados de um telefone a outro seria fácil se os dados encontrassem seu próprio caminho para o outro telefone. Infelizmente isto não acontece, é preciso um protocolo de sinalização para estabelecer as conexões, determinar o ponto de destino, e também questões relacionadas à sinalização de telefonia como campainha, identificador da chamada, desconexão, etc. Hoje é comum o uso do SIP (Session Initiated Protocol), muito embora outros protocolos também sejam expressivos no mercado como o H.323, o MGCP e recentemente o IAX, que é excepcional quando se trata de trunking e NAT (Network Address Translation). O asterisk suporta: • SIP • H323 • IAXv1 e v2 • MGCP • SCCP (Cisco Skinny).
  • 26. 10 | Capítulo 1 | Introdução ao Asterisk 1.4.4 Aplicações Para conectar as chamadas de entrada com as chamadas de saída ou outros usuários do asterisk são usadas diversas aplicações como o Dial, por exemplo. A maior parte das funcionalidades do Asterisk é criada na forma de aplicações como o VoiceMail (correio de voz), Meetme (conferência), entre outras. Você pode ver as aplicações disponíveis no Asterisk usando o comando “show applications” na interface de linha de comando do Asterisk. Além das aplicações na versão padrão existem aplicações que podem ser adicionadas a partir do arquivo asterisk-addons e de terceiros. 1.5 Visão geral do Asterisk x x x x x xx x x xx x x xx x CISCO IP PHONE 7905 S ERIES 1 2 AB C 3 D E F 4 5 J K L 6 MN OG H I 7 8 TU V 9 W XY ZP Q R S * 0 # 4 7 P QRS * CISCO IP PHONE 7905 S ERIES 1 2 AB C 3 D E F 4 5 J K L 6 MN OG H I 7 8 TU V 9 W XY ZP Q R S * 0 # 4 7 P QRS * CISCO IP PHONE 7905 S ERIES 1 2 AB C 3 D E F 4 5 J K L 6 MN OG H I 7 8 TU V 9 W XY ZP Q R S * 0 # 4 7 P QRS * Figura 1.2 - Visão Geral do Asterisk Dentro de uma visão geral, o Asterisk é um PABX híbrido que integra tecnologias como TDM2 e telefonia IP com funcionalidade de unidade de resposta automática e distribuição automática de chamadas. Neste momento do livro é provável que você não esteja entendendo todos estes termos, mas ao longo dos capítulos, você estará cada vez mais familiarizado. Na figura acima podemos ver que o Asterisk pode se conectar a uma operadora de telecomunicações ou um PABX usando interfaces analógicas ou digitais. Os telefones podem ser IP. Ele pode atuar como um softswitch, media gateway, correio de voz, áudio conferência e possui um mecanismo de música em espera interno. 2 TDM – TDM - multiplexação por divisão de tempo, toda a telefonia convencional está baseada neste conceito, quando falarmos em TDM estaremos nos referindo a circuitos T1 e E1. E1 é mais comum no Brasil e Europa, T1 é mais usado nos EUA.
  • 27. 1.6 Diferenças entre o velho e o novo mundo | 11 1.6 Diferenças entre o velho e o novo mundo 1.6.1 Telefonia usando o velho modelo de PABX/Softswitch x x x x x xx x x xx x CISCO IP PHONE 7905 SERIES 1 2 A B C 3 D EF 4 5 J K L 6 M N OG H I 7 8 TU V 9 WX YZP Q R S * 0 # 4 7 PQR S * CISCO IP PHONE 7905 SERIES 1 2 A B C 3 D EF 4 5 J K L 6 M N OG H I 7 8 TU V 9 WX YZP Q R S * 0 # 4 7 PQR S * CISCO IP PHONE 7905 SERIES 1 2 A B C 3 D EF 4 5 J K L 6 M N OG H I 7 8 TU V 9 WX YZP Q R S * 0 # 4 7 PQR S * x x Figura 1.3 - PABX por software do tipo convencional (softswitch) No antigo modelo de PABX, todos os componentes eram vendidos separadamente. Você tinha de comprar cada componente separadamente e integrar ao sistema. Os custos e riscos eram altos e a maior parte dos equipamentos proprietária.
  • 28. 12 | Capítulo 1 | Introdução ao Asterisk 1.6.2 Telefonia do jeito Asterisk x x CISCO IPPHONE 7905 SERIES 1 2 A BC 3 D E F 4 5 J K L 6 M N OG H I 7 8 T U V 9 W X YZP Q R S * 0 # 4 7 PQ RS * x xx x x xx x CISCO IPPHONE 7905 SERIES 1 2 A BC 3 D E F 4 5 J K L 6 M N OG H I 7 8 T U V 9 W X YZP Q R S * 0 # 4 7 PQ RS * CISCO IPPHONE 7905 SERIES 1 2 A BC 3 D E F 4 5 J K L 6 M N OG H I 7 8 T U V 9 W X YZP Q R S * 0 # 4 7 PQ RS * Figura 1.4 – Telefonia do jeito Asterisk O Asterisk faz todas estas funções de forma integrada, o licenciamento é gratuito (GPL General Public License) e pode ser feito em um único ou em vários servidores de acordo com um dimensionamento apropriado. Incrível dizer isto, mas posso atestar que às vezes é mais fácil implantar o Asterisk do que até mesmo especificar e licenciar um sistema de telefonia convencional. Se me permitem a crítica neste livro, os grandes fabricantes além de caros criaram uma barreira enorme à adoção dos seus produtos, pois é preciso um especialista para descobrir o que está ou não incluído nas licenças e de que forma se licenciam seus produtos. Esse é o um dos pontos individuais que mais contribuíram para que eu abraçasse o Asterisk.
  • 29. 1.7 Construindo um sistema de teste | 13 1.7 Construindo um sistema de teste x x x xx x CISCO IP PHONE 7905 SERIES 1 2 A B C 3 DE F 4 5 J K L 6 M N OG HI 7 8 T U V 9 WX Y ZP QR S * 0 # 4 7 PQ RS * SIP phone FXO interface FXS interface x x x xx x x x Internet Connection Figura 1.5 O PABX 1x1 É comum iniciar construindo uma máquina de teste. A máquina de teste mais simples é um PABX 1x1 com pelo menos uma linha e um telefone. Existem várias formas de fazê-lo, vamos examinar algumas. 1.7.1 Um FXO, Um FXS A forma mais simples de criar um sistema de teste é usar uma placa com uma porta FXO e uma FXS como uma Digium TDM400. Conecte a porta FXO a uma linha telefônica comum e um telefone normal (analógico) ‘a porta FXS e você tem o PABX 1x1. 1.7.2 VoIP Service Provider, softfone ou ATA Uma forma bastante econômica é criar um Asterisk de teste totalmente em VoIP. Você pode contratar um número de telefone junto a um provedor de serviços de voz sobre IP. Existem vários operando e algumas operadoras tradicionais já oferecem este serviço. Na parte do telefone você pode usar um softfone gratuito, existem vários como o Idefisk, X- Lite e SJPhone. Você pode também adquirir um adaptador de telefonia analógica para ligar telefones analógicos a ele. 1.7.3 Placa clone FXO, softfone ou ATA
  • 30. 14 | Capítulo 1 | Introdução ao Asterisk Esta é a forma que eu usei para testar o Asterisk. Existem algumas placas de fax/modem padrão V.90 que operam com o Asterisk. As placas X100P e X101P da Digium eram baseadas nestes chips (daí o nome de clones). É possível conectar uma linha telefônica em uma placa destas. É bem difícil encontrá-las hoje, pois foram descontinuadas. Os chipsets que eram conhecidos por funcionar eram (Motorola 68202-51, Intel Ambient MD3200, 537PG e 537PU). Para o telefone você pode usar um ATA ou um softfone. 1.8 Cenários de uso do Asterisk Existêm diferentes cenários onde o Asterisk pode ser usado. Vamos listar alguns deles explicando as vantagens e possíveis limitações. 1.8.1 IP PBX O cenário mais comum é a instalação de um novo PABX ou a substituição de um PABX existente. Se você compara o Asterisk com outras alternativas, você irá descobrir que ele é possui uma excelente relação custo/benefício se comparado com centrais digitais e principalmente IP. Comparar o Asterisk com uma central analógica é no mínimo injusto. Várias empresas estão modificando suas especificações para Asterisk. x x xx x x xx x x x x x x x x x x x x x x x Figure 1.6 IP PBX
  • 31. 1.8 Cenários de uso do Asterisk | 15 1.8.2 Atualização de PABX existente para suportar VoIP. Você pode ver na imagem abaixo um dos cenários mais comuns. As grandes companhias normalmente não desejam assumir grandes riscos e querem preservar investimentos já feitos. Habilitar uma central antiga para o mundo IP usando o Asterisk pode ser uma alternativa excelente. Com isso é possível usar telefones IP, ATAs e softfones em escritórios remotos e mesmo se conectar a provedores de serviço com melhores taxas. x x x xx x x xx x x x x x x x x x x x x x x x x x x x x x x x Figure 1.7 Integrção com um PABX existente
  • 32. 16 | Capítulo 1 | Introdução ao Asterisk 1.8.3 Interligação de filiais através de VoIP Uma aplicação muito útil para VoIP é a conexão de filiais usando uma rede WAN existente ou mesmo a Internet. Isto permite a você evitar as tarifas das operadoras para as ligações entre a matriz e as filiais. È possível inclusive sair discando nas cidades onde você possui um ponto de presença VoIP com saída para rede pública. PSTN Telco orexisting PBX x xx x x xx xx xx x x xx x x xx xx xx x x xx x x xx xx xx x Figure 1.8 Interligação de filiais 1.8.4 Servidor de aplicações (URA, Conferência, Correio de voz) Você pode usar também o Asterisk como um servidor de aplicações para um PABX existente ou conectado diretamente à rede pública. O Asterisk pode fazer os papeis de correio de voz, recepção de fax, gravação de chamadas, ura conectada a um banco de dados ou mesmo um servidor de áudio conferência. Se você integrar o Asterisk ao e-mail você tem um sistema de mensagens unificado que é uma solução muito custosa em outras plataformas. Para estas aplicações o Asterisk é uma excelente opção com um custo relativamente pequeno.
  • 33. 1.8 Cenários de uso do Asterisk | 17 x x Figure 1.9 Asterisk no papel de servidor de aplicações 1.8.5 Media Gateway A maioria dos provedores de voz sobre IP usam um SIP proxy para fazer o registro, localização e autenticação dos usuários. De qualquer forma a ligação tem de ser encaminhada na maioria das vezes para a rede pública de telefonia. Isto pode ser feito diretamente através de um gateway PSTN usando interfaces E1 ou analógicas. Em muitos casos, no entanto é preciso entroncar com um provedor de terminações usando conexões SIP ou H.323. O Asterisk pode atuar nesta arquitetura como um media gateway traduzindo protocolos de sinalização e codecs. x x x xx x x x x x x Figure 1.10 Asterisk como um gateway de media
  • 34. 18 | Capítulo 1 | Introdução ao Asterisk 1.8.6 Plataforma de Contact Center Um Contact center é uma solução muito complexa. Ela combina diversas tecnologias como DAC (distribuição automática de chamadas), URA (unidade de resposta audível), supervisão de chamadas e agents, relatórios entre outras coisas. Basicamente existem dois tipos de Contact Centers, os ativos e os receptivos. Nos receptivos o Asterisk pode atuar como PABX, DAC, URA, CTI, gravador digital e a solução de telefonia podem ser criadas totalmente nele. No caso do ativo é possível integrar vários discadores existentes no mercado (alguns open source) com o Asterisk. x x x Figure 1-11 Asterisk as a Contact Center Platform 1.9 Sumário O Asterisk é um software com licenciamento GPL, que transforma um PC comum em uma poderosa central telefônica. Foi criado por Mark Spencer da Digium que comercializa o hardware de telefonia. O Hardware de telefonia também é aberto e foi desenvolvido por Jim Dixon no projeto Zapata Telephony. A arquitetura do Asterisk se compõe basicamente de: • CANAIS que podem ser analógicos, digitais ou VoIP.
  • 35. 1.10 Questionário | 19 • PROTOCOLOS de comunicação como o SIP, H323, MGCP e IAX que são responsáveis pela sinalização de telefonia. • CODECs que fazem a codificação da voz de um formato para outro, permitindo que seja transmitida com compressão de até oito vezes (G729a). • APLICAÇÕES que são responsáveis pela funcionalidade do PABX. O Asterisk pode ser usado em inúmeras aplicações, desde um PABX para uma pequena empresa até sistemas de resposta automática de alta densidade. 1.10 Questionário 1. Marque as opções corretas. O Asterisk tem quatro componentes básicos de arquitetura CANAIS PROTOCOLOS AGENTES TELEFONES CODECS APLICAÇÕES 2. Se for necessário criar um PABX com 4 troncos e oito telefones, você pode usar um PC com Linux e três placas TDM400P uma com quatro canais FXO e duas com quatro canais FXS cada. A afirmação acima está: CORRETA INCORRETA 3. Um canal FXS gera tom de discagem, enquanto um canal FXO recebe o tom vindo da rede pública ou de um outro PABX. A afirmação acima está: CORRETA INCORRETA 4. Marque as opções corretas, O Asterisk permite os seguintes recursos: Unidade de Resposta Automática Distribuição automática de chamadas Telefones IP Telefones Analógicos Telefones digitais de qualquer fabricante.
  • 36. 20 | Capítulo 1 | Introdução ao Asterisk 5. Para tocar música em espera o Asterisk necessita de um CD Player ligado em um ramal FXO. A afirmação está: CORRETA INCORRETA 6. É responsável pelo atendimento automático de clientes, normalmente toca um “prompt” e espera que usuário selecione uma opção. Am alguns casos pode ser usada em conjunto com um banco de dados e conversão texto para fala. Estamos falando de uma: URA IVR DAC Unified Messaging 7 – Marque as opções corretas, Um banco de canais é conectado ao Asterisk através de uma interface: E1 T1 FXO FXS 8 – Marque a opção correta. Um canal E1 suporta ___ canais de telefonia enquanto um T1 suporta ___ canais. 12, 24 30, 24 12,12 30,23 9 – Nas plataformas de telefonia convencional, normalmente URA, DAC e Correio de voz estão incluídos no PABX. Esta afirmação está: CORRETA INCORRETA 10 – Marque as opções corretas, É possível interligar usando o Asterisk várias filiais através de voz sobre IP reduzindo a despesa com ligações de longa distância. Em uma filial: O Asterisk pode ser a central telefônica para todos os usuários. O Asterisk pode integrar uma central telefônica existente Podem ser usados apenas telefones IP ligados a um Asterisk centralizado
  • 37. Baixando e instalando Neste capítulo vamos abordar a instalação e execução do Asterisk. 2.1 Objetivos do capítulo Ao final deste capítulo você deverá estar apto à: • Dimensionar o hardware necessário para o Asterisk. • Instalar o Linux com as bibliotecas necessárias para o Asterisk. • Baixar o Asterisk usando FTP. • Compilar o Asterisk no Linux. • Executar e explicar as opções de execução do Asterisk. • Aprender a iniciar o Asterisk na carga do Linux com um usuário diferente de root. 2.2 Introdução Este capítulo vai ajudá-lo a preparar seu sistema para a instalação do Asterisk. O Asterisk funciona em muitas plataformas e sistemas operacionais, mas nós escolhemos manter as coisas simples e ficar em uma única plataforma e distribuição do Linux. Vamos usar o Debian neste livro. As instruções abaixo podem funcionar com outra distribuição do Linux, mas isto não foi testado. O Asterisk é conhecido por funcionar na maioria das distribuições. Testamos no Debian, Suse 9.2 e no CentOS. 2.3 Hardware Mínimo O Asterisk usa de forma intensiva o processador, principalmente para fazer o processamento dos canais de voz. Se você estiver construindo um sistema complexo com carga elevada é importante entender este conceito. Para construir seu primeiro PABX um processador compatível com Intel que seja melhor que um Pentium 300Mhz com 256 MB RAM é o suficiente. O Asterisk não requer muito espaço em disco, cerca de 100 MB compilados, mais código fonte, voice-mail, prompts customizados e todos requerem espaço. Capítulo 2
  • 38. 22 | Capítulo 2 | Baixando e Instalando o Asterisk Se você usar apenas VOIP, nenhum outro hardware é necessário. Pode se usar softfones como os da Counterpath (X-Lite) e entroncar com operadoras de voz sobre IP. Uma lista das operadoras de voz sobre IP no Brasil pode ser encontrada em: http://www.voipcharges.com/providers.php?_filter=1&country_sid=31 Cuidado ! Algumas aplicações do Asterisk como o “Meetme” requerem uma fonte de clock para fornecer a temporização. Normalmente a fonte de clock do Asterisk é uma placa TDM. Se o seu sistema não tem uma placa TDM, você pode usar o driver ztdummy que usa a USB como fonte de temporização. (No Kernel versão 2.6 o ztdummy usa um temporizador interno do kernel e não necessita da USB, usar o temporizador interno do kernel é mais recomendado). 2.3.1 Montando o seu sistema O hardware necessário para o Asterisk não é muito complicado. Você não precisa de uma placa de vídeo sofisticada ou periféricos. Portas seriais, paralelas e USB podem ser completamente desabilitadas. Uma boa placa de rede é essencial. Se você estiver usando uma das placas da Digium, é bom verificar as instruções da sua placa-mãe para determinar se os Slots PCI suportam estas placas. Muitas placas-mãe compartilham interrupções em slots PCI. Conflito de interrupção é uma fonte potencial de problemas de qualidade de áudio no Asterisk. Uma maneira de liberar IRQs é desabilitar na BIOS todo o hardware que não for utilizado, como placas de som on-board por exemplo. 2.3.2 Questões de compartilhamento de IRQ Muitas placas de telefonia como a X100P podem gerar grandes quantidades de interrupções, atendê-las toma tempo. Os drivers podem não conseguir fazê-lo em tempo se outro dispositivo estiver processando a mesma IRQ compartilhada e a linha de IRQ não puder receber outra interrupção. Tende a funcionar melhor em sistemas multiprocessados. Em sistemas monoprocessados você pode ter muitas perdas de interrupção e clock desalinhado. Quaisquer das placas da Digium e outras placas de telefonia podem estar sujeitas ao mesmo problema. Como a entrega precisa de IRQs é uma necessidade primária em telefonia, você não deve compartilhar IRQs com nada. Nem sempre isto ocorre, mas você deve prestar atenção ao problema. Se você está usando um computador dedicado para o Asterisk, desabilite o maior número de dispositivos que você não vá usar. A maioria das BIOS permite que você manualmente designe as IRQs. Vá até a BIOS e olhe na seção de IRQs. É bem possível que você consiga configuras as interrupções manualmente por slot.
  • 39. 2.4 Escolhendo uma distribuição do Linux. | 23 Uma vez iniciado o computador, veja em /proc/interrupts as IRQs designadas. # cat /proc/interrupts CPU0 0: 41353058 XT-PIC timer 1: 1988 XT-PIC keyboard 2: 0 XT-PIC cascade 3: 413437739 XT-PIC wctdm <-- TDM400 4: 5721494 XT-PIC eth0 7: 413453581 XT-PIC wcfxo <-- X100P 8: 1 XT-PIC rtc 9: 413445182 XT-PIC wcfxo <-- X100P 12: 0 XT-PIC PS/2 Mouse 14: 179578 XT-PIC ide0 15: 3 XT-PIC ide1 NMI: 0 ERR: 0 Acima você pode ver as três placas da Digium cada uma na sua IRQ. Se este for o caso, você pode ir em frente e instalar os drivers de hardware. Se não for o caso, volte na BIOS até que as placas não estejam compartilhando as IRQs. 2.4 Escolhendo uma distribuição do Linux. O Asterisk foi originalmente desenvolvido para rodar em Linux, embora possa ser usado no BSD e OS X. No entanto, as placas PSTN da Digium foram desenhadas para trabalhar com Linux i386. Se você for novo com Asterisk procure usar o Linux. 2.4.1 Requisitos do Linux Várias distribuições como RedHat, Mandrake, Fedora, Debian, Slackware e Gentoo foram usadas com sucesso com o Asterisk. 2.4.2 Pacotes necessários. Antigamente existiam alguns pacotes que eram necessários para instalar o Asterisk como o readline e readline-devel que não são mais necessários. Não existe hardware especial tal como uma placa de som e o único pacote necessário é o próprio Asterisk. Se você estiver usando hardware da Digium ou ztdummy, você vai precisar do pacote zaptel. O pacote zaptel é necessário para que algumas aplicações sejam incluídas em tempo de compilação. Se você escolher compilar o Asterisk e não o zaptel, mas
  • 40. 24 | Capítulo 2 | Baixando e Instalando o Asterisk descobrir que esta faltando uma aplicação relacionada ao pacote zaptel (Como o Meetme()), você terá de compilar o zaptel e então recompilar o Asterisk para que a aplicação seja incluída. Para interfaces T1 e E1 o pacote libpri é necessário. Bison é necessário para compilar o Asterisk. Os pacotes de desenvolvimento ncurses e ncurses-development são necessários se você quiser construir novas ferramentas (Como o astman). As bibliotecas zlib e zlib-devel são necessárias agora para compilar. Isto se deve a adição do DUNDi (Distributed Universal Number Discovery) protocol. O openssl e openssl-dev também são necessários. 2.5 Instalando o Linux para atender ao Asterisk. Usamos o Debian com Kernel 2.6 para a instalação do Asterisk com o Linux. Escolhemos esta distribuição pelo seu grau de aceitação e por ser uma das distribuições suportadas pela Digium. Abaixo seguem as instruções da instalação do Asterisk a partir do zero. Passo 1: Coloque o CD do Debian no cdrom e inicialize o seu PC.
  • 41. 2.5 Instalando o Linux para atender ao Asterisk. | 25 Passo 2 : Selecione o idioma para a instalação. Passo 3: Selecione o país do idioma selecionado anteriormente. Passo 4: Escolha agora o mapa de teclado correspondente. Passo 5: Digite o nome do host da máquina.
  • 42. 26 | Capítulo 2 | Baixando e Instalando o Asterisk Passo 6: Digite o domínio ao qual este equipamento faz parte. Passo 7: Será feita a configuração do particionamento do disco do equipamento, apenas confirme as opções apresentadas. Cuidado ! Todas as informações do seu disco rígido serão apagadas. Instale em um PC novo ou que você possa formatar !!!
  • 43. 2.5 Instalando o Linux para atender ao Asterisk. | 27 Passo 8: Confirme que você vai apagar todo o disco. Passo 9: Confirme que todos os arquivos ficarão em uma partição. Passo 10: Aceite e finalize as opções de particionamento. Passo 11: Confirme novamente.
  • 44. 28 | Capítulo 2 | Baixando e Instalando o Asterisk Passo 12: Aceite a instalação do GRUB. Passo 13: Instalação está completa, digite <enter> para continuar.
  • 45. 2.5 Instalando o Linux para atender ao Asterisk. | 29 Passo 14: Agora a máquina irá reiniciar, remova o CD. Passo 15: Siga as opções apresentadas para a configuração do fuso horário. Passo 16: Escolha America.
  • 46. 30 | Capítulo 2 | Baixando e Instalando o Asterisk Passo 17: Escolha “Other”. Passo 18: Escolha “São Paulo”. Passo 19: Digite “asterisk” como senha para o usuário root. Passo 20: Redigite a senha para confirmação.
  • 47. 2.5 Instalando o Linux para atender ao Asterisk. | 31 Passo 21: Crie um usuário chamado asterisk. Passo 22: Entre com o nome do usuário Asterisk novamente. Passo 23: Digite “asterisk” como senha para o usuário asterisk.
  • 48. 32 | Capítulo 2 | Baixando e Instalando o Asterisk Passo 24: Redigite a senha para confirmação. Passo 25: Responda não a pergunta para verificação de outro CD.
  • 49. 2.5 Instalando o Linux para atender ao Asterisk. | 33 Passo 26: Já que utilizaremos esta máquina como servidor Asterisk PBX, não é necessário selecionar nenhuma opção apresentada. Redigite a senha para confirmação. Passo 27: Apenas confirme a opção apresentadas para o encerramento das configurações do Debian
  • 50. 34 | Capítulo 2 | Baixando e Instalando o Asterisk Passo 28: Use a conta Asterisk para o servidor de e-mail: 2.6 Preparando o Debian para o Asterisk. A instalação do Debian está completa, vamos agora instalar os pacotes necessários para a instalação/compilação dos drivers das placas zaptel e do próprio Asterisk. Passo 1: Faça o login como root Passo 2: Adicionar fonte para download de pacotes (/etc/apt/sources.list)) #apt-setup Passo 3: Selecionar ftp.
  • 51. 2.6 Preparando o Debian para o Asterisk. | 35 Passo 4: Selecionar Brazil. Passo 5: Selecionar ftp.br.debian.org Passo 6: Selecionar <no> para não inserir nenhuma outra fonte.
  • 52. 36 | Capítulo 2 | Baixando e Instalando o Asterisk Passo 7: Instalar os Headers do Kernel em execução: #apt-get install kernel-headers-`uname –r` #ln -s /usr/src/kernel-headers-`uname -r` /usr/src/linux Passo 8: Instalação dos pacotes necessários para o Asterisk: #apt-get install bison openssl libssl-dev libasound2-dev libc6-dev libnewt- dev libncurses5-dev zlib1g-dev zlib-bin gcc make 2.7 Obtendo e compilando o Asterisk Agora que você já instalou o Linux e as bibliotecas necessárias, vamos partir para a instalação do Asterisk. 2.7.1 Obtendo os fontes do Asterisk Para obter os fontes do Asterisk e drivers da Zaptel para uso com hardware digium, você deve baixar os pacotes da Digium. Baixe os arquivos usando o comando wget. Crie o diretório /usr/src se ele não existir. No momento do fechamento deste livro estas eram as versões correntes, substitua os comandos abaixo com os arquivos das versões mais atuais. # cd /usr/src #wget http://ftp.digium.com/pub/zaptel/zaptel-1.2.5.tar.gz #wget http://ftp.digium.com/pub/libpri/libpri-1.2.2.tar.gz #wget http://ftp.digium.com/pub/asterisk/asterisk-addons-1.2.2.tar.gz #wget http://ftp.digium.com/pub/asterisk/asterisk-sounds-1.2.1.tar.gz #wget http://ftp.digium.com/pub/asterisk/asterisk-1.2.5.tar.gz Descompacte os arquivos usando: # tar –xzvf asterisk-1.2.5.tar.gz
  • 53. 2.8 Compilando o Asterisk | 37 # tar –xzvf libpri-1.2.2.tar.gz # tar –xzvf asterisk-addons-1.2.2.tar.gz # tar –xzvf asteriks-sounds-1.2.1.tar.gz # tar –xzvf zaptel-1.2.4.tar.gz 2.7.2 Compilando o driver zaptel Normalmente a compilação dos drivers zaptel é bem simples. Entretanto podem ocorrer casos onde você não possui nenhuma placa TDM que use o driver zaptel. O Asterisk precisa de uma fonte de temporização que normalmente é fornecido por uma placa com driver zaptel. Se esta placa não existir vai ser preciso compilar o módulo ztdummy. O módulo ztdummy usa o relógio interno do kernel (kernel 2.6) ou da interface USB (kernel 2.4) para fornecer temporização para o Asterisk. O Driver ztdummy requer que você tenha uma controladora USB UHCI. Se você estiver usando kernel 2.4. Você pode verificar se a sua placa-mãe tem uma controladora UHCI USB rodando o lsmod da linha de comando. # lsmod Module Size Used by Not tainted ... uhci-hcd 29725 0 [unused] <-- usb-uhci usbcore 105342 3uhci-hcd A tela acima mostra os módulos USB carregados. Se você vir uma linha que lê usb-uhci. Isto mostra que o módulo UHCI está carregado e pronto para ser usado com o ztdummy se você estiver usando a versão 2.4, se estiver usando a versão de kernel 2.6 nada disso é necessário. 2.7.2.1 Compilando os drivers zaptel Você vai precisar compilar os módulos da Zaptel se você planeja usar o ztdummy ou qualquer hardware da Digium. Os seguintes comandos irão compilar e instalar módulos para quaisquer hardwares da Digium que você possa ter instalado no seu sistema. Exemplo: Compilando os drivers da Zaptel. cd /usr/src/zaptel-1.2.4/ make clean make install 2.8 Compilando o Asterisk Se você já compilou o software antes, compilar o Asterisk vai parecer bem simples. Rode os seguintes comandos para compilar e instalar o Asterisk.
  • 54. 38 | Capítulo 2 | Baixando e Instalando o Asterisk cd /usr/src/libpri-1.2.2/ make clean make make install cd /usr/src/asterisk-1.2.5/ make clean make make install 2.9 Iniciando e parando o Asterisk Antes de usar o Asterisk, você deve criar os arquivos de configuração. Muito embora a quantidade de configurações possíveis seja muito grande, apenas um pequeno conjunto é necessário de forma a iniciar o Asterisk com sucesso. Gere a configuração exemplo do Asterisk usando: cd /usr/src/asterisk-1.2.5/ make samples Com esta configuração mínima, já é possível iniciar o Asterisk com sucesso. /usr/sbin/asterisk –vvvgc Use o comando stop now para derrubar o Asterisk. Veja os comandos disponíveis na interface de linha de comando do Asterisk. CLI>stop now 2.9.1 Parâmetros de linha de comando do Asterisk. O processo de executar o Asterisk é bem simples. Se o Asterisk for rodado sem argumentos, ele é lançado como um “daemon” (Processo que espera conexões em uma porta TCP ou UDP). /sbin/asterisk Você pode acessar a console de um processo do Asterisk que já esteja em execução usando o comando abaixo. Mais de uma console pode ser conectada ao Asterisk simultaneamente. /sbin/asterisk –r 2.9.2 Abaixo os parâmetros disponíveis • -h: Help mostra as opções de parâmetros de linha de comando.
  • 55. 2.10 Iniciando o Asterisk em tempo de inicialização. | 39 • -C <configfile>: Inicia o Asterisk com arquivo de configuração diferente do padrão /etc/asterisk/asterisk.conf • -f: Foreground. Inicia o Asterisk, mas não coloca um processo em Background. • -c: Habilita o modo de console. Inicia o Asterisk em Foreground (na frente, implica na opção –f), com uma console com interface de linha de comando. • -r: Console remota. • -n: Desabilita a cor na console. • -i: Pede pelos códigos criptográficos de inicialização. • -p: Roda como pseudo-realtime. Roda com prioridade de tempo real. • -q: Modo silencioso suprime as mensagens. • -v: Inclui mensagens detalhadas, (múltiplos v’s = mais verbose). • -d: Habilita debug extra em todos os módulos • -g: Faz com que o Asterisk descarregue o núcleo em caso de segment violation. • -x<cmd>: Executa o comando <cmd> (válido apenas com r) 2.10 Iniciando o Asterisk em tempo de inicialização. Vamos agora preparar o Asterisk para iniciar automaticamente no boot do Linux, digite: cd /etc/init.d cp /usr/src/asterisk/contrib/init.d/rc.debian.asterisk ./asterisk Para atualizar os scripts de inicialização do Linux digite: update-rc.d asterisk defaults 2.11 Iniciando o Asterisk usando um usuário diferente de root. É mais seguro executar o Asterisk com um usuário diferente do usuário root. No caso de uma falha de segurança e um ataque do tipo “buffer overflow” é mais seguro que o Asterisk tenha sido iniciado com um usuário menos privilegiado. Para alterar o usuário de execução do Asterisk: 1) Edite o arquivo asterisk: vi /etc/init.d/asterisk
  • 56. 40 | Capítulo 2 | Baixando e Instalando o Asterisk 2) Descomente as seguinte linhas do arquivo removendo o # do início de cada linha: AST_USER="asterisk" AST_GROUP="asterisk" 3) Para alterar os direitos do usuário asterisk nas pastas utilizadas para a execução do Asterisk, digite: cd / chown --recursive asterisk:asterisk /etc/asterisk chmod --recursive u=rwX,g=rX,o= /etc/asterisk chown --recursive asterisk:asterisk /var/lib/asterisk chown --recursive asterisk:asterisk /var/log/asterisk chown --recursive asterisk:asterisk /var/run/asterisk chown --recursive asterisk:asterisk /var/spool/asterisk chown --recursive asterisk:asterisk /dev/zap chmod --recursive u=rwX,g=rX,o= /var/lib/asterisk chmod --recursive u=rwX,g=rX,o= /var/log/asterisk chmod --recursive u=rwX,g=rX,o= /var/run/asterisk chmod --recursive u=rwX,g=rX,o= /var/spool/asterisk chmod --recursive u=rwX,g=rX,o= /dev/zap 4) Teste as alterações realizadas digitando: /etc/init.d/asterisk start 2.12 Considerações sobre a instalação do Asterisk 2.12.1 Sistemas em produção Se o Asterisk for instalado em um ambiente de produção, deve-se prestar atenção no projeto do sistema. O servidor deve ser otimizado de forma que as funções de telefonia tenham prioridade sobre os outros processos do sistema. Na maioria dos casos o Asterisk não deve rodar outros processos, principalmente se forem intensivos em CPU. Se forem necessários processos que utilizam muita CPU como um bancos de dados, por exemplo, estes devem ser instalados eventualmente em um servidor separado. De uma forma geral o Asterisk é um sistema sensível a variações na perfomance da máquina. Isto significa que em um sistema em produção o ideal é não usar interfaces gráficas como o KDE ou GNOME. 2.12.2 Considerações sobre a rede Se você vai usar telefones IP, o que é muito provável, é importante que você preste atenção a algumas questões sobre a rede. Os protocolos de voz sobre IP são muito bons e resistentes a perdas de pacotes, atrasos e variações de atrasos. Entretanto se você abusar, a qualidade de voz não será boa. Só é possível garantir a qualidade da voz utilizando QoS fim-a- fim, o que é inviável principalmente em telefonia sobre a Internet. Desta forma seguem algumas recomendações.
  • 57. 2.13 Sumário | 41 Implemente QoS fim-a-fim sempre que possível. Mesmo em switches de 100Mbps onde é raro ter um congestionamento, vale a pena, um vírus ou uma condição de rede inesperada pode por tudo a perder. Seja conservador, use, por exemplo, uma conexão de Internet exclusiva para softfones e telefones IP. Na maioria das vezes os backbones têm folga no tráfego, mas a conexão de acesso é congestionada pelo próprio usuário com downloads, navegação, e-mail entre outros. Evite hubs de 10 e 100 Mbps, as colisões nestes equipamentos, causam variação no atraso (jitter). Jitter é um dos piores inimigos da telefonia IP. Oriente os usuários de telefonia sobre a Internet onde não é possível garantir a qualidade. Manter as expectativas em um nível realista evita problemas futuros e comentários como “Se eu soubesse que era assim....”. Quando usar uma rede IP privada com equipamentos que suportam QoS fim-a-fim, se a qualidade da voz estiver ruim, verifique imediatamente, é provável que exista algum problema na sua rede. Com QoS bem implementado a qualidade de voz é perfeita, “sem desculpas”. 2.13 Sumário Neste capítulo você aprendeu que o requisito mínimo de hardware do Asterisk é um Pentium 300 Mhz com 256 MB RAM e pouco mais de 100 MB de espaço livre em disco para instalar o Asterisk. Por fim aprendemos a inicializar o Asterisk com um usuário diferente de “root”. 2.14 Questionário 1. Qual a configuração mínima para o Asterisk. 2. As placas de telefonia para o Asterisk têm um processador próprio (DSP), não precisando assim de muita CPU do servidor. Correto Incorreto 3. Para que a telefonia IP funcione com perfeição é necessário que à rede possua QoS fim-a-fim. Correto Incorreto
  • 58. 42 | Capítulo 2 | Baixando e Instalando o Asterisk 4. É possível obter uma boa qualidade de voz em uma rede que não esteja congestionada com switches de 100 Mbps. Correto Incorreto 5. Liste abaixo as bibliotecas necessárias para compilar o Asterisk. 6. Se você não tem uma placa zaptel você precisa de uma fonte de tempo. O driver ztdummy faz este papel na versão de kernel 2.4 do Linux aproveitando uma biblioteca USB. Isto é necessário, pois algumas aplicações como o _______ e o ______ precisam de uma referência de tempo. 7. Quando você faz uma instalação do Asterisk, o melhor é não instalar os pacotes gráficos como o KDE e GNOME, pois o Asterisk é sensível na questão de CPU e interfaces gráfica roubam muitos ciclos de CPU do servidor. Correto Incorreto 8. Os arquivos de configuração do Asterisk ficam em ____________________. 9. Para instalar os arquivos de configuração de exemplo você precisa executar o seguinte comando. 10. Porque é importante inicializar o Asterisk com um usuário diferente de root.
  • 59. Primeiros passos Neste capítulo você vai aprender a configurar o Asterisk dentro de uma configuração de PABX simples. O objetivo aqui é que você possa ter uma primeira experiência com o Asterisk, configurando um ou dois telefones IP, discando entre eles ou para uma extensão com uma mensagem inicial. Mais à frente, vamos mostrar, com detalhes, os canais SIP, IAX e ZAPATA. 3.1 Objetivos do capítulo Ao final deste capítulo você poderá: • Entender e saber editar os arquivos de configuração. • Aprender a instalar softfones baseados em SIP. • Entender e configurar um plano de discagem simples. • Configurar um PABX simples. 3.2 Introdução Neste capítulo vamos aprender alguns conceitos que vão nos permitir configurar o Asterisk da forma mais básica. No final temos um exercício que poderá ser feito usando hardware de uma porta FXO ou usando uma conexão para um provedor VoIP. Nos capítulos seguintes vamos aumentar gradualmente a dificuldade. É muito importante que se entendam os conceitos apresentados neste capítulo para prosseguir aos capítulos seguintes. 3.3 Gramática dos arquivos de configuração O Asterisk é controlado através de arquivos de arquivos de configuração localizados no diretório /etc/asterisk. O formato dos arquivos de configuração do Asterisk é semelhante aos arquivos (.ini) do Windows. O ponto e vírgula é o caractere de comentário. O (=) e o (=>) podem ser usados de forma idêntica, linhas em branco são ignoradas. Arquivo de exemplo: ; ; A primeira linha sem ser comentário deve ser o título de uma sessão. ; [sessao] chave = valor ; Designação de variável [sessao2] objeto => valor ; Declaração de objeto Capítulo 3
  • 60. 44 | Capítulo 3 | Configuração do Asterisk O interpretador do Asterisk interpreta (=) e (=>) de forma idêntica. A sintaxe é apenas para tornar o código mais legível. Embora os arquivos compartilhem a mesma sintaxe, existem pelo menos três tipos distintos de gramática. 3.3.1 Grupo simples O formato de grupo simples é o mais básico e usado por arquivos de configuração onde os objetos são declarados com todas as opções na mesma linha. Os arquivos extensions.conf, meetme.conf e voicemail.conf seguem este formato. [sessao] objeto1 => op1,op2,op3 objeto2 => op1b,op2b,op3b Neste exemplo, o objeto1 é criado com opções op1, op2 e op3 enquanto o objeto 2 é criado com op1b, op2b e op3b. 3.3.2 Formato de objeto com herança de opções Este formato é usado pelo zapata.conf e outras interfaces onde há muitas opções. Entretanto, a maioria das interfaces e objetos compartilha o mesmo valor para opções com outros. Nesta classe de arquivo de configuração, tipicamente existem uma ou mais seções que contém declarações de um ou mais canais ou objetos. As opções para o objeto são especificadas acima da declaração do objeto e podem ser mudadas para a declaração de outro objeto. É um conceito difícil de entender, mas muito fácil de usar. Considere o exemplo abaixo: [sessao] op1 = bas op2 = adv objeto=>1 op1 = int objeto => 2 As primeiras duas linhas configuram o valor da opção op1 e op2 para “bas” e “adv” respectivamente. Quando o objeto 1 é instanciado, ele é criado com sua opção 1 sendo “bas” e sua opção 2 sendo “adv”. Após declarar o objeto 1, mudamos o valor da opção 1 para “int”. E então criamos o objeto 2, agora o objeto 2 é criado com sua opção 1 sendo “int” e sua opção 2 permanecendo “adv”. 3.3.3 Objeto entidade complexa O formato objeto entidade complexa é usado pelo iax.conf e sip.conf e outras interfaces nas quais existem numerosas entidades com muitas opções e que tipicamente não compartilham um grande volume de
  • 61. 3.4 Configurando uma interface com a rede pública ou com um PABX | 45 configurações comuns. Cada entidade recebe seu próprio contexto (Às vezes existe um contexto reservado tal como [general] para as configurações globais). As opções então são especificadas na declaração de contexto. Considere: [entidade1] op1=valor1 op2=valor2 [entidade2] op1=valor3 op2=valor4 A entidade [entidade1] tem valores valor1 e valor2 para opções op1 e op2 respectivamente. A entidade [entidade2] tem valores valor3 e calor4 para as opções op1 e op2. 3.4 Configurando uma interface com a rede pública ou com um PABX Para se interligar com a rede pública de telefonia é necessária uma interface do tipo FXO (Foreign Exchange Office) e uma linha telefônica comum. Um ramal de uma central telefônica analógica existente pode ser usado também. Você pode obter uma placa FXO comprando uma placa Digium TDM400P. Em termos gerais, uma placa FXO é usada para ligar na rede pública ou a um PABX, esta placa recebe tom. Uma placa FXS em contrapartida pode ser usada para ligar um aparelho telefônico comum, uma linha FXS dá tom. xx xx x xx x Figura 3.1 Diferença entre interface FXS e FXO
  • 62. 46 | Capítulo 3 | Configuração do Asterisk Dica: Outra forma é conseguir uma placa FXO clone de uma X100P. Algumas placas de modem com chipset Motorola e Intel podem ser usadas. Elas são difíceis de serem encontradas, pois já não são mais fabricadas. Em sites de leilão, lojas na Internet e nos fóruns, você pode acabar encontrando. Estas placas possuem preços bem mais baixos que as placas da Digium. Os chipsets que são conhecidos por funcionar são: Motorola 68202-51 Intel 537PU Intel 537 PG Intel Ambient MD3200 Não há nenhuma garantia de que estas placas funcionem com o seu PC e que mesmo funcionando não apresentem problemas como ECO devido a diferenças de impedância. Use as por sua própria conta e risco, se você não quiser correr riscos as placas da Digium são uma excelente opção. 3.4.1 Instalando a placa X100P clone Antes de instalar uma placa X100P no seu microcomputador, é recomendável que você desabilite todas as interrupções e hardware que não está sendo usadas no momento, como portas seriais, paralelas, interrupção para vídeo etc... Para instalar a sua placa X100P você deve encaixá-la em um slot PCI e configurar dois arquivos de configuração: • “zaptel.conf “ no diretório /etc que é o arquivo de configuração da placa zaptel. • “zapata.conf” no diretório /etc/asterisk que é o arquivo de configuração dos canais zapata do Asterisk. Não se preocupe neste momento em entender todos os detalhes dos arquivos de configuração, teremos um capítulo inteiro sobre canais zapata. Neste momento queremos apenas integrar o Asterisk na rede pública usando uma placa FXO. Vamos mostrar abaixo o arquivo completo e as instruções modificadas de forma destacada. Apesar de ocupar várias páginas é a maneira mais simples de entender a edição do arquivo. zaptel.conf # Zaptel Configuration File # # This file is parsed by the Zaptel Configurator, ztcfg # #
  • 63. 3.4 Configurando uma interface com a rede pública ou com um PABX | 47 # First come the span definitions, in the format # span=<span num>,<timing source>,<line build out (LBO)>,<framing>,<coding>[,yellow] # # All T1/E1 spans generate a clock signal on their transmit side. The # <timing source> parameter determines whether the clock signal from the far # end of the T1/E1 is used as the master source of clock timing. If it is, our # own clock will synchronise to it. T1/E1's connected directly or indirectly to # a PSTN provider (telco) should generally be the first choice to sync to. The # PSTN will never be a slave to you. You must be a slave to it. # # Choose 1 to make the equipment at the far end of the E1/T1 link the preferred # source of the master clock. Choose 2 to make it the second choice for the master # clock, if the first choice port fails (the far end dies, a cable breaks, or # whatever). Choose 3 to make a port the third choice, and so on. If you have, say, # 2 ports connected to the PSTN, mark those as 1 and 2. The number used for each # port should be different. # # If you choose 0, the port will never be used as a source of timing. This is # appropriate when you know the far end should always be a slave to you. If the # port is connected to a channel bank, for example, you should always be its # master. Any number of ports can be marked as 0. # # Incorrect timing sync may cause clicks/noise in the audio, poor quality or failed # faxes, unreliable modem operation, and is a general all round bad thing. # # The line build-out (or LBO) is an integer, from the following table: # 0: 0 db (CSU) / 0-133 feet (DSX-1) # 1: 133-266 feet (DSX-1) # 2: 266-399 feet (DSX-1) # 3: 399-533 feet (DSX-1) # 4: 533-655 feet (DSX-1) # 5: -7.5db (CSU) # 6: -15db (CSU) # 7: -22.5db (CSU) # # The framing is one of "d4" or "esf" for T1 or "cas" or "ccs" for E1 # # Note: "d4" could be referred to as "sf" or "superframe" # # The coding is one of "ami" or "b8zs" for T1 or "ami" or "hdb3" for E1 # # E1's may have the additional keyword "crc4" to enable CRC4 checking # # If the keyword "yellow" follows, yellow alarm is transmitted when no # channels are open. # #span=1,0,0,esf,b8zs #span=2,1,0,esf,b8zs #span=3,0,0,ccs,hdb3,crc4 # # Next come the dynamic span definitions, in the form: # dynamic=<driver>,<address>,<numchans>,<timing> # # Where <driver> is the name of the driver (e.g. eth), <address> is the # driver specific address (like a MAC for eth), <numchans> is the number # of channels, and <timing> is a timing priority, like for a normal span. # use "0" to not use this as a timing source, or prioritize them as # primary, secondard, etc. Note that you MUST have a REAL zaptel device # if you are not using external timing. # # dynamic=eth,eth0/00:02:b3:35:43:9c,24,0 # # Next come the definitions for using the channels. The format is: # <device>=<channel list> # # Valid devices are: # # "e&m" : Channel(s) are signalled using E&M signalling (specific # implementation, such as Immediate, Wink, or Feature Group D # are handled by the userspace library). # "fxsls" : Channel(s) are signalled using FXS Loopstart protocol. # "fxsgs" : Channel(s) are signalled using FXS Groundstart protocol. # "fxsks" : Channel(s) are signalled using FXS Koolstart protocol. # "fxols" : Channel(s) are signalled using FXO Loopstart protocol. # "fxogs" : Channel(s) are signalled using FXO Groundstart protocol. # "fxoks" : Channel(s) are signalled using FXO Koolstart protocol. # "sf" : Channel(s) are signalled using in-band single freq tone.
  • 64. 48 | Capítulo 3 | Configuração do Asterisk # Syntax as follows: # channel# => sf:<rxfreq>,<rxbw>,<rxflag>,<txfreq>,<txlevel>,<txflag> # rxfreq is rx tone freq in hz, rxbw is rx notch (and decode) # bandwith in hz (typically 10.0), rxflag is either 'normal' or # 'inverted', txfreq is tx tone freq in hz, txlevel is tx tone # level in dbm, txflag is either 'normal' or 'inverted'. Set # rxfreq or txfreq to 0.0 if that tone is not desired. # "unused" : No signalling is performed, each channel in the list remains idle # "clear" : Channel(s) are bundled into a single span. No conversion or # signalling is performed, and raw data is available on the master. # "indclear": Like "clear" except all channels are treated individually and # are not bundled. "bchan" is an alias for this. # "rawhdlc" : The zaptel driver performs HDLC encoding and decoding on the # bundle, and the resulting data is communicated via the master # device. # "fcshdlc" : The zapdel driver performs HDLC encoding and decoding on the # bundle and also performs incoming and outgoing FCS insertion # and verification. "dchan" is an alias for this. # "nethdlc" : The zaptel driver bundles the channels together into an # hdlc network device, which in turn can be configured with # sethdlc (available separately). # "dacs" : The zaptel driver cross connects the channels starting at # the channel number listed at the end, after a colon # "dacsrbs" : The zaptel driver cross connects the channels starting at # the channel number listed at the end, after a colon and # also performs the DACSing of RBS bits # # The channel list is a comma-separated list of channels or ranges, for # example: # # 1,3,5 (channels one, three, and five) # 16-23, 29 (channels 16 through 23, as well as channel 29 # # So, some complete examples are: # e&m=1-12 # nethdlc=13-24 # fxsls=25,26,27,28 # fxols=29-32 # fxsks=1 #bchan=25-47 #dchan=48 #fxols=1-12 #fxols=13-24 #e&m=25-29 #nethdlc=30-33 #clear=44 #clear=45 #clear=46 #clear=47 #fcshdlc=48 #dacs=1-24:48 #dacsrbs=1-24:48 # # Finally, you can preload some tone zones, to prevent them from getting # overwritten by other users (if you allow non-root users to open /dev/zap/* # interfaces anyway. Also this means they won't have to be loaded at runtime. # The format is "loadzone=<zone>" where the zone is a two letter country code. # # You may also specify a default zone with "defaultzone=<zone>" where zone # is a two letter country code. # # An up-to-date list of the zones can be found in the file zaptel/zonedata.c # loadzone = br #loadzone = us-old #loadzone=gr #loadzone=it #loadzone=fr #loadzone=de #loadzone=uk #loadzone=fi #loadzone=jp #loadzone=sp #loadzone=no #loadzone=hu #loadzone=lt
  • 65. 3.4 Configurando uma interface com a rede pública ou com um PABX | 49 #loadzone=pl defaultzone=br # # Section for PCI Radio Interface # (see http://www.zapatatelephony.org/app_rpt.html) # # The PCI Radio Interface card interfaces up to 4 two-way radios (either # a base/mobile radio or repeater system) to Zaptel channels. The driver # may work either independent of an application, or with it, through # the driver;s ioctl() interface. This file gives you access to specify # load-time parameters for Radio channels, so that the driver may run # by itself, and just act like a generic Zaptel radio interface. # # Unlike the rest of this file, you specify a block of parameters, and # then the channel(s) to which they apply. CTCSS is specified as a frequency # in tenths of hertz, for example 131.8 HZ is specified as 1318. DCS # for receive is specified as the code directly, for example 223. DCS for # transmit is specified as D and then the code, for example D223. # # The hardware supports a "community" CTCSS decoder system that has # arbitrary transmit CTCSS or DCS codes associated with them, unlike # traditional "community" systems that encode the same tone they decode. # # this example is a single tone DCS transmit and receive # # # specify the transmit tone (in DCS mode this stays constant) # tx=D371 # # specify the receive DCS code # dcsrx=223 # # this example is a "community" CTCSS (if you only want a single tone, then # only specify 1 in the ctcss list) # # # specify the default transmit tone (when not receiving) # tx=1000 # # Specify the receive freq, the tag (use 0 if none), and the transmit code. # # The tag may be used by applications to determine classification of tones. # # The tones are to be specified in order of presedence, most important first. # # Currently, 15 tones may be specified.. # ctcss=1318,1,1318 # ctcss=1862,1,1862 # # The following parameters may be omitted if their default value is acceptible # # # set the receive debounce time in milliseconds # debouncetime=123 # # set the transmit quiet dropoff burst time in milliseconds # bursttime=234 # # set the COR level threshold (specified in tenths of millivolts) # # valid values are {3125,6250,9375,12500,15625,18750,21875,25000} # corthresh=12500 # # Invert COR signal {y,n} # invertcor=y # # set the external tone mode; yes, no, internal {y,n,i} # exttone=y # # Now apply the configuration to the specified channels: # # # We are all done with our channel parameters, so now we specify what # # channels they apply to channels=1 Zapata.conf ; Zapata telephony interface ; ; Configuration file ; ; You need to restart Asterisk to re-configure the Zap channel ; CLI> reload chan_zap.so ; will reload the configuration file, ; but not all configuration options are ; re-configured during a reload. [trunkgroups]
  • 66. 50 | Capítulo 3 | Configuração do Asterisk ; ; Trunk groups are used for NFAS or GR-303 connections. ; ; Group: Defines a trunk group. ; group => <trunkgroup>,<dchannel>[,<backup1>...] ; ; trunkgroup is the numerical trunk group to create ; dchannel is the zap channel which will have the ; d-channel for the trunk. ; backup1 is an optional list of backup d-channels. ; ;trunkgroup => 1,24,48 ;trunkgroup => 1,24 ; ; Spanmap: Associates a span with a trunk group ; spanmap => <zapspan>,<trunkgroup>[,<logicalspan>] ; ; zapspan is the zap span number to associate ; trunkgroup is the trunkgroup (specified above) for the mapping ; logicalspan is the logical span number within the trunk group to use. ; if unspecified, no logical span number is used. ; ;spanmap => 1,1,1 ;spanmap => 2,1,2 ;spanmap => 3,1,3 ;spanmap => 4,1,4 [channels] ; ; Default language ; ;language=en ; ; Default context ; context=default ; ; Switchtype: Only used for PRI. ; ; national: National ISDN 2 (default) ; dms100: Nortel DMS100 ; 4ess: AT&T 4ESS ; 5ess: Lucent 5ESS ; euroisdn: EuroISDN ; ni1: Old National ISDN 1 ; qsig: Q.SIG ; switchtype=national ; ; Some switches (AT&T especially) require network specific facility IE ; supported values are currently 'none', 'sdn', 'megacom', 'accunet' ; ;nsf=none ; ; PRI Dialplan: Only RARELY used for PRI. ; ; unknown: Unknown ; private: Private ISDN ; local: Local ISDN ; national: National ISDN ; international: International ISDN ; ;pridialplan=national ; ; PRI Local Dialplan: Only RARELY used for PRI (sets the calling number's numbering plan) ; ; unknown: Unknown ; private: Private ISDN ; local: Local ISDN ; national: National ISDN ; international: International ISDN ; ;prilocaldialplan=national ; ; PRI callerid prefixes based on the given TON/NPI (dialplan) ; This is especially needed for euroisdn E1-PRIs
  • 67. 3.4 Configurando uma interface com a rede pública ou com um PABX | 51 ; ; sample 1 for Germany ;internationalprefix = 00 ;nationalprefix = 0 ;localprefix = 0711 ;privateprefix = 07115678 ;unknownprefix = ; ; sample 2 for Germany ;internationalprefix = + ;nationalprefix = +49 ;localprefix = +49711 ;privateprefix = +497115678 ;unknownprefix = ; ; PRI resetinterval: sets the time in seconds between restart of unused ; channels, defaults to 3600; minimum 60 seconds. Some PBXs don't like ; channel restarts. so set the interval to a very long interval e.g. 100000000 ; or 'never' to disable *entirely*. ; ;resetinterval = 3600 ; ; Overlap dialing mode (sending overlap digits) ; ;overlapdial=yes ; ; PRI Out of band indications. ; Enable this to report Busy and Congestion on a PRI using out-of-band ; notification. Inband indication, as used by Asterisk doesn't seem to work ; with all telcos. ; ; outofband: Signal Busy/Congestion out of band with RELEASE/DISCONNECT ; inband: Signal Busy/Congestion using in-band tones ; ; priindication = outofband ; ; If you need to override the existing channels selection routine and force all ; PRI channels to be marked as exclusively selected, set this to yes. ; priexclusive = yes ; ; ISDN Timers ; All of the ISDN timers and counters that are used are configurable. Specify ; the timer name, and its value (in ms for timers). ; ; pritimer => t200,1000 ; pritimer => t313,4000 ; ; To enable transmission of facility-based ISDN supplementary services (such ; as caller name from CPE over facility), enable this option. ; facilityenable = yes ; ; ; Signalling method (default is fxs). Valid values: ; em: E & M ; em_w: E & M Wink ; featd: Feature Group D (The fake, Adtran style, DTMF) ; featdmf: Feature Group D (The real thing, MF (domestic, US)) ; featdmf_ta: Feature Group D (The real thing, MF (domestic, US)) through ; a Tandem Access point ; featb: Feature Group B (MF (domestic, US)) ; fxs_ls: FXS (Loop Start) ; fxs_gs: FXS (Ground Start) ; fxs_ks: FXS (Kewl Start) ; fxo_ls: FXO (Loop Start) ; fxo_gs: FXO (Ground Start) ; fxo_ks: FXO (Kewl Start) ; pri_cpe: PRI signalling, CPE side ; pri_net: PRI signalling, Network side ; gr303fxoks_net: GR-303 Signalling, FXO Loopstart, Network side ; gr303fxsks_cpe: GR-303 Signalling, FXS Loopstart, CPE side ; sf: SF (Inband Tone) Signalling ; sf_w: SF Wink ; sf_featd: SF Feature Group D (The fake, Adtran style, DTMF) ; sf_featdmf: SF Feature Group D (The real thing, MF (domestic, US)) ; sf_featb: SF Feature Group B (MF (domestic, US)) ; e911: E911 (MF) style signalling ;
  • 68. 52 | Capítulo 3 | Configuração do Asterisk ; The following are used for Radio interfaces: ; fxs_rx: Receive audio/COR on an FXS kewlstart interface (FXO at the ; channel bank) ; fxs_tx: Transmit audio/PTT on an FXS loopstart interface (FXO at the ; channel bank) ; fxo_rx: Receive audio/COR on an FXO loopstart interface (FXS at the ; channel bank) ; fxo_tx: Transmit audio/PTT on an FXO groundstart interface (FXS at ; the channel bank) ; em_rx: Receive audio/COR on an E&M interface (1-way) ; em_tx: Transmit audio/PTT on an E&M interface (1-way) ; em_txrx: Receive audio/COR AND Transmit audio/PTT on an E&M interface ; (2-way) ; em_rxtx: Same as em_txrx (for our dyslexic friends) ; sf_rx: Receive audio/COR on an SF interface (1-way) ; sf_tx: Transmit audio/PTT on an SF interface (1-way) ; sf_txrx: Receive audio/COR AND Transmit audio/PTT on an SF interface ; (2-way) ; sf_rxtx: Same as sf_txrx (for our dyslexic friends) ; signalling=fxs_ks ; ; For Feature Group D Tandem access, to set the default CIC and OZZ use these ; parameters: ;defaultozz=0000 ;defaultcic=303 ; ; A variety of timing parameters can be specified as well ; Including: ; prewink: Pre-wink time (default 50ms) ; preflash: Pre-flash time (default 50ms) ; wink: Wink time (default 150ms) ; flash: Flash time (default 750ms) ; start: Start time (default 1500ms) ; rxwink: Receiver wink time (default 300ms) ; rxflash: Receiver flashtime (default 1250ms) ; debounce: Debounce timing (default 600ms) ; rxwink=300 ; Atlas seems to use long (250ms) winks ; ; How long generated tones (DTMF and MF) will be played on the channel ; (in miliseconds) ;toneduration=100 ; ; Whether or not to do distinctive ring detection on FXO lines ; ;usedistinctiveringdetection=yes ; ; Whether or not to use caller ID ; usecallerid=yes ; ; Type of caller ID signalling in use ; bell = bell202 as used in US ; v23 = v23 as used in the UK ; dtmf = DTMF as used in Denmark, Sweden and Netherlands ; ;cidsignalling=bell ; ; What signals the start of caller ID ; ring = a ring signals the start ; polarity = polarity reversal signals the start ; ;cidstart=ring ; ; Whether or not to hide outgoing caller ID (Override with *67 or *82) ; hidecallerid=no ; ; Whether or not to enable call waiting on FXO lines ; callwaiting=yes ; ; Whether or not restrict outgoing caller ID (will be sent as ANI only, not ; available for the user) ; Mostly use with FXS ports
  • 69. 3.4 Configurando uma interface com a rede pública ou com um PABX | 53 ; ;restrictcid=no ; ; Whether or not use the caller ID presentation for the outgoing call that the ; calling switch is sending. ; usecallingpres=yes ; ; Some countries (UK) have ring tones with different ring tones (ring-ring), ; which means the callerid needs to be set later on, and not just after ; the first ring, as per the default. ; ;sendcalleridafter=1 ; ; ; Support Caller*ID on Call Waiting ; callwaitingcallerid=yes ; ; Support three-way calling ; threewaycalling=yes ; ; Support flash-hook call transfer (requires three way calling) ; Also enables call parking (overrides the 'canpark' parameter) ; transfer=yes ; ; Allow call parking ; ('canpark=no' is overridden by 'transfer=yes') ; canpark=yes ; ; Support call forward variable ; cancallforward=yes ; ; Whether or not to support Call Return (*69) ; callreturn=yes ; ; Stutter dialtone support: If a mailbox is specified without a voicemail ; context, then when voicemail is received in a mailbox in the default ; voicemail context in voicemail.conf, taking the phone off hook will cause a ; stutter dialtone instead of a normal one. ; ; If a mailbox is specified *with* a voicemail context, the same will result ; if voicemail recieved in mailbox in the specified voicemail context. ; ; for default voicemail context, the example below is fine: ; ;mailbox=1234 ; ; for any other voicemail context, the following will produce the stutter tone: ; ;mailbox=1234@context ; ; Enable echo cancellation ; Use either "yes", "no", or a power of two from 32 to 256 if you wish to ; actually set the number of taps of cancellation. ; echocancel=yes ; ; Generally, it is not necessary (and in fact undesirable) to echo cancel when ; the circuit path is entirely TDM. You may, however, reverse this behavior ; by enabling the echo cancel during pure TDM bridging below. ; echocancelwhenbridged=yes ; ; In some cases, the echo canceller doesn't train quickly enough and there ; is echo at the beginning of the call. Enabling echo training will cause ; asterisk to briefly mute the channel, send an impulse, and use the impulse ; response to pre-train the echo canceller so it can start out with a much ; closer idea of the actual echo. Value may be "yes", "no", or a number of ; milliseconds to delay before training (default = 400) ; ;echotraining=yes
  • 70. 54 | Capítulo 3 | Configuração do Asterisk ;echotraining=800 ; ; If you are having trouble with DTMF detection, you can relax the DTMF ; detection parameters. Relaxing them may make the DTMF detector more likely ; to have "talkoff" where DTMF is detected when it shouldn't be. ; ;relaxdtmf=yes ; ; You may also set the default receive and transmit gains (in dB) ; rxgain=0.0 txgain=0.0 ; ; Logical groups can be assigned to allow outgoing rollover. Groups range ; from 0 to 63, and multiple groups can be specified. ; group=1 ; ; Ring groups (a.k.a. call groups) and pickup groups. If a phone is ringing ; and it is a member of a group which is one of your pickup groups, then ; you can answer it by picking up and dialing *8#. For simple offices, just ; make these both the same ; callgroup=1 pickupgroup=1 ; ; Specify whether the channel should be answered immediately or if the simple ; switch should provide dialtone, read digits, etc. ; immediate=no ; ; Specify whether flash-hook transfers to 'busy' channels should complete or ; return to the caller performing the transfer (default is yes). ; ;transfertobusy=no ; ; CallerID can be set to "asreceived" or a specific number if you want to ; override it. Note that "asreceived" only applies to trunk interfaces. ; ;callerid=2564286000 ; ; AMA flags affects the recording of Call Detail Records. If specified ; it may be 'default', 'omit', 'billing', or 'documentation'. ; ;amaflags=default ; ; Channels may be associated with an account code to ease ; billing ; ;accountcode=lss0101 ; ; ADSI (Analog Display Services Interface) can be enabled on a per-channel ; basis if you have (or may have) ADSI compatible CPE equipment ; ;adsi=yes ; ; On trunk interfaces (FXS) and E&M interfaces (E&M, Wink, Feature Group D ; etc, it can be useful to perform busy detection either in an effort to ; detect hangup or for detecting busies. This enables listening for ; the beep-beep busy pattern. ; ;busydetect=yes ; ; If busydetect is enabled, it is also possible to specify how many busy tones ; to wait for before hanging up. The default is 4, but better results can be ; achieved if set to 6 or even 8. Mind that the higher the number, the more ; time that will be needed to hangup a channel, but lowers the probability ; that you will get random hangups. ; ;busycount=4 ; ; If busydetect is enabled, it is also possible to specify the cadence of your ; busy signal. In many countries, it is 500msec on, 500msec off. Without ; busypattern specified, we'll accept any regular sound-silence pattern that ; repeats <busycount> times as a busy signal. If you specify busypattern, ; then we'll further check the length of the sound (tone) and silence, which
  • 71. 3.4 Configurando uma interface com a rede pública ou com um PABX | 55 ; will further reduce the chance of a false positive. ; ;busypattern=500,500 ; ; NOTE: In the Asterisk Makefile you'll find further options to tweak the busy ; detector. If your country has a busy tone with the same length tone and ; silence (as many countries do), consider defining the ; -DBUSYDETECT_COMPARE_TONE_AND_SILENCE option. ; ; Use a polarity reversal to mark when a outgoing call is answered by the ; remote party. ; ;answeronpolarityswitch=yes ; ; In some countries, a polarity reversal is used to signal the disconnect of a ; phone line. If the hanguponpolarityswitch option is selected, the call will ; be considered "hung up" on a polarity reversal. ; ;hanguponpolarityswitch=yes ; ; On trunk interfaces (FXS) it can be useful to attempt to follow the progress ; of a call through RINGING, BUSY, and ANSWERING. If turned on, call ; progress attempts to determine answer, busy, and ringing on phone lines. ; This feature is HIGHLY EXPERIMENTAL and can easily detect false answers, ; so don't count on it being very accurate. ; ; Few zones are supported at the time of this writing, but may be selected ; with "progzone" ; ; This feature can also easily detect false hangups. The symptoms of this is ; being disconnected in the middle of a call for no reason. ; ;callprogress=yes ;progzone=us ; ; FXO (FXS signalled) devices must have a timeout to determine if there was a ; hangup before the line was answered. This value can be tweaked to shorten ; how long it takes before Zap considers a non-ringing line to have hungup. ; ;ringtimeout=8000 ; ; For FXO (FXS signalled) devices, whether to use pulse dial instead of DTMF ; ;pulsedial=yes ; ; For fax detection, uncomment one of the following lines. The default is *OFF* ; ;faxdetect=both ;faxdetect=incoming ;faxdetect=outgoing ;faxdetect=no ; ; Select which class of music to use for music on hold. If not specified ; then the default will be used. ; ;musiconhold=default ; ; PRI channels can have an idle extension and a minunused number. So long as ; at least "minunused" channels are idle, chan_zap will try to call "idledial" ; on them, and then dump them into the PBX in the "idleext" extension (which ; is of the form exten@context). When channels are needed the "idle" calls ; are disconnected (so long as there are at least "minidle" calls still ; running, of course) to make more channels available. The primary use of ; this is to create a dynamic service, where idle channels are bundled through ; multilink PPP, thus more efficiently utilizing combined voice/data services ; than conventional fixed mappings/muxings. ; ;idledial=6999 ;idleext=6999@dialout ;minunused=2 ;minidle=1 ; ; Configure jitter buffers in zapata (each one is 20ms, default is 4) ; ;jitterbuffers=4 ; ; You can define your own custom ring cadences here. You can define up to 8
  • 72. 56 | Capítulo 3 | Configuração do Asterisk ; pairs. If the silence is negative, it indicates where the callerid spill is ; to be placed. Also, if you define any custom cadences, the default cadences ; will be turned off. ; ; Syntax is: cadence=ring,silence[,ring,silence[...]] ; ; These are the default cadences: ; ;cadence=125,125,2000,-4000 ;cadence=250,250,500,1000,250,250,500,-4000 ;cadence=125,125,125,125,125,-4000 ;cadence=1000,500,2500,-5000 ; ; Each channel consists of the channel number or range. It inherits the ; parameters that were specified above its declaration. ; ; For GR-303, CRV's are created like channels except they must start with the ; trunk group followed by a colon, e.g.: ; ; crv => 1:1 ; crv => 2:1-2,5-8 ; ; ;callerid="Green Phone"<(256) 428-6121> ;channel => 1 ;callerid="Black Phone"<(256) 428-6122> ;channel => 2 ;callerid="CallerID Phone" <(256) 428-6123> ;callerid="CallerID Phone" <(630) 372-1564> ;callerid="CallerID Phone" <(256) 704-4666> ;channel => 3 ;callerid="Pac Tel Phone" <(256) 428-6124> ;channel => 4 ;callerid="Uniden Dead" <(256) 428-6125> ;channel => 5 ;callerid="Cortelco 2500" <(256) 428-6126> ;channel => 6 ;callerid="Main TA 750" <(256) 428-6127> ;channel => 44 ; ; For example, maybe we have some other channels which start out in a ; different context and use E & M signalling instead. ; ;context=remote ;sigalling=em ;channel => 15 ;channel => 16 ;signalling=em_w ; ; All those in group 0 I'll use for outgoing calls ; ; Strip most significant digit (9) before sending ; ;stripmsd=1 ;callerid=asreceived ;group=0 ;signalling=fxs_ls ;channel => 45 ;signalling=fxo_ls ;group=1 ;callerid="Joe Schmoe" <(256) 428-6131> ;channel => 25 ;callerid="Megan May" <(256) 428-6132> ;channel => 26 ;callerid="Suzy Queue" <(256) 428-6233> ;channel => 27 ;callerid="Larry Moe" <(256) 428-6234> ;channel => 28 ; ; Sample PRI (CPE) config: Specify the switchtype, the signalling as either ; pri_cpe or pri_net for CPE or Network termination, and generally you will ; want to create a single "group" for all channels of the PRI. ; ; switchtype = national ; signalling = pri_cpe
  • 73. 3.5 Configuração dos telefones IP SIP | 57 ; group = 2 ; channel => 1-23 ; ; Used for distintive ring support for x100p. ; You can see the dringX patterns is to set any one of the dringXcontext fields ; and they will be printed on the console when an inbound call comes in. ; ;dring1=95,0,0 ;dring1context=internal1 ;dring2=325,95,0 ;dring2context=internal2 ; If no pattern is matched here is where we go. context=default channel => 1 Após configurar os arquivos carregue os drivers zaptel. modprobe zaptel modprobe wcfxo ztcfg –vvvvvv asterisk -vvvvvgc 3.5 Configuração dos telefones IP SIP Neste capítulo ainda vamos dar uma visão geral de como configurar os telefones SIP. O objetivo neste momento é que você possa configurar um PABX simples. Mais a frente você vai ter uma sessão inteira dedicada ao SIP e poderemos ver em detalhes a configuração. O SIP é configurado no arquivo /etc/asterisk/sip.conf e contém parâmetros relacionados à configuração dos telefones e operadoras SIP. Os clientes SIP devem estar configurados antes que possam fazer e receber chamadas. O arquivo SIP é lido de cima para baixo. A primeira seção contém as opções globais [general]. Estas opções são: o endereço IP e número de porta ao qual o servidor está ligado. As seções seguintes definem os parâmetros de clientes tais como o nome do usuário, senha, e endereço IP padrão para clientes não registrados. As seções seguintes são o nome do cliente entre chaves ([]’s) seguida das respectivas opções. Configurações globais (Seção [general]) • allow: Permite que um determinado codec seja usado. • bindaddr: Endereço IP onde o Asterisk irá esperar pelas conexões SIP. O comportamento padrão é esperar em todas as interfaces e endereços secundários. • context: Configura o contexto padrão onde todos os clientes serão colocados, a menos que seja sobrescrito na definição da entidade.
  • 74. 58 | Capítulo 3 | Configuração do Asterisk • disallow: Proíbe um determinado codec. • bindport: Porta que o Asterisk deve esperar por conexões de entrada SIP. O padrão é 5060. • maxexpirey: Tempo máximo para registro em segundos. • defaultexpirey: Tempo padrão para registro em segundos. • register: Registra o Asterisk com outro host. O formato é um endereço SIP opcionalmente seguido por uma barra normal (/) e a extensão. 3.5.1 Arquivo exemplo do sip.conf seção geral [general] [general] bindport = 5060 bindaddr = 10.1.30.45 context = default disallow = all allow = ulaw maxexpirey = 120 defaultexpirey = 80 3.5.2 Opções para cada telefone Após a seção geral, seguem as definições das entidades padrão SIP. É bom lembrar que nesta seção vamos apenas dar uma introdução ao arquivo sip.conf. Teremos uma seção específica para detalhar os outros parâmetros. type: Configura a classe de conexão, as opções são peer, user e friend. • peer: Entidade para a qual o Asterisk envia chamadas. • user: Entidade que faz chamadas através do Asterisk. • friend: Os dois ao mesmo tempo. host: Configura o endereço IP ou o nome do host. Pode-se usar também a opção ‘dynamic’ onde se espera que o host faça o registro, é a opção mais comum. username: Esta opção configura o nome do usuário que o Asterisk tenta conectar quando uma chamada é recebida. secret: Senha usada para autenticar os peers e users fazendo uma chamada. 3.5.3 Exemplo completo do SIP [general] bindport=5060 bindaddr=10.1.30.45
  • 75. 3.6 Introdução ao plano de discagem | 59 context=default [cisco] type=friend secret=mysecret host=10.1.30.50 canreinvite=no mailbox=8580 context=trusted [xlite] type=friend secret=xlite host=dynamic defaultip=10.1.30.17 mailbox=8590 3.6 Introdução ao plano de discagem O plano de discagem é o coração do Asterisk, na medida, que ele define como o Asterisk irá gerenciar as chamadas. Ele consiste de uma lista de instruções ou passos que o Asterisk deveria seguir. Essas instruções são disparadas a partir dos dígitos recebidos de um canal ou aplicação. É fundamental para configurar o Asterisk, que se entenda o plano de discagem. A maior parte do plano de discagem está contida no arquivo extensions.conf no diretório /etc/asterisk. O arquivo pode ser separado em quatro partes: • Contextos • Extensões • Prioridades • Aplicações Neste capítulo vamos ver como criar um plano de discagem básico, mas que atende as nossas necessidades atuais. Mais a frente vocês terão a oportunidade de conhecer o plano de discagem mais a fundo. Se você instalou os arquivos de exemplo, já existe o extensions.conf. No nosso caso será mais interessante começar do zero. Isto vai ajudar o aprendizado e poderemos abordar passo a passo cada parte do arquivo do plano de discagem. 3.6.1 Contextos
  • 76. 60 | Capítulo 3 | Configuração do Asterisk Os contextos têm um papel importante no Asterisk na organização e segurança do plano de discagem. Os contextos também definem o escopo e permitem separar diferentes partes do plano de discagem. Um ponto que chama atenção é que os contextos estão ligados diretamente aos canais. Cada canal existe dentro de um contexto. Quando uma ligação entra no Asterisk por um canal ela é processada dentro do contexto deste canal. Exemplificando, vamos supor que você tenha duas classes de ramais, aqueles que podem fazer ligações de longa distância e aqueles que não. Você pode criar dois contextos, [gerente] e [funcionario]. Dentro do contexto [gerentes] quando o dígito “0” é discado, ouve-se o tom de discagem da rede pública. Dentro do contexto [funcionario] quando o dígito “0” é discado é recebida, por exemplo, uma gravação “ligação não autorizada”. Por outro lado, uma ligação é recebida dentro do contexto do canal. Com isto, diferentes canais podem ser recebidos em diferentes telefones, dependendo do contexto selecionado. Isto pode ser útil para ter uma recepção diferente para cada companhia, compartilhando um mesmo servidor Asterisk. Contextos também são usados para criar menus de voz, que fornecem ao usuário uma lista de opções a serem escolhidas através das teclas de um telefone multifreqüêncial. Esta funcionalidade é normalmente conhecida como auto-atendente. Auto-atendimento será visto em capítulos posteriores. Os contextos recebem o seu nome dentro de chaves ([]s). Por exemplo, se nós fossemos criar um contexto para a entrada de chamadas, poderíamos definir como: [entrada] Todas as instruções colocadas após a definição são partes do contexto. Para iniciar um novo contexto, simplesmente digite o novo contexto [novocontexto]. No início do arquivo extensions.conf existe um contexto chamado [globals]. O contexto globals é onde as variáveis globais são definidas e podem ser usadas por todo o plano de discagem. 3.6.2 Extensões Dentro de cada contexto serão definidas diversas extensões. No Asterisk, uma extensão é uma string que vai disparar um evento. Veja o exemplo: exten=>8580,1,Dial(SIP/8580,20) exten=>8580,2,voicemail(u8580) exten=>8580,101,voicemail(b8580)
  • 77. 3.6 Introdução ao plano de discagem | 61 A instrução “exten=> “ descreve qual o próximo passo para a ligação. O “8580” é o conjunto de dígitos que foi recebido (número discado). O “1”, “2”e “101” são as prioridades que determinam à ordem de execução dos comandos. Neste exemplo, discando “8580” irá tocar o telefone IP registrado como “8580”, que se não for atendido em 20 segundos será desviado para a prioridade 2 na caixa de correio de voz com a mensagem “não atende”. Se estiver ocupado é desviado para a prioridade 101 e vai para o correio de voz com a mensagem, “ocupado”. Extensões determinam o fluxo das chamadas. Embora as extensões possam ser usadas para especificar as extensões, elas podem ser usadas para mais do que isto no Asterisk. Uma extensão pode ser criada com a sintaxe definida abaixo: exten=> número (nome), prioridade, aplicação O comando “exten=>” é seguido por um número da extensão, uma vírgula, a prioridade, outra vírgula e finalmente a aplicação. 3.6.3 Prioridades Prioridades são passos numerados na execução de cada extensão. Cada prioridade chama uma aplicação especifica. Normalmente estes números de prioridade começam com 1 e aumentam de um a um em cada extensão. Os números de prioridade como você viu acima nem sempre são consecutivos. As prioridades são rodadas na ordem numérica. Se não estiverem em seqüência o Asterisk aborta a execução. 3.6.4 Aplicações As aplicações são partes fundamentais do Asterisk, elas tratam o canal de voz, tocando sons, aceitando dígitos ou desligando uma chamada. As aplicações são chamadas com opções que afetam a sua forma de funcionamento. Você pode usar show applications na interface de linha de comando do Asterisk para verificar as aplicações disponíves. Na medida em que você construir seu primeiro plano de discagem você vai aprender a usar as aplicações de forma apropriada. Você pode ver as opções de aplicação instaladas no Asterisk usando o comando: CLI>show applications 3.6.5 Criando um ambiente de testes
  • 78. 62 | Capítulo 3 | Configuração do Asterisk xx x x x x x x x x x x x x x x x x x Figura 3.2 Laboratório de voz sobre IP A maneira mais econômica de testar o Asterisk é conectar-se a um provedor (em www.voipcharges.com você encontrará uma lista de provedores que atuam em qualquer país do mundo), vamos ver como se conectar à um provedor no capítulo relativo aos canais SIP. Outra forma é usar uma placa FXO. Para fazer o laboratório descrito abaixo você vai precisar de dois PCs, Pentium 300 Mhz ou maior com 256 MB RAM pelo menos. Se você tiver um único PC pode usar o vmware (não é freeware) e você precisa de pelo menos 512 MB RAM. Vamos usar o softfone gratuito da counterpath o xlite. Você pode baixá-lo de www.counterpath.com. Existem outros softfones gratuitos como o Sjphone da SJLabs www.sjlabs.com. Certamente você encontrará outros pesquisando a Internet. Pode ser também que os dois citados acima não existam mais quando você estiver lendo este material. Você pode também criar este laboratório usando um equipamento para o Asterisk e um adaptador de telefonia analógico de dois canais. Passo 1: Edite o arquivo sip.conf e adicione a configuração de um ramal com número 2000. [general] bindport=5060 bindaddr=10.1.30.45 ; Coloque aqui o endereço IP do seu servidor context=default allow=all [2000] type=friend secret=2000 host=dynamic canreinvite=no Passo 2: Repita o passo 1 agora para o ramal 2001 Passo 3: Configure os softphone xlite do ramal 2000 no Asterisk.
  • 79. 3.6 Introdução ao plano de discagem | 63 a) Execute o programa de instalação b) Pressione “next” na primeira tela c) Aceite o contrato de licença d) Aceite as próximas telas na situação padrão até terminar a instalação. Em outras palavras NEXT->NEXT->FINISH. e) Entre no menu no X-LITE pressionando o ícone mostrado abaixo: f) Na tela seguinte escolha “system settings”. g) Na próxima escolha SIP PROXY. h) Escolha Default i) Preencha os seguintes campos: Display Name: 2000 Username: 2000 Authorization User: 2000 Password: 2000 Domain/Realm: Endereço IP do servidor SIP Proxy: Endereço IP do servidor j) Feche o XLITE e abra de novo. k) Confirme que o telefone foi registrado no Asterisk com o comando sip show peers. Passo 4: Repita a configuração do XLITE para o softphone 2001. 3.6.6 Criando um plano de discagem simples Agora, nós estamos prontos para nosso primeiro exemplo de plano de discagem. Por favor, prestem atenção à maneira que cada prioridade chama uma aplicação. Note que neste exemplo temos apenas uma extensão criada com SIP. Estes exemplos assumem que você tem uma placa FXO. Vamos mostrar os exemplos e explicar passo a passo. Agora estamos prontos para criar o extensions.conf da forma mais simples possível. Neste exemplo tudo que o Asterisk irá fazer é responder a uma chamada, tocar um som que diz “adeus” e desligar.
  • 80. 64 | Capítulo 3 | Configuração do Asterisk A extensão especial ”s” Vamos começar vendo a extensão especial ‘s’ que significa inicio (start). De uma forma geral a chamada inicia no contexto ao qual o canal pertence. A extensão ‘s’ é imediatamente executada ao entrar em um canal. No nosso exemplo vamos criar um plano de discagem com a extensão ‘s’ As aplicações Answer(), Hangup() e Playback() Se vamos responder a uma chamada, é melhor conhecermos as aplicações que vão fazer isto. A aplicação answer() é usada para responder a um canal que está tocando. Ela faz a configuração inicial da chamada e pode fazer outras funções. Poucas aplicações não requerem que necessariamente se responda (Answer()) o canal antes de fazer qualquer outra coisa A aplicação playback() é usada para tocar um arquivo de som previamente gravado sobre um canal. Quando a aplicação Playback() está sendo executada, qualquer dígito pressionado pelo usuário é simplesmente ignorado. O formato é Playback(nomedoarquivo), ele toca o arquivo com a extensão .gsm ou .wav no diretório de sons padrão (/var/lib/asterisk/sounds). A aplicação hangup() faz exatamente o que seu nome diz. Ela desliga um canal ativo. Você deveria usá-la no fim do contexto uma vez que você queira desligar quem não precisa estar conectado no sistema. Por favor, prestem atenção à maneira que cada prioridade chama uma aplicação. Note que neste exemplo temos apenas uma extensão criada com SIP. Estes exemplos assumem que você tem uma placa FXO. Vamos mostrar os exemplos e explicar passo a passo. [entrada] exten=>s,1,answer() exten=>s,2,playback(goodbye) exten=>s,3,hangup() Uma chamada que entre pela FXO é enviada dentro do contexto [entrada] (Este contexto [entrada] deve estar configurado no arquivo zapata.conf para o canal FXO) e é enviada para a extensão ‘s’. Nós temos três prioridades no contexto: 1, 2 e 3. Cada prioridade chama um aplicativo. Vamos olhar de perto as prioridades: A prioridade 1 chama a aplicação answer(), o Asterisk toma conta da linha e configura a chamada. Após responder a linha, o asterisk vai para a próxima prioridade.
  • 81. 3.6 Introdução ao plano de discagem | 65 Prioridade 2, o Asterisk chama a aplicação playback() para tocar o arquivo de som goodbye.gsm (por enquanto vamos usar as mensagens em inglês), esta mensagem dará uma mensagem de adeus ao usuário. Por fim a prioridade 3 irá desconectar o usuário. Um exemplo mais útil Agora que já começamos simples, vamos incrementar aprendendo um pouco dos aplicativos background() e goto(). Estas duas aplicações irão permitir nos criar planos de discagem, com muito mais funcionalidade. A chave para sistemas interativos baseados no Asterisk está na aplicação Background(). Ela permite que você execute um arquivo de som, mas quando o originador pressiona uma tecla isso interrompe a execução e manda para a extensão correspondente aos dígitos discados. Outra aplicação muito útil é o goto(). Como seu nome implica, ele pula de um contexto atual, extensão e prioridade para um contexto específico e prioridade. A aplicação goto() torna fácil a movimentação entre diferentes partes do plano de discagem. O formato do comando goto() precisa do contexto de destino e prioridade como argumentos. exten=>extensão, prioridade,Goto(contexto,extensão, prioridade) Formatos válidos do comando Goto() são : Goto(contexto,extensão,prioridade) Goto(extensão,prioridade) Goto(prioridade) Neste exemplo, vamos assumir que somos uma empresa de suporte, treinamento e vendas. Vamos criar um sistema interativo que permita ao usuário selecionar para que área da empresa ele queira ser redirecionado. Em primeiro lugar vamos usar o comando Background() para tocar a mensagem “disque 1 para suporte, 2 para treinamento e 3 para vendas”, neste momento ainda não vamos explorar o tratamento de dígitos inválidos. Em cada contexto vamos tocar uma gravação como “você foi redirecionado para o suporte (treinamento ou vendas)”. [entrada] exten=>s,1,Answer() exten=>s,2,Background(saudação) exten=>s,3,hangup() exten=>1,1,playback(suporte) exten=>1,2,goto(suporte,s,1) exten=>2,1,playback(treinamento) exten=>2,2,goto(treinamento,s,1) exten=>3,1,playback(vendas,)
  • 82. 66 | Capítulo 3 | Configuração do Asterisk exten=>3,2,Dial(IAX2/8002) exten=>3,2,goto(vendas,s,1) Vamos seguir este exemplo passo à passa. Quando alguém liga na interface FXO (Configurada para o contexto [entrada]), a ligação é passada para a extensão ‘s’ dentro do contexto [entrada]. A extensão ‘s’ atende a ligação e usando o comando Background() toca uma saudação e aguarda pela discagem de um dígito. Após discar o dígito ‘1’ por exemplo, o sistema vai para a extensão ‘1’ na prioridade ‘1’ e toca uma mensagem no arquivo suporte.gsm (Algo como, “você ligou para o suporte técnico” atenderemos em alguns minutos). Em seguida temos o comando goto() que manda a ligação para o contexto (suporte) onde ela será tratada por uma fila de atendimento. Interligando canais com a aplicação Dial() Nós vamos adicionar ao nosso exemplo a aplicação Dial(). Ao invés de mandar a ligação para outro contexto, vamos atendê-la em um ramal específico. [entrada] exten=>s,1,Answer() exten=>s,2,Background(saudação) exten=>s,3,hangup() exten=>1,1,playback(suporte) exten=>1,2,Dial(SIP/8000) exten=>2,1,playback(treinamento) exten=>2,2,Dial(ZAP/1) exten=>3,1,playback(vendas) exten=>3,2,Dial(IAX/8002) Ao comparar com o exemplo anterior, apenas criamos um atalho. Ao invés de enviar para um outro contexto para o tratamento da chamada, enviamos diretamente a um canal SIP no ramal 8000 ou a um canal Zaptel (FXS - Analógico) ou ainda a um canal IAX no ramal 8002. Neste ponto você já deve estar entendendo o uso de várias aplicações como o Answer(), Background(), Goto(), Hangup() e Playback() e o básico do comando Dial(). Isto é fundamental para o aprendizado daqui para frente. Se ainda não está claro volte e leia de novo, é fundamental que fique entendido o processo antes que se passe a frente. Com um entendimento básico das extensões, prioridades e aplicações é simples criar um plano de numeração básico. Nos próximos capítulos vamos fazer um plano de discagem ainda mais poderoso. 3.7 Laboratórios Neste laboratórios vamos criar uma pequena central telefônica capaz de discar entre ramais, para a rede pública pela placa PSTN ou por um
  • 83. 3.7 Laboratórios | 67 provedor VoIP e recebendo chamadas usando atendimento automático. Para criar este PABX vamos fazer algumas considerações: • Os ramais vão de 2000 à 2100 • Para sair para a rede pública se disca o número 0 (zero) • Para sair para a rede pública através de um provedor se disca 1 (um) • 8000 será o ramal para gravação do menu de autoatendimento. 3.7.1 Ligando entre telefones. No arquivo extensions.conf na seção default entre com os seguintes comandos: [default] exten=>2000,1,Dial(SIP/2000) exten=>2001,1,Dial(SIP/2001) 3.7.2 Ligando para a rede pública usando a placa zaptel Coloque as seguintes linhas no arquivo extensions.conf. Para testar ligue 0 (zero) seguido de um número externo. [default] exten=>0,1,Dial(ZAP/1,20,r) 3.7.3 Recebendo ligações usando auto-atendimento. Digite os comandos abaixo, eles vão criar uma interface para você poder gravar a mensagem do menu de auto-atendimento. A mensagem pode ser algo como “Você ligou para xyz, disque o ramal desejado ou aguarde”. Quando terminar de falar a mensagem disque “#” para que ela seja gravada. Você vai ouvi-lá em seguida quando o comando “playback” for executado. [default] exten=>8000,1,Wait(2) exten=>8000,2,Record(menu:gsm) exten=>8000,3,Wait(2) exten=>8000,4,Playback(menu) exten=>8000,5,Hangup() Abaixo o comando Background vai tocar a mensagem que você gravou e esperar que você digite algo. Digite 2001 e você vai ver que a ligação será desviada para o ramal 2001. Se nada for discado a ligação será automaticamente transferida para o ramal 2000. [default]
  • 84. 68 | Capítulo 3 | Configuração do Asterisk exten=>s,1,Background(menu) exten=>s,2,Dial(SIP/2000) exten=>2000,1,Dial(SIP/2000) exten=>2001,1,Dial(SIP/2001) 3.8 Sumário Neste capítulo você aprendeu que os arquivos de configuração ficam em /etc/asterisk. Para usar o Asterisk é preciso em primeiro lugar configurar os canais (Ex. sip.conf e zapata.conf). Existem basicamente três formatos o grupo simples, herança de opções entidade complexa. O plano de discagem é criado no arquivo extensions.conf, nele são criados contextos, aplicações, extensões e prioridades. As aplicações aprendemos até agora são: Playback(), Background(), Dial(), Goto(), Hangup() e Answer(). Background() é um comando importante na criação de uma URA. Dial() é o principal comando do plano de discagem 3.9 Questionário 1. São exemplos de arquivos de configuração de canais Asterisk. zaptel.conf zapata.conf sip.conf iax.conf 2. É importante definir o contexto no arquivo de canais, pois quando uma ligação deste canal (sip, iax, zap) chegar ao Asterisk ele será tratado no arquivo extensions.conf neste contexto. Correto Incorreto 3. Apesar de ser considerado uma linha digital, o E1 pode ser configurado com sinalização associada ao canal (CAS) neste caso cada timeslot pode se comportar como um canal analógico FXS ou FXO, por exemplo. Isto é útil para a conexão à channel-banks (bancos de canal). Correto Incorreto 4. SIP Session Initiated Protocol é o protocolo da ITU usado para conexões de voz sobre IP. Ele é bastante antigo e vem sendo substituído recentemente pelo H.323.
  • 85. 3.9 Questionário | 69 Correto Incorreto 5. Dado à configuração abaixo do arquivo sip.conf, na seção [general] está definido o endereço IP 10.1.30.45, onde o SIP estará esperando por conexões. Se fosse necessário que todas as placas de rede da máquina esperassem por uma conexão SIP, bindaddr deveria estar configurado para: ___.___.___.___ [general] bindport = 5060 bindaddr = 10.1.30.45 context = default disallow = speex disallow = ilbc allow = ulaw maxexpirey = 120 defaultexpirey = 80 6. No arquivo abaixo, os telefones 8000 e 8001 foram definidos com a opção canreinvite=no. Com isto, quando uma ligação é feita de um telefone para o outro, o Áudio vai diretamente de um telefone para outro sem passar pelo Asterisk. [8000] type=friend secret=8000 host=dynamic canreinvite=no [8001] type=friend secret=8000 host=dynamic canreinvite=no Correto Incorreto 7. A principal diferença entre o comando Playback() e o comando Background() é que o Playback() simplesmente toca uma mensagem e passa ao comando seguinte, enquanto o Background aguarda que você digite algo e desvia para algum lugar no plano de discagem baseado nos dígitos discados. Correto Incorreto 8. Quando uma ligação entra no Asterisk por uma interface de telefonia (FXO) sem identificação de chamada, esta ligação é desviada para a extensão especial:
  • 86. 70 | Capítulo 3 | Configuração do Asterisk ‘0’ ‘9’ ‘s’ ‘i’ 9. Os formatos válidos para o comando Goto() são: Goto(contexto,extensão,prioridade) Goto(prioridade, contexto, extensão) Goto(extensão,prioridade) Goto(prioridade)
  • 87. Canais Analógicos e Digitais Nesta seção vamos mostrar como definir os canais para integração com a rede de telefonia. Também faremos uma revisão sobre conceitos de telefonia e aprenderemos a configurar o arquivo zapata.conf para diversos cenários. 4.1 Objetivos Ao final deste capítulo o leitor deverá estar apto a: • Reconhecer e entender a nomenclatura associada a telefonia; • Entender quando usar canais analógicos e digitais; • Reconhecer a diferença entre interfaces analógicas FXS e FXO; • Configurar o Asterisk para interfaces FXS e FXO; • Configurar o Asterisk para interfaces digitais ISDN; • Configurar o Asterisk para interfaces digitais MFC/R2. 4.2 Conceitos básicos A maior parte das implementações de telefonia analógica usa um par de fios metálico (tip and ring). Quando um loop é fechado, o telefone recebe o tom de discagem da central telefônica seja ela pública (operadora) ou privada (pabx). Dizemos que este tipo de sinalização é do tipo “loop- start”. Existem outras sinalizações como ground-start, por exemplo, mas são menos comuns. Existem basicamente três sinalizações: • Sinalização de supervisão • Sinalização de endereçamento • Sinalização de informação 4.2.1 Sinalização de supervisão Podemos destacar os sinais on-hook (no gancho), off-hook (fora do gancho) e ringing (tocando). On-Hook - Quando o usuário coloca o telefone no gancho, o PABX interrompe e não permite que a corrente elétrica seja transmitida. Neste caso o circuito é dito em estado “on-hook”. Quando o telefone está nesta posição apenas o “ringer” (campainha) está ativo. Capítulo 4
  • 88. 72 Capítulo 4: Canais analógicos e digitais Off-Hook – O usuário que desejar fazer uma chamada telefônica deve passar para o estado “off-hook” (fora do gancho), retirando o telefone do gancho. Este estado fecha o loop elétrico, o qual indica ao PABX que o usuário deseja fazer uma chamada telefônica. O PABX então, após receber essa indicação, gera o tom de discagem, indicando ao usuário que está pronto para receber o endereço de destino (número do telefone). Ringing – O usuário ao realizar uma ligação, envia uma voltagem ao “ringer” (campainha) que avisa ao outro usuário a recepção de uma chamada. A companhia telefônica também manda um tom de volta avisando a quem discou o progresso da chamada. Existem diferenças na sinalização de tom de discagem, tom de ocupado, tom de campainha (ringing). Você pode personalizar os tons do Asterisk para o padrão brasileiro alterando o arquivo indications.conf. [br] description=Brazil ringcadance=1000,4000 dial=425 busy=425/250,0/250 ring=425/1000,0/4000 congestion=425/250,0/250,425/750,0/250 callwaiting=425/50,0/1000 4.2.2 Sinalização de endereçamento Podemos usar dois tipos de sinalização para a discagem, o multifreqüencial (dtmf) ou pulso (usado nos antigos telefones de disco). Os usuários que tem um teclado para discagem têm associado a cada botão um conjunto de freqüências alta e baixa. A combinação destes dois tons indica para a central qual o digito. Isto é conhecido como dtmf (dual tone multifrequency). 4.2.3 Sinalização de informação A sinalização de informação mostra o progresso da chamada e os seus diferentes eventos. Este eventos, podem ser: • Tom de discagem • Sinal de ocupado • Tom de retorno (ringback) • Congestionamento (congestion) • Número inválido • Tom de confirmação
  • 89. 4.3 Interfaces de acesso a rede pública | 73 4.3 Interfaces de acesso a rede pública Na maioria dos casos você vai ligar o seu PABX a rede pública de telefonia. A seguir mostraremos como fazer isto. Basicamente existem três opções de linhas telefônicas hoje no mercado: • Analógicas, as mais comuns e entregues usando um par metálico de fios. • Digitais são usadas quando são necessárias muitas linhas analógicas. A linha digital é normalmente entregue através de um modem HDSL de 2 Mbps ou através de uma linha de fibra ótica co um MUX Digital. • A terceira opção, bem mais recente, é a entrega da linha telefônica usando voz sobre IP normalmente através do protocolo SIP. No Brasil até o momento que estou escrevendo, vários provedores VoIP entregam números de telefone através do protocolo SIP. 4.4 Usando Interfaces FXS, FXO e E+M xx xx Companhia Telefônica x xx x FXS ))) Tom de discagem RING FXO ))) Tom de discagem RING 4.4.1 Interfaces FX (Foreign eXchange) São interfaces analógicas. O termo “Foreign eXchange” é aplicado para troncos com acesso a um centro de comutação da rede pública. FXO (Foreign eXchange Office) Basicamente utilizadas para a comunicação com uma central de comutação pública ou a uma porta de ramal de um PABX. Uma porta FXO no Asterisk se comunica diretamente com a rede pública ou PABX, esta comunicação requer tom de discagem, indicação de campainha e prover indicadores de chamadas em progresso. Interfaces FXO conectam o PABX a outro comutador (PABX, Rede Pública, gateway de voz sobre IP). É muito comum ligar uma interface FXO de uma central telefônica (ramal) a um gateway VoIP e transportar a voz empacotada para outro gateway onde uma interface FXS conecta um telefone. Esta operação é conhecida como OPX (Off-Promises Extension) ou ramal remoto. FXS (Foreign eXchange Station)
  • 90. 74 Capítulo 4: Canais analógicos e digitais São as conhecidas linhas residenciais padrão. Podem ser utilizadas para conectar dispositivos básicos: telefones, modems e faxes. Deve prover voltagem, gerar tom de campainha, detecção de “fora do gancho” e indicar chamadas em progresso. x xx x x x x x 4.4.2 Interfaces E & M São também interfaces analógicas. O termo “E & M” vem de “Ear (receive) and Mouth (transmit)”. Usadas principalmente nas ligações entre PABXs ou entre Net-Net Switches. Placas E&M para o Asterisk não estão disponíveis. Estas placas são conhecidas no mercado de telefonia como “tie-lines” analógicas. A maioria das centrais não vem com este tipo de interface, muito embora as centrais de marcas conhecidas possuam E&M como um opcional. As placas E&M permitem uma comunicação bi-direcional, podem dar ou receber tom. Se você precisar usar uma interface E&M com o Asterisk a melhor opção é a integração de um gateway de voz. 4.4.3 Sinalização nos troncos • Loop-Start • Ground-Start • Kool-Start É quase um padrão no Asterisk o uso da sinalização “koolstart”. Koolstart não é um padrão de supervisão conhecido na indústria, o que o “koolstart” faz é que ele adiciona inteligência dando aos circuitos a habilidade de monitorar o que o outro lado está fazendo. Como o “koolstart” incorpora o “loopstart” e o “groundstart”, é praticamente só o que se usa. • Loopstart: é usada por praticamente todas as linhas analógicas digitais. Permite ao telefone indicar os estados de “on hook/offhook”, e ao “switch” indicar os estados de “ring/no
  • 91. 4.5 Linhas digitais E1/T1, sinalização CAS e CCS. | 75 ring”. É o que você tem em casa. Cada linha vem em um par separado de fios, podendo ser utilizada tanto para fazer quanto receber chamadas. Possui este nome pois é uma linha aberta e a maneira para se iniciar as chamadas é fechando-se um “loop”, assim a central telefônica lhe fornece o “dial tone”. Da mesma maneira um chamada entrante é sinalizada por 100 V "ringing voltage" através do par aberto, e para responder à chamada, o “loop” deve ser fechado. • Groundstart: bastante semelhante ao “Loopstart”. Quando você quer fazer uma ligação, um dos lados do circuito é colocado em curto, quando a Central identifica este estado, reverte a voltagem através do par aberto, somente então o “loop” é fechado. Desta forma, a linha primeiramente torna-se ocupada na Central antes de ser fornecida para a realização de uma chamada. • Koolstart: adiciona inteligência à habilidade dos circuitos em monitorar o que o outro lado está fazendo. Desde que “koolstart” incorporou as vantagens “loopstart” e “groundstart” e sendo superior a ambos, você provavelmente irá utilizá-lo, a não ser que haja algum problema de compatibilidade. “Koolstart” tornou-se, informalmente, o padrão para o uso com o Asterisk. 4.5 Linhas digitais E1/T1, sinalização CAS e CCS. Quando o número de linhas telefônicas solicitadas por um cliente passa a ser muito grande, a companhia telefônica normalmente entrega um canal digital. No Brasil o mais comum é uma linha padrão E1 (2 Mbps) com sinalização CAS (Channel Associated Signaling). Normalmente são comercializados 10, 15 ou 30 canais (linhas telefônicas). Algumas companhias já entregam o canal E1 (2 Mbps) com CCS (Common Channel Signaling) no padrão ISDN PRI que é mais confiável e estável com o Asterisk. • ISDN (Rede Digital Integrada de Serviços): é uma nova forma de entroncamento completamente digital. Um simples par de fios pode transportar duas linhas e mais um circuito de dados de 16kbps usado para sinalização. ISDN permite uma forma bastante elegante de manusear as ligações. Por exemplo, serviços como: caller-ID, chamada em espera, serviços de SMS, entre outros foram originalmente desenvolvidos para ISDN. • MFC/R2 é uma sinalização definida pela ITU (Q.421/Q.441), usada principalmente na América Latina e Ásia. A sinalização
  • 92. 76 Capítulo 4: Canais analógicos e digitais usa CAS, muito embora passe as sinalizações da cada canal pelo canal 16. O R2 possui variações específicas para cada país. É a sinalização de linha digital mais comum no Brasil. 4.5.1 Sinalização e enquadramento E1 Em um enquadramento E1, 30 dos 32 canais disponíveis são usados para voz, as informações de frame usam o primeiro DS0 e as informações de sinalização seguem pelo DS0 16. O formato de sinalização é conhecido como CAS pois os bits do canal 16 são exclusivamente reservados para o propósito de sinalizar cada canal. 4.5.2 Sinalização CAS, E1-R2-Brasil No Brasil o tipo mais comum de sinalização CAS é o R2 Digital Brasil. É possível implantar um canal R2 usando uma placa Digium E1 e o driver unicall, que pode ser baixado de http://www.soft- switch.org/unicall/installing-mfcr2.html. Este driver tem sido usado com sucesso no Brasil e na V.Office já fizemos algumas implementações com sucesso. Muito embora possa ser usado, sempre que possível use um canal ISDN, é mais simples, tem melhor desempenho e é parte integrante do Asterisk. Cabe lembrar que o driver para R2 é experimental e não tem suporte da Digium. 4.5.3 Sinalização CCS, E1-ISDN-PRI. A sinalização ISDN está disponível para o Asterisk em diversas variações. Estas variações são configuradas no arquivo zapata.conf. A rede pública no Brasil quando fornece o ISDN utiliza o parâmetro switchtype configurado como EuroISDN. Várias operadoras disponibilizam ISDN no Brasil, dependendo da central telefônica instalada na cidade. Em centrais telefônicas digitais, é possível usar ISDN, muitos fabricantes exigem upgrade de hardware e software para isto.
  • 93. 4.6. Configurando um canal de telefonia no Asterisk | 77 4.6. Configurando um canal de telefonia no Asterisk Para configurar uma placa de telefonia vários passos são necessários. Neste capítulo vamos mostrar as três formas mais comuns de configuração. • Conexão analógica usando uma porta FXS e outra porta FXO • Conexão digital usando sinalização ISDN • Conexão digital usando sinalização R2/Brasil 4.6.1 Procedimentos gerais de configuração válidos nos três casos Antes de escolher um hardware para o Asterisk você deve considerar o número de ligações simultâneas, os serviços e codecs que serão instalados e habilitados. O Asterisk utiliza intensivamente o hardware, por isso recomendamos uma máquina exclusiva para o Asterisk. O número de placas que podem ser instalados no Asterisk é limitado pelo número de interrupções disponíveis. É melhor instalar uma placa com 4 E1s do que quatro placas de 1 E1. Conflitos de interrupção são comuns, e o uso do Kernel 2.6 do Linux com motherboards que suportam APIC ajuda bastante nestes casos. Evite hardware incompatível com as placas ZAPTEL. Dê uma olhada na lista da página da Digium, no link abaixo. http://www.digium.com/index.php?menu=compatibility 4.7 Exemplo 1 - Instalação de uma porta FXO e outra FXS Usaremos como exemplo a configuração de uma placa Digium TDM400P com uma interface FXO e outra interface FXS. Passos necessários: 1. Instalação de uma placa analógica FXO, FXS ou ambas 2. Configuração do arquivo zaptel.conf 3. Carga do driver da placa zaptel 4. Execução do utilitário zttest 5. Execução do utilitário ztcfg 6. Configuração do arquivo zapata.conf 7. Carga do Asterisk
  • 94. 78 Capítulo 4: Canais analógicos e digitais 4.7.1 Instalando uma placa TDM400P com uma porta FXS e outra porta FXO. Conector de 12 Volts A placa TDM 400P contém módulos FXS e FXO. Conecte os módulos FXS (S110M – cor verde) e FXO (X100M – cor vemelha) à placa TDM400P. No caso da utilização de módulos FXS, é necessário alimentar diretamente a placa com uma fonte de energia (semelhante ao conector do hard disk) através do conector de 12V de um dos cabos da fonte do PC. Use proteção eletrostática para evitar danos a placa ou a seu computador. Em verdo o módulo FXS (S110M) e vermelho o FXO (X100M)
  • 95. 4.7 Exemplo 1 - Instalação de uma porta FXO e outra FXS | 79 4.7.2 Configuração do arquivo zaptel.cfg Para cada placa é preciso configurar o arquivo zaptel.conf de acordo. Este arquivo encontra-se no diretório /etc. fxsks=1 # Uma porta FXO, certifique-se que o módulos vermelho está mais próximos do parafuso de fixação da placa. fxoks=2 # Uma porta FXS defaultzone=br loadzone=br Nota: A sinalização de telefonia analógica pose ser uma fonte de confusão. Canais FXS são sinalizados com sinalização FXO e canais FXO são sinalizados com FXS. O Asterisk fala com os dispositivos internos como se eles estivessem do lado oposto. 4.7.3 Carregar os drivers de kernel Como você já viu no capítulo 2, você deve carregar o modulo zaptel e um módulo correspondente à placa que você está instalando. Tabela dos drivers da Dgium Placa Driver Descrição TE410P wct4xxp 4xE1/T1-3.3V PCI TE405P wct4xxp 4xE1/T1-5V PCI TDM400P wctdm 4 FXS/FXO T100P wct1xxp 1 T1 E100P wctlxxp 1 E1 X100P Wcfxo 1 FXO modprobe zaptel modprobe wctdm 4.7.4 Usando o utilitário zttest. Um utilitário importante é o zttest que pode ser usado para verificar conflitos de interrupção e interrupt misses. É muito comum problemas de qualidade de áudio por causa de conflitos e perdas de interrupção. Você pode usar o comando: #cat /proc/interrupts Para verificar em que interrupção está cada uma das placas. O zttest permite verificar a quantidade de interrupções perdidas. Um número abaixo de 99.98% indica possíveis problemas.
  • 96. 80 Capítulo 4: Canais analógicos e digitais 4.7.5 Usando o utilitário ztcfg Após carregar o driver, você deve disponibilizar os canais usando ztcfg. O comando ztcfg é usado para configurar a sinalização usada para a interface física FX. ztcfg irá usar a configuração de sinalização em zaptel.conf. Para ver a saída do comando você deve usar –vv para colocar o programa em modo verbose. # /sbin/ztcfg -vv Zaptel Configuration ====================== Channel map: Channel 01: FXS Kewlstart (Default) (Slaves: 01) Channel 02: FXO Kewlstart (Default) (Slaves: 02) 2 channels configured. Se os canais carregarem com sucesso, você vai ver uma saída similar à acima. Um erro comum é inverter a sinalização entre os canais. Se isto acontecer você vai ver algo parecido como: ZT_CHANCONFIG failed on channel 1: Invalid argument (22) Did you forget that FXS interfaces are configured with FXO signalling and that FXO interfaces use FXS signalling? Após os canais terem sido configurados com sucesso, você está pronto para iniciar o uso do seu hardware com o Asterisk. 4.7.6 Configuração do arquivo zapata.conf Após configurar o arquivo zaptel.conf, você tem o hardware configurado. Este hardware pode ser usado com Asterisk bem como outros softwares como Open SS7 e mesmo para roteamento PPP ou HDLC. Para usar o Asterisk com um hardware zaptel, você deve agora configurar o arquivo de canais zapata.conf. Ele vai criar os canais lógicos TDM que serão usados no seu plano de discagem. signalling=fxs_ks; group=1; número do grupo de canais context=entrada ; contexto de entrada dos canais channel => 1; número dos canais signalling=fxo_ks; sinalização dos módulos fxs group=2; número do grupo de canais context=ramais; contexto dos canais channel=> 2 número dos canais 4.8 Exemplo 2 – Carga de dois canais E1-ISDN Placa E1 (TE205P)
  • 97. 4.8 Exemplo 2 – Carga de dois canais E1-ISDN | 81 Passos necessários: 1. Instalação de uma placa digital TE205P ou TE210P 2. Configuração do arquivo zaptel.conf 3. Carga do driver da placa zaptel 4. Execução do utilitário zttest 5. Execução do utilitário ztcfg 6. Configuração do arquivo zapata.conf 7. Carga e testes com o Asterisk 4.8.1 Instalação da placa TE205P Jumper de Seleção E1/T1/J1 Em primeiro lugar é importante entender as implicações da escolha de uma placa Digium TE205P ou TE210P. A placa TE210P é uma placa que usa barramento 64 bits de 3.3 volts. Este barramento só é encontrado em PCs servidores de rede. Cuidado ao especificar esta placa, certifique-se que seu hardware vai operar normalmente. A placa TE205P usa um barramento PCI comum de 5 volts e o hardware disponível é bem maior. Escolhemos uma placa com duas interfaces E1 para o exemplo, pois é fácil reduzi-lo para os casos de uma interface E1 apenas. Cuidado ao especificar: Certifique-se de estar comprando a placa correta. É muito comum as pessoas especificarem as placas de 3.3V (TE210P, TE410P, TE211P e TE411P) e retornarem as placas por não encontrar uma Motherboard compatível. Como já dissemos estes slots de 3.3V 64 bits PCI-X só são encontrados em motherboard para servidores. 4.8.2 Configuração do arquivo zaptel.conf
  • 98. 82 Capítulo 4: Canais analógicos e digitais Para configurar a placa E1 é um pouco diferente. Primeiro precisamos definir o span e depois os canais. Os spans são numerados a partir da seqüência de reconhecimento das placas no hardware. Em outras palavras não dá para saber qual o número de span de cada uma das placas. Normalmente usamos um cabo com o sinal ISDN e colocamos em uma das placas, na console Asterisk, temos a mensagem “primary span X UP” . Em minha opinião esta é a forma mais simples de detectar em que span a placa está configurada. span=1,1,0,ccs,hdb3,crc4 # nem sempre crc4 é necessário,ver operadora span=2,0,0,ccs,hdb3,crc4 bchan=1-15, 17-31 dchan=16 bchan=33-47, 49-63 dchan=48 defaultzone=br loadzone=br 4.8.3 Carga do driver da placa zaptel Como você já viu no capítulo 2, você deve carregar o modulo zaptel e um módulo correspondente à placa que você está instalando. Tabela dos drivers da Dgium Placa Driver Descrição TE410P wct4xxp 4xE1/T1-3.3V PCI TE405P wct4xxp 4xE1/T1-5V PCI TE210P wct2xxp 2XE1/T1-3.3V PCI TE205P wct2xxp 2xE1/T1-5V PCI TDM400P Wctdm 4 FXS/FXO T100P wct1xxp 1 T1 E100P Wctlxxp 1 E1 X100P Wcfxo 1 FXO modprobe zaptel modprobe wct2xxp 4.8.4 Usando o utilitário zttest Um utilitário importante é o zttest que pode ser usado para verificar conflitos de interrupção e interrupt misses. É muito comum problemas de qualidade de áudio por causa de conflitos e perdas de interrupção. Você pode usar o comando zttest de dentro de /usr/src/asterisk. O número de interrupções não deve ser pior que 99.987793%. Opened pseudo zap interface, measuring accuracy... 99.987793% 100.000000% 100.000000% 100.000000% 100.000000% 100.000000% 100.000000% 100.000000% 100.000000% 100.000000% 100.000000% 100.000000% 100.000000% 100.000000% 100.000000%
  • 99. 4.8 Exemplo 2 – Carga de dois canais E1-ISDN | 83 100.000000% 100.000000% 100.000000% 100.000000% 99.987793% 100.000000% 100.000000% 100.000000% 100.000000% 100.000000% 100.000000% --- Results after 26 passes --- Best: 100.000000 -- Worst: 99.987793 -- Average: 99.999061 4.8.5 Verificando conflitos de interrupção Para verificar em que interrupção está cada uma das placas use: #cat /proc/interrupts CPU0 0: 3675537 XT-PIC timer 1: 2 XT-PIC keyboard 2: 0 XT-PIC cascade 3: 410705 XT-PIC eth1 4: 1694897 XT-PIC eth0 5: 36737213 XT-PIC t1xxp 7: 14703 XT-PIC libata 8: 4 XT-PIC rtc 10: 36742553 XT-PIC wcfxo 11: 36742513 XT-PIC wcfxo 14: 55631 XT-PIC ide0 NMI: 0 LOC: 3675478 ERR: 0 MIS: 0 4.8.6 Usando o utilitário ztcfg Esta é a saída do comando ztcfg –vvv de um servidor Asterisk com uma placa E1 configurada para quinze canais mais duas placas FXO. Zaptel Configuration ====================== SPAN 1: CCS/HDB3 Build-out: 0 db (CSU)/0-133 feet (DSX-1) Channel map: Channel 01: Clear channel (Default) (Slaves: 01) Channel 02: Clear channel (Default) (Slaves: 02) Channel 03: Clear channel (Default) (Slaves: 03) Channel 04: Clear channel (Default) (Slaves: 04) Channel 05: Clear channel (Default) (Slaves: 05) Channel 06: Clear channel (Default) (Slaves: 06) Channel 07: Clear channel (Default) (Slaves: 07) Channel 08: Clear channel (Default) (Slaves: 08) Channel 09: Clear channel (Default) (Slaves: 09) Channel 10: Clear channel (Default) (Slaves: 10) Channel 11: Clear channel (Default) (Slaves: 11) Channel 12: Clear channel (Default) (Slaves: 12) Channel 13: Clear channel (Default) (Slaves: 13) Channel 14: Clear channel (Default) (Slaves: 14) Channel 15: Clear channel (Default) (Slaves: 15) Channel 16: D-channel (Default) (Slaves: 16) Channel 32: FXS Kewlstart (Default) (Slaves: 32) Channel 33: FXS Kewlstart (Default) (Slaves: 33) 18 channels configured.
  • 100. 84 Capítulo 4: Canais analógicos e digitais 4.8.7 Configuração dos canais “zapata.conf” callerid=<4830258580> switchtype=euroisdn signalling = pri_cpe group = 1 channel => 1-15;17-31 group =2 channel => 32-46;48-62 4.8.8 Comandos para verificação zap show status: Mostra o status das placas zaptel vtsvoffice*CLI> zap show status Description Alarms IRQ bpviol CRC4 Digium Wildcard E100P E1/PRA Card 0 OK 0 0 0 Wildcard X100P Board 1 OK 0 0 0 Wildcard X100P Board 2 RED 0 0 0 pri show span: Permite verificar os dados do link ISDN. vtsvoffice*CLI> pri show span 1 Primary D-channel: 16 Status: Provisioned, Up, Active Switchtype: EuroISDN Type: CPE Window Length: 0/7 Sentrej: 0 SolicitFbit: 0 Retrans: 0 Busy: 0 Overlap Dial: 0 T200 Timer: 1000 T203 Timer: 10000 T305 Timer: 30000 T308 Timer: 4000 T313 Timer: 4000 N200 Counter: 3 zap show channels: Mostra os canais zap configurados. vtsvoffice*CLI> zap show channels Chan Extension Context Language MusicOnHold pseudo fax en default 1 entrada en default 2 entrada en default 3 entrada en default 4 entrada en default 5 entrada en default 6 entrada en default 7 entrada en default 8 entrada en default 9 entrada en default 10 entrada en default 11 entrada en default 12 entrada en default 13 entrada en default 14 entrada en default
  • 101. 4.8 Exemplo 2 – Carga de dois canais E1-ISDN | 85 15 entrada en default 32 default en default 33 fax en default zap show channel x: Mostra um canal específico. vtsvoffice*CLI> zap show channel 1 Channel: 1*CLI> File Descriptor: 21 Span: 1 Extension: Dialing: no Context: entrada Caller ID: 4832341689 Calling TON: 33 Caller ID name: Destroy: 0 InAlarm: 0 Signalling Type: PRI Signalling Radio: 0 Owner: <None> Real: <None> Callwait: <None> Threeway: <None> Confno: -1 Propagated Conference: -1 Real in conference: 0 DSP: no Relax DTMF: no Dialing/CallwaitCAS: 0/0 Default law: alaw debug pri span x: Habilita um debugging detalhado das chamadas ISDN. Note que é possível verificar exatamente que números estão sendo discados e o identificador de chamada. Abaixo segue o debug de uma ligação que procedeu normalmente, ele pode ser útil na comparação com uma ligação com problemas. Uma dica é desligar a verbose (set verbose=0) antes de emitir o comando para ter apenas as mensagens Q.931 do ISDN. -- Making new call for cr 32833 > Protocol Discriminator: Q.931 (8) len=57 > Call Ref: len= 2 (reference 65/0x41) (Originator) > Message type: SETUP (5) > [04 03 80 90 a3] > Bearer Capability (len= 5) [ Ext: 1 Q.931 Std: 0 Info transfer capability: Speech (0) > Ext: 1 Trans mode/rate: 64kbps, circuit- mode (16) > Ext: 1 User information layer 1: A-Law (35) > [18 03 a9 83 81] > Channel ID (len= 5) [ Ext: 1 IntID: Implicit, PRI Spare: 0, Exclusive Dchan: 0 > ChanSel: Reserved > Ext: 1 Coding: 0 Number Specified Channel Type: 3 > Ext: 1 Channel: 1 ] > [28 0e 46 6c 61 76 69 6f 20 45 64 75 61 72 64 6f] > Display (len=14) @h@>[ Flavio Eduardo ]
  • 102. 86 Capítulo 4: Canais analógicos e digitais > [6c 0c 21 80 34 38 33 30 32 35 38 35 39 30] > Calling Number (len=14) [ Ext: 0 TON: National Number (2) NPI:Calling Number (len=14) [ Ext: 0 TON: National Number (2) NPI:Calling Number (len=14) [ Ext: 0 TON: National Number (2) NPI:Calling Number (len=14) [ Ext: 0 TON: National Number (2) NPI: ISDN/Telephony NumberingISDN/Telephony NumberingISDN/Telephony NumberingISDN/Telephony Numbering Plan (E.164/E.163) (1)Plan (E.164/E.163) (1)Plan (E.164/E.163) (1)Plan (E.164/E.163) (1) > Presentation: Presentation permitted, user> Presentation: Presentation permitted, user> Presentation: Presentation permitted, user> Presentation: Presentation permitted, user number not screened (0) '4830258590' ]number not screened (0) '4830258590' ]number not screened (0) '4830258590' ]number not screened (0) '4830258590' ] > [70 09 a1 33 32 32 34 38 35 38 30] > Called Number (len=11) [ Ext: 1 TON: National Number (2) NPI:Called Number (len=11) [ Ext: 1 TON: National Number (2) NPI:Called Number (len=11) [ Ext: 1 TON: National Number (2) NPI:Called Number (len=11) [ Ext: 1 TON: National Number (2) NPI: ISDN/Telephony NumbISDN/Telephony NumbISDN/Telephony NumbISDN/Telephony Numbering Plan (E.164/E.163) (1) '32248580' ]ering Plan (E.164/E.163) (1) '32248580' ]ering Plan (E.164/E.163) (1) '32248580' ]ering Plan (E.164/E.163) (1) '32248580' ] > [a1]fice*CLI> > Sending Complete (len= 1) < Protocol Discriminator: Q.931 (8) len=10 < Call Ref: len= 2 (reference 65/0x41) (Terminator) < Message type: CALL PROCEEDING (2) < [18 03 a9 83 81] < Channel ID (len= 5) [ Ext: 1 IntID: Implicit, PRI Spare: 0, Exclusive Dchan: 0 < ChanSel: Reserved < Ext: 1 Coding: 0 Number Specified Channel Type: 3 < Ext: 1 Channel: 1 ] -- Processing IE 24 (cs0, Channel Identification) < Protocol Discriminator: Q.931 (8) len=9 < Call Ref: len= 2 (reference 65/0x41) (Terminator) < Message type: ALERTING (1) < [1e 02 84 88] < Progress Indicator (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) 0: 0 Location: Public network serving the remote user (4) < Ext: 1 Progress Description: Inband information or appropriate pattern now available. (8) ] -- Processing IE 30 (cs0, Progress Indicator) < Protocol Discriminator: Q.931 (8) len=64 < Call Ref: len= 2 (reference 5720/0x1658) (Originator) < Message type: SETUP (5) < [04 03 80 90 a3] < Bearer Capability (len= 5) [ Ext: 1 Q.931 Std: 0 Info transfer capability: Speech (0) < Ext: 1 Trans mode/rate: 64kbps, circuit- mode (16) < Ext: 1 User information layer 1: A-Law (35) < [18 03 a1 83 82] < Channel ID (len= 5) [ Ext: 1 IntID: Implicit, PRI Spare: 0, Preferred Dchan: 0 < ChanSel: Reserved < Ext: 1 Coding: 0 Number Specified Channel Type: 3 < Ext: 1 Channel: 2 ] < [1c 15 91 a1 12 02 01 bc 02 01 0f 30 0a 02 01 01 0a 01 00 a1 02 82 00] < Facility (len=23, codeset=0) [ 0x91, 0xa1, 0x12, 0x02, 0x01, 0xbc, 0x02, 0x01, 0x0f, '0', 0x0a, 0x02, 0x01, 0x01, 0x0a, 0x01, 0x00, 0xa1, 0x02, 0x82, 0x00 ] < [1e 02 82 83] < Progress Indicator (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) 0: 0 Location: Public network serving the local user (2) < Ext: 1 Progress Description: Calling equipment is non-ISDN. (3) ] < [6c 0c 21 83 34 38 33 32 32 34 38 35 38 30] < Calling Number (len=14) [ Ext: 0 TON: National Number (2) NPI: ISDN/Telephony Numbering Plan (E.164/E.163) (1) < Presentation: Presentation allowed of network provided number (3) '4832248580' ] < [70 05 c1 38 35 38 30] < Called Number (len= 7) [ Ext: 1 TON: Subscriber Number (4) NPI: ISDN/Telephony Numbering Plan (E.164/E.163) (1) '8580' ]
  • 103. 4.8 Exemplo 2 – Carga de dois canais E1-ISDN | 87 < [a1] < Sending Complete (len= 1) -- Making new call for cr 5720 -- Processing Q.931 Call Setup -- Processing IE 4 (cs0, Bearer Capability) -- Processing IE 24 (cs0, Channel Identification) -- Processing IE 28 (cs0, Facility) Handle Q.932 ROSE Invoke component -- Processing IE 30 (cs0, Progress Indicator) -- Processing IE 108 (cs0, Calling Party Number) -- Processing IE 112 (cs0, Called Party Number) -- Processing IE 161 (cs0, Sending Complete) > Protocol Discriminator: Q.931 (8) len=10 > Call Ref: len= 2 (reference 5720/0x1658) (Terminator) > Message type: CALL PROCEEDING (2) > [18 03 a9 83 82] > Channel ID (len= 5) [ Ext: 1 IntID: Implicit, PRI Spare: 0, Exclusive Dchan: 0 > ChanSel: Reserved > Ext: 1 Coding: 0 Number Specified Channel Type: 3 > Ext: 1 Channel: 2 ] > Protocol Discriminator: Q.931 (8) len=14 > Call Ref: len= 2 (reference 5720/0x1658) (Terminator) > Message type: CONNECT (7) > [18 03 a9 83 82] > Channel ID (len= 5) [ Ext: 1 IntID: Implicit, PRI Spare: 0, Exclusive Dchan: 0 > ChanSel: Reserved > Ext: 1 Coding: 0 Number Specified Channel Type: 3 > Ext: 1 Channel: 2 ] > [1e 02 81 82] > Progress Indicator (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) 0: 0 Location: Private network serving the local user (1) > Ext: 1 Progress Description: Called equipment is non-ISDN. (2) ] < Protocol Discriminator: Q.931 (8) len=5 < Call Ref: len= 2 (reference 5720/0x1658) (Originator) < Message type: CONNECT ACKNOWLEDGE (15) < Protocol Discriminator: Q.931 (8) len=9 < Call Ref: len= 2 (reference 65/0x41) (Terminator) < Message type: PROGRESS (3) < [1e 02 84 82] < Progress Indicator (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) 0: 0 Location: Public network serving the remote user (4) < Ext: 1 Progress Description: Called equipment is non-ISDN. (2) ] -- Processing IE 30 (cs0, Progress Indicator) < Protocol Discriminator: Q.931 (8) len=5 < Call Ref: len= 2 (reference 65/0x41) (Terminator) < Message type: CONNECT (7) > Protocol Discriminator: Q.931 (8) len=5 > Call Ref: len= 2 (reference 65/0x41) (Originator) > Message type: CONNECT ACKNOWLEDGE (15) NEW_HANGUP DEBUG: Calling q931_hangup, ourstate Active, peerstate Connect Request > Protocol Discriminator: Q.931 (8) len=9 > Call Ref: len= 2 (reference 65/0x41) (Originator) > Message type: DISCONNECT (69) > [08 02 81 90] > Cause (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) 0: 0 Location: Private network serving the local user (1)
  • 104. 88 Capítulo 4: Canais analógicos e digitais > Ext: 1 Cause: Unknown (16), class = Normal Event (1) ] < Protocol Discriminator: Q.931 (8) len=5 < Call Ref: len= 2 (reference 65/0x41) (Terminator) < Message type: RELEASE (77) NEW_HANGUP DEBUG: Calling q931_hangup, ourstate Null, peerstate Release Request > Protocol Discriminator: Q.931 (8) len=9 > Call Ref: len= 2 (reference 65/0x41) (Originator) > Message type: RELEASE COMPLETE (90) > [08 02 81 90] > Cause (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) 0: 0 Location: Private network serving the local user (1) > Ext: 1 Cause: Unknown (16), class = Normal Event (1) ] NEW_HANGUP DEBUG: Calling q931_hangup, ourstate Null, peerstate Null NEW_HANGUP DEBUG: Destroying the call, ourstate Null, peerstate Null < Protocol Discriminator: Q.931 (8) len=9 < Call Ref: len= 2 (reference 5720/0x1658) (Originator) < Message type: DISCONNECT (69) < [08 02 82 90] < Cause (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) 0: 0 Location: Public network serving the local user (2) < Ext: 1 Cause: Unknown (16), class = Normal Event (1) ] -- Processing IE 8 (cs0, Cause) NEW_HANGUP DEBUG: Calling q931_hangup, ourstate Disconnect Indication, peerstate Disconnect Request > Protocol Discriminator: Q.931 (8) len=9 > Call Ref: len= 2 (reference 5720/0x1658) (Terminator) > Message type: RELEASE (77) > [08 02 81 90] > Cause (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) 0: 0 Location: Private network serving the local user (1) > Ext: 1 Cause: Unknown (16), class = Normal Event (1) ] < Protocol Discriminator: Q.931 (8) len=5 < Call Ref: len= 2 (reference 5720/0x1658) (Originator) < Message type: RELEASE COMPLETE (90) NEW_HANGUP DEBUG: Calling q931_hangup, ourstate Null, peerstate Null NEW_HANGUP DEBUG: Destroying the call, ourstate Null, peerstate Null 4.9 Configurando MFC/R2 4.9.1 Entendendo o problema A placa usada para sinalização R2 é a mesma usada para a sinalização ISDN. A própria Digium possui dentro do código do canal zapata sinalização R2, mas de acordo com Mark Spencer está longe de estar implementado. Para usar a sinalização R2 vamos usar o driver Unicall desenvolvido por Steve Underwood e disponível em www.soft-switch.org. O ideal é usar ISDN que é mais estável e possui suporte da Digium, a dificuldade é que nem sempre está disponível. A grande maioria das linhas na América do Sul usa sinalização R2, também conhecida como R2- Digital. 4.9.2 Entendendo o protocolo MFC/R2 No protocolo MFC/R2 o endereçamento telefônico é encaminhado através de um conjunto de tons. Entretanto a sinalização do canal é passada
  • 105. 4.9 Configurando MFC/R2 | 89 através de um timeslot específico. Neste timeslot (16) são transferidos os bits ABCD de cada canal de voz através dos quais é feito o controle da chamada. Os bits C e D raramente são utilizados. Em alguns países eles podem ser usados para Metering (medição de pulsos para tarifação). Em uma conversação normal temos dois lados operando, o lado originador da chamada e o lado receptor da chamada. O lado originador é referido como sinalização a frente e o receptor com sinlização para trás. Vamos designar daqui para frente Af e Bf para os bits a frente e At e Bt para os bits para trás. Veja a tabela abaixo: Estado ABCD p/ Frente ABCD p/ Trás Idle/Released (livre) 1001 1001 Seized (Ocupação) 0001 1001 Seize Ack (Confirmação de ocupação, Ring) 0001 1101 Answered (Em conversação) 0001 0101 ClearBack (Desconexão pela parte chamada) 0001 1101 ClearFwd (Antes do Clear-Back) 1001 0101 ClearFwd (Depois do Clear-Back) Blocked (Bloqueado) 1001 1101 Diferenças para o padrão brasileiro. Apesar do R2 ter sido definido pela ITU existem variações em relação a implementação feita em cada país. Seguem abaixo as tabelas referentes ao Brasil. Estado ABCD p/ Frente ABCD p/ Trás Idle/Released (livre) 1001 1001 Seized (Ocupação) 0001 1001 Seize Ack (Confirmação de ocupação, Ring) 0001 1101 Chamada em progresso 0001 1101 Atendimento da Chamada 0001 0101 Answered (Em conversação) 0001 0101 Tarifação 0001 1101 ClearBack (Desconexão pela parte chamada) 0001 1101 ClearFwd (Antes do Clear-Back) 1001 0101 ClearFwd (Confirmação de desconexão) 1001 1001 Desconexão forçada 0001 0001 Blocked (Bloqueado) 1001 1101 Confirmação de desconexão forçada 1001 0001 Falha 1101 1001
  • 106. 90 Capítulo 4: Canais analógicos e digitais Sinalização entre registradores. A sinalização MFC usa uma combinação de dois tons conforme tabela a seguir. O quadro abaixo apresenta os significados para a norma brasileira. Grupo de sinais I (a frente) Sinais Descrição Sinal à frente 1 Algarismo 1 I-1 2 Algarismo 2 I-2 3 Algarismo 3 I-3 4 Algarismo 4 I-4 5 Algarismo 5 I-5 6 Algarismo 6 I-6 7 Algarismo 7 I-7 8 Algarismo 8 I-8 9 Algarismo 9 I-9 10 Algarismo 0 I-10 11 Inserção de semi-supressor de eco I-11 12 Pedido recusado ou indicação de transito internacional I-12 13 Acesso à equipamento de teste I-13 14 Inserção de semi-supressor de eco de destino ou indicação de transito internacional I-14 15 Fim de número ou indicação de que a chamada cursou enlace via satélite I-15 Grupo de sinais II (a frente) Sinais Descrição Sinal à frente 1 Assinante comum II-1 2 Assinante com tarifação especial II-2 3 Equipamento de manutenção II-3 4 Telefone público local II-4 5 Telefonista II-5 6 Transmissão de dados II-6 7 Telefone público interurbano II-7 8 Chamada a cobrar II-8 9 Assinante comum – serviço entrante internacional II-9 10 Reservado II-10 11 Indicativo de chamada transferida II-11 12 Vago II-12 13 Vago II-13 14 Vago II-14 15 Vago II-15 Grupo de sinais A (para trás) Sinais Descrição Sinal à frente 1 Enviar o próximo algarismo (n+1) A-1 2 Necessidade de semi-supressor de eco no destino ou enviar o primeiro algarismo enviado A-2 3 Preparar recepção de sinais do grupo B A-3 4 Congestionamento de rede nacional A4 5 Enviar categoria e identidade do assinante chamado A5 6 Reservado A6 7 Enviar algarismo N-2 A7 8 Enviar algarismo N-3 A8
  • 107. 4.9 Configurando MFC/R2 | 91 9 Envia Algarismo N-1 A9 10 Vago para uso nacional A10 11 Reservado A11 12 Reservado A12 13 Reservado A13 14 Reservado A14 15 Reservado A15 Grupo de sinais B (para trás) Sinais Descrição Sinal p/trás 1 Linha de assinante livre com tarifação B1 2 Linha de assinante ocupada B2 3 Linha de assinante com número mudado B3 4 Congestionamento B4 5 Linha de assinante livre sem tarifação B5 6 Linha de assinante livre com tarifação e colocar retenção sob controle do assinante chamado B6 7 Número vago B7 8 Linha de assinante for a de serviço para tráfego terminado B8 9 Reservado B9 10 Reservado B10 11 Reservado B11 12 Reservado B12 13 Reservado B13 14 Reservado B14 15 Reservado B15
  • 108. 92 Capítulo 4: Canais analógicos e digitais 4.9.3 Seqüência de uma chamada MFC/R2 x xx x x x x x x xx x Ramal Asterisk Operadora Ramal da Operadora Off-Hook (Fora do gancho) Tom de discagem Envio dos Dígitos Silêncio 10 Idle(livre) 10 10 Idle(livre) 10 10 Idle(livre) 10 10 Idle(livre) 10 00 Seized/(Ocupação) Seize Ack/(Confirma Ocupação) 11 Discado primeiro dígito (I-X) Enviar próximo dígito (A-1) Discado segundo dígito (I-X) Enviar próximo dígito (A-1) ... Discado último dígito (I-X) Endereço Completo (A-3) Assinante sem prioridade (II-1)1 Retorno da Campainha Campainha Off-Hook (Fora do gancho) Usuário Livre, Bilhetar (B-6)2 Answer(Conversação) 01 Conversação On-hook (no gancho) Clearback (Término) 11 Silêncio 10 Clear Forward (Término) On-hook (no gancho) Sinalização in-band Sinalização no canal 16 (ABCD) Sinalização audível A seqüência acima é de uma chamada de um ramal do PABX para um terminal de rede pública que em seguida desliga o telefone e finaliza a comunicação. 4.9.4 O driver Unicall O driver unicall foi desenvolvido por Steve Underwood e é distribuído gratuitamente. Ele não faz parte do Asterisk e não é suportado pela Digium. Ele foi desenvolvido com base no canal zaptel (chan_cap.c). O conjunto de recursos usados por um canal zapata segue abaixo: PSTN->PLACA ZAPTEL->DRIVER ZAPTEL->LIBPRI->CHAN_ZAP->ASTERISK No driver Unicall a seqüência é um pouco diferente e o conjunto de recursos é como segue abaixo: PSTN->PLACA ZAPTEL->DRIVER ZAPTEL->LIMFCR2->LIBUNICALL->CHAN_UNICALL->ZAP->ASTERISK
  • 109. 4.9.5 Configurando a placa zaptel para operar com MFC/R2 | 93 4.9.5 Configurando a placa zaptel para operar com MFC/R2 Assumindo que a instalação e compilação do driver zaptel já foi feita no capítulo 3, vamos começar pela configuração do driver zaptel para uso com o MFC/R2. Em primeiro lugar vamos colocar os canais em modo Bloqueado. # MFC/R2 normalmente não usa CRC4 span=1,1,0,cas,hdb3 cas=1-15:1101 ;Dependente da variante R2 (bits ABCD do modo blocked) dchan=16 cas=17-31:1101 span-2,0,0,cas,hdb3 cas=33-47:1101 dchan=48 cas=49-63:1101 loadzone=br defaultzone=br Colocar os bits em bloqueado é importante para que a operadora não entenda que na carga da placa o Asterisk esta pronto para receber uma chamada. A placa simplesmente esta conectada, mas não pronta. Executar ZTCFG. bash# ztcfg -v Zaptel Configuration ================== SPAN 1: CAS/HDB3 Build-out: 0 db (CSU)/0-133 feet (DSX-1) SPAN 2: CAS/HDB3 Build-out: 0 db (CSU)/0-133 feet (DSX-1) 62 channels configured. 4.9.6 Instalando e compilando as bibliotecas Para instalar o R2 é preciso baixar e compilar as bibliotecas spandsp, libsupertone, libmfcr2 e libunicall a partir de ftp.soft-switch.org. spandsp #cd /usr/src #wget http://www.soft-switch.org/downloads/spandsp/spandsp- 0.0.2pre25/spandsp-0.0.2pre25.tar.gz #tar –xzvf spandsp-0.0.2pre25.tar.gz #cd spandsp-0.0.2 # ./configure --prefix=/usr #make #make install
  • 110. 94 Capítulo 4: Canais analógicos e digitais libmfcr2 #cd /usr/src #wget http://www.soft-switch.org/downloads/unicall/unicall- 0.0.3pre9/libmfcr2-0.0.3.tar.gz #tar –xzvf libmfcr2-0.0.3.tar.gz #cd libmfcr2-0.0.3.tar.gz # ./configure --prefix=/usr #make #make install libsupertone #cd /usr/src #wget http://www.soft-switch.org/downloads/unicall/unicall- 0.0.3pre9/libsupertone-0.0.2.tar.gz #tar –xzvf libsupertone-0.0.2.tar.gz #cd libsupertone-0.0.2 # ./configure --prefix=/usr #make #make install libunicall #cd /usr/src #wget http://www.soft-switch.org/downloads/unicall/unicall- 0.0.3pre9/libunicall-0.0.3.tar.gz #tar –xzvf libunicall-0.0.3.tar.gz #cd libunicall-0.0.3.tar.gz # ./configure --prefix=/usr #make #make install 4.9.7 Integrando o canal Unicall ao Asterisk Baixe os arquivos relativos ao chan_unicall. #wget http://www.soft-switch.org/downloads/unicall/unicall- 0.0.3pre9/asterisk-1.1.x/chan_unicall.c #wget http://www.soft-switch.org/downloads/unicall/unicall- 0.0.3pre9/asterisk-1.1.x/channels_Makefile.patch #wget http://www.soft-switch.org/downloads/unicall/unicall- 0.0.3pre9/asterisk-1.1.x/unicall.conf.sample Copie os arquivos para a estrutura onde o asterisk será compilado. # cp chan_unicall.c channels_makefile.patch /usr/src/asterisk/channels Aplique o patch do canal do Asterisk #cd /usr/src/asterisk/channels #patch < channels_makefile.patch Em seguida recompile o Asterisk
  • 111. 4.9.6 Instalando e compilando as bibliotecas | 95 cd /usr/src/asterisk/ make clean make make install 4.9.8 Configurando o canal unicall Assim como para configurar os canais zaptel, você editava uma arquivo chamada zapata.conf, agora para os canais R2 você editará o arquivo unicall.conf. Este arquivo tem sintaxe e atributos quase idênticos ao zapata.conf de forma que não será difícil entende-lo. Veja abaixo o arquivo editado. ; ; Unicall telephony channel driver ; ; Sample configuration file ; ; $Id: unicall.conf.sample,v 1.1 2005/05/28 11:17:02 steveu Exp $ ; [channels] ; ; Default language ; language=br ; ; Default context ; context=default ; ; Whether or not to use caller ID ; usecallerid=yes ; ; Whether or not to hide outgoing caller ID ; hidecallerid=no ; ; Whether or not restrict outgoing caller ID (will be sent as ANI only, not available for the user) ; Mostly use with FXS ports ; ;restrictcid=no ; ; Support Caller*ID on Call Waiting ; callwaitingcallerid=yes ; ; Support three-way calling ; threewaycalling=yes ; ; Support flash-hook call transfer (requires three way calling) ; transfer=yes ; ; Support call forward variable ; cancallforward=yes ; ; Whether or not to support Call Return (*69) ; callreturn=yes ; ; Enable echo cancellation ; Use either "yes", "no", or a power of two from 32 to 256 if you wish ; to actually set the number of taps of cancellation. ; echocancel=yes
  • 112. 96 Capítulo 4: Canais analógicos e digitais ; ; Generally, it is not necessary (and in fact undesirable) to echo cancel ; when the circuit path is entirely TDM. You may, however, reverse this ; behavior by enabling the echo cancel during pure TDM bridging below. ; echocancelwhenbridged=yes ; ; In some cases, the echo canceller doesn't train quickly enough and there ; is echo at the beginning of the call. Enabling echo training will cause ; asterisk to briefly mute the channel, send an impulse, and use the impulse ; response to pre-train the echo canceller so it can start out with a much ; closer idea of the actual echo. Value may be "yes", "no", or a number of ; milliseconds to delay before training (default = 400) ; ;echotraining=yes ;echotraining=800 ; ; If you are having trouble with DTMF detection, you can relax the ; DTMF detection parameters. Relaxing them may make the DTMF detector ; more likely to have "talkoff" where DTMF is detected when it ; shouldn't be. ; ;relaxdtmf=yes ; ; You may also set the default receive and transmit gains (in dB) ; rxgain=0.0 txgain=0.0 ; ; Logical groups can be assigned to allow outgoing rollover. Groups ; range from 0 to 31, and multiple groups can be specified. ; group=1 ; ; Ring groups (a.k.a. call groups) and pickup groups. If a phone is ringing ; and it is a member of a group which is one of your pickup groups, then ; you can answer it by picking up and dialing *8#. For simple offices, just ; make these both the same ; callgroup=1 pickupgroup=1 ; ; Specify whether the channel should be answered immediately or ; if the simple switch should provide dialtone, read digits, etc. ; immediate=no ; ; CallerID can be set to "asreceived" or a specific number ; if you want to override it. Note that "asreceived" only ; applies to trunk interfaces. ; callerid=asreceived ; ; AMA flags affects the recording of Call Detail Records. If specified ; it may be 'default', 'omit', 'billing', or 'documentation'. ; ;amaflags=default ; ; Channels may be associated with an account code to ease ; billing ; ;accountcode=lss0101 ; ; For fax detection, uncomment one of the following lines. The default is *OFF* ; ;faxdetect=both ;faxdetect=incoming ;faxdetect=outgoing ;faxdetect=no ; ; Select which class of music to use for music on hold. If not specified ; then the default will be used. ; ;musiconhold=default ; ;protocolclass=fx ;protocolvariant=ls,hk
  • 113. 4.9.6 Instalando e compilando as bibliotecas | 97 ;protocolend=co ;group = 3 ;channel => 280-283 ;protocolclass=fx ;protocolvariant=ls,hk ;protocolend=cpe ;group = 4 ;channel => 284 ; ; Set up E1s 2 and 3 to work in China MFC/R2 mode. A maximum of 20 ANI digits ; will be accepted. 7 DNIS digits are expected. MFC/R2 uses the E1s in CAS mode, ; so time slot 16 of each E1 must be skipped when allocating the channels. ; ;loglevel=255 protocolclass=mfcr2 ; For MFC/R2 an optional fourth parameter for the variant is composed of bits, ; which must be OR'ed together, as follows: ; ; 1: Play progress tones. These are usually handled by the far end switch, but ; may need to be sent as audio through the channel on some systems. ; 2: Play disconnect tone. The disconnect tone is usually handled by the far end ; switch, but may need to be sent as audio through the channel on some systems. ; 4: Play ringback tone. The ringback tone is usually generated by something ; downstream of the MFC/R2 software, but may need to be generated here on some ; systems. ; 8: Get ANI after DNIS. The usual behaviour for incoming calls is to get the ; calling party category and the ANI as soon as possible, and to get the DNIS ; afterwards. This doesn't work on all systems, so the option to reverse the ; behaviour is provided. ; 16: Use immediate accept. Most variants of MFC/R2 offer a way to go directly to ; the call accepted state, bypassing the use of group B and II tones. This option ; enables the use of that feature for incoming calls. ; protocolvariant=br,20,4 protocolend=cpe group = 1 channel => 1-15 ;skip time slot 16 channel => 17-31 channel => 33-47 ;skip time slot 48 channel => 49-63 Analisando o arquivo acima é importante incorporar alguns comandos: protocolvariant=país,digitos-ANI,digitos-DNIS O código do país é um dos que segue abaixo: Argentina "ar" Bahrain "bh" Bolivia "bo" Brazil "br" Chile "cl" China "cn" Colombia landlines "co-land" Colombia cellular "co-cell" Czech "cz" Honduras "hn" India "in" Indonesia "id" Korea "kr" Malaysia "my" Mexico "mx" Panama "pa" Philipinnes "ph"
  • 114. 98 Capítulo 4: Canais analógicos e digitais Singapore "sg" Thailand "th" ANI e DNIS ANI quer dizer “Automatic Number Identification”, em outras palavras o número da pessoa que está originando a chamada. DNIS quer dizer “Dialed Number Identification Service”, em outras palavras o número discado. Quando uma chamada entra, normalmente quatro números (dígitos- dnis=4) são passados a central telefônica para chegada a um ramal em um processo conhecido como DDR, discagem direta a ramal também conhecida pela sigla em inglês DID – Direct Inward Dial. O número de ANI nesse caso traz o número de identificação de quem originou a chamada também conhecido como número de A. Em uma chamada sainte o número de ANI vai conter o número de identificação do ramal que gerou a ligação. Já DNIS irá identificar o número de destino da chamada. A importância de configurar corretamente estes parâmetros reside no fato de que algumas centrais enviam apenas os quatro últimos números, enquanto outras entregam o número completo. No exemplo abaixo estamos configurando a central para DNIS=4, ou seja receber apenas os últimos quatro dígitos. O Asterisk neste caso aceitará uma identificação do originador de no máximo 20 dígitos. protocolvariant=br,20,4 4.9.9 Resolvendo problemas em um canal Unicall. Inicie o Asterisk normalmente com verbose 15. asterisk –vvvvvvvvvvvvvvv& asterisk – r Na carga do Asterisk você verá mensagens semelhantes as seguintes: Apr 11 06:45:07 WARNING[24876]: Unicall/1 event Far end unblocked Apr 11 06:45:07 VERBOSE[24876]: Asterisk Ready. -- Unicall/1 far unblocked Apr 11 06:45:07 WARNING[24876]: Unicall/1 event Local end unblocked Apr 11 06:45:07 VERBOSE[24876]: -- Unicall/1 local unblocked Apr 11 06:45:07 WARNING[24876]: Unicall/2 event Far end unblocked Apr 11 06:45:07 VERBOSE[24876]: -- Unicall/2 far unblocked Apr 11 06:45:07 WARNING[24876]: Unicall/2 event Local end unblocked Apr 11 06:45:07 VERBOSE[24876]: -- Unicall/2 local unblocked Apr 11 06:45:07 WARNING[24876]: Unicall/3 event Far end unblocked Apr 11 06:45:07 VERBOSE[24876]: -- Unicall/3 far unblocked Apr 11 06:45:07 WARNING[24876]: Unicall/3 event Local end unblocked Apr 11 06:45:07 VERBOSE[24876]: -- Unicall/3 local unblocked
  • 115. 4.9.6 Instalando e compilando as bibliotecas | 99 Apr 11 06:45:07 WARNING[24876]: Unicall/4 event Far end unblocked Apr 11 06:45:07 VERBOSE[24876]: -- Unicall/4 far unblocked Apr 11 06:45:07 WARNING[24876]: Unicall/4 event Local end unblocked Apr 11 06:45:07 VERBOSE[24876]: -- Unicall/4 local unblocked Apr 11 06:45:07 WARNING[24876]: Unicall/5 event Far end unblocked Apr 11 06:45:07 VERBOSE[24876]: -- Unicall/5 far unblocked Apr 11 06:45:07 WARNING[24876]: Unicall/5 event Local end unblocked Apr 11 06:45:07 VERBOSE[24876]: -- Unicall/5 local unblocked Apr 11 06:45:07 WARNING[24876]: Unicall/6 event Far end unblocked Apr 11 06:45:07 VERBOSE[24876]: -- Unicall/6 far unblocked Apr 11 06:45:07 WARNING[24876]: Unicall/6 event Local end unblocked Apr 11 06:45:07 VERBOSE[24876]: -- Unicall/6 local unblocked Apr 11 06:45:07 WARNING[24876]: Unicall/7 event Far end unblocked Apr 11 06:45:07 VERBOSE[24876]: -- Unicall/7 far unblocked Apr 11 06:45:07 WARNING[24876]: Unicall/7 event Local end unblocked Apr 11 06:45:07 VERBOSE[24876]: -- Unicall/7 local unblocked Apr 11 06:45:07 WARNING[24876]: Unicall/8 event Far end unblocked Apr 11 06:45:07 VERBOSE[24876]: -- Unicall/8 far unblocked Apr 11 06:45:07 WARNING[24876]: Unicall/8 event Local end unblocked Apr 11 06:45:07 VERBOSE[24876]: -- Unicall/8 local unblocked Elas indicam que os canais passaram do estado bloqueado original (11) para o estado idle (10). Local end unblocked quer dizer que o lado do Asterisk foi desbloqueado, Far end inblocked quer dizer que o lado da operadora foi desbloqueado. Se um dos lados não aparecer desbloqueado a linha pode não ter sido ativada. UC show channels: Você pode verificar o estado das linhas usando este comando: vtsvoffice*CLI>UC show channels Channel Extension Context Status Language MusicOnHold 1 e1-incoming Idle default 2 e1-incoming Idle default 3 e1-incoming Idle default 4 e1-incoming Idle default 5 e1-incoming Idle default 6 e1-incoming Idle default Todos os canais devem estar em “idle” (vago). Se o comando não aparecer, a causa provável é do chan_unicall não ter sido corretamente compilado ou carregado. Uma das formas de verificar o que está ocorrendo em uma chamada é proceder um debug. Para isto é preciso editar o arquivo unicall.conf, tirar o comentário da linha loglevel=255 e reiniciar o Asterisk. Na linha de comando do Asterisk use set verbose=0 para eliminar as mensagens do Asterisk e ficar só com as mensagens do R2. Abaixo segue um exemplo que você pode usar de base de comparação com uma ligação que foi completada normalmente. O número de A (ANI) é 1149295000 e o número de destino (DNIS) é 0154830258576. Apr 12 08:33:49 WARNING[4417]: MFC/R2 UniCall/1 Call control(1) Apr 12 08:33:49 WARNING[4417]: MFC/R2 UniCall/1 Make call Apr 12 08:33:49 WARNING[4417]: MFC/R2 UniCall/1 Making a new call with CRN 32769 Apr 12 08:33:49 WARNING[4417]: MFC/R2 UniCall/1 0001 -> [1/ 1/Idle /Idle ] Apr 12 08:33:49 WARNING[4417]: Unicall/1 event Dialing Apr 12 08:33:50 WARNING[4417]: MFC/R2 UniCall/1 <- 1101 [1/ 40/Seize /Idle ] Apr 12 08:33:50 WARNING[4417]: MFC/R2 UniCall/1 0 on -> [2/ 40/Group I /Idle ] Apr 12 08:33:51 WARNING[4417]: MFC/R2 UniCall/1 <- 1 on [2/ 40/Group I /DNIS ] Apr 12 08:33:51 WARNING[4417]: MFC/R2 UniCall/1 0 off -> [2/ 40/Group I /DNIS ]
  • 116. 100 Capítulo 4: Canais analógicos e digitais Apr 12 08:33:51 WARNING[4417]: MFC/R2 UniCall/1 <- 1 off [2/ 40/Group I /DNIS ] Apr 12 08:33:51 WARNING[4417]: MFC/R2 UniCall/1 1 on -> [2/ 40/Group I /DNIS ] Apr 12 08:33:51 WARNING[4417]: MFC/R2 UniCall/1 <- 1 on [2/ 40/Group I /DNIS ] Apr 12 08:33:51 WARNING[4417]: MFC/R2 UniCall/1 1 off -> [2/ 40/Group I /DNIS ] Apr 12 08:33:51 WARNING[4417]: MFC/R2 UniCall/1 <- 1 off [2/ 40/Group I /DNIS ] Apr 12 08:33:51 WARNING[4417]: MFC/R2 UniCall/1 5 on -> [2/ 40/Group I /DNIS ] Apr 12 08:33:52 WARNING[4417]: MFC/R2 UniCall/1 <- 1 on [2/ 40/Group I /DNIS ] Apr 12 08:33:52 WARNING[4417]: MFC/R2 UniCall/1 5 off -> [2/ 40/Group I /DNIS ] Apr 12 08:33:52 WARNING[4417]: MFC/R2 UniCall/1 <- 1 off [2/ 40/Group I /DNIS ] Apr 12 08:33:52 WARNING[4417]: MFC/R2 UniCall/1 4 on -> [2/ 40/Group I /DNIS ] Apr 12 08:33:52 WARNING[4417]: MFC/R2 UniCall/1 <- 5 on [2/ 40/Group I /DNIS ] Apr 12 08:33:52 WARNING[4417]: MFC/R2 UniCall/1 4 off -> [2/ 40/Group I /DNIS ] Apr 12 08:33:52 WARNING[4417]: MFC/R2 UniCall/1 <- 5 off [2/ 40/Group I /DNIS ] Apr 12 08:33:52 WARNING[4417]: MFC/R2 UniCall/1 Calling party category 0x0 Apr 12 08:33:52 WARNING[4417]: MFC/R2 UniCall/1 1 on -> [2/ 40/Group I /DNIS ] Apr 12 08:33:52 WARNING[4417]: MFC/R2 UniCall/1 <- 5 on [2/ 40/Group I /Category ] Apr 12 08:33:52 WARNING[4417]: MFC/R2 UniCall/1 1 off -> [2/ 40/Group I /Category ] Apr 12 08:33:52 WARNING[4417]: MFC/R2 UniCall/1 <- 5 off [2/ 40/Group I /Category ] Apr 12 08:33:52 WARNING[4417]: MFC/R2 UniCall/1 1 on -> [2/ 40/Group I /Category ] Apr 12 08:33:52 WARNING[4417]: MFC/R2 UniCall/1 <- 5 on [2/ 40/Group I /ANI ] Apr 12 08:33:52 WARNING[4417]: MFC/R2 UniCall/1 1 off -> [2/ 40/Group I /ANI ] Apr 12 08:33:53 WARNING[4417]: MFC/R2 UniCall/1 <- 5 off [2/ 40/Group I /ANI ] Apr 12 08:33:53 WARNING[4417]: MFC/R2 UniCall/1 1 on -> [2/ 40/Group I /ANI ] Apr 12 08:33:53 WARNING[4417]: MFC/R2 UniCall/1 <- 5 on [2/ 40/Group I /ANI ] Apr 12 08:33:53 WARNING[4417]: MFC/R2 UniCall/1 1 off -> [2/ 40/Group I /ANI ] Apr 12 08:33:53 WARNING[4417]: MFC/R2 UniCall/1 <- 5 off [2/ 40/Group I /ANI ] Apr 12 08:33:53 WARNING[4417]: MFC/R2 UniCall/1 4 on -> [2/ 40/Group I /ANI ] Apr 12 08:33:53 WARNING[4417]: MFC/R2 UniCall/1 <- 5 on [2/ 40/Group I /ANI ] Apr 12 08:33:53 WARNING[4417]: MFC/R2 UniCall/1 4 off -> [2/ 40/Group I /ANI ] Apr 12 08:33:53 WARNING[4417]: MFC/R2 UniCall/1 <- 5 off [2/ 40/Group I /ANI ] Apr 12 08:33:53 WARNING[4417]: MFC/R2 UniCall/1 9 on -> [2/ 40/Group I /ANI ] Apr 12 08:33:53 WARNING[4417]: MFC/R2 UniCall/1 <- 5 on [2/ 40/Group I /ANI ] Apr 12 08:33:53 WARNING[4417]: MFC/R2 UniCall/1 9 off -> [2/ 40/Group I /ANI ] Apr 12 08:33:53 WARNING[4417]: MFC/R2 UniCall/1 <- 5 off [2/ 40/Group I /ANI ] Apr 12 08:33:53 WARNING[4417]: MFC/R2 UniCall/1 2 on -> [2/ 40/Group I /ANI ] Apr 12 08:33:54 WARNING[4417]: MFC/R2 UniCall/1 <- 5 on [2/ 40/Group I /ANI ] Apr 12 08:33:54 WARNING[4417]: MFC/R2 UniCall/1 2 off -> [2/ 40/Group I /ANI ] Apr 12 08:33:54 WARNING[4417]: MFC/R2 UniCall/1 <- 5 off [2/ 40/Group I /ANI ] Apr 12 08:33:54 WARNING[4417]: MFC/R2 UniCall/1 9 on -> [2/ 40/Group I /ANI ] Apr 12 08:33:54 WARNING[4417]: MFC/R2 UniCall/1 <- 5 on [2/ 40/Group I /ANI ] Apr 12 08:33:54 WARNING[4417]: MFC/R2 UniCall/1 9 off -> [2/ 40/Group I /ANI ] Apr 12 08:33:54 WARNING[4417]: MFC/R2 UniCall/1 <- 5 off [2/ 40/Group I /ANI ] Apr 12 08:33:54 WARNING[4417]: MFC/R2 UniCall/1 5 on -> [2/ 40/Group I /ANI ] Apr 12 08:33:54 WARNING[4417]: MFC/R2 UniCall/1 <- 5 on [2/ 40/Group I /ANI ] Apr 12 08:33:54 WARNING[4417]: MFC/R2 UniCall/1 5 off -> [2/ 40/Group I /ANI ] Apr 12 08:33:54 WARNING[4417]: MFC/R2 UniCall/1 <- 5 off [2/ 40/Group I /ANI ] Apr 12 08:33:54 WARNING[4417]: MFC/R2 UniCall/1 0 on -> [2/ 40/Group I /ANI ] Apr 12 08:33:55 WARNING[4417]: MFC/R2 UniCall/1 <- 5 on [2/ 40/Group I /ANI ] Apr 12 08:33:55 WARNING[4417]: MFC/R2 UniCall/1 0 off -> [2/ 40/Group I /ANI ] Apr 12 08:33:55 WARNING[4417]: MFC/R2 UniCall/1 <- 5 off [2/ 40/Group I /ANI ] Apr 12 08:33:55 WARNING[4417]: MFC/R2 UniCall/1 0 on -> [2/ 40/Group I /ANI ] Apr 12 08:33:55 WARNING[4417]: MFC/R2 UniCall/1 <- 5 on [2/ 40/Group I /ANI ] Apr 12 08:33:55 WARNING[4417]: MFC/R2 UniCall/1 0 off -> [2/ 40/Group I /ANI ] Apr 12 08:33:55 WARNING[4417]: MFC/R2 UniCall/1 <- 5 off [2/ 40/Group I /ANI ] Apr 12 08:33:55 WARNING[4417]: MFC/R2 UniCall/1 0 on -> [2/ 40/Group I /ANI ] Apr 12 08:33:55 WARNING[4417]: MFC/R2 UniCall/1 <- 5 on [2/ 40/Group I /ANI ] Apr 12 08:33:55 WARNING[4417]: MFC/R2 UniCall/1 0 off -> [2/ 40/Group I /ANI ] Apr 12 08:33:55 WARNING[4417]: MFC/R2 UniCall/1 <- 5 off [2/ 40/Group I /ANI ] Apr 12 08:33:55 WARNING[4417]: MFC/R2 UniCall/1 E on -> [2/ 40/Group I /ANI ] Apr 12 08:33:55 WARNING[4417]: MFC/R2 UniCall/1 <- 1 on [2/ 40/Group I /End of ANI ] Apr 12 08:33:55 WARNING[4417]: MFC/R2 UniCall/1 E off -> [2/ 40/Group I /End of ANI ] Apr 12 08:33:56 WARNING[4417]: MFC/R2 UniCall/1 <- 1 off [2/ 40/Group I /End of ANI ] Apr 12 08:33:56 WARNING[4417]: MFC/R2 UniCall/1 8 on -> [2/ 40/Group I /End of ANI ] Apr 12 08:33:56 WARNING[4417]: MFC/R2 UniCall/1 <- 1 on [2/ 40/Group I /DNIS ] Apr 12 08:33:56 WARNING[4417]: MFC/R2 UniCall/1 8 off -> [2/ 40/Group I /DNIS ] Apr 12 08:33:56 WARNING[4417]: MFC/R2 UniCall/1 <- 1 off [2/ 40/Group I /DNIS ] Apr 12 08:33:56 WARNING[4417]: MFC/R2 UniCall/1 3 on -> [2/ 40/Group I /DNIS ] Apr 12 08:33:56 WARNING[4417]: MFC/R2 UniCall/1 <- 1 on [2/ 40/Group I /DNIS ] Apr 12 08:33:56 WARNING[4417]: MFC/R2 UniCall/1 3 off -> [2/ 40/Group I /DNIS ] Apr 12 08:33:56 WARNING[4417]: MFC/R2 UniCall/1 <- 1 off [2/ 40/Group I /DNIS ] Apr 12 08:33:56 WARNING[4417]: MFC/R2 UniCall/1 0 on -> [2/ 40/Group I /DNIS ] Apr 12 08:33:56 WARNING[4417]: MFC/R2 UniCall/1 <- 1 on [2/ 40/Group I /DNIS ] Apr 12 08:33:56 WARNING[4417]: MFC/R2 UniCall/1 0 off -> [2/ 40/Group I /DNIS ] Apr 12 08:33:56 WARNING[4417]: MFC/R2 UniCall/1 <- 1 off [2/ 40/Group I /DNIS ] Apr 12 08:33:56 WARNING[4417]: MFC/R2 UniCall/1 2 on -> [2/ 40/Group I /DNIS ] Apr 12 08:33:57 WARNING[4417]: MFC/R2 UniCall/1 <- 1 on [2/ 40/Group I /DNIS ] Apr 12 08:33:57 WARNING[4417]: MFC/R2 UniCall/1 2 off -> [2/ 40/Group I /DNIS ] Apr 12 08:33:57 WARNING[4417]: MFC/R2 UniCall/1 <- 1 off [2/ 40/Group I /DNIS ] Apr 12 08:33:57 WARNING[4417]: MFC/R2 UniCall/1 5 on -> [2/ 40/Group I /DNIS ] Apr 12 08:33:57 WARNING[4417]: MFC/R2 UniCall/1 <- 1 on [2/ 40/Group I /DNIS ] Apr 12 08:33:57 WARNING[4417]: MFC/R2 UniCall/1 5 off -> [2/ 40/Group I /DNIS ] Apr 12 08:33:57 WARNING[4417]: MFC/R2 UniCall/1 <- 1 off [2/ 40/Group I /DNIS ] Apr 12 08:33:57 WARNING[4417]: MFC/R2 UniCall/1 8 on -> [2/ 40/Group I /DNIS ] Apr 12 08:33:57 WARNING[4417]: MFC/R2 UniCall/1 <- 1 on [2/ 40/Group I /DNIS ] Apr 12 08:33:57 WARNING[4417]: MFC/R2 UniCall/1 8 off -> [2/ 40/Group I /DNIS ] Apr 12 08:33:57 WARNING[4417]: MFC/R2 UniCall/1 <- 1 off [2/ 40/Group I /DNIS ] Apr 12 08:33:57 WARNING[4417]: MFC/R2 UniCall/1 5 on -> [2/ 40/Group I /DNIS ]
  • 117. 4.10 Opções de configuração do arquivo zapata.conf | 101 Apr 12 08:33:58 WARNING[4417]: MFC/R2 UniCall/1 <- 1 on [2/ 40/Group I /DNIS ] Apr 12 08:33:58 WARNING[4417]: MFC/R2 UniCall/1 5 off -> [2/ 40/Group I /DNIS ] Apr 12 08:33:58 WARNING[4417]: MFC/R2 UniCall/1 <- 1 off [2/ 40/Group I /DNIS ] Apr 12 08:33:58 WARNING[4417]: MFC/R2 UniCall/1 7 on -> [2/ 40/Group I /DNIS ] Apr 12 08:33:58 WARNING[4417]: MFC/R2 UniCall/1 <- 1 on [2/ 40/Group I /DNIS ] Apr 12 08:33:58 WARNING[4417]: MFC/R2 UniCall/1 7 off -> [2/ 40/Group I /DNIS ] Apr 12 08:33:58 WARNING[4417]: MFC/R2 UniCall/1 <- 1 off [2/ 40/Group I /DNIS ] Apr 12 08:33:58 WARNING[4417]: MFC/R2 UniCall/1 6 on -> [2/ 40/Group I /DNIS ] Apr 12 08:34:01 WARNING[4417]: MFC/R2 UniCall/1 <- 3 on [2/ 40/Group I /DNIS ] Apr 12 08:34:01 WARNING[4417]: MFC/R2 UniCall/1 6 off -> [2/ 40/Group I /DNIS ] Apr 12 08:34:01 WARNING[4417]: MFC/R2 UniCall/1 <- 3 off [2/ 40/Group I /DNIS ] Apr 12 08:34:01 WARNING[4417]: MFC/R2 UniCall/1 1 on -> [2/ 40/Group I /DNIS ] Apr 12 08:34:01 WARNING[4417]: MFC/R2 UniCall/1 <- 5 on [2/ 40/Group II /Category ] Apr 12 08:34:01 WARNING[4417]: MFC/R2 UniCall/1 1 off -> [2/ 40/Group II /Category ] Apr 12 08:34:01 WARNING[4417]: MFC/R2 UniCall/1 <- 5 off [2/ 40/Group II /Category ] Apr 12 08:34:01 WARNING[4417]: Unicall/1 event Alerting Apr 12 08:34:04 WARNING[4417]: MFC/R2 UniCall/1 <- 0101 [1/ 200/Await answer /Category ] Apr 12 08:34:04 WARNING[4417]: Unicall/1 event Connected Apr 12 08:34:25 WARNING[4417]: MFC/R2 UniCall/1 <- 1101 [1/ 400/Answered /Category ] Apr 12 08:34:25 WARNING[4417]: MFC/R2 UniCall/1 Far end disconnected(cause=Normal Clearing [16]) - state 0x400 Apr 12 08:34:25 WARNING[4417]: Unicall/1 event Far end disconnected Apr 12 08:34:25 WARNING[4417]: CRN 32769 - far disconnected cause=Normal Clearing [16] Apr 12 08:34:25 WARNING[4417]: MFC/R2 UniCall/1 Call control(6) Apr 12 08:34:25 WARNING[4417]: MFC/R2 UniCall/1 Drop call(cause=Normal Clearing [16]) Apr 12 08:34:25 WARNING[4417]: MFC/R2 UniCall/1 Clearing fwd Apr 12 08:34:25 WARNING[4417]: MFC/R2 UniCall/1 1001 -> [1/ 800/Clear back /Category ] Apr 12 08:34:28 NOTICE[4417]: Peer '2222' is now TOO LAGGED! Apr 12 08:34:30 WARNING[4417]: MFC/R2 UniCall/1 <- 1001 [1/ 800/Clear fwd D /Idle ] Apr 12 08:34:30 WARNING[4417]: MFC/R2 UniCall/1 Call disconnected(cause=Normal Clearing [16]) - state 0x800 Apr 12 08:34:30 WARNING[4417]: Unicall/1 event Drop call Apr 12 08:34:30 WARNING[4417]: MFC/R2 UniCall/1 Call control(7) Apr 12 08:34:30 WARNING[4417]: MFC/R2 UniCall/1 Release call Apr 12 08:34:30 WARNING[4417]: MFC/R2 UniCall/1 Destroying call with CRN 32769 Apr 12 08:34:30 WARNING[4417]: Unicall/1 event Release call 4.10 Opções de configuração do arquivo zapata.conf Existem diversas opções de configuração no arquivo zapata.conf. Descrever todas estas opções seria enfadonho e pouco produtivo. Vamos detalhar os principais grupos de opções para facilitar o entendimento. 4.10.1 Opções gerais, independentes do tipo de canal context: Define o contexto para aquele canal. Este é o contexto para entrada de chamadas pelo canal. Exemplo: context=default channel: Define o canal ou faixa de canais. Cada definição de canal irá herdar todas as opções colocadas à frente no arquivo. Canais podem ser especificados individualmente, separado por vírgulas ou como uma faixa separada por um hífen. Channel=>1-15 Channel=>16 Channel=>17,18 group: Permite que um número de canais seja tratado como um grupo para o propósito de discagem. Se você discar usando um grupo, o primeiro canal disponível será usado. Se forem telefones, ao ligar para o grupo todos receberão a campainha ao mesmo tempo. Com vírgulas você pode especificar que um canal pertence a mais de um grupo.
  • 118. 102 Capítulo 4: Canais analógicos e digitais group=1 group=3,5 language: Liga a internacionalização e configura a linguagem. Este recurso irá configurar as mensagens do sistema para uma dada linguagem. Embora o recurso esteja preparado, Inglês é a única linguagem que foi completamente gravada para a instalação padrão do Asterisk. musiconhold: Seleciona a classe para música em espera 4.10.2 Opções para conexões com rede ISDN switchtype: Configura o tipo de sinalização usado para a linha PRI. Os valores aceitáveis são: 5ess: Lucent 5ESS euroisdn: EuroISDN national: National ISDN dms100: Nortel DMS100 4ess: AT&T 4ESS Qsig: Q.SIG switchtype = EuroISDN Dica: Todas as implantações que fiz no Brasil, principalmente usando roteadores Cisco caíram em EuroISDN e Qsig. As conexões à rede pública, normalmente estão no padrão EuroISDN. pri_dialplan: Configura uma opção necessária para alguns switches (centrais e operadoras) que requerem que um plano de discagem seja passado. Esta opção é ignorada pela maioria dos equipamentos. Opções válidas são private, national, international e unknown. pri_dialplan = unknown prilocaldialplan: Configura uma opção necessária para alguns switches (centrais e operadoras). Pode ser necessário em canais do tipo EuroISDN prilocaldialplan = unknown Dica: Normalmente usamos “unknown”. Em alguns casos quando não configuramos “unknown” a operadora recebeu alguns zeros a mais.
  • 119. 4.10 Opções de configuração do arquivo zapata.conf | 103 overlapdial: O overlap dial é usado quando se deseja passar dígitos após o estabelecimento da conexão. Normalmente esta associado a passagem do número em bloco (overlapdial=no) ou dígito à digito (overlapdial=yes). Normalmente é usada a opção em bloco com a operadora. signalling: Configura o tipo de sinalização para os seguintes tipos de definição de canal. Estes parâmetros devem coincidir com os definidos no arquivo /etc/zaptel.conf. As escolhas corretas são baseadas no hardware disponível. Em uma rede ISDN existem dois tipos de sinalização. • pri_cpe: Usa a sinalização PRI como CPE/Client/User/Slave. É usado para terminar uma linha PRI em canais do Asterisk. Esta é a sinalização mais simples. Se você pediu o circuito de uma rede pública, deve funcionar de imediato. Se você vai se conectar a uma outra central, cuidado, é comum que a central esteja configurada como CPE também, pois é o caso mais comum. Neste caso peça ao técnico responsável pela central para que ele configure a central telefônica à qual você vai se interligar como Master (A nomenclatura muda de fabricante para fabricante, alguns se referem como Master/Slave, outros como Host/User e outros como Network/Client, assegure-se de que você consiga falar a mesma língua do técnico da central). • pri_net: Usa sinalização PRI como Rede/Master/Network 4.10.3 Opções de identificador de chamadas (Caller ID). Existem várias opções de identificação de chamada. Algumas opções podem ser desligadas. A maior parte está habilitada por default. usecallerid: Habilita ou desabilita a transmissão do identificador de chamadas para os seguintes canais. (Yes/No). Dica: Se seu sistema precisa de dois toques antes de atender, experimente usar “usecallerid=no” ele vai atender de imediato. hidecallerid: Configura se vai ocultar o CallerID. (Yes/No) calleridcallwaiting: Configura se vai receber a identificação de chamadas durante uma indicação de espera de chamada. calleridcallwaiting: Configura se vai receber a identificação de chamadas durante uma indicação de espera de chamada. (Yes/No) callerid: Configura a string de callerID para um dado canal. Esta chave recebe uma string formatada apropriadamente contendo o nome e o telefone a ser suprido como CallerID. O originador pode ser configurado
  • 120. 104 Capítulo 4: Canais analógicos e digitais como asreceived em interfaces de tronco para passar o CallerID recebido à frente. usecallerid => yes hidecallerid => no Importante: Apenas linhas como PRI podem transmitir a identificação de chamadas. As operadoras exigem que você configure seu CallerID de acordo com a numeração que você recebeu de 10 dígitos. Se você não passar o CallerID com a numeração correta sua chamada não é completada, muito embora você consiga receber chamadas. callerid = "Flavio Eduardo Goncalves" <48 30258500> 4.10.4 Opções de qualidade de áudio Estas opções ajustam certos parâmetros do Asterisk que afetam a qualidade do áudio em canais zapata. echocancel: Desabilita ou habilita cancelamento de eco. É recomendável que permaneça ligado. Aceita ‘yes’ (128 taps) , ‘no’ ou o número de taps que podem ser 16, 32, 64, 128 ou 256. Cada tap é uma amostra de um fluxo de dados. Em um T1 isto é 1/8000 de um segundo. De acordo com o número de taps isto é igual à 2,4,6,8,16 ou 32 ms de comprimento. Explicação: Como o cancelamento de eco funciona? A maioria dos algoritmos de cancelamento de eco opera gerando múltiplas cópias do sinal recebido, cada uma atrasada por um pequeno espaço de tempo. Este pequeno fluxo é conhecido como tap. O número de taps determina o tamanho do atraso do eco que pode ser cancelado. Estas cópias atrasadas são então ajustadas e subtraídas do sinal original recebido. O truque é ajustar o sinal atrasado para exatamente o necessário de forma à remover o echo e nada mais. Os métodos usados em determinar o peso do tap ou fatores de escalonamento e o que distingue um do outro. echocancelwhenbridged: Habilita ou desabilita o cancelamento de eco durante uma chamada, puramente TDM.. Em princípio, as chamadas puramente TDM não deveriam requerer cancelamento de eco, mas frequentemente o desempenho do áudio é melhorado. (Yes/No). rxgain: Ajusta o ganho de recebimento. Isto pode ser usado para aumentar ou diminuir o volume de entrada e compensar diferenças de hardware. Formato: Percentual da capacidade -100% à 100%.
  • 121. 4.10 Opções de configuração do arquivo zapata.conf | 105 txgain: Ajusta o ganho na transmissão. Isto pode ser usado para levantar ou diminuir o volume de saída para compensar diferenças de hardware. Recebe o mesmo argumento do rxgain. echocancel=yes echocancelwhenbridged=yes txgain=-10% rxgain=10% 4.10.5 Opções de bilhetagem Estas opções mudam a maneira em que as chamadas são gravadas no registro detalhado de chamadas (CDR – Call Detail Records). amaflags: Configura as AMA flags afetando a categorização das entradas no registro de chamadas. Aceita estes valores: • billing: Marca o registro para tarifar. • documentation: Marca o registro para documentar. • omit: Não registra os chamados. • default:Configura a default do sistema. accountcode: Configura o código da conta para as chamadas colocadas no canal. O código da conta pode ser qualquer string alfanumérica. accountcode=financeiro amaflags=billing 4.10.6 Opções de acompanhamento da chamada Estes itens são usados para emular a sinalização existente em linhas digitais como um PRI, que traz informações sobre o progresso da chamada. Os canais analógicos em geral não passam estas informações. busydetect: Tenta detectar um sinal padrão em linhas analógicas FXO, FXS e E+M. (Em linhas digitais T1 e E1 usando CAS (Channel Associated Signaling) sinalizações analógicas como E+M, immediate start e wink start). callprogress: Ao habilitar call progress o Asterisk irá tentar monitorar o estado da chamada e detectar ocupado, campainha e linha ativa. Este recurso só funciona com tons de telefones americanos. callprogress=no busydetect=yes
  • 122. 106 Capítulo 4: Canais analógicos e digitais 4.10.7 Opções para telefones ligados a linhas FXS Estas opções habilitam ou desabilitam recursos avançados em linhas FXS. adsi: (Analog Display Services Interface). É um conjunto de padrões da indústria de telecom. Foi usado por algumas companhias telefônicas para oferecer serviços como compras de passagens. Pouco comum no Brasil, esta opção habilita ou desabilita o suporte à ADSI. cancallforward: Habilita ou não o siga-me de chamadas. Siga-me é habilitado com *72 e desativado com *73. immediate: Quando o Asterisk está no modo immediate, ao invés de prover o tom de discagem, ele imediatamente pula para a extensão s. Este recurso pode ser usado para criar uma hotline. threewaycalling: Configura se vai ser permitido conferência à três daquele canal transfer: Habilita ou desabilita a transferência usando a tecla flash. Para usar esta opção, threewaycalling deve estar configurado para yes. mailbox: Este comando pode dar uma mensagem avisando o usuário de que há uma mensagem esperando no correio de voz. Esta mensagem pode vir por meio de um sinal audível, ou visual se o telefone suportar. Tem como argumento o número da caixa de correio de voz. 4.10.8 Opções para canais FXO. usecallerid: Determina se será detectado o identificador de chamada ou não. Para que esta identificação funcione deve ser habilitado a sinalização para “BINA” na linha telefônica. cidsignalling: Especifica o tipo de sinalização para identificador de chamadas. • bell = bell202 como usado nos EUA (conhecido como FSK) • v23 = v23 como usado no Reino Unido. • dtmf = DTMF como usado Dinamarca, Holanda e Brasil cidsignalling=bell cidstart: Especifica o que sinaliza o identificador de chamada, inversão de polaridade ou campainha. • ring = Um tom de campainha sinaliza o início • polarity = Inversão de polaridade sinaliza o início cidstart=ring
  • 123. 4.11 Nomenclatura dos canais ZAP | 107 4.11 Nomenclatura dos canais ZAP Os canais ZAP configurados no arquivo zapata.conf usam o seguinte formato: Zap/[g]<identificador>[c][r<cadence>] <identificador>- Identificador numérico para o número de canal físico do canal selecionado. [g] – Identificador do grupo ao invés do canal [c] – Pede confirmação de resposta. Um número não é considerado respondido até que a parte chamada pressione # [r] – Campainha personalizada. [cadence] Um inteiro de um à quatro. Exemplos: zap/2 - Canal 2 zap/g1 - Primeiro canal disponível no grupo 1 4.12 Nomenclatura dos canais Unicall Os canais UNICALL são configurados no arquivo unicall.conf usam o seguinte formato: Unicall/[g]<identificador>[c][r<cadence>] <identificador>- Identificador numérico para o número de canal físico do canal selecionado. [g] – Identificador do grupo ao invés do canal [c] – Pede confirmação de resposta. Um número não é considerado respondido até que a parte chamada pressione # [r] – Campainha personalizada. [cadence] Um inteiro de um à quatro. Exemplos: Unicall/2 - Canal 2 Unicall/g1 - Primeiro canal disponível no grupo 1
  • 124. 108 Capítulo 4: Canais analógicos e digitais 4.13 Questionário 1 – A sinalização de supervisão inclui: On-hook (no gancho) Off-hook (fora do gancho) Ringing (campainha) Dtmf 2 – A sinalização de informação inclui: Dtmf Tom de discagem Número inválido Tom de retorno Sinal de congestionamento Sinal de Ocupado Pulso decádico 3 – Existem três tipos de interface analógica FXS, FXO e E+M. Marque as afirmativas corretas. FXS – Foreign Exchange Station pode ser ligada diretamente ‘a uma interface de ramal de uma central analógica existente. FXO – Foreign Exchange Office é uma interface que pode ser ligada a rede pública. FXS – Foreign Exchange Station é uma interface que fornece tom e por isso pode ser ligada diretamente à um telefone. E+M – Também conhecida como tie-line pode gerar tom nas duas direções. 4 – A respeito de circuitos digitais E1 e T1 marque as afirmativas corretas. E1 é uma sinalização digital à 1.544 Mbits/s T1 é usado principalmente no Brasil e nos países da Europa Em um circuito E1 são possíveis trinta canais enquanto em um T1 apenas 23. ISDN é uma sinalização CCS enquando MFC/R2 é CAS 5 – A sinalização CAS/R2 padrão Brasil é suportada do Asterisk por um driver de terceiros desenvolvido por Steve Underwood. Falso Verdadeiro
  • 125. 4.13 Questionário | 109 6 – Para configurar o hardwar de uma placa Zaptel você deve configurar o arquivo: zaptel.conf zapata.conf unicall.conf serial.conf 7 – Em uma placa zaptel, no arquivo zaptel.conf você configura o hardware independente do Asterisk, no arquivo zapata.conf você configura o canal zapata do Asterisk. Verdadeiro Falso 8 – Em uma placa TDM400 uma entrada de energia vinda diretamente da fonte do micro é necessária quando existe a presença de circuitos: FXO FXS E+M ISDN 9 – Um dos principais problemas que causam ecos e chiados em uma placa zaptel é causado por: Problemas de compilação do Asterisk Cabos com problemas Conflitos de interrupção no PC Interferência Eletromagnética 10 – A sinalização R2 definida pela ITU é padronizada no mundo todo e não existem variações. Verdadeiro Falso
  • 126. 110 Capítulo 4: Canais analógicos e digitais Página deixada intencionalmente em branco
  • 127. Voz sobre IP Neste capítulo vamos aprender conceitos básicos sobre voz sobre IP aplicados a realidade do Asterisk. 5.1 Objetivos Ao final deste capítulo o leitor devará estar apto à: • Compreender os benefícios e aplicações da voz sobre IP. • Descrever como o Asterisk trata voz sobre IP. • Entender o conceito de canais TDM, SIP, IAX e H323. • Escolher um protocolo adequado para uma determinada situação • Escolher um codec apropriado para uma determinada situação • Identificar se um dispositivo é um peer, user ou friend. • Determinar a quantidade de banda e canais necessários 5.2 Introdução Neste capítulo vamos aprender alguns conceitos gerais sobre VoIP. Isto é importante, pois daqui para frente boa parte da telefonia, principalmente a baseada no Asterisk será canalizada para “voz sobre IP”. Por isso é importante que exista um entendimento básico desta tecnologia. 5.3 Benefícios da voz sobre IP O benefício chave do VoIP é combinar redes de voz e dados para reduzir custos. Analisando apenas o custo por minuto, a economia com VoIP pode não ser suficiente para justificar o investimento. Em alguns países onde o custo de uma ligação telefônica pode chegar a um dólar por minuto, certamente é justificável a sua utilização. Em outros lugares onde os custos com telecomunicações estão caindo dia-a-dia, isto pode não ser suficiente. Entretanto, existem outros benefícios associados ao VoIP, como o uso de uma única infra-estrutura de rede, adição, mudança e remoção de pontos são mais simples do que com a telefonia tradicional. Algumas pessoas têm dito que escolheram telefonia IP usando Asterisk pela liberdade de fazer as configurações elas mesmas, sem ter de depender de um serviço externo, o que é comum com centrais de telefonia tradicionais. Outro ponto importante é o uso de aplicações de telefonia. Este é, em minha opinião, o motivo número 1 da adoção de VoIP. Mobilidade, Unidade de Resposta Audível, Filas de Atendimento e “Integração Capítulo 5
  • 128. 112 Capítulo 6: O protocolo IAX e o Asterisk Telefonia Computador”, são econômicos e fáceis de implantar. O poder destas aplicações em um país, aonde o telefone chega a locais em que a Internet ainda não chegou é de extrema importância. Algumas aplicações que estão crescendo rapidamente em telefonia IP são: 5.3.1 Aplicações para Call-Centers Você pode reduzir drasticamente o custo de um Call-Center usando voz sobre IP. Além do Asterisk possuir os principais recursos para Call-Centers ativos, tais como: discador, gravação e bilhetagem, o Asterisk possui uma grande gama de recursos para implementar Call-Centers receptivos e CRM, como fila de atendimento, gravação, unidade de resposta automática, sintetização e reconhecimento de voz e bilhetagem avançada. Até mesmo uma interface TAPI (Microsoft Telephony API) está disponível. Outro ponto interessante é a possibilidade de integrar Call-Centers distantes, permitindo o uso otimizado dos agentes de telefonia, independente da localidade. É possível também usar agentes trabalhando em casa ligados ao mesmo Call-Center. Pense, você pode ter um Call- Center que fala 10 línguas, com pessoas em 10 locais diferentes do mundo atendendo para você. 5.3.2 Sistema de mensagens unificado O uso de e-mail e fax integrados à central telefônica é um dos bons recursos do Asterisk. Este recurso, quando utilizado em outras plataformas, possuí um custo elevado e tanto sua implementação quanto manutenção são bastante complexos. O licenciamento de algumas destas soluções é tão confuso que é difícil até mesmo conseguir uma cotação. 5.3.3 Chamada baseada em cartão Um dos mercados que mais crescem é o de chamada com cartão. Toda operadora tem algum tipo de cartão pré-pago. No Brasil, principalmente as operadoras de telefonia celular oferecem esse serviço. Este tipo de serviço depende de regulamentação, mas pensando em VoIP, é possível estabelecer um número em cada cidade (0800) onde o usuário liga, coloca o número do seu cartão e fala com qualquer lugar do mundo usando VoIP, sem ter de discar 0800.
  • 129. 5.4 Arquitetura do Asterisk e voz sobre IP | 113 5.4 Arquitetura do Asterisk e voz sobre IP Como pode ser visto na figura abaixo, as tecnologias e protocolos de voz sobre IP são tratados como canais do Asterisk. O Asterisk pode usar simultaneamente protocolos do tipo TDM, como o ISDN e interfaces analógicas, FXS e FXO, juntamente de canais VoIP nos padrões SIP, H323, MGCP, IAX e SCCP. Figura 5-1 Arquitetura do Asterisk. O ponto fundamental da arquitetura do Asterisk é que ele funciona como um gateway de mídia entre todos estes protocolos e não apenas como um proxy de sinalização. Com isto, um canal pode estar configurado em IAX2 com codec GSM e se comunicar com outro canal configurado com SIP e Codec G.711. Nos capítulos seguintes vamos explicar um pouco das características de cada um destes protocolos, analisar em que momento e aplicação cada um deles é mais recomendado. Nos próximos dois capítulos daremos uma maior ênfase aos dois mais utilizados que são o SIP (Session Initiated Protocol) e o IAX (Inter Asterisk Exchange).
  • 130. 114 Capítulo 6: O protocolo IAX e o Asterisk Física Ethernet/V.35/RS-232/xDSL Enlace Frame-Relay/ATM/PPP/Ethernet Rede IP/CBWFQ/WRED/IP Precedence/Diffserv Transporte UDP/RTP/SRTP Sessão H323/SIP/MGCP/IAX Apresentação G.729/G711/GSM/Speex Aplicação Asterisk Figura 5-2 Distribuição dos protocolos de VoIP dentro do modelo OSI. Como se pode ver na figura acima, voz sobre IP é composto de diversos protocolos envolvendo várias camadas do modelo OSI. De qualquer forma, VoIP é na verdade uma aplicação que funciona sobre as redes IP atuais. Estaremos aqui tratando principalmente das camadas de transporte, sessão, apresentação e aplicação. Na camada de transporte, a maior parte destes protocolos usa o RTP/RTCP, sendo o primeiro um protocolo de mídia e o segundo um protocolo de controle. A exceção é o IAX, que implementa um transporte de mídia próprio. Todos eles usam o UDP para transportar a voz. Na camada de sessão entram os protocolos de voz sobre ip propriamente ditos, H323, SIP, MGCP, IAX e SCCP. Na camada de sessão os CODECs definem o formato da apresentação da voz com suas diferentes variações de compressão. 5.5 Como escolher um protocolo 5.5.1 SIP Padrão aberto descrito pela IETF, largamente implementado, as principais operadoras VoIP estão usando SIP. É o protocolo padrão de fato para telefonia IP no momento. Ponto forte, padrão da IETF, adoção do mercado. Pontos fracos, problemas no uso do NAT, uso da banda com RTP é alto. 5.5.2 IAX
  • 131. 5.5 Como escolher um protocolo | 115 Protocolo aberto do Asterisk ainda não ratificado como uma RFC. O IAX é eficiente em banda passante, seu modo conhecido como “trunked” permite que ele use um único cabeçalho para a passagem de várias ligações. Outro ponto forte do IAX é o fato dele usar apenas a porta UDP 4569 para sinalização e áudio. Com isto ele torna simples a configuração dos Firewalls e do NAT. 5.5.3 MGCP É um protocolo para ser usado em conjunto com o H323, SIP e IAX. Sua grande vantagem é a escalabilidade. Toda a inteligência é implementada no Call Agent ao invés dos gateways. Simplifica muito a configuração. Pontos fortes: Gerenciamento centralizado, pontos fracos, o protocolo é pouco adotado ainda. 5.5.4 H323 Largamente usado em voz sobre ip. Essencial na conectividade com projetos mais antigos usando roteadores Cisco ou gateways de voz. H323 ainda é padrão para fornecedores de PBX e roteadores, muito embora eles comecem a adotar o SIP. Excelente para videoconferência. Pontos fortes, larga adoção do mercado, padronização pela ITU. Pontos fracos: complexo, pouco adotado em telefonia IP.
  • 132. 116 Capítulo 6: O protocolo IAX e o Asterisk 5.6 Conceito de Peers, Users e Friends x xx x x x x xx x x x x xx x x x Figura 5-3 Users, Peers e Friends Existem três tipos de clientes SIP e IAX. O primeiro é o user. Usuários podem fazer chamadas através de um servidor Asterisk, mas não podem receber chamadas do servidor. Isto é útil em uma situação onde você pode prover alguns serviços telefônicos ao cliente, mas nunca deve poder chamar o telefone, tal como um provedor de longa distância. O segundo é o peer. Um peer é um cliente para o qual você pode passar as chamadas, mas que você nunca vai receber chamadas dele. Isto pode ser útil para ter um telefone que só recebe chamadas, ou passar chamadas à um servidor Asterisk de uso especial como um voice mail. Normalmente, o servidor ou dispositivo irá precisar ser ambos um “user” e um “peer” ao mesmo tempo, neste caso, você o definiria como um “friend”, que é um atalho para “user” e “peer”. Um “friend” pode ambos, enviar e receber chamadas de um servidor. Um telefone provavelmente cairá nesta categoria, assim como um servidor remoto que precise de acesso à suas extensões.
  • 133. 5.7 Codecs e conversão de Codecs | 117 5.7 Codecs e conversão de Codecs x xx x Figura 5-4 Processo de digitalização da voz Codecs são usados para converter um sinal analógico de voz em uma versão codificada digitalmente. Codecs variam na qualidade do som, banda passante necessária e requisitos computacionais. Cada serviço, programa, fone ou gateway ,tipicamente, suporta vários codecs diferentes e quando vão falar um com outro negociam que codec que vão usar. Alguns codecs como o G.729 necessitam de pagamento de royalties para o seu uso. O Asterisk suporta os seguintes Codecs: • GSM: 13 Kbps • iLBC: 13.3 Kbps • ITU G.711: 64 Kbps, também conhecido como alaw/ulaw. • ITU G.723.1: 5.3/6.3 Kbps. • ITU G.726: 16/24/32/40 Kbps. • ITU G.729: 8 Kbps • Speex - 2.15 to 44.2 Kbps • LPC10 - 2.5 Kbps Os Codecs podem ser traduzidos de um para outro, muito embora existam casos onde isto não funciona muito bem. É possível também usar o modo pass-thru onde o Asterisk, não se encarrega de traduzir os fluxos de mídia que seguem diretamente de um telefone para outro. Nesta opção não é possível, gravar, ou usar o VoiceMail.
  • 134. 118 Capítulo 6: O protocolo IAX e o Asterisk 5.8 Como escolher o CODEC. A escolha do CODEC depende de vários fatores como qualidade da ligação, custo de licenciamento, uso de banda passante, resistência a perda de pacotes e necessidade de processamento baseado em mips (milhões de instruções por segundo), disponibilidade no Asterisk e nos telefones. A seguir apresentamos uma tabela que compara os principais codecs segundo estes parâmetros. A qualidade dos quatro codecs abaixo é conhecida como “Toll”, em outras palavras semelhante a rede pública. Codec g.711 g.729A (20 ms) iLBC (30 ms) GSM 06.10 RTE/LTP Banda (Kbps) 64 8 13.33 13 Custo Gratuito US$10.00/ca nal Gratuito Gratuito Resistência a perda de pacotes (Frame Erasure)1 Nenhum mecanismo 3% 5% 3% Complexidad e em Mips 2 ~0.35 ~13 ~18 ~5 1 Resistência a perda de pacotes se refere a taxa na qual o MOS é aproximadamente 0.5 pior que a qualidade de pico para o CODEC. 2 Uso de CPU se refere à quantidade em milhões de instruções por segundo para codificar e decodificar usando um DSP TI TMS320C54x. Existe uma relação quase direta entre MIPS e a freqüência do processador do PC, estes valores servem como comparativo, mas não é possível fazer uma relação precisa entre número de canais e complexidade do CODEC com a freqüência da CPU necessária ao servidor Asterisk. 5.9 Overhead causado pelos cabeçalhos. Apesar dos codecs usarem bem pouca banda passante, temos uma sobre carga causada pelos cabeçalhos IP, UDP e RTP dos pacotes de voz. Desta forma podemos dizer que a necessidade de banda varia de acordo com os tipos de cabeçalho envolvidos. Se estamos em uma rede Ethernet temos de adicionar o cabeçalho Ethernet ao cálculo, se estamos em uma rede WAN normalmente vamos adicionar o cabeçalho Frame-Relay ou PPP. Isto aumenta a quantidade de banda utilizada em até três vezes. Para exemplificar vamos pegar os seguintes exemplos: Codec g.711 (64 Kbps) Rede Ethernet (Ethernet+IP+UDP+RTP+G.711) = 95.2 Kbps
  • 135. 5.11 Engenharia de tráfego | 119 Rede PPP (PPP+IP+UDP+RTP+G.711) = 82.4 Kbps Rede Frame-Relay (FR+IP+UDP+RTP+G.711) = 82.8 Kbps Codec G.729 (8 Kbps) Rede Ethernet (Ethernet+IP+UDP+RTP+G.729) = 39.2 Kbps Rede PPP (PPP+IP+UDP+RTP+G.729) = 26.4 Kbps Rede Frame-Relay (FR+IP+UDP+RTP+G.729) = 26.8 Kbps Você pode fácilmente calcular outros codecs usando a calculadora fornecida pela Packetizer. http://www.packetizer.com/voip/diagnostics/bandcalc.html 5.11 Engenharia de tráfego Um dos pontos importantes no uso de voz sobre IP é determinar a quantidade de banda necessária para um determinado destino como uma filial ou um escritório remoto. Isto tambem é importante na determinação da quantidade de ligações simultâneas do Asterisk (que determina o dimensionamento do próprio Asterisk). 5.10.1 Simplificações Uma das simplificações mais usadas é estimar o número de ligações simultâneas por tipo de usuário. Por exemplo: PBX em empresas (1 ligação simultânea por 5 ramais) PBX para usuários residênciais (1 ligação simultânea para 16 ramais) Vamos usar como exemplo o seguinte caso: Unidade dentral : 120 ramais Filial 1 : 30 ramais Filial 2 : 15 ramais Pela simplificação teríamos 33 chamadas simultâneas na unidade central, 6 na filial 1 e 3 na filial 2: Supondo que estamos usando o CODEC g.729 nas filiais poderíamos estimar Banda necessária para filial 1 (Frame-relay): 26,8*6 = 160,8 Kbps Banda necessária para a filial 2 (Frame-relay): 80,4 Kbps
  • 136. 120 Capítulo 6: O protocolo IAX e o Asterisk 5.10.2 Método de Erlang B Erlang é uma unidade de medida de tráfego em telecomunicações. Na prática é usado para descrever o volume de tráfego de uma hora. Por exemplo, um grupo de usuários faz 20 chamados em uma hora com uma duração média de cinco minutos por chamada. Então o número de erlangs usado para representar é como segue abaixo: Minutos de tráfego em uma hora: 20 x 5 = 100 minutos Horas de tráfego em uma hora = 100/60 = 1,66 Erlangs Estas medidas são feitas de forma a permitir aos projetistas de rede entender seus padrões de tráfego e estabelecer o tamanho dos entroncamentos necessários. Nosso objetivo é normalmente determinar a banda necessária em um canal de dados ou o número de troncos necessários. Vamos usar o modelo Erlang B que é o mais comum e determina quantas linhas são necessárias na hora mais ocupada. Um dos pontos importantes é que o modelo Erlang requer que se saiba quantos minutos de ligação existem na hora mais ocupada BHT (Busy Hour Traffic). Isto pode ser obtido de duas formas: Tarifação por hora (a mais precisa) ou simplificação (BHT=17% do número de minutos chamados durante o dia). Outra variável importante é o GoS (grade of service). O GoS define a probabilidade das chamadas serem bloqueadas por falta de linhas. Podemos arbitrar 5 em 100 (0,05), 1 em 100 (0,01) ou outra métrica desejada. Exemplo 1: Dados da tarifação: Para a filial A, na hora mais ocupada foi possível determinar através do tarifador que o volume de tráfego é de 100 chamadas com média de 3 minutos. O GoS (Blocking) arbitrado é de 0,01. BHT=100x3=300 minutos/60 = 5 Erlangs GoS=0,01 Entrando em um calculadora Erlang (www.erlang.com)
  • 137. 5.11 Estratégias de redução do uso de banda passante | 121 Para este exemplo são necessários 11 troncos. Codec Selecionado: g.729 Tipo de canal: PPP Banda estimada para filial 1 : 26.4 X 11 = 290.4 Kbps Exemplo 2: Para a filial 2, os dados fornecidos pelo cliente incluem apenas o volume diário de ligações. No dia mais ocupado tivemos 1200 ligações com média de dois minutos e vinte segundos. Neste caso vamos precisar estimar a hora mais ocupada (BHT). Vamos assumir que a hora mais ocupada é 17% do total do dia (é bastante comum o uso do percentual de 17%). O GoS neste caso será de 0,01. Volume diário total: 1200 * 140s = 168000 s por dia = 46,66 horas Hora mais ocupada = 17% * 46,66 = 7,93 Neste caso são necessárias 15 linhas. Banda estimada para filial 2 : 26.4 X 15 = 396Kbps 5.11 Estratégias de redução do uso de banda passante Você pode reduzir o uso de banda passante na rede usando compressão de cabeçalho RTP e o modo IAX Trunked. O cRTP tem como principal limitação o suporte apenas em links de WAN como PPP e Frame-Relay, isto significa que na Internet ele não pode ser usado. O modo IAX Trunked só pode ser habilitado entre dois servidores Asterisk e não vale para a comunicação de um telefone diretamente ligado ao Asterisk. 5.10.1 Impacto da compressão de cabeçalho RTP Um recurso que pode existir nos roteadores é o uso de compressão do cabeçalho RTP. Isto é válido para SIP que usa o protocolo RTP, mas não para o IAX. O IAX de qualquer forma pode usar o recurso de trunk onde as ligações usam o mesmo cabeçalho quando existe mais de uma ligação. Usando cRTP a banda usada pelo g.729 com os cabeçalhos cai de 26.4 Kbps para 11.2 Kbps.
  • 138. 122 Capítulo 6: O protocolo IAX e o Asterisk Neste caso a filial 1 precisaria de 11.2x11 = 123,2 Kbps ao invés dos 290.4 Kbps. Note que isto não é possível em links ADSL, somente em links frame-relay, mpls (com camada 2, frame-relay) e canais PPP. 5.10.2 Impacto do modo trunked em IAX. Se você interligar dois servidores Asterisk em modo trunked (veremos mais a frente detalhes no capítulo sobre IAX), será usado pouco mais de 30 Kbps para a primeira ligação e em seguida o cabeçalho PPP, IP e UDP serão reaproveitados fazendo com que as novas ligações não passem muito de 9.6 Kbps. Usando o estudo de John Todd da Loligo http://www.voip-info.org/wiki-Asterisk+bandwidth+iax2 podemos determinar o seguinte uso de banda: Filial 1: 11 ligações Banda passante = 30 + (11-1)* 9.6 Kbps = 126 Kbps. A primeira ligação ocupa 30 Kbps as ligações seguintes cerca de 9.6 Kbps. 5.11 Sumário Neste capítulo você aprendeu que o Asterisk trata a voz como um canal, assim como um canal TDM. Aprendeu como tudo se encaixa dentro do modelo OSI. Aprendeu a comparar os protocolos H.323 o mais velho, IAX2 o mais eficiente, mas proprietário e ainda pouco adotado e SIP o mais aceito, mas com problemas sérios com NAT. Entendeu como diferenciar users (client), peers(server) e friends(ambos). Entendeu o conceito de codecs e tradução de codecs.
  • 139. 5.12 Questionário | 123 5.12 Questionário 1. Cite pelo menos quatro benefícios do uso de voz sobre IP 2. Convergência é a unificação das redes de voz, vídeo e dados em uma única rede e seu principal benefício é a redução com os custos de manutenção de redes separadas. Correto Incorreto 3. O Asterisk não pode usar simultaneamente recursos de PSTN (Rede pública de telefonia e de voz sobre IP, pois os codecs não são compatíveis). Correto Incorreto 4. A Arquitetura do Asterisk é de um SIP proxy com possibilidade de uso de outros protocolos. Correto Incorreto 5. Dentro do modelo OSI, os protocolos SIP, H.323 e IAX2 estão na camada de: Apresentação Aplicação Física Sessão Enlace 6. SIP é hoje o protocolo mais aberto (IETF) sendo implementado pela maioria dos fabricantes. Correto Incorreto 7. O H.323 é um protocolo sem expressão, pouco usado foi abandonado pelo mercado em favor do SIP.
  • 140. 124 Capítulo 6: O protocolo IAX e o Asterisk Correto Incorreto 8. O IAX2 é um protocolo proprietário da Digium, apesar da pouca adoção por fabricantes de telefone o IAX é excelente nas questões de: Uso de banda Uso de vídeo Passagem por redes que possuem NAT Padronizado por órgãos como a IETF e ITU. 9. “Users” podem receber chamadas Correto Incorreto 10. Sobre codecs assinale o que é verdadeiro O G711 é o equivalente ao PCM (Pulse Code Modulation) e usa 64 Kbps de banda. O G.729 é gratuito por isto é o mais utilizado, usa apenas 8 Kbps de banda. GSM vêm crescendo, pois ocupa 12 Kbps de banda e não precisa de licença. G711 u-law é comum nos EUA enquanto a-law é comum na Europa e no Brasil. G.729 é leve e ocupa pouca CPU na sua codificação.
  • 141. O Protocolo IAX Neste capítulo vamos aprender um pouco sobre o protocolo IAX, seus pontos fortes e pontos fracos. Detalhes como interfaces trunked e integração entre dois Asterisks também serão vistos. 6.1 Objetivos do Capítulo Ao final deste capítulo, você deve ser capaz de: • Identificar os pontos fortes e fracos do protocolo IAX. • Demonstrar em que cenários de uso o IAX pode ser usado. • Demonstrar as vantagens do modo trunked. • Identificar as diferenças de uso de banda entre o IAX e o SIP. • Configurar o arquivo iax.conf para telefones e provedores. • Resolver problemas em conexões IAX. • Configurar corretamente o arquivo iax.conf paranão permitir problemas de segurança. 6.2 Introdução Todas as referências ao IAX neste documento correspondem a versão 2, normalmente chamado de IAX2. O IAX2 substitui o IAX e como tal vamos nos referir a ele como apenas IAX daqui em diante. O Inter-Asterisk eXchange Protocol fornece controle e transmissão de voz sobre redes IP. O IAX pode ser usado com qualquer tipo de mídia como voz e vídeo, mas foi pensado primariamente para chamadas em voz. Os objetivos do projeto do IAX derivaram da experiência com os protocolos de voz sobre ip como o SIP (Session Initiated Protocol) e o MGCP (Media Gateway Control Protocol) para controle e o RTP para o fluxo-multimídia (streaming media) e são: • Minimizar o uso de banda passante para o tráfego de ambos, media e controle com ênfase específica em chamadas de voz individuais. • Prover transparência à NAT (Network Address Translation). • Ter a possibilidade de transmitir informações sobre o plano de discagem. Capítulo 6
  • 142. 126 Capítulo 6: O protocolo IAX e o Asterisk • Suportar a implantação eficiente de recursos de paging e intercomunicação. 6.3 Teoria de operação IAX é um protocolo de mídia e sinalização “peer-to-peer”. Isso significa que os dispositivos mantém conexões associadas com as operações de protocolo. Com respeito ao componente de sinalização do IAX, ele é mais parecido com o SIP do que com o MGCP, que é um protocolo de controle do tipo mestre-escravo. A abordagem do projeto básico do IAX multiplexa a sinalização e múltiplos fluxos sobre uma única associação UDP entre dois hosts de Internet. Nesta faceta do projeto, ele se torna dois protocolos, o primeiro é o protocolo de sinalização das sessões, o segundo o protocolo para transportar os fluxos de mídia. Esta abordagem difere da arquitetura geral dos protocolos baseados na IETF com dois protocolos separados para, sinalização (MGCP e SIP) e fluxo de mídia (RTP/RTCP). Como o IAX usa o mesmo protocolo para sinalização e mídia em uma mesma porta UDP, ele não sofre dos problemas de atravessar dispositivos que fazem NAT (Network Address Translation), como, por exemplo, roteadores ADSL.(característica fundamental para operadoras de telefonia IP). O IAX usa a porta UDP 4569 para comunicar todos os pacotes. O IAX então usa um número de chamada de 15 bits para multiplexar os fluxos sobre uma única associação UDP. x x x xx x x xx x x xx x x xx x x xx x x xx x x x Figura 6.1: Múltiplas chamadas sobre uma única associação de porta UDP. O valor de 0 é um número especial de chamada reservado em cada host. Quando tentando fazer uma chamada, o número de chamada do destino ainda não é conhecido. Um número de chamada zero é usado nesta situação. IAX é um protocolo binário. O desenho foi feito para melhorar a eficiência no uso da banda passante. Além disso, o protocolo é otimizado para fazer um uso eficiente de banda para cada chamada individual. O protocolo IAX emprega um processo similar ao SIP de registro e autenticação.
  • 143. 6.4 Formato dos Frames | 127 6.4 Formato dos Frames As mensagens IAX são chamadas frames. Existem vários tipos básicos de frames. Cada um dos tipos é descrito nesta seção. Um bit F é usado para indicar se o frame é completo (Full) ou não. O valor 0 indica que é completo. Um número de chamada de 15 bits é usado para identificar o ponto final do fluxo de mídia. Um valor de 0 indica que o ponto final não é conhecido. Uma chamada tem dois números de chamada associados com ele em qualquer uma das direções. O horário (timestamp) pode ser um campo de 32 ou 16 bits. De qualquer forma o campo ocupa 32 bits. 6.4.1 Frame completo Um frame completo pode ser usado para enviar sinalização, áudio e vídeo de forma confiável. O frame completo é o único tipo de frame que é transmitido de forma confiável. Isto significa que o recipiente deve retornar algum tipo de mensagem ao emissor após o recebimento. 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 F Número Originador da Chamada R Número de Destino da Chamada Timestamp OSeqno ISegno Frame Type C Subclasse Figura 6.2 Formato binário de um frame completo A figura acima ilustra o formato binário de um frame completo. A tabela abaixo descreve cada um dos campos. O bit R é marcado para um se o frame está sendo retransmitido. A retransmissão ocorre após um período de timeout e retransmissões são tentadas várias vezes, dependendo do contexto. O número de seqüência do fluxo de saída “OSeqno” inicia com 0 e incrementa de um em um. O campo “OSeqno” é usado para identificar a ordenação dos frames de mídia. ISeqno é o mesmo só que no sentido de entrada (Inbound). Figura 6-3Descrição dos campos do Frame Completo Campo Descrição F Marcado para 1 indica que é um frame completo Source Call Number Número de chamada originador do lado de transmissão do frame R Marcado para um indica que o frame está sendo retransmitido e o valor de 0 para a transmissão inicial. Destination Call Number Número de chamada de destino do lado receptor do frame. Timestamp Timestamp completo 32-Bits OSeqno Número de seqüência do fluxo de saída ISeqno Número de seqüência do fluxo de entrada Frame Type Tipo de Frame C Formato do valor da subclasse Subclasse Subclasse
  • 144. 128 Capítulo 6: O protocolo IAX e o Asterisk 6.4.2 MiniFrame O miniframe é usado para enviar o áudio ou vídeo (mídia) com um mínimo de sobrecarga de protocolo. O formato do miniframe segue abaixo. 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 F Número originador da chamada Timestamp Dados Figura 6-4 Formato binário de um mini-frame O timestamp do Mini Frame é truncado. O cliente geralmente mantém o timestamp completo de 32 bits. Quando enviando mini frames, os 16 bits de ordem mais baixa são enviados no campo timestamp. Quando o timestamp de 16 bits dá a volta (estoura) um frame completo é enviado para permitir que o outro lado sincronize. Campo Descrição F Marcado para 0 indica que é um frame incompleto Source Call Number Número de chamada originador do lado de transmissão do frame completo Timestamp Timestamp 16-Bits Dados Dados Figura 6-5 Descrição dos campos do Mini Frame Uma descrição completa do protocolo IAX pode ser encontrada em http://www.cornfed.com/iax.pdf 6.5 Uso de banda passante O uso de banda passante em voz sobre IP é afetado por uma série de fatores. Desde o CODEC, até questões como compressão de cabeçalhos e O IAX permite o uso do modo Trunked. Neste caso, quando mais de uma ligação é feita, o overhead dos cabeçalhos IP é diminuído, encaminhando múltiplos pacotes de voz de diferentes ligações em um único pacote. Com isto a necessidade de banda é reduzida. Um dos bons estudos sobre a banda passante usada pelo IAX foi publicada por John Todd da Loligo em http://www.voip-info.org/wiki-Asterisk+bandwidth+iax2 e é reproduzido abaixo:3 Resultados dos testes: G.711 (ulaw)G.711 (ulaw)G.711 (ulaw)G.711 (ulaw) Uma chamada:164333.75 bps /94.26 pps (82.1 kbps) Duas chamadas: 296171.60 bps / 101.46pps (148 Kbps) Deste modo: 3 Reproduzido com a permissão do autor.
  • 145. 6.5 Uso de banda passante | 129 Para cada chamada adicional: 131837 bps (65.9 Kbps) Sobre carga estimada de IP/IAX (1 chamada) 32495 bps (16.0 Kbps) Número de chamadas por megabit (15) ILBC: (veja nota abaixo)ILBC: (veja nota abaixo)ILBC: (veja nota abaixo)ILBC: (veja nota abaixo) Uma chamada: 56134,91 bps/67.45 pps (28 kbps) Duas chamadas: 98679.11 bps/102.41 pps (49.3 Kbps) Deste modo: Para cada chamada adicional: 42544 bps (21.2 Kbps) Sobre carga estimada IP/IAX2 (1 chamada): 13590 bps (6.7 Kbps) Número estimado de chamadas por megabit: 47 G.729G.729G.729G.729 Uma chamada: 60124.33 bps/101.26 pps (30.0 Kbps). Duas chamadas: 79496.23 bps/102.85 pps (39.7 Kbps). Deste modo: Para cada chamada adicional: 19732 bps (9.6 Kbps) Sobre carga estimada IP/IAX2 (1 chamada): 40572 bps (20.3 Kbps) Número estimado de chamadas por megabit: 103 GSMGSMGSMGSM Uma chamada: 70958.16 bps/102.13 pps (35.4 kbps) Duas chamadas: 100455.23 bps/102.63 pps (50.2 Kbps) Deste modo: Para cada chamada adicional: 29497 bps (14.7 Kbps) Sobre carga estimada IP/IAX2 (1 chamada): 41461 bps Número estimado de chamadas por megabit: 68 LPC10LPC10LPC10LPC10 Uma chamada: 43855.44 bps/89.94 pps (21.9 kbps). Duas chamadas: 56059.18 bps/100.81 pps (28.0 kbps) Deste modo: Para cada chamada adicional:12203 bps (6.1 Kbps) Sobre carga estimada IP/IAX2 (1 chamada):31561 bps (15.8 kbps) Número estimado de chamadas por megabit: 164 SPEEX:SPEEX:SPEEX:SPEEX: Uma chamada: 74817.18 bps/101.06 pps (37.14 kbps) Duas chamadas:109692.68 bps/102.18 pps (54.8 kbps) Deste modo: Para cada chamada adicional:34875 bps (17.4 kbps) Sobre carga estimada IP/IAX2 (1 chamada): 39941 bps (19.9 kbps) Número estimado de chamadas por megabit:57 Conclusões sobre o estudo: • O uso de banda é influenciado por várias variáveis como número de ligações simultâneas, tipo de protocolo de camada 2, o fato da rede ser half ou full-duplex. • Uma medição de 74817.18 bps é reportada como 37.15 kbps pois o link Ethernet do servidor onde isto foi medido é Ethernet Full- Duplex (possui um canal de entrada e saída). Em uma Wan que
  • 146. 130 Capítulo 6: O protocolo IAX e o Asterisk normalmente é full-duplex também a banda vai variar um pouco por causa da mudança de cabeçalho de camada 2. Normalmente na Wan o cabeçalho é um pouco menor do que na LAN. • Os dados relativos ao ILBC diferem um pouco da realidade, porque o ILBC envia frames a cada 30 ms e o trunking a cada 20 ms. Corrigindo os resultados (veja mais etalhes no estudo original) chega-se aos seguintes números: Para cada chamada adicional 14.6 Kbps, sobrecarga estimada com os cabeçalhos IP/IAX2: 13.4 Kbps, número de chamadas por megabit 67. • O melhor uso de banda foi obtido pelo LPC10 a despeito da qualidade das suas ligações. Já o G729 mostrou que tem um excelente uso de banda mantendo uma qualidade de voz impecável. 6.6 Nomenclatura dos canais 6.6.1 Formato de uma conexão de saída. IAX2/[<user>[:<secret>]@]<peer>[:<portno>][/<exten>[@<context>][/<options>] <user> Identificação do usuário no ponto remoto, ou nome do cliente configurado no iax.conf (opcional) <secret> Senha (opcional). Como alternativa pode ser o nome do arquivo de uma chave RSA sem a extensão (.key, ou .pub), e dentro de [chaves] como por ex. [onomedoarquivo] <peer> Nome do servidor ao qual se conectar <portno> Número da porta para a conexão no servidor(opcional). <exten> Extensão no servidor Asterisk remoto(opcional) <context>: Contexto para usar no servidor asterisk remoto (opcional) <options> A única opção disponível é ‘a’ que significa pedido para auto-responder. 6.6.2 Exemplos de canais de saída: IAX2/mark:asdf@myserver/6275@default chama "myserver" usando "mark" como nome do usuário e adsf como senha e pede a extensão 6275 no contexto default.
  • 147. 6.7 Cenários de uso | 131 IAX2/iaxphone/s/a chama o "iaxphone" pedindo resposta imediata IAX2/john:[johnrsa]@somewhere.com chama somewhere.com, usando john como nome do usuário e uma chave RSA para autenticação. O formato de um nome de canal IAX usado para uma conexão de entrada é simplesmente: 6.6.3 Formato de uma conexão de entrada IAX2[[<username>@]<host>]/<callno> <username> O nome do usuário, se conhecido <host> O host para se conectar <callno> O número de chamada local 6.6.4 Exemplo de canais de entrada IAX2[mark@192.168.0.1]/14 Chama o número 14 do usuário “mark” no ip 192.168.0.1 IAX2[192.168.10.1]/13 Chama o número 13 do ip 192.168.10.1 6.7 Cenários de uso Os cenários de uso vão nos permitir mostrar o arquivo de configuração do IAX com mais detalhes e ensina-lo a configurar o Asterisk em cada uma das situações. As configurações relacionadas ao IAX são executadas no arquivo iax.conf no diretório /etc/asterisk. As configurações que vamos mostrar são: • Conectando um softfone IAX ao Asterisk • Conectando o IAX à um provedor VoIP baseado em IAX • Conectando dois servidores através de IAX • Conectando dois servidores através de IAX2 no modo trunking • Debugando uma conexão IAX
  • 148. 132 Capítulo 6: O protocolo IAX e o Asterisk 6.7.1 Conectando um softfone IAX ao Asterisk O Asterisk suporta telefones IP baseados em IAX como o SNOM e o AIXy e também softfones como o idefisk. Para configurar um telefone IAX basta configurar o arquivo iax.conf e o próprio telefone. Vamos abordar neste capítulo o IDEFISK que é gratuito e pode ser baixado da Internet a partir de www.asteriskguru.com. Para facilitar a edição vamos mostrar o arquivo inteiro e as edições necessárias ao funcionamento do softfone. ; Inter-Asterisk eXchange driver definition ; ; This configuration is re-read at reload ; or with the CLI command ; reload chan_iax2.so ; ; General settings, like port number to bind to, and ; an option address (the default is to bind to all ; local addresses). ; [general] ;bindport=4569 ; bindport and bindaddr may be specified ; ; NOTE: bindport must be specified BEFORE bindaddr ; ; or may be specified on a specific bindaddr if followed by ; ; colon and port (e.g. bindaddr=192.168.0.1:4569) ;bindaddr=192.168.0.1 ; more than once to bind to multiple ; ; addresses, but the first will be the ; ; default ; ; Set iaxcompat to yes if you plan to use layered switches or ; some other scenario which may cause some delay when doing a ; lookup in the dialplan. It incurs a small performance hit to ; enable it. This option causes Asterisk to spawn a separate thread ; when it receives an IAX DPREQ (Dialplan Request) instead of ; blocking while it waits for a response. ; ;iaxcompat=yes ; ; Disable UDP checksums (if nochecksums is set, then no checkums will ; be calculated/checked on systems supporting this feature) ; ;nochecksums=no ; ; ; For increased security against brute force password attacks ; enable "delayreject" which will delay the sending of authentication ; reject for REGREQ or AUTHREP if there is a password. ; ;delayreject=yes ; ; You may specify a global default AMA flag for iaxtel calls. It must be ; one of 'default', 'omit', 'billing', or 'documentation'. These flags ; are used in the generation of call detail records. ; ;amaflags=default ; ; You may specify a default account for Call Detail Records in addition ; to specifying on a per-user basis ; ;accountcode=lss0101 ; ; You may specify a global default language for users. ; Can be specified also on a per-user basis ; If omitted, will fallback to english ; ;language=en ; ; Specify bandwidth of low, medium, or high to control which codecs are used ; in general.
  • 149. 6.7 Cenários de uso | 133 ; bandwidth=high ; ; You can also fine tune codecs here using "allow" and "disallow" clauses ; with specific codecs. Use "all" to represent all formats. ; ;allow=all ; same as bandwidth=high ;disallow=g723.1 ; Hm... Proprietary, don't use it... ;disallow=lpc10 ; Icky sound quality... Mr. Roboto. ;allow=gsm ; Always allow GSM, it's cool :) disallow=all allow=ulaw ; You can adjust several parameters relating to the jitter buffer. ; The jitter buffer's function is to compensate for varying ; network delay. ; ; There are presently two jitterbuffer implementations available for Asterisk ; and chan_iax2; the classic and the new, channel/application independent ; implementation. These are controlled at compile-time. The new jitterbuffer ; additionally has support for PLC which greatly improves quality as the ; jitterbuffer adapts size, and in compensating for lost packets. ; ; All the jitter buffer settings except dropcount are in milliseconds. ; The jitter buffer works for INCOMING audio - the outbound audio ; will be dejittered by the jitter buffer at the other end. ; ; jitterbuffer=yes|no: global default as to whether you want ; the jitter buffer at all. ; ; forcejitterbuffer=yes|no: in the ideal world, when we bridge VoIP channels ; we don't want to do jitterbuffering on the switch, since the endpoints ; can each handle this. However, some endpoints may have poor jitterbuffers ; themselves, so this option will force * to always jitterbuffer, even in this ; case. ; [This option presently applies only to the new jitterbuffer implementation] ; ; dropcount: the jitter buffer is sized such that no more than "dropcount" ; frames would have been "too late" over the last 2 seconds. ; Set to a small number. "3" represents 1.5% of frames dropped ; [This option is not applicable to, and ignored by the new jitterbuffer implementation] ; ; maxjitterbuffer: a maximum size for the jitter buffer. ; Setting a reasonable maximum here will prevent the call delay ; from rising to silly values in extreme situations; you'll hear ; SOMETHING, even though it will be jittery. ; ; resyncthreshold: when the jitterbuffer notices a significant change in delay ; that continues over a few frames, it will resync, assuming that the change in ; delay was caused by a timestamping mix-up. The threshold for noticing a ; change in delay is measured as twice the measured jitter plus this resync ; threshold. ; Resyncing can be disabled by setting this parameter to -1. ; [This option presently applies only to the new jitterbuffer implementation] ; ; maxjitterinterps: the maximum number of interpolation frames the jitterbuffer ; should return in a row. Since some clients do not send CNG/DTX frames to ; indicate silence, the jitterbuffer will assume silence has begun after ; returning this many interpolations. This prevents interpolating throughout ; a long silence. ; [This option presently applies only to the new jitterbuffer implementation] ; ; maxexcessbuffer: If conditions improve after a period of high jitter, ; the jitter buffer can end up bigger than necessary. If it ends up ; more than "maxexcessbuffer" bigger than needed, Asterisk will start ; gradually decreasing the amount of jitter buffering. ; [This option is not applicable to, and ignored by the new jitterbuffer implementation] ; ; minexcessbuffer: Sets a desired mimimum amount of headroom in ; the jitter buffer. If Asterisk has less headroom than this, then ; it will start gradually increasing the amount of jitter buffering. ; [This option is not applicable to, and ignored by the new jitterbuffer implementation] ; ; jittershrinkrate: when the jitter buffer is being gradually shrunk ; (or enlarged), how many millisecs shall we take off per 20ms frame ; received? Use a small number, or you will be able to hear it ; changing. An example: if you set this to 2, then the jitter buffer
  • 150. 134 Capítulo 6: O protocolo IAX e o Asterisk ; size will change by 100 millisecs per second. ; [This option is not applicable to, and ignored by the new jitterbuffer implementation] jitterbuffer=no forcejitterbuffer=no ;dropcount=2 ;maxjitterbuffer=1000 ;maxjitterinterps=10 ;resyncthreshold=1000 ;maxexcessbuffer=80 ;minexcessbuffer=10 ;jittershrinkrate=1 ;trunkfreq=20 ; How frequently to send trunk msgs (in ms) ; Should we send timestamps for the individual sub-frames within trunk frames? ; There is a small bandwidth use for these (less than 1kbps/call), but they ; ensure that frame timestamps get sent end-to-end properly. If both ends of ; all your trunks go directly to TDM, _and_ your trunkfreq equals the frame ; length for your codecs, you can probably suppress these. The receiver must ; also support this feature, although they do not also need to have it enabled. ; ; trunktimestamps=yes ; ; Minimum and maximum amounts of time that IAX peers can request as ; a registration expiration interval (in seconds). ; minregexpire = 60 ; maxregexpire = 60 ; ; We can register with another IAX server to let him know where we are ; in case we have a dynamic IP address for example ; ; Register with tormenta using username marko and password secretpass ; ;register => marko:secretpass@tormenta.linux-support.net ; ; Register joe at remote host with no password ; ;register => joe@remotehost:5656 ; ; Register marko at tormenta.linux-support.net using RSA key "torkey" ; ;register => marko:[torkey]@tormenta.linux-support.net ; ; Sample Registration for iaxtel ; ; Visit http://www.iaxtel.com to register with iaxtel. Replace "user" ; and "pass" with your username and password for iaxtel. Incoming ; calls arrive at the "s" extension of "default" context. ; ;register => user:pass@iaxtel.com ; ; Sample Registration for IAX + FWD ; ; To register using IAX with FWD, it must be enabled by visiting the URL ; http://www.fwdnet.net/index.php?section_id=112 ; ; Note that you need an extension in you default context which matches ; your free world dialup number. Please replace "FWDNumber" with your ; FWD number and "passwd" with your password. ; ;register => FWDNumber:passwd@iax.fwdnet.net ; ; ; You can disable authentication debugging to reduce the amount of ; debugging traffic. ; ;authdebug=no ; ; Finally, you can set values for your TOS bits to help improve ; performance. Valid values are: ; lowdelay -- Minimize delay ; throughput -- Maximize throughput ; reliability -- Maximize reliability ; mincost -- Minimize cost ; none -- No flags ;
  • 151. 6.7 Cenários de uso | 135 tos=lowdelay ; ; If mailboxdetail is set to "yes", the user receives ; the actual new/old message counts, not just a yes/no ; as to whether they have messages. this can be set on ; a per-peer basis as well ; ;mailboxdetail=yes ; ; If regcontext is specified, Asterisk will dynamically create and destroy ; a NoOp priority 1 extension for a given peer who registers or unregisters ; with us. The actual extension is the 'regexten' parameter of the registering ; peer or its name if 'regexten' is not provided. More than one regexten ; may be supplied if they are separated by '&'. Patterns may be used in ; regexten. ; ;regcontext=iaxregistrations ; ; If we don't get ACK to our NEW within 2000ms, and autokill is set to yes, ; then we cancel the whole thing (that's enough time for one retransmission ; only). This is used to keep things from stalling for a long time for a host ; that is not available, but would be ill advised for bad connections. In ; addition to 'yes' or 'no' you can also specify a number of milliseconds. ; See 'qualify' for individual peers to turn on for just a specific peer. ; autokill=yes ; ; codecpriority controls the codec negotiation of an inbound IAX call. ; This option is inherited to all user entities. It can also be defined ; in each user entity separately which will override the setting in general. ; ; The valid values are: ; ; caller - Consider the callers preferred order ahead of the host's. ; host - Consider the host's preferred order ahead of the caller's. ; disabled - Disable the consideration of codec preference alltogether. ; (this is the original behaviour before preferences were added) ; reqonly - Same as disabled, only do not consider capabilities if ; the requested format is not available the call will only ; be accepted if the requested format is available. ; ; The default value is 'host' ; ;codecpriority=host ;rtcachefriends=yes ; Cache realtime friends by adding them to the internal list ; just like friends added from the config file only on a ; as-needed basis? (yes|no) ;rtupdate=yes ; Send registry updates to database using realtime? (yes|no) ; If set to yes, when a IAX2 peer registers successfully, the ip address, ; the origination port, the registration period, and the username of ; the peer will be set to database via realtime. If not present, defaults to 'yes'. ;rtautoclear=yes ; Auto-Expire friends created on the fly on the same schedule ; as if it had just registered? (yes|no|<seconds>) ; If set to yes, when the registration expires, the friend will vanish from ; the configuration until requested again. If set to an integer, ; friends expire within this number of seconds instead of the ; registration interval. ;rtignoreexpire=yes ; When reading a peer from Realtime, if the peer's registration ; has expired based on its registration interval, used the stored ; address information regardless. (yes|no) ; Guest sections for unauthenticated connection attempts. Just specify an ; empty secret, or provide no secret section. ;
  • 152. 136 Capítulo 6: O protocolo IAX e o Asterisk [guest] type=user context=default callerid="Guest IAX User" ; ; Trust Caller*ID Coming from iaxtel.com ; [iaxtel] type=user context=default auth=rsa inkeys=iaxtel ; ; Trust Caller*ID Coming from iax.fwdnet.net ; [iaxfwd] type=user context=default auth=rsa inkeys=freeworlddialup ; ; Trust callerid delivered over DUNDi/e164 ; ; ;[dundi] ;type=user ;dbsecret=dundi/secret ;context=dundi-e164-local ; ; Further user sections may be added, specifying a context and a secret used ; for connections with that given authentication name. Limited IP based ; access control is allowed by use of "allow" and "deny" keywords. Multiple ; rules are permitted. Multiple permitted contexts may be specified, in ; which case the first will be the default. You can also override caller*ID ; so that when you receive a call you set the Caller*ID to be what you want ; instead of trusting what the remote user provides ; ; There are three authentication methods that are supported: md5, plaintext, ; and rsa. The least secure is "plaintext", which sends passwords cleartext ; across the net. "md5" uses a challenge/response md5 sum arrangement, but ; still requires both ends have plain text access to the secret. "rsa" allows ; unidirectional secret knowledge through public/private keys. If "rsa" ; authentication is used, "inkeys" is a list of acceptable public keys on the ; local system that can be used to authenticate the remote peer, separated by ; the ":" character. "outkey" is a single, private key to use to authenticate ; to the other side. Public keys are named /var/lib/asterisk/keys/<name>.pub ; while private keys are named /var/lib/asterisk/keys/<name>.key. Private ; keys should always be 3DES encrypted. ; ; ; NOTE: All hostnames and IP addresses in this file are for example purposes ; only; you should not expect any of them to actually be available for ; your use. ; ; ;[markster] ;type=user ;context=default ;context=local ;auth=md5,plaintext,rsa ;secret=markpasswd ;setvar=foo=bar ;dbsecret=mysecrets/place ; Secrets can be stored in astdb, too ;notransfer=yes ; Disable IAX native transfer ;jitterbuffer=yes ; Override global setting an enable jitter buffer ; ; for this user ;callerid="Mark Spencer" <(256) 428-6275> ;deny=0.0.0.0/0.0.0.0 ;accountcode=markster0101 ;permit=209.16.236.73/255.255.255.0 ;language=en ; Use english as default language ; ; Peers may also be specified, with a secret and
  • 153. 6.7 Cenários de uso | 137 ; a remote hostname. ; [demo] type=peer username=asterisk secret=supersecret host=216.207.245.47 ;sendani=no ;host=asterisk.linux-support.net ;port=5036 ;mask=255.255.255.255 ;qualify=yes ; Make sure this peer is alive ;qualifysmoothing = yes ; use an average of the last two PONG ; results to reduce falsly detected LAGGED hosts ; Default: Off ;qualifyfreqok = 60000 ; how frequently to ping the peer when ; everything seems to be ok, in milliseconds ;qualifyfreqnotok = 10000 ; how frequently to ping the peer when it's ; either LAGGED or UNAVAILABLE, in milliseconds ;jitterbuffer=no ; Turn off jitter buffer for this peer ; ; Peers can remotely register as well, so that they can be mobile. Default ; IP's can also optionally be given but are not required. Caller*ID can be ; suggested to the other side as well if it is for example a phone instead of ; another PBX. ; ;[dynamichost] ;host=dynamic ;secret=mysecret ;mailbox=1234 ; Notify about mailbox 1234 ;inkeys=key1:key2 ;peercontext=local ; Default context to request for calls to peer ;defaultip=216.207.245.34 ;callerid="Some Host" <(256) 428-6011> ; ; ;[biggateway] ;type=peer ;host=192.168.0.1 ;context=* ;secret=myscret ;trunk=yes ; Use IAX2 trunking with this host ;timezone=America/New_York ; Set a timezone for the date/time IE ; ; ; Friends are a short cut for creating a user and ; a peer with the same values. ; ;[marko] ;type=friend ;host=dynamic ;regexten=1234 ;secret=moofoo ;context=default ;permit=0.0.0.0/0.0.0.0 [2003] type=friend context=default secret=senha host=dynamic Os parâmetros alterados na configuração que aparecem destacados são: bandwidth=high Este comando faz com que codecs de banda alta como o G711 possam ser selecionados. Se você usar bandwidth=low e selecionar como codec
  • 154. 138 Capítulo 6: O protocolo IAX e o Asterisk ulaw (g.711 ulaw) o Asterisk dará uma mensagem de que nenhum codec está disponível. disallow=all allow=ulaw Nos comandos acima desabilitamos todos os codecs e e habilitamos apenas ulaw (g.711 ulaw). Em redes locais é o codec mais indicado pois consome pouca cpu do Asterisk. A questão de banda com 100 Mbps é secundária quando se considera uma rede local. Em uma rede WAN dificilmente selecionaríamos “ulaw” [2003] type=friend context=default secret=senha host=dynamic Nos comandos acima definimos um friend de nome “[2003]”, o contexto é o default (por enquanto vamos usar apenas o default. “Host=dynamic” vai indicar que o telefone vai se registrar para informar que endereço IP está usando. Feito isto basta configurar o softfone. 6.7.2 Lab – Instalando um softfone IAX Passo 1: Configure o arquivo iax.conf, como no exemplo acima. Passo 2: Faço download do software idefisk para sua plataforma favorita. http://www.asteriskguru.com/tools/idefisk/idefisk133_installer.exe Cuidado: URLs frquentemente mudam e o software provavelmente não estará neste exato lugar quando você decidir fazer o download. Nada que você não resolva navegando um pouco. Outros softfones ou telefones IP baseados em IAX podem ser usados para fazer este Lab. Passo 3: Instale o idefisk executando o utilitário de instalação.
  • 155. 6.7 Cenários de uso | 139 Passo 4: Configure a conta do Asterisk clicando com o botão direito sobre o ícone do idefisk na barra de ferramentas, ou usando ALT+A. Você vai ver uma tela semelhante a abaixo: Figura 6-6 Configuração da conta de cliente Passo 5: Configure o arquivo extensions.conf de forma que você possa testar o seu cliente IAX [default] exten=>2000,1,Dial(SIP/2000) exten=>2001,1,Dial(SIP/2001) exten=>2003,1,Dial(IAX2/2003) Agora você pode discar entre telefones baseados em SIP e telefones baseados em IAX2.
  • 156. 140 Capítulo 6: O protocolo IAX e o Asterisk 6.7.2 Conectando-se a um provedor baseado em IAX2 Ainda existem poucos provedores baseados em IAX2, mas eles certamente são uma boa opção principalmente se você está atrás de NAT. Dois provedores conhecidos são o freeworlddialup (www.freeworlddialup.com) e o iaxtel (www.iaxtel.com). O provedor freeworlddialup precisa de uma configuração especial para habilitar o protocolo IAX. Entre em contato com su provedor sobre as instruções de como habilitar o IAX2. . xx x x 6.7.3 Lab – Conectando-se ao freeworlddialup usando IAX2 Passo 1: Abra uma conta no seu provedor favorito. Use o freeworlddialup se você não conhecer nenhum, ele é gratuíto. Passo 2: Habilite o protocolo IAX2 se necessário no seu provedir No freeworld dialupe entre em “extra features” (Recursos extras) e clique na caixa de seleção do IAX como abaixo:
  • 157. 6.7 Cenários de uso | 141 Figura 6-7 habilitando iax2 no freeworlddialup Aviso: Telas e urls frequentemente mudam de layout e posição. Navegue para achar o local correto para habilitar o IAX2. Passo 3: Configure o arquivo iax.conf para registrar seu Asterisk no provedor. Adicione as seguintes linhas ao arquivo. A linha abaixo deve ser colocada dentro da seção [general]. [general] register=>621538:senha@iax2.fwdnet.net/2003 Na linha acima você estará registrando no provedor com seu nome e senha. No momento de receber uma ligação ela será encaminhada para o ramal 2003. [621538] ; Seu número no provedor type=peer secret=senha ; sua senha no provedor host=iax2.fwdnet.net Nas linhas acima estamos cadastrando o provedor permitindo a discagem para ele. [iaxfwd] type=user context=default auth=rsa inkeys=freeworlddialup Retire o comentário da seção [iaxfwd] do arquivo iax.conf. Isto é necessário para que ocorra a autenticação. Através do uso de chave pública você pode ter certeza de que a ligação está sendo recebida do “freeworlddialup”. Se alguém tentar usar este mesmo caminho as chaves de autenticação não vão bater.
  • 158. 142 Capítulo 6: O protocolo IAX e o Asterisk Passo 4: Testando a conexão com o provedor. Para testar a conexão vamos usar um serviço do provedor FreeWorldDialup chamado hora certa. Discando 612 no provedor poderemos ouvir uma URA que dirá a hora certa (em inglês). Para isto vamos configurar o arquivo extensions.conf e adicionar a seguinte linha no contexto default. exten=>612,1,Dial(IAX2/621538:senha@iax2.fwdnet.net/612,20,r) Entre na interface de linha de comando do Asterisk, faça um reload e em seguida use o comando: CLI>reload CLI>iax2 show register Para verificar se o sistema se registrou adequadamente no provedor. Para discar para o provedor simplesmente disque 612 a partir do telefone. 6.7.4 Conectando servidores Asterisk usando IAX2 Trunk. Dois servidores Asterisk podem ser ligados usando o protocolo IAX2. Para configurar um trunk IAX, vamos usar o conceito de mestre-escravo para tornar mais fácil o entendimento. Os seguintes passos têm de ser feitos para que o servidor escravo possa fazer e receber ligações do servidor mestre. Para simplificar o exemplo colocamos todas as ligações no contexto [default]. Mais tarde neste material você vai aprender a colocar as chamadas em contextos mais apropriados. Passo 1: Configurar o arquivo iax.conf do servidor escravo para: 1.1. Se registrar no mestre. 1.2. Receber chamadas do mestre. Passo 2:Configurar o arquivo iax.conf do servidor mestre para: 1.3. Receber chamadas do escravo. 1.4. Se registrar no escravo. Passo3: Configurar o arquivo extensions.conf do escravo: 1.5. Para discar para o mestre. 2. Configurar o arquivo extensions.conf do mestre 2.1. Para discar para o escravo. Vamos supor para o exemplo abaixo que todos os ramais no servidor mestre começam com 20xx e todos os ramais do escravo começam com 22xx.
  • 159. 6.7 Cenários de uso | 143 Passo 1 - iax.conf do servidor escravo 1.1 Registrar no mestre No arquivo iax.conf register=>mestre:senha@mestre.net.br 1.2 Receber chamadas do mestre No arquivo iax.conf [mestre] type=user auth=plaintext context-default secret=senha host=dynamic callerid=’master’ trunk=yes notransfer=yes [mestre] type=user auth=plaintext context-default secret=senha callerid=’master’ trunk=yes notransfer=yes [2000] type=friend auth=plaintext context-default secret=senha callerid=’master’ [2001] ……. ; Definição dos outros canais IAX (Ramais) Passo 2. Configurar o arquivo iax.conf do mestre 2.1 Receber e fazer chamados do escravo e o registro [escravo] type=user auth=plaintext context-default secret=senha host=dynamic callerid=’escravo’ trunk=yes notransfer=yes [escravo]
  • 160. 144 Capítulo 6: O protocolo IAX e o Asterisk type=user auth=plaintext context-default secret=senha callerid=’escravo’ trunk=yes notransfer=yes [2200] type=friend auth=plaintext context-default secret=senha callerid=’master’ [2201] ……. ; Definição dos outros canais IAX (Ramais) 2.2 Se registrar no escravo register=>escravo:senha@escravo.net.br Passo 3 – Configurar o arquivo extensions.conf no servidor escravo. [default] exten => _20XX,Dial(IAX2/master/${EXTEN} exten=>_22XX,Dial(IAX2/${EXTEN}) Passo 4 – Configurar o arquivo extensions.conf no servidor mestre. [default] exten => _22XX,Dial(IAX2/master/${EXTEN} exten=>_20XX, Dial(IAX2/${EXTEN}) 6.8 Autenticação no IAX Vamos analisar a autenticação do IAX do ponto de vista prático e aprender a escolher as melhores opções dependendo das necessidades de segurança da configuração. 6.8.1 Conexões de entrada Quando o Asterisk recebe uma conexão de entrada, a informação da chamada inicial pode incluir um nome de usuário (Do campo username) ou não. Além disso, a conexão de entrada tem um endereço IP que o Asterisk usa para a autenticação também. Se o nome do usuário é fornecido, o Asterisk faz o seguinte:
  • 161. 6.8 Autenticação no IAX | 145 1. Pesquisa o iax.conf para uma entrada “type-user” (ou “type=friend”) com a seção nome ([username]); se não encontra, recusa a conexão. 2. Se a entrada encontrada tem configurações do tipo “deny/allow” (negar/permitir), compara o endereço IP do originador da chamada. Se a conexão não for permitida, recusa a conexão. 3. Faz a checagem da senha (secret) (plaintext, md5 ou rsa); se falha, recusa a conexão. 4. Aceita a conexão e envia para o originador para o contexto especifica na configuração context= da entrada no arquivo iax.conf. Se um nome de usuário não é fornecido, o Asterisk faz o seguinte: 1. Pesquisa por um “type=user” (ou type=”friend”) no arquivo iax.conf sem um segredo especificado e também nas restrições do tipo “deny/allow”. Se uma entrada é encontrada, aceita a conexão e usa o nome da entrada do iax.conf como o nome do usuário se conectando. 2. Pesquisa por um “type=user” (ou type=”friend”) no iax.conf com um segredo ou chave RSA especificado e também verifica restrições “deny/allow” . Se uma entrada é encontrada, tenta autenticar o chamador usando o segredo especificado ou a chave, e se ele passa, aceita a conexão e usa o nome encontrado no iax.conf como nome do usuário. Suponha que seu arquivo iax.conf tenha as seguintes entradas: [guest] type=user context=guest [iaxtel] type=user context=incoming auth=rsa inkeys=iaxtel [iax-gateway] type=friend allow=192.168.0.1 context=incoming host=192.168.0.1 [iax-friend] type=user secret=this_is_secret
  • 162. 146 Capítulo 6: O protocolo IAX e o Asterisk auth=md5 context=incoming Se uma chamada de entrada tem um nome de usuário especificado de: • guest • iaxtel • iax-gateway • iax-friend Então o Asterisk irá tentar autenticar a conexão usando apenas a entrada correspondente em iax.conf. Se qualquer outro nome de usuário for especificado, a conexão será recusada. Se nenhum usuário tiver sido especificado, o Asterisk irá autenticar a conexão como usuário guest (convidado). Entretanto se você não tiver um usuário guest no seu arquivo iax.conf, o usuário que está se conectando, pode especificar o segredo associado com qualquer outro iax.conf que não tenha um endereço IP restrito. Em outras palavras, se você não tem uma entrada guest no seu iax.conf, você tem várias entradas com senhas que podem ser advinhadas e que vão permitir que o usuário se conecte no sistema. Usar chaves RSA como seus segredos é uma forma de evitar este problema sem criar um usuário guest. Entradas RSA não são “adivinháveis”, outro método é usar restrições de IP em tantas entradas quanto possíveis. 6.8.2 Conexões de saída Conexões de saída podem pegar suas informações de autenticação de: • A descrição do canal IAX2 passado pelo comando Dial(). • Uma entrada “type=peer ou friend” no arquivo iax.conf. • Uma combinação dos dois.
  • 163. 6.9 Configuração do arquivo iax.conf | 147 Suponha que seu arquivo iax.conf tenha as seguintes entradas: [iaxtel-outbound] type=peer username=iaxtel_username secret=iaxtel_secret host=iaxtel.com [iax-gateway] type=friend allow=192.168.0.1 context=incoming host=192.168.0.1 Então o comando: Dial(IAX2/iaxtel-outbound/1234) Conectaria ao host iaxtel.com, usando o usuário e senha especificados no arquivo iax.conf para autenticação. Já o comando: Dial(IAX2/user2:secret2@iaxtel-outbound/1234) Também irá se conectar com o host iaxtel.com, mas irão especificar user2:secret2 como nome e senha respectivamente e isto sobrescreve as entradas no iax.conf. Dial(IAX2/iaxtel.com/1234) Novamente a conexão seria feita ao host iaxtel.com, mas nenhum nome de usuário foi especificado. Como nenhuma das entradas no arquivo iax.conf bate com a descrição do canal iaxtel.com a conexão é recusada. Dial(IAX2/iax-gateway/5678) Conectar-se-ia ao host 192.168.0.1, sem especificar nenhum nome, e se o host pedir um segredo, nenhum segredo será fornecido. Presumivelmente este tipo de entrada seria usada para conexões entre hosts com alto grau de confiança. 6.9 Configuração do arquivo iax.conf O arquivo iax.conf possui uma grande quantidade de configurações e discuti-las uma à uma seria enfadonho e pouco útil. Vamos discutir algumas opções importantes na seção [general] e nas seções por peer, user ou friend.
  • 164. 148 Capítulo 6: O protocolo IAX e o Asterisk O arquivo de configuração do IAX é uma coleção de seções, cada qual representa uma entidade dentro do escopo do IAX (A exceção da seção geral). A primeira seção é tipicamente a seção geral. Nesta área, um número de parâmetros que afetam todo o sistema pode ser configurado. Especificamente os codecs default, portas, endereços, comportamento do jitter, bits de TOS e registros. 6.9.1 Configuração do endereçamento O endereçamento é configurado na seção [general] Endereçamento do servidor: bindport = <portnum> Isto configure a porta em que o IAX vai se ligar. A porta default é 5036. É recomendado manter este valor. bindaddr = <ipaddr> Isto permite ligar o IAX à um endereço IP especifico ao invés de ligar o * à todos os endereços. 6.9.2 Seleção dos codecs: A seleção dos codecs pode ser feita na seção [general] ou em cada entidade individualmente. bandwidth = [low|medium|high] A seleção de banda passante inicializa a seleção de codecs a valores apropriados para uma dada banda. Escolhendo “High” habilita todos os codecs e é recomendado para conexões de 10Mbps para cima. Escolhendo “médium” elimina os codecsU-law A-law deixando apenas os codecs com 32Kbps ou menos (Com MP3 como um caso especial). Isto pode ser usado em conexões de banda larga se desejado. O “low” elimina o ADPCM e MP3, deixando apenas o G723, GSM e LPC10. allow/disallow=[gsm|lpc10|g72 3.1|adpcm|ulaw|alaw|mp3|sline ar|all] Os comandos "allow" e "disallow" permitem fazer uma sintonia fina na seleção de codecs.
  • 165. 6.9 Configuração do arquivo iax.conf | 149 6.9.3 Configuração do buffer de jitter e marcação de pacotes: Jitter também conhecido como variação do atraso é um dos grandes responsáveis pela redução da qualidade de voz. Um buffer de jitter é usado para compensar estas variações da atraso. Um jitter pequeno de menos de um frame de comprimento (em ms) normalmente não é um problema, entretanto um jitter excessivo pode sem um buffer de jitter causar falhas no audio.O buffer de jitter permite reduzir estas variações a custa de uma atraso maior. De uma forma geral é importante manter o atraso abaixo de 150 ms e o delay abaixo de 20 ms. Quando você configura um buffer de jitter ele naturalmente vai atrasar o pacote no exato tamanho do buffer. É importante pensar em orçamento de atraso que você pode consumir na configuração de um buffer de jitter. Os parâmetros para regulagem do buffer de jitter seguem abaixo: • jitterbuffer=<yes/no> – Habilita ou desabilita o buffer de jitter. • Dropcount=<número> - Ele representa o número máximo de frames que podem estar atrasados nos últimos dois segundos. Recomenda-se setar este número abaixo de 3 (1,5% dos frames dropados). • Maxjitterbuffer=<número> - O tamanho do buffer de jitter. Normalmente abaixo de 100 ms. • Maxexcessbuffer=<número> - Se o atraso da rede melhora após um período de jitter alto, é possível que o buffer seja maior que o necessário. Então se o buffer estiver acima do maxexcessbuffer, o Asterisk irá começar a reduzi-lo • Minexcessbuffer=<número> - Este parâmetro representa o espaço mínimo reservado para o buffer de jitter, se o buffer baixar deste número, o Asterisk irá começar a aumenta-lo. O parâmetro abaixo permite que os pacotes do Asterisk sejam marcados para tratamento especial em swithes e roteadores. Este parâmetro é parte do campo TOS do cabeçalho IP que é setado bit à bit. Para setar o TOS você usa um combinação dos seguintes por exemplo: tos=0x10 = low delay tos=0x08 = high throughput tos=0x04 = high reliability tos=0x02 = ECT bit set tos=0x01 = CE bit set Exemplo: tos=0x05
  • 166. 150 Capítulo 6: O protocolo IAX e o Asterisk você está dizendo que quer alta confiabilidade junto com o bit CE habilitado. 6.9.4 Parâmetros adicionais para tipo “User”: permit = <ipaddr>/<netmask> deny = <ipaddr>/<netmask> As regras para permitir e negar (permit e deny) podem ser aplicadas à usuários, permitindo a eles se conectar de determinados endereços IP e não de outros. As regras são interpretadas na seqüência e são todas avaliadas em um dado endereço IP, com o resultado final sendo a decisão (Diferente das listas de controle de acesso Cisco e da maior parte dos Firewalls). Exemplo: permit=0.0.0.0/0.0.0.0 deny=192.168.0.0/255.255.255.0 Irá negar qualquer um em 192.168.0.0 com mascara de 24 bits (classe C) deny=192.168.0.0/255.255.255.0 permit=0.0.0.0/0.0.0.0 Não irá negar qualquer um já que a regra final permite todos, deste modo sobrepondo a negação. Se nenhuma regra estiver listada, qualquer um pode se conectar de qualquer lugar. callerid = <callerid> Você pode sobrescrever o identificador de chamada passado pelo usuário para você (Se ele escolher enviar) de maneira que ele sempre esteja correto do ponto de vista do seu servidor. auth = [md5|plaintext|rsa] Você pode selecionar que métodos de autenticação são permitidos. Múltiplos métodos podem ser especificados, separado por vírgulas. Se md5 ou texto simples (plaintext) é selecionado um segredo (secret) deve ser fornecido. Se autenticação RSA for especificada, então uma ou mais nomes de chaves deve ser especificado com “inkeys”. Se nenhum
  • 167. 6.10 Comandos de depuração do IAX2. | 151 segredo e nenhum método de autenticação for especificado, então nenhuma autenticação é necessária. Secret = <secret> A linha “secret”especifica o segredo compartilhado para os métodos md5 ou autenticação em texto simples. Não sugerimos a autenticação em texto simples exceto para debugging inkeys = key1[:key2...] A linha "inkeys" especifica que chaves nós podemos usar para autenticar um “peer” remoto. Os arquivos de chave ficam em /var/lib/asterisk/keys/<name>.pub e são chaves públicas. Parâmetros de bilhetagem: accountcode = <code> amaflags = [default|omit|billing| documentation]: Estes parâmetros afetam a geração do detalhamento de chamadas. O primeiro configura o código de contabilização para registros recebidos com o IAX. O código de contabilização pode sobrescrever a base por usuário para chamadas entrantes. O “amaflags” controla como o registro é etiquetado (“omit” faz com que nenhum registro seja escrito. “billing” e “documentation”etiquetam os registros como registros para cobrança e documentação respectivamente e “default”seleciona o default do sistema). 6.10 Comandos de depuração do IAX2. iax2 show netstats vtsvoffice*CLI> iax2 show netstats -------- LOCAL --------------------- -------- REMOTE -------------------- Channel RTT Jit Del Lost % Drop OOO Kpkts Jit Del Lost % Drop OOO Kpkts IAX2/8590-1 16 -1 0 -1 -1 0 -1 1 60 110 3 0 0 0 0 iax2 show channels vtsvoffice*CLI> iax2 show channels Channel Peer Username ID (Lo/Rem) Seq (Tx/Rx) Lag Jitter JitBuf Format IAX2/8590-2 8.8.30.43 8590 00002/26968 00004/00003 00000ms -0001ms 0000ms unknow iax2 show peers vtsvoffice*CLI> iax2 show peers Name/Username Host Mask Port Status
  • 168. 152 Capítulo 6: O protocolo IAX e o Asterisk 8584 (Unspecified) (D) 255.255.255.255 0 UNKNOWN 8564 (Unspecified) (D) 255.255.255.255 0 UNKNOWN 8576 (Unspecified) (D) 255.255.255.255 0 UNKNOWN 8572 (Unspecified) (D) 255.255.255.255 0 UNKNOWN 8571 (Unspecified) (D) 255.255.255.255 0 UNKNOWN 8585 (Unspecified) (D) 255.255.255.255 0 UNKNOWN 8589 (Unspecified) (D) 255.255.255.255 0 UNKNOWN 8590 8.8.30.43 (D) 255.255.255.255 4569 OK (16 ms) 3232 (Unspecified) (D) 255.255.255.255 0 UNKNOWN 9 iax2 peers [1 online, 8 offline, 0 unmonitored] iax2 debug Observe no debug destacado o início e o fim de uma ligação. Entre as ligações observe as comunicações de registro do canal e o sistema de controle da atraso e jitter (poke, pong) de onde vem as estatísticas vistas em show channels. vtsvoffice*CLI> iax2 debug IAX2 Debugging Enabled Rx-Frame Retry[ No] -- OSeqno: 000 ISeqno: 000 Type: IAX Subclass: REGREQ Timestamp: 00003ms SCall: 26975 DCall: 00000 [8.8.30.43:4569] USERNAME : 8590 REFRESH : 60 Tx-Frame Retry[000] -- OSeqno: 000 ISeqno: 001 Type: IAX Subclass: REGAUTH Timestamp: 00009ms SCall: 00003 DCall: 26975 [8.8.30.43:4569] AUTHMETHODS : 2 CHALLENGE : 137472844 USERNAME : 8590 Rx-Frame Retry[ No] -- OSeqno: 001 ISeqno: 001 Type: IAX Subclass: REGREQ Timestamp: 00016ms SCall: 26975 DCall: 00003 [8.8.30.43:4569] USERNAME : 8590 REFRESH : 60 MD5 RESULT : f772b6512e77fa4a44c2f74ef709e873 Tx-Frame Retry[000] -- OSeqno: 001 ISeqno: 002 Type: IAX Subclass: REGACK Timestamp: 00025ms SCall: 00003 DCall: 26975 [8.8.30.43:4569] USERNAME : 8590 DATE TIME : 2006-04-17 16:03:00 REFRESH : 60 APPARENT ADDRES : IPV4 8.8.30.43:4569 CALLING NUMBER : 4830258590 CALLING NAME : Flavio Rx-Frame Retry[ No] -- OSeqno: 002 ISeqno: 002 Type: IAX Subclass: ACK Timestamp: 00025ms SCall: 26975 DCall: 00003 [8.8.30.43:4569] Tx-Frame Retry[000] -- OSeqno: 000 ISeqno: 000 Type: IAX Subclass: POKE Timestamp: 00003ms SCall: 00006 DCall: 00000 [8.8.30.43:4569] Rx-Frame Retry[ No] -- OSeqno: 000 ISeqno: 001 Type: IAX Subclass: ACK Timestamp: 00003ms SCall: 26976 DCall: 00006 [8.8.30.43:4569] Rx-Frame Retry[ No] -- OSeqno: 000 ISeqno: 001 Type: IAX Subclass: PONG Timestamp: 00003ms SCall: 26976 DCall: 00006 [8.8.30.43:4569] RR_JITTER : 0 RR_LOSS : 0 RR_PKTS : 1 RR_DELAY : 40 RR_DROPPED : 0 RR_OUTOFORDER : 0 Tx-Frame Retry[-01] -- OSeqno: 001 ISeqno: 001 Type: IAX Subclass: ACK Timestamp: 00003ms SCall: 00006 DCall: 26976 [8.8.30.43:4569] Rx-Frame Retry[ No] -- OSeqno: 000 ISeqno: 000 Type: IAX Subclass: NEW Timestamp: 00003ms SCall: 26977 DCall: 00000 [8.8.30.43:4569] VERSION : 2 CALLING NUMBER : 8590 CALLING NAME : 4830258590 FORMAT : 2 CAPABILITY : 1550
  • 169. 6.11 Sumário | 153 USERNAME : 8590 CALLED NUMBER : 8580 DNID : 8580 Tx-Frame Retry[000] -- OSeqno: 000 ISeqno: 001 Type: IAX Subclass: AUTHREQ Timestamp: 00007ms SCall: 00004 DCall: 26977 [8.8.30.43:4569] AUTHMETHODS : 2 CHALLENGE : 190271661 USERNAME : 8590 Rx-Frame Retry[Yes] -- OSeqno: 000 ISeqno: 000 Type: IAX Subclass: NEW Timestamp: 00003ms SCall: 26977 DCall: 00000 [8.8.30.43:4569] VERSION : 2 CALLING NUMBER : 8590 CALLING NAME : 4830258590 FORMAT : 2 CAPABILITY : 1550 USERNAME : 8590 CALLED NUMBER : 8580 DNID : 8580 Tx-Frame Retry[-01] -- OSeqno: 000 ISeqno: 001 Type: IAX Subclass: ACK Timestamp: 00003ms SCall: 00004 DCall: 26977 [8.8.30.43:4569] Rx-Frame Retry[ No] -- OSeqno: 001 ISeqno: 001 Type: IAX Subclass: AUTHREP Timestamp: 00063ms SCall: 26977 DCall: 00004 [8.8.30.43:4569] MD5 RESULT : 57cc5c48affba14106c29439944413a1 Tx-Frame Retry[000] -- OSeqno: 001 ISeqno: 002 Type: IAX Subclass: ACCEPT Timestamp: 00054ms SCall: 00004 DCall: 26977 [8.8.30.43:4569] FORMAT : 1024 Tx-Frame Retry[000] -- OSeqno: 002 ISeqno: 002 Type: CONTROL Subclass: ANSWER Timestamp: 00057ms SCall: 00004 DCall: 26977 [8.8.30.43:4569] Tx-Frame Retry[000] -- OSeqno: 003 ISeqno: 002 Type: VOICE Subclass: 138 Timestamp: 00090ms SCall: 00004 DCall: 26977 [8.8.30.43:4569] Rx-Frame Retry[ No] -- OSeqno: 002 ISeqno: 002 Type: IAX Subclass: ACK Timestamp: 00054ms SCall: 26977 DCall: 00004 [8.8.30.43:4569] Rx-Frame Retry[ No] -- OSeqno: 002 ISeqno: 003 Type: IAX Subclass: ACK Timestamp: 00057ms SCall: 26977 DCall: 00004 [8.8.30.43:4569] Rx-Frame Retry[ No] -- OSeqno: 002 ISeqno: 004 Type: IAX Subclass: ACK Timestamp: 00090ms SCall: 26977 DCall: 00004 [8.8.30.43:4569] Rx-Frame Retry[ No] -- OSeqno: 002 ISeqno: 004 Type: VOICE Subclass: 138 Timestamp: 00210ms SCall: 26977 DCall: 00004 [8.8.30.43:4569] Tx-Frame Retry[-01] -- OSeqno: 004 ISeqno: 003 Type: IAX Subclass: ACK Timestamp: 00210ms SCall: 00004 DCall: 26977 [8.8.30.43:4569] Rx-Frame Retry[ No] -- OSeqno: 003 ISeqno: 004 Type: IAX Subclass: PING Timestamp: 02083ms SCall: 26977 DCall: 00004 [8.8.30.43:4569] Tx-Frame Retry[000] -- OSeqno: 004 ISeqno: 004 Type: IAX Subclass: PONG Timestamp: 02083ms SCall: 00004 DCall: 26977 [8.8.30.43:4569] RR_JITTER : 0 RR_LOSS : 0 RR_PKTS : 1 RR_DELAY : 40 RR_DROPPED : 0 RR_OUTOFORDER : 0 Rx-Frame Retry[ No] -- OSeqno: 004 ISeqno: 005 Type: IAX Subclass: ACK Timestamp: 02083ms SCall: 26977 DCall: 00004 [8.8.30.43:4569] Rx-Frame Retry[ No] -- OSeqno: 004 ISeqno: 005 Type: IAX Subclass: HANGUP Timestamp: 08693ms SCall: 26977 DCall: 00004 [8.8.30.43:4569] CAUSE : Dumped Call Para desligar o debug use: vtsvoffice*CLI>iax2 no debug 6.11 Sumário Neste capítulo você aprendeu a diferenciar os pontos fortes e fracos do IAX. Foi possível demonstrar os cenários de uso do Asterisk como client
  • 170. 154 Capítulo 6: O protocolo IAX e o Asterisk usando um softfone e entroncamento de dois PABX com IAX trunked. Foi demonstrado que o modo trunked economiza banda enviando diversas ligações em um mesmo pacote evitando a criação de novos pacotes e cabeçalhos. Foi possível ver que a quantidade de banda usada depende do codec, bem como das configurações. Aprendeu a configurar o arquivo iax.conf para se conectar a telefones e provedores e pode usar alguns dos comandos de console do Asterisk relacionados ao Asterisk.
  • 171. 6.12 Questionário | 155 6.12 Questionário 1. Podemos citar como principais benefícios do IAX a economia de banda e facilidade de passar por Firewalls com NAT. Correto Incorreto 2. No protocolo IAX os canais de sinalização e mídia passam separados. Esta afirmação é: Correta Incorreta 3. O IAX emprega os seguintes tipos de frames Frame Completo Frame Incompleto Mini-Frame Trunked Frame 4. A banda passante usada pelo protocolo IAX é a soma da carga de voz (payload) mais os cabeçalhos (Marque todas as que se aplicam) IP UDP IAX RTP cRTP 5. É importante ter a mesma configuração para o payload do codec (20 à 30 ms) que a sincronização dos frames no modo trunked (20 ms – padrão) Verdadeiro Falso 6. Quando o IAX é usado no modo trunk, apenas um cabeçalho é usado para transmitir múltiplas ligações. A afirmação acima está: Correta Incorreta 7. O protocolo IAX2 é o mais comum para conectar provedores de telefonia IP, pois passa fácil pelo NAT. A afirmação acima está
  • 172. 156 Capítulo 6: O protocolo IAX e o Asterisk Correta Incorreta 8. Em um canal IAX como o abaixo, a opção <secret> pode ser tanto uma senha como uma ___________________. IAX/[<user>[:<secret>]@]<peer>[:<portno>][/<exten>[@<context>][/<options>]] 9. O contexto é adicionado para cada cliente IAX, isto permite que diferentes clientes possuam diferentes contextos. Pode-se pensar em contexto como uma classe de ramal onde o cliente será colocado. A afirmação está Correta Incorreta 10. O comando IAX2 show registry mostra informações sobre: Os usuários registrados Os provedores ao qual o Asterisk se conectou.
  • 173. O protocolo SIP 7.1 Objetivos Ao final deste capítulo você deverá ser capaz de: • Entender a teoria de operação do SIP • Entender os pontos fortes e fracos do SIP • Configurar um telefone padrão SIP para operar com o Asterisk. • Configurar o Asterisk para se conectar à um provedor SIP • Integrar dois servidores Asterisk através de SIP • Configurar o Asterisk atrás de NAT • Configurar um cliente atrás de NAT 7.2 Visão geral O SIP (Session Initiated Protocol) é um protocolo baseado em texto, similar ao HTTP e SMTP, desenhado para iniciar, manter e terminar sessões de comunicação interativa entre usuários. Tais sessões incluem, voz, vídeo, chat, jogos interativos e realidade virtual. Foi definido pela IETF e vem se tornando o padrão de fato em telefonia IP. 7.2.1 Teoria da Operação do SIP O SIP é um protocolo de sinalização de voz sobre IP que possui os seguintes componentes: Capítulo 7
  • 174. 158 Capítulo 7: O protocolo SIP e o Asterisk Figura 7.1 • UAC (user agent client) – cliente ou terminal que inicia a sinalização SIP. • UAS (user agent server) – servidor que responde a sinalização SIP de um UAC. • UA (user agent) – terminal de rede SIP (telefones SIP, ou gateway para outras redes), contém UAC e UAS. • Servidor Proxy – Recebe pedidos de conexão de um UA e transfere ele para outro servidor proxy se a estação em particular não está em sua administração. • Servidor de Redirecionamento – Recebe pedidos de conexão e envia-os de volta ao emissor incluindo os dados de destino ao invés de enviá-los diretamente à parte chamada. • Servidor de localização – recebe pedidos de registro de um UA e atualiza a bas de dados de terminais com eles. Todas as seções do servidor (Proxy, Redirect e Location) estão tipicamente disponíveis em uma única máquina física chamada proxy server, que é responsável pela manutenção da base de dados de clientes, estabelecimento de conexões, manutenção e término e redirecionamento de chamadas.
  • 175. 7.2 Visão geral | 159 7.2.2 Processo de Registro do SIP x xx x x x x x x x x x x x x x Figura 7.2 Antes que um telefone possa receber chamadas, ele precisa se registrar em uma base de localização. É neste local que o nome será associado ao endereço IP onde o telefone se encontra. No nosso caso usamos como nome o ramal 8500. Poderia ser também um endereço no formato sip:flavio@voffice.com.br.
  • 176. 160 Capítulo 7: O protocolo SIP e o Asterisk 7.2.3 Operação do SIP em modo proxy. x xx x x xx x x xx x x x x x x x Figura 7.3 7.2.4 Operação em modo de redirect. x xx x x xx x x xx x x x x x x x Figura 7.4
  • 177. 7.2 Visão geral | 161 7.2.5 SIP no modo Asterisk É importante ressaltar que o Asterisk não é nem um SIP Proxy nem um SIP Redirector. O Asterisk é um Media Gateway. Ele poderia ser mais bem descrito como um B2BUA, (back-to-back user agent). Em outras palavras ele conecta dois canais SIP como se fossem canais de um PBX. É possível usar em conjunto com o Asterisk um SIP Proxy como o SIP Express Router http://www.iptel.org/ser/. As mensagens básicas enviadas em um ambiente SIP são: • INVITE – pedido de estabelecimento de conexão. • ACK – reconhecimento do INVITE pelo receptor final da mensagem. • BYE – término da conexão. • CANCEL – término de uma conexão não estabelecida. • REGISTER – registro do UA no SIP proxy. • OPTIONS – pedido de opções do servidor Respostas a mensagens do SIP são em formato texto como no protocolo http. Aqui estão as respostas mais importantes. • 1XX – mensagens de informação (100–tentando, 180– campainha, 183–progresso). • 2XX – pedido completado com sucesso (200 – OK). • 3XX – encaminhamento de chamada, o pedido deve ser direcionado para outro lugar. (302 – temporariamente movido, 305 – use proxy). • 4XX – erro (403 – Proibido). • 5XX – erro de servidor (500 – Erro interno do servidor, 501 – Não implementado). • 6XX – falha global (606 – Não aceitável).
  • 178. 162 Capítulo 7: O protocolo SIP e o Asterisk 7.3 Arquivo de configuração sip.conf Vamos discutir a configuração do arquivo sip.conf em várias partes. Vamos mostrar como configurar os parâmetros mais genéricos da seção [general] e em seguida dentro de um contexto de uso vamos apresentando os outros parâmetros. Cada cliente do sip é identificado por um bloco de texto que se parece como o exemplo abaixo: [xxx] Type=xxx Parametrô1=valor Parâmetro2=valor Onde xxx é o nome do usuário associado com o cliente SIP, ou é um nome arbitrário usado pode outros arquivos de configuração para se referir, a este dispositivo SIP. Tipicamente se um telefone SIP tem um número de extensão de 123, então sua entrada correspondente neste arquivo irá iniciar com [123]. Note que você ainda tem de habilitar a extensão 123 no seu plano de discagem para alcançar este telefone. A outra maneira em que as chamadas SIP de entrada batem com as seções [xxx] deste arquivo é examinar o endereço IP do pedido que está chegando e olhar para a seção peer [xxx] que tenha um valor de host correspondente. Se host=dynamic, então nenhuma correspondência será encontrada até que o cliente SIP esteja registrado. 7.3.1 Configuração da seção geral [general] Abaixo segue uma explanação sobre os parâmetros mais comuns na seção [general] do arquivo sip.conf. bindaddr=0.0.0.0 bindport=5060 Os parâmetros “bindaddr” e “bindport” são opcionais e controlam a porta e a interface IP onde o Asterisk irá receber as suas conexões. Se você configurar bindaddr=0.0.0.0 o servidor receberá conexões em todas as suas interfaces. realm=voffice.com.br Esta opção configura o parâmetro “realm” para a computação do “digest”. srvlookup=yes
  • 179. 7.3 Arquivo de configuração sip.conf | 163 Este parâmetro habilita o uso de registros SRV no DNS. O Asterisk usa apenas o primeiro registro retornado. Para acessar servidores pelo nome de domínio você precisará colocar este parâmetro em “yes”. useragent=Asterisk PBX 1.2.7 Este comando altera o campo useragent do cabeçalho SIP identificando o tipo de agente usuário usado. tos=lowdelay Os parâmetros lowdelay, throughput, reliability, mincost e none estão obsoletos porque setam o tipo de serviço de acordo com o antigo modelo de precedência definidos nas RFC 791 e RFC 1349. O parâmetro TOS seta o byte correspondente ao tipo de serviço no cabeçalho do pacote IP. Este campo é responsável por informar aos roteadores como se deve tratar estes pacotes na rede e aplicar QoS (qualidade de serviço). Este campo já sofreu várias modificações. Mais recentemente a nomenclatura conhecida como DSCP (Differentiated Services Code Point RFC 2474 e RFC 2475) tem sido mais usada. Usando valores numéricos (decimais) você pode setar qualquer valor no sistema antigo ou novo. Para simplificar os valores mais usados para pacotes de voz são: Precedência 5 (RFC 791, obsoleta) tos=160 DSCP EF – Express Forwarding (RFC 2474, sobrepoê a anterior) tos=160 Como você pode notar existe uma compatibilidade da nova RFC com a antiga. Se você setar auto-qos voip em um switch Cisco (que suporte o recurso) ele automáticamente priorizará pacotes com esta marcação nos cabeçalhos. Existe uma excelente explicação dos valores de tos em: http://www.cisco.com/warp/public/105/dscpvalues.html
  • 180. 164 Capítulo 7: O protocolo SIP e o Asterisk 7.4 Configurando um cliente SIP x x x xx x Figura 7.5 SIP Server: Isto significa que clientes SIP (telefones, softones) registram para o servidor Asterisk e configuram sessões SIP com o servidor, chamadas e respostas a chamadas. • Passo 1 – Configurar uma entrada no arquivo sip.conf para cada telefone. • Passo 2 – Configurar o telefone. • Passo 3 – Configurar a extensão no plano de discagem. 7.4.1 Passo 1 – Configurando o sip.conf Telefone Típico [4101] type=friend context=default callerid=Flávio E. Goncalves<8550> host=dynamic canreinvite=yes dtmfmode=info mailbox=1234@default disallow=all allow=ulaw allow=g729 secret=senha deny=0.0.0.0/0.0.0.0 permit=192.168.1.0/255.255.255.0 musicclass=default 7.4.2 Passo 2 Configurando o telefone
  • 181. 7.4 Configurando um cliente SIP | 165 Siga as instruções do seu telefone favorito para configurá-lo. Lembre-se de que nome do usuário, senha, contexto e codec são os parâmetros mais importantes. Exemplo 1: Softfone X-Lite Exemplo 2: Linksys PAP2 7.4.3 Passo 3 – Definir a extensão no arquivo sip.conf Após você definir as contas de clients sip no sip.conf, você está apto à se logar no servidor Asterisk dos clientes e fazer e receber chamadas. Você precisa configurar as extensões em extensions.conf. Exemplo: exten=> _41XX,1, Dial(SIP/${EXTEN},10,t) Se alguém chamar uma extensão iniciando em 41 mais dois dígitos, o cliente sip logado será discado de forma a receber a chamada. 7.4.4 Opções de configuração para os telefones type=friend Sempre é usada para telefones que discam e recebem chamadas. context=default É o contexto usado para receber chamadas deste telefone. Este telefone só poderá ligar para números incluídos neste contexto do plano de discagem. callerid=Flavio E. Goncalves <8550> Você pode configurar um identificador de chamadas para cada telefone o que pode ser muito útil na hora de ler os relatórios de bilhetagem e na identificação do chamador nos displays dos telefones. host=dynamic Para telefones você provavelmente definirá o host como dinâmico permite que o usuário se registre informando o seu endereço IP atual. Você pode informar o parâmetro “ defaultip=a.b.c.d” se desejar que seja possível contactar um telefone mesmo antes dele se registrar. Host=a.b.c.d é usado normalmente apenas para conexão a provedores.
  • 182. 166 Capítulo 7: O protocolo SIP e o Asterisk canreinvite=yes O protocolo SIP tenta conectar os pontos finais diretamente. Entretanto se o Asterisk quiser detectar o DTMF por exemplo ele deverá ficar no meio do fluxo RTP entre os user agents. Vários recursos como transferência funcionam apenas com canreinvite=no. dtmfmode=info O dtmfmode é essencial para que o telefone passe o DTMF necessário a operações como transferência, captura de chamada entre outros. Ele pode ser setado como um dos seguintes parâmetros: dtmfmode=info. Quando configurado desta forma as informações de DTMF são passadas pela sinalização SIP. Este método é definido pela RFC 3265 (eventos de sinalização). Esta RFC define várias formas de passagem de eventos pela sinalização SIP como DTMF e MWI (Indicador de mensagem em espera) por exemplo. dtmfmode=inband. Quando configurado desta forma o DTMF passa como um sinal de audio normal. Só funciona adequadamente com CODECs sem compressão como o G711 (ulaw ou alaw). dtmfmode=rfc2833. Esta rfc permite que os tons DTMF sejam passados de parte a parte usando o protocolo RTP na forma de eventos nomeados. Vários sinais como DTMF, FAX, Linha entre outros. Abaixo a tabela de eventos relacionados à DTMF. Codificação do evento(decimal) _________________________ 0--9 0--9 * 10 # 11 A--D 12--15 Flash 16 Tabela 1 - DTMF named events mailbox=1234@default O comando mailbox permite que você associe uma caixa postal de correio de voz ao telefone. Quando isto é feito o correio de voz envia aos telefones (agentes usuário de uma forma mais genérica) um evento MWI de mensagem em espera. Em muitos telefones isto vai fazer com que se acenda uma luz avisando o usuário de que há mensagens na caixa postal. disallow=all
  • 183. 7.4 Configurando um cliente SIP | 167 O comando disallow=all desabilita todos os codecs. Ele é normalmente seguido pela autorização dos codecs necessários (Ex. allow=ulaw). Em geral é importante controlar que codecs estão em uso limitando-os há apenas os necessários. secret=senha Este parâmetro configura a senha para autenticação. Se você não quiser que as senhas apareçam no arquivo texto pode usar o comando md5secret=”senha criptografada em MD5”. Para gerar a senha em MD5 você pode usar o comando de linha: #echo –n “username:realm:secret” |md5sum Use então o resultado em um comando similar à: md5secret=0b0e5d467890.... Não esqueça do parâmetro –n senão o retonro de carro “n” será incluído no cálculo do MD5. deny=0.0.0.0/0.0.0.0 permit=192.168.1.0/255.255.255.0 Os comandos acima vão negar todos os endereços IP e permitir o registro de telefones apenas da rede local 192.168.1.0/24. musicclass=default O parâmetro acima permite estabelecer que diretório de músicas MP3 será executado para música em espera. As classes são definidas no arquivo musiconhold.conf. Um cuidado é que na definição dos peers este parâmetro pode estar como musiconhold enão musicclass como no exemplo do arquivo sip.conf. Ver bug: http://bugs.digium.com/view.php?id=5521 videosupport=yes/no Este parâmetro habilita chamadas entre dois usuários com capacidade de vídeo. language=br O código de linguagem definido em indications.conf – Define a linguagem para os “prompts” e sinais locais de telefonia.
  • 184. 168 Capítulo 7: O protocolo SIP e o Asterisk rtptimeout=60 Termina as chamadas se não houver atividade RTP por x segundos, quando não estiver em espera (hold). rtpholdtimeout=120 Termina a chamada se não houver atividade RTP quando em espera (hold) (deve ser maior que o rtptimeout). qualify=yes|no ou tempo em milisegundos Envia periodicamente uma mensagem para medir o tempo de resposta do peer. Quando maior que 2000 ms ou o tempo especificado no comando, considera o peer fora de alcance. 7.4.5 Limitações e cuidados com clientes SIP O Asterisk não suporta chamadas SIP sobre TCP ou TLS, apenas sobre UDP. O Asterisk usa a entrada de um fluxo RTP como fonte de sincronização de tempo para enviar o seu fluxo de saída. Se o fluxo de entrada é interrompido devido a supressão de silêncio então a música em espera terá cortes. Em resumo, você não pode usar supressão de silencio em telefones SIP. 7.5 Conectando-se a um provedor SIP. xx xx x x Figura 7.5
  • 185. 7.5 Conectando-se a um provedor SIP. | 169 SIP client: Isto significa que o Asterisk se registra como um cliente para outro servidor SIP e recebe e coloca chamadas para este servidor. A recepção de chamadas é roteada para uma extensão do Asterisk. Para configurar um provedor SIP são necessários três passos: • Passo 1 – Dentro do arquivo sip.conf, na seção [general] colocar uma linha de registro no provedor SIP. • Passo 2 – Criar uma entrada do tipo [peer] para o provedor para simplificar a discagem. • Passo 3 – Colocar uma rota de saída no plano de discagem. 7.5.1 Passo 1: Registrar o provedor (sip.conf) Isto vai permitir que o provedor localize seu Asterisk. Nesta instrução você está dizendo que quer receber qualquer chamada do primeiro provedor na extensão 4100 e do segundo provedor na extensão 8573. NA seção [general] coloque AS LINHAS ABAIXO. register=>621538:password@fwd.fwdnet.net/4100 register=>ip1140623535:password@gvt.com.br/8573 7.5.2 - Passo 2: Configurar o [peer] (sip.conf) Criar uma entrada do tipo [peer] para o provedor para simplificar a discagem (sip.conf). Observe a linha “insecure=very” necessária se você quer receber chamadas do FWD. Se você não colocar esta linha, o Asterisk irá mandar para o seu provedor um pedido de senha (Challenge). Como seu provedor não tem conta no seu Asterisk, a chamada seria rejeitada. Isto acontece com outros provedores como por exemplo a GVT. Segue abaixo um exemplo funcional com a GVT: [gvt] context=entrada type=friend callerid="ip1140623535" <1140623535> dtmfmode=inband canreinvite=no username=ip1140623535 secret=[omitido por segurança] host=gvt.com.br fromuser=ip1140623535 fromdomain=gvt.com.br insecure=invite 7.5.3 Passo 3: Criar uma rota de saída no plano de discagem.
  • 186. 170 Capítulo 7: O protocolo SIP e o Asterisk Neste exemplo, vamos escolher o digito 010 como rota de saída para o FWD. Para discar para o 610000, você deve discar 010610000. (Como se fosse uma nova operadora, “disque ‘10’ para o fwd”). exten=>_010.,1,SetCIDNum(621538}) exten=>_010.,2,SetCIDName(Flavio Goncalves) exten=>_010.,3,Dial(SIP/${EXTEN:3}@gvt) exten=>_010.,4,Playback(invalid) exten=>_010.,5,Hangup 7.5.4 Opções de configuração específicas para provedores Abaixo vamos entrar em detalhes nos parâmetros específicos na conexão à provedores. register=>621538:password@fwd.fwdnet.net/4100 O comando register na seção [general] do arquivo sip.conf é usado para fazer o registro no provedor. Nele é informado o nome e senha do usuário, bem como o provedor e porta UDP. Além disso no final após a “/” é colocado o ramal para receber chamados deste provedor. Técnicamente falando este ramal é colocado no campo “Contact” do pacote SIP de forma que o provedor saiba como chamar o Asterisk. Por default este valor é a extensão s do contexto definido na seção general. Os parâmetros de registro podem ser alterados na seção global usando: registertimeout=20 Tenta novamente o registro a cada 20 segundos (padrão) registerattempts=10 Número de tentativas de registro antes de desistir. Colocando este parâmetro em zero fará o Asterisk tentar para sempre até ele aceitar o registro. CLI>sip show registry O comando SIP show registry permite que você veja se seu Asterisk se registrou corretamente ao seu provedor. username=ip1140623535 É o nome usado na criação do “digest” de authenticação. O “digest” é um valor computado a partir do username, secret e realm (domínio). host=gvt.com.br
  • 187. 7.6 Autenticação das chamadas SIP entrantes. | 171 Host define o host a ser contactado. fromuser=ip1140623535 fromdomain=gvt.com.br Fromuser e Fromdomain são parâmetros as vezes necessários para autenticação em provedores de voz sobre IP. Eles são colocados no campo “From” do pacote SIP. insecure=very Quando você se conecta à um provedor de voz sobre IP e faz uma ligação, o provedor pede de você suas credênciais. No caso inverso, quando o provedor encaminha uma ligação para o Asterisk, este pede autenticação do provedor enviando uma mensagem com código 407 (Proxy Authentication Required). É simples de entender que um provedor não poderá ter a senha de acesso para todos os seus clientes Asterisk. Este comando é usado para evitar que o Asterisk envie o pacote (407 Proxy Authentication Required). Se você usar insecure=invite o Asterisk não pedirá autenticação nas ligações vindas do provedor. Se usar insecure=port, o Asterisk encontrará o [peer] pelo endereço IP não importando a porta. Você pode também combinar os dois com “insecure=invite;port”. 7.6 Autenticação das chamadas SIP entrantes. Figura 7.6
  • 188. 172 Capítulo 7: O protocolo SIP e o Asterisk Quando o Asterisk recebe uma chamada SIP entrante no módulo de canal SIP. Ele segue o fluxo mostrado acima: Três parâmetros da seção [general] que regulam a autenticação são: allowguest=yes/no Este comando controla se um usuário sem um “peer” correspondente pode se autenticar sem um nome e senha. Pode parecer estranho, mas a filosofia do protocolo SIP seria ter uma rede mundialmente endereçável que através de DNS permitisse que qualquer agente-usuário SIP pudesse alcançar qualquer outro agente sem necessidade de autenticação (Se assim fosse não seriam mais necessárias operadoras de telefonia convencional ou VoIP). . insecure=invite;port Já discutido acima, impede que o Asterisk gere uma mensagem “ 407 Proxy Authentication Required”. autocreatepeer=yes/no Este é um dos comandos mais difíceis de se entender e é usado basicamente quando o Asterisk é integrado à um servidor SIP Proxy (Como o SER por exemplo). Se esta opção estiver habilitada, qualquer usuário-agente SIP poderá se registrar com o seu Asterisk PBX como um peer. Esta configuração do “peer” será baseada nas opções globais. O nome do [peer] será baseado na parte usuário do campo “Contact” da URL. Cuidado: Por uma questão de segurança é muito importante colocar o contexto da seção geral para um contexto que não possa ligar para a rede pública, ou um usuário não autenticado poderá fazer ligações externas sem nenhuma restrição e causar um prejuízo considerável na sua fatura. 7.7 Nomenclatura dos canais SIP O formato do nome de um canal SIP usado para uma conexão de saída é: O parâmetro identificador pode ser feito de três partes. SIP/[exten@]peer[:portno] peer: O nome do peer ao qual se conectar. Isto pode ser um dos abaixo: • Um “peer” ou “friend” definido em sip.conf.
  • 189. 7.8 SIP NAT Traversal | 173 • Um endereço IP. • Um nome de domínio. Para nomes de domínio o Asterisk irá primeiro olhar no registro DNS SRV para aquele domínio. portno: A porta UDP a ser usada. Se omitido o Asterisk irá usar 5060. exten: Se definido, então o asterisk irá requisitar ao “peer”que se conecte à extensão “exten” Exemplos: exten=>s,1,Dial(SIP/ipphone) exten=>s,1,Dial(SIP/info@voffice.com.br) exten=>s,1,Dial(SIP/192.168.1.8:5060,20) exten=>s,1,Dial(SIP/8500@sip.com:9876) 7.8 SIP NAT Traversal A tradução de endereços IP (NAT) tem sido usada pela maioria dos provedores de serviço e empresas como uma maneira de contornar os problemas da falta de endereçamento IP. Normalmente as empresas recebem um pequeno bloco de endereços IP que varia normalmente de 1 a 256 endereços “válidos”. Já os usuários domésticos recebem um endereço válido dinâmico nos seus roteadores e usam endereços inválidos atrás destes roteadores. O NAT resolve este problema mapeando os endereços internos para endereços públicos externos. Um endereço IP:Porta interno é mapeado para um endereço IP:Porta externo. Com este mapeamento o roteador sabe como encaminhar de volta um pacote vindo da rede externa. Este mapeamento é valido por um tempo pré-determinado, após o qual na ausência de tráfego é descartado. Existem quatro tipos de NAT. Como definidos • Full Cone • Restricted Cone • Port Restricted Cone • Symmetric Para um dado endereço interno, os três primeiros tipos de NAT mantêm um mapeamento do seu endereço interno que é independente do endereço de destino sendo visto. O quarto tipo de NAT irá alocar um novo mapeamento para cada endereço de destino independente. A menos que
  • 190. 174 Capítulo 7: O protocolo SIP e o Asterisk haja uma tabela de mapeamento estático. O mapeamento que abre quando o primeiro pacote é enviado de um cliente através do NAT pode ser válido apenas por certa quantidade de tempo, (tipicamente alguns minutos), a menos que os pacotes continuem, a ser enviados e recebidos em uma porta IP. 7.8.1 Full Cone (Cone Completo) No caso do “Full Cone”, o mapeamento é bem estabelecido e qualquer um da Internet pública que queira alcançar um cliente atrás do NAT, precisa apenas saber o esquema de mapeamento de forma a mandar pacotes para ele. x x x x x x x x x x x x x x x x x x x x x x x x x x Por exemplo: Um computador atrás de um NAT com IP 10.0.0.1 enviando e recebendo na porta 8000 é mapeado para a porta externa IP no NAT de 200.180.4.168:1234. Qualquer um na Internet pode enviar pacotes para este endereço e porta IP e estes pacotes serão passados para o cliente na máquina esperando em 10.0.0.1:8000. É o caso de Firewalls sem controle de sessão. Normalmente implementado através de filtros de pacotes e é o tipo mais inseguro de Firewall e cada vez menos comum nos dias de hoje.
  • 191. 7.8 SIP NAT Traversal | 175 7.8.2 Restricted Cone (Cone Restrito) No caso de cone restrito, o par IP/Porta externo só é aberto uma vez que o computador interno envie dados para o endereço de destino IP específico. Por exemplo: No caso onde o cliente envia um pacote para um computador externo, o NAT mapeia o cliente 10.0.0.1:8000 para o 200.180.4.168:1234. Assim o computador externo pode enviar pacotes de volta. Entretanto o NAT irá bloquear pacotes vindos de outros computadores externos. Note que neste caso o Firewall tem controle sobre a sessão, esperando pacotes pertencentes à uma sessão, mas uma vez aberto, aquele computador pode iniciar qualquer sessão independente da porta (200.210.1.1:3000 200.210.1.1:3001...). 7.8.3 Port Restricted Cone (Cone restrito por porta) Um NAT do tipo “port restricted” é quase idêntico ao “Restricted Cone”, mas neste caso o NAT irá bloquear todos os pacotes a menos que o cliente tenha previamente enviado um pacote para o IP e porta que está enviando para o NAT. Desta forma, se o cliente enviar para um computador externo para a porta 1010, o NAT apenas irá permitir pacotes de volta se eles vierem de 200.180.4.168 na porta 1010. Neste caso o Firewall tem um controle maior da sessão, só permitindo que pacotes pertencendo àquela sessão possam retornar, ao final da sessão, se o computador de destino resolver enviar pacotes de uma porta diferente (200.210.1.1:10000) estes não serão aceitos.
  • 192. 176 Capítulo 7: O protocolo SIP e o Asterisk 7.8.4 Simétrico x x x x x x x x x x x x x x x x x x x x x x x x x x O último tipo de NAT é o simétrico, ele é diferente dos três primeiros. Um mapeamento específico do IP:Porta para um NAT público IP:Porta é dependente do endereço de destino para o qual o pacote é enviado. Então por exemplo, se um cliente envia de 10.0.0.1:8000 para o computador B, ele pode ser mapeado como 200.180.4.168:1234. Se enviar da mesma porta para um endereço IP diferente, ele é mapeado de forma diferente 200.180.4.168:5678. O computador A e B podem responder apenas para este mapeamento. Se qualquer um tentar enviar para a outra porta mapeada, estes pacotes são descartados como no caso do Cone Restrito. O par externo IP:porta é aberto apenas quando o computador interno envia dados para um destino específico. 7.8.5 Resumo dos tipos de Firewall Precisa enviar dados para abrir a entrada Porta IP bem determinada para retorno Restringe a entrada ao endereço IP:Porta do Destino Full Cone Não Sim Não Restricted Cone Sim Sim Só o IP Port Restricted Cone Sim Sim Sim Simétrico Sim Não Sim 7.9 NAT na passagem da sinalização SIP Existem duas partes de uma chamada baseada em SIP. A primeira é a sinalização, que é um protocolo de mensagens para estabelecer uma chamada. O segundo é realmente o fluxo de mídia. Os pacotes de RTP viajam diretamente entre os dispositivos finais.
  • 193. 7.10 NAT no fluxo de mídia RTP | 177 A sinalização SIP pode atravessar o NAT de uma forma bastante direta, desde que exista um proxy, a um salto de distância do NAT, que receba as mensagens SIP do cliente (Através do NAT) e então retorne as mensagens para o mesmo lugar. O proxy precisa retornar os pacotes de SIP para a mesma porta de onde ele recebeu os pacotes (Não a porta SIP 5060). O SIP tem etiquetas (tags) que dizem ao proxy para fazer isto – A etiqueta recebido diz ao proxy para retornar um pacote para um IP específico e a etiqueta “rport” guarda a porta para onde retornar. A maioria dos proxys ainda não implementa a etiqueta “rport”, e alguns clientes não vão processar as mensagens SIP corretamente. Se estas etiquetas estiverem presentes, pelo menos em princípio o mecanismo existe para atravessar o NAT. Outro modo simples de atravessar o NAT é usar TCP para a sinalização SIP entre o cliente e o proxy. Desde que a conexão TCP é aberta através do NAT diretamente do cliente para o proxy. A sinalização irá proceder sem bloqueio. Novamente, muitos proxies ainda não implementaram ainda a opção TCP e trabalham apenas usando UDP. Note que a sinalização SIP deveria estar apta a atravessar quaisquer dos quatro tipos de NAT se o proxy retornar as mensagens de SIP da mesma porta fonte que ele recebeu a mensagem inicial. A mensagem inicial SIP, enviada para o proxy IP:Port, abre o mapeamento do NAT, e o proxy retorna os pacotes do NAT para o mesmo IP:Porta. Isto é permitido em qualquer cenário de NAT. Registrar um cliente que está atrás de um NAT requer ou um Registrar que possa salvar o IP:Porta na informação de registro baseado na porta e IP que ele vê como fonte da mensagem SIP ou um cliente que saiba do seu endereço mapeado externamente e porta e possa inseri-lo na informação de contato como IP:Porta de forma a receber as mensagens SIP. É preciso tomar cuidado em usar um intervalo de registro menor que o “keepalive” para o mapeamento de NAT. 7.10 NAT no fluxo de mídia RTP O RTP para atravessar um NAT não tem uma solução tão fácil como à sinalização SIP. No caso do RTP, o corpo da mensagem SIP contém informações sobre os pontos finais, necessárias a permitir a comunicação de um com o outro. Esta informação é contida na mensagem SDP. Os dispositivos preenchem esta informação de acordo com o que eles sabem sobre si mesmos. Um cliente situado atrás de um NAT conhece apenas sua porta interna IP:Porta e é isto que ele coloca no corpo SDP da mensagem SIP. Quando o ponto de destino final quer enviar pacotes para o ponto originador, ele irá usar a informação SDP recebida contendo o endereço IP interno do originador e os pacotes nunca vão chegar lá. Aqui vai um exemplo de um “trace” de uma mensagem INVITE de um cliente SIP atrás
  • 194. 178 Capítulo 7: O protocolo SIP e o Asterisk de um NAT como recebida pelo gateway. Existe um proxy no meio do caminho. 001 INVITE sip:12125551212@211.123.66.222 SIP/2.0 002 Via: SIP/2.0/UDP 211.123.66.223:5060;branch=a71b6d57-507c77f2 003 Via: SIP/2.0/UDP 10.0.0.1:5060;received=202.123.211.25;rport=12345 004 From: <sip:2125551000@211.123.66.223>;tag=108bcd14 005 To: sip: 12125551212@211.123.66.222 006 Contact: sip: 2125551000@10.0.0.1 007 Call-ID: 4c88fd1e-62bb-4abf-b620-a75659435b76@10.3.19.6 008 CSeq: 703141 INVITE 009 Content-Length: 138 010 Content-Type: application/sdp 011 User-Agent: HearMe SoftPHONE 012 013 v=0 014 o=deltathree 0 0 IN IP4 10.0.0.1 015 s=deltathree 016 c=IN IP4 10.0.0.1 017 t=0 0 018 m=audio 8000 RTP/AVP 4 019 a=ptime:90 020 a=x-ssrc:00aea3c0 No trace acima, o Endereço IP na linha 003 do cabeçalho SIP é o endereço IP onde o cliente pensa que está (10.0.0.1). Mas o Proxy sabe de que endereço IP ele realmente recebeu o pacote. Então ele adiciona as etiquetas “received”e “rport” com o endereço IP e a porta após o mapeamento do NAT. Estas etiquetas permitem ao proxy encaminhar as mensagens SIP de volta ao cliente via NAT. Mas a informação que é usada de forma a passar os dados de voz (A conexão RTP) é mantida mais embaixo na mensagem nas linhas 014 e 016. O cliente espera receber na porta 8000 (m=) no IP 10.0.0.1 (c=), que é porta que ele vê à si próprio, e como existe um segundo ponto final irá retornar os pacotes. O resultado é que uma vez que a chamada esteja estabelecida (A sinalização SIP passa) o áudio não é recebido. Se o cliente estiver atrás de um dos três primeiros tipos de NAT, então a solução de atravessar o NAT é simples. O cliente deve descobrir como seu IP:Porta aparece para o mundo e então deve colocar esta informação na mensagem SDP ao invés da informação do seu IP:Porta interno. Existem dois métodos para um cliente de determinar o endereço publicamente mapeado para o IP:Porta. O primeiro é perguntar ao roteadro com NAT, o segundo é perguntar a alguém fora do NAT na rede pública. 7.11 Formas de passagem pelo NAT Existem inúmeros mecanismos criados para a passagem pelo NAT. A maioria funciona para os NATs do tipo Full Cone, Restricted Cone e Port Restricted Cone, entretanto apenas o RTP Relay funciona para os NATs do tipo simétrico. Felizmente o Asterisk pode atuar como um RTP Relay usando a opção “canreinvite=no” para aquela extensão no arquivo sip.conf.
  • 195. 7.11 Formas de passagem pelo NAT | 179 Podemos dividir os métodos de passagem de NAT em Near-End-Nat Tarversal (Soluções nos clientes) e Far-End-Nat-Tarversal (Soluções no servidor). Soluções Near-End-Nat-Traversal • UPnP • ALG • STUN • Configuração Manual • ICE Soluções Far-End-Nat-Traversal • Comedia (Conexion Oriented Media) • TURN – Traversal of UDP using Relay NAT 7.11.1 UPnP Um cliente pode perguntar para o NAT como ele está mapeado para um par IP:Porta através de um protocolo chamado Universal Plug and Play. Esta é uma solução que está sendo promovida pela Microsoft (entre outros). O cliente pergunta ao NAT via UPnP que mapeamento ele deve usar se ele quer receber na porta x. O NAT responde com o par IP:Porta que alguém na rede pública deveria usar para alcançar o cliente naquela porta. Muitos fabricantes de dispositivos NAT já incluíram UPnP em seus produtos. Um problema é que o UPnP não vai funcionar no caso de NATs cascateados. 7.11.2 STUN – Simple Traversal of UDP NAT Na ausência de um mecanismo para se comunicar com o dispositivo NAT, o melhor meio para o cliente determinar seu par IP:Porta externo é perguntar ao servidor situado na Internet Pública como ele vê seu endereço. Neste cenário existe um servidor que fica esperando estes pacotes. Quando ele recebe um pacote ele retorna uma mensagem da mesma porta para a fonte do pacote recebido contendo o par IP:porta que ele vê no cabeçalho do pacote enviado. Em todos os casos (todos os 4 casos de NAT), o cliente irá receber um pacote de retorno. O cliente então vai determinar: 1. Se ele está atrás de um NAT (O IP:Porta contido é diferente do par IP:Porta que ele pensa que está) 2. Qual par IP:Porta publico ele deveria usar para colocar na mensagem SDP de forma que o ponto final alcance-o Por exemplo, se o cliente quer ser alcançado em 10.0.0.1:8000, ele irá primeiro enviar uma consulta à probe NAT pela porta 8000. A probe NAT irá realmente receber uma consulta do pacote 200.180.4.168:1234 e
  • 196. 180 Capítulo 7: O protocolo SIP e o Asterisk assim irá responder para o par IP:porta com o pacote contendo 200.180.4.168:1234. O cliente então poderá colocar isto no seu SDP “m=AUDIO 1234” e “c=200.180.4.168”, o cliente continua escutando na porta 10.0.0.1:8000. Isto irá funcionar nas seguintes situações: 1. O cliente deve enviar e receber o RTP na mesma porta. 2. O cliente deve enviar a mensagem SIP logo depois de enviar a consulta para a probe NAT. Se existir um longo atraso o NAT pode ter um timeout. 3. No caso de Restricted Cone e Port Restricted Cone, o cliente deve enviar o pacotes para o ponto final antes que o NAT permita pacotes do ponto final para o cliente. Isto não vai funcionar no caso de NAT simétrico, pois o endereço da probe NAT é diferente daquele do ponto final e deste modo o mapeamento da probe NAT irá ver é diferente daquele que o ponto final usa para enviar pacotes até o cliente naquele par IP:Porta. STUN - Simple Traversal de UDP através de NAT (Travessia simples do UDP sobre o NAT). é um protocolo para configurar o tipo de probe NAT como foi descrito. Ele realmente faz um pouco mais que apenas retornar o par IP:Porta público, ele pode também determinar o tipo de NAT que você está atrás. Clientes que usam o protocolo STUN já existem como o XTEN, por exemplo. Os pedidos de STUN especificam os seguintes parâmetros: RESPONSE-ADDRESS - O servidor STUN irá enviar sua resposta para o par IP:Porta especificado no atributo RESPONSE-ADDRESS. Se este campo não estiver presente, então o servidor envia sua resposta no par IP:Porta de onde ele recebeu o pedido. Se ambas as “flags” Change IP e Change Port não estiverem setadas, o STUN responde do par IP:Porta que o pacote inicial foi enviado. Se o Change IP estiver setado, o servidor responde de um IP diferente e se o Change Port estiver setado então ele responde de uma porta diferente. A resposta do STUN contém as seguintes informações: MAPPED-ADDRESS – O par IP:Porta do cliente como visto no primeiro servidor STUN fora do NAT à receber o pedido. CHANGED-ADDRESS – O Endereço IP que deveria ser a fonte da resposta retornada se o pedido foi feito com o “flag” Change IP setado. SOURCE-ADDRESS – O Par IP:Porta de onde a resposta STUN foi enviada.
  • 197. 7.11 Formas de passagem pelo NAT | 181 Usando uma combinação de diferentes pedidos ao servidor STUN, um cliente pode determinar se ele está na Internet aberta ou se está atrás de um Firewall que bloqueia o UDP ou se ele está atrás de um NAT e de que tipo. 7.11.3 ALG – Aplication Layer Gateway Esta técnica se vale da instalação de um Firewall/NAT melhorado chamado um gateway de camada de aplicação (ALG) que entende a relação entre os fluxos de mídia e as mensagens de sinalização. O ALG processa os fluxos de mídia e sinalização de forma a refletir o endereço público e portas na comunicação para fora do Firewall, em outras palavras toda a tradução necessária é feita no gateway. Roteadores Cisco mais recentes com IOS/Firewall e o Pix Firewall permitem estes recursos. Dica: Vários roteadores ADSL já possuem ALG. Tive a infelicidade de pegar algumas implementações com bugs. Neste caso o sintoma foi que o roteador travou e foi preciso reinicializá-lo. O problema foi corrigido desabilitando o ALG pela interface telnet do roteador. Pela interface Web não havia esta opção. Dois equipamentos com chipset GlobeSpan Virata apresentaram este problema nos nossos laboratórios. 7.11.4 Configuração manual Neste método o cliente é manualmente configurado com os detalhes dos endereços públicos IP e portas que o NAT irá usar para sinalização e mídia. Neste caso o NAT deve ser configurado manualmente com mapeamentos estáticos no roteador. O Asterisk permite ser configurado de forma manual quando está atrás de um NAT. No arquivo sip.conf na seção geral, as instruções: Externip=Endereço IP Externo Localnet=Endereço da Rede Local Interna Permite que quando o Asterisk está enviando pacotes SIP para fora da rede o endereço seja substituído pelo endereço definido no comando Externip. A linha Localnet define quais endereços pertencem à rede local. Todas as redes que não estiverem na faixa definida em localnet são externas. Com isto o Asterisk sabe quando deve substituir os endereços dos cabeçalhos dependendo do peer de destino. No arquivo RTP.CONF é possível definir em que portas RTP o Asterisk vai trabalhar.
  • 198. 182 Capítulo 7: O protocolo SIP e o Asterisk ; RTP Configuration ; [general] ; ; RTP start and RTP end configure start and end addresses ; rtpstart=10000 rtpend=20000 7.11.5 COMEDIA Conexion Oriented Media A solução acima funciona bem (Servidor STUN) para os três primeiros tipos de NAT. O quarto caso (NAT simétrico) não irá permitir este esquema, pois ele tem diferentes mapeamentos dependendo do endereço IP alvo. Desta forma o mapeamento que o NAT designou entre o cliente e a probe NAT é diferente daquele entre o cliente e o gateway. No caso de NAT simétrico o cliente deverá enviar e receber o RTP de volta do mesmo endereço IP. Qualquer conexão RTP entre um ponto final fora do NAT e um dentro do NAT deve ser estabelecido ponto a ponto e assim (Mesmo se uma conexão SIP já foi estabelecida) o ponto final fora do NAT deve esperar até ele receber um pacote de um cliente antes que ele possa saber para onde responder. Isto é conhecido como “Mídia orientada a conexão”. Se for desejado que ambos, os UACs que estão atrás de NATs e os UACs na Internet aberta se comuniquem, então eles devem saber se podem confiar na mensagem SDP que eles recebem na mensagem SIP e quando eles precisam esperar receber um pacote diretamente antes que o cliente abra um canal de volta para a par IP:porta fonte daquele pacote. Uma proposta para informar o ponto final para esperar um pacotes de entrada e adicionar uma linha na mensagem SDP (Vindo do cliente atrás do NAT). a=direction:active Quando o dispositivo lê esta linha, ele entende que o cliente iniciando irá ativamente estabelecer o par IP:Porta para o qual o dispositivo deve retornar o RTP, e que o par IP:Porta encontrado na mensagem SDP deve ser ignorado. A maioria dos clientes SIP não suportam a diretiva “a=”. Até eles suportarem deve existir algum tipo de tradutor no meio do fluxo SIP. 7.11.6 TURN – Traversal using Relay NAT. Se um dispositivo suporta mídia orientada a conexão, então o problema de atravessar um NAT simétrico está resolvido. Dois cenários ainda são problemáticos. 1. Se o ponto final não suporta a diretiva a=direction:active tag.
  • 199. 7.12 Soluções Práticas para o Asterisk | 183 2. Se ambos os pontos finais estão atrás de NATs simétricos. Em qualquer um dos casos, uma solução é ter um Relay de RTP no meio do fluxo entre os pontos finais. O Relay RTP age como um segundo ponto final para o qual os dispositivos reais tentam se comunicar um com o outro. Tipicamente, existiria um servidor no meio do fluxo que vai manipular o SDP de forma a instruir os pontos finais à enviar o RTP para o Relay ao invés de diretamente de um para o outro. O Relay estabeleceria seu próprio mapeamento de uma sessão, guardando o par IP:porta de cada ponto final para onde ele deveria enviar os pacotes RTP. 7.11.7 ICE – Interactivity Connectivity Establishment O ICE está sendo desenvolvido pela IETF no grupo de trabalho MMUSIC e prove um arcabouço para unificar as várias técnicas de travessia do NAT. Isto vai permitir que cliente VoIP atravessem com sucesso uma grande variedade de firewalls que existem entre o usuário remoto e a rede. ICE define uma padronização para os clientes SIP de forma a determinar que tipo de firewall existe entre eles e os servidores e determinar um endereço IP no qual eles possam se comunicar. Usando mecanismos como STUN, TURN, RSIP endereços localmente configurados que vão prover um endereço onde o cliente poderá se comunicar. A grande vantagem do ICE é a uniformização dos métodos de passagem por NAT. O ICE usa um processo interativo onde é feita a descoberta do melhor método a ser usado. 7.12 Soluções Práticas para o Asterisk O mais difícil a respeito do NAT no Asterisk é entender que existem diversas situações de projeto e cada uma deve ser tratada individualmente. Em primeiro lugar vamos tratar como duas soluções separadas. • Asterisk atrás de NAT • Clientes atrás de NAT Obviamente existem diversas situações intermediárias e a coisa se complica pensando que temos diferentes tipos de NAT (Full Cone, Restricted Cone,Port Restricted Cone e Simétrico). Para aumentar a complexidade temos clientes que suportam diferentes tipos de soluções para NAT (TURN, STUN, ICE, ALG). Isto pode tornar o problema realmente complexo. 7.12.1 Parâmetros do Asterisk usados para atravessar NAT
  • 200. 184 Capítulo 7: O protocolo SIP e o Asterisk NAT • nat=yes (pode ser true, t, y, 1 e on) o É a combinação dos modos route + modo rfc3581 • nat=route o O Asterisk irá enviar o áudio para a porta e o ip de onde ele recebeu o áudio ao invés de confiar nas informações contidas nos cabeçalhos SIP e SDP. Isto só vai funcionar se o telefone atrás do NAT enviar e receber o áudio da mesma porta (RTP). • nat=rfc3581 o Este é o padrão, o Asterisk vai adicionar o item “rport” ao cabeçalho SIP informando ao cliente em que porta recebeu o pedido e vai encaminhar o fluxo das mesnagens para o cliente no endereço de onde veio e não no endereço descrito nos cabeçalhos. O cliente neste ponto tem condições de saber seu endereço externo (campo Via received) e agora sua porta externa. Ver rfc3581. • nat=never o Neste caso o Asterisk não vai adicionar o rport na linha VIA do cabeçalho como na RFC3581 QUALIFY Esta opção tem duas funções, manter o NAT aberto e certificar-se que o Asterisk não tente enviar uma chamada para um telefone que está inalcançável. • Qualify=yes o Esta opção usa o valor padrão de 2 segundos. • Qualify=no o Desabilita a checagem do peer • Qualify=x ms o Seta o tempo em ms entre as checagens EXTERNIP Esta é a opção usada dentro da seção [general] do arquivo sip.conf e pode ser colocada ou como um ip ou como um hostname apontando para o endereço externo do seu dispositivo NAT. Ex: externip=200.180.4.168 Você só precisa usar esta opção se seu Asterisk está atrás de NAT tentando se comunicar com dispositivos fora do NAT.
  • 201. 7.12 Soluções Práticas para o Asterisk | 185 LOCALNET Usada dentro da seção [general] do arquivo sip.conf. Indica a rede privada interna onde o Asterisk não vai usar o endereço externo provido pelo parâmetro externip. Ex: localnet=10.1.0.0/255.255.0.0 7.12.2 Cenários do Asterisk com NAT Para simplificar, vamos usar duas situações que são as mais típicas. O Asterisk está atrás de um Firewall sob domínio da área técnica da empresa. Os clientes são externos e não temos domínio sobre a configuração dos firewalls destes clientes Asterisk atrás de NAT Quando o Asterisk está atrás de NAT podemos usar as configurações localnet e externip no arquivo sip.conf além de redirecionar as portas no Firewall. Supondo que o endereço IP externo fosse 200.184.7.1 e que a rede local interna fosse 192.168.1.0/24. Isto ficaria assim: [general] nat=yes externip = 200.84.7.1 localnet = 192.168.1.0/255.255.255.0 Além disso, é preciso redirecionar as portas UDP 5060 e RTP de 10000 à 20000 no Firewall. Se você quiser reduzir esta faixa pode editar o arquivo rtp.conf.
  • 202. 186 Capítulo 7: O protocolo SIP e o Asterisk Cliente atrás de NAT Quando um cliente está atrás de um NAT, normalmente este NAT é dinâmico, principalmente quando em uso doméstico. Com isto, só restam as opções de o cliente suportar STUN ou UPnP para que possa aprender o endereçamento de uma fonte externa ou a partir do roteador respectivamente. Uma outra forma de um cliente atrás de um NAT operar com o Asterisk é o uso de um túnel baseado em PPTP, IPIP ou IPSec, isto pode ser feito através de um roteador (Cisco ou Linux). Quando operar um cliente atrás de um NAT configure STUN no cliente, e coloque os seguintes parâmetros na configuração do cliente no arquivo sip.conf. Os clientes tem de obrigatoriamente de se registrar. nat=yes ; Ignora o cabeçalho VIA e usa o endereço de onde chega o pacote. canreinvite=no ; Força o fluxo de mídia pelo Asterisk. qualify=500 ; Força que um pacote exploratório que mantém o NAT aberto 7.13 Considerações finais sobre o NAT Vários provedores usam soluções do tipo RTP Relay que permitem uma flexibilidade melhor, isto é feito usando o SER (SIP Express Router) e o rtpproxy da PortaOne ou o MediaProxy da ag-projects.de. Apesar de serem flexíveis elas adicionam muita complexidade ao ambiente. Em ambientes corporativos a solução de VPN me parece ser a mais simples e segura. Para provedores de VoIP talvez não haja muita escolha. O uso do IAX também é uma opção para quem quer se livrar dos problemas com NAT.
  • 203. 7.14 Questionário | 187 7.14 Questionário 1. O SIP é um protocolo do tipo texto similar ao ______ e _______. IAX HTTP H323 SMTP 2. O SIP pode ter sessões do tipo: (marque todos que se aplicam) Voz Correio Eletrônico Vídeo Chat Jogos 3. Podemos citar como componentes do SIP o: (marque todos que se aplicam) User Agent Media gateway PSTN Server Proxy Server Registrar Server 4. Antes que um telefone possa receber chamados, ele precisa se ___________. 5. O SIP pode operar em modo PROXY e modo REDIRECT, a diferença entre eles é que no caso do PROXY a sinalização sempre passa pelo computador intermediário (SIP Proxy) enquanto no modo REDIRECT os clientes sinalizam diretamente. Correto Incorreto 6. No modo PROXY o fluxo de mídia e a sinalização passam pelo “SIP proxy” e não diretamente de um cliente para o outro. Correto Incorreto
  • 204. 188 Capítulo 7: O protocolo SIP e o Asterisk 7. O Asterisk atua como um SIP Proxy. Correto Incorreto 8. A opção canreinvite=yes/no é de importância fundamental, pois vai definir se o fluxo de mídia vai passar pelo Asterisk ou não. A afirmação está: Correta Incorreta 9. O Asterisk suporta sem problemas supressão de silêncio em canais SIP. A afirmação está: Correta Incorreta 10. O tipo mais difícil de NAT para transpor é o: Full Cone Restricted Cone Port Restricted Cone Symmetric Esta página foi deixada intencionalmente em branco
  • 205. Recursos básicos do plano de discagem O plano de discagem é sem dúvida a área de configuração do Asterisk mais importante e é a responsável pelo funcionamento da comutação das chamadas. Assim como em uma central convencional você disca 0 (zero) para usar uma linha externa ou disca um ramal dentro da faixa de ramais programados na central para acessar outro terminal no Asterisk para cada número que você disca, é possível programar uma ação e isto é determinado no plano de discagem. O Arquivo que contém o plano de numeração esta localizado em “/etc/asterisk/extensions.conf” e neste capítulo você vai aprender a configurá-lo. 8.1 Objetivos do capítulo Ao final deste capítulo você deve estar apto a: • Estruturar o arquivo extensions.conf em suas seções (general, globals e contextos). • Criar um plano de discagem simples incluindo contextos, extensões e prioridades. • Entender os padrões de extensão e como usá-los. • Saber como definir e usar variáveis, funções e expressões. • Usar as aplicações Dial(), Answer() e Hangup(). • Configurar a recepção de chamadas. • Configurar a discagem de chamadas externas. 8.2 Introdução O plano de discagem é a peça mais importante na configuração do Asterisk e ele é configurado no arquivo /etc/asterisk/extensions.conf. Ele controla como todas as chamadas de entrada e saída são encaminhadas e manuseadas. No arquivo extensions.conf você controla o comportamento de todas as conexões através do seu PABX. 8.3 Estrutura do arquivo extensions.conf O arquivo extensions.conf é separado em seções, a primeira é a seção “general” e ela começa com [general] e é seguida de alguns comandos. Quando você encontrar [globals] a seção general terá terminado e iniciado a seção globals e assim por diante. Estas duas seções são Capítulo 8
  • 206. 190 Capítulo 8: O plano de discagem especiais, as restantes são denominadas contextos e também começam com “[]”. Para alguns esta sintaxe pode parecer estranha, na versão 1.2 existe o conceito de AEL “application extension language” ou linguagem de extensões e aplicações que se assemelham muito as linguagens de programação e pode ser usada ao invés do extensions.conf. Neste livro não abordaremos em detalhe o AEL, visto que sua utilização prática ainda é muito limitada. 8.3.1 Seção [general] No topo do arquivo extensions.conf, você configura algumas configurações gerais na seção com cabeçalho [general]. Aqui estão algumas opções relacionadas ao plano de discagem: • static: Neste estágio, esta opção afeta apenas a operação do comando save dialplan. o valor padrão é “no”, mas o arquivo exemplo do extensions.conf instalado com o Asterisk explicitamente coloca static=yes. • writeprotect: Se as opções writeprotect=no e static=yes estiverem configuradas, então você pode salvar o plano de discagem atual com o comando save dialplan. Definições nas variáveis globais na categoria [globals] permanecem sem modificação. O valor padrão é “no”. • autofallthrough: Este recurso é novo na versão 1.2. Se o autofallthrough estiver configurado para yes, ao final de um conjunto de comandos para uma extensão (após a execução da última prioridade) ele terminará a execução com um BUSY, CONGESTION ou HANGUP dependendo do que o Asterisk achar mais conveniente (é a configuração recomendada). Caso contrário, se o Asterisk não tiver mais nada a processar após a última prioridade, o Asterisk irá aguardar que uma nova extensão seja discada (Este era o comportamento da versão anterior 1.0). • clearglobalvars: Se este recurso estiver carregado, as variáveis globais serão limpas e recarregadas a cada vez que ocorrer uma recarga (reload) do Asterisk. Caso contrário as variáveis vão persistir mesmo que tenham sido deletadas do plano de discagem. É um recurso novo na versão 1.2. • priority jumping: Se você configurá-lo para sim, então as aplicações que suportam saltar prioridades (normalmente n+101) baseado no resultado da operação o farão de forma normal (este comportamento é o compatível com a versão
  • 207. 8.3 Estrutura do arquivo extensions.conf | 191 1.0). Aplicações individuais podem fazer isto passando um argumento “j” como opção. Nota: “save dialplan” irá sobrescrever o seu arquivo extensions.conf com um novo gerado pelo plano de numeração atual. Uma copia de seu arquivo extensions.conf velho não será guardado. Todos os comentários serão perdidos. O arquivo exemplo do Asterisk vem com esta configuração perigosa, writeprotect=no, static=yes 8.3.2 Seção [globals] Em seguida na seção [globals], você pode definir as variáveis globais (ou constantes) e seus valores iniciais. Na verdade as variáveis globais do Asterisk são normalmente usadas como constantes e não variáveis. Elas são usadas para simplificar mudanças futuras na configuração do PABX. O valor atual das variáveis globais pode ser mudado usando o comando Set. O valor da variável global pode ser referenciado, usando a sintaxe: ${nomedavariável}. As variáveis globais não são sensíveis à maiúscula e minúscula. Que extensões devem tocar quando uma chamada chegar ENTRADA=>Zap/3&Zap/4 Quanto tempo deve tocar antes de chegar ao correio de voz RINGTIME=>3 Que arquivo de áudio deve ser tocado como anúncio do correio de voz VMANNOUNCE=>mysounds/my-vm-annouce Definir os canais as quais nossas extensões estão ligadas COZINHA=>Zap/3 SALA =>Zap/4 QUARTO =>Zap/5 Quando nós queremos fazer uma chamada externa que linhas devemos usar A criação destas definições, por si só não tem efeito algum. O Asterisk não sabe por si só o que fazer com estas variáveis. É de sua responsabilidade saber o que fazer com elas no seu plano de discagem.
  • 208. 192 Capítulo 8: O plano de discagem Neste exemplo, as variáveis globais, foram todas escritas com nomes em maiúscula. Nomes de variáveis globais não diferenciam maiúsculas de minúsculas. Elas são colocadas em maiúsculas, por conveniência, para diferenciar das variáveis de canal que normalmente têm maiúsculas e minúsculas. Variáveis globais podem ser configuradas dentro do plano de discagem usando o comando: exten => 4000,1,SetGlobalVar(teste=0) 8.4 Contextos e Extensões Após as seções [general] e [globals], o restante do arquivo extensions.conf é usado na definição do plano de discagem. O plano de discagem consiste de uma coleção de contextos. Cada contexto consiste de uma coleção de extensões. 8.4.1 Introdução a contextos e extensões Um plano de discagem consiste de uma coleção de contextos. Estas definições de contexto são a parte mais importante do arquivo extensions.conf e a parte mais importante da configuração do Asterisk. Um contexto é apenas uma coleção de extensões. Exemplo de diagrama de contextos e extensões. Contexto "default" Extensão Descrição 8580 Flavio 8581 Daniel 8582 Juliano 8583 Verificar o correio 8585 Sala de conferência 0 Telefonista Neste exemplo, que foi dado o nome de “default”, as primeiras três extensões serão associadas a telefones. A quarta extensão (8583) será associada com a aplicação de correio de voz. A quinta extensão (8585) será associada a uma sala de conferência. Finalmente o 0 será associado com o operador. Aqui está outro exemplo de um contexto: Context "menu":
  • 209. 8.4 Contextos e Extensões | 193 Extensão Descrição s Bem vindo a mensagens e instruções 1 Vendas 2 Suporte 3 Contabilidade 9 Diretório # Desligar Neste exemplo de contexto, com o nome de “menu” tem apenas extensões de um dígito. A extensão “s” é a extensão de início, onde o usuário inicia. Esta extensão irá tocar uma mensagem do tipo “Obrigado por discar para nossa empresa”, pressione 1,vendas, 2, suporte, 3, contabilidade, 9 para o diretório da empresa ou # para desligar. Cada opção do menu é de fato uma extensão e poderia ou discar uma extensão real ou fazer algo como enviar quem discou para outro menu. Os contextos podem ser usados para programar um número importante de recursos incluindo: • Segurança: Permitir certas ligações de alguns telefones apenas. • Roteamento: Rotear chamadas baseadas em uma extensão. • Auto-atendente: Receber quem discou e pedir para entrar as extensões. • Menus multicamada: Menus para vendas, suporte, etc. • Autenticação: Pedir por senha para certas extensões. • Callback: Reduzir as tarifas para chamadas de longa distância. • Privacidade: Colocar em lista negra, pessoas as quais você não quer receber ligações. • PBX Multihost: Você pode ter hosts virtuais no seu PABX. • Daytime/Nightime: Você pode variar o comportamento dependendo do horário. • Macros: Criar scripts para funções normalmente usadas. 8.4.2 Como os contextos são usados? Quando o Asterisk recebe uma chamada, de entrada ou de saída, esta chamada pertence a um contexto. Qual contexto a chamada pertence depende de que canal a chamada veio. Quando você configura os canais que você tem no se PABX, uma das coisas que você faz é definir em que
  • 210. 194 Capítulo 8: O plano de discagem contexto uma chamada naquele canal vai ser colocada, usando uma definição como: context=incoming Então a primeira forma em que os contextos são usados é fazer com que o Asterisk se comporte de forma diferente dependendo de onde a chamada esta vindo. Com certeza você vai ter pelo menos um contexto definido. Neste contexto você vai definir o que fazer com a chamada, se vai tocar uma das extensões, entrar no correio de voz ou tocar um anuncio de voz. Se você quer que o Asterisk trate as conexões de suas extensões internas de forma diferente, por exemplo, “poder fazer ddi”, você pode definir que diferentes canais entrem em diferentes contextos. 8.5 Extensões Uma extensão pode ser uma de três tipos, literal, padrão, especial 8.5.1 Literais Uma extensão literal pode ser um número, como o 123, e ele pode também conter símbolos padrão como * e # que aparecem em telefones normais. De forma que 12#89* é uma extensão válida. Alguns teclados de telefone multi - freqüêncial tem teclas especiais A, B,C,D e extensões pode ser definidas com estas letras também. De fato, o nome da extensão pode conter qualquer letra ou número bem como alguns caracteres especiais. Note que muitos telefones VoIP conseguem discar números de extensão que podem ser uma string arbitrária, tais como Escritório no Asterisk. , As extensões levam em consideração minúsculas ou maiúsculas ? Bem, a resposta é sim e não. Elas consideram minúsculas ou maiúsculas no sentido em que, quando o Asterisk está tentando encontrar a extensão que o usuário discou contra as extensões que estão no contexto, a extensão deve bater inclusive considerando maiúsculas e minúsculas. Então se o usuário discar a extensão “ESCRITORIO” usando o seu telefone VoIP, o Asterisk não irá executar os comandos que você definiu para a extensão “Escritório”. Por outro lado o Asterisk não permite que você defina extensões diferentes com o mesmo nome diferindo apenas por maiúscula e minúscula. 8.5.2 Padrões Quando você define as extensões dentro de um contexto, você pode não somente usar números literais, nem nomes alfanuméricos, mas também pode definir extensões que correspondam a conjuntos de números discados usando padrões. Um nome de extensão é um padrão se ele
  • 211. 8.5 Extensões | 195 inicia com um caractere sublinhado “_”. Os seguintes caracteres têm um significado especial: X corresponde a qualquer dígito de 0-9 Z corresponde a qualquer dígito de 1-9 N corresponde a qualquer dígito de 2-9 [1237- 9] corresponde a qualquer dígito ou letra entre chaves (neste exemplo, 1,2,3,7,8,9) . coringa, corresponde a um ou mais caracteres Considere o contexto “routing” ExtensãoExtensãoExtensãoExtensão DescriçãoDescriçãoDescriçãoDescrição _61XX Escritório São Paulo _63XX Escritório Rio de Janeiro _62XX Escritório Salvador _7[1-3]XX Escritório Recife _7[04-9]XX Escritório Curitiba Este contexto, dado o nome “routing”, envia chamadas para vários servidores de acordo com sua extensão. Esta organização decidiu que todas as extensões de telefone terão quatro dígitos. Se um usuário discar uma extensão começando com 61 ou 63, isto será enviado ao escritório de São Paulo; 62 para o escritório do Rio, 71,72 e 73 para Recife e 70, 74, 75, 76, 77, 78, 79 vai para o escritório de Curitiba. Mais exemplos de padrões _NXXXXXX Corresponde a um número de telefone de 7 dígitos _021XXXXXXXXX Corresponde a uma saída pela Embratel 8.5.3 Especiais O Asterisk usa alguns nomes de extensão para propósitos especiais. • i : Invalid (Inválido). • s :Start (Inicio). • h: Hangup (Desligou). • t : Timeout (Estourou o tempo).
  • 212. 196 Capítulo 8: O plano de discagem • T: AbsoluteTimeout (Estouro de tempo absoluto). • o: Operator (Telefonista). • a: Chamado quando o usuário pressiona “*” durante a mensagem inicial do correio de voz. • fax: usado para detecção de fax em canais ZAP. • talk: usado em conjunto com a aplicação BackgroundDetect. Descrições: s: Start. Usado para planos de discagem que entram em um contexto sem outras informações como o identificador de chamada. Mesmo se você conhecesse o identificador de chamada, você ainda tem um lugar para começar. t: Timeout. Usado quando chamadas ficaram inativas após um “prompt” ter sido tocado. Também usado para desligar uma linha que esteja ociosa. T: AbsoluteTimeout. Usado para chamadas que tenham sido desligadas devido ao AbsoluteTimeout() ter sido alcançado. É útil, por exemplo, para tocar uma notificação com Playback(). h: Hangup. Usado para limpar uma chamada. Pode ser usado para tocar uma mensagem de adeus antes de desligar. i: Invalid. Usado quando discando para uma extensão desconhecida no contexto ou entrada desconhecida em um menu da URA (Unidade de Resposta Audível). Os usos destas extensões podem alterar o conteúdo dos seus registros de bilhetagem (CDR – Call Detail Record). Em particular o campo dst não irá conter mais o número discado! Para contornar o problema você pode olhar dentro do Dial() com a opção “g” (“vai no contexto”) e considerar o uso do ResetCDR(w) e/ou NoCdr(). hint: mapeia uma extensão para um canal (usado para a lâmpada de ocupado). No Asterisk, um canal pode estar ocupado ou tocando, mas uma extensão é apenas uma string de números que ativam uma ou mais aplicações. o: Extensão do operador, usado para a saída pressionando 0 no voicemail. 8.5.4 Definindo extensões
  • 213. 8.5 Extensões | 197 Ao contrário de um PABX tradicional, onde as extensões estão associadas com telefones, interfaces, menus e assim por diante, no Asterisk uma extensão é definida como uma lista de comandos a executar. Os comandos são geralmente executados na ordem definida pela sua etiqueta de prioridade, por outro lado, alguns comandos como o “Dial” e o “Gotoif” tem a capacidade de redirecionar para outro lugar baseado em alguma condição. Quando uma extensão é discada, o comando etiquetado com prioridade de 1 é executado, seguido pelo comando com prioridade 2 e assim por diante. Isto ocorre até a chamada ser desligada, ou um comando retornar com código de resultado 1 (indicando falha) ou até nenhum comando de maior prioridade existir ou a chamada ser roteada para uma nova extensão. Em cada contexto você pode definir uma ou mais extensões. Para cada extensão, você define um conjunto de comandos. Para cada comando é dada uma linha separada no seguinte formato: exten=>extension,priority,command(parameters) Extension: Nome da extensão, ou o nome literal da extensão ou um padrão. Você repete exatamente o mesmo nome para cada comando para a extensão Priority: Número interior. Chamá-lo prioridade não é totalmente correto, é apenas o número do comando, usado para numerar os comandos relacionados à uma extensão. O Asterisk irá começar a execução na prioridade 1, se não existir uma linha com prioridade 1, então a extensão não irá bater nenhum número discado. Após executar o comando de prioridade 1, o Asterisk irá executar o comando definido com prioridade 2. Se não existir comando definido com prioridade 2, então o asterisk termina o processamento para esta extensão, mesmo se existir outro comando com prioridade 3 ou mais. Entretanto, alguns comandos, quando executados, fazem o Asterisk pular para uma nova prioridade ao invés de ir para a próxima. Command: Nome do comando (também chamado aplicação) para se executar. Parameters: Os parâmetros dependem do comando. Alguns comandos não têm parâmetros. Exemplo: exten=>123,1,Answer exten=>123,2,Playback(tt-weasels) exten=>123,3,Voicemail(44) exten=>123,4,Hangup
  • 214. 198 Capítulo 8: O plano de discagem Esta é a definição de uma extensão com o nome “123”. Quando uma chamada é feita para a extensão 123, o Asterisk irá responder a chamada ele mesmo, tocar um arquivo de áudio chamado tt-weasels, dar ao usuário a oportunidade de deixar uma mensagem de voz para a caixa 44 e então desligar. Note que o Asterisk não se importa com a ordem em que você coloca as linhas no arquivo extensions.conf. Você pode misturar as linhas em uma ordem diferente como no seguinte exemplo, e isto não diferença porque o Asterisk usa a prioridade de cada linha para determinar a ordem de execução. exten=>123,1,Answer exten=>123,2,Playback(tt-weasels) exten=>123,3,Voicemail(44) exten=>123,4,Hangup Outras opções para definir extensões incluem a opção normalmente chamada de lógica ex-namorada. A lógica irá bater a extensão discada vindo de fora ou de dentro, baseado na identificação de chamada (callerid) da pessoa que está chamando. Por exemplo: exten=>123/100,1,Answer() exten=>123/100,2,Playback(tt-weasels) exten=>123/100,3,Voicemail(123) exten=>123/100,4,Hangup() Isto irá bater na extensão 123 e executar as seguintes opções somente se o identificador de chamada do usuário é 100. Isto também pode ser feito com um padrão ao invés de um literal. exten=>1234/_256NXXXXXX,1,Answer() e assim por diante. Isto irá bater no 1234 se o CallerID é algo começando com 256. Isto é muito útil para evitar que usuários locais liguem para o seu 0800 e você tenha de pagar por isto. Um ponto importante a ser entendido é que cada canal VoIP (SIP, H323) ou PSTN (Zap, ISDN) é configurado dentro de um contexto. Portanto, cada canal pertence à um único contexto. Que extensões ou serviços este canal vai poder usar depender das instruções contidas no plano de discagem para aquele contexto. 8.6 Variáveis No Asterisk as variáveis podem ser globais, variáveis associadas a um canal e variáveis de ambiente. As variáveis podem ser vistas na console
  • 215. 8.6 Variáveis | 199 do Asterisk usando o comando NoOP. Embora o comando não execute nada com a variável, o seu resultado é mostrado na console. O Asterisk pode fazer uso de variáveis globais ou específicas por canal como argumentos para os comandos. Variáveis são referenciadas no plano de discagem (extensions.conf) usando a sintaxe. ${varname} Onde “varname” é o nome da variável. Um nome de variável pode ser uma string alfanumérica iniciando com uma letra. Os nomes de variáveis definidos pelo usuário não são sensíveis a maiúsculas e minúsculas. ${VarName} e ${varname} se referem a mesma variável. Entretanto as variáveis definidas pelo Asterisk diferenciam maiúsculas e minúsculas. ${EXTEN} funciona, mas ${exten} não. Existem três tipos de variáveis: • Variáveis globais • Variáveis de canal • Variáveis de ambiente 8.6.1 Variáveis globais podem ser configuradas na categoria [globals] do arquivo extensions.conf ou usando o comando SetGlobalVar. Uma vez definido, eles podem ser referenciados por qualquer canal à qualquer hora. 8.6.2 Variáveis de canal são configuradas usando o comando SetVar. Cada canal recebe seu próprio espaço de variáveis, de forma que não há chance de colisões entre diferentes chamadas, e a variável é automaticamente destruída quando o canal é desligado. 8.6.3 Variáveis de ambiente fornecem um meio de acessar variáveis de ambiente Unix de dentro do Asterisk. Existe uma lista mais abaixo nesta página. Se você definir uma variável de canal com o mesmo nome de uma variável global (lembre-se variáveis definidas pelo usuário, não se importam com maiúsculas e minúsculas), referências ao nome da variável irão retornar o valor da variável de canal. Variáveis de canal predefinidas existem algumas variáveis de canal configuradas pelo Asterisk que você pode se referir como definições do plano de discagem. Variáveis definidas pelo Asterisk diferenciam caixas alta e baixa. • ${ACCOUNTCODE}:Código de contabilização
  • 216. 200 Capítulo 8: O plano de discagem • ${ANSWEREDTIME}: Horário quando a chamada foi atendida • ${CALLERID}: O identificador da chamada (nome e número) • ${CALLERIDNAME}: O nome do id. da chamada • ${CALLERIDNUM}: O número do id. da chamada • ${CALLINGPRES}: Variável de apresentação PRI Call ID para chamadas de entrada • ${CHANNEL}: Nome do canal atual • ${CONTEXT}: Nome do contexto atual • ${DATETIME}: Data e hora no formato YYYY-MM- DD_HH:MM:SS. • ${DIALEDPEERNAME}: Nome do quem foi chamado ${DIALEDPEERNUMBER}: Número de quem foi chamado. • ${DIALEDTIME}: Hora em que o número foi discado. • ${DIALSTATUS}: Status da chamada. • ${DNID}: Identificador do número discado. • ${EPOCH}: Época no estilo do Unix (Número de segundos desde 1970). • ${EXTEN}: A extensão atual. • ${HANGUPCAUSE}: O último código de término de chamada em um canal Zap conectado à uma interface PRI. • ${INVALID_EXTEN}: A extensão pedida quando redirecionada para a extensão i (inválida). • ${LANGUAGE}: A linguagem atual. • ${MEETMESECS}: O número de segundos que um usuário participou de uma conferência em uma sala de “MeetMe”. • ${PRIORITY}: A prioridade atual. • ${RDNIS}: O atual redirecionamento DNIS, Caller ID que redirecionou a chamada. • ${SIPDOMAIN}: Domínio de destino SIP de uma chamada de entrada. • ${SIP_CODEC}: Usada para SetVar o codec SIP para uma chamada. ${SIPCALLID}: O cabeçalho SIP dialog Call-ID. • ${SIPUSERAGENT}: O cabeçalho SIP user agent. • ${TIMESTAMP}: Date e hora no formato: YYYYMMDD- HHMMSS. • ${TXTCIDNAME}: Resultado da aplicação TXTCIDName. • ${UNIQUEID}: Identificador único da chamada atual. 8.6.5 Variáveis específicas de aplicações Algumas aplicações usam entradas de dados extras e fornecem a saída na forma de variáveis de canal. • ChanIsAvail retorna ${AVAILCHAN}: O primeiro canal disponível.
  • 217. 8.6 Variáveis | 201 • Dial recebe input de ${VXML_URL}: Envia uma url XML para um Cisco 7960. • Dial recebe entrada de ${ALERT_INFO}: Configura a cadência de campainha por telefones Cisco. • Dial retorna ${CAUSECODE}: Se uma discagem falhou, esta é a mensagem de erro. • Dial retorna ${DIALSTATUS}: Texto com o código de status da última tentativa de discagem. • EnumLookup retorna ${ENUM}: O resultado da busca. • MeetMe recebe input de {MEETME_AGI_BACKGROUND}: Um script de AGI para rodar. • MeetMe retorna ${MEETMESECS}: O número de segundos que o usuário esteve na conferência. • Hangup lê a ${PRI_CAUSE} variável para configurar os códigos de retorno PRI. • TXTLookup retorna ${TXTCIDNAME}: O resultado de um DNS lookup. 8.6.6 Variáveis específicas para Macros Quando em um contexto de macro, algumas variáveis adicionais de canal estão disponíveis. • ${ARG1}: O primeiro argumento passado pela macro. • ${ARG2}: O segundo argumento passado pela macro e assim por diante. • ${MACRO_CONTEXT}: O Contexto da extensão que disparou a macro. • ${MACRO_EXTEN}: A extensão que disparou a macro. • ${MACRO_OFFSET}: Configurado por uma macro para influenciar a prioridade de execução ao sair da macro .
  • 218. 202 Capítulo 8: O plano de discagem • ${MACRO_PRIORITY}: A prioridade na extensão onde esta macro foi disparada. 8.6.7 Variáveis de ambiente Você pode acessar variáveis do ambiente Unix da seguinte forma: • ${ENV(nomedavariável)}. • ${ENV(ASTERISK_PROMPT)}: O prompt atual da linha de comando CLI . • ${ENV(RECORDED_FILE)}: O nome do arquivo gravado pela última vez com o comando Record. 8.7 Expressões O uso de expressões pode ser muito útil para a configuração do plano de discagem. As expressões combinam variáveis, valores e operadores para chegar a um resultado. Expressões são usadas para manipular strings, e realizar operações matemáticas e lógicas. Uma expressão segue a sintaxe definida abaixo: $[expressão] Vamos supor que tenhamos uma variável chamada SOMA. E que queremos adicionar um valor a esta variável. $[${SOMA}+100] Quando o Asterisk encontra uma expressão no plano de discagem, ele substitui a expressão inteira com o valor resultante. 8.7.1 Operadores Os seguintes operadores podem ser usados na construção de expressões. Operadores matemáticos • Soma (+) • Subtração(-) • Multiplicação(*) • Divisão(/) • Resto(%) Operadores lógicos
  • 219. 8.8 Funções | 203 • Operador “E” lógico (&) • Operador “OU”lógico (|) • Operadores de comparação (=, >, >=, <,<=,!=) Operador para expressões regulares • Expressão regular (:). Vale a pena explicar um pouco o que é uma expressão regular. Em uma expressão regular comparamos uma string com um padrão, esta comparação pode ser falsa ou verdadeira, dependendo se a string se encaixa no padrão ou não. Expressões regulares são muito comuns em linguagens de scripting como Perl e PHP e são muito usadas para manipular strings. É importante que antes de usar expressões regulares você possa ler algum tutorial, sobre o assunto, vários estão disponíveis na Internet. Explicar detalhadamente as expressões regulares está além do escopo deste livro. Exemplo Você pode usar o comando Set que substitui o antigo comando SetVar (versão 1.09) para testar suas variáveis. Vamos usar a aplicação NoOP() como uma forma de mandar os resultados para a tela da console. exten=1000,1,Set(TESTE=10) exten=1000,2,Set(SOMA=$[${TESTE}*5]) exten=1000,3,NoOP(${SOMA}) 8.8 Funções A partir da versão 1.2 as funções ganharam importância e algumas aplicações estão sendo substituídas por funções. Elas permitem processar as variáveis de uma forma ainda mais avançada que os operadores. Você pode verificar que funções estão disponíveis no Asterisk usando o comando de console: CLI>show functions 8.8.1 Comprimento da String ${LEN(string)} retorna o comprimento da string nomedavariável. Exemplo: exten=>100,1,Set(Fruta=pera) exten=>100,2,NoOp(${LEN(Fruta)}) exten=>100,3,NoOp(${LEN(${Fruta})})
  • 220. 204 Capítulo 8: O plano de discagem O primeiro NoOp deveria mostrar um valor de 5 ( O Comprimento da string “fruta”). A segunda operação NoOp deveria mostrar o valor de 4 (O comprimento da string “pera”). Esta é uma boa maneira de verificar par uma string vazia ou nula. 8.8.2 Substrings ${string:offset:length} offset: ponto de início length: comprimento Retorna uma substring da string, iniciando na posição definida por “offset” e retornando o comprimento de caracteres definido em “length”. Se o offset é negativo, isto é pego da direita para esquerda a partir do fim da string. Se o comprimento é omitido, ou é negativo, então todo o resto da string a partir do ponto de início (offset) é retornado. Exemplos: ${123456789:1}-retorna a string 23456789 ${123456789:-4}-retorna a string 6789 ${123456789:0:3}-retorna a string 123 ${123456789:2:3}-retorna a string 345 ${123456789:-4:3}-retorna a string 678 Exemplos de uso: exten=>_NXX.,1,SetVar(areacode=${EXTEN:0:3}) Pega os primeiros três dígitos da variável ${EXTEN} exten=>_516XXXXXXX,1,Dial(${EXTEN:3}) Pega todos exceto os primeiros três dígitos da ${EXTEN} exten=>100,1,Set(whichVowel=4) exten=>100,2,Set(foo=AEIOU:${whichVowel}:1) Seta ${foo} para uma única letra U 8.8.3 Concatenação de Strings Para concatenar duas strings, simplesmente escreva-as juntas. ${foo}${bar} 555${Onumero}
  • 221. 8.9 O plano de discagem na prática | 205 ${PrefixoLongaDistancia}555${ONumero} 8.9 O plano de discagem na prática Vamos usar os conceitos aprendidos acima para executar várias configurações que são comuns no universo de centrais telefônicas. Desta forma poderemos introduzir várias aplicações dentro de um contexto prático. Cada aplicação será apresentada dentro do primeiro cenário em que ela for necessária. 8.9.1 Discando entre ramais. Para habilitar a discagem entre ramais podemos usar o conceito da variável de canal {EXTEN} que significa a extensão discada. Por exemplo se a faixa de ramais da central vai de 4000 à 4999 e todos os ramais são SIP podemos usar seguinte comando abaixo: exten=_4XXX,1,Dial(SIP/${EXTEN}) O comando Dial() usado acima possui a seguinte sintaxe: ;Discando um canal Dial(tipo/identificador,timeout,opções, URL) ;Discagem para múltiplos canais Dial(tipo1/identificar1&tipo2/identificar2/tipon/identificadorn,timeout ,opções, URL Parâmetros: Tipo: especifica o tipo de canal. Dever ser um dos canais registrados como “Zap”, “SIP”, “IAX2”e assim por diante. Identificador: especifica o número de telefone à ser discado neste canal. O formato de “número de telefone” depende do canal e pode conter parâmetros adicionais (Ex. um toque de campainha personalizado). Se você desejar especificar mais de um canal para que o comando Dial tente – lembre-se que ele irá discar todos simultaneamente – Separe-os com o símbolo &. Timeout: Este parâmetro é opcional. Se não for especificado, o comando Dial irá esperar indefinidamente. Opções: Este parâmetro, que é opcional, é uma string contendo zero ou mais de uma das seguintes “flags”.
  • 222. 206 Capítulo 8: O plano de discagem • A(x): Toca um anuncio (x.gsm) para a pessoa chamada. • C: Reseta o CDR (Registros de Bilhetagem). Isto é como usar o comando NoCDR. • d: Permite que uma extensão de um dígito seja discada enquanto a outra parte não atender ao chamado. Isto permite que você salte para uma outra prioridade no meio da ligação. • D(dígitos): Após a parte chamada responder, envia dígitos como um fluxo de DTMF, então conecta a chamada ao canal originador. • f: Força o callerid a ser configurado como uma extensão da linha que esta fazendo ou redirecionando a chamada. Por exemplo, algumas operadoras não permitem callerids de outras extensões que aquelas que estão designadas para você. • g: Quando a pessoa chamada desliga, sai para executar mais comandos no contexto atual. • G(contexto^extensão^prioridade): Se uma chamada é atendida, este comando transfere ambas as ligações para um contexto e extensão específicos. A parte originadora é transferida para a prioridade x e a parte chamada para a prioridade x+1. Isto permite ao plano de discagem distinguir entre as pernas de origem e destino da chamada (versão 1.2). • h: Permite ao usuário chamado desligar discando *. • H: Permite ao usuário originador desligar discando *. • j: Salta n+101 prioridades de todos os canais requisitados estiverem ocupados. (comportamento padrão da versão 1.0). é um recurso novo da versão 1.2. • L(x[:y][:z]): Limita a chamada à ‘x’ ms, aviando quando restam ‘y’ ms, repetidos à cada ‘z’ ms). Apenas ‘x’ é necessário. As seguintes variáveis especiais são opcionais para limitar as chamadas . o LIMIT_PLAYAUDIO_CALLER – yes|no (default yes) – Toca o som para o originador. o LIMIT_PLAYAUDIO_CALLEE – yes|no (default yes) – Toca o som para o que foi chamado. o LIMIT_TIMEOUT_FILE – Arquivo para tocar quando o tempo estoura. o LIMIT_CONNECT_FILE – Arquivo à tocar quando a chamada inicia. o LIMIT_WARNING_FILE – Arquivo para tocar como aviso se ‘y’ está definido. Se LIMIT_WARNING_FILE não estiver definido, então uma macro de som especial para falar automaticamente quanto tempo resta (“Você tem [XX] minutos [YY] segundos”). • m: Provê música em espera para o originador até que o usuário chamado responda. Isto é mutuamente exclusivo com a opção r.
  • 223. 8.9 O plano de discagem na prática | 207 • M(x): Executa a macro(x) na conexão da chamada. • P(x): Usa o PrivacyManager, usando o X como banco de dados. • r: Gera um tom de campainha para a origem, não passando nenhum áudio de canal chamado até alguém responder. • S(n): Desliga a chamada n segundos após a pessoa chamada atender. • t: permite ao usuário chamado transferir a chamada. • T: permite ao usuário de origem transferir a chamada. • o: restaura o comportamento da identificação de chamadas do Asterisk 1.0 (enviar o identificador de chamada original), no Asterisk 1.2 (envia este número de extensão). • w: Permite ao usuário de destino iniciar a gravação pressionando *1 ou o que estiver definido no arquivo features.conf (1.2). Requer o seguinte comando, Set(DYNAMIC_FEATURES=automon) • W: Permite a parte que originou a chamada iniciar a gravação após pressionar *1 ou o que estiver definido em features.conf. (1.2). Requer o seguinte comando, Set(DYNAMIC_FEATURES=automon) O parâmetro opcional URL irá também ser enviado à parte chamada quando da conexão com sucesso. Se a tecnologia de canal suportar o envio de URLs desta forma. Outro exemplo do comando Dial: exten=_4XXX,1,Dial(SIP/${EXTEN},20,tTm) No exemplo acima, o comando Dial irá discar o canal SIP correspondente a extensão. A origem e o destino poderão transferir (tT) e se ouvirá música em espera ao invés do tom de campainha na discagem. 8.9.2 Discando para um destino externo. Para discar uma rota externa (dentro da rede pública de telefonia PSTN) normalmente se usa no Brasil o número 0. Em alguns lugares o número 9 é usado para discagem externa. Para sair para a rede pública é necessário um canal Zapata (analógico ou digital ISDN), unicall (digital R2) ou sip (provedor de voz sobre IP). exten=_0ZXXXXXXX,1,Dial(Zap/1/${EXTEN:1},20,tT) O comando acima permite a discagem para um número local (O Z não permite a discagem de um segundo 0). Observe que a ligação poderá sair apenas pelo primeiro canal da placa zaptel. Se houverem mais canais
  • 224. 208 Capítulo 8: O plano de discagem disponíveis e o primeiro canal estiver ocupado a ligação não se completará. Observe também a expressão ${EXTEN:1} que é igual ao número discado menos o primeiro dígito. Se colocássemos o comando como abaixo: exten=_0ZXXXXXXX,1,Dial(Zap/g1/${EXTEN:1},20,tT) O parâmetro “g1” busca o grupo de canais 1 permitindo assim o uso de todos os canais. Usando: exten=_0ZZXXZXXXXXXX,1,Dial(Zap/g1/${EXTEN:1},20,tT) O usuário poderia fazer um interurbano dentro do país. 8.9.3 Discando 0 para pegar uma linha externa. Se você não têm nenhuma restrição em relação ao que o usuário pode discar você pode simplesmente dar ao usuário o tom de linha externo. exten=0,1,Dial(Zap/g1,20,tT) 8.9.4 Forçando uma única operadora Usando um pouco os conceitos de concatenação e substrings é possível forçar uma operadora quando da execução de um DDD. Se eu quisesse forçar uma fictícia operadora nacional (código 55). exten=_0ZZ.,1,Dial(Zap/g1/055{EXTEN:3},20,tT) Observe que neste exemplo eu usei um novo conceito, o padrão “.” (ponto) que permite um número variável de dígitos (alguns números no Brasil ainda possuem 7 dígitos). 8.9.5 Recebendo uma chamada na telefonista. Supondo que o ramal da telefonia seja um telefone SIP de número 4000 e que a ligação esteja sendo recebida em um canal do tipo FXO com o contexto configurado para “entrada” (configurado no Zapata.conf por exemplo). Neste caso a ligação será processada na extensão especial “s” já que um número de identificação do destino (ramal) não pode ser fornecido. [entrada] exten = s,1,Answer() exten = s,2,Dial(SIP/4000,115,tT)
  • 225. 8.9 O plano de discagem na prática | 209 exten = s,3,Hangup() 8.9.6 Recebendo uma ligação com DDR Se você possui uma linha digital (E1 com sinalização RDSI (ISDN) ou R2) você pode usar um sistema conhecido como discagem direta ao ramal que normalmente dispensa a telefonista. Com este sistema a operador passa os últimos quatro números do telefone para sua central. Suponha que sua faixa de DDR de 4830258550 até 4830258599. A configuração ficaria assim: [entrada] exten => _85[5-9]X,1,Answer() exten => _85[5-9]X,2,Dial(SIP/${EXTEN},15,tT) exten => _85[5-9]X,3,Hangup() 8.9.7 Tocando várias extensões Frequentemente é desejado que uma dada extensão, em primeiro lugar toque um telefone, e então se não existir resposta, toque outro telefone (ou conjunto de telefones). exten => 9,1,Dial(Zap/1,15,tT) exten => 9,2,Dial(Zap/1&Zap/2&Zap/3,15) exten => 9,2,Hangup() Neste exemplo, quando alguém discar 9 para a telefonista, primeiro é tentado o canal Zap/1 que é o telefone da recepcionista. (Se o canal estiver ocupado ou não responder após 15 segundos, tentamos tocar um grupo de telefones, incluindo o da telefonista) por mais 15 segundos. 8.9.8 Evitando o telemarketing exten => 100/,1,Zapateller exten => 100,1,Wait(0) exten => 100,2,Dial(Zap/1) Neste exemplo, se uma chamada é recebida sem identificação da chamada, então é executada a aplicação Zapateller (Ela toca um tom familiar especial, aquele que você ouve quando chama um número que não está em serviço, frequentemente fazendo com que discadores automáticos, ‘normalmente usados em telemarketing’ desconectem). Se o identificador de chamados CallerID for fornecido, então o aplicativo .Wait. é executado por 0 segundos (em outras palavras não faz nada). Em qualquer caso, o canal Zap/1 toca então indefinidamente (Sem timeout). 8.9.9 Roteamento pelo originador da chamada
  • 226. 210 Capítulo 8: O plano de discagem Neste exemplo, já conhecido como extensão Ante ex-namorada, mostra como o Asterisk pode rotear baseado não somente no número de quem foi chamado, mas também no número de quem discou. exten => 8590/482518888,1,Congestion exten => 8590,1,Dial(Zap/1,20) exten => 8590,2,Voicemail(u8590) exten => 8590,102,Voicemail(b8590) Neste exemplo, feito com base no exemplo anterior, foi adicionada uma regra especial, onde se o originador é 482518888 (roteamento pelo callerid é indicado colocando um ./. e o identificador da chamada) ele recebe imediatamente o tom de ocupado. Outros origina dores são atendidos normalmente. Um exemplo mais comum de roteamento pelo identificador da chamada é: 8.9.10 Usando variáveis no plano de discagem O Asterisk pode fazer uso de variáveis globais e de canal para argumentos de determinadas aplicações. Variáveis são expressas no plano de discagem usando ${teste} onde .teste. é o nome da variável. Uma variável pode ser qualquer string alfanumérica começando com uma letra, mas existem algumas variáveis com significados especiais com já visto anteriormente. Considere o seguinte exemplo: [globals] Flavio => Zap/1 Daniel => Zap/2&SIP/pingtel Ana => Zap/3 Cristiano => Zap/4 [mainmenu] exten => 1,1,Dial(${Daniel}&${Flavio}) exten => 2,1,Dial(${Ana}&${Cristiano}) exten => 3,1,Dial(${Ana}&${Flavio}) Organizando o plano de discagem desta forma torna fácil a mudança de interfaces físicas para qualquer usuário em particular. Isto muda todas as referências no plano de discagem instantaneamente. 8.10 O estilo da versão 1.2 Vários novos recursos se tornaram disponíveis a partir da versão 1.2. Uma das principais modificações foi o fim do salto de 101 posições. Os planos de discagem da versão 1.2 se caracterizam principalmente pelo uso da prioridade n (próximo) e pelo uso de etiquetas (labels) nas prioridades. Veja o exemplo abaixo de instrução dial:
  • 227. 8.11 Criando um plano de discagem simples | 211 exten=2000,1,Dial(SIP/2000) exten=2000,n,goto(${DIALSTATUS}) exten=2000,n,hangup() exten=2000,n(BUSY),voicemail(b2000) exten=2000,n,hangup exten=2000,n(NOANSWER),voicemail(u2000) exten=2000,n,hangup exten=2000,n(CHANUNAVAILABLE),hangup exten=2000,n(CANCEL),hangup exten=2000,n(CONGESTION),hangup Você pode observar acima diversas construções novas. Em primeiro lugar surge a prioridade “n” de next (próximo), ela permite que você não tenha de ficar numerando o seu plano de discagem. Em segundo lugar você pode observer as etiquetas (labels). Elas permitem marcar um ponto no plano de discagem e por fim o comando “goto” salta para as etiquetas de acordo com o retorno da variável ${DIALSTATUS}. Você pode observar que os resultados da variável ${DIALSTATUS} permitem um controle muita mais apurado do estado da chamada. Na versão 1.2 você pode usar também a variável ${HANGUPCAUSE} que permite retornar as causas de conexão de acordo com o protocolo q.931 usado em canais ISDN. 8.11 Criando um plano de discagem simples A idéia desta seção é mostrar como poderia ser criado o plano de discagem no arquivo /etc/asterisk/extensions.conf em duas situações bastante comuns. 8.11.1 Central de quatro portas FXO e 16 ramais SIP. Vamos supor que se fosse construir um PABX com quatro portas analógicas e 16 telefones IP SIP. Consideramos para o exemplo abaixo: • Instalada placa TDM400P no PC rodando Asterisk • zaptel.conf configurado corretamente • zapata.conf configurado corretamente • sip.conf configurado corretamente • Grupo de canais = 1 (group=1 no zapata.conf) • Contexto das FXO = entrada (context=entrada no zapata.conf) • Contexto dos canais SIP = ramais • Numeração dos ramais de 20 à 35 • Telefonista no ramal 20 ou discando 9 ;Recepção de chamadas na telefonista [entrada] exten=s,1,Answer()
  • 228. 212 Capítulo 8: O plano de discagem exten=s,2,Dial(SIP/20,20,tT) exten=s,3,Hangup() [ramais] ;discagem para outros ramais exten=_[2-3]X,1,Dial(SIP/${EXTEN},20,tT) exten=_[2-3]X,2,Hangup() ;ligação externa exten=0,1,Dial(Zap/g1,20,tT) ;ligação para telefonista exten=9,1,Dial(SIP/20,20,tT) 8.11.2 Central com um E1 de 15 canais e 50 ramais SIP Vamos supor que se fosse construir um PABX com quinze canais digitais R2 e 50 telefones IP SIP. Consideramos para o exemplo abaixo: • Instalada placa TE110P no PC rodando Asterisk • zaptel.conf configurado corretamente • unicall.conf configurado corretamente • sip.conf configurado corretamente • Grupo de canais = 1 (group=1 no zapata.conf) • Contexto do R2 = entrada (context=entrada no unicall.conf) • Contexto dos canais SIP = ramais • Numeração dos ramais de 4000 à 4049 • Telefonista no ramal 4000 ou discando 9 • DDR habilitado ;Recepção de chamadas na telefonista [entrada] exten=_40[0-4]X,1,Answer() exten=_40[0-4]X,2,Dial(SIP/${EXTEN},20,tT) exten=_40[0-4]X,3,Hangup() [ramais] ;discagem para outros ramais exten=_40[0-4]X,1,Dial(SIP/${EXTEN},20,tT) exten=_40[0-4]X,2,Hangup() ;ligação externa exten=_0.,1,Dial(Unicall/g1/${EXTEN:1},20,tT ;ligação para telefonista exten=9,1,Dial(SIP/4000,20,tT) 8.12 Sumário Neste capítulo você aprendeu que o plano de discagem é a peça principal de configuração do Asterisk. Ele é formado de contextos extensões e prioridades. Você aprendeu a interligar dois aparelhos de PABX usando o comando Switch. Aprendeu a usar variáveis do tipo global de canal e de
  • 229. 8.13 Questionário | 213 ambiente. Entendei como funciono o processamento das extensões e o sistema de inclusão de contextos. Aprendeu a criar macros para simplificar o trabalho de configurar as extensões. E por fim entendeu como funcionam e para o que servem as extensões padrões e as prioridades. 8.13 Questionário 1. Na configuração da seção [general] o valor padrão da opção writeprotect=no. Sendo assim se você emitir o comando save dialplan na linha de comando CLI>. (Marque todas que se aplicam). O Asterisk irá sobrescrever o extensions.conf com a configuração atual. Todos os comentários serão perdidos. Será feito um backup de extensions.conf em extensions.bak. A opção static=yes deve estar configurada para pode salvar o plano de discagem. 2. Normalmente as variáveis globais vão estar escritas em maiúsculas enquanto as variáveis de canal estarão começando com maiúscula e restante em minúsculas. Isto não é obrigatório, mas facilita a leitura. Verdadeiro Falso 3. E extensão ‘s’ é usada como extensão de início dentro de um contexto, ela é normalmente usada nos seguintes casos. Na entrada de uma chamada sem CallerID Como entrada de um menu chamado pelo comando Background(). Na entrada de uma chamada com CallerID Como entrada de um contexto que foi direcionado pelo Goto(). 4. Cite quatro situações onde contextos poderiam ser utilizados: 5. Para usar uma variável no plano de discagem no Asterisk você deve usar o seguinte formato: $[varname] {varname} $(varname) ${varname}
  • 230. 214 Capítulo 8: O plano de discagem 6. As variáveis disponíveis no Asterisk são: (Escolha 3) Constantes Variáveis públicas Variáveis de ambiente Variáveis globais Variáveis privadas Variáveis de canal 7. Para obter o comprimento de uma string você pode usar a função __________. 8. Para concatenar strings basta colocar uma do lado da outra como no exemplo abaixo. A afirmação está: ${foo}${bar} 555${Onumero} ${PrefixoLongaDistancia}555${ONumero} Correta Incorreta 9. Supondo que você tenha uma central telefônica analógica. Coloque no espaço abaixo os comandos necessários para direcionar a recepção das chamadas para uma telefonista no ramal SIP/4000. Se o ramal SIP/4000 não atender, o sistema deve direcionar depois de 15 segundos para os ramais SIP/4000 e SIP/4001 simultaneamente. 10. Supondo que você tenha um central telefônica digital. Coloque no espaço abaixo os comandos necessários (extensions.conf) para permitir a discagem externa apenas para números DDD no contexto [ramais]. Coloque também os comandos necessários para forçar a discagem pela operadora 55 desconsiderando a operadora escolhida pelo usuário.
  • 231. Recursos avançados do plano de discagem Agora que você já aprendeu o básico do plano de discagem, vamos sofisticar nossa configuração com novos comandos e recursos. 9.1 Objetivos Ao final deste capítulo, o leitor deverá estar apto a: • Limitar ligações externas usando o conceito de inclusão de contextos. • Alterar a prioridade de como o Asterisk encontra uma extensão. • Usar o conceito de Macros para evitar a digitação repetitiva de comandos. • Configurar um menu de URA para recepção de chamadas. • Programar siga-me incondicional e siga-me se ocupado usando a base de dados do Asterisk AstDB. • Usar contextos baseados em horários e o comando gotoiftime() para criar mensagens fora do horário de expediente. • Programar o recurso de lista negra de telefones que não devem ser atendidos. • Programar uma central mais sofisticada com menu de URA, siga-me e siga-me incondicional, restrição de DDD e DDI, autenticação dos usuários e lista negra. • Entender os principais passos na configuração de um PABX baseado em Asterisk. • Usar o conceito de Switches para passar ligações para outro servidor Asterisk. 9.2 Inclusão de contextos Um contexto de extensões pode incluir o conteúdo de outro. Por exemplo, considere os seguintes contextos. Contexto default Extensão Descrição 4101 João da Silva 4102 Jose da Silva 0 Telefonista Contexto local Extensão Descrição _9NXXXXXX Chamadas locais Capítulo 9
  • 232. 216 Capítulo 9: Configurando um PABX simples include=> "default" Contexto longa distância Extensão Descrição _91NXXNXXXXXX Chamadas de longa distância include=> "local" Aqui nós definimos três extensões: O contexto default permite discar três extensões: João, José e a telefonista. O contexto local tem um padrão de extensões para permitir a discagem de números de sete dígitos (chamadas locais). O contexto longa distância tem um padrão de extensões para permitir uma discagem de longa distância, e ele também inclui o contexto “local”, deste modo permitindo ao usuário fazer chamadas locais e também discar as extensões de João, José ou a telefonista. Usando contextos de extensão você pode cuidadosamente controlar quem tem acesso aos serviços de discagem Se mais de um padrão corresponder ao número discado, o Asterisk pode não usar o que você está esperando. Veja a seção, correspondente a ordem de busca das extensões do asterisk. Quando o Asterisk recebe uma chamada de entrada em um canal, o Asterisk olha no contexto definido pelo canal por comandos dizendo ao Asterisk o que ele deveria fazer. O contexto define diferentes conjuntos de comandos dependendo de que extensão o usuário discou. Por exemplo, o contexto pode prover um conjunto de comandos para definir o que fazer se o usuário discou “123”e outro conjunto de comandos se o usuário discou “9” e outro se o usuário discou qualquer número iniciando com “555”. Para cada contexto, você deve definir uma ou mais extensões. O Asterisk as usa para comparar contra o número discado. Para cada extensão, você diz ao Asterisk o que fazer listando um conjunto de comandos. As duas regras de ouro sobre contextos: Uma extensão só pode ligar para números que estão dentro mesmo contexto. O contexto de uma ligação é definido pelo canal de entrada da ligação (zapata.conf, iax.conf, sip.conf). 9.2.1 Limitando a discagem para números DDD e DDI
  • 233. 9.3 Como o plano de discagem encontra a extensão | 217 Você pode observar nas linhas abaixo que temos quatro contextos. Você pode configurar o contexto de um telefone SIP usando a instrução “context=” na definição do telefone no arquivo sip.conf. Se você definir o contexto como “ramais” o usuário só poderá discar para outros ramais. Se definir “local” o usuário poderá discar para os ramais e para números locais porque o contexto ramais está incluído no contexto local. As instruções à frente [DDD] e [DDI] complementam o conceito. [ramais] exten => _4XXX,1,Dial(SIP/${EXTEN}) exten => _4XXX,2,Congestion() [local] ignorepat => 0 exten => 0,1,Dial(Zap/g2/) exten => 0,2,Congestion() include => ramais [DDD] ignorepat =>0 exten => _00XXXXXXXXXX.,1,Dial(Zap/g2/${EXTEN:1}) exten => _00XXXXXXXXXX.,2,Congestion() include => local [DDI] ignorepat => 0 exten => _00.,1,Dial(Zap/g2/${EXTEN:1}) exten => _00.,2,Congestion() include => DDD Sempre é bom manter em um PABX novo a mesma experiência que em um PABX anterior. Quando você disca 0 no seu PABX atual, ele dá o tom da linha externa. Quando você disca 0 no Asterisk, ele fica mudo esperando você discar todo o resto. Para resolver isto tem um comando muito útil, a instrução ignorepat. A linha ignorepat instrui os canais do Asterisk à não tirar o tom de discagem enquanto aquele padrão está sendo discado, de forma que mesmo após discar 0, eles ainda recebe o tom de discagem como se tivesse pegado uma linha externa. 9.3 Como o plano de discagem encontra a extensão A discagem “encontra enquanto disca” ocorre em duas situações: • Menus da unidade de resposta audível. Algo como disque 1 para..., 2 para .... • Aparelhos telefônicos padrão conectados por interfaces FXS. Esta é uma situação onde você levanta o telefone, recebe o tom de discagem e começa a discar.
  • 234. 218 Capítulo 9: Configurando um PABX simples O que é o “encontra enquanto disca”? Considere uma linha telefônica tradicional conectada na companhia telefônica. Quando você levanta o gancho e começa a discar, cada digito é enviado e processado imediatamente, (“encontra enquanto disca”). Em contraste, considere um telefone celular, você digita o número de telefone e ao final pressiona o botão “envia” e o telefone envia tudo de uma vez. Uma vez que a chamada tenha completado, ambos os telefones funcionam da mesma forma. Se por exemplo, você disca para uma companhia e é recebido pelo sistema de correio de voz, quaisquer dígitos que você disque, seja usando um telefone celular ou um comum são enviados à medida que você disca. Para o Asterisk, o estilo “todo de uma vez” de discar é mais fácil de processar: O Asterisk só verifica se o número discado bate com qualquer padrão de extensão no contexto atual do plano de discagem. O estilo “encontra enquanto disca” é um pouco mais difícil porque não está claro quando você vai terminar a discagem. De um lado você não quer que o Asterisk fique esperando; você quer que ele processe o número o mais rápido possível, por outro lado o Asterisk tem de esperar se algum dígito adicional irá afetar como ele gerencia sua chamada. Entender como o “encontra enquanto você disca” funciona, vai ajudar a decidir como alocar seus números de extensão e como definir os padrões de extensão usados. 9.3.1 Processo “encontra enquanto você disca”. Quando o Asterisk está tendo de processar o número discado, a primeira coisa que o Asterisk considera é: Quando você teclar outro dígito, existirão padrões de extensão que poderiam bater com o número? O Asterisk considera o número que você discou até o momento e pesquisa os padrões de extensão definidos naquele contexto. Se a resposta à questão é sim, então o Asterisk vai esperar para ver se você vai teclar outro dígito, mesmo se existir um número de telefone completo que corresponda ao que você já digitou. Por exemplo, vamos dizer que você tenha: exten=>123,1,DoSomething(...) exten=>_XXX.,1,DoSomethingElse(...) Se você digitou 123, o Asterisk irá esperar para ver se você vai digitar outro dígito, porque não está claro que você quer a extensão 123. Por
  • 235. 9.3 Como o plano de discagem encontra a extensão | 219 exemplo, a extensão 123999, poderia corresponder ao segundo padrão definido. O Asterisk irá verificar todos os padrões de extensão definidos para o contexto atual. Se existir pelo menos um padrão possível, que possa ocorrer caso você tecle um novo dígito, o Asterisk irá esperar. Quanto tempo o Asterisk irá esperar? Vai depender de dois fatores. Primeiro, se é uma nova chamada de entrada ou uma conexão estabelecida. Novas chamadas de entrada são aquelas em que o Asterisk não iniciou o processamento de quaisquer comandos do plano de discagem. Para canais Zap, isto significa que alguém levantou o gancho e começou a discar e o Asterisk está processando cada dígito na medida em que ele é discado. Para novas chamadas, o segundo fator que afeta quanto tempo o Asterisk espera por mais dígitos antes de desistir é o tipo de canal de onde a chamada esta vindo. Cada tipo de canal determina seu próprio período de timeout. Um canal Zap tem um tempo fixo de 3 segundos e isto não pode ser mudado a não ser modificando o código fonte e re-compilando o módulo Zap. Conexões estabelecidas são aquelas onde o Asterisk já fez a conexão inicial, foi para a extensão (mesmo que a extensão s), iniciou o processamento de comandos e ficou sem comandos para processar e está esperando agora que algo seja discado. Tipicamente, um dos comandos que o Asterisk poderia ter executado é o comando Background para tocar uma mensagem gravada, apresentando um menu de URA e o Asterisk está esperando que seja discada a escolha do menu. Para conexões estabelecidas, o fator afetando o período de timeout é o valor DigitTimeout. O valor padrão de digittimeout é de 5 segundos, mas isto pode ser mudado usando o comando de mesmo nome. O que o Asterisk faz em seguida Se o asterisk esperou, mas não recebeu nenhum dígito no período de timeout, ou o Asterisk não encontrou quaisquer padrões de extensão que, se você discasse mais dígitos, poderia bater com seu número. E então o Asterisk vai considerar a questão: o número bate com qualquer extensão no contexto atual? Sim: Pula para a primeira extensão que bater. Se mais de uma extensão bater, o asterisk pula para a primeira que ele encontrar. O Asterisk não considera os padrões de extensão na ordem em que você os define, de forma que a extensão encontrada pode não ser a que você deseja.
  • 236. 220 Capítulo 9: Configurando um PABX simples Não: Se o número que você discou é inválido no contexto atual, então a ação que o asterisk tomou depende em que situações ele está. 1. Se esta é uma conexão de entrada nova, então o Asterisk irá retornar um sinal apropriado de “número inválido” para quem discou. Se for um canal Zap o usuário receberá um tom de discagem inválida, se for um telefone IP poderá eventualmente receber uma mensagem de discagem inválida. Nesta situação, nenhum comando do plano de discagem foi executado e não existe controle sobre o comportamento do Asterisk em como ele gerencia um número inválido. O Asterisk não pula para a extensão i nesta situação. 2. Se por outro lado, este á uma conexão estabelecida, o Asterisk pulou para uma extensão, iniciou a execução de comandos (ex. tocando uma mensagem de um menu da ura) e ficou sem comandos, esperando que o usuário disque alguma coisa. Neste caso a discagem de um número inválido faz com que o Asterisk pule para a extensão i. Se a extensão i não estiver definida neste contexto, o asterisk irá desligar. 9.3.2 Exemplo Uma empresa quer que suas chamadas telefônicas sejam respondidas com uma mensagem de voz dando boas vindas à quem ligou e convidando-o a escolher uma extensão. A empresa tem seis extensões que são 1,2,21,22,31,32. Então o contexto criado para as chamadas entrantes. [incoming] exten=>s,1,Background(bem-vindo-a-empresa) exten=>1,1,Dial(Zap/1) exten=>2,1,Dial(Zap/2) exten=>21,1,Dial(Zap/3) exten=>22,1,Dial(Zap/4) exten=>31,1,Dial(Zap/5) exten=>32,1,Dial(Zap/6) Quando você chamar a empresa, o asterisk irá tocar o arquivo bem- vindo-a-empresa.gsm. Após isto, fica sem comandos para executar e espera que você disque algo. Isto é o que ele vai fazer se você discar várias opções. Número discado Ação do Asterisk 1 Imediatamente faz a discagem Dial(Zap/1) 2 Espera pelo timeout e então faz Dial(Zap/2) 21 Imediatamente faz o Dial (Zap/3) 22 Imediatamente faz o Dial (Zap/4) 3 Espera pelo timeout então desliga 31 Imediatamente disca para Dial(Zap/5) 32 Imediatamente faz o Dial(Zap/6)
  • 237. 9.3 Como o plano de discagem encontra a extensão | 221 4 Imediatamente desliga Note que quando alguém tenta discar a extensão 2, ele não é conectado imediatamente. O Asterisk espera para ver se quem discou vai teclar mais dígitos para determinar qual extensão é desejada 2,21 ou 22. Como todo mundo gostaria de ser atendido imediatamente, o ideal é não usar um plano de discagem ambíguo. Se a companhia não quiser perder chamadas se for discado um número inválido, o ideal é definir uma extensão i (invalida) para este contexto e t (timeout). 9.3.3 Ordem de busca dos padrões de extensão Cada contexto definido no plano de discagem dirá ao Asterisk como processar os números de telefone naquele contexto. Como você pode usar padrões para definir extensões, mais de um padrão de extensão pode bater com um dado número de telefone. O Asterisk não bate os números contra os padrões na ordem que você os define, os padrões são ordenados primeiro. Problema exemplo: Vamos dizer que para o contexto exemplo, você queira que números iniciando com 918 saiam por uma linha analógica conectada em Zap/1, e todos os outros números saiam pela Zap/2. Então você escreve algo como: [exemplo] exten=>_918.,1,Dial(Zap/1/${EXTEN}) exten=>_.,1,Dial(Zap/2/${EXTEN}) exten=>h,1,Hangup Só que não funciona. Você descobre que não importando o número que você disca, todos os números são enviados via Zap/2. Isto ocorre porque o Asterisk ordena as extensões e pega a primeira que corresponda. Para ver a ordem pela qual o Asterisk ordena as extensões, digite o comando show dialplan exemplo na console. Você vai descobrir que a ordem é: _ _918 h Note que esta é uma ordem diferente da qual você definiu no seu arquivo extensions.conf. A linha com “_.” é agora a primeira, incluindo aqueles que começam com 918. Note também que a extensão h não pode ser alcançada, porque ela também corresponde ao _.
  • 238. 222 Capítulo 9: Configurando um PABX simples 9.3.4 Controlando o ordenamento Então como se faz para o Asterisk bater os padrões de extensão na ordem que você quer. Usando a palavra chave include para incluir outro contexto de padrões de extensões dentro do contexto atual. [exemplo] include=>exemplo-sub exten=>h,1,Hangup exten=>_918.,1,Dial(Zap/1/${EXTEN}) [exemplo-sub] exten=>_.,1,Dial(Zap/2/${EXTEN}) O Asterisk (quando no contexto “exemplo”) irá processar os números discados na seguinte ordem. _918 h _ Note o que o Asterisk fez: As entradas “exten=>” dentro do contexto exemplo são ordenadas e testadas primeiras. O conteúdo de cada contexto incluído é ordenado e testado em seguida. Os contextos incluídos são testados na ordem das linhas incluídos em extensions.conf. Reloading Se você quiser recarregar o plano de discagem após mudanças, sem recarregar toda a configuração do Asterisk. Use o comando de console extensions reload. Um arquivo grande ou vários arquivos pequenos? Com a instrução #include <nome do arquivo> no extensions.conf, outros arquivos são incluídos. Desta forma você pode configurar o sistema onde o extensions.conf é o arquivo principal, users.conf contêm os usuários locais, services.conf contém vários serviços como conferência. Desta forma o plano de discagem pode ser mais fácil de manter, dependendo do tamanho do seu setup. Não confunda o #include <nome do arquivo> com a instrução include <context>. O #include funciona em todos os arquivos de configuração do Asterisk. 9.4 Recebendo uma chamada em um menu de voz. Para mostrar os menus de voz precisamos entender os comandos Background() e o comando Goto(). O comando playback você pode ver
  • 239. 9.4 Recebendo uma chamada em um menu de voz. | 223 no capítulo três. Abaixo uma descrição sucinta dos comandos Background e Goto(). O comando Background() Toca um arquivo de áudio, mas retorna o controle imediatamente. Sintaxe: Background(nome do arquivo) Começa tocando um dado arquivo de áudio, mas imediatamente retorna, permitindo ao arquivo de áudio tocar no fundo enquanto os próximos comandos (se quaisquer) executem. (Comparando com o comando Playback, que também toca um arquivo de áudio, mas que espera até o áudio ter terminado antes de retornar o controle). Se você fizer uma segunda chamada ao aplicativo Background, enquanto o primeiro ainda estiver tocando, o segundo arquivo será enfileirado para tocar após o término do primeiro. Se o Asterisk ficar sem comandos para executar para uma dada extensão, mas a conexão ainda estiver ativa (O usuário ainda não desligou), o Asterisk irá terminar de tocar o áudio em background antes de ativar o temporizador ResponseTimeout. Um uso do comando Background() é tocar uma mensagem de menu (Pressione 1 para vendas, 2 para suporte,...”), sem ter nenhum comando adicional. Deste modo o Asterisk, não tendo comandos para executar, espera por quaisquer dígitos DTMF que o usuário possa discar enquanto ele continua tocando o arquivo de áudio. Se o usuário disca um número de extensão que é valido no contexto atual, o arquivo de áudio será interrompido e o Asterisk irá pular para a extensão discada. Se o usuário não discar uma extensão, então o Asterisk irá terminar de tocar o arquivo de áudio no fundo e então silenciosamente esperar pelo tempo em segundos definido pela variável ResponseTimeout até que o usuário disque algo. Se estourar o tempo o controle vai para e extensão t (se definida neste contexto, senão desliga). Se o usuário discar uma extensão que é invalida no contexto atual, o controle pula para a extensão i (Se definida neste contexto, senão desliga). Exemplo: [incoming] exten=>s,1,Answer exten=>s,2,ResponseTimeout(5) exten=>s,3,Background(meumenu) exten=>s,4,Background(escolhaalgo) exten=>t,1,Goto(s,2) exten=>i,1,Playback(pbx-invalid)
  • 240. 224 Capítulo 9: Configurando um PABX simples exten=>i,2,Goto(s,2) exten=>1,1,DoSomething exten=>2,1,DoSomethingElse exten=>3,1,Dial(...) Neste exemplo, uma chamada vinda de um contexto de entrada é imediatamente respondida pelo Asterisk (passo s,1). Nós configuramos o tempo de resposta em 5 segundos (passo s,2). Então nós começamos a tocar o áudio do arquivo “meumenu.gsm” (passo s,3). Então nós enfileiramos o áudio do arquivo “escolhaalgo.gsm” para tocar uma vez que o primeiro áudio tenha terminado. (passo s,4). Como não existe passo s,5, o Asterisk continua tocando o meumenu.gsm e escolhaalgo.gsm até ter terminado e então silenciosamente espera mais cinco segundos por uma resposta. Se a qualquer momento, com o áudio tocando ou não, o usuário disca uma extensão então o Asterisk para de tocar o áudio e pula para a extensão. Se ele disca “1”, “2”ou “3”, então o Asterisk irá pular para a extensão apropriada. Se o usuário discar qualquer outro número, o Asterisk pula para a extensão “i” e toca um áudio do arquivo “pbx-invalid.gsm” então volta para o início. Se o usuário não digitar nenhuma extensão no fim de 5 segundos de silêncio, então o Asterisk irá pular para a extensão “t”, e de lá seguem o Goto para voltar ao início novamente. Note que se você usar o comando Background em uma macro ele vai sempre chamar uma extensão fora do contexto de quem chamou. O comando goto() Descrição: Pula para uma prioridade em particular, extensão ou contexto. Sintaxe: Goto([[context|]extension|]priority) Configura a prioridade para um valor especifico opcionalmente configurando a extensão opcionalmente o contexto também. A extensão BYEXTENSION é especial, pois usa a extensão atual, deste modo permitindo que você vá para um contexto diferente sem especificar uma extensão especifica. Variantes válidas do comando: Goto(context,extension,priority) Goto(extension,priority)
  • 241. 9.4 Recebendo uma chamada em um menu de voz. | 225 Goto(priority) Aviso: Inserindo um espaço após as vírgulas separando os parâmetros irá resultar em resultados inesperados. Exemplo: Goto(confexisting,1,1) irá procurar por uma extensão “ 1”, com um espaço na frente. Códigos de retorno: Sempre retorna 0, mesmo se um dado contexto, extensão, ou a prioridade seja inválido. Exemplo: exten=>1,1,Goto(submenu,s,1) exten=>600,4,Goto(s,6) Um menu de voz é tipicamente programado dentro do seu próprio contexto. [menuprincipal] exten => s,1,Background(bemvindo-menuprincipal) exten => 1,1,Goto(vendas,s,1) exten => 2,1,Dial,Zap/2 exten => 9,1,Directory(default) exten => 0,1,Dial,Zap/3 [vendas] exten => s,1,Background(bemvindo-vendas) exten => 1,1,Goto(default,100,1) exten => 2,1,Goto(default,101,1) Um anúncio normalmente é tocado na extensão s, ao entrar no menu. Então a aplicação Background toca uma mensagem, enquanto espera que o usuário disque uma extensão. O exemplo acima apresenta dois menus, um chamado “menu principal” e outro chamado “vendas”. Quando alguém entra no contexto menu principal ele irá ouvir um anuncio (Como pressione 1 vendas, 2 suporte, 9 diretório e 0 telefonista). Ao discar 1, o originador é transferido para vendas, discando 2 irá tocar Zap/2, 0 irá tocar o Zap/3 e 9 irá apresentar o diretório da empresa. Exemplos de discagem: O tipo de extensão mais comum é aquela para discar para outra interface. Chamando outra interface é feito com a aplicação Dial. Neste exemplo usamos o comando Dial na sua forma mais simples. exten => 8590,1,Dial(Zap/1,20)
  • 242. 226 Capítulo 9: Configurando um PABX simples exten => 8590,2,Voicemail(u8590) exten => 8590,102,Voicemail(b8590) Neste exemplo, uma das poucas exceções para a execução de uma extensão estando fora de ordem. Quando esta extensão é discada, a primeira coisa que o Asterisk tenta discar é a interface Zap/1, por um máximo de 20 segundos. Se a interface está ocupada, ele irá pular para a prioridade n+101 se tal prioridade existir nesta extensão. Neste caso, nós temos a prioridade (102), a qual envia o originador para a caixa postal de correio de voz 8590 com uma mensagem de ocupado (busy). Se simplesmente ninguém atender, então a execução continuará no passo seguinte, onde o originador será colocado no correio de voz com a mensagem de “ninguém atende” (unavailable). O comando gotoif() O comando gotoif() permite um salto condicionado a resolução de uma expressão. Veja o exemplo abaixo: Sintaxe: GotoIf(condition?label1[:label2]) Exemplo: ;implementando um loop na ura exten=s,1,setvar(counter = 3) exten=s,n(inicio),Background(escolhasuaopcao) exten=s,n,setvar(counter=$[${counter}-1]) exten=s,n,gotoif($[${COUNTER} = 0]?fim:inicio) exten=s,n(fim),hangup exten=1,1,noop(“executa opcao 1”) exten=2,1,noop(“executa opcao 2”) Cuidado nas expressões pois precisa haver espaço antes e depois do sinal de igual. 9.5 Switches, encaminhando para outro Asterisk Sintaxe: [iaxprovider] switch=>IAX2/user:[key]@server/context Especifica o encaminhamento para outro servidor. O usuário e chave precisam ser definidos no arquivo iax.conf de servidor que é chamado. O contexto é o contexto no servidor de destino.
  • 243. 9.6 Macros | 227 9.6 Macros Uma macro é um conjunto de comandos que vai ser executado em seqüência. As macros são usadas primariamente para processar as extensões, de forma que não seja necessário no plano de discagem digitar várias linhas de comando para cada extensão. Programação da Macro. Descrição: Macro(macroname,arg1,arg2...) Executa uma macro usando o contexto macro-<macroname>, pulando para a extensão “s”daquele contexto e executando cada passo, e então retornando ao final. Note que você não pode usar qualquer outra extensão diferente de s para construir a macro, de forma que o controle é retornada ao contexto da chamada quando termino o processamento da macro. A extensão que foi chamada, contexto, e prioridade são armazenadas em ${MACRO_EXTEN}, ${MACRO_CONTEXT} e ${MACRO_PRIORITY} respectivamente. Os argumentos se tornam ${ARG1} e ${ARG2} etc no contexto da macro. Se você usar o comando Goto para fora do contexto da Macro, a macro irá terminar e o controle será retornado ao local indicado pelo Goto (Ver comandos e aplicações). Se você colocar ${MACRO_OFFSET} no término, a macro tentará continuar na prioridade MACRO-OFFSET+N+1, se tal passo existir e N+1 caso contrário. Códigos de retorno: A Macro retorna 1 se qualquer passo na macro retornar -1, senão retorna 0. Exemplo: [macro-stdexten] ;Macro extensão padrão ; ;${ARG1}-Telefone à tocar (ring) exten=>s,1,Dial(${ARG1},20,j) exten=>s,2,Voicemail(u${MACRO_EXTEN}) exten=>s,3,Goto(default,s,1) ;Se for pressionado #, retorna ao início exten=>s,102,Voicemail(b${MACRO_EXTEN}) ;Se ocupado, envia um voicemail ;com o anúncio de busy exten=>s,103,Goto(default,s,1) ;Se for pressionado #, retorna ao início Para chamar essa macro você usaria: exten => 1234,2,Macro(stdexten,sip/7960mark)
  • 244. 228 Capítulo 9: Configurando um PABX simples Veremos diversas macros em exemplos do arquivo extensions.conf. 9.7 A base de dados do Asterisk A base de dados do Asterisk usa a versão 1 do Berkley DB que é parecido com o registry do Windows. Este banco de dados pode ser usado pelo Asterisk para armazenar dados temporários, e configurações. Um exemplo de uso é a transferência com consulta, onde se o telefone está ocupado ele guarda a extensão em uma base de dados e fica re-tentando até conseguir. Os dados são agrupados em famílias e identificados com uma chave que é única dentro da família. 9.7.1 Famílias cidname: usado pelo comando LookupCIDName blacklist: usado pelo comando LookupBlacklist 9.72 Funções Existem funções de acesso ao banco de dados do Asterisk que você pode usar dentro do plano de discagem no arquivo extensions.conf: • DBdel(): Deleta uma chave da base de dados. • DBdeltree(): Deleta uma família ou árvore da base de dados. 9.7.3 Exemplo de uso do Asterisk DB. Siga-me, Siga-me quando ocupado. Se você usar este exemplo, um telefone pode discar *21*<número> para Siga-me imediato ou *61* para siga-me se ocupado, e #21# ou #61# para cancelar a configuração. Abreviações usadas: CFIM – família base de encaminhamento imediato. CFBS – família base de encaminhamento quando ocupado. [macro-stdexten] ;${ARG1}-Extensão ;${ARG2}-Dispositivo à tocar exten=s,1,Set(TEMP=${DB(CFIM/${ARG1})}) ;Pega a chave CFIM, se ; não existir vai p/102
  • 245. 9.8 Programando o recurso de lista negra. | 229 exten=s,2,Dial(SIP/${TEMP}) ;Se existir disca para o número ;programado pelo código *21* exten=s,3,Dial(${ARG2},20,tT) exten=s,4,Set(TEMP=${DB(CFBS/${ARG1})}) ;Pega a chave CFBS, se não ; existir vai p/105 exten=s,5,Dial(SIP/${TEMP}) ;Encaminha quando ocupado ou ;não disponível. exten=s,6,Hangup() ;Finaliza exten=s,102,Goto(s,3) ; Vai para s,3 e disca exten=s,104,Goto(s,4) ;Se no passo 3 dá ocupado ;Vai para siga-me se ocupado Exten=s,105,Congestion() ;Como não há número programado cai em ;ocupado. Exten=s,106,Congestion() ;Se a extensão transferida estiver ;ocupada ;Cai em ocupado. Notas: • Esta macro lê as variáveis armazenadas na base de dados do Asterisk. • A Macro executa o Dial(SIP/${temp}) se um número de redirecionamento for encontrado. • Se a função DB() não encontrar uma chave, ele vai para a prioridade 102. [apps] ;Siga-me exten=>_*21*X.,1,Set(DB(CFIM/${CALLERIDNUM})=${EXTEN:4}) exten=>_*21*X.,2,Hangup exten=>#21#,1,DBdel(CFIM/${CALLERIDNUM}) exten=>#21#,2,Hangup ;Siga-me se ocupado ou não disponível exten=>_*61*X.,1,Set(DB(CFBS/${CALLERIDNUM})=${EXTEN:4}) exten=>_*61*X.,2,Hangup exten=>#61#,1,DBdel(CFBS/${CALLERIDNUM}) exten=>#61#,2,Hangup [pbx] exten=7000,1,Macro(stdexten,7000,SIP/7000) exten=7001,1,Macro(stdexten,7001,IAX/7001) Não esqueça de incluir a extensão apps no seu contexto. 9.8 Programando o recurso de lista negra.
  • 246. 230 Capítulo 9: Configurando um PABX simples Para programar o recurso de lista negra usaremos a aplicação LookupBlackList(). Esta aplicação verifica um nome/número de identificação de chamada de uma base de dados de uma lista negra. Se o número for encontrado e se existir a prioridade n+101, o Asterisk saltará para esta prioridade, senão retornará zero. Não faz nada se não receber identificador da chamada. Exemplo: [entrada] exten => s,1,LookupBlacklist(j) exten => s,2,Dial(SIP/4000,20,tT) exten => s,3,Hangup() exten => s,102,Goto(bloqueado,s,1) [bloqueado] exten => s,1,Answer() exten => s,2,Playback(ligacaobloqueada) exten => s,3,Hangup() Para inserir um número na lista negra podemos usar o mesmo recurso usado anteriormente no siga-me. Usando *31* seguido da extensão. Para remover da lista negra basta usar #31# seguido do número a ser removido da lista negra. [apps] exten=>_*31*X.,1,Set(DB(blacklist/${EXTEN}=1}) exten=>_*31*X.,2,Hangup() exten=>_#31#,1,DBdel(blacklist/${EXTEN}) exten=>_#31#,2,Hangup() Os números podem ser colocados no banco de dados usando comandos de console na interface de linha de comando CLI. CLI>database put blacklist <nome/número> 1 Note que o valor associado a chave é 1 e pode ser qualquer valor. A aplicação LookupBlackList irá pesquisar a chave e não o valor. Para apagar use: CLI>database del blacklist <nome/número> 9.9 Contextos baseados em horário
  • 247. 9.9 Contextos baseados em horário | 231 Na figura acima temos um plano de discagem feito de vários contextos. Quando uma chamada está entrando, ela vem por um canal. Este canal pertence à um contexto. No caso acima o canal pertence ao contexto “menuprincipal”. Dentro do contexto menuprincipal, temos dois contextos que foram incluídos “foradoexpediente” e “expediente”. Estes dois contextos foram incluídos usando o comando: include => context|<times>|<weekdays>|<mdays>|<months> Por exemplo: ; Este é o horário de expediente include=>expediente|08:00-18:00|mon-fri|*|* ; Este é o horário fora de expediente include=>foradeexpediente|18:00-23:59|*|*|* include=>foradeexpediente|00:00-08:00|*|*|* include=>foradeexpediente|*|sat-sun|*|*|* De forma que um dos dois vai ter a extensão s (Start) eles vão tocar a chamada apropriada e transferir para o menuprincipal. Após o anuncio do menu principal o sistema irá esperar pela discagem de 1 dígito, podendo transferir para vendas ou para qualquer ramal no contexto default. Note que não é possível transferir para uma linha externa, pois o contexto discar externo, não está incluído no contexto menu principal. Por outro lado se analisarmos a saída de chamadas, vamos imaginar que um canal tenha sido colocado no contexto [discarexterno] (Muito semelhante as classes de ramais nos PABX convencionais), ele pode discar um número externo, e também discar qualquer ramal no contexto
  • 248. 232 Capítulo 9: Configurando um PABX simples default que também foi incluído no contexto [discarexterno]. É importante entender que o que define o contexto de um canal não é a entrada “exten=>”no arquivo extensions.conf, o que define o contexto de um canal é a configuração do canal (sip.conf ou zapata.conf dependendo do tipo de canal). Por isto um canal que tenha sido definido como contexto default pode discar apenas os outros ramais e um que tenha sido definido como [discarexterno], pode discar externamente e também para todos os ramais, pois o contexto default foi incluído no contexto discarexterno. As mensagens dependentes de horário pode também ser programadas usando a aplicação: GotoifTime(). O formato do comando GotoifTime segue abaixo: GotoIfTime(<timerange>|<daysofweek>|<daysofmonth>|<months>?[[context|]extension|]pri) Se a hora atual corresponder ao tempo especificado, o comando irá saltar para a extensão especificada. Cada um dos itens poderá ser preenchido com “*” (sempre) ou como uma faixa. Se o tempo atual não bate com a hora especificada o próximo comando deverá ser executado. Como especificar o tempo: <timerange>=<hour>':'<minute>'-'<hour>':'<minute> |"*" <daysofweek>=<dayname>|<dayname>'-'<dayname>|"*" <dayname>="sun"|"mon"|"tue"|"wed"|"thu"|"fri"|"sat" <daysofmonth>=<daynum>|<daynum>'-'<daynum> |"*" <daynum>=um número de 1 à 31 <hour>=um número de 0 à 23 <minute>=Um número de 0 à 59 <months>=<monthname>|<monthname>'-'<monthname>|"*" <monthname>="jan"|"feb"|"mar"|"apr"|"may"|"jun"|"jul"|"aug"|"sep"|"o ct"|"nov"|"dec" Nomes de dia e de mês não diferenciam maiúsculas e minúsculas. exten=>s,1,GotoIfTime(8:00-18:00|mon-fri|*|*?expediente,s,1) Transfere para o contexto expediente na extensão “s” prioridade 1 se a ligação chegar entre às 08:00 às 18:00, não verificando o dia do mês ou mês. 9.10 Abrindo um novo tom de discagem com DISA.
  • 249. 9.11 Limitando o número de chamadas simultâneas | 233 DISA ou “direct inward system access” é um sistema que permite que o usuário ao discar para o Asterisk receba um segundo tom e possa discar a partir do servidor Asterisk. O formato do comando segue abaixo: DISA(passcode[|context]) DISA(arquivo de senhas) Exemplo de uso: exten => s,1,DISA(no-password|default) Com este comando por exemplo o usuário disca para a central e sem nem mesmo passar uma senha, recebe um tom de discagem. Qualquer chamada colocada no DISA neste caso será processada no contexto “default”. Os argumentos para este aplicação permitem uma senha global ou senhas individuais dentro de um arquivo. Se nenhum contexto for especificado será usado o contexto “disa”. Se for usado um arquivo de senha (especificado o caminho completo do arquvo) o arquivo pode contes # e ; para comentários. Além disso os argumentos podem ter um callerid adicionado à ele para que um novo callerid podda ser usado nesta chamada. Exemplo: numeric-passcode|context|"Flavio" <(48) 30258590> 9.11 Limitando o número de chamadas simultâneas A versão 1.2 inclui uma série de comandos que permitem colocar um canal dentro de um grupo e contar quantos canais ativos existêm em um determinado grupo em um determinado momento. Vamos usar o seguinte exemplo para mostrar como funciona. Suponha que você tem uma filial chamada “Rio” onde os telefones começam com “_214X” e que esta localidade é servida por um canal de dados onde apenas 64Kbps foram reservados para ligações. Neste caso você vai querer que apenas duas ligações ao mesmo tempo possam ser feitas para esta localidade. Veja o exemplo abaixo: exten=>_214X,1,set(GROUP()=Rio) exten=>_214X,n,Gotoif($[${GROUP_COUNT()} > 1]?estourou) exten=>_214X,n,Dial(SIP/${EXTEN}) exten=>_214X,n,hangup exten=>_214X,n(estourou),playback(ligacoesexcedidas) exten=>_214X,n,hangup
  • 250. 234 Capítulo 9: Configurando um PABX simples 9.12 Um plano de discagem na prática Vamos construir um plano de discagem na prática para uma pequena central telefônica. A central possui as seguintes características e requisitos: • 4 troncos analógicos. • 16 ramais IP baseados em SIP. • 3 classes de ramal. o restrito (Interno, ligações locais e 0800). o ddd (ligações nacionais). o ddi (ligações internacionais). • Mensagem quando fora do expediente • Auto-atendimento 9.12.1 Passo 1 - Configurando os canais. Troncos analógicos (zapata.conf) Em primeiro lugar vamos configurar os troncos analógicos. Estes troncos são interfaces do tipo fxo. Você pode usar uma placa Digium do tipo T400P ou quatro placas modem Motorola ou Intel (Aquela em que de cada 5 que se compra uma da certo).
  • 251. 9.12 Um plano de discagem na prática | 235 Vamos assumir neste caso que o drivers do hardware da placa de telefonia (zaptel.conf) já estão configurados e carregados. No arquivo zapata.conf você configura os canais zap correspondentes aos troncos da central. signalling=fxs_ks language=en context=entrada group=1 channel => 1-4 Canais SIP (sip.conf) Vamos escolher a faixa de numeração do número 2000 ao número 2100. Dois codecs vão ser utilizados, GSM e G711 ulaw. O primeiro para telefones ligados pela Internet ou em linhas de baixa velocidade, o segundo para os telefones locais. Vamos convencionar que ramais dos números 2000 até o 2039 são restritos, dos ramais 2040 até o 2059 podem fazer DDD e do número 2060 em diante podem fazer DDI. [general] disallow=all allow=gsm allow=ulaw bindport = 5060 bindaddr = 0.0.0.0 context = ramais [2000] type=friend username=20 secret=senha host=dynamic mailbox=20 context=restrito canreinvite=yes [2040] type=friend username=20 secret=senha host=dynamic mailbox=20 context=podeddi canreinvite=yes dtmfmode=rfc2833 [2060] type=friend username=20 secret=senha host=dynamic mailbox=20 context=podeddd canreinvite=yes dtmfmode=rfc2833
  • 252. 236 Capítulo 9: Configurando um PABX simples 9.12.2 Passo 2 - Configurando o plano de discagem Agora vamos configurar o plano de discagem para atender as especificações da central. Todas as configurações desta seção são feitas no arquivo extensions.conf. Definindo os ramais e saída local ; Este contexto permite ligar para ramais e ligações locais [ramais] exten=>_20XX,1,Dial(SIP/${EXTEN},20,r) [local] exten=>_0XXXXXXXX,1,Dial(ZAP/g1/${EXTEN:1},20,Tt) ; Ligações locais Definindo a saída para DDD [ddd] ; Discagem para DDD para número de 7 dígitos (BrT) exten=>_00XXXXXXXXX,1,Dial(Zap/g1/${EXTEN:1},20,Tt) ; Discagem para DDD para número de 8 dígitos exten=>_00XXXXXXXXXX,1,Dial(Zap/g1/${EXTEN:1},20,Tt) Definindo a saída para DDI [ddi] ; Discagem para DDI exten=>_000X.,1,Dial(Zap/g1/${EXTEN:1},20,Tt) Definindo as classes de ramal [restrito] include=>ramais include=>local [podeddd] include=>ramais include=>local include=>ddd [podeddi] include=>ramais include=>local include=>ddd include=>ddi 9.12.3 Recepção das chamadas Para receber as chamadas, vamos usar dois contextos um para ligações durante o expediente e outra para ligações fora do expediente. A ligação vai ser atendida por um auto-atendedor e transferida diretamente para um ramal ou para um outro menu.
  • 253. 9.12 Um plano de discagem na prática | 237 Menus: Expediente e fora do expediente Nos menus abaixo, o sistema irá tocar uma mensagem avisando ao originador da chamada que a empresa se encontra fora do expediente, mas permitindo que o usuário disque um ramal (eventualmente alguém está fazendo hora-extra). [entrada] include=>expediente|08:00-18:00|mon-fri|*|* ; Este é o horário fora do expediente include=>foradoexpediente|18:00-23:59|*|*|* include=>foradoexpediente|00:00-07:59|*|*|* include=>foradoexpediente|*|sat-sun|*|* [expediente] exten=>s,1,Goto(menuprincipal,s,1) [foradoexpediente] exten=>s,1,Background(foradoexpediente) exten=>s,2,hangup() exten=>i,1,hangup() exten=>t,1,hangup() include=>ramais Menus: Principal e Vendas Durante o expediente o usuário é recebido pelo menu com auto- atendimento. A mensagem será algo como: “Bem vindo, você ligou para a NomedaEmpresa, Disque 1 para vendas, 2 para suporte e três para treinamento ou o ramal desejado”. [globals] TELEFONISTA=SIP/2060 VENDAS=SIP/2035 SUPORTE=SIP/2004 TREINAMENTO=SIP/2036 [menuprincipal] exten=> s,1,Background(bemvindo-menuprincipal) exten=>1,1,Goto(vendas,s,1) exten=>2,1,Goto(suporte,s,1) exten=>3,1,Goto(treinamento,s,1) exten=>i,1,Playback(Invalido) exten=>i,2,hangup() exten=>t,1,Dial(${TELEFONISTA},20,Tt) include=>ramais [vendas] exten=>s,1,Dial(${VENDAS},20,Tt) [suporte] exten=>s,1,Dial(${SUPORTE},20,Tt) [treinamento] exten=>s,1,Dial(${TREINAMENTO},20,Tt)
  • 254. 238 Capítulo 9: Configurando um PABX simples Com isto a maior parte da funcionalidade do seu plano de discagem está pronta e agora você pode começar a testar e melhorar sua configuração. Na próxima seção vamos ver mais detalhes sobre as aplicações mais comuns.
  • 255. 9.13 Questionário | 239 9.13 Questionário 1. Para incluir um contexto que depende do horário, você pode usar: include=> context|<times>|<weekdays>|<mdays>|<months> O comando abaixo: include=>expediente|08:00-18:00|mon-fri|*|* Executa as extensões de segunda à sexta das 08:00 às 18:00. Executam as opções todos os dias em todos os meses. O comando é inválido. 2. Quando o usuário disca “0” para pegar a linha o Asterisk automaticamente corta o áudio. Isto é ruim, pois o usuário está acostumado a discar o “0” e ouvir o tom externo de discagem. Para criar este comportamento que o usuário está acostumado, pode-se usar comando ___________. 3. Os comandos: exten => 8590/482518888,1,Congestion exten => 8590,1,Dial(Zap/1,20) exten => 8590,2,Voicemail(u8590) exten => 8590,102,Voicemail(b8590) Faz com que um usuário que ligou para a extensão 8590: Receba um sinal de ocupado se o CallerID=482518888 Receba um sinal de ocupado independente do número discado Vá para o canal ZAP/1 Vá para o VoiceMail() se o canal ZAP/1 estiver ocupado ou não atender, exceto no caso onde o CallerID for 482518888 4. Para concatenar várias extensões basta separá-las com o sinal ___. 5. Um menu de voz normalmente é criado com o comando inicial __________. 6. Você pode incluir arquivos dentro dos seus arquivos de configuração com o comando ___________. 7. O Asterisk permite que se use no plano de discagem uma base de dados baseada em: Oracle
  • 256. 240 Capítulo 9: Configurando um PABX simples MySQL Berkley DB PostgreSQL 8. Quando você usa o comando Dial(tipo1/identificar1&tipo2/identificar2) com vários identificadores, o Asterisk disca para cada um na seqüência e espera 20 segundos ou o tempo de timeout antes de passar para o outro número. A afirmação é: Falsa Verdadeira 9. No comando Background a música de fundo tem de ser tocada inteiramente antes que o usuário possa digitar algo. A afirmação é: Falsa Verdadeira 10. Os formatos válidos par o comando Goto() são: Goto (context,extension) Goto(context,extension,priority) Goto(extension,priority) Goto(priority) 11. Switches são usados para direcionar para outro PABX. A afirmação acima está: Correta Incorreta 12. Uma macro pode ser usada para automatizar uma série de operações em seqüência para uma extensão específica. O primeiro argumento passado pela chamada da macro é o: ${ARG1} ${ENV1} ${V1} ${X}
  • 257. Configurando recursos avançados Neste capítulo veremos alguns recursos avançados do Asterisk PBX. 10.1 Objetivos Ao final deste capítulo você deve estar apto a configurar os seguintes recursos. • Gerenciamento de chamadas. o Call Parking (Estacionamento de chamadas). o Call Pickup (Captura de chamadas). o Call Transfer (Transferência). o Call Conference (Conferência simples). o Call Recording (Gravação das chamadas) • Sala de conferência. • Musica em espera. 10.2 Suporte aos recursos de PABX Nesta seção vamos ver uma série de recursos que foram introduzidos na versão 1.0 do Asterisk para o tratamento de chamadas. O arquivo features.conf controla a maior parte destes recursos. É importante entender que alguns recursos são implementados pelo telefone e outros pelo Asterisk. Outro ponto importante é o caso de telefones IP baseados em SIP com a configuração canreinvite=yes. Neste caso a comunicação da mídia ocorre entre os dois telefones, se o usuário pressionar #, quem vai interpretar é o outro telefone e não necessariamente o Asterisk. 10.2.1 Recursos com suporte para todo tipo de canal • Música em espera: Veja a aplicação MusicOnHold(). Capítulo 10
  • 258. 242 Capítulo 10: Configurando recursos avançados • Estacionamento de chamadas: Suportado na instalação padrão. • Captura de chamadas: Suportado na instalação padrão (*8). • Gravação de chamadas: Usando a aplicação Monitor(). • Conferência: Usando a aplicação MeetMe(). 10.2.2 Recursos com suporte em telefones SIP • Chamada em espera: Normalmente implementado pelo telefone. • Transferência às cegas: Implementado no * opcional no telefone. • Chamada em espera com consulta: Implementado no telefone • Siga-me incondicional: * • Siga-me se não atender: Criado no plano de discagem. • Siga-me se estiver ocupado: Criado no plano de discagem. • Transferência assistida: * • Chamada a três: Normalmente implementado pelo telefone. • Filtragem das chamadas: Criado no plano de discagem. • Rediscagem automática: É possível usando AGI. • Rediscagem manual: Telefone • Não perturbe: * • Mensagem em espera: *, mas deve ser suportado no telefone. • Indicação de chamada em espera: *, deve ser suportado no fone.
  • 259. 10.3 Estacionamento de chamadas | 243 10.2.3 Para telefones analógicos (Zap). • Captura de chamadas: Suportada na instalação padrão. • Chamada em espera: Normalmente implementado no telefone. • Transferência às cegas: * • Chamada em espera com consulta: Implementado no telefone. • Siga-me incondicional: * • Siga-me se não atender: Criado no plano de discagem. • Siga-me se estiver ocupado: Criado no plano de discagem. • Transferência assistida: * • Chamada a três: Normalmente implementado pelo telefone. • Filtragem das chamadas: Criado no plano de discagem. • Rediscagem automática: É possível usando AGI. • Rediscagem manual: * • Não perturbe: * • Mensagem em espera: *, mas deve ser suportado no telefone. • Indicação de chamada em espera: *, deve ser suportado no fone. • Encontre-me: * 10.3 Estacionamento de chamadas 10.3.1 Descrição: É usado para estacionar uma chamada. Isto auxilia quando você está atendendo em um telefone fora da sua sala. Estaciona a chamada em
  • 260. 244 Capítulo 10: Configurando recursos avançados uma determinada extensão e quando se move de volta a sua sala digita a extensão onde a chamada está estacionada. Por default a extensão 700 é usada para estacionar uma chamada. No meio de uma conversa, pressione # para iniciar uma transferência, então disque 700. O Asterisk irá agora anunciar a extensão do estacionamento, mais provavelmente 701 ou 702. Desligue, e o originador da chamada será colocado em espera na extensão anunciada. Vá para um telefone diferente e disque 701 (a extensão anunciada) e então você pode continuar conversando. Se o originador ficar estacionada por mais tempo que o limite então o Asterisk irá tocar a extensão discada originalmente. 10.3.2 Lista de tarefas para configuração 1. Incluir a linha (include=>parkedcalls) no arquivo extensions.conf. 2. Teste usando #700 3. Configure o arquivo features.conf se você quiser alterar os padrões de funcionamento do estacionamento de chamadas. 10.3.2.1 Habilitando chamadas em estacionamento: (obrigatório) Inclua no arquivo extensions.conf as linhas include=>parkedcalls 10.3.2.2 Teste o estacionamento transferindo para o ramal 700 usando #700. Notas: • A extensão de estacionamento não será mostrada no comando show dialplan. • É preciso reiniciar o asterisk após modificar o arquivo features.conf. Um reload simples não funciona. • É preciso poder transferir para poder estacionar uma chamada, então verifique as opções t e T do comando Dial(). • As transferências baseadas no Asterisk funcionam somente se o Asterisk estiver no meio do caminho (canreinvite=no no sip.conf por exemplo). 10.4 Captura de chamadas - Call-pickup 10.4.1 Descrição
  • 261. 10.5 Transferência de chamadas - Call Transfer | 245 A captura permite que você puxe um chamado de um colega no mesmo grupo de chamadas. Isto evita que você tenha de levantar para atender um telefone do seu vizinho que não para de tocar. Discando *8 você pode capturar uma chamada no seu grupo de chamadas. Este recurso pode ser alterado via arquivo features.conf. 10.4.2 Lista de tarefas para habilitar a captura. 1. Configure o grupo à que suas extensões pertencem dentro de um dos seguintes arquivos sip.conf, iax.conf, zapata.conf (obrigatório). [4x00] callgroup=1 pickupgroup=1,2 2. Configure o arquivo features.conf (opcional) pickupexten=*8; Configura a extensão de captura. O padrão é *8 10.5 Transferência de chamadas - Call Transfer 10.5.1 Descrição A transferência de chamadas pode ser feita de suas formas. A transferência às cegas (blind transfer) e a transferência assistida. Na transferência as cegas você usa os dígitos que estiverem definidos no parâmetro blindxfer no arquivo features.conf. Por exemplo, se o blindxfer for configurado como “#1”, você disca este número e o número de destino e desliga o telefone. O atxfer permite a transferência assistida ou supervisionada. Funciona assim: Durante uma conversa, você disca a seqüência de transferência assistida #2, O asterisk fala “transfer” e então dá a você um tom de discagem, enquanto coloca o originador em música de espera. Você disca para quem vai transferir e fala com ele para introduzir a chamada, então desliga, a transferência está completa. Se a pessoa transferida não quiser atender, ela simplesmente desliga o telefone e você recebe a chamada. 10.5.2 Lista de tarefas para configurar 1. Se o telefone for padrão SIP assegure-se que a opção canreinvite=no está habilitada (obrigatório).
  • 262. 246 Capítulo 10: Configurando recursos avançados 2. Na instrução Dial certifique-se que as opções t ou T estejam habilitadas. 10.6 Conferência – Call Conference A conferência no Asterisk é feita usando o aplicativo MeetMe(). O MeetMe() é uma ponte de videoconferência, muito simples de usar com a vantagem de funcionar com qualquer tipo de canal. Alguns telefones padrão SIP, por exemplo, têm seus próprios mecanismos de conferência que também podem ser usados, mas o método padrão para conferência é o MeetMe(). Vamos dar uma olhada mais a fundo no aplicativo. 10.6.1 Formato: MeetMe(Confno[|options][|password]) 10.6.2 Descrição: Coloca o usuário em uma sala de conferência específica. Se o número da conferência for omitido, será pedido um ao usuário. A string da opção pode conter ou não um ou mais dos seguintes caracteres. • 'm'—Configura o modo ouvir apenas. • 't—Configura o modo apenas fala. • 'i'— Anuncia a entrada e saída de usuário. • 'p'—Permite ao usuário sair da conferência pressionando #. • 'X'—Permite ao usuário sair da conferência discando uma extensão válida de um dígito. A extensão é executada em ${MEETME_EXIT_CONTEXT} ou no contexto atual se a variável não tiver sido definida. • 'v'—modo vídeo. • 'q'—modo quieto (não toca os sons de entrada e saída). • 'd'—adiciona dinamicamente a conferência.
  • 263. 10.6 Conferência – Call Conference | 247 • 'D'—dinamicamente adiciona a conferência, pedindo pelo pin (personal identification number). Quando ouvir o pedido do pin, se o usuário não quiser um pin designado para a conferência ele deve discar ‘#’. • 'M'—Habilita música em espera quando a conferência tem um único usuário. • 'e'—Seleciona uma conferência vazia. • 'E'—Seleciona uma conferência vazia sem pin. • 'b'—Roda o script AGI especificado em ${MEETME_AGI_BACKGROUND} o padrão é conf- background.agi (para canais zap apenas, não funciona com canais não zap na mesma conferência). • 'a'—Configura o modo de administração. • 'A'—Configura o modo marcado. • 's' —Apresenta um menu (usuário ou administrador) quando ‘*’ é recebido (envia para o menu). • 'x'—Fecha a conferência e desliga em todos os outros quando o ultimo usuário marcado saí. • 'w'—Espera até o usuário marcado entrar na conferência antes de permitir que alguém fale. Todos os outros usuários conectados vão ouvir música em espera até o usuário marcado entrar. 10.6.3 Códigos de retorno: A aplicação sempre retorna -1. 10.6.4 Detalhe das opções: Nem a opção ‘s’ nem a opção ‘p’ funcionam se usados junto com ‘X’. • Usuário (sem a opção ‘a’ sendo configurada): Ao pressionar * toca o menu de voz “Por favor, pressione 1 para emudecer e voltar”.
  • 264. 248 Capítulo 10: Configurando recursos avançados • Admin (com a opção a sendo configurada): Ao pressionar * toca o menu de voz “Por favor, pressione 1 para emudecer/desemudecer, 2 para travar/destravar esta conferência”. 10.6.5 Lista de tarefas de configuração 1. Escolha as extensões para a sala de conferência (obrigatório) 2. Inclua o comando MeetMe() no arquivo extensions.conf (obrigatório) 3. Edite o arquivo meetme.conf para configurar as senhas (opcional) 10.5.6 Exemplos Exemplo 1: Sala de conferência simples 1. Coloque no arquivo extensions.conf a sala de conferência 101. exten=>500,1,MeetMe(101|123456) 2. Defina no arquivo meetme.conf a senha (pin) 123456 na extensão 500 Exemplo 2 – Sala de conferência autenticada 1 – Defina a sala de conferência no arquivo extensions.conf exten=> 18,1,Answer exten=> 18,2,Wait(1) exten=> 18,1,Answer exten=> 18,2,Wait(1) exten=> 18,3,Authenticate(5678) exten=>18,4,MeetMe(18|p) exten=>18,5,Playback(vm-goodbye) exten=>18,6,Hangup 2 – Defina no arquivo meetme.conf as senhas para cada extensão. Nota importante: A aplicação MeetMe precisa de um temporizador para funcionar. Existem diferentes maneiras de fazer um temporizador funcionar, mas não vai funcionar por default se você não tiver um hardware Digium Zaptel instalado. Neste momento, apenas dispositivos zaptel podem ser usados. Se você não tem um dispositivo Zaptel use o driver ztdummy para temporização. 10.5.7 Arquivo de configuração do MeetMe() Este arquivo é usado para configurar o modulo de conferência do MeetMe.
  • 265. 10.7 Gravando uma ligação | 249 Exemplo: ; ;Arquivo de configuração para as salas de conferência do Meetme() ; [rooms] ;Formato: conf=>confno,pincode ; conf=>9000 conf=>9001,123456 Atualmente não é necessário usar nem o comando reload, nem o comando restart para que o Asterisk note as mudanças no arquivo meetme.conf. A aplicação Meetme conta com dois aplicativos de apoio: MeetMeCount(confno[|var]) Toca o número de usuários em uma conferência MeetMe. Se a variável for especificada, a mensagem não será tocada e a variável receberá o valor da contagem de usuários. MeetMeAdmin(confno,command,user): Roda o comando admin para a conferência especificada em confno. • 'K' Tira todos os usuários da sala de conferência. • 'k' Tira um usuário da sala de conferência. • 'L' Trava a conferência. • 'l' Destrava a conferência. • 'M' Emudece a conferência. • 'm' Desemudecer a conferência Aplicações avançada. Se você desejar, é possível ainda usar a aplicação MeetMe2 que possui uma interface gráfica para o controle da conferência, ou ainda o app_conference que não precisa de um temporizador e é mais eficiente em termos de tradução de codecs. 10.7 Gravando uma ligação Existem diversas formas de gravar uma ligação no Asterisk. Um recurso interessante é o uso do Automon. Ele permite que simplesmente discando *1 você possa acionar dinamicamente a gravação de chamadas.
  • 266. 250 Capítulo 10: Configurando recursos avançados Exemplo: exten=>_4XXX,1,Set(DYNAMIC_FEATURES=automon) exten=>_4XXX,2,Dial(SIP/${EXTEN},20,jtTwW);wW habilitam a gravação. Os canais de áudio de entrada (IN) e saída (OUT) serão separados em dois arquivos e estarão disponíveis no seu servidor Asterisk no seguinte diretório. /var/spool/asterisk/monitor Os dois arquivos podem ser unidos usando o aplicativo sox. soxmix *in.wav *out.wav output.wav Se você não quiser usar a aplicação Set antes de cada comando Dial() você pode usar a seção “globals”. [globals] DYNAMIC_FEATURES=>automon 10.8 Música em espera – Music on hold Na versão 1.2 ficou bastante simplificado o usa da música em espera. Já não é necessário usar o mpg123 como na versão 1.0.x. Siga os passos abaixo para habilitar a música em espera. Edite os arquivos para habilitar música em espera No arquivo /etc/asterisk/zapata.conf, adicione a linha: [channels] musiconhold=default Uma coisa importante é descompactar os arquivos em MP3 para o formato RAW. Isto vai reduzir bastante a carga de CPU usada pela música em espera pois não será necessária decodificação MP3 em tempo real. Se você compilar o sox com suporte à MP3 você pode usar os comandos abaixo. sox -c 1 exemplo.mp3 -t raw -r 8000 -c 1 -s -w exemplo.raw Se você tiver o sox sem suporte à mp3 você pode usar:
  • 267. 10.8 Música em espera – Music on hold | 251 $lame --decode exemplo.mp3 exemplo.wav $ sox -V exemplo.wav -r 8000 -c 1 -w exemplo.raw Edite o arquivo /etc/asterisk/musiconhold.conf [default] mode=files directory=/var/lib/asterisk/mohmp3 Você deve reiniciar o asterisk após alterar o arquivo musiconhold.conf Coloque seus arquivos em formato .raw no diretório /var/lib/asterisk/mohmp3 No plano de discagem, você deve configurar a música em espera como no exemplo abaixo: Exten=>100,1,SetMusicOnHold(default) Exten=>100,2,Dial(Zap/2) Exemplos: Configurando o arquivo extensions.conf para testar MusicOnHold [local] exten => 6601,1,WaitMusicOnHold(30)
  • 268. 252 Capítulo 10: Configurando recursos avançados 10.9 Questionário 1. Com relação à Call Parking assinale as afirmativas verdadeiras. Por Default a extensão 800 é usada para Call Parking Quando for para o outro telefone para disque 700 para recuperar a chamada Por Default a extensão 700 é usada para Call parking Digite a extensão anunciada para recuperar a chamada 2. Para que o Call Pickup funcione é preciso que as extensões estejam no mesmo _____. No caso de extensões Zap isto é configurado em _____. 3. No caso de transferência de chamadas existem as transferências __________, onde o ramal de destino não é consultado antes e a transferência __________ onde é possível verificar se o usuário está na extensão. 4. Para fazer uma transferência assistida você usa o __ enquanto para fazer uma transferência às cegas (blind) você usa ___. #1, #2 #2, #1 #3, #1 #4, #2 5. Para fazer conferência no Asterisk é necessário usar o aplicativo __________. 6. Se for necessário administrar uma conferência, você pode usar o aplicativo _______ e tirar um usuário da sala. MeetMe() MeetMeConsole() MeetMeAdministrator() MeetmeAdmin()
  • 269. FiladeClientes 0800 Agente1 Agente2 AgenteN DAC Ringall,RoundRobin,Rrmemory, LeastRecent,Priority DAC Distribuição automática de chamadas. 11.1 Objetivos Ao final deste capítulo você deve ser capaz de: • Compreender a utilidade do DAC. • Compreender o seu funcionamento básico. • Instalar e configurar o DAC 11.2 Introdução Filas de atendimento permitem que as chamadas de entrada no PABX possam ser tratadas de forma mais eficiente. De uma forma geral os seguintes passos são executados em uma fila de distribuição de chamadas. 1. As chamadas de entrada são colocadas na fila. 2. Membros da fila atendem (extensões que autenticaram como agentes). 3. Uma estratégia de gerenciamento e distribuição da fila é usada. Capítulo 11
  • 270. 254 Capítulo 11: DAC – Distribuição Automática de Chamadas 4. É tocada música enquanto o usuário espera na fila. 5. São feitos anúncios para membros e para quem está na fila. A principal aplicação para filas é o atendimento dentro de uma empresa ou Call Center. Usando filas você evita de perder chamadas quando seus agentes estão ocupados e melhora a produtividade na medida em que só distribui para àqueles que estão prontos para atender. Outro ponto chaves das filas de atendimento e distribuição automática de chamadas são as estatísticas que podem ser geradas como TME (tempo médio de espera), TMA (tempo médio de atendimento), chamadas abandonadas, que permitem que você possa dimensionar cientificamente seu atendimento. Filas são definidas no arquivo “queues.conf”. Agentes são pessoas que respondem às chamadas que foram colocadas em uma fila específica. Um agente se autentica indicando que está pronto para receber uma chamada, agentes são definidos no arquivo agents.conf. O Asterisk transfere uma chamada recebida para a fila, que é então transferida para um agente disponível. 11.3 Membros Membros são aqueles canais que estão ativos e respondendo à fila. Membros podem ser canais diretos (ex. telefones conectados ao Asterisk). Você pode definir também membros como indivíduos que se autenticam de qualquer conexão para receber uma chamada. Agentes são definidos no arquivo agentes.conf. O login dos agentes é feito através da aplicação agentlogin. 11.4 Estratégias Chamadas são distribuídas entre os membros de uma fila de acordo com uma entre várias estratégias. • ringall: Toca todos os canais disponíveis até que um atenda. • roundrobin: Distribui igualmente as chamadas pelas interfaces. • leastrecent: Distribui para a interface que menos recebeu chamadas. • fewestcalls: Toca aquela com menos chamadas completadas. • random: Toca uma interface aleatória
  • 271. 11.5 Menu para o usuário | 255 • rrmemory: Roundrobin com memória, se lembra onde deixou a última chamada. 11.5 Menu para o usuário Você pode definir um menu para o usuário, enquanto ele estiver esperando. Para este menu, você pode usar extensões de um dígito. Para habilitar esta opção, defina o contexto para o menu na configuração da fila. 11.6 Novos recursos Queue() agora tem opções para penalidade (penalty), tempo para se arrumar (wrapuptime) e prioridade (priority). Estes recursos foram adicionados ao sistema de filas do Asterisk. Prioridade funciona assim: Os novos recursos permitem que as filas atuem como filas de prioridade, além de modo atual FIFO (primeiro que entra é o primeiro que saí). Isto dá a habilidade de enfileirar uma chamada não no fim da fila, mas em qualquer lugar dela de acordo com a prioridade da chamada. Agora você pode ter uma única fila atendendo as chamadas ordenadas do mais importante para o menos importante. A prioridade de uma chamada entrando na fila é determinada por uma variável especial, QUEUE_PRIO. Valores mais altos da variável significam maior prioridade. Se a variável não receber um valor, todas as chamadas têm a mesma prioridade, por default (FIFO). Exemplo: Clientes importantes exten=>111,1,Playback(welcome) exten=>111,2,SetVar(QUEUE_PRIO=10) exten=>111,3,Queue(support) Clientes menos importantes exten=>112,1,Playback(welcome) exten=>112,2,SetVar(QUEUE_PRIO=5) exten=>112,3,Queue(support) 11.7 Configuração 11.7.1 Lista de Tarefas
  • 272. 256 Capítulo 11: DAC – Distribuição Automática de Chamadas 1. Criar a fila de atendimento (obrigatório). 2. Configurar os agentes (opcional). 3. Criar os agentes de atendimento (opcional). 4. Colocar a fila no plano de discagem (obrigatório). 5. Configurar a gravação dos agentes (opcional). 6. Verificar o funcionamento com show agents e show queues. 11.7.2. Criar a fila de atendimento. queues.conf [telemarketing] music = default ;announce = queue-markq ;context = qoutcon timeout = 2 retry = 2 maxlen = 0 member => Agent/300 member => Agent/301 [auditoria] music = default ;announce = queue-markq ;context = qoutcon timeout = 15 retry = 5 maxlen = 0 member => Agent/600 member => Agent/601 11.7.3 Definir parâmetros dos agentes. agents.conf [agents][agents][agents][agents] ;Define autologoff se apropriado. Isto é quanto tempo o telefone vai tocar sem ;resposta antes que o agente seja automaticamente desconectado da fila (em ;segundos).Note que se este valor for maior que o valor de timeout da fila,os ;agentes não serão removidos. autologoff=15autologoff=15autologoff=15autologoff=15 ; Define ackcall para pedir uma confirmação por '#' quando um ; agente se loga sobre agentcallpark. Default é "yes". ;ackcall=yes;ackcall=yes;ackcall=yes;ackcall=yes ; Define o tempo de wrapuptime. Esta é a quantidade mínima de tempo que ; o agente tem após desconectar antes que possa receber uma nova ligação. ;É o tempo que o agente tem por exemplo para dar andamento ao pedido ; do cliente. (Em milisegundos). ;wrapuptime=500;wrapuptime=500;wrapuptime=500;wrapuptime=5000000 ;Define a música em espera para os agents. ;musiconhold => music_class musiconhold => defaultmusiconhold => defaultmusiconhold => defaultmusiconhold => default
  • 273. 11.7 Configuração | 257 ;Um beep opcional para tocar para os agentes com conexão ;permanente ;custom_beep=beep;custom_beep=beep;custom_beep=beep;custom_beep=beep ;Grupos para agents (pode mudar no meio do arquivo apenas); group=group=group=group=1111 11.7.4 Criar os agentes no arquivo agents.conf ;agent => agentid,agentpassword,name [agents] agent => 300,300,Test Rep - 300 agent => 301,301,Test Rep . 301 agent => 600,600,Test Ver - 600 agent => 601,601,Test Ver . 601 11.7.5 Colocar a fila no plano de discagem. extensions.conf ; Fila telemarketing. exten=>_0800XXXXXXX,1,Answer exten=>_0800XXXXXXX,2,SetMusicOnHold(default) exten=>_0800XXXXXXX,3,DigitTimeout,5 exten=>_0800XXXXXXX,4,ResponseTimeout,10 exten=>_0800XXXXXXX,5,Background(welcome) exten=>_0800XXXXXXX,6,Queue(telemarketing) ; Transfere para a fila auditoria exten => 8000,1,Queue,(Auditoria) ; Conecta à auditoria exten => 8000,2,Playback(demo-echotest) ; Nenhum auditor está disponível exten => 8000,3,Goto(8000,1) ; Verifica o auditor novamente ; Login dos agents para as fila telemarketing (0800) e auditoria (8000) exten => 9000,1,Wait,1 ; levemente pausada, não necessária exten => 9000,2,AgentLogin() ; Irá receber ‘login inválido’ entre com o número do agente. 11.7.6 Configurar a gravação queues.conf ;Habilita a gravação de chamadas endereçadas aos agentes. recordagentcalls=yesrecordagentcalls=yesrecordagentcalls=yesrecordagentcalls=yes ;Formato usado para gravar as chamadas (wav, gsm, wav49). Default é ;"wav". recordformat=gsmrecordformat=gsmrecordformat=gsmrecordformat=gsm ;Insere no campo usuário do CDR o nome da gravação criada ;Default, desligado ;createlink=yes;createlink=yes;createlink=yes;createlink=yes ;Texto à ser adicionado à gravação, permite formar um link url. ;urlprefix=http://host.domain/calls/
  • 274. 258 Capítulo 11: DAC – Distribuição Automática de Chamadas ;O diretório opcional para salvar as conversações ;O padrão é: /var/spool/asterisk/monitor savecallsin=/var/callssavecallsin=/var/callssavecallsin=/var/callssavecallsin=/var/calls 11.7.7 Aplicações de apoio para as filas. • AddQueueMember: Dinamicamente adiciona um membro na fila. • RemoveQueueMember: Dinamicamente remove um membro da fila. • AgentLogin: Login do agente na fila de chamadas. • AgentCallBackLogin: Outro tipo de login. Linha de comando na interface de linha de comando • show agents: Mostra os agentes. • show queues: Lista todos os agentes. • show queue <name>: Mostra dados de uma fila específica. 11.8 Funcionamento das filas 11.8.1 Login do Agente A aplicação de AgentLogin é usada para logar os agents. Através do uso de filas, você pode enviar chamadas para atendentes. Sintaxe: Agentlogin([agentnumber]) Nota: Se o número agente não é passado, uma mensagem de login inválido será tocada e pedirá o número do agente e senha. Pode ser usado também o aplicativo AgentCallBackLogin(), neste caso o agente irá colocar o telefone no gancho e quando alguém estiver na fila o telefone do agente será chamado, ao invés de ficar o tempo todo aberto como o AgentLogin(). Exemplo: Discagem de saída passada aos agentes, baseado em filas. Parte 1: Login do agente
  • 275. 11.8 Funcionamento das filas | 259 Um agente da fila telemarketing tira o telefone do gancho e disca #9000, ele ouve a mensagem de login inválido (e é pedido o número e senha). A fila auditoria segue o mesmo processo. A fila no qual ele termina depende da separação em agentes.conf. Parte 2: Fila Uma vez na fila, o agente irá ouvir a MOH (música em espera, se definido), ou nada. Quando uma conexão ocorrer, a chamada é conectada à um agente na fila telemarketing. O agente irá ouvir um beep (A MOH irá parar se estiver tocando), e será conectada àquela chamada. Parte 3: Término da chamada Quando um agente termina com a chamada ele pode: • Pressionar * para desconectar e permanecer na fila telemarketing. • Desligar o telefone, o agente será desconectado da fila telemarketing. • Pressionar #8000 e a chamada será transferida para a fila auditoria.
  • 276. 260 Capítulo 11: DAC – Distribuição Automática de Chamadas 11.9 Questionário 1. Cite quatro estratégias de roteamento do sistema de fila de atendimento. 2. É possível gravar a conversação dos agentes usando _______________ no arquivo agents.conf. 3. Para logar um agente usa-se o comando Agentlogin([agentnumber]). Quando o agente termina a chamada ele pode pressionar: * para desconectar e permanecer na fila Desligar o telefone e ser desconectado da fila Pressionar #8000 e a chamada será transferida para a fila de auditoria Pressionar # para desligar. 4. As tarefas obrigatórias para configurar uma fila de atendimento são: Criar a fila Criar os agentes Configurar os agentes Configurar a gravação Colocar no plano de discagem 5. Qual a diferença entre os aplicativos AgentLogin() e AgentCallBackLogin(). 6. Quando em uma fila de atendimento, você pode definir um determinado número de opções que o usuário pode discar. Isto é feito incluindo um __________ na fila. Agente Menu Contexto Aplicativo
  • 277. 11.9 Questionário | 261 7. As aplicações de apoio AddQueueMember(), AgentLogin() , AgentCallBackLogin e RemoveQueueMember() devem ser incluídas no: __________ Plano de discagem Interface de linha de comando Arquivo queues.conf Arquivo agents.conf 8. É possível gravar os agentes, mas para isto é preciso de um gravador externo. Verdadeiro Falso 9. “Wrapuptime” é o tempo que o agente precisa após o término de uma chamada para se preparar para a próxima ou completar processos em relação a chamada atendida Verdadeiro Falso 10. Uma chamada pode ser priorizada dependendo do CallerID dentro de uma mesma fila. A afirmativa está: Correta Incorreta
  • 278. 262 Capítulo 11: DAC – Distribuição Automática de Chamadas Página deixada intencionalmente em branco
  • 279. O Correio de voz 12.1 Objetivos Ao final deste capítulo você deve ser capaz de: • Compreender para o que serve o Correio de voz. • Compreender o funcionamento básico. • Instalar e configurar o Correio de voz. • Enviar o correio de voz para o e-mail. 12.2 Introdução O recurso de correio de voz permite que uma chamada ocupada ou não atendida seja enviada para uma secretária eletrônica. Uma mensagem de aviso com áudio anexado é enviada para o receptor da mensagem. É um dos recursos padrão do Asterisk. É interessante como sistemas que em uma arquitetura de comutação de circuitos eram até então muito custosos agora com telefonia IP se tornam padrão. 12.3 Lista de tarefas para configuração Para configurar o correio de voz você deve seguir os seguintes passos: 1. Configure o arquivo voicemail.conf para criar os usuários e senhas do voicemail (obrigatório). 2. Configure o arquivo extensions.conf para que uma chamada ocupada ou não atendida seja direcionada para o utilitário VoiceMail(). (obrigatório). 3. Configure uma extensão para que o usuário possa ouvir seu correio de voz e administrá-lo. 12.3.1 Configurando o arquivo voicemail.conf [general] cidinternalcontexts = house-admin, house-toll, house-local, house- intercom-only Capítulo 12
  • 280. 264 Capítulo 12 – O Correio de voz [default] 1234=>1234,SomeUser,email@address.com,pager@address.com,saycid=yes|di alout=fromvm|callback=fromvm|review=yes|operator=yes Veremos mais opções a frente. 12.3.2 Configurando o arquivo extensions.conf Você pode usar uma macro para criar as extensões. [globals] PHONE1=Zap/1 PHONE2=SIP/6002 [macro-oneline] exten=>s,1,Dial(${ARG1},20,t) exten=>s,2,Voicemail(u${MACRO_EXTEN}) exten=>s,3,Hangup exten=>s,102,Voicemail(b${MACRO_EXTEN}) exten=>s,103,Hangup [local] exten=>6601,1,Macro(oneline,${PHONE1}) exten=>6602,1,Macro(oneline,${PHONE2}) 12.3.3 Usando a aplicação VoiceMailMain() exten=>9000,1,VoiceMailMain() Quando você configurar esta linha no arquivo extensions.conf, o VoiceMailMain() vai levá-lo par a um menu de opções onde você poderá executar uma série de opções: Menu • 0 Opções da caixa postal o 1 Grava sua mensagem de não disponível o 2 Grava sua mensagem de ocupado o 3 Grava seu nome o 4 Grava sua mensagem temporária o 5 Muda sua senha o * Retorna ao menu principal • 1 Ler as mensagens de voicemail o 3 Opções avançadas 1 Reply 2 Call Back 3 Envelope 4 Chamada de saída o 4 Toca a mensagem anterior o 5 Repete a mensagem atual o 6 Toca a próxima mensagem
  • 281. 12.3 Lista de tarefas para configuração | 265 o 7 Apaga a mensagem atual o 8 Re-encaminha a mensagem para outra caixa o 9 Salva a mensagem para um folder o * Ajuda o * Sair • 2 Mudança de pastas • Ajuda • # Saída Após gravar uma mensagem (mensagem de entrada, ocupado, não disponível ou nome) 1 – Aceita 2 – Revisão 3 – Regravar 0 - Vai para telefonista 12.3.4 Sintaxe do Voicemail(): VoiceMail([flags]boxnumber[@context][&boxnumber2[@context]][&boxnumbe r3]) Grava o canal, salvando um arquivo de áudio em um dado número de caixa postal, que deve estar configurado no arquivo voicemail.conf. O número de caixa postal deve estar precedido por uma ou mais opções. s: A letra s, se presente, faz com que as instruções ("Please leave your message after the tone. When done, hang up, or press the pound key.") não seja executada. (Em Português “Por favor, deixe sua mensagem após o bip, quando terminar, desligue ou pressione a tecla sustenido”) u: A letra u, se presente , faz com que a mensagem não disponível seja tocada. Por default, a mensagem diz, “A pessoa na extensão .... 1234.... não está disponível” mas o proprietário da caixa postal pode gravar sua própria mensagem de não disponível com o comando Voicemailmain. b: A letra b, se presente, faz com que a mensagem de ocupado seja tocada. Por default a mensagem diz: “A pessoa na extensão 1234 está ocupada” Você não pode especificar ambos o u e o b juntos. Você pode no entanto, combiná-los com s, dando seis possibilidades. • s: Não toca nada
  • 282. 266 Capítulo 12 – O Correio de voz • (Sem opções): Toca instruções • su: Toca mensagem não disponível • u: Toca mensagem não disponível, então instruções • sb: Toca a mensagem de ocupado • b: Toca a mensagem de ocupado, então instruções. Em todos os casos, o arquivo beep.gsm será tocado, antes de começar a gravar. As mensagens de correio de voz serão gravadas no diretório inbox para aquele número de caixa postal de correio de voz. /var/spool/asterisk/voicemail/context/boxnumber/INBOX/ Se o originador pressionar 0 (zero) durante o anuncio, ele será movido para a extensão ‘o’(Out) no contexto atual do voicemail. Isto pode ser usado como saída para a recepcionista. Se você não quer isto, apenas configure a extensão para voltar ao voicemail, senão a chamada será desligada. Também durante o áudio, se o originador pressionar: '*'–A chamada pula para a extensão ‘a’ no contexto atual do correio de voz. '#'–A mensagem de boas vindas e/ou instruções são paradas e a gravação começa imediatamente. Quando usando o zero ‘0’ e estrela ‘*’ é importante notar que o contexto que você colocou a aplicação voicemail é irrelevante, o contexto onde foi colocada a caixa postal do correio de voz é que será usado para pular para as extensões ‘a’ ou ‘o’. Se a caixa postal não existir, e existir a prioridade n+101, então esta prioridade será a próxima. Se durante a gravação o originador pressionar ‘#’ ou o limite definido de silêncio estourar, a gravação é parada e a chamada continua na prioridade+1. Certifique-se de fazer algo com o originador depois que ele voltar do voicemail(), pelo menos: exten=>somewhere,5,Playback(Goodbye)
  • 283. 12.4 Arquivo de configuração do VoiceMail. | 267 exten=>somewhere,6,Hangup 12.3.5 Códigos de retorno Retorna -1 em erros ou caixa postal não encontrada, se o usuário desligar. Senão retorna 0. 12.4 Arquivo de configuração do VoiceMail. 12.4.1 Configurações da seção [general]. As configurações da seção geral se aplicam para todos os usuários. As seguintes configurações estão disponíveis. attach Faz com que o asterisk copie uma mensagem de voicemail pra um arquivo de áudio e envie-a ao usuário como um anexo em um e-mail. O padrão é não (no). delete Se configurado para ‘yes’ a mensagem será apagada da caixa de voicemail (após ter sido enviada por e-mail). Nota: Esta configuração nem sempre funciona como uma configuração global. É recomendado que você coloque isto em cada caixa postal que a mensagem deve ser apagada depois de enviada por e-mail. mailcmd Mailcmd permite ao administrador, alterar o comando do e-mail por um comando definido pelo usuário. Mailcmd recebe como comando uma string com a linha de comando desejada. O padrão é ‘/usr/sbin/sendmail –t’ maxsilence Maxsilence define quanto tempo o Asterisk irá esperar por um período contínuo de silêncio antes de terminar uma chamada para o voicemail. O valor padrão é 0, o que significa que o detector de silêncio fica desabilitado e o tempo de espera é infinito. Maxsilence recebe um número inteiro que é o número de segundos que ele irá esperar antes de desconectar. envelope
  • 284. 268 Capítulo 12 – O Correio de voz Envelope controla se o Asterisk irá ou não tocar uma mensagem de envelope (data/hora) antes de tocar a mensagem de voicemail. (yes/no). externnotify Quer rodar um programa externo sempre que um chamador deixar uma mensagem em correio de voz para o usuário. Existe o comando externnotify. Recebe o valor de uma string com o comando a ser executado. silencethreshold As vezes quando usamos o maxsilence, é necessário ajustar a detecção de silêncio para eliminar um disparo falso causado por ruído de fundo.Números maiores permitem mais ruído de fundo. É necessário experimentar até chegar nos valores apropriados. serveremail Esta configuração pode ser usada para identificar a fonte de uma notificação de mensagem de voz. O valor é uma string que pode ser codificada de uma de duas formas.. Se a string está na forma alguem@host.com, então a string será usada como endereço fonte nas notificações por e-mail. Se a string estiver na forma de alguém, então o nome do host da máquina rodando o asterisk será adicionado ao final da string após a inserção do @. maxmessage Define o tempo máximo em segundos de uma mensagem de entrada. Use quando o espaço em disco for limitado. O padrão é 0 que significa sem limite. minmessage Esta configuração pode ser usada para eliminar mensagens que são mais curtas que um determinado número de segundos. O padrão é 0 que significa sem tempo mínimo definido. format Permite a seleção de formato de áudio usado para armazenar as mensagens do correio de voz. O formato é uma string e pode ser wav49|gsm|wav. • wav49: Neste formato o tamanho do arquivo é pequeno e a qualidade boa. É uma boa escolha para mandar mensagens de
  • 285. 12.4 Arquivo de configuração do VoiceMail. | 269 notificação por e-mail, pois tem mais suporte nas estações com Windows. • gsm: Basicamente o mesmo tamanho e qualidade de voz, mas menos suportado pelo cliente. • wav: Formato não compactado, grande no tamanho e não é recomendado. maxgreet Permite ao administrador limitar o comprimento de uma saudação do usuário gravada pelo usuário. O valor é um inteiro definindo o tempo máximo em segundos. O padrão é 0 que significa sem limite. skipms Define o intervalo em milisegundos para usar quando passando a frente ou para trás enquanto uma mensagem está sendo tocada. O valor entrado deve ser positivo e inteiro. O padrão é 3000 (3 segundos) maxlogins Define o número de tentativas de login antes que o Asterisk desconecte o usuário. O valor deve ser inteiro e positivo. O padrão é 3. cidinternalcontexts Define os contextos internos usados para determinar o tipo de anuncio de voz a ser tocado quando lendo a identificação da chamada ou quando o recurso avançado saycid estiver habilitado. Isto altera mensagem de “Chamada de ‘12345678’ para “Chamada da extensão ......”. review Às vezes é interessante deixar o chamado rever a sua mensagem antes de passar a mensagem à sua caixa postal. Os valores podem ser ‘yes/no’. operator Permite ao usuário ir para a telefonista enquanto a mensagem está sendo gravada ou uma vez que a mensagem tenha sido enviada, se a opção review tiver sido configurada. A telefonista deve ser configurada na extensão ‘o’ no contexto do voicemail no arquivo extensions.conf. saycid
  • 286. 270 Capítulo 12 – O Correio de voz Lê de volta o número do chamador antes de tocar a mensagem de entrada, após ser tocada a mensagem de data e hora. dialout Especifica o contexto a ser usado para que uma chamada de saída possa ser usada. Recebe uma string com o contexto. callback Especifica o contexto à ser usado no recurso “retornar a chamada”. Recebe uma string especificando o contexto de saída a ser usado. dbuser Especifica o nome do usuário na base de dados MySQL a ser usado na aplicação de correio de voz. O valor é uma string, o padrão é ‘test’. Note que o Asterisk deve ser compilado para suporte ao MySQL. dbpass Especifica a senha na base dados MySQL a ser usada para a aplicação de correio de voz dbhost Especifica o servidor de base de dados MySQL. O valor é uma string. dbname Especifica o nome da base de dados MySQL. O valor é uma string. dboption Especifica a opção de base de dados Postgres. O valor é uma string. Note que o Asterisk tem de ser compilado para o Postgres para que esta opção funcione. pbxskip Esta configuração muda a linha do assunto Subject:.em uma mensagem de notificação. Esta configuração recebe ‘yes/no’. O padrão ‘no’. Quando em ‘yes’ a linha do assunto Subject: terá “Subject: New message M em Mailbox B”. Quando setado para ‘no’ a linha do assunto terá “Subject: [PBX]: New message M in mailbox B”. fromstring
  • 287. 12.4 Arquivo de configuração do VoiceMail. | 271 Esta configuração permite ao administrador substituir a porção da linha “From:” na mensagem de notificação. Recebe uma string. emailsubject Esta configuração substitui completamente a linha assunto Subject: . O valor passado é uma string. emailbody Substitui a mensagem normal de texto vista no corpo da mensagem de notificação do voicemail. Também suporte a substituição de variáveis. para torná-la mais legível. As variáveis são abordadas mais a frente. exitcontext Contexto de saída a deixar o usuário após ter pressionado * ou 0 para sair do voicemail. nextaftercmd Se configurado para “yes” após apagar a mensagem de voicemail, o sistema automaticamente irá tocar a próxima mensagem.
  • 288. 272 Capítulo 12 – O Correio de voz 12.4.2 Variáveis para emailsubject e emailbody. • VM_NAME • VM_DUR • VM_MSGNUM • VM_MAILBOX • VM_CIDNUM • VM_CIDNAME • VM_CALLERID • VM_DATE 12.4.3. Configurações para as seções [CONTEXT] A parte final do voicemail.conf contém um ou mais contextos. [context_section] extension_number => voicemail_password,user_name,user_email_address,user_pager_email_address,us er_option(s) Após a definição da seção contexto uma entrada para cada caixa de correio deve existir neste contexto. Os parâmetros estão descritos abaixo: • extension_number: é o número da extensão que será designada para esta caixa de correio de voz. Existem cinco parâmetros que definem a configuração do correio de voz para esta entrada: • voicemail_password: Contém a senha numérica para esta caixa de correio de voz. • user_name: Campo alfanumérico com o primeiro e ultimo nome do usuário. • user_email_address: Endereço de e-mail para notificação. • pager_email_address: pode ser configurado para o endereço de e-mail de um pager de forma a quando receber um correio de voz ser notificado em um celular.
  • 289. 12.5 Interface Web para o Correio de voz. | 273 • user_option(s):Campo a ser usado para substituir valores definidos na seção geral. Existem 9 pares do tipo “configuração=valor” que podem ser especificados. As opções devem ser separados pela barra vertical (|). As nove configurações são: attach, serveremail,tz,saycid, review, operator, callback, dialout, e exitcontext. 12.5 Interface Web para o Correio de voz. Existe um script em Perl na distribuição fonte chamado vmail.cgi, localizado em /usr/src/asterisk/vmail.cgi. Note que o make install não instala esta interface à menos que você rode make webvmail separadamente. Este script requer que o Perl e Perl- suidperl estejam instalados além do Web Server. Este script pode precisar alguma edição antes de funcionar na sua instalação. Copie /usr/asterisk/images/*.gif para /asterisk na árvore html. O script precisa passar a executável: chmod +x vmail.cgi 12.6 Sumário Neste capítulo você aprendeu os passos necessários para a configuração do correio de voz. Conheceu também os arquivos de configuração e os principais arquivos correlatos.
  • 290. 274 Capítulo 12 – O Correio de voz 12.7 Questionário 1. Os arquivos envolvidos para a configuração do Correio de voz são: sip.conf iax.conf asterisk.conf voicemail.conf vmail.conf extensions.conf 2. Na aplicação VoiceMail(), os parâmetros “u”e “b” são ___________ e __________ respectivamente. Eles servem para determinar que tipo de mensagem o correio de voz irá tocar para o usuário. Ocupado, Livre Ocupado, Não atende Não atende, Ocupado Livre, Preso 3. A aplicação VoiceMailMain() é usada para que o usuário que chamou deixe sua mensagem. A afirmativa está: Correta Incorreta 4. Para sair do VoiceMailMain você deve digitar: 0 * # 9999 5. Escreva abaixo a sintaxe do comando VoiceMail() 6. Na seção [general] do arquivo voicemail.conf, o parâmetro attach=yes vai fazer com que uma notificação por e-mail seja enviada ao usuário com o arquivo de áudio anexado. A afirmação está: Correta Incorreta
  • 291. 12.7 Questionário | 275 7 A opção “delete” faz com que todas as mensagens sejam apagadas da caixa postal antes de terem sido enviadas para a caixa de correio do usuário. Correta Incorreta 8. O formato mais adequado para as mensagens de áudio é o “WAV”, pois tem mais suporte de estações Windows. Correta Incorreta 9. É possível personalizar as mensagens de correio com emailsubject e emailbody. Que variável pode ser usada para indicar o CallerID na mensagem: 10. O nome do CGI para instalar a interface Web do voicemail é o ____________.
  • 292. 276 Capítulo 12 – O Correio de voz Esta página foi deixada intencionalmente em branco
  • 293. Bilhetagem no Asterisk 13.1 Introdução O Asterisk como em outras plataformas de telefonia, permite a bilhetagem dos ligações telefônicas. Existêm diversos programas no mercado que importam os bilhetes gerados pelas centrais telefônicas e tratam estes bilhetes para fins de conferência com a conta telefônica, controles internos, estatísticas entre outros fins. 13.2 Objetivos: Ao final deste capítulo o leitor deverá estar apto à: • Entender onde e em que formato são gerados os bilhetes • Gerar os bilhetes do Asterisk em uma base de dados MySQL • Implantar um sistema de autenticação de discagem 13.3 Formato dos bilhetes do Asterisk O Asterisk gera os bilhetes, também conhecidos como CDR (Call Detail Records, ou, registro detalhado das chamadas), para cada chamada. Os registros são armazenados em um arquivo texto separado por vírgula, também conhecido como CSV (comma separated value), no diretório /var/log/asterisk/cdr-csv. Os principais campos da bilhetagem são: CDR Descrição Tipo Tam. Accountcode Número da conta usado String 20 Src Identificação da origem String 80 Dst Extensão de destino String 80 Dcontext Contexto de destino String 80 Clid Texto de identificação de chamada String 80 Channel Canal usado String 80 Dstchannel Canal de destino String 80 Lastapp Última aplicação String 80 Lastdata Últimos parâmetros da aplicação String 80 Start Início da chamada Date/Time Answer Resposta da chamada Date/Time End Fim da chamada Date/Time Duration Tempo total desde a discagem,em segundos Integer Capítulo 13
  • 294. 278 Capítulo 13 Bilhetagem no Asterisk Billsec Tempo total bilhetável, em segundos Integer Disposition O que aconteceu com a chamada: ANSWERED (atendida), NO ANSWER (não atendida), BUSY (ocupada), FAILED (falhou) String 20 Amaflags Indicador, DOCUMENTATION (documentar), BILLING (bilhetar), OMMIT (omitir), IGNORE (ignorar). String 20 User field Campo definido pelo usuário String 255 Segue um exemplo em duas linhas do arquivo csv importado para uma tabela. AccountCode CallerID No. Extension Contexto CallerID texto Canal Origem Canal Destino 1234 4830258576 *72*1234*8584 admin "Alexandre Keller" <4830258576> SIP/8576-5f30 SIP/8584-9153 1234 4830258576 *72*1234*8584 admin "Alexandre Keller" <4830258576> SIP/8576-96f5 SIP/8584-3312 1234 4830258576 *72*1234*8584 admin "Alexandre Keller" <4830258576> SIP/8576-74ac SIP/8584-297b 1234 4830258576 2012348584 admin "Alexandre Keller" <4830258576> SIP/8576-2c5d SIP/8584-9870 1234 4830258584 2012348576 default "Luiz Eduardo Dagios" <4830258584> SIP/8584-03fd SIP/8576-645c Aplicação Parâmetros Início Atendimento Fim Dur. Bil. Disposição Amaflags Dial SIP/8584|30|tT 27/3/2006 16:05 27/3/2006 16:05 27/3/2006 16:05 5 3 ANSWERED DOCUMENTATION Dial SIP/8584|30|tT 27/3/2006 16:16 27/3/2006 16:16 27/3/2006 16:16 6 4 ANSWERED BILLING Dial SIP/8584|30|tT 27/3/2006 16:22 27/3/2006 16:22 27/3/2006 16:22 9 5 ANSWERED BILLING Dial SIP/8584|30|tT 27/3/2006 16:37 27/3/2006 16:37 27/3/2006 16:37 5 2 ANSWERED BILLING Dial SIP/8576|30|tT 27/3/2006 16:37 27/3/2006 16:37 27/3/2006 16:37 9 5 ANSWERED BILLING 13.4 Códigos de conta e contabilização automática. Você pode especificar códigos de conta e os indicadores de bilhetagem (AMA – Automated Message Accounting) em cada um dos canais (sip.conf, iax.conf e zapata.conf). Para cada canal você pode especificar os indicadores de bilhetagem (amaflags) • Default: Configura o padrão do sistema • Omit: Não registrar as chamadas • Billing: Marcar o registro para bilhetar • Documentation: Marcar o registro para documentação Assim como você pode configurar os amaflags, você pode configurar para cada canal um código de contabilização. O código da conta pode ser uma string de até 20 caracteres. Com ele você pode contabilizar por departamento por exemplo: vendas, produção, assistência técnica. Exemplo: (sip.conf)
  • 295. 13.5 Métodos de armazenamento do CDR | 279 [8576] amaflags=default accountcode=Suporte type=friend username=8576 13.5 Métodos de armazenamento do CDR A bilhetagem pode ser armazenada de diversas formas. As formas mais importantes na nossa opinião são CSV, pois pode ser importada para planilhas e para softwares de bilhetagem de forma fácil. A armazenagem em MySQL também é muito comum a permite o uso de interfaces gráficas de visualização da bilhetagem. A terceira forma de armazenamento de grande interesse é o odbc, pois permite armazenar em diversos bancos de dados corporativos principalmente o Oracle. 13.5.1 Drivers de armazenamento disponíveis Asterisk cdr_csv – Arquivos texto separados em vírgula Asterisk cdr_SQLite – Banco de dados SQLite Asterisk cdr_pgsql – Banco de dados Postgres Asterisk cdr_odbc – Banco de dados suportado por unixODBC Asterisk cdr_mysql – Banco de dados MySQL Asterisk cdr_FreeTDS – Bancos de dados Sybase e MSSQL Asterisk cdr_yada – Banco de dados yada Asterisk cdr_manager – bilhetagem para o Asterisk Manager O Asterisk bilheta para todos os módulos que estiverem ativos no arquivo /etc/asterisk/modules.conf. Se o arquivo estiver com a opção autoload=yes, ele carrega todos os módulos do diretório especificado. 13.5.2 Armazenando em CSV Como já dissemos o Asterisk coloca os dados em um arquivo CSV por default. Isto é feito pelo módulo cdr_csv.so. Se você não estiver vendo os dados nos arquivos verifique se o Asterisk está carregando-o usando o comando “show modules” se não estiver, verifique a carga em /etc/asterisk/modules.conf. 13.5.3 Armazenando em uma base de dados MySQL. O Asterisk também pode armazenar registros de CDR em um banco de dados MySQL. Devido ao licenciamento das bibliotecas do MySQL a aplicação de bilhetagem em MySQL não é mais parte integrante do Asterisk. Ele vem com o arquivo addons que você terá de descompactar a compilar se desejar usar a aplicação.
  • 296. 280 Capítulo 13 Bilhetagem no Asterisk Siga as seguintes instruções para compilar o suporte a MySQL no se Asterisk Instale os pacotes MySQL e MySQL-devel #apt-get install mysql-server-4.1 #apt-get install libmysqlclient12-dev #cd /usr/src #wget http://ftp.digium.com/pub/asterisk/releases/asterisk-addons- 1.2.3.tar.gz #tar –xzvf asterisk-addons-1.2.3.tar.gz #cd asterisk-addons-1.2.3 #make clean #make #make install Um exemplo da configuração do arquivo cdr_mysql.conf pode ser vista abaixo: [global] hostname=localhost dbname=asteriskcdrdb password=segredo user=asteriskuser port=3306 ;sock=/var/run/mysqld/mysqld.sock ;userfield=1 Edite o arquivo modules.conf para incluir a carga do módulo cdr_addon_mysql.so Criando o banco de dados para o cdr_addon_mysql mysql --user=root --password=password -h dbhost CREATE DATABASE asteriskdb; GRANT INSERT ON asterisk.* TO asterisk@localhost IDENTIFIED BY 'asterisk'; USE asteriskdb; CREATE TABLE `cdr` ( `calldate` datetime NOT NULL default '0000-00-00 00:00:00', `clid` varchar(80) NOT NULL default '', `src` varchar(80) NOT NULL default '', `dst` varchar(80) NOT NULL default '', `dcontext` varchar(80) NOT NULL default '', `channel` varchar(80) NOT NULL default '', `dstchannel` varchar(80) NOT NULL default '', `lastapp` varchar(80) NOT NULL default '', `lastdata` varchar(80) NOT NULL default '', `duration` int(11) NOT NULL default '0', `billsec` int(11) NOT NULL default '0', `disposition` varchar(45) NOT NULL default '',
  • 297. 13.6 Aplicações | 281 `amaflags` int(11) NOT NULL default '0', `accountcode` varchar(20) NOT NULL default '', `userfield` varchar(255) NOT NULL default '' ); ALTER TABLE `cdr` ADD INDEX ( `calldate` ); ALTER TABLE `cdr` ADD INDEX ( `dst` ); ALTER TABLE `cdr` ADD INDEX ( `accountcode` ); Uma dica de uso é copiar e colar estes commandos SQL em um arquivo texto como cdr.sql , então executar o seguinte comando. mysql --user=username --password=password nomedobanco <cdr.sql 13.6 Aplicações Diversas aplicações estão relacionadas à bilhetagem. 13.6.1 SetAccount Configura um código de conta antes de se chamar uma aplicação como o Dial(). Formato: SetAccount(account) O código da conta pode ser verificado através da variável ${ACCOUNTCODE} 13.6.2 SetAMAFlags SetAmaFlags(flags) Configura o indicador de bilhetagem, as opções são default, omit, documentation, billing. 13.6.3 NoCDR() Faz com que nenhum CDR seja gravado para uma certa chamada. 13.6.4 ResetCDR() Apaga um CDR, opcionalmente armazenando o CDR atual antes de zerá- lo se a opção w for especificada. 13.6.5 Set(CDR(userfield)=Value) Este commando configure o campo definido pelo usuário do CDR. Se você estiver usando o cdr_addon_mysql certifique-se de ter userfield=1 no
  • 298. 282 Capítulo 13 Bilhetagem no Asterisk cdr_mysql.conf. Se estiver usando cdr_csv.c, edite o arquivo fonte recompile para habilitar o campo do usuário. O comando não tem efeito se não estiver habilitado. 13.6.6 AppendCDRUserField(Value) Adiciona dados ao campo definido pelo usuário (userfield) no CDR. 13.7 Usando autenticação dos usuários Esta aplicação permite autenticar um usuário antes de fazer uma ligação. A autenticação pode ocorrer com uma senha colocad diretamente no comando, com um arquivo de senhas quando precedido por “/” ou usando o AstDB. Formato: Authenticate(password[|options]) Authenticate(/passwdfile|[|options]) Authenticate(</db-keyfamily|d>options) Opções: • a - Configura o código da conta no CDR com o a senha que for entrada. Isto é útil se for desejado bilhetar estas ligações. • d – Interpreta o caminho como uma família chave no banco de dados • r – Remove a chave da base de dados após um tentativa de autenticação com sucesso (funciona apenas com a opção d). • j – Pula para a prioridade n+101 no caso de autenticação inválida. Exemplo: (Autenticação para ligações internacionais) exten=_000.,1,Authenticate(/senha|daj) exten=_000.,2,Dial(Zap/g1/${EXTEN:1},20,tT) exten=_000.,3,Hangup() exten=_000.,102,Playback(naoautorizado) exten=_000.,103,Hangup() Para cadastrar as senhas use a linha de commando na console CLI> database put senha 123456 1 13.8 Usando as senhas do Correio Eletrônico Faz o mesmo que o Authenticate, mas usa a base de dados do correio de voz para a autenticação dos usuários. VMAuthenticate([mailbox][@context][|options])
  • 299. 13.8 Usando as senhas do Correio Eletrônico | 283 Se uma caixa postal for especificada, apenas a senha da caixa postal será considerada válida. Se a caixa postal não for especificada, a variável de canal AUTH_MAILBOX será configurada com a caixa postal autenticada. Se a opção contém ‘s’ nenhum prompt será executado. Exemplo: (Autenticação para ligações internacionais) exten=_000.,1,VMAuthenticate(${CALLERID}@ramais|ajs) exten=_000.,2,Dial(Zap/g1/${EXTEN:1},20,tT) exten=_000.,3,Hangup() exten=_000.,102,Playback(naoautorizado) exten=_000.,103,Hangup()
  • 300. 284 Capítulo 13 Bilhetagem no Asterisk 13.9 Sumário Neste capítulo aprendemos como atribuir códigos de contabilização aos canais (ramais e troncos) do Asterisk. Aprendemos como configurar a bilhetagem para ser armazenada em arquivos texto e também em bases de dados. Por fim entendemos os mecanismos de autenticação que permitem um controle maior da contabilização no Asterisk. 13.10 Questionário 1. Por default o Asterisk bilheta as chamadas para /var/log/asterisk/cdr- csv. Falso Verdadeiro 2. O Asterisk só permite bilhetar para bases de dados: MySQL Oracle nativo MSSQL Arquivos texto CSV Bases de dados pelo unix_ODBC 3. O Asterisk bilheta apenas em um tipo de armazenagem Falso Verdadeiro 4. Os indicadores disponíveis para a bilhetagem (amaflags) são: Default Omit Tax Rate Billing Documentation 5. Se você deseja associar um departamento ou um código de contabilização ao CDR, você deve usar o comando ____________. O código da conta pode ser verificado pela variável __________________. 6. A diferença entre as aplicações NoCDR() e ResetCDR() é que o NoCDR() não gera nenhum bilhete, enquanto o ResetCDR() zera o tempo da chamada no registro.
  • 301. 13.10 Questionário | 285 Falso Verdadeiro 7. Para usar um campo definido pelo usuário (UserField) é necessário recompilar o Asterisk. Falso Verdadeiro 8. Os três métodos de autenticação disponíveis para a aplicação Authenticate() são: Senha Arquivo de senhas Banco berkley DB (dbput e dbget) VoiceMail 9. As senhas de correio eletrônicos são especificadas em outra parte do arquivo voicemail.conf e não são as mesmas do correio de voz. Falso Verdadeiro 10. A opção do comando Authenticate __ faz com que a senha seja colocada no código de contabilização do cdr. a j d r
  • 302. 286 Capítulo 13 Bilhetagem no Asterisk Página deixada intencionalmente em branco
  • 303. Integração do Asterisk usando AGI e AMI 14.1Introdução Em muitas situações será necessário estender a funcionalidade do Asterisk usando aplicações externas. Em centrais telefônicas convencionais, isto era normalmente feito através de uma interface de integração telefonia computador conhecida como CTI. O Asterisk como já é construído sob um computador, tem diversas formas de integração e não fica limitado apenas a uma interface de CTI. O ponto negativo é que uma interface CSTA padronizada ainda não está disponível. Neste capítulo além da interface de CTI do Asterisk conhecida como AMI (Asterisk Manager Interface), veremos o uso de AGIs, do comando “asterisk –rx” e do aplicativo System(). A partir destes recursos é possível construir aplicações de URA, discadores, “popup” de tela, monitoramento e relatórios. Considerações sobre escalabilidade e segurança também serão abordadas. 14.2 Objetivos deste capítulo Ao final deste capítulo o leitor deverá estar apto à: • Descrever as opções de acesso ao Asterisk por programas externos • Usar o comando asterisk –rx para executar um comando de console • Usar a aplicação System() para chamar programas externos no plano de discagem • Explicar o que é e como funciona o AMI • Configurar o arquivo manager.conf e habilitar a interface de gerenciamento. • Executar um comando no Asterisk através do AMI usando PHP. • Instalar e configurar o Asterisk Manager Proxy • Descrever os diversos tipos de AGI (DeadAGI, AGI, EAGI, FastAGI) • Executar um AGI simples. 14.3 Principais formas de extender o Asterisk O Asterisk possui diversas formas de interfacear com programas externos e em muitos casos ele faz uso destas interfaces em aplicativos como o correio de voz por exemplo onde ele executa um comando externo do tipo sendmail. Vamos abordar as seguintes formas de estender o Asterisk: Capítulo 14
  • 304. 288 Capítulo 14 – Integração do Asterisk usando AMI e AGI • Linha de comando da console • Aplicação System() • Asterisk Manager Interface - AMI • Asterisk Gateway Interface - AGI 14.4 Estendendo o Asterisk através da console. Uma aplicação pode facilmente comandar o Asterisk através da console usando o comando: asterisk –rx <comando> Por exemplo: #asterisk –rx “stop now” E mesmo um comando que tenha um output como: asterisk:~# asterisk -rx "sip show peers" Name/username Host Dyn Nat ACL Port Status 4000/4000 10.1.1.6 D 5060 Unmonitored 1 sip peers [1 online , 0 offline] 14.5 Estendendo o Asterisk usando o aplicativo System A aplicação System() permite a chamada de uma aplicação externa a partir do plano de discagem. asterisk*CLI> show application system asterisk*CLI> -= Info about application 'System' =- [Synopsis] Execute a system command [Description] System(command): Executes a command by using system(). If the command fails, the console should report a fallthrough. Result of execution is returned in the SYSTEMSTATUS channel variable: FAILURE Could not execute the specified command SUCCESS Specified command successfully executed 14.5.1 Exemplo de uso do aplicação System() Exemplo 1: Pop-up do CallerID da chamada via WindowsPopup. exten => 200,1,NoOp(${CALLERID} ${DATETIME}) exten => 200,2,System(/bin/echo -e "'Incoming Call From: ${CALLERID} r Received: ${DATETIME}'"|/usr/bin/smbclient -M target_netbiosname) exten => 200,3,Dial,sip/sipuser|30|t exten => 200,4,Congestion
  • 305. 14.6 O que é o AMI | 289 Exemplo 2: Envio da imagem recebida para um e-mail através do fax2email exten => fax,1,SetVar(FAXFILE=/var/spool/asterisk/fax/${CALLERIDNUM}.tif) exten => fax,n,SetVar(FAXFILENOEXT=/var/spool/asterisk/fax/${CALLERIDNUM}) exten => fax,n,rxfax(${FAXFILE}) exten => fax,n,System('/usr/bin/fax2mail ${CALLERIDNUM} "${CALLERIDNAME}" FaxNum RecipName email@address.com ${FAXFILENOEXT} p') 14.6 O que é o AMI O AMI (Asterisk Manager Interface) permite a um programa cliente conectar-se a uma instância do Asterisk e emitir comandos ou ler eventos do PABX sobre um fluxo TCP/IP. Integradores vão achar esses recursos particularmente úteis quando tentarem rastrear o estado dos telefones dentro do Asterisk. Um protocolo de linha simples baseado no conceito de chave:valor é utilizado sobre um socket tcp. As linhas são terminadas usando CRLF. O Asterisk em si não está preparado para receber muitas conexões sobre a interface do Manager, por isto se você possui dois ou mais clientes do AMI considere usar um proxy de AMI como AstManProxy. 14.6.1 Que linguagem utilizar ? Hoje é muito difícil selecionar uma linguagem de programação, pois elas são muitas. Existem exemplos de programação de AMI em Java, Perl, Python, PHP, C, C# entre muitas outras. É possível programar o AMI de qualquer linguagem que suporte uma interface sockets ou que simule Telnet. Para este documento, escolhemos PHP pela popularidade e pela facilidade de integração com um Web-browser. 14.6.2 Comportamento do protocolo • Antes de emitir quaisquer comandos para o Asterisk, você deve estabelecer uma sessão de gerenciamento. • A primeira linha de um pacote terá uma chave “Action” quando enviada de um cliente. • A primeira linha de um pacote terá uma chave “Response” ou “Event” quando enviada a partir do Asterisk. • Pacotes podem ser transmitidos em qualquer direção após a autenticação. 14.6.3 Tipos de pacotes O tipo de pacote é determinado pela existência das seguintes chaves:
  • 306. 290 Capítulo 14 – Integração do Asterisk usando AMI e AGI • Action: Um pacote enviado por um cliente conectado ao Asterisk solicitando que uma ação seja feita. Existe um conjunto finito de ações disponíveis para o cliente, determinada pelos módulos atualmente carregados no Asterisk. Só uma ação será processada por vez. O pacote contém o nome da operação e seus parâmetros. • Response: É a resposta enviada pelo Asterisk à última ação solicitada pelo cliente. • Event: Dados pertencendo a um evento gerado de dentro do núcleo do Asterisk ou por um módulo. Ao enviar pacotes do tipo Action para o Asterisk os clientes incluem um parâmetro ActionID. Como não existe nenhuma garantia na ordem das respostas, o ActionID é usado para garantir que uma resposta corresponde à uma determinada ação. Os pacotes de eventos são usados em dois contextos diferentes. De um lado eles informam o cliente sobre mudanças no Asterisk (como novos canais sendo criados e desconectados ou agentes entrando e saindo de uma fila). A segunda forma de uso dos eventos é transportar as respostas a pedidos dos clientes. 14.7 Configurando usuários e permissões Para acessar o AMI é necessário estabelecer uma conexão TCP/IP escutando uma porta TCP (normalmente 5038). Para isto é necessário configurar o arquivo /etc/asterisk/manager.conf e criar uma conta de usuário. Além da conta é necessário configurar um conjunto de permissões. Existe um conjunto finito de permissões, “read” para leitura, “write” para gravação ou ambos. Estas permissões são definidas no arquivo /etc/asterisk/manager.conf . [general] enabled=yes port=5038 bindaddr=127.0.0.1 [admin] secret=senha read=system,call,log,verbose,command,agent,user write=system,call,log,verbose,command,agent,user deny=0.0.0.0/0.0.0.0 permit=127.0.0.1/255.255.255.255
  • 307. 14.7 Configurando usuários e permissões | 291 14.7.1 Logando-se no AMI Para fazer o login e autenticar-se no AMI, você precisa enviar uma ação do tipo “Login” com seu nome de usuário e senha. Algo como abaixo: Action:login Username:admin Secret:senha 14.7.2 Logando-se no AMI via PHP. <?php $socket = fsockopen("127.0.0.1","5038", $errno, $errstr, $timeout); fputs($socket, "Action: Loginrn"); fputs($socket, "UserName: adminrn"); fputs($socket, "Secret: senharnrn"); ?> Se você não quiser receber os eventos, pode usar: <?php $socket = fsockopen("127.0.0.1","5038", $errno, $errstr, $timeout); fputs($socket, "Action: Loginrn"); fputs($socket, "UserName: adminrn"); fputs($socket, "Secret: senharnrn"); fputs($socket, "Events: offrnrn"); ?> 14.7.3 Pacotes do tipo Action Quando você enviar ao Asterisk uma ação, algumas chaves extras podem ser fornecidas como parâmetros. Por exemplo, um número a ser chamado. Isto é feito na forma de passagem de pares chave:valor após o “Action”. É possível também passar variáveis para o plano de discagem. Action: <action type><CRLF> <Key 1>: <Value 1><CRLF> <Key 2>: <Value 2><CRLF> Variable: <Variable 1>=<Value 1><CRLF> Variable: <Variable 2>=<Value 2><CRLF> ... <CRLF> 14.7.4 Comandos do tipo Action
  • 308. 292 Capítulo 14 – Integração do Asterisk usando AMI e AGI Você pode usar o comando show manager commands para descobrir as ações disponíveis na AMI. Na versão 1.2.7 os comandos eram os seguintes. Action Privilege Sinopse AbsoluteTimeout call,all Set Absolute Timeout AgentCallbackLogin agent,all Sets an agent as logged in by callback AgentLogoff agent,all Sets an agent as no longer logged in Agents agent,all Lists agents and their status ChangeMonitor call,all Change monitoring filename of a channel Command command,all Execute Asterisk CLI Command DBGet system,all Get DB Entry DBPut system,all Put DB Entry EventsControl <none> Event Flow ExtensionState call,all Check Extension Status Getvar call,all Gets a Channel Variable Hangup call,all Hangup Channel IAXnetstats <none> Show IAX Netstats IAXpeers <none> List IAX Peers ListCommands <none> List available manager commands Logoff <none> Logoff Manager MailboxCount call,all Check Mailbox Message Count MailboxStatus call,all Check Mailbox Monitor call,all Monitor a channel Originate call,all Originate Call ParkedCalls <none> List parked calls Ping <none> Keepalive command QueueAdd agent,all Add interface to queue. QueuePause agent,all Makes a queue member temporarily unavailable QueueRemove agent,all Remove interface from queue. Queues <none> Queues QueueStatus <none> Queue Status Redirect call,all Redirect (transfer) a call SetCDRUserField call,all Set the CDR UserField Setvar call,all Set Channel Variable SIPpeers System,all List SIP peers (text format) SIPshowpeer System,all Show SIP peer (text format) Status call,all Lists channel status StopMonitor call,all Stop monitoring a channel Se você precisar de um comando específico:
  • 309. 14.7 Configurando usuários e permissões | 293 Show manager command originate: asterisk*CLI> show manager command originate Action: Originate Synopsis: Originate Call Privilege: call,all Description: Generates an outgoing call to a Extension/Context/Priority or Application/Data Variables: (Names marked with * are required) *Channel: Channel name to call Exten: Extension to use (requires 'Context' and 'Priority') Context: Context to use (requires 'Exten' and 'Priority') Priority: Priority to use (requires 'Exten' and 'Context') Application: Application to use Data: Data to use (requires 'Application') Timeout: How long to wait for call to be answered (in ms) CallerID: Caller ID to be set on the outgoing channel Variable: Channel variable to set, multiple Variable: headers are allowed Account: Account code Async: Set to 'true' for fast origination 14.7.5 Pacotes do tipo Event Evento do tipo Link: Descrição: Disparado quando dois canais de voz são conectados e a troca de dados de voz inicia. Notas: Vários eventos de link podem ser vistos para uma única chamada. Isto pode ocorrer quando o Asterisk falha em configurar uma ponte nativa para uma chamada. Nestes casos o Asterisk fica entre os dois telefones e configura normalmente uma tradução de CODECs. Exemplo: Event: Link Channel1: SIP/101-3f3f Channel2: Zap/2-1 Uniqueid1: 1094154427.10 Uniqueid2: 1094154427.11 Evento do tipo unlink Descrição: Disparado quando um link entre dois canais de voz é desligado, um pouco antes de completar a chamada. Exemplo:
  • 310. 294 Capítulo 14 – Integração do Asterisk usando AMI e AGI Event: Unlink Channel1: SIP/101-3f3f Channel2: Zap/2-1 Uniqueid1: 1094154427.10 Uniqueid2: 1094154427.11 14.7.8 Eventos disponíveis no Asterisk AbstractAgentEvent HoldEvent PeerStatusEvent AbstractParkedCallEvent JoinEvent QueueEntryEvent AbstractQueueMemberEvent LeaveEvent QueueEvent AgentCallbackLoginEvent LinkageEvent QueueMemberAddedEvent AgentCallbackLogoffEvent LinkEvent QueueMemberEvent AgentCalledEvent LogChannelEvent QueueMemberPausedEvent AgentCompleteEvent ManagerEvent QueueMemberRemovedEvent AgentConnectEvent MeetMeEvent QueueMemberStatusEvent AgentDumpEvent MeetMeJoinEvent QueueParamsEvent AgentLoginEvent MeetMeLeaveEvent QueueStatusCompleteEvent AgentLogoffEvent MeetMeStopTalkingEvent RegistryEvent AgentsCompleteEvent MeetMeTalkingEvent ReloadEvent AgentsEvent MessageWaitingEvent RenameEvent AlarmClearEvent NewCallerIdEvent ResponseEvent AlarmEvent NewChannelEvent ShutdownEvent CdrEvent NewExtenEvent StatusCompleteEvent ChannelEvent NewStateEvent StatusEvent ConnectEvent OriginateEvent UnholdEvent DBGetResponseEvent OriginateFailureEvent UnlinkEvent DialEvent OriginateSuccessEvent UnparkedCallEvent DisconnectEvent ParkedCallEvent UserEvent DNDStateEvent ParkedCallGiveUpEvent ZapShowChannelsCompleteEvent ExtensionStatusEvent ParkedCallsCompleteEvent ZapShowChannelsEvent FaxReceivedEvent ParkedCallTimeOutEvent HangupEvent PeerEntryEvent HoldedCallEvent PeerlistCompleteEvent 14.8 Asterisk Manager Proxy O Asterisk não foi feito para gerenciar um grande número de conexões à interface do Manager. Por exemplo, se cada supervisor ou agente de um call-center usar o AMI para login e logout de agentes, isto pode tornar o Asterisk instável. Foi desenvolvido um Proxy chamado astmanproxy para resolver este problema. As principais vantagens do Astmanproxy são: • Uma conexão única e persistente no Asterisk • Uma interface TCP mais segura (não root) • Habilidade de filtrar entrada/saída • Menor número de conexões e carga para o Asterisk • Multiplos meios de acesso (padrão, http, xml, csv) • Suporte à SSL • Conexão à múltiplos servidores Asterisk • Formatos de I/O selecionáveis em uma base por cliente
  • 311. 14.8 Asterisk Manager Proxy | 295 Você pode usar o Astmanproxy como base para que uma aplicação baseada em Web ou XML permita acesso por aplicações Windows usando HTTP POST ou HTTP GET e recebendo a saída em HTML. Você pode usar o Astmanproxy como um alimentador XML para um programa .NET que mantém o registro do estado do Asterisk. 14.8.1 Instalando e configurando o astmanproxy Para colocar o Astmanproxy para rodar você vai precisar: Passo 1: Baixar o Astmanproxy Use o sistema subversion para baixar o astmanproxy. svn checkout http://svncommunity.digium.com/svn/astmanproxy/trunk Passo 2: Compilar e Instalar make make install Passo 3 – Editar o arquivo de configuração vi /etc/asterisk/astmanproxy.conf ; astmanproxy.conf ; Asterisk Manager Proxy Configuration Sample ; (C) 2005-2006 David C. Troy - dave@popvox.com ; List of asterisk host(s) you want to proxy ; host = ip_addr, port, user, secret, events, use_ssl host = localhost, 5038, admin, senha, on, off ; Server reconnect interval (in seconds); how often to retry ; Connecting to an asterisk server whose connection was lost retryinterval = 2 ; Number of times to retry connecting to a given server ; use 0 for infinitely, or some finite number maxretries = 10 Passo 4 – Opcionalmente editar outros arquivos de configuração vi /etc/asterisk/astmanproxy.users vi /etc/asterisk/ssl.conf Passo 5 – Inicie o programa astmanproxy
  • 312. 296 Capítulo 14 – Integração do Asterisk usando AMI e AGI Passo 6 – Para ver a saída do output, inicie o astmanproxy no modo debug astmanproxy -dddddd Passo 7 – Para iniciar o astmanproxy em tempo de inicialização: Coloque o seguinte arquivo em /etc/rc.d/rc.local /usr/local/sbin/astmanproxy Mais informações sobre o Astmanproxy podem ser encontradas no arquivo README na distribuição do astmanproxy. 14.9 Asterisk Gateway Interface AGI é uma interface de gateway para o Asterisk similar ao CGI usado pelos servidores Web. Ele permite o uso de diferentes linguagens de programação como o Perl, PHP, C a sua escolha. O AGI é chamado a partir do plano de discagem definido em extensions.conf. A principal aplicação para o AGI são URAs com acesso a banco de dados. BANCO DE DADOS URA Digiteseucódigodesegurança Disque1–Paraconsultaemestoque Digiteocódigodoproduto Disque2–Paraconsultaàdatadeembarque Digiteoseunúmerodepedido Disque3–Paraconsultadepreços Digiteocódigodoitêm Disque4–Paraatendimentopersonalizado Cliente
  • 313. 14.9 Asterisk Gateway Interface | 297 Existem três tipos de AGIs. • AGI Normal: chamado diretamente no servidor Asterisk. • FastAGI: que chama o AGI em um outro servidor a partir de uma interface sockets. • EAGI: dá a aplicação a possibilidade de acessar e controlar o canal de som além da interação com o plano de discagem. • DEADAGI: que dá acesso à um canal mesmo depois do hangup(). Formato da aplicação: asterisk*CLI> show application agi asterisk*CLI> -= Info about application 'AGI' =- [Synopsis] Executes an AGI compliant application [Description] [E|Dead]AGI(command|args): Executes an Asterisk Gateway Interface compliant program on a channel. AGI allows Asterisk to launch external programs written in any language to control a telephony channel, play audio, read DTMF digits, etc. by communicating with the AGI protocol on stdin and stdout. Returns -1 on hangup (except for DeadAGI) or if application requested hangup, or 0 on non-hangup exit. Using 'EAGI' provides enhanced AGI, with incoming audio available out of band on file descriptor 3 Use the CLI command 'show agi' to list available agi commands Você pode verificar os comandos agi existentes usando: asterisk*CLI> show agi answer Answer channel channel status Returns status of the connected channel database del Removes database key/value database deltree Removes database keytree/value database get Gets database value database put Adds/updates database value exec Executes a given Application get data Prompts for DTMF on a channel get full variable Evaluates a channel expression get option Stream file, prompt for DTMF, with timeout get variable Gets a channel variable hangup Hangup the current channel noop Does nothing receive char Receives one character from channels supporting it receive text Receives text from channels supporting it record file Records to a given file say alpha Says a given character string say digits Says a given digit string say number Says a given number say phonetic Says a given character string with phonetics say date Says a given date say time Says a given time
  • 314. 298 Capítulo 14 – Integração do Asterisk usando AMI e AGI say datetime Says a given time as specfied by the format given send image Sends images to channels supporting it send text Sends text to channels supporting it set autohangup Autohangup channel in some time set callerid Sets callerid for the current channel set context Sets channel context set extension Changes channel extension set music Enable/Disable Music on hold generator set priority Set channel dialplan priority set variable Sets a channel variable stream file Sends audio file on channel control stream file Sends audio file on channel and allows the listner to control the stream tdd mode Toggles TDD mode (for the deaf) verbose Logs a message to the asterisk verbose log wait for digit Waits for a digit to be pressed Para propósitos de debugging você pode usar “agi debug”. 14.9.1 Usando o AGI No exemplo abaixo vamos usar o PHP-CLI, em outras palavras o php por linha de comando. Certifique-se de que o php-cli esteja instalado apropriadamente. Siga os seguintes passos para usar scripts AGI em php Passo 1: Os scripts de agi são colocados no diretório /var/lib/asterisk/agi-bin. Passo 2: Coloque permissões de execução nos seus arquivos php. chmod 755 *.php Passo 3: Interfaceando com o shell (específico para o php) As primeiras linhas do script têm de ser: #!/usr/bin/php -q <?php Passo 4: Abrindo os canais de entrada e saída: $stdin = fopen('php://stdin', 'r'); $stdout = fopen('php://stdout', 'w'); $stdlog = fopen('agi.log', 'w'); Passo 5: Gerenciando a entrada vinda do ambiente do Asterisk O Asterisk sempre envia um conjunto de informações cada vez que o AGI é chamado.
  • 315. 14.9 Asterisk Gateway Interface | 299 agi_request:testephp agi_channel: Zap/1-1 agi_language: en agi_type: Zap agi_callerid: agi_dnid: agi_context: default agi_extension: 4000 agi_priority: 1 Salve estas informações no seu script while (!feof($stdin)) { $temp = fgets($stdin); $temp = str_replace("n","",$temp); $s = explode(":",$temp); $agivar[$s[0]] = trim($s[1]); If (($temp == "") || ($temp == "n")) { break; } } Isto vai deixar você com um array chamado $agivar. As opções disponíveis são: • agi_request – O nome do arquivo AGI • agi_channel – O canal que originou o AGI • agi_language – A linguagem configurada no momento • agi_type – O tipo de canal que originou o agi (Ex. Sip, Zap) • agi_uniqueid – Identificação única da chamada • agi_callerid – Identificador da chamada (Ex. Flavio <8590>) • agi_context – Contexto de origem • agi_extension – Extensão chamada • agi_priority – Prioridade • agi_accountcode – Código da conta do canal de origem (bilhetagem) Para chamar uma variável use $agivar[agi_extension]. Passo 6 – Usando o canal AGI Neste ponto você pode começar a falar com o Asterisk. Use o comando fputs para enviar comandos agi. Você pode usar o comando “echo” também. fputs($stdout,"SAY NUMBER 4000 '79#' n"); fflush($stdout); Notas com relação ao uso de aspas
  • 316. 300 Capítulo 14 – Integração do Asterisk usando AMI e AGI • As opções de comando no AGI não são opcionais, elas devem aparecer na string do comando. • Algumas opções devem ser passadas em aspas <escape digits>. • Algumas opções não devem ser passadas em aspas <digit string> • Algumas opções podem ir dos dois modos • Você pode usar aspas simples quando necessário Passo 7 – Passando variáveis Variáveis de canal podem ser definidas dentro do AGI, mas as variáveis de canal não são passadas ao AGI. O exemplo abaixo não funciona. SET VARIABLE MY_DIALCOMMAND "SIP/${EXTEN}" O abaixo funciona: SET VARIABLE MY_DIALCOMMAND "SIP/4000" Passo 8: Respostas do Asterisk. Em seguida é necessário verificar as respostas do Asterisk. $msg = fgets($stdin,1024); fputs($stdlog,$msg . "n"); Passo 9: Mate os processos que ficaram travados; Se o seu script falhar por alguma razão, ele vai ficar preso. Use o comando killproc para limpá-lo antes de testar de novo. 14.9.2 Exemplo de AGI O agi abaixo captura o valor de uma variável do plano de discagem e utiliza este valor para realizar uma consulta em um banco de dados MySQL. A consulta retorna uma #!/usr/bin/php -q <?php ob_implicit_flush(true); set_time_limit(6); error_reporting(0); $in = fopen("php://stdin","r"); $stdlog = fopen("/var/log/asterisk/agi.log", "w"); // Habilita modo debugging (mais verbose) $debug = true; // Do function definitions before we start the main loop function read() { global $in, $debug, $stdlog;
  • 317. 14.9 Asterisk Gateway Interface | 301 $input = str_replace("n", "", fgets($in, 4096)); if ($debug) fputs($stdlog, "read: $inputn"); return $input; } function write($line) { global $debug, $stdlog; if ($debug) fputs($stdlog, "write: $linen"); echo $line."n"; } // Colocaos headers AGI dentro de um array while ($env=read()) { $s = split(": ",$env); $agi[str_replace("agi_","",$s[0])] = trim($s[1]); if (($env == "") || ($env == "n")) { break; } } // Funcao que conecta ao banco de dados function connect_db() { $db_connection = mysql_connect('localhost','root','senha') or die (mysql_error()); $db_select = mysql_select_db('estoque') or die (mysql_error()); } // Programa Principal connect_db(); // Armazena valor da variável OPCAO em write("GET VARIABLE OPCAO"); $c = read(); $produto = substr($c,14); $produto = substr($call,0,-1); $query = "SELECT quantidade FROM produtos WHERE produto='$produto'"; $query_result = @mysql_query($query); $result = mysql_fetch_row($query_result); $valor = "$result[0]"; write("EXEC SayDigits " $valor "n"); read(); fclose($in); fclose($stdlog); exit; ?> No extensions.conf poderia ser feito algo como mostrado abaixo: exten => s,1,Set(OPCAO=4001) exten => s,n,agi(nomedoagi.agi) exten => s,n,HangUp 14.9.3 DeadAGI
  • 318. 302 Capítulo 14 – Integração do Asterisk usando AMI e AGI Se usa o DeadAGI quando você não tem um canal vivo, emgeral você executa um DeadAgi na extensão ´h´ (hangup). Neste caso você deve usar o aplicativo deadagi() ao invés de AGI. 14.9.4 FASTAGI O Fast AGI implementa uma conexão do AGI via TCP pela porta 4573 por default. Se usa o FastAGI no formato (agi://). Exemplo: exten => 0800400001, 1, Agi(agi://192.168.0.1) Quando a conexão TCP é perdida ou disconectada, o commando AGI termina e a conecão TCP é fechada seguindo a desconexão da chamada. Este recurso pode auxiliá-lo a reduzir a carga de CPU do seu servidor de telefonia rodando scripts pesados em outro servidor linux. Você pode obter mais detalhes do FastAGI no diretório fonte, veja os arquivos “agi/fastagi-test”. A empresa OrderlyCalls possui um servidor JAGI que implementa o FastAGI para o JAVA. Mais informações em www.orderlycalls.com. 14.10 Alterando o código fonte O Asterisk é desenvolvido em linguagem C (não C++). Ensinar como programar em C e como alterar o código fonte do Asterisk está fora do escopo deste livro. De qualquer forma para aqueles que se interessarem tem algumas páginas que podem ajudar. Existe uma boa documentação sobre o código fonte do Asterisk em: www.asterisk.org/developers Neste site tem boas dicas de como aplicar patches de correção ao Asterisk e principalmente tem uma documentação das APIs gerada pelo software Doxygen http://www.asterisk.org/doxygen/ Para aqueles que estão familizarizados com C pode ser interessante alterar aplicações existentes. Não é preciso nem salientar os cuidados e perigos desta prática.
  • 319. 14.11 Sumário | 303 14.11 Sumário Neste capítulo você aprendeu como interfacear programas externos com o Asterisk. Iniciamos com o comando “asterisk –rx” que permite passar comandos para a console. Em seguida vimos a aplicação System() que chama aplicações externas. AMI, Asterisk Manager Interface é um dos mecânismos mais poderosos do Asterisk e a que mais se aproxima de uma interface de CTI existente nas centrais digitais. Para chamar uma aplicação de dentro do plano de discagem, usamos o AGI. Descobrimos também suas diferentes variações, tais como: Deadagi, para canais “mortos”, EAGI (que passa o fluxo de audio junto), FastAGI (uso de programas remotos) e o AGI simples que roda os programas na mesma máquina do Asterisk.
  • 320. 304 Capítulo 14 – Integração do Asterisk usando AMI e AGI 14.12 Questionário 1. Qual dos seguintes não é um método de interfaceamento com o Asterisk AMI AGI Asterisk –rx System() External() 2. AMI, que quer dizer Asterisk Manager Interface permite que comandos possam ser passados ao Asterisk via porta TCP. Este recurso é habilitado por default. Correto Incorreto 3. O AMI é muito seguro pois sua autenticação é feita usando MD5 Challenge/Response Verdadeiro Falso 4. Para compensar pela falta de segurança e escalabilidade da Interface AMI podemos usar: O Ami não tem nenhum problema de segurança e escalabilidade Astmanproxy Sysproxy 5. O FastAGI permite o uso de aplicações remotas via socket TCP, normalmente na porta 4573. Falso Verdadeiro 6. O Deadagi é usado em canais ativos do tipo Zap, Sip mas não pode ser usado com IAX. Falso Verdadeiro 7. Aplicações que usam o AGI só podem ser programadas usando PHP. Falso
  • 321. 14.12 Questionário | 305 Verdadeiro 8. O comando _____________ mostra todas as aplicações disponíveis para uso em AGIs 9 O comando ________________ mostra todos os comandos disponíveis para uso com AMI 10. Para debugar um AGI você deve usar o comando __________________________.
  • 322. 306 Capítulo 14 – Integração do Asterisk usando AMI e AGI Página deixada intencionalmente em branco
  • 323. Asterisk Real-Time 15-1 Introdução Como vocês já sabem a configuração do Asterisk é retirada de vários arquivos texto dentro de /etc/asterisk. Apesar da facilidade proporcionada pela simplicidade dos arquivos de configuração em texto simples, eles apresentam muitas desvantagens. Podemos citar: • Necessidade de recarga do sistema a cada alteração. • Criação de grande volume de usuários. • Dificuldade na criação de interfaces de provisionamento. • Impossibilidade de integração com as bases existentes. O ARA como é conhecido o sistema Real-Time foi criado por Anthony Minessale II, Mark Spencer e Constantine Filin e foi projetado para permitir uma integração transparente entre a estrutura de configuração interna e outras bases de dados SQL. Drivers para LDAP também estão disponíveis. Este sistema também é conhecido como “Asterisk External Configuration” e é configurado no arquivo etc/asterisk/extconfig.conf, permitindo a você mapear quaisquer arquivos de configuração (mapeamentos estáticos) para uma uma base de dados, ou mapear entradas em tempo real que permitam a criação dinâmica de objetos (peers) sem a necessidade de fazer um reload. 15.2 Objetivos deste capítulo Ao final deste capítulo o leitor deve estar apto à: • Entender as vantagens e limitações do Asterisk Real Time. • Instalar e configurar o ARA usando como base de dados o MySQL. 15.3 Modo de funcionamento do Asterisk Real Time Na nova arquitetura RealTime, todo o código específico para bancos de dados foi movido para drivers de canal. O canal apenas chama uma rotina Capítulo 15
  • 324. 308 Capítulo 15 – Asterisk Realtime genérica que faz uma pesquisa na base de dados. Isto no fim é muito mais simples e limpo do ponto de vista do código fonte. O banco de dados é acessado com três funções: • STATIC: É usado para configurar uma configuração estática quando um módulo é carregado • REALTIME: É usado para pesquisar objetos durante uma chamada, ou outro evento. • UPDATE: É usado para atualizar os objetos. O suporte de banco de dados no canal não foi alterado. Existem os “peers/users” chamados de normais ou estáticos e os peers e users em banco de dados. Os estáticos, não importa se carregados de um banco de dados ou de um arquivo texto, são mantidos em memória e no canal SIP nos podemos ter suporte à NAT para eles. Os “peers/users” de banco de dados não são mantidos na memória. Estes só são carregados quando nós temos uma chamada e então ela é deletada, de forma que não existe suporte para NAT “keep-alives” ou indicação de correio de voz. Você pode habilitar Real Time Caching usando rtcachefriends=yes no arquivo sip.conf e permitir que seja usado NAT e MWI, de qualquer forma neste caso você vai precisar fazer um reload se houver alguma alteração. 15.4 LAB 1 Instalando o Asterisk Real/Time Neste caso vamos assumir que você já possua as bibliotecas MySQL instaladas no seu Asterisk. Passo 1: Baixe de www.asterisk.org o pacote de add-ons. #wget http://ftp.digium.com/pub/asterisk/releases/asterisk-addons- 1.2.3.tar.gz Passo 2: No Debian baixe uma das dependências do MySQL. #apt-get install libmysqlclient12-dev Passo 3: Descompacte e compile os add-ons #tar –xzvf asterisk-addons-1.2.3.tar.gx #cd asterisk-1.2.3 #make #make install Passo 4: Copie o arquivo res_mysql.conf.sample para /etc/asterisk/res_mysql.conf #cp res_mysql.conf /etc/asterisk/res_mysql.conf.
  • 325. 15.5 Como configurar o Asterisk Real Time. | 309 Confirme a instalação do módulo usando show modules. 15.5 Como configurar o Asterisk Real Time. O ARA é configurado no arquivo extconfig.conf. Nele podem ser notadas nitidamente duas seções, uma estática que substitui os arquivos de configuração. A segunda seção é a relacionado ao Real Time que vai criar dinâmicamente as entidades necessárias ao seu funcionamento. Formato do arquivo extconfig.conf ; ; Static and realtime external configuration ; engine configuration ; ; Please read doc/README.extconfig for basic table ; formatting information. ; [settings] ; ; Static configuration files: ; ; file.conf => driver,database[,table] ; ; maps a particular configuration file to the given ; database driver, database and table (or uses the ; name of the file as the table if not specified) ; ;uncomment to load queues.conf via the odbc engine. ; ;queues.conf => odbc,asterisk,ast_config ; ; The following files CANNOT be loaded from Realtime storage: ; asterisk.conf ; extconfig.conf (this file) ; logger.conf ; ; Additionally, the following files cannot be loaded from ; Realtime storage unless the storage driver is loaded ; early using 'preload' statements in modules.conf: ; manager.conf ; cdr.conf ; rtp.conf ; ; Realtime configuration engine ; ; maps a particular family of realtime ; configuration to a given database driver, ; database and table (or uses the name of ; the family if the table is not specified ; ;example => odbc,asterisk,alttable ;iaxusers => odbc,asterisk ;iaxpeers => odbc,asterisk ;sipusers => odbc,asterisk ;sippeers => odbc,asterisk ;voicemail => odbc,asterisk ;extensions => odbc,asterisk
  • 326. 310 Capítulo 15 – Asterisk Realtime ;queues => odbc,asterisk ;queue_members => odbc,asterisk A configuração estática é onde você armazena os arquivos *.conf regulares na base de dados. Estas configurações são lidas na carga do Asterisk. Alguns módulos também relêem isto quando faze um reload. Formato da configuração estática: Exemplo: <conf filename> => <driver>,<databasename>[,table_name] queues.conf => odbc,asterisk,ast_config sip.conf => mysql,asterisk iax.conf => ldap,MyBaseDN,iax Acima temos três exemplos. O primeiro exemplo irá colar queues.conf na tabela ast_config localizada no contexto do banco de dados chamado asterisk usando um driver “odbc”. O segundo exemplo irá a tabela sip.conf a tabela sip.conf (Com ofoi omitido o nome da tabela, ela tem como padrão o nome do arquivo) na base de dados asterisk usando um driver MySQL. A terceira irá configurar o arquivo iax.conf à tabela iax.conf usando um driver LDAP. MyBaseDN é a base BN para a pesquisa. Usando os exemplos acima, quando a aplicação app_queue.so carregar, o driver ODBC RealTime irá executar uma query e puxar as informações necessárias. O mesmo é verdadeiro para o chan_sip.so e assim por diante. Exemplo: A configuração RealTime (segunda parte do arquivo extconfig.conf) é onde configuramos a parte que vai ser carregada, atualizada e descarregada em tempo real. Por exemplo, vamos dizer que você tenha vários usuários Sip definidos no seu arquivo sip.conf e você quer adicionar um terceiro. Você os adiciona ao arquivo e então executa o comando “sip reload”. Então o chan_sip.so relê o arquivo e faz as modificações, assim o terceiro telefone pode se logar. Com o RealTime não é mais necessário fazer o reload. O formato do Realtime é o que segue abaixo: <family name> => <driver>,<database name>[,table_name] Exemplo:
  • 327. 15.6 Configuração da base de dados | 311 sippeers => mysql,asterisk,sip_peers sipusers => mysql,asterisk,sip_users queues => mysql,asterisk,queue_table queue_members => mysql,asterisk,queue_member_table voicemail => mysql,test Acima temos cinco linhas. Na primeira linha, nós estamos ligando o nome da família sippeers para a tabela sip_peers na base de dados “asterisk” usando um driver MySQL. Na última linha ligamos a familia voicemail à tabela voicemail na base de dados teste usando MySQL. As famílias sip_users e sip_peers podem se referir a mesma tabela, se você assim o desejar. 15.6 Configuração da base de dados O Asterisk Real Time (também conhecido como external configuration) é configurado em /etc/asterisk/extconfig.conf como vimos acima. Agora precisamos saber de que forma precisamos criar as tabelas no banco de dados. De uma forma geral as colunas na sua tabela devem ter os mesmos campos dos arquivos de configuração. Por exemplo para um arquivo de configuração do tipo SIP ou IAX, a base poderia ser como abaixo: [4000] host=dynamic secret=senha context=default context=ramais Pode ser armazenado em uma base de dados em uma tabela como a abaixo name host secret context ipaddr port regseconds 4000 dynamic senha default;ramais 10.1.1.1 4569 1765432 Para uso com o IAX, a tabela tem de possuir pelo menos os seguintes campos “name”, “port”, “regseconds”. Para os outros campos você pode configurar uma coluna parea cada campo desejado. Se você desejar colocar o CallerID, adicione a coluna correspondente à tabela. Uma tabela SIP deve se parecer como a abaixo para ter os campos necessários. name host secret context ipaddr port regseconds username 4000 dynamic senha default 10.1.1.1 5060 1765432 4000 Uma tabela de voicemail vai parecer como abaixo: uniqueid mailbox context password email fullname
  • 328. 312 Capítulo 15 – Asterisk Realtime 1 4000 default 4000 joao@silva.com Joao Silva O uniqueid deve ser único para cada usuário de correio de voz e deve ser autoincrementado. O uniqueid não pode ter qualquer relação com a caixa de correio ou o contexto. Uma tabela de extensões deve se parecer com o que está abaixo: context Exten priority app appdata Ramais 4000 1 dial SIP/4000&IAX2/4000 No plano de discagem você terá de usar a comutação para RealTime: [ramais] switch => realtime ou [ramais] Switch =>realtime/ramais@extensions 15.6 Lab 2 – Instalando o banco e criando as tabelas Neste laboratório vamos preparar o banco de dados para receber os parâmetros do Asterisk. Vamos preparar apenas as tabelas REALTIME. A parte estática das configurações continuará nos arquivos texto. 15.6.1 Criando as tabelas no MySQL. Passo 1: Instale o servidor Mysql #apt-get install mysql-server-4.1 Passo 2: Entre no mysql usando #mysql –u root –p Passo 3: Crie uma base de dados para o Asterisk mysql>create database asteriskdb; Passo 4: Crie um usuário com acesso a base de dados do Asterisk. mysql>grant all privileges on ‘asteriskdb’.* to 'asterisk'@'localhost' identified by 'asterisk';
  • 329. 15.6 Lab 2 – Instalando o banco e criando as tabelas | 313 Passo 5: Saia do mysql com o commando ´quit´ e entre novamente com o seguinte comando: #mysql –u asterisk –p asteriskdb Quando solicitada a senha use “asterisk” Passo 6: Vamos criar as tabelas necessárias: Baixe de www.voffice.com.br/asteriskexperts/sql os seguintes arquivos: voicemail.sql sip.sql iax.sql extensions.sql Execute os seguintes comandos no prompt do linux. #mysql asteriskdb -u asterisk -p <iax.sql #mysql asteriskdb -u asterisk -p <sip.sql #mysql asteriskdb -u asterisk -p <extensions.sql #mysql asteriskdb -u asterisk -p <voicemail.sql Passo 7: Instale o phpmyadmin para administrar as tabelas e incluir dados. #apt-get install phpmyadmin
  • 330. 314 Capítulo 15 – Asterisk Realtime Segue abaixo algumas das telas do phpmyadmin: Tela de login Tela de uma das tabelas Passo 8: Configure o Asterisk para acessar o banco de dados criado:
  • 331. 15.7 Lab 3 – Configurando e testando o ARA | 315 Coloque os seguintes comandos em res_mysql.conf [general] dbhost = 127.0.0.1 dbname = asteriskdb dbuser = asterisk dbpass = asterisk dbport = 3306 ** Coisas do linux ** Use o comando abaixo, pois a configuração do res_mysql.conf aponta o mysql.conf no diretório /tmp. #cd /tmp # ln -s /var/run/mysqld/mysqld.sock mysql.sock 15.7 Lab 3 – Configurando e testando o ARA Neste laboratório vamos configurar o arquivo extconfig.conf para a configuração do nosso banco de dados. Passo 1: Configurar o extconfig.conf e reinicializar o Asterisk. ; Realtime configuration engine ; ; maps a particular family of realtime ; configuration to a given database driver, ; database and table (or uses the name of ; the family if the table is not specified ; ;example => odbc,asterisk,alttable iaxusers => mysql,asteriskdb,iax_buddies iaxpeers => mysql,asteriskdb,iax_buddies sipusers => mysql,asteriskdb,sip_buddies sippeers => mysql,asteriskdb,sip_buddies voicemail => mysql,asteriskdb,voicemail extensions => mysql,asteriskdb,extensions ;queues => odbc,asterisk ;queue_members => odbc,asterisk Passo 2: Teste de um ramal Real-Time
  • 332. 316 Capítulo 15 – Asterisk Realtime Vamos criar um ramal 4001 com senha 4001 no ARA e tentar autenticar na estação. Passo 3: Teste uma ligação do telefone 4000 para o 4001 Verifique com sip show peers o ramal. Você vai notar que o ramal em tempo real não aparece na lista de peers como os estáticos. Se você precisar usar suporte a NAT ou indicador de mensagens de correio de voz, use a instrução “rtcachefriends=yes” no arquivo sip.conf Passo 4: Coloque o comando “rtcachefriends=yes” na seção [general] do arquivo sip.conf. Passo 5: Teste novamente uma ligação do telefone 4000 para o 4001 Verifique o comando show peers. Porque ele aparece agora ? Passo 6: Crie um novo ramal na base de dados com número 4007 Faça o registro do telefone no 4007 sem fazer reload do Asterisk. 15.7 Sumário Neste capítulo você aprendeu que o Asterisk Real Time permite colocar as configurações do Asterisk em um banco de dados. Os bancos suportados são MySQL, qualquer base de dados que suporte unixODBC e LDAP. A configuração do ARA possui duas partes, estática, que substitui os
  • 333. 15.8 Questionário | 317 arquivos de configuração em texto e realtime que permite a criação dinâmica de objetos no Asterisk. Em seguida foi feita a instalação, configuração e testes do sistema Realtime. 15.8 Questionário 1. O Asterisk Real Time é um recurso que faz parte da distribuição do Asterisk? Verdadeiro Falso 2 – Para compilar o Asterisk Real Time e usá-lo com Mysql é preciso baixar que bibliotecas? Libmysqlclient12-dev Mysql-server-4.1 Perl Php 3 – A configuração dos endereços e portas de acesso ao banco de dados MySQL é feita no arquivo: extensions.conf sip.conf res_mysql.conf extconfig.conf 4 - O arquivo exteconfig.conf é onde configuramos que tabelas serão usadas pelo RealTime. Neste arquivo temos duas áreas distintas para configurar Arquivos de configuração estática Configuração do Realtime Configuração das rotas de saída Configuração das portas e endereço IP do banco de dados 5 – Na configuração estática, uma vez feita a carga dos objetos contidos na configuração eles são criados dinâmicamente no Asterisk quando necessário. Verdadeiro Falso 6 – Quando um canal SIP (ramal) é configurado Realtime, não é possível usar recursos como “qualify” ou “mwi – indicador de mensagem em
  • 334. 318 Capítulo 15 – Asterisk Realtime espera” porque simplesmente o canal não existe até ser usado. Isto causa os seguintes problemas: Este telefone só poderá ligar, mas não vai receber ligações Não é possível usar, NAT pois o qualify é usado para manter o NAT aberto. Não é possível indicar ao telefone mensagens em espera no correio de voz. Não é possível usar o ramal pois a configuração do SIP é sempre estática 7 – Se eu quiser usar a configuração Realtime com ramais SIP, mas quiser ter suporte à NAT e MWI eu devo usar: O realtime não foi criado para uso com NAT Você pode usar o comando rtcachefriends=yes no arquivo sip.conf Apenas MWI é possível Para usar NAT é preciso que a configuração seja estática. 8 – Você pode continuar usando os arquivos texto de configuração, mesmo após configurar o Asterisk Real Time. Verdadeiro Falso 9 – O phpmyadmin é obrigatório no uso do Asterisk Real Time Verdadeiro Falso 10 – O banco de dados tem de ser criado obrigatoriamente com todos os campos contidos no arquivo de configuração correspondente? Verdadeiro Falso
  • 335. As principais referências que podem ser encontradas sobre o Asterisk até onde pude levantar são: Sites: www.asterisk.org www.digium.com http://www.digium.com/handbook-draft.pdf www.voip-info.org/wiki-asterisk www.sineapps.com www.asteriskdocs.org/modules/news/ www.astricon.net www.asteriskguru.com www.asteriskbrasil.org Listas de discussão: listas.asteriskbrasil.org lists.digium.com Livros: • Smith, Jared; Meggelen, Jim Van; Madsen Leif; Asterisk The Future of Telephony, Primeira Edição, Setembro de 2005, O Reilly Books. • Mahler, Paul, VoIP telephony with Asterisk, 2004, Signate. Referências
  • 336. Resposta dos Exercícios Respostas do Capítulo 1 1. Marque as opções corretas. O Asterisk tem quatro componentes básicos de arquitetura CANAIS PROTOCOLOS AGENTES TELEFONES CODECS APLICAÇÕES 2. Se for necessário criar um PABX com 4 troncos e oito telefones, você pode usar um PC com Linux e três placas TDM400P uma com quatro canais FXO e duas com quatro canais FXS cada. A afirmação acima está: CORRETA INCORRETA 3. Um canal FXS gera tom de discagem, enquanto um canal FXO recebe o tom vindo da rede pública ou de um outro PABX. A afirmação acima está: CORRETA INCORRETA 4. Marque as opções corretas, O Asterisk permite os seguintes recursos: Unidade de Resposta Automática Distribuição automática de chamadas Telefones IP Telefones Analógicos Telefones digitais de qualquer fabricante. 5. Para tocar música em espera o Asterisk necessita de um CD Player ligado em um ramal FXO. A afirmação está: CORRETA INCORRETA 6. É responsável pelo atendimento automático de clientes, normalmente toca um “prompt” e espera que usuário selecione uma opção. Am alguns Apêndice A
  • 337. 322 Apêndice A – Resposta dos exercícios casos pode ser usada em conjunto com um banco de dados e conversão texto para fala. Estamos falando de uma: URA IVR DAC Unified Messaging 7 – Marque as opções corretas, Um banco de canais é conectado ao Asterisk através de uma interface: E1 T1 FXO FXS 8 – Marque a opção correta. Um canal E1 suporta ___ canais de telefonia enquanto um T1 suporta ___ canais. 12, 24 30, 24 12,12 1,1 9 – Nas plataformas de telefonia convencional, normalmente URA, DAC e Correio de voz estão incluídos no PABX. Esta afirmação está: CORRETA INCORRETA 10 – Marque as opções corretas, É possível interligar usando o Asterisk várias filiais através de voz sobre IP reduzindo a despesa com ligações de longa distância. Em uma filial: O Asterisk pode ser a central telefônica para todos os usuários. O Asterisk pode integrar uma central telefônica existente Podem ser usados apenas telefones IP ligados à um Asterisk centralizado Redundância e confiabilidade não são importantes quando se ligam ip fones.
  • 338. Respostas do Capítulo 2 | 323 Respostas do Capítulo 2 1. Qual a configuração mínima para o Asterisk. Não existe uma configuração mínima, mas é recomendável no mínimo: Pentium 300 Mhz 256 MB RAM 100 MB de disco 2. As placas de telefonia para o Asterisk têm um processador próprio (DSP), não precisando assim de muita CPU do servidor. Correto Incorreto 3. Para que a telefonia IP funcione com perfeição é necessário que à rede possua QoS fim-a-fim. Correto Incorreto 4. É possível obter uma boa qualidade de voz em uma rede que não esteja congestionada com switches de 100 Mbps. Correto Incorreto 5. Liste abaixo as bibliotecas necessárias para compilar o Asterisk. gcc - GNU C Compiler and Support Files cvs – Concurrent Versions System ncurses – New curses libraries ncurses-devel – Bibliotecas para desenvolvimento com ncurses bison – The GNU parser generetor Termcap – Termcap library openssl – Secure Sockets and TLS Layer Security openssl-developer – Bibliotecas do openssl. 6. Se você não tem uma placa zaptel, você precisa de uma fonte de tempo. O driver ztdummy faz este papel aproveitando uma biblioteca USB. Isto é necessário, pois algumas aplicações como o Meetme() e o MusicOnHold() precisam de uma referência de tempo. 7. Quando você faz uma instalação do Asterisk, o melhor é não instalar os pacotes gráficos como o KDE e GNOME, pois o Asterisk é sensível na
  • 339. 324 Apêndice A – Resposta dos exercícios questão de CPU e interfaces gráfica roubam muitos ciclos de CPU do servidor. Correto Incorreto 8. Os arquivos de configuração do Asterisk ficam em /etc/asterisk. 9. Para instalar os arquivos de configuração de exemplo você precisa executar o seguinte comando. #make samples 10. Porque é importante inicializar o Asterisk com um usuário diferente de root. Para evitar que no caso do Asterisk ser invadido através de um ataque do tipo buffer-overflow o invasor tenha direito de root no servidor.
  • 340. Respostas do Capítulo 3 | 325 Respostas do Capítulo 3 1. São exemplos de arquivos de configuração de canais Asterisk. zaptel.conf zapata.conf sip.conf iax.conf 2. É importante definir o contexto no arquivo de canais, pois quando uma ligação deste canal (sip, iax, zap) chegar ao Asterisk ele será tratado no arquivo extensions.conf neste contexto. Correto Incorreto 3. O parâmetro switchtype no arquivo zapata.conf define o tipo de PABX ao qual o Asterisk está ligado. Isto é válido para conexões no padrão E1 com sinalização ISDN PRI. Normalmente no Brasil e na Europa este padrão deve ser definido como National. Correto Incorreto 4. Apesar de ser considerado uma linha digital, o E1 pode ser configurado com sinalização associada ao canal (CAS) neste caso cada timeslot pode se comportar como um canal analógico FXS ou FXO, por exemplo. Isto é útil para a conexão à channel-banks (bancos de canal). Correto Incorreto 5. SIP Session Initiated Protocol é o protocolo da ITU usado para conexões de voz sobre IP. Ele é bastante antigo e vem sendo substituído recentemente pelo H.323. Correto Incorreto 6. Dado a configuração abaixo do arquivo sip.conf, na seção [general] está definido o endereço IP 10.1.30.45, onde o SIP estará esperando por conexões. Se fosse necessário que todas as placas de rede da máquina esperassem por uma conexão SIP, bindaddr deveria estar configurado para: 0.0.0.0 [general]
  • 341. 326 Apêndice A – Resposta dos exercícios port = 5060 bindaddr = 10.1.30.45 context = default disallow = speex disallow = ilbc allow = ulaw maxexpirey = 120 defaultexpirey = 80 7. No arquivo abaixo, os telefones 8000 e 8001 foram definidos com a opção canreinvite=no. Com isto, quando uma ligação é feita de um telefone para o outro, o Áudio vai diretamente de um telefone para outro sem passar pelo Asterisk. [8000] type=friend secret=8000 host=dynamic canreinvite=no [8001] type=friend secret=8000 host=dynamic canreinvite=no Correto Incorreto 8. A principal diferença entre o comando Playback() e o comando Background() é que o Playback() simplesmente toca uma mensagem e passa ao comando seguinte, enquanto o Background aguarda que você digite algo e desvia para algum lugar no plano de discagem baseado nos dígitos discados. Correto Incorreto
  • 342. Respostas do Capítulo 3 | 327 9. Quando uma ligação entra no Asterisk por uma interface de telefonia (FXO) sem identificação de chamada, esta ligação é desviada para a extensão especial: ‘0’ ‘9’ ‘s’ ‘i’ 10. Os formatos válidos para o comando Goto() são: Goto(contexto,extensão,prioridade) Goto(prioridade, contexto, extensão) Goto(extensão,prioridade) Goto(prioridade)
  • 343. 328 Apêndice A – Resposta dos exercícios Respostas do capítulo 4 1 – A sinalização de supervisão inclui: On-hook (no gancho) Off-hook (fora do gancho) Ringing (campainha) Dtmf 2 – A sinalização de informação inclui: Dtmf Tom de discagem Número inválido Tom de retorno Sinal de congestionamento Sinal de Ocupado Pulso decádico 3 – Existem três tipos de interface analógica FXS, FXO e E+M. Marque as afirmativas corretas. FXS – Foreign Exchange Station pode ser ligada diretamente ‘a uma interface de ramal de uma central analógica existente. FXO – Foreign Exchange Office é uma interface que pode ser ligada a rede pública. FXS – Foreign Exchange Station é uma interface que fornece tom e por isso pode ser ligada diretamente à um telefone. E+M – Também conhecida como tie-line pode gerar tom nas duas direções. 4 – A respeito de circuitos digitais E1 e T1 marque as afirmativas corretas. E1 é uma sinalização digital à 1.544 Mbits/s T1 é usado principalmente no Brasil e nos países da Europa Em um circuito E1 são possíveis trinta canais enquanto em um T1 apenas 23. ISDN é uma sinalização CCS enquando MFC/R2 é CAS 5 – A sinalização CAS/R2 É suportada no Asterisk por um driver de terceiros desenvolvido por Steve Underwood. Falso Verdadeiro
  • 344. Respostas do capítulo 4 | 329 6 – Para configurar o hardwar de uma placa Zaptel você deve configurar o arquivo: zaptel.conf zapata.conf unicall.conf serial.conf 7 – Em uma placa zaptel, no arquivo zaptel.conf você configura o hardware independente do Asterisk, no arquivo zapata.conf você configura o canal zapata do Asterisk. Verdadeiro Falso 8 – Em uma placa TDM400 uma entrada de energia vinda diretamente da fonte do micro é necessária quando existe a presença de circuitos: FXO FXS E+M ISDN 9 – Um dos principais problemas que causam ecos e chiados em uma placa zaptel é causado por: Problemas de compilação do Asterisk Cabos com problemas Conflitos de interrupção no PC Interferência Eletromagnética 10 – A sinalização R2 definida pela ITU é padronizada no mundo todo e não existêm variações. Verdadeiro Falso
  • 345. 330 Apêndice A – Resposta dos exercícios Respostas do Capítulo 5 1. Cite pelo menos quatro benefícios do uso de voz sobre IP Redução das tarifas, Mobilidade, URA Integrada em IP, Agentes Remotos. 2. Convergência é a unificação das redes de voz, vídeo e dados em uma única rede e seu principal benefício é a redução com os custos de manutenção de redes separadas. Correto Incorreto 3. O Asterisk não pode usar simultaneamente recursos de PSTN (Rede pública de telefonia e de voz sobre IP, pois os codecs não são compatíveis). Correto Incorreto 4. A Arquitetura do Asterisk é de um SIP proxy com possibilidade outros protocolos. Correto Incorreto 5. Dentro do modelo OSI, os protocolos SIP, H.323 e IAX2 estão na camada de: Apresentação Aplicação Física Sessão Enlace 6. SIP é hoje o protocolo mais aberto (IETF) sendo implementado pela maioria dos fabricantes. Correto Incorreto 7. O H.323 é um protocolo sem expressão, pouco usado foi abandonado pelo mercado em favor do SIP. Correto
  • 346. Respostas do Capítulo 5 | 331 Incorreto 8. O IAX2 é um protocolo proprietário da Digium, apesar da pouca adoção por fabricantes de telefone o IAX é excelente nas questões de: Uso de banda Uso de vídeo Passagem por redes que possuem NAT Padronizado por órgãos como a IETF e ITU 9. “Users” podem receber chamadas Correto Incorreto 10. Sobre codecs assinale o que é verdadeiro O G711 é o equivalente ao PCM (Pulse Code Modulation) e usa 64 Kbps de banda. O G.729 é gratuito por isto é o mais utilizado, usa apenas 8 Kbps de banda. GSM vem crescendo pois ocupa 12 Kbps de banda e não precisa de licença. G711 ulaw é comum nos EUA enquanto a-law é comum na Europa e no Brasil. G.729 é leve e ocupa pouca CPU na sua codificação.
  • 347. 332 Apêndice A – Resposta dos exercícios Respostas do Capítulo 6 1. Podemos citar como principais benefícios do IAX a economia de banda e facilidade de passar por Firewalls com NAT. Correto Incorreto 2. No protocolo IAX os canais de sinalização e mídia passam separados. Esta afirmação é: Correta Incorreta 3. O IAX emprega os seguintes tipos de frames Frame Completo Frame Incompleto Mini-Frame Trunked Frame 4. A banda passante usada pelo protocolo IAX é a soma da carga de voz (payload) mais os cabeçalhos (Marque todas as que se aplicam) IP UDP IAX RTP cRTP 5. É importante ter a mesma configuração para o payload do codec (20 à 30 ms) que a sincronização dos frames no modo trunked (20 ms – padrão) Verdadeiro Falso 6. Quando o IAX é usado no modo trunk, apenas um cabeçalho é usado para transmitir múltiplas ligações. A afirmação acima está: Correta Incorreta 7. O protocolo IAX2 é o mais comum para conectar provedores de telefonia IP, pois passa fácil pelo NAT. A afirmação acima está
  • 348. Respostas do Capítulo 6 | 333 Correta Incorreta 8. Em um canal IAX como o abaixo, a opção <secret> pode ser tanto uma senha como uma chave digital. IAX/[<user>[:<secret>]@]<peer>[:<portno>][/<exten>[@<context>][ /<options>]] 9. O contexto é adicionado para cada cliente IAX, isto permite que diferentes clientes possuam diferentes contextos. Pode-se pensar em contexto como uma classe de ramal onde o cliente será colocado. A afirmação está Correta Incorreta 10. O comando IAX2 show registry mostra informações sobre: Os usuários registrados Os provedores ao qual o Asterisk se conectou.
  • 349. 334 Apêndice A – Resposta dos exercícios Respostas do Capítulo 7 1. O SIP é um protocolo do tipo texto similar ao ______ e _______. IAX HTTP H323 SMTP 2. O SIP pode ter sessões do tipo: (marque todos que se aplicam) Voz Correio Eletrônico Vídeo Chat Jogos 3. Podemos citar como componentes do SIP o: (marque todos que se aplicam) User Agent Media gateway PSTN Server Proxy Server Registrar Server 4. Antes que um telefone possa receber chamados, ele precisa se Registrar. 5. O SIP pode operar em modo PROXY e modo REDIRECT, a diferença entre eles é que no caso do PROXY a sinalização sempre passa pelo computador intermediário (SIP Proxy) enquanto no modo REDIRECT os clientes sinalizam diretamente. Correto Incorreto 6. No modo PROXY o fluxo de mídia e a sinalização passam pelo “SIP proxy” e não diretamente de um cliente para o outro. Correto Incorreto 7. O Asterisk atua como um SIP Proxy. Correto
  • 350. Respostas do Capítulo 7 | 335 Incorreto 8. A opção canreinvite=yes/no é de importância fundamental pois vai definir se o fluxo de mídia vai passar pelo Asterisk ou não. A afirmação está: Correta Incorreta 9. O Asterisk suporta sem problemas supressão de silêncio em canais SIP. A afirmação está: Correta Incorreta 10. O tipo mais difícil de NAT para transpor é o: Full Cone Restricted Cone Port Restricted Cone Symmetric
  • 351. 336 Apêndice A – Resposta dos exercícios Respostas do Capítulo 8 1. Na configuração da seção [general] o valor padrão da opção writeprotect=no. Sendo assim se você emitir o comando save dialplan na linha de comando CLI>. (Marque todas que se aplicam). O Asterisk irá sobrescrever o extensions.conf com a configuração atual. Todos os comentários serão perdidos Será feito um backup de extensions.conf em extensions.bak A opção static=yes deve estar configurada para pode salvar o plano de discagem 2. Normalmente as variáveis globais vão estar escritas em maiúsculas enquanto as variáveis de canal estarão começando com maiúscula e restante em minúsculas. Isto não é obrigatório, mas facilita a leitura. Verdadeiro Falso 3. E extensão ‘s’ é usada como extensão de início dentro de um contexto, ela é normalmente usada nos seguintes casos. Na entrada de uma chamada sem CallerID Como entrada de um menu chamado pelo comando Background() Na entrada de uma chamada com CallerID Como entrada de um contexto que foi direcionado pelo Goto() 4. Cite quatro situações onde contextos poderiam ser utilizados: Implementar segurança Funções de roteamento Menus Multicamada Privacidade 5. Para usar uma variável no plano de discagem no Asterisk você deve usar o seguinte formato: $[varname] {varname} $(varname) ${varname} 6. As variáveis disponíveis no Asterisk são: (Escolha 3) Constantes Variáveis públicas Variáveis de ambiente
  • 352. Respostas do Capítulo 8 | 337 Variáveis globais Variáveis privadas Variáveis de canal 7. Para obter o comprimento de uma string você pode usar a função ${LEN(string)}. 8. Para concatenar strings basta colocar uma do lado da outra como no exemplo abaixo. A afirmação está: ${foo}${bar} 555${Onumero} ${PrefixoLongaDistancia}555${ONumero} Correta Incorreta 9. Supondo que você tenha uma central telefônica analógica. Coloque no espaço abaixo os comandos necessários para direcionar a recepção das chamadas para uma telefonista no ramal SIP/4000. Se o ramal SIP/4000 não atender, o sistema deve direcionar depois de 15 segundos para os ramais SIP/4000 e SIP/4001 simultaneamente. exten=4000,1,dial(SIP/4000,15) exten=4000,2,dial(SIP/4000&SIP/4001,15) 10. Supondo que você tenha um central telefônica digital. Coloque no espaço abaixo os comandos necessários (extensions.conf) para permitir a discagem externa apenas para números DDD no contexto [ramais]. Coloque também os comandos necessários para forçar a discagem pela operadora 55 desconsiderando a operadora escolhida pelo usuário. [ramais] exten=>_0XXXXXXXXXXX,1,Dial(ZAP/g1/_055${EXTEN:4},15)
  • 353. 338 Apêndice A – Resposta dos exercícios Respostas do Capítulo 9 1. Para incluir um contexto que depende do horário, você pode usar: include => context|<times>|<weekdays>|<mdays>|<months> O commando abaixo: include=>expediente|08:00-18:00|mon-fri|*|* Executa as extensões de segunda à sexta das 08:00 às 18:00 Executam as opções todos os dias em todos os meses O comando é inválido 2. Quando o usuário disca “0” para pegar a linha o Asterisk automaticamente corta o áudio. Isto é ruim, pois o usuário está acostumado a discar o “0” e ouvir o tom externo de discagem. Para criar este comportamento que o usuário está acostumado, pode-se usar comando ignorepat=>. 3. Os comandos: exten => 8590/482518888,1,Congestion exten => 8590,1,Dial(Zap/1,20) exten => 8590,2,Voicemail(u8590) exten => 8590,102,Voicemail(b8590) Faz com que um usuário que ligou para a extensão 8590: Receba um sinal de ocupado se o CallerID=482518888 Receba um sinal de ocupado independente do número discado Vá para o canal ZAP/1 se o número não for 482518888 Vá para o VoiceMail() se o canal ZAP/1 estiver ocupado ou não atender, exceto no caso onde o CallerID for 482518888 4. Para concatenar várias extensões basta separá-las com o sinal _&__. 5. Um menu de voz normalmente é criado com o comando inicial Answer() e Background(). 6. Você pode incluir arquivos dentro dos seus arquivos de configuração com o comando #include. 7. O Asterisk permite que se use no plano de discagem uma base de dados baseada em:
  • 354. Respostas do Capítulo 9 | 339 Oracle MySQL Berkley DB PostgreSQL 8. Quando você usa o comando Dial(tipo1/identificar1&tipo2/identificar2) com vários identificadores, o Asterisk disca para cada um na seqüência e espera 20 segundos ou o tempo de timeout antes de passar para o outro número. A afirmação é: Falsa Verdadeira 9. No comando Background a música de fundo tem de ser tocada inteiramente antes que o usuário possa digitar algo. A afirmação é: Falsa Verdadeira 10. Os formatos válidos par o comando Goto() são: Goto (context,extension) Goto(context,extension,priority) Goto(extension,priority) Goto(priority) 11. Switches são usados para direcionar para outro PABX. A afirmação acima está: Correta Incorreta 12. Uma macro pode ser usada para automatizar uma série de operações em seqüência para uma extensão específica. O primeiro argumento passado pela chamada da macro é o: ${ARG1} ${ENV1} ${V1} ${X}
  • 355. 340 Apêndice A – Resposta dos exercícios Respostas do Capítulo 10 1. Com relação à Call Parking assinale as afirmativas verdadeiras. Por Default a extensão 800 é usada para Call Parking Quando for para o outro telefone para disque 700 para recuperar a chamada Por Default a extensão 700 é usada para Call parking Digite a extensão anunciada para recuperar a chamada 2. Para que o Call Pickup funcione é preciso que as extensões estejam no mesmo GRUPO. No caso de extensões Zap isto é configurado em ZAPATA.CONF. 3. No caso de transferência de chamadas existem as transferências ÀS CEGAS, onde o ramal de destino não é consultado antes e a transferência ASSISTIDA onde é possível verificar se o usuário está na extensão. 4. Para fazer uma transferência assistida você usa o #2 enquanto para fazer uma transferência às cegas (blind) você usa #1. #1, #2 #2, #1 #3, #1 #4, #2 5. Para fazer conferência no Asterisk é necessário usar o aplicativo MEETME(). 6. Se for necessário administrar uma conferência, você pode usar o aplicativo _______ e tirar um usuário da sala. MeetMe() MeetMeConsole() MeetMeAdministrator() MeetmeAdmin()
  • 356. Respostas do Capítulo 11 | 341 Respostas do Capítulo 11 1. Cite quatro estratégias de roteamento do sistema de fila de atendimento. ringall: Toca todos os canais disponíveis até que um atenda. roundrobin: Distribui as chamadas pelas interfaces igualmente. leastrecent: Distribui para a interface que menos recebeu chamadas fewestcalls: Toca aquela com menos chamadas completadas. random: Toca uma interface aleatória rrmemory: Roundrobin com memória, lembra onde deixou a última chamada. 2. É possível gravar a conversação dos agentes usando record=yes no arquivo agents.conf. 3. Para logar um agente usa-se o comando Agentlogin([agentnumber]). Quando o agente termina a chamada ele pode pressionar: * para desconectar e permanecer na fila Desligar o telefone e ser desconectado da fila pressionar #7000 e a chamada será transferida para a fila de auditoria Pressionar # para desligar. 4. As tarefas obrigatórias para configurar uma fila de atendimento são: Criar a fila Criar os agentes Configurar os agentes Configurar a gravação Colocar no plano de discagem 5. Qual a diferença entre os aplicativos AgentLogin() e AgentCallBackLogin(). O Agent Login() faz com que o usuário fique com o fone aguardando uma ligação enquanto no AgentCallBackLogin() o agente coloca o telefone no gancho e aguarda uma chamada. 6. Quando em uma fila de atendimento, você pode definir um determinado número de opções que o usuário pode discar. Isto é feito incluindo um __________ na fila. Agente Menu Contexto Aplicativo
  • 357. 342 Apêndice A – Resposta dos exercícios 7. As aplicações de apoio AddQueueMember(), AgentLogin() , AgentCallBackLogin e RemoveQueueMember() devem ser incluídas no: __________ Plano de discagem Interface de linha de comando Arquivo queues.conf Arquivo agents.conf 8. É possível gravar os agentes, mas para isto é preciso de um gravador externo. Verdadeiro Falso 9. “Wrapuptime” é o tempo que o agente precisa após o término de uma chamada para se preparar para a próxima ou completar processos em relação a chamada atendida Verdadeiro Falso 10. Uma chamada pode ser priorizada dependendo do CallerID dentro de uma mesma fila. A afirmativa está: Correta Incorreta
  • 358. Respostas do Capítulo 12 | 343 Respostas do Capítulo 12 1. Os arquivos envolvidos para a configuração do Correio de voz são: sip.conf iax.conf asterisk.conf voicemail.conf vmail.conf extensions.conf 2. Na aplicação VoiceMail(), os parâmetros “u”e “b” são ___________ e __________ respectivamente. Eles servem para determinar que tipo de mensagem o correio de voz irá tocar para o usuário. Ocupado, Livre Ocupado, Não atende Não atende, Ocupado Livre, Preso 3. A aplicação VoiceMailMain() é usada para que o usuário que chamou deixe sua mensagem. A afirmativa está: Correta Incorreta 4. Para sair do VoiceMailMain você deve digitar: 0 * # 9999 5. Escreva abaixo a sintaxe do comando VoiceMail() VoiceMail([flags]boxnumber[@context][&boxnumber2[@context]][&boxnumber3]) 6. Na seção [general] do arquivo voicemail.conf, o parâmetro attach=yes vai fazer com que uma notificação por e-mail seja enviada ao usuário com o arquivo de áudio anexado. A afirmação está: Correta Incorreta 7 A opção “delete” faz com que todas as mensagens sejam apagadas da caixa postal antes de terem sido enviadas para a caixa de correio do usuário.
  • 359. 344 Apêndice A – Resposta dos exercícios Correta Incorreta 8. O formato mais adequado para as mensagens de áudio é o “WAV”, pois tem mais suporte de estações Windows. Correta Incorreta 9. É possível personalizar as mensagens de correio com emailsubject e emailbody. Que variável pode ser usada para indicar o CallerID na mensagem: VM_CallerID 10. O nome do CGI para instalar a interface Web do voicemail é o vmail.cgi.
  • 360. Respostas do capítulo 13 1. Por default o Asterisk bilheta as chamadas para /var/log/asterisk/cdr- csv. Falso Verdadeiro 2. O Asterisk só permite bilhetar para bases de dados: MySQL Oracle nativo MSSQL Arquivos texto CSV Bases de dados pelo unix_ODBC 3. O Asterisk bilheta apenas em um tipo de armazenagem Falso Verdadeiro 4. Os indicadores disponíveis para a bilhetagem (amaflags) são: Default Omit Tax Rate Billing Documentation 5. Se você deseja associar um departamento ou um código de contabilização ao CDR, você deve usar o comando SetAccount(). O código da conta pode ser verificado pela variável ${ACCOUNTCODE}. 6. A diferença entre as aplicações NoCDR() e ResetCDR() é que o NoCDR() não gera nenhum bilhete, enquanto o ResetCDR() zera o tempo da chamada no registro. Falso Verdadeiro 7. Para usar um campo definido pelo usuário (UserField) é necessário recompilar o Asterisk. Falso Verdadeiro
  • 361. 346 Apêndice A – Resposta dos capítulos 8. Os três métodos de autenticação disponíveis para a aplicação Authenticate() são: Senha Arquivo de senhas Banco berkley DB (dbput e dbget) VoiceMail 9. As senhas de correio eletrônico são especificadas em outra parte do arquivo voicemail.conf e não são as mesmas do correio de voz. Falso Verdadeiro 10. A opção do comando Authenticate __ faz com que a senha seja colocada no código de contabilização do cdr. a j d r
  • 362. Respostas do capítulo 14 | 347 Respostas do capítulo 14 1. Qual dos seguintes não é um método de interfaceamento com o Asterisk AMI AGI Asterisk –rx System() External() 2. AMI, que quer dizer Asterisk Manager Interface permite que comandos possam ser passados ao Asterisk via porta TCP. Este recurso é habilitado por default. Correto Incorreto 3. O AMI é muito seguro pois sua autenticação é feita usando MD5 Challenge/Response Verdadeiro Falso 4. Para compensar pela falta de segurança e escalabilidade da Interface AMI podemos usar: O Ami não tem nenhum problema de segurança e escalabilidade Astmanproxy Sysproxy 5. O FastAGI permite o uso de aplicações remotas via socket TCP, normalmente na porta 4573. Falso Verdadeiro 6. O Deadagi é usado em canais ativos do tipo Zap, Sip mas não pode ser usado com IAX. Falso Verdadeiro 7. Aplicações que usam o AGI só podem ser programadas usando PHP. Falso
  • 363. 348 Apêndice A – Resposta dos capítulos Verdadeiro 8. O comando show agi mostra todas as aplicações disponíveis para uso em AGIs. 9 O comando show manager commands mostra todos os comandos disponíveis para uso com AMI. 10. Para debugar um AGI você deve usar o comando agi debug.
  • 364. Respostas do capítulo 15 | 349 Respostas do capítulo 15 1. O Asterisk Real Time é um recurso que faz parte da distribuição do Asterisk? Verdadeiro Falso 2 – Para compilar o Asterisk Real Time e usá-lo com Mysql é preciso baixar que bibliotecas? Libmysqlclient12-dev Mysql-server-4.1 Perl Php 3 – A configuração dos endereços e portas de acesso ao banco de dados MySQL é feita no arquivo: extensions.conf sip.conf res_mysql.conf extconfig.conf 4 - O arquivo extconfig.conf é onde configuramos que tabelas serão usadas pelo RealTime. Neste arquivo temos duas áreas distintas para configurar Arquivos de configuração estática Configuração do Realtime Configuração das rotas de saída Configuração das portas e endereços IP do banco de dados 5 – Na configuração estática, uma vez feita a carga dos objetos contidos na configuração eles são criados dinâmicamente no Asterisk quando necessário. Verdadeiro Falso 6 – Quando um canal SIP (ramal) é configurado Realtime, não é possível usar recursos como “qualify” ou “mwi – indicador de mensagem em espera” porque simplesmente o canal não existe até ser usado. Isto causa os seguintes problemas: Este telefone só poderá ligar, mas não vai receber ligações
  • 365. 350 Apêndice A – Resposta dos capítulos Não é possível usar, NAT pois o qualify é usado para manter o NAT aberto. Não é possível indicar ao telefone mensagens em espera no correio de voz. Não é possível usar o ramal, pois a configuração do SIP é sempre estática 7 – Se eu quiser usar a configuração realtime com ramais SIP, mas quiser ter suporte à NAT e MWI eu devo usar: O realtime não foi criado para uso com NAT Você pode usar o comando rtcachefriends=yes no arquivo sip.conf Apenas MWI é possível Para usar NAT é preciso que a configuração seja estática. 8 – Você pode continuar usando os arquivos texto de configuração, mesmo após configurar o Asterisk Real Time. Verdadeiro Falso 9 – O phpmyadmin é obrigatório no uso do Asterisk Real Time Verdadeiro Falso 10 – O banco de dados tem de ser criado obrigatoriamente com todos os campos contidos no arquivo de configuração correspondente? Verdadeiro Falso

×