Anda di halaman 1dari 4

TUTORIAL

Asterisk descomplicado

VoIP com Asterisk parte III


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

a edio 73 da Linux Magazine, apresentamos a economia com padres, o conceitos de contextos, caller-IDs e telefonemas via provedor. Nesta terceira parte do tutorial, vamos abordar secretrias eletrnicas e sistema interativo de resposta de voz (Interactive Voice Response System, ou IVR) no Brasil conhecido como URA (Unidade de Resposta Audvel). Mos obra!

Secretria eletrnica

O Asterisk traz um sistema de mensagens de voz muito poderoso e fcil de usar. A configurao feita no arquivo voicemail.conf. Apague o arquivo de exemplo com um rm /etc/asterisk/ voicemail.conf e crie um novo igual ao apresentado na listagem 1.

Para ativar a secretria eletrnica para todas as chamadas recebidas, expanda seu plano de discagem como na listagem 2. Se for usado um comando Dial(), o dispositivo chamado tocar para sempre. Porm, se voc utilizar um segundo parmetro para o comando Dial(), o Asterisk insistir somente durante esse nmero de segundos no caso, 30 (linha 8 da listagem 2). Fique vontade para medir os segundos, mas no com um relgio atmico; o Asterisk usar alguma medida particular que resultar em cerca de 30 segundos. Se o telefone em questo no atender, o plano de discagem passar para a prxima prioridade (2, neste caso). Isto est na linha 9, ou na linha 16 da lista-

gem 2 no caso de telefonemas que

venham de fora. A extenso inicia a aplicao com a segunda prioridade, VoiceMail(), que age como uma secretria eletrnica. Ela precisa ser configurada no arquivo voicemail.conf.

Consulta aos recados

Listagem 1: Arquivo voicemail.conf


01 02 03 04 05 06 07 [general] format=wav [default] ;Voicemailbox => senha,nome,e-mail 2000 => 1234,Hans Meier,hans.meier@exemplo.br 2001 => 1234,Uwe Klein,uwe.klein@exemplo.br

Uma secretria eletrnica tambm precisa ser consultada por seu proprietrio. Para isso, criamos a extenso 3000 em nosso plano de discagem. Se voc telefonar para o nmero 3000 a partir de um telefone interno (ou seja, de qualquer nmero no contexto [meus-telefones]), o sistema ir solicitar a sua senha no nosso exemplo, esta 1234. Digite-a e aguarde alguns instantes. Em seguida, o sistema de mensagens de voz vai informar que voc pode ouvir as mensagens. Como est configurado em nosso voicemail. conf, o Asterisk ainda enviar uma cpia de cada recado, no formato WAV, para o e-mail especificado. Na listagem 2, a extenso 3000 utiliza o parmetro ${CALLERID(num)} na linha 11. Esta uma funo do Asterisk para retornar o nmero de

58

www.linuxmagazine.com.br

VoIP com Asterisk | TUTORIAL

quem originou a chamada. No confunda com a varivel ${EXTEN} das outras linhas, que contm o nmero de destino.

nvel 1

URA

Vamos conhecer agora, o sistema interativo de resposta de voz (Unidade de Resposta Audvel, ou URA). A URA oferece uma maneira automatizada de encaminhar chamadas e oferecer menus de voz com mais competncia do que uma secretria eletrnica. Para criar uma URA, preciso, primeiramente, usar arquivos de voz. No tocante ao Asterisk, isso significa usar a aplicao Record(). Ao contrrio de Playback(), Record() requer que o final do arquivo passado esteja de acordo com o codec usado. Com o plano de discagem da listagem 3, possvel chamar qualquer extenso de 9900 a 9999 e pedir que o usurio grave sua mensagem de saudao (tambm chamada de prompt de voz). Eles terminam a mensagem pressionando a tecla # ou ento aguardando. No entanto, uma longa pausa no final de um prompt de voz pode prejudicar o uso de uma srie de componentes de voz de uma s vez. Para implementar uma URA em conjunto com prompts de voz, utilizase a aplicao Background(arquivo). Ela reproduz o menu de voz do arquivo e escuta tons DTMF para prosseguir no plano de discagem. O processamento dos tons do teclado ocorre normalmente, como seria feito em uma ligao comum. Se, durante o uso da aplicao Background(), voc pressionar as teclas [8][8], o Asterisk buscar no contexto atual o que fazer com a extenso 88, iniciando a partir da prioridade 1 desta extenso. Um exerccio simples: crie os seguintes prompts de voz e armazeneos no diretrio /var/lib/asterisk/ sounds/: Entrada: Por favor disque um nmero no seu telefone.

nvel 2

Figura 1 O conceito de URA


do Asterisk funciona somente dentro de um contexto.

Figura 2 Graas ao Goto, um nico

dgito em um menu permite encaminhar o usurio a outro contexto.

Listagem 2: Arquivo extensions.conf


01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 [outros] [meus-telefones] exten => 1234,1,Answer() exten => 1234,2,Playback(hello-world) exten => 1234,3,Hangup() exten => _200[1-2],1,Dial(SIP/${EXTEN},30) exten => _200[1-2],2,VoiceMail(${EXTEN},u) exten => 3000,1,VoiceMailMain(${CALLERID(num)}) exten => _0X.,1,Dial(SIP/${EXTEN:1}@axxeso_out) [do-provedor-sip] exten => _X.,1,Dial(SIP/2000,30) exten => _X.,2,VoiceMail(2000,u)

Listagem 3: Plano de discagem para URA


01 02 03 04 05 06 exten exten exten exten exten exten => => => => => => _99XX,1,Answer() _99XX,2,Wait(1) _99XX,3,Record(/tmp/promptvoz${EXTEN:2}.wav) _99XX,4,Wait(1) _99XX,5,Playback(/tmp/promptvoz${EXTEN:2}) _99XX,6,Hangup()

Listagem 4: Plano de discagem


01 02 03 04 05 06 07 08 09 exten => 30,1,Answer() exten => 30,n,Background(entrada) exten => 30,n,Hangup() exten => _[13579],1,Playback(impar) exten => _[13579],n,Hangup() exten => _[2468],1,Playback(par) exten => _[2468],n,Hangup()

Linux Magazine #74 | Janeiro de 2011

59

TUTORIAL | VoIP com Asterisk

par.wav: Este nmero par. mpar.wav: Este nmero mpar.

Com o plano de discagem da listagem 4, possvel experimentar a funo URA. Mas ateno: a entra-

da precisa ser fornecida enquanto a mensagem da aplicao Background() emitida. Se voc quiser oferecer a possibilidade de o usurio esperar mais um pouco, use os prompts prfabricados silence/1 at silence/9:

exten exten exten exten

=> => => =>

30,1,Answer() 30,n,Background(entrada) 30,n,Background(silence/5) 30,n,Hangup()

Listagem 5: Mais opes


01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [ivr] exten exten exten exten ; ; ; ; => => => => 50,1,Answer() 50,n,Background(menuexemplo) 50,n,Background(silence/5) 50,n,Hangup()

Onde os nmeros representam o nmero de segundos que o Asterisk aguardar em silncio.

URAs com vrios nveis

Como um contexto s pode representar uma extenso, o exemplo de menu precisar de uma opo para cada ao (at as de dois dgitos)

exten => 1,1,Background(dummy1) exten => 1,n,Background(silence/5) exten => 1,n,Hangup() exten => 2,1,Playback(dummy2) exten => 2,n,Hangup() exten => 3,1,Playback(dummy3) exten => 3,n,Hangup() exten => 4,1,Playback(dummy4) exten => 4,n,Hangup()

Listagem 6: Truques de menus e contextos


01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [nivel0] exten => exten => exten => exten => ; ; ; ; 50,1,Answer() 50,n,Background(menuexemplo) 50,n,Background(silence/5) 50,n,Hangup()

No prximo nvel, liberar os nmeros para outras possibilidades de forma a permitir o uso de extenses que j tenham sido usadas em menus anteriores.

O problema no conceito de URA demonstrado que ele sempre opera dentro de um contexto e, por isso, s pode oferecer mais opes por meio de mais nmeros (figura 1 e listagem 5). Isto , obviamente, insatisfatrio, mas uma instruo de Goto() pode resolver esse problema. Ela permite pular a outro ponto do plano de discagem. Com Goto(10), o Asterisk pula para a prioridade 10 na extenso atual. Com Goto(555,1), ele vai para a extenso 555, prioridade 1. Ainda mais interessante Goto(producao,20,5), que pula para o contexto produo, extenso 20 e prioridade 5. Com esses truques, possvel entrar, com um nico dgito de um menu nvel 1, em uma extenso de dois dgitos em outro contexto, e novamente ter disposio outras opes de um dgito (listagem 6 e figura 2). Na prxima edio da Linux Magazine, vamos falar sobre ramificaes no plano de discagem, clculos e operaes sobre texto. At l! n

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.

exten => 1,1,Goto(nivel1,99,1) exten => 2,1,Playback(dummy2) exten => 2,n,Hangup() [nivel1] exten => 99,1,Background(dummy1) exten => 99,n,Background(silence/5) exten => 99,n,Hangup() exten => 1,1,Playback(dummy3) exten => 1,n,Hangup() exten => 2,1,Playback(dummy4) exten => 2,n,Hangup()

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

60

www.linuxmagazine.com.br

Quer falar com os 30.000 profissionais de TI com maior nvel de conhecimento tcnico do mercado nacional? Ento anuncie na Linux Magazine!
Segundo dados do Instituto Verificador de Circulao*, a Linux Magazine atualmente a segunda revista mais vendida para profissionais de TI do mercado editorial brasileiro. Alm disso, a revista que tem o pblico mais qualificado no quesito tcnico. Nossa combinao exclusiva de contedo avanado com uma abordagem prtica faz da Linux Magazine a publicao preferida de quem toma decises e faz recomendaes para compra de produtos e contratao de servios. Anuncie conosco e fale com esse pblico.

Para anunciar, entre em contato: anuncios@linuxmagazine.com.br 11 3675-2600


*Comparao de circulao para os ltimos trs meses de publicaes nacionais voltadas ao segmento de TI.

Anda mungkin juga menyukai