Requisitos e Criação dos Ramais
Para esse artigo, partimos da premissa de que o
Asterisk já esteja instalado.
Caso ainda não o tenha instalado no sistema, recomendo o artigo de nosso amigo
Bruno Ricci, link abaixo:
Seguindo o padrão de diretórios do
Linux, devemos navegar até a pasta
/etc/asterisk para encontrarmos os arquivos de configuração do mesmo.
Com o editor de sua preferência, edite o arquivo "
sip.conf" com o texto abaixo:
[general]
bindaddr=0.0.0.0
bindport=5060
context=ramais
disallow=all
allow=gsm
allow=alaw
[4000]
callerid=ramal1<4000>
canreinvite=no
dtmfmode=rfc2833
host=dynamic
type=friend
secret=4000
[4001]
callerid=ramal2<4001>
canreinvite=no
dtmfmode=rfc2833
host=dynamic
type=friend
secret=4001
Salve e feche o arquivo.
Entre na CLI do Asterisk com o comando:
# asterisk -rvvvvvv
... e execute o comando:
# sip reload
Após isso execute o comando
sip show peers para ver os ramais criados.
Detalhando o código no arquivo "sip.conf":
- O campo [general] indica a seção geral ou seja, são as definições gerais de comunicação;
- bindaddr=0.0.0.0 indica ao Asterisk que as contas SIP irão se a associar por qualquer equipamento, telefones IP;
- context é o contexto que será usado posteriormente no plano de discagem;
- disallow indica ao Asterisk que serão utilizados Codecs;
- allow indica ao Asterisk quais Codecs serão utilizados;
- mais abaixo temos a criação dos ramais 4000 e 4001;
- callerid indica o texto que será binado no ramal que receber as ligações;
- canreinvite indica ao Asterisk que uma vez estabelecida a chamada os ramais podem continuar trocando pacotes porém não através do Asterisk mas sim através do canal entre eles;
- dtmfmode indica ao Asterisk o padrão de DTMF que será utilizado;
- host indica o IP associado ao ramal, no caso definido como dinâmico;
- type, tipo do ramal user, peer ou friend;
- secret senha para autenticação do ramal.
Plano de discagem
Agora iremos realizar a criação do plano de discagem para nossos ramais.
No diretório
/etc/asterisk acesse arquivo "extensions.conf" com seu editor de texto preferido e adicione o código abaixo:
[general]
[globals]
[ramais]
exten => 4000,1,Dial(SIP/${EXTEN})
exten => 4000,2,HangUP();
exten => 4001,1,Dial(SIP/${EXTEN})
exten => 4001,2,HangUP();
Salve e feche o arquivo.
Acesse a CLI do Asterisk e aplique o comando:
# dialplan reload
Pronto, já é possível realizar ligações para 4000 e 4001.
Agora, imagine um ambiente onde precisamos criar 200 ramais, programar o plano de discagem da maneira que fizemos mais acima é inviável. Para otimizar a criação do plano, podemos utilizar máscaras ou coringas, onde os valores numéricos são substituídos por letras e cada letra representa um range de numérico.
Abaixo, equivalência do range numérico das letras:
- X - pode representar qualquer digito entre 0 e 9
- Z - pode representar qualquer digito entre 1 e 9
- N - pode representar qualquer digito entre 2 e 9
- [2-6] - pode representar qualquer número de 2 a 6
Exemplo de plano de discagem para 500 ramais utilizando o range de 4000 a 4499:
exten => _4[0-4]XX,1,Dial(SIP/${EXTEN})
exten => _4[0-4]XX,2,HangUP();
Também é possível utilizar coringas para a extensão, exemplo abaixo:
exten => _4[0-4]XX,1,Dial(SIP/${EXTEN})
same => 2,HangUP();
Detalhando o código no arquivo "extensions.conf":
- A sessão [globals] declarar variáveis globais dentro do plano de discagem;
- [ramais] é no nome do contexto que criamos para nossos ramais no arquivo "sip.conf";
- A aplicação Dial conecta dois canais de comunicação, sua sintaxe é a seguinte Dial(protocolo/identificação[,timeout,opções]);
- A aplicação HangUP encerra um canal de comunicação.
Criação da URA
Por fim, iremos criar uma URA "Unidade de Resposta Audível"
Dentro do diretório
/etc/asterisk, acesse com seu editor de textos preferido o arquivo "extensions.conf". Dentro do contexto ramais, abaixo do plano de discagem adicione os códigos abaixo:
exten => 800,1,Goto(UraSimples,s,1)
[UraSimples]
exten => s,1,Answer()
same => n,Background(urasimples)
same => n,WaitExten(10)
exten => 1,1,Dial(SIP/4000)
same => n,HangUP()
exten => 2,1,Dial(SIP/4001)
same => n,HangUP()
exten => i,1,Playback(opc-invalida)
same => n,Goto(UraSimples,s,1)
exten => t,1,Playback(tempo-esgotado)
same => n,Goto(UraSimples,s,1)
Detalhando o código acima:
- Ao discar 800, a ligação será direcionada para [UraSimples];
- A aplicação Answer "atende" a ligação;
- A aplicação "Background" executa o áudio urasimples, lembrando que o áudio deve estar no diretório /var/spool/asterisk/sounds;
- A aplicação WaitExten aguarda por 10 segundos o usuário digitar alguma tecla;
- Caso digite 1, a ligação será entregue ao ramal 4000;
- Caso digite 2, a ligação será entregue ao ramal 4001;
- Caso seja digitada alguma opção inválida, executa o áudio "opc-invalida" e a ligação retornará ao inicio da URA;
- Caso o tempo se esgote sem que nenhuma tecla seja digitada, executa o áudio "tempo-esgotado" e a ligação retornará a inicio da URA.