Configurando Ramais e realizando ligações com a central telefônica VoIP

Este post faz parte da série Central Telefônica VoIP com Asterisk. Leia também os outros posts da série:

No artigo anterior construímos uma Distribuição Linux com Asterisk. Para acompanhar este artigo é mandatório ter o Asterisk instalado e em execução, conforme descrito no artigo Construindo uma Distribuição Linux para central telefônica VoIP.

 

Neste artigo serão criados um plano de discagem em dois ramais SIP utilizando Soft Phone. Será configurado um celular e um computador, porém, nada impede de utilizar/configurar um Telefone IP que aceite o protocolo SIP, o que é muito comum.

 

A topologia da nossa central VoIP será como abaixo:

 

Topologia da nossa central VoIP
Figura 1 - Topologia da nossa central VoIP.

 

Neste caso temos dois departamentos: o da Engenharia de Software (Ramal 1001), configurado em um computador com um software para User-Agent SIP; e o da Engenharia de Hardware (Ramal 1002), com um aplicativo User-Agent SIP instalado em um celular com Android, detalhes na tabela a seguir:

 

User-Agent SIP (UA)

Departamento Eng. SW

Departamento Eng. HW

Ramal1001Ramal1002
Equip.

Notebook/

PC

Linux Mint 15 AMD64Kernel 3.8.0-35Equip.Celular

Motorola XT919

Android 4.4.2

SoftwareZoiper 3.325608SoftwareSoftphone Zoiper 1.43
IP10.11.12.110IP10.11.12.105

 

Inicialmente, a configuração dos ramais, planos de discagem e outras regras são realizados em dois arquivos no Asterisk:

 

Configurações do Plano de Discagem/etc/asterisk/extensions.conf
Configurações dos Ramais SIP/etc/asterisk/sip.conf
Configuração AIX (Inter-Asterisk-eXchange)/etc/asterisk/aix.conf

 

 

DialPlan - Plano de Discagem

 

O Asterisk reconhece o plano de discagem como Contextos (contexts), e fica no extensions.conf. Exemplo do nosso arquivo de configuração:

 

 

Onde ";" é comentário no arquivo de configuração, o texto sip-interno entre [ ] é uma variável global, ou melhor, um contexto global. Também há o [general] para regras e definições a se aplicar em todos os contextos criados, toda definição de extensão, plano de discagem ou regra inicia com exten = ou exten =>, seguindo o formato:

 

exten => EXTENSÃO,PRIORIDADE,COMANDO(PARÂMETROS)

 

A PRIORIDADE é a ordem que será seguida. A maior prioridade é o menor número, e COMANDO é uma lista de comandos e parâmetros que se deseja executar/processar. Alguns dos comandos:

 

Answer, Busy, Dial, Ringing, Hangout, ...

 

Nosso extensions.conf tem apenas Dial (comando para realizar chamadas), que força apenas ramais que comecem com 1 seguido de 3 números, e com ${EXTEN} é o que será representado na ligação, e o comando Hangout (comando para encerrar chamadas).

 

Neste mesmo arquivo define-se regras para SMS, configuração de troncos, provedores para as ligações, URA e diversas outras configurações.

 

Mais informações e detalhes do Extensions em Asterisk em Asterisk config extensions.conf e dos Comandos e Parâmetros em Asterisk – Commands Call Management.

 

 

Configuração dos Ramais SIP

 

Neste arquivo ficaram as definições dos ramais SIP, configurações de provedores para ramais e diversas particularidades para cada ramal, como senhas, codecs e acessos do ramal. O sip.conf utilizado para os ramais 1001 e 1002 que definimos:

 

 

Um ponto muito importante e que requer uma profunda análise é a parte de codecs. Não será abordado neste artigo, mas existem diversos codecs para diversas ocasiões, alguns gratuitos e outros comerciais. Entre os populares estão G.711 (alaw), G.711 (ulaw), gsm, G.729, iLBC, Speex entre outros.

 

O que um codec influencia? Qualidade, processamento do Algoritmo do Codec - onde entra MIPS (Millions of Instructions per Second) e uso de DSP’s (Digital Signal Processor), MOS (Mean Opinion Score) - sendo a qualidade da voz na escada 1 (Ruim) a 5 (Excelente), largura de banda, entre outros fatores.

 

Em nosso projeto os testes foram feitos com uLaw, aLaw e GSM. Uma abordagem mais ampla sobre Codecs pode ser vista em Asterisk Codecs.

 

Ainda no sip.conf faltou a abordagem sobre o que seriam as variáveis host e type, que mereciam uma abordagem fora do arquivo.

 

HostHost ou IP de onde o ramal esta registrado, pode ser um host (voip.meudominio.com.br), um endereço IP (234.123.234.123) ou dynamic (resumidamente, a cada hora um IP é utilizado para registrar)
TypeDefinição se o ramal pode receber chamadas (peer), realizar chamadas (user), ou receber/realizar chamadas (friend)

 

Com estas configurações já podemos configurar os ramais SIP, realizar um reload no serviço do Asterisk ou reiniciar a placa.

 

 

Configurando Ramais e realizando ligações

 

Tanto no computador quando no celular foram utilizados o programa Zoiper, como descrito na tabela no início do artigo, mas existem outras opções como 3CX, X-Lite, Ekiga, LinPhone, Jitsi, entre diversos outros. Alguns apenas desktop, outros mobile/desktop e outros apenas para uso comercial.

 

Na Figura 2, utilizando o Zoiper no celular será criada uma conta com nome EmbarcadosVOIP, e os parâmetros da conta SIP adicionados são:

 

Host (IP Servidor Asterisk)10.11.12.1
Username (Ramal SIP)1002
Password (Parametros secret em sip.conf)hw1002

 

Configurando conta SIP no Zoiper do Celular
Figura 2 - Configurando conta SIP no Zoiper do Celular

 

A Figura 3 ilustra a conta criada:

 

Conta adicionado no celular
Figura 3 - Conta adicionado no celular

 

O mesmo deverá ser feito com o SoftPhone no computador e no exemplo configurei o Ramal 1001.

 

Será utilizado o comando asterisk para acessar o modo CLI e entrar com comandos para informações dos ramais SIP até um log final da ligação realizada.

 

Acessando o CLI do asterisk via terminal:

 

Visualizando algumas informações e configurações que definimos:

 

Conectando o primeiro Softphone Zoiper usando o ramal 1001 (Notebook/PC), acompanhando via log do sistema e CLI Asterisk:

 

 

Neste caso, estamos com o 1001 (online), isso ocorre apenas quando o TelefoneIP, SoftPhone ou o User-Agent que esteja utilizando estiver na rede e tenha sido registrado no Asterisk, e esta apto a ser utilizado.

 

Agora conectando o segundo ramal SIP 1002(Celular):

 

Os dois ramais estão registrados, será feita uma ligação do 1001 para o 1002, abaixo o log do Asterisk CLI de uma ligação de 1:05:

 

Na Figura 4 é ilustrado o Zoiper notificando uma ligação no notebook:

 

Notebook Ramal 1001 recebendo ligação do Celular Ramal 1002
Figura 4 - Notebook Ramal 1001 recebendo ligação do Celular Ramal 1002

 

Verificando o log após encerrar a ligação:

 

E o log gerado no Master.csv sobre a ligação entre os ramais:

 

Na Figura 5 o Celular Ramal 1002 recebendo uma ligação do Ramal 1001, e na Figura 6 a ligação em andamento:

 

Celular recebendo ligação do notebook
Figura 5 - Celular recebendo ligação do notebook
Ligação em andamento no celular com Zoiper
Figura 6 - Ligação em andamento no celular com Zoiper

 

Algumas informações do embarcado com o Asterisk em execução durante uma ligação:

 

Mesmo durante uma ligação o consumo de CPU e Memória do Asterisk continuou relativamente baixa.

 

O que foi abordado neste artigo é uma base de VoIP, SIP e Asterisk, podendo expandir o número de ramais, opções e acessos fora da rede local. Divirta-se!

 

Até a próxima!

 

 

Referências

 

https://wiki.asterisk.org/wiki/display/AST/Asterisk+Main+Configuration+File

 

https://wiki.asterisk.org/wiki/display/AST/Directory+and+File+Structure

 

https://wiki.asterisk.org/wiki/display/AST/System+Libraries

 

Asterisk Extensions

 

Call management (hangup, answer, dial, etc)

 

ITU G.711

Outros artigos da série

<< Construindo uma Distribuição Linux para central telefônica VoIP
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Cleiton Bueno
Proprietário da B2Open onde oferecemos consultoria, treinamentos e desenvolvimento em Sistemas Embarcados. Entusiasta a filosofia open-source, mais de 10 anos de experiências em Linux e FOSS. Em sistemas embarcado do firmware baremetal ao Linux Embedded, e há aproximadamente 8 anos desenvolvendo em (C, Python, Qt e muito Shell Script), além de profiling, hardening e tuning para targets com Linux Embarcado. Graduado em Engenharia da Computação pela UNICEP com ênfase em robótica e sistemas embarcados.

Deixe um comentário

avatar
 
  Notificações  
Notificar