Você está na página 1de 6

Asterisk descomplicado

VoIP com Asterisk parte I


O sistema telefnico ultrapassado, presente at pouco tempo atrs nas empresas, prolfico em cobranas: cada novo recurso ativado requer uma nova ativao de servio, com o preo adicionado ao pagamento mensal. hora de mudar. hora de criar sua prpria central VoIP. por Stefan Wintermeyer

CAPA

or que algum se daria ao trabalho de programar seu prprio sistema telefnico, quando j existem dezenas de opes venda no mercado? A resposta: porque no possvel conseguir tudo nas opes do mercado. As opes disponveis costumam ser caras demais para pequenas empresas. Contudo, no Asterisk [1] qualquer um pode implementar os recursos presentes naquela soluo de R$ 100 mil, e ainda ajust-los precisamente s suas prprias necessidades. Somado a aparelhos telefnicos VoIP, o PBX Asterisk no apenas economiza nas chamadas, mas tambm dispensa uma segunda rede de cabos telefnicos.

Tendncias na voz sobre IP


At meados de 2006, a proporo de empresas que tiravam proveito do VoIP completo ou em paralelo com o sistema legado era inferior a 9%. No final de 2007, a previso da consultoria Techconsult se concretizou, e esse nmero alcanou 16%. Ela enxerga o VoIP como uma fora capaz de causar quebras no gerenciamento de redes, pois essa tecnologia acrescenta trfego sensvel a atrasos na rede, alm de aumentar o prprio volume do trfego normal de rede
36

leia-se: VPNs. Alm disso, surgem questes como espionagem via VoIP e o temido spam telefnico (spit). E os nmeros atuais, s mostram o vertical crescimento da tecnologia. Na Europa Central, h trs cenrios comuns para o uso do Asterisk: A  sterisk como sistema de telefonia ISDN: substituindo o antigo sistema telefnico por um novo esquema de telefonia atravs do computador por meio de placas ISDN e, internamente, por telefones VoIP (figura 1). A  sterisk como sistema de VoIP puro: todas as chamadas so via VoIP, tanto internas quanto externas, e no h mais ISDN. A exigncia, no entanto, uma conexo ininterrupta Internet (figura 2).  Asterisk como proxy: usando o Asterisk como proxy ou gateway entre seu sistema tradicional e o novo sistema ISDN (figura3). Ele roteia chamadas VoIP via Asterisk para outros locais de forma transparente. H discusses a respeito de custos e de criptografia via Internet. Esta variante tambm interessante para a migrao gradual para o Asterisk, pois permite que cada departamento da empresa migre para o VoIP em um momento

diferente, respeitando as particularidades de cada um. O Asterisk para o VoIP o que o Apache representa para os webmasters: o fim dos dias em que o PBX era uma caixa-preta impenetrvel. Qualquer programador pode pr em prtica seus conhecimentos e ajudar o sistema a avanar segundo suas prprias opinies. Ainda por cima, o Asterisk combina telefonia ISDN, analgica e VoIP. A nica desvantagem: ganhar familiaridade com o Asterisk no fcil. Esta srie de artigos se destina justamente a tentar explicar os principais recursos, passo a passo, e expor as vantagens e desvantagens desse software.

Ol mundo, al Asterisk
O tipo de telefonia (analgica, ISDN, VoIP) no importa: o artigo comea mostrando como criar uma instalao 100% VoIP. Numa modificao do clssico Hello world da programao, voc instalar um sistema Asterisk e, primeiramente, apenas um, depois dois telefones VoIP SIP (Session Initiation Protocol). Quando um dos telefones chamar o nmero 1234, o Asterisk se encarregar de reproduzir um som que diz Hello world.

www.linuxmagazine.com.br

VoIP com Asterisk | CAPA

Instalao

Como acontece com frequncia no mundo do Cdigo Aberto, possvel instalar o Asterisk em qualquer sistema Linux. A maioria das principais distribuies j oferece at pacotes do Asterisk, o que, inclusive, representa um problema: a criadora do Asterisk, Digium (quadro 1), lanou uma mdia de uma atualizao por ms, impossibilitando que as distribuies normais mantivessem seus pacotes atualizados. Por isso, vamos compilar o Asterisk a partir do cdigo-fonte. Este tutorial feito em Debian 4.0, mas usurios de Linux experientes no tero dificuldades para transferir as instrues para qualquer distribuio moderna. Ento, l vamos ns: procure um hardware confivel para o Asterisk, que no tem grandes necessidades de CPU, contanto que ele s trabalhe com um codec. A conexo Internet e rede local deve ter pelo menos baixa latncia. Quanto ao sistema operacional, uma instalao mnima do Debian 4.0 suficiente e at recomendvel. Todos os comandos a seguir requerem privilgios de root. O comando a seguir garante que o sistema instalar todas as atualizaes e, ao reiniciar, ter todos os pacotes mais recentes.
apt-get update && apt-get -y upgrade && shutdown -r now

Asterisk

PSTN

Figura 1  Neste cenrio, um PC com Asterisk e uma placa ISDN substituiu o


sistema telefnico antigo. Internamente, usa-se telefonia VoIP. wget http://downloads.digium.com/ pub/asterisk/asterisk-1.4current.tar.gz tar xvzf asterisk-1.4-current. tar.gz

Como o nome varia conforme a verso mais recente do software, lembre-se do diretrio mostrado que

neste artigo, asterisk-1.4.10.1. Em seguida, entre no diretrio com cd. O Asterisk 1.4 a primeira verso que usa o configure para preparar a compilao, atravs dos comandos ./configure && make && make install. Voc ir instalar uma verso mnima do Asterisk, adequada para o incio deste tutorial. Depois, vamos com-

Para instalar o Asterisk, primeiro preciso instalar alguns pacotes atravs dos comandos:
apt-get -y install build-essential libncurses5-dev

Asterisk

Internet

/usr/src/, pois alguns plugins que

A compilao feita no diretrio

talvez sejam necessrios no futuro vo buscar seus fontes justamente neste diretrio. Para baixar e descompactam o cdigo-fonte do Asterisk (quadro 2), execute os comandos a seguir.

Figura 2  Asterisk como sistema VoIP puro. Internamente e externamente,


usa-se somente telefonia sobre IP.

Linux Magazine #72 | Novembro de 2010

37

CAPA | VoIP com Asterisk

Tradicional

PABX

Asterisk

PSTN

Figura 3  Asterisk funcionando como proxy ou gateway entre dois aparelhos


tradicionais e a rede ISDN. O novo servidor roteia chamadas externas com mais facilidade.

pilar outros mdulos. Para ter uma instalao bsica funcional, digite ainda make samples para colocar no diretrio /etc/asterisk/ alguns arquivos bsicos de configurao. Em futuras atualizaes do Asterisk, voc pode repetir todos os passos anteriores, mas deixe de fora o make samples.

Arquivos de configurao

ainda: os diferentes arquivos no tm uma gramtica unificada, e por vezes cada um aceita um conjunto diferente de grafias para as palavras chave. Em ltimo caso, experimente cada uma das grafias. O parser do Asterisk no funciona da forma normal, com anlise lxica e posteriormente sinttica para gerar os tokens. Por esse motivo, o OpenPBX [2], um projeto derivado do Asterisk, adotou um formato nico (.plist) para seus arquivos de configurao. Os dois primeiros arquivos mais importantes a editar so o sip.conf (configurao SIP para todos os dispositivos) e o extensions.conf (o plano de discagem). Em ambos h tantos exemplos que qualquer iniciante se perde no meio de tantas informaes. Portanto, apague ambos com:
rm -f /etc/asterisk/sip.conf && rm -f /etc/asterisk/extensions.*

Ao verificar o diretrio /etc/asterisk, nota-se mais de 60 arquivos de configurao, de adsi.conf a zapata. conf. Mas no se aflija: at profissionais Asterisk s costumam trabalhar com alguns poucos arquivos. Pior

O segundo comando apaga, alm do extensions.conf, o arquivo extensions.ael, que traz os planos de discagem no novo formato.

Quadro 1: O Asterisk conquistou Roma


Telefone foi feito para telefonar, isso verdade. Porm, nos ltimos dez a 15 anos, as infraestruturas telefnicas foram atualizadas. Isso permite que os clientes de uma empresa, ao receber uma mensagem, possam telefonar de volta para quem deixou a mensagem. O sistema telefnico ento liga para o Caller-id da pessoa. Muitos veem isso como um desperdcio de recursos, mas, para a empresa telefnica, uma forma de economizar dois ou trs minutos de ligao que seriam gastos aps o fim da mensagem, at o receptor da mensagem ouvir o nmero originrio da mensagem, anotlo num papel, desligar o telefone e ligar para esse nmero. dificilmente dois departamentos poderiam ser mais diferentes. Montar um PBX com alguns cabos, fios e um ferro de solda. Por outro lado, as pessoas programaram sistemas telefnicos incapazes de telefonar uns para os outros.

Enfim, chegou uma empresa americana com um software de Cdigo Aberto para revolucionar o velho mundo. A empresa se chama Digium, e o software o Asterisk. Mark Spencer o criou h alguns anos por necessidade pessoal ele no tinha o dinheiro necessrio para comprar um novo sistema telefnico uma pena, mas assim surgiu o Dois minutos em milhares de ligaes por ms. Isso econo- Asterisk. Inicialmente, ele programou em C o plano de dismiza custos considerveis. O mesmo se aplica a sistemas cagem para conectar os telefones analgicos. de resposta automtica como os dos trens. Hoje, os telefones no apenas falam, mas misturam a isso requintes de Spencer no imaginava que o Asterisk seria to adotaconforto, como o reconhecimento de voz. E mais e mais do. No entanto, conheceu gradativamente outros ususistemas assim se tornam parte das infraestruturas de TI. rios e fabricantes de placas analgicas, e ento nomeou sua criao de Asterisk, o que deu Digium sua reputao atual. Hoje, 120 pessoas ganham a vida na Digium Reaes exotrmicas Algumas empresas unem seus departamentos de telefonia em Huntsville, Alabama, chamada de forma humorosa de e TI. No entanto, isso leva, com frequncia, a atritos, pois Silicotton Valley.

38

www.linuxmagazine.com.br

VoIP com Asterisk | CAPA

Seo general

Para registrar um telefone SIP no Asterisk, preciso adicion-lo ao arquivo /etc/asterisk/sip.conf. No caso mais simples, isso se assemelha ao exibido na listagem 1. O arquivo sip.conf dividido em sees, cujos nomes aparecem entre colchetes. No comeo da listagem, na linha 2, a porta SIP definida com seu valor padro, 5060. Onde: bindaddr = 0.0.0.0 significa que o Asterisk escutar em todos os endereos IP da mquina. Quem desejar algo diferente deve especificar nesse campo o(s) endereo(s) IP nos quais o servidor deve escutar. O contexto (context) indicado na linha4 um padro para capturar todas as outras chamadas, caso voc se esquea de definir, no futuro, o contexto de algum telefone. Os valores so herdados de cima para baixo. Depois de general, as sees trazem os usurios SIP. Como mostra a listagem 1, o nome de cada usurio vem entre colchetes. O parmetro type = friend permite que o telefone receba e efetue ligaes por meio do Asterisk. A senha em secret= definida em texto puro e tambm transferida assim, de forma fcil para sniffers, como espera o protocolo SIP. E o parmetro host=dynamic significa que o telefone SIP pode se registrar com qualquer IP.

Quadro 2: Velho e novo


Aps um bom tempo, finalmente a verso 1.4 do Asterisk finalmente considerada estvel e recomendada pelo fabricante Digium. Os comandos usados neste artigo so vlidos para a verso 1.4 e podem no funcionar em verses anteriores. Contudo, no atualize sua verso 1.2 caso ela j esteja em uso e funcionando a contento. A mxima em time que est ganhando no se mexe! tambm se aplica, de certa forma, a infraestrutura de TI. Existem dois mtodos para programar um plano de discagem: o antigo e o novo, com AEL. O mtodo clssico lembra a linguagem de programao Basic, enquanto o AEL como uma linguagem de programao moderna, embora com algumas restries. Como o Asterisk 1.4 traduz internamente todos os planos AEL para o formato antigo, atualmente o AEL no oferece nenhuma vantagem. Como o mtodo clssico o padro do Asterisk 1.4, assim ser tambm neste artigo. No futuro, vamos abordar o AEL que est por vir.

Quadro 3: Nveis verbose e debug


O Asterisk usa mltiplos nveis de depurao e verbose. Os de depurao no so apenas para desenvolvedores. O nvel de depurao pode ser definido tanto ao iniciar o Asterisk, com a opo v, ou na linha de comando do prprio Asterisk, com o comando core set verbose 3. Ao digitar asterisk -vvvc, o programa iniciado no nvel verbose 3. Os nveis 3 a 5 so os melhores para anlise e depurao de planos de discagem. Em sistemas de produo, sempre melhor optar por core set verbose 0 para no encher os logs desnecessariamente.

Aps salvar os dois arquivos, reinicie o Asterisk com o comando asterisk -vvvc:
Asterisk 1.4.2, Copyright (C) 1999 - 2005 Digium. Written by Mark Spencer <markster@ digium.com> ================================== [ Booting...Nov 20 18:59:28 NOTICE[14937]:cdr.c:1185 do_ reload: CDR simple logging enabled. .................................. Asterisk Ready.

Conectar telefones SIP


Ainda no temos um primeiro telefone SIP. prtico e recomendvel usar um telefone SIP fsico, que pode ser encontrado em qualquer loja

Listagem 1: Arquivo sip.conf


01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 [general] port = 5060 bindaddr = 0.0.0.0 context = outros [2000] type=friend context=meus-telefones secret=1234 host=dynamic [2001] type=friend context=meus-telefones secret=1234 host=dynamic

Sem plano de discagem no funciona


Para o telefone utilizar o Asterisk, preciso existir um plano de discagem mnimo no arquivo /etc/asterisk/ extensions.conf:
[outros] [meus-telefones] exten => 1234,1,Answer() exten => 1234,2,Playback(helloworld) exten => 1234,3,Hangup()

O Asterisk emite diversas mensagens com WARNING e NOTICE (quadro3) e preciso um pouco de tempo para perceber quais so importantes e quais apenas enchem os logs. quase como se os desenvolvedores do Asterisk tivessem propositalmente imposto uma barreira de adoo alta para os iniciantes.

Linux Magazine #72 | Novembro de 2010

39

CAPA | VoIP com Asterisk

especilizada. Alm disso, mltiplos softphones instalados em um mesmo computador podem ter problemas com portas. Se voc no tiver um telefone SIP fsico, ao menos use apenas um softphone por computador (quadro 4).

Os parmetros de configurao para o telefone SIP so preenchidos no arquivo sip.conf (listagem 1) nas linhas 6 a 10:  ser: 2000 U Password: 1234 

 IP-Registrar: Endereo IP do S seu servidor Asterisk SIP-Proxy: Endereo IP do seu  servidor Asterisk

Quadro 4: Telefones: software ou hardware


Com VoIP, possvel optar entre softphones, isto , programas de telefonia, e telefones fsicos, muitas vezes semelhantes a telefones analgicos ou ISDN tradicionais [3]. Softphones tm a vantagem da gratuidade, mas requerem pelo menos um microfone ou um headset. Twinkle [4], Linphone [5] e Ekiga [6] so as opes no Linux. Se o objetivo substituir completamente a telefonia tradicional, telefones VoIP fsicos com conexes Ethernet ou wi-fi so comprovadamente a soluo mais conveniente, principalmente com as recentes quedas nos preos s vezes inferiores a 80 dlares. Contudo, certifique-se de que o hardware suporte o protocolo SIP. Muitos telefones VoIP no mercado funcionam apenas com o Skype, proprietrio. A configurao automtica dos telefones SIP varia bastante de um fabricante para o outro. Diversos aparelhos oferecem uma interface web que permite selecionar no somente o nmero SIP, como tambm a conexo de rede. Os parmetros de rede incluem configurao manual e automtica (por DHCP). Alguns dispositivos so at capazes de receber suas configuraes via BOOTP quase uma necessidade caso seja preciso instalar dezenas ou centenas de aparelhos. Antes de adquirir os telefones, informe-se melhor a respeito da sua infraestrutura de TI.

Aps iniciar o telefone, possvel usar a opo -vvvc no Asterisk para visualizar o ocorrido:
*CLI> -- Registered SIP 2000 at 87.143.3.144 port 5060 expires 120 -- Unregistered SIP 2000

1234. O Asterisk vai reproduzir o som

Agora a hora de discar o nmero

Quadro 5: Reload e restart


Com module reload, pode-se carregar qualquer mdulo. Para reler o arquivo sip. conf, use o comando sip reload. Para ler um novo plano de discagem, use dialplan reload. Se o reload no surtir o efeito desejado os motivos para isso eventualmente podem ocorrer e s podem ser explicados pela natureza esotrica do Asterisk , preciso reiniciar o Asterisk inteiro com o comando restart now. Com isso, o Asterisk finaliza qualquer ligao que ele esteja gerenciando. Para evitar isso, prefira restart gracefully, que impede novas chamadas. O Asterisk aguarda o fim de todas as chamadas que j estejam em andamento. Se isso ainda for extremo demais, use restart when convenient, para reiniciar o Asterisk na primeira oportunidade em que no houver nenhuma chamada em andamento (sem rejeitar novas chamadas). Claro que isso pode significar que o Asterisk s conseguir reiniciar noite, ou quando cessarem as atividades da empresa.

hello-world. O prximo passo lgico configurar um segundo telefone. Isso ocorre de forma semelhante ao primeiro telefone em sip.conf (linhas 12 a 16). O segundo telefone recebe o usurio 2001 e o restante dos parmetros iguais aos do usurio 2000. Na linha de comando do Asterisk, possvel recarregar as informaes do sip.conf com o comando sip reload (quadro 5). Depois disso, ligue novamente o segundo telefone e veja o que o Asterisk exibe na linha de comando. Aps o segundo telefone ser registrado no servidor, ambos j podem telefonar para 1234 para ouvir a mensagem hello-world. Na linha de comando do Asterisk, funciona o j conhecido recurso de auto-completar presente no shell. possvel, por exemplo, digitar sip show e pressionar a tecla [Tab] duas vezes para exibir todas as possibilidades.

Listagem 2: Arquivo extensions.conf


01 02 03 04 05 06 07 08 09 [outros] [meus-telefones] exten => 1234,1,Answer() exten => 1234,2,Playback(hello-world) exten => 1234,3,Hangup() exten => 2000,1,Dial(SIP/2000) exten => 2001,1,Dial(SIP/2001)

Planos de discagem e extenses


Nosso exemplo do Hello world ainda no inclui a possibilidade de os telefones 2000 e 2001 ligarem um para o outro. O Asterisk no possui nenhum tipo de plano de discagem padro que permita chamadas, sem qualquer configurao, entre seus telefones. As informaes que j inserimos no plano de discagem

40

www.linuxmagazine.com.br

VoIP com Asterisk | CAPA

ainda no contemplam esse tipo de chamada. Para usar o telefone 2000 para chamar o 2001 e vice-versa, preciso usar o plano de discagem extensions.conf exibido na listagem 2. Em seguida, leia o novo plano de discagem na linha de comando do Asterisk com dialplan reload, para permitir que ambos liguem para o nmero 1234 e tambm entre si. No jargo do Asterisk, essas regras so chamadas de extenses. No plano de discagem acima, as extenses so 1234, 2000 e 2001. As extenses determinam cada chamada no sistema telefnico, e podem consistir em qualquer nmero de linhas. Todas as linhas seguem o padro:
exten => Nmero_chamado,Prioridade, Aplicao

Tabela 1: Aplicaes usadas


Aplicao Answer() Hangup() Playback (arquivo) Descrio Abre um canal de recepo. Fecha um canal de comunicao. Reproduz o arquivo informado. Ateno: No insira nenhum sufixo ao arquivo, como WAV ou GSM. O Asterisk j os insere automaticamente. Chama o usurio SIP durante o nmero de segundos especificado. Exibe, nos nveis de verbose a partir de 3 (set core verbose 3), o texto informado. Oferece ao originador da chamada a possibilidade de deixar uma mensagem na caixa de mensagens do destinatrio. Oferece ao usurio a possibilidade de verificar suas mensagens de voz. Answers an incoming call on the console (OSS) channel.

Dial (SIP/usurio,tempo) NoOp (texto) VoiceMail (caixa, usurio) VoiceMailMain (caixa)

core show applications na linha de

A primeira prioridade (primeiro passo do programa) sempre a 1. As seguintes acrescentam 1 a seus nmeros. Por isso, as extenses:
exten => 1234,1,Answer() exten => 1234,3,Playback(helloworld) exten => 1234,4,Hangup()

comando produz uma lista de todas as aplicaes disponveis atualmente. Com help <aplicao>, o programa exibe um texto de ajuda. Por exemplo, help answer produz o resultado:
Usage: console answer

Na prxima edio da Linux Magazine, vamos falar sobre padres de planos de discagem, dispositivos SIP e muito mais. At l! n

Mais informaes
[1]  Asterisk: http://www.asterisk.org/ [2]  OpenPBX: http://wiki.openpbx.org/ [3]  Lista de softphones e aparelhos SIP: http://www.voip-info.org/wiki-VOIP+Phones/ [4]  Twinkle: http://www.twinklephone.com/ [5]  Linphone: http://www.linphone.org/ [6]  Ekiga: http://www.ekiga.org/

no funcionam. O Asterisk conseguiria atender a ligao por causa da primeira linha, que usa a aplicao Answer. Porm, ao procurar a instruo com a segunda prioridade, no encontraria nada e desligaria aps um tempo de timeout. Se isso for complicado demais para voc, prefira usar sempre a prioridade n. Com ela, a extenso 1234 ficaria assim:
exten => 1234,1,Answer() exten => 1234,n,Playback(helloworld) exten => 1234,n,Hangup()

Sobre o autor
Stefan Wintermeyer o autor do Livro do Asterisk, da editora Addisson Wesley e primeiro DCAP (Digium Certified Asterisk Professional) alemo. Ele auxilia clientes, por meio da Amooma GmbH (http://www.amooma.de), a implementar solues com Asterisk.

Gostou do artigo?
Queremos ouvir sua opinio. Fale conosco em cartas@linuxmagazine.com.br Este artigo no nosso site: http://lnm.com.br/article/4299

A lista de aplicaes do Asterisk longa e depende dos mdulos includos. A tabela 1 descreve as aplicaes usadas neste artigo. O comando

Linux Magazine #72 | Novembro de 2010

41

Você também pode gostar