Você está na página 1de 9

Neste Post, trataremos da criao de um URA (Unidade de resposta audvel), que consiste em

um equipamento, em nosso caso, o software Asterisk, que responde a uma ligao, dando ao
usurio a possibilidade de digitar e escolher em um menu falado.
Tambm comentaremos um pouco sobre o protocolo IAX do Asterisk, que pode ser usado para
um ramal, como obrigatrio para interligar Troncos Asterisk, em outro momento abordaremos
com mais profundidade tais protocolos, nesse nosso Post, usaremos ambos os protocolos na
criao de ramais.
Para o cliente IAX poderemos instalar e utilizar o software Zoiper, que d suporte tanto a SIP,
como IAX.
O cenrio que est sendo usado muito semelhante ao Post Anterior, Introduo ao Asterisk
Parte 1, que pode ser visto neste link. Usaremos o mesmo cenrio, um Debian 6, com o
Asterisk baixado de um repositrio, ou seja, j compilado.
Ento agora, mo na massa.
Protocolos SIP e IAX
O protocolo IAX (Inter Asterisk Exchange), um protocolo desenvolvido pela Digium com o
objetivo de estabelecer comunicao entre servidor IAX. Ele, como o SIP, um protocolo de
transporte, s que diferente do SIP faz uso apenas de uma nica porta UDP (4569), tanto para
sinalizao, como para o RTP (Real Time Protocolo). Com isso j temos de cara duas
vantagens, menor complexidade em firewall e Nat, como menor uso da banda. Um protocolo
aberto, mas ainda sim com problemas no sentindo de manter a documentao padronizada.
O protocolo SIP utiliza duas portas, como dito anteriormente, a porta UDP 5060 utilizado para
sinalizao em outra qualquer definida em tempo de execuo para trfego dos dados.
O SIP um protocolo de texto e baseia-se na arquitetura cliente/servidor, desta forma o SIP
pode fazer conexo ponto a ponto. Em termos de benefcios temos a simplicidade no seu uso.
Qual protocolo devo usar?
Acredito que essa resposta se dar no momento da implantao, dependendo dos protocolos
suportados pelo seu equipamento VOIP (telefones, etc.). Neste Post, iremos implantar os dois,
com ramais diferentes, e futuramente, na ligao de dois troncos usaremos o IAX2, verso 2 do
IAX.

Configurao do Asterisk para Ramais
Como se trata de um novo Post, resolvi fazer tudo do zero novamente. Obviamente, no estarei
abordando novamente a instalao em si, e nem comentando o que j foi visto em termos de
ramais. Somente no que diz respeito a novas tecnologias, tais como a prpria URA, e os ramais
IAX.
Vamos configurar os ramais SIP, no arquivo de configurao /etc/asterisk/sip.conf. Primeiro
devemos limpar o arquivo e acrescentar as configuraes conforme abaixo:
# >/etc/asterisk/sip.conf
#vim /etc/asterisk/sip.conf

####CONTEDO DO
SIP.CONF############################
[general]
bindport = 5060
bindaddr = 0.0.0.0
srvlookup = yes
disallow = all
allow = alaw
allow = gsm
language = pt_BR

[template](!)
type = friend
context = ramais
host = dynamic

[2001](template)
secret = 1234
mailbox = 2001

[2002](template)
secret = 1234
mailbox = 2002



Neste arquivo podemos ver que no h nada de diferente h no ser a entrada mailbox. Este
opo ns iremos usar mais para frente quando configurarmos a caixa postal do usurio para
receber mensagens de voz. Neste contexto ele simplesmente consulta a caixa de mensagens
em questo e traz essa informao na tela de exibio do Telefone IP ou software. Os restantes
dessas informaes j vm do Post anterior.
Agora iremos configura o arquivo iax.conf, da mesma forma que o anterior, iremos zerar o
arquivo, e comear a configurao partir de um arquivo em branco. Vejamos como ficar:
# >/etc/asterisk/iax.conf
#vim /etc/asterisk/iax.conf

####CONTEDO DO
IAX.CONF############################
[general]
bindport = 4569
bindaddr = 0.0.0.0
disallow = all
allow = alaw
allow = gsm
language = pt_BR

[template2](!)
type = friend
context = ramais
host = dynamic

[2003](template2)
secret = 1234
mailbox = 2003
requirecalltoken = no

[2004](template2)
secret = 1234
mailbox = 2004
requirecalltoken = no

A configurao do arquivo iax muito semelhante ao sip, temos bindport (porta UDP) bindaddr
(endereo), os protocolos em disallow e allow, a lngua (language). Usamos o modelo
template2, para aplicar nos ramais 2003 e 2004, senhas padro 1234, host dinmico, ou seja, o
ramal no est configurado para um ip especifico, o nico item novo o requirecalltoken, que
vai permitir o registro do ramal sem a necessidade de validar a chamada por token.
Os ramais j esto prontos, agora devemos carreg-lo no Asterisk, executando os comandos
abaixo:
#asterisk -r
*CLI> sip reload
*CLI> iax2 reload
*CLI> sip show peers

Name/username Host Dyn Nat ACL Port Status
2001/2001 192.168.0.104 D N 35458 Unmonitored
2002 (Unspecified) D N 5060 Unmonitored
2 sip peers [Monitored: 0 online, 0 offline Unmonitored: 2 online, 0
offline]

*CLI> iax2 show peers

Name/Username Host Mask Port Status
2004 (Unspecified) (D) 255.255.255.255 0 Unmonitored
2003 192.168.0.102 (D) 255.255.255.255 4569 Unmonitored
2 iax2 peers [0 online, 0 offline, 2 unmonitored]

Agora devemos configurar o plano de discagem, o que ira permitir os ramais se comunicarem.
Iremos usar o arquivo extensions.conf, e novamente iremos comear a partir de um arquivo sem
contedo .
# >/etc/asterisk/extensions.conf
#vim
/etc/asterisk/extensions.conf


[ramais]
;SIP
exten =>2001,1,Dial(SIP/2001)
exten =>2002,1,Dial(SIP/2002)

;IAX
exten =>2003,1,Dial(IAX2/2003)
exten =>2004,1,Dial(IAX2/2004)


Como nos itens anteriores deveremos recarregar estas configuraes, vejamos como:
#asterisk -r
*CLI> dialplan reload
*CLI> dialplan show ramais

[ Context 'ramais' created by 'pbx_config' ]
2001 => 1. Dial(SIP/2001) [pbx_config]
2002 => 1. Dial(SIP/2002) [pbx_config]
2003 => 1. Dial(IAX2/2003) [pbx_config]
2004 => 1. Dial(IAX2/2004) [pbx_config]

-= 4 extensions (4 priorities) in 1 context.
=-

Depois desse processo, basta testar, lembrando que voc dever ter um software compatvel
com IAX2, tal como Zoiper, www.zoiper.com. Agora vamos comear a ver as novas
configuraes, o assunto deste Post, a URA.

Configuraes da URA
Deveremos editar o arquivo extensions.conf para podermos configurar nossa URA. O processo
neste exemplo vai consistir em gravar um mensagem atravs do Telefone IP ou SoftFone, e
depois usar-la para resgatar. Depois de gravarmos nossas mensagens iremos configurar a URA
propriamente dito.
Algumas novidades sero utilizadas nessa configurao, em relao criao de extenses e
aplicaes que deveremos usar.
Algumas aplicaes importantes para o uso da URA , lembrando que o Asterisk possui mais de
170 aplicaes. Mas antes de falarmos das aplicaes, vejamos como so chamadas.
Normalmente temos um contexto (contexto tm entradas do tipo [], por exemplo [ramais]),
dentro do contexto teremos as entradas com extenso, prioridade e aplicao:
exten => extenso, prioridade, aplicao()
A extenso pode ser uma seqncia de caracteres, no podendo ser superior a 79 caracteres.
Dentro de cada contexto, ns definimos uma ou mais extenso. Uma extenso uma instruo
que o Asterisk ir seguir, acionada por uma chamada de entrada ou por dgitos discados num
canal. As extenses especificam o que acontece s chamadas enquanto elas seguem seu
caminho pelo dialplan. Apesar de as instrues poderem ser usadas para especificar ramais de
telefones no sentido tradicional, elas podem ser utilizadas para muito mais no Asterisk.
Existem algumas extenses especiais, muito utilizadas como: s (start), i (extenso invlida), t
(quando o tempo para a escolha de uma opo termina), fax (desvia automaticamente a
extenso fax)
Na prioridade a extenso pode ter vrios passos, chamados prioridades. Cada prioridade
numerada seqencialmente, comeando por 1. Cada prioridade executa uma aplicao
especfica. Como exemplo, a seguinte extenso pode responder a uma chamada (na prioridade
1) e ento desligar (na prioridade 2):
exten => 2001,1,Answer()
exten => 2001,2,HangUP()
E aplicao , como nome diz, ser o que o Asterisk, ir executar, cada aplicao executa uma
ao especifica. Abaixo veremos as aplicaes necessrias para nossa URA.

Answer (): Est aplicao atende o canal se estiver sendo solicitado, normalmente antes de
executar outra aplicao, ele deve ser atendida, e o responsvel essa aplicao:
Ex: exten => s,1,Answer()
Essa extenso inicia a aplicao Answer com prioridade 1, o valor s de start, 1 a prioridade
e Answer a aplicao propriamente dita. Depois disse ele segue o que o arquivo de extenso
solicita, atravs do Dialplan.
Wait() : Aguarda por um nmero de segundos
Ex: exten = s,2,Wait(1)
Essa extenso aguarda por 1 segundo antes de prosseguir.
PlayBack() : Toca um arquivo previamente gravado para um canal. O PlayBack no permite
que o usurio interaja com o sistema, esses sons devem ficar em /var/lib/asterisk/sounds
Ex: exten = s,3,PlayBack(goodbye)
Essa extenso ira tocar o arquivo goodbye no canal especificado.
Background() : Similar ao PlayBack, mas este permite que o usurio interaja para que possa
ser digitado um valor na Ura. Aps essa interao, bem provvel que use o Goto, para
encaminhar para extenso solicitada.
Ex: s,2,BackGround(saudao)
Ir tocar o arquivo saudao no canal especificado, aguardando uma interao do usurio para
encaminhar para aplicao solicitada.
Record() : Usado para fazer gravaes, as gravaes so salvas em /var/lib/asterisk/sounds.
Posteriormente podem-se usar tais gravaes em nossa usa. Com certeza iremos brincar com
isso.
Ex: 2005,3,Record(menu.alaw)
I a gravar o arquivo menu.alaw na contexto 2005 ( Normalmente o prprio ramal atendido)
GoTo() : Pula para um contexto, extenso e prioridade especifica. Mas pode desviar a
aplicao para uma extenso, prioridade dentro do mesmo contexto, ou at uma prioridade
especifica dentro do mesmo contexto e extenso.
Visto as aplicaes mais importantes, vamos gradativamente implantar nossa URA, para
comearmos, iremos fazer um exemplo bem simples, escolheremos um ramal, onde ele ira
atender com a aplicao Answer, Tocar algum arquivo ( os arquivos instalados do pacotes
asterisk-core-sounds-en-gsm, ficam em /usr/share/asterisk/sounds ),e aps ouvirmos o arquivo,
o ramal ser desligado via hangup.
Para isso devemos editar o arquivo extensions.conf novamente e adicionar as linhas abaixo, o
restante que j havia sido configurado no precisa ser alterado.

exten => 2000,1,Answer()
exten => 2000,2,PlayBack(demo-enterkeywords)
exten => 2000,3,hangup()

No se esquea de recarregar o DialPlan. Depois de feito esse processo basta discar para o
ramal 2000 que ser ouvido uma mensagem. Na primeira linha temos o primeiro passo, quando
o asterisk detectar o valor 2000, ira executar o primeiro comando, pois a prioridade 1 , como se
fosse uma ordem, e aps isso o 2 e o 3 dentro da mesma extenso. Na primeira linha o Asterisk
atende a chamada, passa para a segunda linha e Toca o contedo do arquivo demo-
enterkeyword.gsm, que encontra-se no diretrio informado anteriormente, e por fim desliga com
a aplicao hangup.
J podemos ter idia de como funciona uma Ura, ao invs de dar um hangup, poderia
facilmente mandar para um novo contexto, que analisasse dgitos tais como 1 para
departamento 1, dois para departamento 2, e assim sucessivamente, conforme a necessidade.
Alias porque no faz-lo.
Podemos ento melhor nosso script, mas nesse caso, vamos fazer uma gravao primeiro, dos
departamentos para ento criarmos a ura.
Iremos alterar as configuraes do ramal 2000, agora para gravar uma mensagem, aps isso
toc-la para ouvirmos e ento desligar. Devemos alterar o cdigo anterior do ramal 2000 para o
seguinte:

exten=>2000,1,Answer()
exten => 2000,2,Wait(1)
exten=>2000,3,Record(menu.gsm)
exten=>2000,4,Wait(1)
exten=>2000,5,Playback(menu)
exten=>2000,6,Wait(1)
exten=>2000,7,Hangup

Novamente no podemos esquecer-nos de dar um reload no DialPlan. Nestas linhas temos as
seguintes informaes, linha 1 , que atende a ligao, na linha 2, 4 e 6 o Wait, usado para
aguardar 1 segundo antes de passar para a prxima aplicao, o Record na linha 3 ir gravar a
mensagem com o nome de arquivo menu.gsm, e temos a opo PlayBack para poderemos
escutarmos a gravao, e por fim na ultima linha desligado.

Ateno: Cuidado com a pasta /usr/share/asterisk, caso no pertena ao usurio e
grupo asterisk, a permisso de gravao ser negada. E agora uma dica, em vez de
numerar as linhas com as prioridades 1, 2, 3, etc, basta numerar a primeira com o
nmero 1 e as seguintes com a letra n, que era seguir o fluxo linha a linha. E por ultimo
cuidado com rede wireless, pois tive muitos problemas usando os codecs padres.

Ao final da gravao deve-se digitar a tecla sustenido (#), para ento ouvirmos a gravao.
Grave algo do tipo dois ramais que sero redirecionados como, por exemplo, suporte e vendas.
Grave algo do tipo: Digite 1 para suporte, 2 para vendas e 3 para RH.
Enfim depois de todo esse processo podemos ento configurar a URA. Muita calma est quase
acabando. Eu acho rsrs!! O prximo passo ser agora a criao da URA,logo abaixo teremos o
arquivo completo do extensions.conf:
[ramais]
;SIP
exten =>2001,1,Dial(SIP/2001)
exten =>2002,1,Dial(SIP/2002)

;IAX
exten =>2003,1,Dial(IAX2/2003)
exten =>2004,1,Dial(IAX2/2004)


exten => 2000,1,Goto(ura,s,1)

[ura]
exten => s,1,Answer()
exten => s,2,Wait()
exten => s,3,Background(menu)

exten => 1,1,PlayBack(tt-
monkeys)
exten => 1,n,HangUp()

exten => 2,1,Dial(SIP/2001)
exten => 2,n,HangUP()

exten => 3,1,Dial(AIX2,2003)
exten => 3,n,HangUp()

Neste arquivo podemos ver novos elementos inseridos, e como havia j comentando, acho que
no novidade, temos o Goto e o Background, como novidades nesse momento. Os primeiros
itens relacionados aos ramais SIP e AIX j foram comentados e no tem nenhuma novidade.
Agora alinha referente ao ramal 2000 traz a aplicao Goto, que ira desviar o fluxo para o
contextoura, extenso x e prioridade 1, que est logo abaixo.
Na extenso ura, o primeiro item executado atender a chamada, aguardar por tempo
indeterminado, j que no foi informado o tempo, e em Background narrar o menu gravado
anteriormente. Quando o usurio escolher a opo entre 1,2 e 3, ser desviado para tais
extenses. Temos a extenso 1, tocando um som chamado tt-monkeys, na extenso 2 um
desvio para o ramal 2001 e por fim extenso 3 para o ramal 2003.
A URA praticamente est pronta.
Recarregue o Dialplan novamente e teste, discando para o ramal 2000, e posteriormente para
onde quer ser redirecionado.
Ufffa!!! Cabou ???? Naum!!!!
Temos um grande problema aqui: E se o usurio digitar uma extenso que no existe? E se
pior, o cara teve uma dor de barriga, foi ao banheiro e deixou o telefone fora do gancho sem
digitar nada?
O asterisk no tem nenhuma ao configurada, com isso teremos um srio problema. Por isso
devemos tratar ramais invlidos, e tempo de aguardo. Lembram da extenso especial i e t. E
justamente ela que nos tirar deste problema.
Devemos para finalizar finalmente, adicionar essas entradas na URA. Agora enfim o arquivo
final:
[general]
autofallthrough = no


[ramais]
;SIP
exten =>2001,1,Dial(SIP/2001)
exten =>2002,1,Dial(SIP/2002)

;IAX
exten =>2003,1,Dial(IAX2/2003)
exten =>2004,1,Dial(IAX2/2004)


exten => 2000,1,Goto(ura,s,1)

[ura]
exten =>
s,1,Set(TIMEOUT(response)=10)
exten => s,n,Set(TIMEOUT(digit)=2)
exten => s,n,Answer()
exten => s,n(repete),Background(menu)

exten => 1,1,PlayBack(tt-monkeys)
exten => 1,n,HangUp()

exten => 2,1,Dial(SIP/2001)
exten => 2,n,HangUP()

exten => 3,1,Dial(AIX2,2003)
exten => 3,n,HangUp()

exten => i,1,PlayBack(invalid)
exten => i,n,Goto(s,repete)

exten => t,1,PlayBack(vm-goodbye)
exten => t,n,HangUp()

Bom, agora temos uma URA realmente. Vamos entender o arquivo:
O parmetro autofallthrough permite o uso de tempo, com TIMEOUT , para digitao dos
dgitos na URA.
Quando ligamos para os ramais 2001 at 2004, feito uma chamada normalmente.
Ao ligarmos para o ramal 2000, camos na URA, onde feito o desvio para o
contexto ura,extenso s e prioridade 1.
J na ura, o primeiro item o TIMEOUT, como o nome diz , tem relao ao tempo. Nesse
primeiro caso, ela limita o tempo que o usurio tem para digitar a extenso, se em 10 segundo
ele no digitar, automaticamente vai ser encaminhado para extenso t, onde ser tocado o
arquivo vm-goodbye.
No segundo item TIMEOUT(digit) , especificamos o tempo mximo entre um dgito e outro.
Obviamente em nosso caso no h necessidade, pois as extenses tm apenas um digito, mas
caso houvesse mais, seria o tempo padro de 2 segundos.
A ura ira atender em Answer, e em seguida iniciar tocar o que est especificado em
Background, que justamente o menu gravado anteriormente. O item repete nada mais que um
nome que demos, ou label, que ser usado com o Goto em algum momento.
Extenses 1, 2,3 encaminham a ligao para seus respectivos ramais.
A extenso i, utilizado quando digitado um ramal inexistente, neste caso ser utilizada o
arquivo invalid para tocar, para informar ao usurio que o ramal invalido, em seguida
novamente utilizado o Goto para desviar a ligao para o comeo da ura, no label repete.
E por fim a extenso t, utilizado com os primeiros itens de TIMEOUT, desliga a chamada.
A nica desvantagem justamente a lngua, para esse problema temos o pacote de sons em
portugus, que pode ser baixado diretamente de http://sourceforge.net/projects/disc-
os/files/Disc-OS%20Sounds/1.0-RELEASE/Disc-OS-Sounds-1.0-pt_BR.tar.gz/download.
Concluso
Neste segundo Post sobre asterisk, podemos ver que avanamos bastante, mas o grau de
dificuldade no foi to complexo.
Em nosso prximo Post, estaremos vendo voicemail, mensagem de voice, e talvez abordemos
algo de macro.
Aproveitando o Post, gostaria de informar a todos, que em breve, estarei lanando um site de
hospedagem, e que estarei migrando o Blog para este novo local. bem provvel que o site
fique fora do ar, algum tempo.
Espero que tenham gostado e at a prxima.
Andr Stato

Você também pode gostar