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

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:

;
; SIP Interno apenas Ramal na mesma rede
;
[sip-interno]
;exten => 1001,1,Dial(SIP/1001)		; Modelo de um plano de discagem para o Ramal SIP 1001
exten => _1XXX,1,Dial(SIP/${EXTEN})	; Apenas chamadas iniciadas com digito 1 com mais 3 digitos, e realiza chamada "Dial"
                                        ; usando protocolo SIP com o ramal digitado e representado por ${EXTEN}
exten => _1XXX,2,Hangup()		; Depois da ligacao realiza Handout no sistema

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:

;
; SIP Configuration example for Asterisk
;
[general]
bindport = 5060
bindaddr = 0.0.0.0
disallow = all
allow = alaw,ulaw,gsm
language = pt_BR   ; Idioma, util principalmente no caso de uso de audios customizados /usr/share/asterisk/sounds/


[ippbx-codecs](!)                                                                                                 
disallow=all          ; Desabilita todos os codecs                                                                                    
;allow=ilbc                                                                                                
;allow=g729                                                                                                
allow=gsm             ; Habilita codec gsm                                                                                     
;allow=g723                                                                                                
allow=ulaw            ; Habilita codec ulaw                                                                                     
allow=alaw            ; Habilita codec alaw                                                                                     
; em uma linha apenas seria
;allow=!all,gsm,alaw,ulaw


[1001](ippbx-codecs)
callerid   = EngenhariaSW<1001>  
secret     = sw1001
host       = dynamic
type       = friend
context    = sip-interno


[1002](ippbx-codecs)              ; Utiliza o conteudo que criamos na variavel ippbx-codecs
callerid   = EngenhariaHW<1002>   ; O que será exibido ao chamar
secret     = hw1002               ; Senha para configurar este ramal SIP
host       = dynamic                           
type       = friend                               
context    = sip-interno          ; Se aplica ao plano de discagem sip-interno criado

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:

root@colibri-imx6:/etc/asterisk# asterisk -r vvvvv
Asterisk 13.5.0, Copyright (C) 1999 - 2014, Digium, Inc. and others. 
Created by Mark Spencer <markster@digium.com> 
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details. 
This is free software, with components licensed under the GNU General Public 
License version 2 and other licenses; you are welcome to redistribute it under 
certain conditions. Type 'core show license' for details. 
========================================================================= 
Connected to Asterisk 13.5.0 currently running on colibri-imx6 (pid = 979) 
colibri-imx6*CLI>

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

colibri-imx6*CLI> sip show pe 
peers  peer   
colibri-imx6*CLI> sip show peers 
Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status      Description                      
1001/1001                 (Unspecified)                            D  Auto (No)  No             0        Unmonitored                                  
1002                      (Unspecified)                            D  Auto (No)  No             0        Unmonitored                                  
2 sip peers [Monitored: 0 online, 0 offline Unmonitored: 0 online, 2 offline] 
colibri-imx6*CLI>
colibri-imx6*CLI> dialplan show sip-interno 
[ Context 'sip-interno' created by 'pbx_config' ] 
  '_1XXX' =>        1. Dial(SIP/${EXTEN})                         [pbx_config] 
                    2. Hangup()                                   [pbx_config] 

-= 1 extension (2 priorities) in 1 context. =- 
colibri-imx6*CLI>
colibri-imx6*CLI> sip show users 
Username                   Secret           Accountcode      Def.Context      ACL  Forcerport 
1001                       sw1001                            sip-interno      No   No        
1002                       hw1002                            sip-interno      No   No  

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

$ tail -f /var/log/asterisk/messages
[Oct 16 01:55:09] NOTICE[1006] chan_sip.c: Received SIP subscribe for peer without mailbox: 1001 
[Oct 16 01:55:09] NOTICE[1006] chan_sip.c: Received SIP subscribe for peer without mailbox: 1001 
colibri-imx6*CLI> sip show peers 
Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status      Description                      
1001/1001                 10.11.12.110                             D  Auto (No)  No             48497    Unmonitored                                  
1002                      (Unspecified)                            D  Auto (No)  No             0        Unmonitored                                  
2 sip peers [Monitored: 0 online, 0 offline Unmonitored: 1 online, 1 offline]

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):

colibri-imx6*CLI> sip show peers 
Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status      Description                      
1001/1001                 10.11.12.110                             D  Auto (No)  No             48497    Unmonitored                                  
1002/1002                 10.11.12.105                             D  Auto (No)  No             36768    Unmonitored                                  
2 sip peers [Monitored: 0 online, 0 offline Unmonitored: 2 online, 0 offline]

[Oct 16 03:00:21] NOTICE[453]: chan_sip.c:27655 handle_request_subscribe: Received SIP subscribe for peer without mailbox: 1001 
    -- Registered SIP '1001' at 10.11.12.110:32027 
       > Saved useragent "Z 3.3.25608 r25552" for peer 1001 

[Oct 16 03:00:33] NOTICE[453]: chan_sip.c:27655 handle_request_subscribe: Received SIP subscribe for peer without mailbox: 1001 
    -- Registered SIP '1002' at 10.11.12.105:54677 
       > Saved useragent "Zoiper rv2.8.15" for peer 1002 
colibri-imx6*CLI>

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:

colibri-imx6*CLI> 
 == Using SIP RTP CoS mark 5 
    -- Executing [1002@sip-interno:1] Dial("SIP/1001-00000000", "SIP/1002") in new stack 
  == Using SIP RTP CoS mark 5 
    -- Called SIP/1002 
    -- SIP/1002-00000001 is ringing 
       > 0x76604838 -- Probation passed - setting RTP source address to 10.11.12.105:47370 
[Oct 16 03:01:57] NOTICE[497][C-00000000]: res_rtp_asterisk.c:4522 ast_rtp_read: Unknown RTP codec 95 received from '(null)' 
    -- SIP/1002-00000001 answered SIP/1001-00000000 
    -- Channel SIP/1002-00000001 joined 'simple_bridge' basic-bridge <6ccb73d6-1234-4b24-ab92-d0ba036e9cfb> 
    -- Channel SIP/1001-00000000 joined 'simple_bridge' basic-bridge <6ccb73d6-1234-4b24-ab92-d0ba036e9cfb> 
       > Bridge 6ccb73d6-1234-4b24-ab92-d0ba036e9cfb: switching from simple_bridge technology to native_rtp 
       > Remotely bridged 'SIP/1001-00000000' and 'SIP/1002-00000001' - media will flow directly between them 
       > Remotely bridged 'SIP/1001-00000000' and 'SIP/1002-00000001' - media will flow directly between them 
       > 0x76808c58 -- Probation passed - setting RTP source address to 10.11.12.110:8000 
    -- Unregistered SIP '1002' 
    -- Registered SIP '1002' at 10.11.12.105:54677 
    -- Channel SIP/1002-00000001 left 'native_rtp' basic-bridge <6ccb73d6-1234-4b24-ab92-d0ba036e9cfb> 
    -- Channel SIP/1001-00000000 left 'native_rtp' basic-bridge <6ccb73d6-1234-4b24-ab92-d0ba036e9cfb> 
  == Spawn extension (sip-interno, 1002, 1) exited non-zero on 'SIP/1001-00000000' 

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:

colibri-imx6*CLI>
[Oct 16 03:07:37] NOTICE[453]: chan_sip.c:27655 handle_request_subscribe: Received SIP subscribe for peer without mailbox: 1001 
    -- Registered SIP '1002' at 10.11.12.105:39924 
    -- Unregistered SIP '1002' 
    -- Registered SIP '1002' at 10.11.12.105:50901 
    -- Unregistered SIP '1002' 
    -- Unregistered SIP '1001'

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

root@colibri-imx6:~# cat /var/log/asterisk/cdr-csv/Master.csv 
"","1001","1002","sip-interno","""EngenhariaSW"" <1001>","SIP/1001-00000000","SIP/1002-00000001","Dial","SIP/1002","2017-10-16 03:01:53","2017-10-16 03:01:57","2016-10-16 03:03:04",70,66,"ANSWERED","DOCUMENTATION","1476586913.0",""

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:

root@colibri-imx6:~# ps aux | grep asterisk 
root       426  2.1  2.6  48100 13592 ?        Ssl  02:58   0:24 /usr/sbin/asterisk 
root       525  0.0  0.1   2724   544 pts/0    S+   03:18   0:00 grep asterisk 

root@colibri-imx6:~# free -m 
              total        used        free      shared  buff/cache   available 
Mem:            494          17         429           0          47         459 
Swap:             0           0           0 

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

Central Telefônica VoIP com Asterisk

Construindo uma Distribuição Linux para central telefônica VoIP
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
0 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Software » Configurando Ramais e realizando ligações com a central telefônica VoIP

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: