Você está na página 1de 206

442 – Construindo um PABX-IP

na prática com Asterisk e


SNEP

www.4linux.com.br
Sumário

1. Cenário do Curso ............................................................................................................ 9


1.1. Conheça a DEXTER.................................................................................................10
1.1.1. A Dexter ............................................................................................................ 10
1.2. Cenário a ser criado na empresa Dexter..................................................................11
2. Introdução a telefonia....................................................................................................13
2.1. O início......................................................................................................................13
2.2. Telefonia convencional............................................................................................. 13
2.2.1. Conceitos...........................................................................................................14
2.2.2. Projeto Asterisk..................................................................................................14
2.2.3. Arquitetura do Asterisk ..................................................................................... 16
2.2.4. Princípios do VoIP ........................................................................................... 20
2.2.5. Características do VoIP .................................................................................... 23
2.2.6. Cenários de uso................................................................................................ 25
3. Compilando e Instalando.............................................................................................. 31
3.1. Definindo o Hardware ............................................................................................. 31
3.2. Definindo e preparando o Sistema Operacional......................................................32
3.3. Baixando e instalando o Asterisk ............................................................................32
3.3.1. Processo de compilação................................................................................... 33
3.4. Estrutura de arquivos e diretórios do Asterisk .........................................................35
3.5. Principais arquivos de configuração.........................................................................37
3.6. Gerenciando o processo Asterisk.............................................................................37
3.6.1. Inciando automaticamente................................................................................ 39
3.7. Laboratório – Asterisk ............................................................................................ 40
3.7.1. Objetivos............................................................................................................40
3.7.2. Instalar e compilar o Asterisk ........................................................................... 40
3.7.3. Gerenciar o processo Asterisk e conectar a CLI...............................................41
4. Telefonia TDM................................................................................................................. 45
4.1. Canais Analógicos.................................................................................................... 45
4.1.1. Interfaces FX..................................................................................................... 46
4.2. Canais Digitais ......................................................................................................46
4.3. Protocolos de Sinalização........................................................................................ 47
4.4. Hardwares de Telefonia .......................................................................................... 49
5. Configurando um PABX-IP............................................................................................53
5.1. Básico do plano de discagem ..................................................................................53
5.1.1. Contextos.......................................................................................................... 53
5.1.2. Extensões..........................................................................................................54
5.1.3. Prioridades........................................................................................................ 57
5.1.4. Aplicações ........................................................................................................ 58
5.2. Configurando um canal SIP......................................................................................58
5.2.1. Configurando os Ramais SIP............................................................................ 60
5.3. Interface gráfica ....................................................................................................... 62
5.3.1. Instalando o SNEP ........................................................................................... 62
5.3.2. Conhecendo a interface gráfica ....................................................................... 63
5.3.3. Conceitos: Ramais e Troncos .......................................................................... 64
5.4. Laboratório – Asterisk............................................................................................... 65
5.4.1. Objetivos............................................................................................................65
5.4.2. Configurando o canal SIP do Asterisk (sip.conf)...............................................65
5.4.3. Configurando o plano de discagem.................................................................. 66
5.4.4. Configurando o Softphone ............................................................................... 67
5.4.5. Configurando o telefone IP................................................................................68
5.4.6. Testando o Telefone IP e o softphone:.............................................................. 69
5.5. Laboratório – SNEP..................................................................................................70
5.5.1. Baixando e instalando o pacote do SNEP e dependências.............................70
5.5.2. Ajustando as permissões ................................................................................. 70
5.5.3. Integrando Snep x Asterisk .............................................................................. 71
5.5.4. Ajuste dos diretórios de audio........................................................................... 71
5.5.5. Criação de base de dados, usuário e importação de dados............................72
5.5.6. Configurações iniciais do SNEP....................................................................... 72
5.5.7. Ajustando as configurações SNEP x Asterisk................................................... 73
6. Análise de rede...............................................................................................................75
6.1.1. VoIP................................................................................................................... 75
6.2. Arquitetura de redes .............................................................................................. 76
6.3. Definindo um protocolo.............................................................................................77
6.3.1. SIP..................................................................................................................... 77
6.3.2. IAX2.................................................................................................................. 77
6.3.3. H323................................................................................................................. 78
6.3.4. RTP/RTCP.........................................................................................................78
6.3.5. Quadro comparativo.......................................................................................... 78
6.4. Definindo um CODEC...............................................................................................78
6.4.1. Escolhendo um codec....................................................................................... 79
6.4.2. Overhead, payload e cálculo de banda.............................................................80
6.5. Transcodificação de CODEC ...................................................................................81
6.6. Tipos de registros SIP e IAX (user, peer, friend) ..................................................... 82
6.7. Laboratório – Asterisk ............................................................................................ 84
6.7.1. Objetivos............................................................................................................84
6.7.2. Baixando e Instalando o Codec........................................................................ 84
7. Protocolo IAX................................................................................................................. 90
7.1. IAX – Conceitos ....................................................................................................... 90
7.2. Características do IAX2............................................................................................ 90
7.3. Métodos de autenticação ........................................................................................ 91
7.3.1. Conexões de entrada........................................................................................ 91
7.3.2. Conexões de saída........................................................................................... 92
7.4. Arquivo de configuração ......................................................................................... 93
7.4.1. Seção [general] ................................................................................................ 93
7.4.2. Clientes IAX.......................................................................................................94
7.5. Cenários de uso .....................................................................................................95
7.5.1. Cliente IAX.........................................................................................................95
7.5.2. Provedor IAX..................................................................................................... 96
7.5.3. Entroncamento IAX........................................................................................... 96
7.6. Comandos da *CLI> ................................................................................................ 97
7.7. Laboratório – Asterisk............................................................................................... 98
7.7.1. Interligando o PABX das filiais usando troncos IAX..........................................98
7.8. Laboratório – SNEP................................................................................................100
7.8.1. Conectando com o Asterisk.............................................................................100
8. Protocolo SIP................................................................................................................102
8.1. SIP – Conceitos...................................................................................................... 102
8.2. Características do SIP .......................................................................................... 103
8.2.1. Arquitetura....................................................................................................... 103
8.2.2. Estrutura da mensagem.................................................................................. 104
8.2.3. Comunicação...................................................................................................104
8.2.4. Autenticação.................................................................................................... 105
8.2.5. Endereços SIP.................................................................................................106
8.3. Fluxo de mensagens.............................................................................................. 107
8.4. Diferença entre B2BUA e SIPProxy ...................................................................... 109
8.5. Modos de Operação............................................................................................... 110
8.5.1. Proxy................................................................................................................110
8.5.2. Redirect............................................................................................................112
8.6. SIP no Asterisk........................................................................................................114
8.6.1. Nomenclatura dos canais SIP......................................................................... 114
8.6.2. Arquivo de configuração.................................................................................. 115
8.6.3. Clientes SIP..................................................................................................... 116
8.7. Travessia de NAT (Problemas e Soluções)............................................................ 118
8.7.1. Full Cone (Cone Completo)............................................................................118
8.7.2. Restricted Cone (Cone Restrito)..................................................................... 119
8.7.3. Port Restricted Cone (Cone restrito por porta)...............................................119
8.7.4. Simétrico..........................................................................................................120
8.7.5. Soluções práticas para o Asterisk................................................................... 120
8.8. DTMF...................................................................................................................... 122
8.9. Comandos da *CLI>............................................................................................... 123
8.10. Laboratório – Asterisk........................................................................................... 124
8.11. Laboratório – SNEP ............................................................................................. 126
8.11.1. Tronco com a filial..........................................................................................126
8.11.2. Tronco com provedor VoIP............................................................................ 126
8.11.3. Conectando com o Asterisk...........................................................................126
9. Plano de discagem...................................................................................................... 128
9.1. Inclusão Contextos................................................................................................. 129
9.2. Variáveis................................................................................................................. 130
9.2.1. Variáveis globais.............................................................................................130
9.2.2. Variáveis de canal........................................................................................... 131
9.2.3. Variáveis de ambiente..................................................................................... 131
9.2.4. Variáveis específicas de aplicações................................................................131
9.2.5. Variáveis específicas para MACRO................................................................ 132
9.3. Expressões............................................................................................................. 132
9.3.1. Operadores matemáticos................................................................................ 132
9.3.2. Operadores lógicos......................................................................................... 133
9.3.3. Operadores de comparação .......................................................................... 133
9.3.4. Aplicações práticas de Expressões.................................................................133
9.4. Funções.................................................................................................................. 134
9.4.1. Aplicações condicionais.................................................................................. 135
9.4.2. Manipulação de Strings...................................................................................136
9.5. Macros e Sub-rotinas..............................................................................................137
9.6. Extensões especiais .............................................................................................. 138
9.7. Roteamento baseado em horário........................................................................... 139
9.8. Funções e Aplicações para o AstDB...................................................................... 140
9.8.1. Famílias........................................................................................................... 141
9.8.2. Aplicações específicas do AstDB................................................................... 141
9.9. Interface gráfica...................................................................................................... 142
9.10. Laboratório – Asterisk........................................................................................... 146
9.10.1. Básico do plano de discagem....................................................................... 146
9.10.2. Discagem de saída........................................................................................147
9.10.3. Entrada de chamadas................................................................................... 147
9.10.4. Aplicação Macro ........................................................................................... 148
9.11. Laboratório – SNEP.............................................................................................. 150
9.11.1. Carregando o extensions.conf do SEP no Asterisk......................................150
9.11.2. Definindo os Centros de custos.................................................................... 151
9.11.3. Criando rotas................................................................................................. 151
9.11.4. Desafio...........................................................................................................152
10. Recursos da classe V................................................................................................ 154
10.1. URA - (Unidade de Resposta Audível)................................................................. 154
10.2. Estacionamento.................................................................................................... 155
10.3. Captura ................................................................................................................ 157
10.4. Transferência........................................................................................................ 158
10.4.1. Transferência Assistida ................................................................................ 158
10.4.2. Transferência Direta...................................................................................... 158
10.4.3. A transferência ainda não está funcionando................................................. 158
10.5. Conferência.......................................................................................................... 159
10.5.1. Formato:........................................................................................................ 159
10.5.2. Configuração................................................................................................. 160
10.5.3. Aplicação....................................................................................................... 161
10.6. Música de espera................................................................................................. 161
10.6.1. Comandos da *CLI> relacionados................................................................ 162
10.7. Siga-me ................................................................................................................162
10.8. VoiceMail...............................................................................................................163
10.8.1. Configurando o arquivo voicemail.conf ........................................................ 164
10.8.2. Criando uma Macro para uso com Voicemail............................................... 164
10.9. Interface gráfica.................................................................................................... 166
10.10. Laboratório – Asterisk ........................................................................................ 168
10.10.1. Criando uma URA....................................................................................... 168
10.10.2. Funções típicas do PABX............................................................................169
10.11. Laboratório – SNEP............................................................................................ 173
10.11.1. Testando recursos no SNEP....................................................................... 173
11. DAC..............................................................................................................................176
11.1. Ramais x Agentes................................................................................................. 176
11.2. Estratégias de distribuição....................................................................................176
11.3. Configuração ........................................................................................................177
11.3.1. Filas de atendimento .................................................................................... 177
11.3.2. Os agentes.................................................................................................... 178
11.4. Login e Logout de Agentes................................................................................... 179
11.5. Habilitando a gravação nas filas...........................................................................180
11.6. Interface gráfica.................................................................................................... 181
11.6.1. Membros de uma Fila.................................................................................... 182
11.7. Laboratório – Asterisk........................................................................................... 183
11.7.1. Implementando distribuição automática de chamadas................................. 183
11.8. Laboratório – SNEP.............................................................................................. 185
12. Segurança...................................................................................................................187
12.1. Execução do processo Asterisk............................................................................187
12.2. Segurança nos arquivos de configuração............................................................ 188
12.3. Rejeitando autenticação ...................................................................................... 188
12.4. Fail2Ban e Asterisk .............................................................................................. 189
12.4.1. Download.......................................................................................................189
12.4.2. Instalação...................................................................................................... 190
12.4.3. Script de Inicialização....................................................................................191
12.4.4. Configuração................................................................................................. 193
13. Asterisk Realtime....................................................................................................... 197
13.1. Como funciona .....................................................................................................197
13.2. Configurar o Asterisk Real Time........................................................................... 197
13.2.1. Dependências.............................................................................................. 197
13.2.2. Configurando o ODBC................................................................................. 198
13.2.3. Habilitar o acesso ao MySQL........................................................................198
13.2.4. Especificando para usar o sip pelo banco................................................... 198
13.2.5. Criando o banco de dados........................................................................... 199
13.3. Criando ramais .................................................................................................... 199
14. Os Autores.................................................................................................................. 203
15. Bibliografia................................................................................................................. 204
IMPORTANTE
NOTAÇÕES:

- Indica que o parágrafo em questão faz referência a um assunto de importância alta


ou algum alerta importante;

# - Indica o “console de terminal do linux”, como usuário root. Os comandos desta linha
somente funcionarão em um terminal linux e como usuário root.

*CLI> - Indica o “console de terminal do Asterisk”. Os comandos desta linha somente


funcionarão se o Asterisk estiver rodando e os módulos necessários instalados.

mysql> - Indica o “console de terminal do MySQL”. Os comandos desta linha somente


funcionarão se o MySQL estiver rodando e os módulos necessários instalados.

Esta apostila está registrada na Biblioteca Nacional como material didático


Técnico/Cientifico em nome dos autores e organizadores, Flavio Henrique Somensi
(flavio@opens.com.br) e Felipe Ribeiro Pasa (feliperp3@gmail.com).
4linux.com.br 1. Cenário do Curso

Módulo 1

1. Cenário do Curso
Olá! Seja bem-vindo (a) ao nosso curso!

O OBJETIVO deste curso é preparar você para lidar com PABX IP com Asterisk de
pequeno e médio porte! Para ajudá-lo a conseguir este objetivo, vamos usar um
cenário que nos permitirá ter uma visão macro da telefonia como um todo.

Vamos orientá-lo a fazer a melhor solução e seguir um modelo mais simples, assim
você será capaz, ao final do curso, de implementar PABX IP com Asterisk de
maneira coerente como ocorre atualmente nas pequenas e médias empresas.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 9


4linux.com.br 1. Cenário do Curso

1.1. Conheça a DEXTER

1.1.1. A Dexter

A DEXTER Courier é uma empresa que trabalhará o máximo possível com código
aberto e conta com vários serviços, como servidor de arquivos, dns, email, proxy,
autenticação de usuários e agora Asterisk para gerenciar sua telefonia.

A DEXTER atua no segmento de logística e tem como principal objetivo prestar ser-
viços de coleta e entregas com qualidade em todos os detalhes e precisa da
telefonia VOIP para poder aumentar sua margem de clientes.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 10


4linux.com.br 1. Cenário do Curso

1.2. Cenário a ser criado na empresa Dexter

Dentro de cada filial, serão implementados os seguintes recursos/funcionalidades:

• Cadastro de Ramais e Troncos


• Interligação com filiais e com operadoras
• Realização de chamadas internas e externas
• Ativação do recurso Estacionamento
• Ativação do recurso Correio de Voz
• Ativação do recurso Não perturbe
• Ativação do recurso Siga-me
• Ativação do recurso Filas
• Noções de Segurança
• Implementação da Interface gráfica

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 11


Módulo 2

Introdução a
telefonia
4linux.com.br 2. Introdução a telefonia

2. Introdução a telefonia

2.1. O início
A telefonia, assim como inúmeras outras áreas da Engenharia Elétrica e ciência
modernas, teve seu início com a descoberta e desenvolvimento da Eletricidade e do
Magnetismo, cujos estudos foram iniciados em 1830 pelo inglês Michael Faraday.

A primeira invenção foi feita em 1837 por Samuel Morse: o Telégrafo Elétrico, que
permite a comunicação entre dois pontos ligados por uma fiação condutora. Daí
surgiram duas tecnologias de Telecomunicações, a que suprimia a fiação condutora,
usando transmissões de ondas eletromagnéticas no ar (Rádio, Televisão) e a que
mantinha a fiação (Telégrafo, Telefone, Fax).

2.2. Telefonia convencional


A telefonia convencional funciona baseada em um par de fios de cobre que vai de
uma caixa na rua até uma caixa (normalmente chamada de ponte de entrada) na
sua casa. De lá, o par de fios é conectado a cada ponto telefônico da sua casa. Se
sua casa tiver duas linhas telefônicas, dois pares diferentes de fios de cobre vão até
ela.

Ao longo da rua passa um grosso cabo preenchido com 100 ou mais pares de fios
de cobre. Dependendo de onde você está, este cabo ira diretamente ao interruptor
da companhia telefônica, ou a uma caixa do tamanho de uma geladeira, que age
como um concentrador digital.

O concentrador digitaliza sua voz em uma taxa de amostragem de 8000 amostras


por segundo e resolução de 8 bits (8KHz X 8 bits = 64 kbps). Ele então combina sua

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 13


4linux.com.br 2. Introdução a telefonia

voz com dezenas de outras vozes através de um MUX (Multiplexador) e emite-as por
um único fio (geralmente um cabo coaxial ou um cabo de fibra ótica) até a
companhia telefônica.

2.2.1. Conceitos

• Linha Analógica: Linha que trafega sinais analógicos;


• Tronco Analógico: padrão de interconexão analógico entre centrais públicas
e privadas;
• Linha Digital: linha que trafega sinais digitais;
• Tronco E1: padrão de transmissão digital que compacta 30 canais de voz em
um canal digital. É o padrão digital de interconexão entre centrais públicas e
privadas. Podemos afirmar que o E1 é um enlace de dados com banda de
2Mbps Full Duplex. Sob o E1 podem operar dois protocolos, são eles:
◦ ISDN Tecnologia digital que permite trafegar dados, voz e vídeo, comum
nos Estados Unidos e Europa, no Brasil está disponível principalmente
nas capitais e também pode ser chamado de RDSI – Rede Digital de
Serviço Integrado;
◦ MFC/R2 Muito comum no Brasil, América Latina e Ásia. Atualmente é o
mais adotado pelas operadoras de telefonia nacional.
• Central Pública Analógica: equipamento que estabelece, administra e
termina conexões telefônicas analógicas;
• Central Pública Digital: equipamento que estabelece, administra e termina
conexões telefônicas digitais.

2.2.2. Projeto Asterisk

O Asterisk é um projeto de Software Livre, portanto de código aberto, que


implementa em software os recursos encontrados em um PABX de grande porte,
utilizando tecnologia de VoIP combinando com tecnologias TDM.

O projeto Asterisk hoje recebe contribuições de programadores ao redor do mundo,


seu desenvolvimento é ativo e sua área de aplicação muito promissora.

O Asterisk pode ser definido como: Um toolkit que transforma um PC comum em

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 14


4linux.com.br 2. Introdução a telefonia

uma poderosa central telefônica multi-protocolo com recursos avançados. Isto


significa que o Asterisk pode ser um componente de uma solução de comunicação
unificada ou de um simples PABX, ou seja, ele não é um produto acabado e sim uma
ferramenta para desenvolver soluções de comunicação.

Com o Asterisk, é possível implementar novos recursos e funcionalidades na


telefonia de uma empresa, como por exemplo:

• Permitir ramais remotos (em casa, no celular, no notebook, etc) utilizando


conexões de banda larga;
• Conectar as centrais telefônicas de escritórios ou filiais de uma empresa
utilizando a internet ou rede de comunicação privada;
• Implementar URA's (Unidades de Resposta Audível) para automatizar e
agilizar o atendimento de chamadas telefônicas;
• Permitir que a Central Telefônica decida qual operadora telefônica utilizar ao
fazer chamadas (LCR – Rota de Menor Custo);
• Fácil integração com sistemas de terceiros, como ERP e CRM;
Além disso, o Asterisk possui nativamente muitas funcionalidades avançadas que
facilitam e agregam valor a solução de PABX IP, como por exemplo:

• Filas de atendimento;
• Correio de voz;
• Salas de conferência;
• Estacionamento de chamadas;
• Gravação de chamadas;
• Registro detalhado das chamadas de entrada e saída;
• E muito mais …
Por que utilizar o Asterisk?

• Sistema aberto;
• Redução de custos;
• Controle total;
• Aumento de produtividade;
• Melhoria no atendimento;

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 15


4linux.com.br 2. Introdução a telefonia

• Multiplataforma, compatível com Linux, Unix, BSD e outros SO's.

A Digium

A Digium, Inc. é uma empresa de tecnologia de comunicações sediada em


Huntsville, Alabama. É especializada no desenvolvimento e fabricação de hardware
e software de comunicações de telefonia, principalmente para plataforma Asterisk.

A Digium é a empresa mantenedora do projeto Asterisk e foi fundada por Mark


Spencer para oferecer soluções proprietárias e open source. O hardware de
telefonia é ainda a sua principal fonte de receita.

Devido ao fato de que algumas empresas tem objeções ao uso de softwares open
source, a Digium fornece o Asterisk em três licenças diferentes:

• Asterisk GPL: É o produto mais conhecido da empresa. É uma aplicação


PABX open source que roda em plataforma Unix-Like;
• Asterisk Business Edition: é uma versão comercial do Asterisk. A Digium
afirma que esta versão sofre mais testes do que a versão de código aberto;
• Asterisk OEM: Versão exclusiva para fabricantes de equipamentos que
queiram embarcar o Asterisk em hardware, comum para comercializar
soluções proprietárias.
Os produtos da Digium seguem duas categorias, Software Asterisk e Hardware. A
Digium também produz e fornece suporte complementar ao Asterisk, como o
CODEC G729, Fax para o Asterisk, placas de telefonia analógica e digital, placas
para transcodificação e módulos para cancelamento de eco.

2.2.3. Arquitetura do Asterisk

O Asterisk foi desenvolvido para ter o máximo de flexibilidade tornando-o um sistema


modular e transparente a protocolos, codec's e hardware de diversos fabricantes,
podendo ser compatível com qualquer tecnologia existente ou que venha a ser
lançada, sem que sejam necessárias mudança no núcleo do sistema.

O Asterisk possui uma arquitetura modular, carregando seus módulos


separadamente, sendo possível customizar uma solução, permitindo maior
flexibilidade tanto de hardware quanto de software. Neste modelo é possível

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 16


4linux.com.br 2. Introdução a telefonia

executá-lo de forma adequada em hardware embarcado de baixo custo. A


arquitetura é representada na figura a seguir.

• CANAIS – A API de Canal fornece módulos para uma grande quantidade de


tecnologias tanto TDM quanto IP. Um canal é uma conexão de entrada/saída
de uma chamada no Asterisk, ou seja, toda a chamada entrante ou sainte no
sistema chega por um Canal, um canal pode ser uma conexão a um telefone
analógico tradicional, uma linha PSTN ou ainda uma chamada via IP. Toda
chamada é originada ou recebida em um canal distinto. O Asterisk suporta
duas classes de canal, Canais TDM e Canais IP,:

◦ Canal TDM – provê suporte a hardware de telefonia analógica e/ou digital.


Canais DAHDI, Khomp e DGV são alguns exemplos.
◦ Canal IP ou VoIP – provê suporte a uma série de protocolos de rede
utilizados livremente na internet e alguns proprietários. Canais SIP, IAX2 e
H323 são alguns exemplos.
Para prover canais o Asterisk possui uma série de módulos - um para cada
tipo de tecnologia – seja ela TDM ou IP. Alguns canais são classificados como
especiais, pois se aplicam somente ao Asterisk para uso em determinadas

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 17


4linux.com.br 2. Introdução a telefonia

aplicações.

◦ Agent – Um canal de agente DAC – Canal Especial;


◦ Console – Cliente de console do Linux, utilizando drivers para placas de
som (OSS ou ALSA) – Canal Especial;
◦ H323 – Um dos protocolos mais antigos de VoIP – Canal IP;
◦ IAX2 – Inter-Asterisk Exchange Protocol v2. Utilizando para conectar
centrais Asterisk – Canal IP;
◦ SIP – Session Initiation Protocol, o protocolo de VoIP mais comum – Canal
IP;
◦ VOFR – Voz sobre frame-relay da Adtran – Canal IP;
◦ DAHDI – Para conectar telefones e linhas com placas da Digium – Canal
TDM;
◦ Local – Canal interno, utilizado para redirecionamento interno de
chamadas – Canal Especial.

• CODEC's – Em telefonia Digital e também na telefonia IP, a conversão do


som analógico para sinais digitais é feita pelos codificadores-decodificadores
chamados de codec's (enCODE/DECode). Um CODEC nada mais é do que
uma biblioteca que provê ao dispositivo o suporte necessário para aquele tipo
de informação. Por exemplo: um MP3 Player consegue reproduzir um arquivo
no formato MP3 pois o mesmo possui este CODEC instalado internamente.
Com o Asterisk não é diferente, ele tem suporte a uma série de codec's, como
por exemplo, G711, GSM, Speex, ILBC e muito mais. Hardwares de telefonia
IP como, telefones IP, gateways e demais equipamentos de VoIP também
possuem uma lista de codec's suportados, sendo os mais comuns o G711 e o
G729. O CODEC a ser utilizado em uma chamada é negociada no
estabelecimento da sessão e, se ambos suportarem o mesmo CODEC, a
chamada então é estabelecida.

No Asterisk ao configurar um Canal IP, você pode escolher um ou mais


codec's a serem utilizados no estabelecimento da sessão. A principal função
do CODEC é transformar o áudio analógico em formato digital para que este
possa ser transmitido pela rede IP.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 18


4linux.com.br 2. Introdução a telefonia

Cada CODEC possui suas particularidades. Alguns são leves no


processamento, porém ocupam mais banda, outros são pesados em seu
processamento mas possuem uma alta taxa de compressão, o que garante
uma boa economia de banda. Outros ainda possuem uma resistência a perda
de pacotes avançado, o que garante uma qualidade de ligação eficiente
mesmo em redes onde haja perda de pacotes em sua transmissão.

O Asterisk tem uma característica importante que é a capacidade de fazer a


transcodificação. Este recuso permite a tradução de codec's em tempo de
execução. Por exemplo, um telefone IP que suporta o G711 pode fazer uma
chamada para outro telefone que suporta somente o G729. Pelo fato dos
telefones não suportarem os mesmos codec's, o Asterisk converte os
formatos permitindo assim a chamada entre os dispositivos. Isto é possível
desde que ambos os codec's estejam devidamente instalados.

Cuidado!!! A transcodificação deve ser evitada ao máximo. Quanto


mais transcodificações forem feitas simultaneamente, mais processamento e
memória serão necessários, o que pode comprometer a qualidade das
ligações. Para casos extremos a Digium disponibiliza uma placa, modelo
TC400B. Esta placa possui um DSP (processador) exclusivo para
transcodificação de G729, o que pode garantir uma boa qualidade de ligações
onde a transcodificação é inevitável.
Abaixo segue a tabela de alguns codec's:

Tipo de Codificação Taxa de Bits (Kbits/s) Licença


G.711 (ulaw / alaw) 64 Kbit/s Livre
ILBC 15 ou 22 Kbit/s Livre
GSM 2, 3, 13 ou 15 Kbit/s Livre
G.729 8 Kbit/s Paga
G.723.1 5, 3 ou 6 Kbit/s Paga
Speex 15 ou 22 Kbiys/s Livre

Características dos codec's:

◦ Taxa de bits (Codec Bits Rate) (kbps): Quantidade de bits por


segundo que precisa ser transmitido para entregar um pacote;
◦ Intervalo de amostra (Codec Sample Interval) (ms): Esse é o

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 19


4linux.com.br 2. Introdução a telefonia

intervalo de amostra em que o Codec opera. Por exemplo, o codec


G.729 opera em 10ms;
◦ Tamanho de amostra (Codec Sample Size)(bytes): Quantidade de
bytes capturado em cada amostra;
◦ Tamanho de Payload de Voz (Voice Payload Size)(bytes/ms):
Representa a quantidade de bytes preenchida em um pacote de
dados.

• PROTOCOLOS – São responsáveis por definir a forma/linguagem como os


pontos de comunicação (terminais, gateways, etc) vão negociar entre si. São
responsáveis por tarefas como sinalização para estabelecer conexão,
determinar ponto de destino, roteamento entre pontos, e também questões de
sinalização de telefonia como campainha, identificados de chamada,
desconexão, etc. Os protocolos mais utilizados são o IAX e o SIP;

• APLICAÇÕES – Toda função básica do Asterisk é provida por uma aplicação.


Por exemplo: para executar uma chamada usa-se a aplicação Dial(), para
transferir uma chamada usa-se a aplicação Transfer(). Algumas aplicações
são mais avançadas, como por exemplo o ConfBridge() e MeetMe() para
conferência. Existem mais de 100 aplicações internas prontas para uso e,
além das aplicações, existem as funções que possuem funcionalidades mais
avançadas. As principais aplicações e funções serão abordadas no
treinamento.

2.2.4. Princípios do VoIP

Voz sobre IP, também conhecida como VoIP (Voice over Internet Protocol), telefonia
IP ou telefonia Internet, é um conjunto de tecnologias, largamente utilizadas em
redes IP, Internet ou Intranet, com o objetivo de realizar comunicação de voz. Os
principais benefícios do VoIP são:

• a redução do custo com infra-estrutura – devido ao uso de uma única rede


para transportar dados e voz;
• a flexibilidade – pois facilita tarefas e disponibilização de serviços não
suportados pelo sistema de telefonia convencional;

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 20


4linux.com.br 2. Introdução a telefonia

• a interoperabilidade – pois em sua maioria os protocolos e padrões são


abertos e possuem RFC definida.

VOIP – Implementação

• DIFICULDADES – O protocolo UDP é largamente implementado nas


tecnologias de VoIP, mas o UDP não fornece um mecanismo para assegurar
que os pacotes de dados sejam entregues em ordem sequencial, ou ainda
que forneça garantias de qualidade de serviço. Além disso as
implementações VoIP sofrem com o problema de latência e jitter (variações
de atraso).

Outro desafio para o roteamento de tráfego VoIP são os firewalls e os


tradutores de endereço (NAT). Os métodos mais comuns para passar por
firewalls incluem STUN, ICE e TURN.

Do ponto de vista de gestão, se a estrutura de rede e os equipamentos forem


antigos ou inexistentes, uma mudança para VoIP pode elevar muito o custo do
projeto, pois será necessário mudanças no cabeamento e a aquisição de
novos equipamentos como comutadores, roteadores, telefones IP (cujo preço
é mais alto que um telefone analógico), e aumento da banda de conexão
(para suportar essa nova tecnologia), além da mão de obra especializada.

Em resumo, os principais desafios técnicos do VoIP são latência, perda de


pacotes, eco, jitter e segurança. A principal causa de perda de pacotes é o
congestionamento, que pode ser controlado por gerenciadores de
congestionamento de rede ou ainda com controles de prioridades de pacotes
– o QoS.

• CONFIABILIDADE – Telefones convencionais são conectados diretamente


às linhas de telefone da empresa de telefonia ou um PABX, que, em caso de
falha de energia, ainda são funcionais pelo uso de geradores de energia de
apoio localizados na central telefônica. Entretanto, os equipamentos VoIP
domésticos utilizam roteadores de banda larga e outros equipamentos que
dependem da energia elétrica. Mesmo que a energia elétrica esteja
disponível, o provedor de acesso à Internet pode estar indisponível. Enquanto

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 21


4linux.com.br 2. Introdução a telefonia

o PSTN amadureceu através das décadas de uso e atualmente é considerado


confiável, a maioria das redes de banda larga são novas. Para criar um
comportamento semelhante em ambiente corporativo podem ser utilizados
Switch's com suporte a PoE (Power Over Ethernet) alimentado por No-Break
e conectado a telefones IP's que suportam o PoE. Atualmente esse suporte é
comum, mas é importante verificar no manual do fabricante para não errar no
projeto.

• QUALIDADE DE SERVIÇO – Algumas conexões de banda larga possuem


uma qualidade pobre de transmissão – taxa de upload muito baixa. Quando
os pacotes IP são perdidos ou atrasados em algum ponto da rede, existe uma
queda momentânea da voz na conversação. Isso é mais perceptível em redes
bastante congestionadas ou onde existem grandes distâncias entre os pontos
de conexão ou rotas de baixa qualidade, ou seja, tecnologia VoIP só funciona
em redes estáveis e bem dimensionadas.

• SEGURANÇA – A maioria das soluções VoIP ainda não suportam criptografia,


o que resulta na possibilidade de se ouvir chamadas alheias, alterar seu
conteúdo e o pior, fraudes no sistema de telefonia que podem gerar um
grande prejuízo ao cliente. Algumas empresas utilizam artifícios como VPN
para tornar o acesso mais seguro. Entretanto, segurança através de
criptografia e autenticação ainda não está amplamente disponível no mercado
e são poucos dispositivos que suportam SIPs ou SRTP. Atualmente o
protocolo SIP suporta operar sob TLS, porém todos os dispositivos envolvidos
devem ter suporte a esta funcionalidade. O Asterisk já tem suporte a TLS
desde a versão 1.6.

• PROTOCOLOS – Alguns dos protocolos utilizados no VoIP para sinalização


de chamadas são SIP, H.323, MGCP, H.248/MEGACO, SCCP, Jingle e IAX.
Estes protocolos são apenas responsáveis pelo gerenciamento de sessão, ou
seja, através destes protocolos é possível saber se uma chamada foi
estabelecida e quanto tempo ela durou. Para a transmissão de mídia, voz,
vídeo e dados usa-se outro protocolo na camada de transporte do modelo
OSI, normalmente o RTP que também opera sobre UDP.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 22


4linux.com.br 2. Introdução a telefonia

◦ SIP – é um protocolo de controle referente à camada de aplicações do


Modelo de Referência OSI (Open System Interconnection), que é usado
para iniciar, modificar ou terminar sessões ou chamadas multimídia entre
usuários. O SIP utiliza por padrão a porta UDP 5060 e TCP 5061 para
sinalização e da 10000 a 20000 para fluxos de mídia RTP;

◦ IAX – é um protocolo desenvolvido pela Digium com o objetivo de


estabelecer comunicação entre servidores Asterisk. IAX é um protocolo de
transporte, tal como o SIP, no entanto faz uso apenas de uma única porta,
a UDP 4569 tanto para sinalização como para fluxo de mídia RTP. Outra
vantagem é o modo de operação chamado Trunk, onde o protocolo utiliza
uma estratégia para economia de banda aproveitando um único cabeçalho
IAX para múltiplas ligações simultâneas. A principal vantagem do IAX pelo
fato de utilizar apenas uma porta é a facilidade em transpor redes com
Firewall e/ou NAT. A principal desvantagem é baixa adoção pelo mercado
em dispositivos como telefones e gateways apesar de já possuir uma
RFC.

2.2.5. Características do VoIP

O VoIP pode facilitar tarefas difíceis em redes tradicionais. Chamadas entrantes


podem ser automaticamente roteadas para o telefone VoIP, independentemente da
localização na rede. Por exemplo, é possível levar um telefone VoIP para uma
viagem, e, de onde você conectá-lo à Internet poderá receber ligações, contanto que
a conexão seja rápida e estável o suficiente. O fato da tecnologia ser atrelada à
Internet também traz a vantagem de poder integrar telefones VoIP a outros serviços
como conversação de vídeo, mensageiros instantâneos, compartilhamento de
arquivos e gerenciamento de listas telefônicas. Estar relacionado à Internet também
significa que o custo da chamada independe da localização geodésica e dos
horários de utilização, ambos os parâmetros usados na cobrança na telefonia fixa e
móvel, e cujos valores variam de operadora a operadora.

Vários pacotes de serviço VoIP incluem funcionalidades que em redes tradicionais


seriam cobradas à parte, como conferência a três, redirecionamento de chamadas,
rediscagem automática e identificador de chamadas.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 23


4linux.com.br 2. Introdução a telefonia

Apesar de amplamente utilizado através de computadores, o VoIP pode ser utilizado


através de adaptadores para telefones analógicos ou gateways VoIP, que são
aparelhos que podem ser conectados diretamente em uma conexão banda larga e a
um aparelho telefônico comum ou a um PABX em posições de troncos ou ramais.
Eles fornecem a interchamada entre as redes IP e fixas (analógicas).

Funcionamento de uma chamada VoIP com SIP

O procedimento consiste em digitalizar a voz em pacotes de dados para que estes


trafeguem pela rede IP e converte-los em voz novamente quando chegarem em seu
destino. A seguir, um passo a passo de um caso de uso de uma chamada:

• O usuário Alice faz uma chamada para Bob, uma requisição INVITE é enviada
ao servidor;
• O INVITE é negado pelo servidor, que envia uma reposta 407 solicitando as
credencias do usuário Alice;
• Uma nova requisição INVITE é gerado pela Alice, agora esse INVITE é
acompanhado de um novo cabeçalho contendo um hash MD5 a ser validado
pelo Asterisk;

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 24


4linux.com.br 2. Introdução a telefonia

• O Asterisk gera um novo INVITE e envia para o destino, nesse caso o usuário
Bob. Logo após o telefone de Bob envia uma mensagem 180, indicando que
o mesmo começou a tocar (ringing);
• Quando Bob atende o telefone uma reposta 200 OK é enviado ao Asterisk
que por sua vez encaminha para Alice e é neste momento em que a sessão
entre os dois canais é estabelecida;
• O Áudio da chamada está no fluxo de mídia RTP. Observe que o protocolo de
sessão SIP neste momento não é mais necessário;
• Quando o usuário Bob desliga o telefone uma reaquisição do tipo BYE é
enviado ao Asterisk informando que a sessão foi encerrada, o fluxo de mídia é
interrompido e uma resposta 200 OK confirma o recebimento do BYE;
• Este fluxo de mensagens do INVITE até o BYE é conhecido como Diálogo
SIP. Desta forma o Asterisk consegue bilhetar a chamada, pois ele sabe
quando a sessão iniciou e quando foi finalizada.

2.2.6. Cenários de uso

Visão Geral

Dentro de uma visão geral, o Asterisk é um PABX híbrido que integra tecnologias
como TDM e telefonia IP agregando funcionalidades extras como correio de voz,
URA, DAC e outras.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 25


4linux.com.br 2. Introdução a telefonia

100% VoIP

O Asterisk pode operar em uma rede puramente VoIP sem interfaces TDM, essa
solução pode ser bem econômica quando não existe conexão Digital E1 ou
Analógica com a Operadora. As operadoras já fornecem em alguns pontos um
tronco conhecido por NGN ou SIP Trunk, estes troncos operam puramente em IP
não sendo necessário a compra de interfaces ISDN ou R2 nem tanto analógicas. O
Asterisk executa todas essas funções de forma simplificada.

Softswitchs

São computadores que tem a função de comutar circuitos de hardware na forma de


interfaces padrão de telefonia. Entretanto a forma de comercialização destes
equipamentos segue muitas vezes a lógica mostrada na figura abaixo, onde todos
os componentes são separados e muitas vezes de diferentes fabricantes.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 26


4linux.com.br 2. Introdução a telefonia

PABX 1x1

É um exemplo de um PABX de um tronco e um ramal. Este é um dos sistemas mais


simples que você pode construir com o Asterisk. Apesar de ter pouca utilidade
prática ele permite que se conceituem alguns pontos importantes. Em primeiro lugar
o PABX 1x1 possui uma placa FXO (Foreign Exchange Office) para se ligar às
operadoras ou a uma interface de ramal de um PABX.

PABX como Banco de Canais

Um banco de canais é um equipamento que prove uma série de portas analógicas


para uso com Asterisk. Estas portas podem ser do tipo FXS (Utilizadas para ligar a
um telefone), FXO (Utilizadas para ligar a uma linha telefônica). Um outro tipo de
banco de canais que faz bastante sucesso são os GSM para telefonia celular. No
exemplo abaixo mostramos como o Asterisk pode utilizar um PABX legado como um
banco de canais, bastando para isso criar um tronco entre o Asterisk e o PABX.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 27


4linux.com.br 2. Introdução a telefonia

Media Gateway

O Asterisk pode ser utilizado com a funcionalidade de um “media gateway”. Ou seja,


ele pode converter os sinais analógicos (FXS, FXO) ou digitais (ISDN) vindos da
central telefônica, ou dos telefones do cliente em voz sobre IP e transmitir pela rede
corporativa de dados.

Com a convergência à redução do número de circuitos e um melhor aproveitamento


dos recursos. Os projetos mais comuns são conhecidos como “Toll-Bypass”
(Contornando a tarifação), pois eliminam os custos de operadora de longa distância
nos telefonemas entre as filiais da empresa.

URA (Unidade de Resposta Audível)

Trata-se de um recurso geralmente aplicado em ambiente corporativo e por


empresas de CallCenter (SAC). Este recurso permite o atendimento automático da
chamada e logo após um anúncio de menu de opções para o usuário interagir com o
PABX, este sistema pode, por exemplo, enviar a chamada para uma fila de
atendimento (DAC). Sua principal vantagem é dispensar o atendimento humano. De
uma forma geral, uma URA é um sistema ao qual se agrega um hardware específico
para realizar as tarefas de telefonia tais como:

• atender;
• discar;
• desligar;
• reconhecer dígitos;

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 28


4linux.com.br 2. Introdução a telefonia

• falar;
• etc.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 29


Módulo 3

Compilando e
Instalando
4linux.com.br 3. Compilando e Instalando

3. Compilando e Instalando

3.1. Definindo o Hardware


O Asterisk tem a característica de utilizar muito o processador, pois ele usa o
processador para fazer o processamento dos sinais digitais. Em sistemas menores o
hardware normalmente não é um problema, entretanto, em sistemas de grande
capacidade o hardware deve ser muito bem estudado para não causar falhas de
desempenho, manifestadas por problemas na qualidade de áudio para os usuários,
muitas vezes na forma de ecos e picotes de voz. De forma prática, um PABX-IP
básico pode ser configurado a partir de um computador com processador
equivalente ao Pentium com 256Mb de RAM e 1 Gb de disco rígido. A tabela a
seguir foi elaborada para ser utilizada como referência de dimensionamento do
hardware necessário a um número médio de ramais.

Cenário: Cenário: Cenário:


Item Levar em consideração Até 5 Até 10 Até 15
canais canais canais
- Número de chamadas simultâneas
- Gravação das chamadas
Processador x86 400 Mhz x86 1 Ghz x86 3 Ghz
- codec's utilizados
- Funcionalidades utilizadas
- Número de chamadas simultâneas
Memória RAM - Gravação de chamadas 256Mb 512Mb 1 Gb
- codec's utilizados
- Sem gravação: 10 Gb
Disco Rígido - Gravação de Chamadas - Com gravação: 10 Gb para SO e 1,2
Mb por minuto gravado (WAV)
Placa mãe - Placas de telefonia x Slots PCI disponíveis
Sistema
- Distribuição Linux de sua preferência
Operacional

Importante!! Este dimensionamento foi baseado na compilação de um


Asterisk simples mas ele pode variar dependendo das funcionalidades a
serem agregadas, como por exemplo, acesso a banco de dados, execução de
softwares de terceiros na mesma máquina e assim por diante. Fique atento as
necessidades da solução.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 31


4linux.com.br 3. Compilando e Instalando

3.2. Definindo e preparando o Sistema Operacional


O Asterisk foi originalmente desenvolvido para rodar em Linux, embora possa ser
usado no BSD e OS X. Vale ressaltar que a grande maioria das placas PSTN são
construídas para trabalhar com Linux. Várias distribuições são utilizadas com
sucesso para implementar o Asterisk, como SUSE, Fedora, Debian, Slackware e
Gentoo. O importante é ficar atento para os pacotes necessários para compilar o
Asterisk e/ou drivers das placas de telefonia que você for utilizar. Pesquise antes
com os fabricantes das placas as recomendações de cada um.

Cada sistema operacional tem suas ferramentas próprias para instalação e


compilação de software, no caso do Debian e suas variantes utiliza-se o apt-get e
nas distribuições baseadas em Red-Hat o aplicativo yum.

3.3. Baixando e instalando o Asterisk


O código fonte do Asterisk pode ser obtido no servidor FTP da Digium, localizado em
ftp://ftp.digium.com ou via HTTP no site do projeto em
http://downloads.asterisk.org.

Existem várias versões que podem ser baixadas, sendo a versão 12 a mais recente.
Ao escolher sua versão do Asterisk, leve em consideração:

• Compatibilidade do hardware de telefonia a ser utilizado – veja com o


fabricante do hardware para quais versões do Asterisk é fornecido suporte e
compatibilidade;

• Feed-Back da comunidade – como é um software livre, muita gente utiliza e


discute seus recursos e problemas. Sites e listas de discussões como o
Asterisk Brasil (http://www.asteriskbrasil.org/) podem ajuda-lo a decidir sobre
isso;

• Interface Gráfica – algumas interfaces gráficas, como o SNEP, implementam


funcionalidades extras ao Asterisk, logo, não são compatíveis com todas as
versões.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 32


4linux.com.br 3. Compilando e Instalando

Importante!! Em ambientes de produção evite utilizar versões muito novas,


pois estas podem conter bugs e acabar causando sérios problemas em seu
ambiente. Não esqueça: serviço de telefonia é um serviço crítico em qualquer
ambiente.
A tabela a seguir mostra as linhas de tempo de lançamento para todas as versões
do Asterisk, incluindo aqueles que chegaram a final da vida.

Release Series Release Type Release Date Security Fix Only EOL
1.2.X 2005-11-21 2007-08-07 2010-11-21
1.4.X LTS 2006-12-23 2011-04-21 2012-04-21
1.6.0.X Standard 2008-10-01 2010-05-01 2010-10-01
1.6.1.X Standard 2009-04-27 2010-05-01 2011-04-27
1.6.2.X Standard 2009-12-18 2011-04-21 2012-04-21
1.8.X LTS 2010-10-21 2014-10-21 2015-10-21
10.X Standard 2011-12-15 2012-12-15 2013-12-15
11.x LTS 2012-10-25 2016-10-25 2017-10-25
12.x Standard 2013-10 (tentative) 2014-10 (tentative) 2015-10 (tentative)
13.x LTS 2014-10 (tentative) 2018-10 (tentative) 2019-10 (tentative)
Fonte: https://wiki.asterisk.org/wiki/display/AST/Asterisk+Versions

O Asterisk pode ser instalado a partir dos pacotes prontos nas diversas distribuições
GNU/Linux ou através da compilação do código fonte. É recomendável que a
instalação através dos pacotes de software seja voltada apenas para estudos do
Asterisk.

A instalação através da compilação é o melhor caminho para um servidor de


produção. O Asterisk, quando compilado, possui componentes ajustados
dinamicamente para o CPU do computador, tornando-o mais eficiente no
processamento do áudio e auxiliando principalmente nas questões de
transcodificação de codec's de áudio.

3.3.1. Processo de compilação

Para compilar o Asterisk é necessário obter os arquivos do código-fonte do Asterisk.


Outros pacotes adicionais podem ser necessários como o DAHDI e o LibPRI quando
placas de telefonia que utilizem estas bibliotecas forem utilizadas.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 33


4linux.com.br 3. Compilando e Instalando

Como mencionado anteriormente é possível instalar o Asterisk através dos pacotes


pré-compilados padrão do Linux, para o Debian e derivados:

# apt-get install asterisk

Para Linux padrão RedHat, como o CentOS:

# yum install asterisk

Para uma instalação mais otimizada é recomendado o processo de compilação.


Estes são os pacotes necessários para compilar o Asterisk:

• asterisk-1.8-current.tar.gz – Pacote do Asterisk versão 1.8. O sufixo “current”


aponta para a versão de release atual.

• dahdi-linux-complete-current.tar.gz – Apesar de não ser obrigatória, a


instalação do pacote DAHDI é recomendada pois permite que o canal DAHDI
seja compilado e também prove temporização para outras aplicações como o
MeetMe (conferência).

• libpri-1.4.tar.gz – Este pacote contém a biblioteca LibPRI. Esta biblioteca é


utilizada pelas placas DADHI quando conectadas em canais digitais E1 ISDN-
PRI. Se houver um caso onde o pacote DAHDI for instalado sem o LibPRI
este Asterisk não ira conseguir efetuar chamadas em canais digitais ISDN.

É importante ressaltar que a instalação e compilação siga a seguinte ordem:

1. LibPRI
2. DAHDI
3. Asterisk

Seguindo esta ordem o Asterisk terá todos os pré-requisitos para a compilação dos
módulos gerais.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 34


4linux.com.br 3. Compilando e Instalando

3.4. Estrutura de arquivos e diretórios do Asterisk


Depois da instalação, o Asterisk cria no sistema de arquivos uma série de arquivos e
diretórios, os principais arquivos de configuração estão em /etc, os aquivos de log
em /var/log. Agora vamos ver cada um deles e conhecer um pouco mais.

Diretórios:

• /etc/asterisk – Principais arquivos de configuração do Asterisk;


• /var/lib/asterisk – Armazena o AstDB, um banco de dados interno do
Asterisk;
• /var/lib/asterisk/agi-bin – Arquivos AGI (Asterisk Gateway Interface) de
scripts e programas de terceiros que podem ser executados pelo
Asterisk;
• /var/lib/asterisk/firmware – Arquivos de firmwares para as placas padrão
DAHDI;
• /var/lib/asterisk/images – Arquivos de imagens para o ambiente de
gerenciamento Web;
• /var/lib/asterisk/keys – Arquivos de par de chaves usado na autenticação de
troncos IAX;
• /var/lib/asterisk/moh – Arquivos de música em espera (Music on Hold);
• /var/lib/asterisk/sounds – Arquivos de sons que podem ser utilizados nas
chamadas telefônicas e na utilização de aplicações como URA por exemplo;
• /var/lib/asterisk/static-http – Arquivos de exemplo para criação de um
ambiente de gerenciamento Web para o Asterisk;
• /usr/lib/asterisk/modules – Arquivos de módulos, aplicativos, funções,
codec's, canais etc;
• /var/spool/asterisk/monitor – Diretório padrão para os arquivos de gravação
de chamads;
• /var/spool/asterisk/voicemail – Contém as mensagens de áudio das caixas
postais;
• /var/log/asterisk – Arquivos de log, usado para análise na hora de resolver
algum problema (troubleshooting).

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 35


4linux.com.br 3. Compilando e Instalando

Arquivos em /etc/asterisk:

• agents.conf – Configuração de Agentes, utilizado em filas de atendimento


DAC;
• alsa.conf – Sistema de som para o CLI usando os drivers de som ALSA;
• cdr.conf – Registros de chamadas (Call Detail Records);
• cdr_custom.conf – Registros customizados de chamadas;
• cdr_manager.conf – Envia os Registros de chamadas para o Gerenciador
Asterisk;
• cdr_odbc.conf – CDR dentro de um banco de dados via ODBC;
• cdr_pgsql.conf – CDR dentro do banco de dados PostgreSQL;
• codec's.conf – Configurações do codec speex somente;
• dundi.conf – Distributed Universal Number Discovery;
• enum.conf – Mapeamento de número telefônico E.164;
• extconfig.conf – Configuração para a conexão a bando de dados externo
(Realtime);
• extensions.conf – Plano de Discagem;
• extensions.ael – Plano de Discagem escrito em Asterisk Extension
Language;
• features.conf – Estacionamento, Captura e outras funcionalidades;
• func_odbc.conf – Configuração de acesso SQL via ODBC;
• http.conf – Servidor Http integrado ao Asterisk;
• iax.conf – Arquivo de configuração do canal IAX2;
• meetme.conf – Configuração das salas de conferência
• sip.conf – Arquivo de configuração do canal SIP;
• modules.conf – Define o carregamento de módulos do Asterisk;
• queues.conf – Define as filas de atendimento;
• res_odbc.conf – Conexão via ODBC para acesso a recursos externos;
• res_pgsql.conf – Conexão com Banco de Dados Postgres;
• res_mysql.conf – Conexão com Banco de Dados MySQL;
• users.conf – Arquivo para configuração fácil de usuários;

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 36


4linux.com.br 3. Compilando e Instalando

• voicemail.conf – Arquivo de configuração do correio de voz.

3.5. Principais arquivos de configuração


• asterisk.conf – O Asterisk faz referência a uma série de diretórios dentro do
sistema operacional. Estes diretórios são definidos dentro deste arquivo;
• logger.conf – É o arquivo que controla os logs do Asterisk. Nele estão
configurados os parâmetros de tudo o que será registrado e em qual(is)
arquivo(s). O volume de dados gerados pelo Asterisk pode ser bastante
grande, por isso a utilização do logrotate do linux é recomendável para
gerenciar os arquivos de log;
• extensions.conf – Consiste de uma lista de instruções ou passos que o
Asterisk deve seguir. Essas instruções são disparadas a partir dos dígitos
recebidos de um canal ou aplicação;
• sip.conf – Contém parâmetros relacionados à configuração dos telefones e
operadoras SIP;
• iax.conf – Contém parâmetros relacionados ao protocolo Inter-Asterisk (IAX),
que é normalmente usado para comunicações entre servidores Asterisk.

3.6. Gerenciando o processo Asterisk


Após a instalação do Asterisk o sistema é automaticamente configurado para
carregá-lo na inicialização do sistema operacional. Porém se algum erro no sistema
impedir que o Asterisk seja carregado com sucesso você pode faze-lo manualmente
e com isso encontrar a falha e/ou erro que esteja causando o problema. Para tal, é
necessário carregar o Asterisk em modo Foreground.

Existem dois modos de carregar o Asterisk.

Foreground – Quando o Asterisk não consegue carregar normalmente este modo


apresenta todas as mensagens de carga do Asterisk. Ele é muito útil para depuração
de problemas na inicialização. Quando carregado neste modo alguns recursos estão
limitados, portanto após detectar o problema, reinicie o Asterisk para carrega-lo em
modo Background.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 37


4linux.com.br 3. Compilando e Instalando

# /usr/sbin/asterisk –vvvgc
*CLI>

onde:

• -v – indica o verbose – informações a serem exibidas na *CLI> do Asterisk.


Quanto maior o número de v's, mais detalhes serão fornecidos ;
• -g – Faz com que o Asterisk descarregue o núcleo em caso de segment
violation
• -c – Habilita o modo de console. Inicia o Asterisk em Foreground (na frente,
implica na opção –f), com uma console com interface de linha de comando.

Background – Modo normal de inicialização do Asterisk. Este modo ativa todos os


recursos do Asterisk podendo o usuário conectar e desconectar da *CLI> do Asterisk
sem interromper o processo.

# service asterisk start


# asterisk -r
*CLI>

Antes de usar o Asterisk, você deve criar os arquivos de configuração. Muito embora
a quantidade de configurações possíveis seja muito grande, apenas um pequeno
conjunto é necessário de forma a iniciar o Asterisk com sucesso.

1. Configurar os ramais em /etc/asterisk/sip.conf


2. Configurar o plano de discagem em /etc/asterisk/extensions.conf

O Asterisk possui um comando chamado asterisk no Linux. Este comando é


responsável por carregar o processo, conectar na *CLI> quando o processo já está
em execução, enviar comandos para a *CLI>, fazer depuração de problemas, etc.

As principais opções do comando asterisk são:

# /usr/sbin/asterisk -h ::(Exibe as opções do comando)

• -v – indica o nível de verbose – informações a serem exibidas na *CLI> do


Asterisk. A verbosidade varia de 0 até 3;
• -g – Executa um DumpCore em caso de falha;
• -c – Executa a CLI no final da carga do processo.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 38


4linux.com.br 3. Compilando e Instalando

• -h – Help, exibe as opções do comando.


• -C <arquivo> - Carrega o Asterisk com outro arquivo de configuração
diferente de /etc/asterisk/asterisk.conf
• -f – Não executa o Fork do processo.
• -r – Conecta remotamente na CLI.
• -n – Desabilita a cor na console.
• -i – Inicializa chaves de criptografia na inicialização.
• -q – Modo silencioso, não exibe as mensagens.
• -d – Habilita modo de debug
• -x ”comando” - Executa o “comando” na CLI e devolve a saída, implica no
uso da opção -r.

3.6.1. Inciando automaticamente

Cada sistema operacional tem métodos levemente diferentes de iniciar os


programas em tempo de inicialização. O diretório /usr/src/asterisk/contrib/init.d
contém scripts para alguns sistemas operacionais. Existem duas maneiras de criar o
arquivo de inicialização automaticamente:

• Copie o script equivalente ao seu Sistema Operacional para o diretório


/etc/init.d, renomeie-o para asterisk e forneça as permissões necessárias
para sua execução na inicialização.
• Outra maneira é, durante a compilação e, logo após compilar o asterisk
(make), executar o comando:

# make config

Este comando instala o script de inicialização correto para a sua versão de


Linux no diretório /etc/init.d. Este diretório contém os scripts de inicialização
de todos os serviços padrão do Linux.

Por padrão o script de inicialização vem configurado para rodar o asterisk como root,
o que não é uma boa opção. Para ajustar isso, altere no script de inicialização as
variáveis AST_USER e AST_GROUP. Não esqueça de ajustar as permissões de
dono e grupo dos arquivos e diretórios do Asterisk.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 39


4linux.com.br 3. Compilando e Instalando

3.7. Laboratório – Asterisk

3.7.1. Objetivos

• Instalar os pacotes necessários para compilação no Linux.


• Fazer o download dos pacotes contendo o código fonte.
• Descompactar os pacotes.
• Compilar e Instalar.
• Gerenciar o processo Asterisk.

3.7.2. Instalar e compilar o Asterisk

• Instalar os pacotes necessários para a compilação: A partir do terminal do


Linux, faça o login com o usuário root e instale os seguintes pacotes com o
utilitário apt-get:

# apt-get install build-essential linux-headers-$(uname -r)


libxml2-dev libnewt-dev libncurses5-dev unixodbc-dev libltdl-
dev libltdl7

• Efetuar o download dos pacotes: Entre no diretório /usr/src e faça o


download dos pacotes contendo o código-fonte necessário.

# cd /usr/src

# wget
http://downloads.asterisk.org/pub/telephony/asterisk/asterisk
-1.8-current.tar.gz

# wget http://downloads.asterisk.org/pub/telephony/dahdi-
linux-complete/dahdi-linux-complete-current.tar.gz

# wget
http://downloads.asterisk.org/pub/telephony/libpri/libpri-
1.4-current.tar.gz

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 40


4linux.com.br 3. Compilando e Instalando

• Descompactar os Pacotes: Descompactar os arquivos com o utilitário tar.

# tar -xzvf asterisk*


# tar -xzvf libpri*
# tar -xzvf dahdi*

• Compilar o pacote DAHDI

# cd /usr/src/dahdi*
# make all
# make install
# make config

• Compilar a biblioteca libpri

# cd /usr/src/libpri*
# make
# make install

• Compilar o Asterisk

# cd /usr/src/asterisk*
# ./configure
# make menuselect :: Selecione SAVE & EXIT
# make :: Compila o Asterisk
# make install :: Instala o Asterisk
# make samples :: Arquivos de exemplo, /etc/asterisk
# make config :: Script de inicialização, /etc/init.d/

3.7.3. Gerenciar o processo Asterisk e conectar a CLI

• Iniciar Asterisk em Background

# service asterisk start

Após a carga do Asterisk será possível conectar na CLI, uma interface em


linha de comando:

# asterisk -vvvr

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 41


4linux.com.br 3. Compilando e Instalando

Entre com o seguinte comando para visualizar a versão do Asterisk


hostname*CLI> core show version

Saia da *CLI> e finalize o processo.


*CLI> exit
# service asterisk stop

• Iniciar Asterisk em Foreground: Agora vamos simular uma falha no sistema


de modo que o Asterisk possa ser debugado em sua inicialização, ou seja, em
modo foreground:

# asterisk -vvvgc

Se o Asterisk carregar com sucesso você terá acesso à sua CLI, note que
agora você não consegue sair da CLI
*CLI> exit
*CLI>

Saia da CLI interrompendo o processo Asterisk e depois carregue-o em modo


Background novamente.
*CLI> core stop now
# service asterisk start

• Finalizar o processo Asterisk a partir da CLI

◦ Interrompe o processo quando não houverem mais chamadas


ativas.
# hostname*CLI> core stop when convenient

◦ Novas chamadas não podem ser processadas e o processo é

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 42


4linux.com.br 3. Compilando e Instalando

interrompido até que todas as chamadas ativas sejam finalizadas.


# hostname*CLI> core stop gracefully

◦ Força o desligamento, se houver chamadas ativas todas serão


desligadas!
# hostname*CLI> core stop now

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 43


Módulo 4

Telefonia TDM
4linux.com.br 4. Telefonia TDM

4. Telefonia TDM

4.1. Canais Analógicos


A maior parte das implementações de telefonia analógica usa um par trançado de
fios metálicos. Quando um loop é fechado, o telefone recebe o tom de discagem da
central telefônica seja ela pública (operadora) ou privada (pabx). Dizemos que este
tipo de sinalização é do tipo “loop-start”. Existem basicamente três sinalizações:

• Sinalização de supervisão – Podemos destacar os sinais on-hook (no


gancho), off-hook (fora do gancho) e ringing (tocando):

◦ On-Hook – Quando o usuário larga o telefone no gancho, o PABX


interrompe e não permite que a corrente seja transmitida;
◦ Off-Hook – O usuário que desejar fazer uma chamada telefônica deve
passar para o estado “off-hook” (fora do gancho), retirando o telefone do
gancho. Este estado fecha o loop elétrico, o qual indica ao PABX que o
usuário deseja fazer uma chamada telefônica;
◦ Ringing – O usuário ao realizar uma ligação, envia uma voltagem ao
“ringer” (campainha) que avisa ao outro usuário a recepção de uma
chamada. A companhia telefônica também manda um tom de volta
avisando a quem discou o progresso da chamada.

• Sinalização de endereçamento – Podemos usar dois tipos de sinalização


para a discagem, o multifrequencial (dtmf) ou o pulso (usado nos antigos
telefones de disco). Os usuários que tem um teclado para discagem têm
associado a cada botão um conjunto de frequências alta e baixa. A
combinação destes dois tons indica para a central qual o digito. Isto é
conhecido como dtmf (dual tone multifrequency).

• Sinalização de informação – A sinalização de informação mostra o


progresso da chamada e os diferentes eventos. Estes eventos podem ser:

◦ Tom de discagem;

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 45


4linux.com.br 4. Telefonia TDM

◦ Sinal de ocupado;
◦ Tom de retorno (ringback);
◦ Congestionamento (congestion);
◦ Número inválido;
◦ Tom de confirmação.

4.1.1. Interfaces FX

As interfaces FX são interfaces analógicas que permite a conexão de um tronco ou


de um telefone com uma central PABX. Elas estão divididas em:

• FXO (Foreign eXchange Office) - Basicamente utilizadas para a


comunicação com o PABX. Uma porta FXO em um roteador se comunica
diretamente com a PSTN ou PABX, esta comunicação requer “dialtone”,
indicação de “ringing” e prover indicadores de chamadas em progresso.
Interfaces FXO conectam o PABX a outro comutador (PABX, Rede Pública,
gateway de voz sobre IP). É muito comum ligar uma interface FXO de uma
central telefônica (ramal) à um gateway VoIP e transportar a voz empacotada
para outro gateway onde uma interface FXS conecta um telefone.

• FXS (Foreign eXchange Station) - São as conhecidas linhas residenciais


padrão. Podem ser utilizadas para conectar dispositivos básicos: telefones,
modems e faxes. Deve prover voltagem, gerar “ringing”, detecção de “off-
hook” e indicar chamadas em progresso.

4.2. Canais Digitais


Quando o número de linhas telefônicas solicitadas por um cliente passa a ser muito
grande, a companhia telefônica normalmente entrega um canal digital. O E1 possui
uma taxa transferência de 2 Mbps e pode ser dividido em 32 canais de 64 Kbps

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 46


4linux.com.br 4. Telefonia TDM

cada. A contratação de linhas E1 abaixo de 2 Mbps é conhecida como "E1


fracionário". A conexão a Centrais públicas da Rede Brasileira de Telefonia é feita
através de troncos E1. A Interface para um Tronco E1 é um conjunto de dois cabos
coaxiais [metálicos ou ópticos], um para transmissão [TX] e outro para recepção
[RX], por onde passam 30 canais de voz digitalizados [01 a 15 e 17 a 31] e 1 canal
de sinalização telefônica [16].

Os troncos E1 podem ser classificados, quanto a sua sinalização, em:

• R2 ou MFC/R2 – é a sinalização mais comum em uso nos sistemas de


telefonia pública comutada no Brasil. Esta sinalização também é chamada de
CAS (Channel Associated Signalling), pois vinculado ao canal de áudio
trafega outro tipo de sinalização, a sinalização MFC (Multi Frequencial
Compelida). O R2-MFC está dividido em duas sinalizações distintas: o R2 que
é a sinalização de linha e o MFC que é a sinalização de registro.

• ISDN (Integrated Services Digital Networks, no Brasil = RDSI Rede digital de


serviços integrados) - permite transmitir grandes volumes de dados, sinais de
vídeo e áudio sobre uma única linha telefônica a alta velocidade. O custo
depende de condições contratuais com a operadora.

4.3. Protocolos de Sinalização


Protocolo é conjunto de regras responsável por controlar o formato e o significado

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 47


4linux.com.br 4. Telefonia TDM

dos pacotes ou mensagens trocadas entre entidades de uma mesma camada. Ele
define as opções de serviço como a solicitação do início da comunicação, a
confirmação do pedido, a configuração da transmissão de dados ou mídia, a
resposta ao envio de informações e a desconexão definindo também sub protocolos
responsáveis por controles específicos.

Um protocolo de sinalização para VoIP deve especificar a codificação da voz, a


configuração das chamadas, o transporte de dados, o modo de autenticação,
segurança, métodos utilizados na comunicação, cabeçalho, endereçamento e
sintaxe da mensagem. Sinalizar significa que a informação da chamada é carregada
através dos limites da rede.

Os dispositivos de comunicação denominados terminais devem ser bem definidos


pelo protocolo. Para controlar outras áreas que não são cobertas pelo protocolo de
sinalização, há uma cooperação com outros protocolos como, por exemplo, o RTCP
(Real Time Control Protocol) para controlar os canais RTP (Real time Transport
Protocol), o TCP (Transmission Control Protocol) a fim de iniciar a configuração de
chamada, o HTTP (HyperText Transfer Protocol) como código de resposta à
aceitação da ligação.

A telefonia IP utiliza os protocolos TCP/UDP/IP da rede como infra-estrutura para os


seus protocolos de aplicação que participam dos processos descritos acima. A figura
a seguir apresenta a estrutura em camadas dos principais protocolos.

• H.323 (Packet Based Multimedia Communications Systems) - O padrão H.323


é um conjunto de protocolos verticalizados para sinalização e controle da
comunicação entre terminais que suportam aplicações de áudio (Voz), vídeo

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 48


4linux.com.br 4. Telefonia TDM

ou comunicação de dados multimídia;

• SIP (Session Initiation Protocol) - O protocolo SIP, definido através da


recomendação RFC 2543 do IETF, estabelece o padrão de sinalização e
controle para chamadas entre terminais e possui os seus próprios
mecanismos de segurança e confiabilidade. Estabelece recomendações para
serviços adicionais tais como transferência e redirecionamento de chamadas,
identificação de chamadas (chamado e chamador), autenticação de
chamadas (chamado e chamador), conferência, entre outros. É o principal
protocolo adotado pelo mercado.

• IAX2 (Inter-Asterisk Exchange) - É um protocolo desenvolvido pela Digium


com o objetivo de estabelecer comunicação entre servidores Asterisk. IAX é
um protocolo de transporte, tal como o SIP, no entanto faz uso apenas de
uma única porta UDP (4569) tanto para sinalização como para streams RTP
(audio). O fato de utilizar apenas uma porta é uma vantagem em cenários de
Firewall e/ou NAT. IAX2 é versão nr. 2 do IAX. Apesar de suas vantagens em
relação a outros procolos, sua implementação ainda é baixa.

4.4. Hardwares de Telefonia


• Telefones IP – Os telefones IP algumas vezes são chamados de Telefones
VoIP, Telefones SIP ou softphones. Baseiam-se no princípio da transmissão
de voz pela internet, ou são mais conhecidos como tecnologia VoIP (ou voz
sobre protocolo de internet).
• Interfaces de comunicação – são placas destinadas a prover soluções de
Telefonia Computadorizada, Telefonia IP e VoIP. Com conexão para interfaces
telefônicas analógicas, digitais e GSM, essas placas propiciam o
desenvolvimento de uma grande quantidade de aplicações, como por
exemplo, PABX IP, Media Gateway, URA, Gravadores de Chamadas
Telefônica, Correio de Voz e Discadores Automáticos.
◦ Interface FXS – É a interface que fornece a linha analógica ao assinante.
Em outras palavras, é o “plug na parede” que fornece o tom de discagem,
corrente de energia e som;

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 49


4linux.com.br 4. Telefonia TDM

◦ Interface FXO – É a interface que recebe a linha analógica. É o plug no


telefone ou aparelho de fax, ou o(s) plug(s) no seu sistema de telefonia
analógica;
◦ Interface E1 – É uma interface que recebe um link de dados a 2Mbps.
Este tipo de enlace permite até 30 canais simultâneos de voz e/ou vídeo,
geralmente fornecidos via rádio ou fibra até o modem do cliente;
◦ Interface GSM – É uma interface que permite a conexão de chips de
telefonia celular.
• Gateways FXO – O gateway FXO é usado para conectar uma ou mais linhas
de um PABX convencional a um sistema de telefonia VoIP ou a um provedor;
• Gateway FXS – Também conhecido como Banco de Canais, pois prove uma
série de portas Analógicas do tipo FXS que podem ser conectadas
diretamente aos telefones analógicos;
• Gateway GSM – Também conhecido popularmente como “chipeira”, é um
equipamento que possue uma série de portas GSM e uma interface de
comunicação com o PABX, que pode ser IP ou TDM. Possui por padrão 1
slots para SIMM Card por porta, porém alguns modelos permitem até dois
SIMM Card por porta. Com este equipamento é possível reduzir o custo com
a telefonia contratando um serviço de consulta a portabilidade de modo a
chamada é efetuada pela mesma operadora do número de destino;
• ATA (Adaptador de Telefone Analógico) - É usado para conectar o telefone ou
aparelho de fax analógico a um sistema de telefonia VoIP (PABX IP) ou a um
provedor VoIP. O ATA possui uma pequena quantidade de portas, uma ou
duas no máximo, quando forem de 8 portas ou mais é identificado como um
Gateway;
• EBS (External Board Series) - São módulos compactos de 1U e meio rack
para todas as interfaces: E1, GSM, FXS, FXO e gravação, trabalhando fora
do servidor, o que permite fácil ampliação de cenários, criação de sistemas
redundantes, entre outras facilidades.

Existem no mercado uma série de fabricantes de hardware de telefonia para


Asterisk, sendo a Digium considera a fabricante oficial. Nem sempre o hardware
Digium é a melhor opção. Dependendo do projeto, alguns fabricantes nacionais

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 50


4linux.com.br 4. Telefonia TDM

como a KHOMP possuem hardware para soluções com alta disponibilidade e melhor
adequação. Outros fabricantes mais conhecidos: Sangoma, Aligera, Digivoice,
RedFone, YXWireless, Audiocodes.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 51


Módulo 5

Configurando um
PABX
4linux.com.br 5. Configurando um PABX-IP

5. Configurando um PABX-IP

5.1. Básico do plano de discagem


O plano de discagem é o coração do Asterisk, pois é ele quem define como as
chamadas serão processadas. Ele consiste de uma lista de instruções ou passos
que o Asterisk deve seguir. Essas instruções são disparadas a partir dos dígitos
recebidos através de um canal. A maior parte do plano de discagem está contida no
arquivo extensions.conf no diretório /etc/asterisk. Normalmente este arquivo está
separado em quatro partes, a partir da seguinte lógica hierárquica:

• Contexto
9 Extensão
9 Prioridade
9 Aplicação

5.1.1. Contextos

Os contextos têm um papel importante no Asterisk na organização e segurança do


plano de discagem. Os contextos também definem o escopo e permitem separar
diferentes partes do plano de discagem. É importante ressaltar que os contextos
estão ligados diretamente aos canais, ou seja, cada canal existe dentro de um
contexto. Quando uma ligação entra no Asterisk por um canal ela é processada
dentro de um contexto. Os contextos recebem o seu nome dentro de colchetes, com
a seguinte sintaxe: [nome_contexto]. Por exemplo, se nós fossemos criar um
contexto para a entrada de chamadas, poderíamos definir como:
[entrada]
...
[saida]
...

Todas as instruções colocadas após a definição são partes do contexto. Um novo


contexto é iniciado quando uma nova definição de contexto é encontrada.
No início do arquivo extensions.conf podem ser declarados dois contextos especiais,
são eles: [general] e [globals] – o primeiro é utilizado para opções gerais e o

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 53


4linux.com.br 5. Configurando um PABX-IP

segundo para declaração de variáveis globais que podem ser utilizadas ao longo da
programação, abordado com mais detalhes nos módulos à frente. A seguir
apresentamos um exemplo de Dialplan com os contextos [general] e [gobals]
[general] ;Opções gerais do Dialplan
writeprotect=yes ;Modo somente leitura
static=yes ;Modo estático

[globals] ;Define as variáveis Globais


TELEFONISTA=SIP/5500 ;Declaração de variável

[default] ;Primeiro contexto


exten => 2000,1,Dial(SIP/2000) ;Disca para o Ramal 2000
exten => 2000,2,Hangup() ;Desliga a chamada

exten => 2001,1,Dial(SIP/2001) ;Disca para o Ramal 2001


exten => 2001,2,Hangup() ;Desliga a chamada

exten => 3000,1,Answer() ;Atende o canal.


exten => 3000,2,Wait(1) ;Aguarda um segundo.
exten => 3000,3,Playback(vm-youhave) ;Toca um áudio.
exten => 3000,4,Playback(Work) ;Toca um áudio.
exten => 3000,5,Dial(${TELEFONISTA}) ;Liga para o ramal 5500.
exten => 3000,6,Hangup() ;Desliga a chamada

5.1.2. Extensões

As extensões são declaradas dentro dos contextos e determinam o fluxo das


chamadas. Uma extensão é na verdade uma regra. Quando uma chamada chega ao
Asterisk ele procura uma regra que “case” com as regras (extensões) declaradas
dentro de um contexto.

exten => número(nome), prioridade, aplicação

Dentro de cada contexto serão definidas diversas extensões, veja o exemplo:

[interno]
exten => 2000,1,Dial(SIP/2000,60)
exten => 2000,2,voicemail(2000,u)
exten => 2000,3,Hangup()

onde:
• exten => - descreve o início de uma regra;

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 54


4linux.com.br 5. Configurando um PABX-IP

• 2000 – é o conjunto de dígitos que foi recebido (número discado);


• 1, 2 e 3 – após o 2000 são as prioridades que determinam a ordem de
execução;
• Dial, voicemail e Hangup – são aplicações do Asterisk.

Neste exemplo, o Asterisk ao receber uma chamada para o número 2000, fará tocar
o Ramal 2000 por 60 segundos, se não atender, será desviado para a próxima
prioridade que executa o Voicemail (caixa postal) e depois desliga a chamada.

Sendo assim, uma Extensão é uma Regra de discagem dividida em 3 partes:

exten => Identificador + Prioridade + Aplicação

exten => define o início de regra, seguido por um identificador por uma prioridade e
uma aplicação.

Identificador – pode ser de 3 tipos:

• Numérico

exten => 9052

• Numérico com CallerID

exten => 9052/1150603400

• Alfanumérico

exten => ura32

• Reservados/Especiais (Não podem ser utilizados para outra finalidade)

exten => ?

onde ? pode ser:

s – Usado em canais FXO onde não recebe o número de B;


t – Usado em URA quando o usuário não disca nenhuma opção;
T – Timetout de Discagem, quando ninguém atende;

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 55


4linux.com.br 5. Configurando um PABX-IP

i – Digito Inválido, quando o usuário tecla uma opção invalida na URA;


a – Usado quando pressionado '*' dentro do Voicemail;
h – Usado no desligamento de uma chamada.
O identificador de uma extensão também pode ser expresso através de uma
máscara baseada em expressão regular (ER). Este é um recurso muito útil
para evitar que sejam construídos milhares de regras repetidas. Toda máscara
deve iniciar com o carácter “underline” ou “underscore”, como por exemplo:

exten => _0XXXXXXXX

ER Função Exemplo
X Um número entre 0 e 9 _XX -> qualquer número de 00 a 99
Z Um número entre 1 e 9 _ZZ -> qualquer número de 11 a 99 – exceto (20,30,40,...)
N Um número entre 2 e 9 _NN -> qualquer número de 22 a 99 – exceto (20,21,30,31,...)
_[0-9] -> um número entre 0 e 9 - é equivalente a X
_[15-7] -> um número da lista: 1 ou 5 até 7.
[e] Lista de opções
_[13457] -> um número da lista: 1 ou 3 ou 4 ou 5 ou 7.
_[a-zA-Z] -> uma letra maiúscula ou minúscula do alfabeto.
_0800. -> Expressão regular que vale para qualquer número
Qualquer carácter,
. que inicie com _0800 + qualquer outro carácter, infinitas
infinitas vezes
vezes.
_0800! -> funciona como um ponto, mas trata de forma
! Coringa inclusivo
diferente, testando todas as outras possibilidades primeiro,

Exemplo de uso de Expressões Regulares

Antes

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

Depois

[ramais]
exten => _200X,1,Dial(SIP/${EXTEN})

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 56


4linux.com.br 5. Configurando um PABX-IP

5.1.3. Prioridades

Definem a ordem de execução de uma extensão. As prioridades podem ser:

Numéricas:

exten => 2000,1,Dial(SIP/2000)

A prioridade 1 é obrigatória! Não existe regra válida se não houver esta


prioridade.

Próxima (next):

Imagine uma extensão com 50 prioridades. Se a prioridade 4 for removida


todas as demais abaixo deverão ser reordenadas. Para evitar este tipo de
problema existe a prioridade n.

exten => 2000,1,Dial(SIP/2000)


exten => 2000,n,Voicemail(2000,u)
exten => 2000,n,Hangup()

Próxima (next) com Rótulo (Label):

Quando as prioridades eram somente enumeradas, era fácil mover uma


chamada para a prioridade 9, por exemplo, mas com o uso da prioridade N
houve a necessidade de criar um nome ou apelido para chamar essa
prioridade.

Neste exemplo se o ramal 2000 estiver ocupado a chamada é desviada para


a prioridade n(ocupado) que executa o a aplicação Voicemail para que o
usuário deixe uma mensagem. Caso contrário a chamada é desviada para a
prioridade n(desliga) e a chamada é encerrada.

exten => 2000,1,Dial(SIP/2000)


exten => 2000,n,GotoIf($[${DIALSTATUS}=BUSY]?ocupado:desliga)
exten => 2000,n(ocupado),Voicemail(2000,b)
exten => 2000,n(desliga),Hangup()

As prioridades são a ordem de execução de cada extensão. Cada prioridade


chama uma aplicação específica. Normalmente estes números de prioridade

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 57


4linux.com.br 5. Configurando um PABX-IP

começam com 1 e aumentam de um a um em cada extensão, mas isso não


impede de ser utilizada de forma mais intuitiva recebendo um rótulo.

Atenção! Cuidado para não declarar duas prioridades iguais na


mesma regra de extensão. Quando isso acontece o Asterisk ignora a
extensão declarada nesta prioridade repetida.

5.1.4. Aplicações

Uma aplicação no plano de discagem é o destino final da execução de uma


extensão, ou seja, cada aplicação tem uma finalidade exclusiva. O Asterisk possui
mais de 150 aplicações, como por exemplo:

• Dial – Aplicação responsável por executar uma chamada;


• Hangup – Desliga um canal;
• Answer – Atende um canal;
• MixMonitor – Grava uma chamada;
• Record – Grava um único canal de áudio;
• MeetMe – Conferência;
• Goto – Move uma chamada no plano de discagem.

As aplicações também podem receber argumentos, e isso depende de cada


aplicação. Para saber mais sobre cada uma delas é possível exibir uma página de
manual na própria interface do Asterisk.

• Para listar todas as aplicações disponíveis:

*CLI> core show applications

• Para obter informações detalhadas de uma aplicação específica:

*CLI> core show application Dial

5.2. Configurando um canal SIP


Um canal pode ser interpretado como uma conexão de entrada e/ou saída de uma
chamada no Asterisk. Um canal pode ser uma conexão a um telefone analógico

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 58


4linux.com.br 5. Configurando um PABX-IP

tradicional, uma linha PSTN ou ainda um canal IP, como uma chamada SIP via
Internet.

O canal IP mais comumente usado no Asterisk é o SIP e todas suas configurações


estão dentro do arquivo /etc/asterisk/sip.conf. O exemplo abaixo cria duas contas
SIP, uma para o ramal 2000 e outra para o ramal 2001. Estas contas devem ser
registradas por um telefone ou softphone IP após serem definidas no Asterisk.

[general]
udpbindaddr=0.0.0.0:5060
context=default
disallow=all
allow=ulaw,alaw,gsm
directmedia=no
;;
[2000]
type=friend
secret=2000
dtmfmode=rfc2833
host=dynamic
;;
[2001]
type=friend
secret=2001
dtmfmode=rfc2833
host=dynamic

• [general] - Esta seção define alguns parâmetros globais do protocolo SIP e


também opções que podem ser herdadas pelas demais contas criadas ao
longo do arquivo.
◦ udpbindaddr – Define o endereço IP e Porta UDP onde as requisições
SIP serão recebidas. Quando o servidor possui mais de um endereço, eles
devem ser declarados separados por vírgula seguido por dois pontos mais
o número da porta. A declaração da porta só é obrigatória quando esta for
diferente da porta padrão (5060). Caso o servidor tenha que “ouvir” em
todas as interfaces o endereço 0.0.0.0 é declarado, exemplo:
172.16.0.253:5065;
◦ tcpbindaddr – O mesmo que udpbindaddr, porém neste caso o SIP é
transportado via TCP. Este protocolo é utilizado quando se deseja

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 59


4linux.com.br 5. Configurando um PABX-IP

implementar criptografia por TLS ou garantir a entrega do pacote. Para


funcionar, cliente e servidor devem ter suporte ao TCP e TLS, a porta 5060
é a padrão TCP e 5061 é a padrão para TLS;
◦ context – Define o contexto ao qual o ramal pertence. Este contexto será
criado posteriormente no plano de discagem;
◦ disallow – Desabilita os CODEC's passados um a um separados por
vírgula ou o parâmetro all para desabilitar todos os codec's;
◦ allow – Habilita um ou mais CODEC's separados por vírgula ou o
parâmetro all para todos os codec's;
• [identificador] - Identificação do ramal – o identificador pode ser um valor
numérico, texto (string) ou alfanumérico.
◦ type – Define o tipo de conta: peer, user ou friend. Quando a conta for
utilizada por um telefone é sempre friend;
◦ secret – Senha para registrar o ramal no servidor – por questões básicas
de segurança utilizar sempre senhas fortes;
◦ host – Para que uma chamada seja entregue a um telefone, o Asterisk
precisa saber o seu IP. Caso o endereço seja declarado de forma estática
e o telefone trocar o IP, o mesmo ira parar de receber ligações. Se o
endereço for dinâmico o parâmetro dynamic deve ser definido.;
◦ username – Quando este parâmetro é declarado o valor do mesmo deve
ser utilizado como nome de usuário para registro, caso não tenha sido
declarado, o nome do [identificador] é usado para o mesmo propósito.

5.2.1. Configurando os Ramais SIP

Uma das grandes vantagens da telefonia IP é a flexibilidade que existe no uso de um


ramal VoIP, sendo o SIP o padrão do mercado. Podemos utilizar um Softphone
instalado em um PC, Telefone IP de diversos fabricantes e até um Softphone
instalado em um Smartphone com Android, IOS ou WindowsPhone.
Atualmente existe uma série de Softphones disponíveis no mercado, sendo que
alguns são gratuitos e outros não. Os softphones comercias tem suporte ao CODEC
G729 e podem ser instalados em muitos dispositivos como nos smartphones.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 60


4linux.com.br 5. Configurando um PABX-IP

Exemplos de fabricantes de Telefone IP:


• Yealink, CISCO, GrandStream, ATCOM, Linksys, Khomp, Intelbras.

Exemplos de Softphones:
• Zoiper http://www.zoiper.com,
• Bria http://www.counterpath.com
• Twinkle http://mfnboer.home.xs4all.nl/twinkle/
• Ekiga http://www.ekiga.org/
• Jitsi https://jitsi.org/
• Linphone http://www.linphone.org/

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 61


4linux.com.br 5. Configurando um PABX-IP

5.3. Interface gráfica


O SNEP é uma família de soluções capaz de transformar a comunicação das
Empresas, integrando voz, dados e sistemas.

Na função de um PABX híbrido (analógico, digital e IP), Gerenciador de Contact e


Call Center, Monitoramento da Qualidade de Atendimento e Gateway de voz, o
SNEP é um forte aliado para reduzir os custos com comunicação e aumentar a
eficiência nas relações empresariais.

Conceitualmente – É um PABX IP completo de grande porte e recursos que fornece


Suporte à Telefonia Convencional e Telefonia IP e é baseado em GNU/Linux e
Asterisk.

Tecnicamente – É uma Interface de administração, configuração e monitoramento


que agrega inteligência ao Asterisk.

5.3.1. Instalando o SNEP

A ISO (Imagem de CD bootável) foi criada com o intuito de facilitar todo o processo
de instalação dos softwares necessários para o completo funcionamento do SNEP.
As configurações básicas de alguns softwares também são feitas automaticamente,
o que torna a instalação do SNEP um processo simples, rápido e eficiente. A ISO do
SNEP instala e configura:

• O SO Linux Debian
• O servidor WEB Apache
• O Asterisk
• A Banco de dados MySQL
• O PHP
• O SNEP
A instalação também pode ser feita manualmente, baixando o arquivo .tgz ou o
pacote .deb do SNEP. Estes arquivos e os respectivos manuais de instalação podem
ser encontrados no site www.sneplivre.com.br.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 62


4linux.com.br 5. Configurando um PABX-IP

5.3.2. Conhecendo a interface gráfica

A Interface do SNEP foi projetada obedecendo conceitos de ergonomia e


praticidade, tendo como características principais: clareza, simplicidade e
objetividade.

O principal objetivo da Interface do SNEP é prover em seu contexto:

– Facilidade para cadastrar Ramais, Troncos, Rotas, etc;


– Ajustes automáticos de arquivos de configuração;
– Monitoramento em tempo real de logs, links, conexões, etc;
– Relatórios, Gráficos e Estatísticas diversos.
A seguir poderemos identificar as principais funcionalidades:

Exibe menus de módulos


adicionais instalados

Indicadores de menu e Lista itens cadastrados


rotina em execução Menu principal
Ajuda contextual

Status do sistema/serviços Versão do SNEP

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 63


4linux.com.br 5. Configurando um PABX-IP

5.3.3. Conceitos: Ramais e Troncos

Troncos – Os Troncos são o meio de comunicação entre o ambiente local e o


“mundo externo”. É pelos troncos que as chamadas entram e saem do ambiente
local. Os tipos de Troncos mais comuns podem ser:

• Analógicos: linhas de telefonia convencionais onde cada número geralmente


exige um meio físico próprio;
• Digitais: conhecido também como E1 ou DDR, consiste em um grupo de
números de telefones que chegam/saem por um único meio físico;
• GSM: consiste em um “chip” de telefonia celular geralmente conectado
através de unidades conhecidas como Cel-Fix ou através de placas
específicas acopladas ao servidor de telefonia;
• VOIP: consistem em “contas” (host, usuário, senha) fornecidas por um
provedor de telefonia que por sua vez encaminham as chamadas para o
“mundo externo”;

Ramais – Os Ramais são o meio físico utilizado para prover comunicação entre
duas ou mais pessoas. Os tipos de ramais mais comuns podem ser:

• IP: são ramais que utilizam protocolos de comunicação específicos de


telefonia IP, como SIP e IAX2. Ramais IP podem ser aparelhos específicos ou
então softwares conhecidos como Softphones. Para um Ramal IP, o
protocolos mais comum é o SIP.
• Virtual: este é um conceito utilizado pelo SNEP. Consiste basicamente em
“mapear” um ramal pertencente a uma outra Central Telefônica que está
conectada ao SNEP.
• Khomp: este também é um conceito utilizado pelo SNEP. Consiste em
identificar em qual porta de um Banco de Canais KFXS um ramal Analógico
está conectado.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 64


4linux.com.br 5. Configurando um PABX-IP

5.4. Laboratório – Asterisk

5.4.1. Objetivos

• Configurar dois ramais SIP e criar um plano de discagem manualmente;


• Configurar dois ramais SIP via interface gráfica.

5.4.2. Configurando o canal SIP do Asterisk (sip.conf)

O Asterisk já possui o arquivo /etc/asteris/sip.conf repleto de informações de


exemplo, porém em nosso laboratório vamos criar um arquivo desde o inicio que
será incrementado com mais parâmetros ao decorrer dos laboratórios.

• Movendo o arquivo sip.conf para sip.conf.old

# cd /etc/asterisk
# mv sip.conf sip.conf.old

• Criando um novo arquivo sip.conf: Pode-se utilizar qualquer editor de


arquivos para esta tarefa, como: gedit :: nano :: pico :: mcedit :: vim. O nano é
o ideal para quem não tem experiência com Linux

# nano /etc/asterisk/sip.conf

Copie este modelo trocando as letras NN pelo número do prefixo de sua filial
passado pelo Instrutor.

[general]
udpbindaddr=0.0.0.0
context=interno
disallow=all
allow=ulaw,alaw,gsm
;;
[NN01]
type=friend
secret=NN01
dtmfmode=rfc2833

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 65


4linux.com.br 5. Configurando um PABX-IP

host=dynamic
language=pt_BR
mailbox=NN01
callerid=<NN01> “SeuNome01”

[NN02]
type=friend
secret=NN02
host=dynamic
dtmfmode=rfc2833
language=pt_BR
mailbox=NN02
callerid=<NN02> “SeuNome02”

Ao final, salve o arquivo e recarregue as mudanças na CLI do Asterisk,


execute este procedimento sempre que o arquivo sip.conf for alterado.

# asterisk -vvvr
*CLI> sip reload
*CLI> sip show peers

5.4.3. Configurando o plano de discagem

O arquivo extensions.conf padrão do Asterisk, não será utilizado, portanto deve ser
renomeado e criado um novo arquivo vazio.

• Movendo o arquivo extensions.conf para extensions.conf.old

# cd /etc/asterisk
# mv extensions.conf extensions.conf.old

• Criando um novo arquivo extensions.conf: Pode-se utilizar qualquer editor


de arquivos para esta tarefa, como: gedit :: nano :: pico :: mcedit :: vim. O
nano é o ideal para quem não tem experiência com Linux

# nano /etc/asterisk/extensions.conf

Copie este modelo trocando as letras NN pelo número do prefixo de sua filial
passado pelo Instrutor.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 66


4linux.com.br 5. Configurando um PABX-IP

[interno]
exten => NN01,1,Dial(SIP/NN01,60,tT)
exten => NN02,1,Dial(SIP/NN02,60,tT)

exten => 5000,1,Answer()


exten => 5000,2,PlayBack(demo-thanks)
exten => 5000,3,Hangup()

Carregue as alterações efetuadas no asterisk. Este procedimento deve ser


executado toda vez que o extensions.conf for alterado.

# asterisk -vvvr
*CLI> dialplan reload

5.4.4. Configurando o Softphone

O softphone Twinkle já deve estar instalado em seu PC, procure-o no Menu


Aplicativos no sub-menu Internet.

Caso não esteja instalado execute o comando seguinte para instalar no Debian.

# apt-get install twinkle

Ao executar o Twinkle pela primeira vez uma tela solicitando a criação de um perfil
será apresentada, clique em OK para continuar

Você pode configurar o Twinkle de várias formas. Neste laboratório vamos usar o
guia de configuração Wizard.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 67


4linux.com.br 5. Configurando um PABX-IP

Entre com o nome do Perfil, troque NN pelo número da sua Filial

Complete os campos conforme o modelo, troque NN pelo número da sua Filial.

5.4.5. Configurando o telefone IP

Identifique o IP do seu telefone e acesse as configurações através do seu


navegador. Configure um segundo ramal neste telefone.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 68


4linux.com.br 5. Configurando um PABX-IP

5.4.6. Testando o Telefone IP e o softphone:

a) Ligue para o ramal 5000 pelo Softphone e pelo telefone IP, uma mensagem será
tocada para o usuário.

b) Faça uma ligação entre os ramais e verifique se está funcionando.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 69


4linux.com.br 5. Configurando um PABX-IP

5.5. Laboratório – SNEP

5.5.1. Baixando e instalando o pacote do SNEP e dependências

# apt-get install apache2 apache2-mpm-prefork apache2-utils


apache2.2-bin apache2.2-common libapache2-mod-php5

# apt-get install php5 php5-cgi php5-cli php5-common php5-curl


php5-gd php5-mcrypt php5-mysql php5-suhosin php5-odbc

# apt-get install mysql-server mysql-client libmyodbc

# a2enmod rewrite
# service apache2 restart

# cd /usr/src/

# wget
http://downloads.sourceforge.net/project/snep/snep/unstable/snep-
2.0.1-rc1.tar.gz .

# tar -vzxf snep-2.0.1-rc1.tar.gz -C /var/www/

5.5.2. Ajustando as permissões

# cd /var/www/
# chown -R www-data.www-data *
# chmod 775 snep-2.0-rc1

# ln -s snep-2.0-rc1 snep

# cd /etc/apache2/sites-enabled/
# cp /var/www/snep/install/snep.apache2 001-snep

# cd /var/log
# mkdir snep
# touch snep/ui.log
# touch snep/agi.log
# chown -R www-data.www-data snep/

# cd /var/lib/asterisk/agi-bin/
# ln -sf /var/www/snep2/agi snep
# chmod 776 /var/www/snep/agi -R

Habilite o php-cgi para receber parâmetros. Edite os arquivos listados abaixo usando

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 70


4linux.com.br 5. Configurando um PABX-IP

seu editor preferido (vi, nano, etc), procure as linhas referente apenas aos valores
citados e efetue apenas estas alterações:

mude o valor de: register_argc_argv = Off

para: register_argc_argv = On

Arquivos a serem alterados:

• /etc/php5/cli/php.ini

• /etc/php5/cgi/php.ini

• /etc/php5/apache2/php.ini

5.5.3. Integrando Snep x Asterisk

# cp /var/www/snep/install/etc/odbc* /etc/
# cp /var/www/snep/install/etc/asterisk/manager.conf /etc/asterisk
# cp /var/www/snep/install/etc/asterisk/cdr* /etc/asterisk
# cp
/var/www/snep/install/etc/asterisk/res_odbc.conf /etc/asterisk

# cp -avr /var/www/snep/install/etc/asterisk/snep /etc/asterisk/


# cp -avr /var/www/snep/install/etc/asterisk/custom /etc/asterisk/

# chown www-data.www-data /etc/asterisk/snep -R


# chown www-data.www-data /etc/asterisk/custom -R

# mv /var/spool/asterisk/monitor /var/spool/asterisk/monitor.snep
# ln -sf /var/www/snep/arquivos /var/spool/asterisk/monitor

5.5.4. Ajuste dos diretórios de audio

• Músicas de espera

# cd /var/lib/asterisk

# mkdir moh/tmp moh/backup


# mkdir -p moh/snep_1/tmp moh/snep_1/backup
# mkdir -p moh/snep_2/tmp moh/snep_2/backup
# mkdir -p moh/snep_3/tmp moh/snep_3/backup

# chown www-data.www-data /var/lib/asterisk/moh/ -R

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 71


4linux.com.br 5. Configurando um PABX-IP

• Ajuste nos arquivos de áudio PT-BR

# cd /usr/src
# wget
http://svn.softwarepublico.gov.br/trac/snep/export/3/trunk/as
terisk-sounds.tgz

# tar -xvzf asterisk-sounds.tgz -C /var/lib/asterisk/

# mkdir -p /var/lib/asterisk/sounds/pt_BR/tmp
# mkdir -p /var/lib/asterisk/sounds/tmp
# mkdir -p /var/lib/asterisk/sounds/pt_BR/backup
# mkdir -p /var/lib/asterisk/sounds/backup

# chown www-data:www-data /var/lib/asterisk/sounds -R

# cd /var/www/snep/sounds/
# ln -sf /var/lib/asterisk/moh/ moh
# ln -sf /var/lib/asterisk/sounds/pt_BR/ pt_BR

5.5.5. Criação de base de dados, usuário e importação de dados

Você precisa a senha de administrador do Mysql, informada na instalação deste. Ao


executar os comandos a seguir, será criada uma base de dados no MySQL com as
seguintes informações:

• Nome da base de dados (database) : snep25


• Usuário de Conexão: snep
• Senha do Usuário de Conexão: sneppass

Este usuário/database permitem conexões somente locais (localhost). Para


conectar-se ao MySQL a partir de outra máquina, será necessário configurar o
MYSQL.

# cd /var/www/snep/install/

# mysql -uroot -p < database.sql

# cd /var/www/snep/modules/default/installer

# mysql -uroot -p snep25 < schema.sql


# mysql -uroot -p snep25 < system_data.sql
# mysql -uroot -p snep25 < cnl_data.sql

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 72


4linux.com.br 5. Configurando um PABX-IP

# cd /var/www/snep/modules/updateModule/install

# mysql -uroot -p snep25 < schema.sql

# service asterisk restart

5.5.6. Configurações iniciais do SNEP

Acesse a interface gráfica e ajuste seu Dashboard escolhendo os atalhos que


considera mais relevantes. Para isso, em seu navegador de internet, digite:

http://_ip_do_servidor/snep

Dados de acesso a interface:

• Login: admin
• Senha: admin123

No menu Configurações >> Parâmetros, altere:

• Nome da Empresa
• Range de ramais

No menu Cadastros >> Ramais, cadastre novos ramais (diferente dos cadastrados
no Asterisk) e analise o arquivo /etc/asterisk/snep/snep-sip.conf.

5.5.7. Ajustando as configurações SNEP x Asterisk

Verifique no diretório /etc/asterisk/snep/snep-sip.conf que os ramais que você


criou na interface, estão todos neste arquivo. Porém, o Asterisk ainda não sabe
disso, pois ele reconhece somente o arquivo /etc/asterisk/sip.conf. Para ajusta
isso, edite o arquivo /etc/asterisk/sip.conf e, no final do arquivo, inclua a seguinte
linha:

#include snep/snep-sip.conf

A partir da *CLI> do Asterisk, recarregue as configurações do sip com o comando:

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 73


4linux.com.br 5. Configurando um PABX-IP

*CLI> sip reload

Obs: Os ramais que você cadastro no Asterisk também podem ser incluídos na
interface do SNEP. Para isso, na seção “tecnologia de canais”, altere o tipo para
Manual, e no campo Manual, utilize a combinação: SIP/numero_ramal.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 74


Módulo 6

Análise de rede
4linux.com.br 6. Análise de rede

6. Análise de rede
Precisamos entender que até o começo da década de 1990 haviam dois tipos bem
distintos de rede pública:

• Rede de telefonia (PSTN);


• Rede de computadores (Internet).

A rede de telefonia se baseava em serviços dedicados com meios de transmissão


determinísticos; ou seja, havia sempre um meio de transmissão apto a transmitir a
informação desejada. No caso, a voz até o cliente final. Isso era conseguido graças
à capilarização das redes com o mínimo de compartilhamentos desses recursos.
Com isso, tem-se um cenário ideal para a rede baseada em circuitos.

Algo inverso ao que acontece nas redes de computadores, onde é natural a


disputa pelo recurso meio de transmissão. Isso acontece não só nas redes locais –
onde a formação da rede é em árvore – mas também na Internet. Não bastasse isso,
vários serviços distribuídos em rede favorecem um meio altamente competitivo, por
isso a rede ser baseada em pacotes.

6.1.1. VoIP

Voz sobre IP pode agregar, portanto, várias áreas de estudo de redes de telefonia e
de computadores, uma vez que existe um panorama bastante inóspito para a
transmissão de voz em tempo real, transmissão esta fragmentada em pacotes.

Dentre as várias áreas, cabe destacar:

• tecnologias/protocolos de sinalização;
• tecnologias/protocolos para descrever quais os tipos de mídia suportados em
cada ponta da comunicação;
• tecnologias/protocolos para transmissão das mídias em ambos os sentidos;
• tecnologias/protocolos para garantir a qualidade do serviço (QoS).
Enquanto que os três primeiros estão mais ligados às pontas da comunicação,
geralmente dois usuários finais, é no último item, qualidade de serviço, que reside

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 76


4linux.com.br 6. Análise de rede

hoje o grande problema de implementação de VoIP em escala.

6.2. Arquitetura de redes


Através do modelo tradicional de telefonia, é praticamente inviável a convergência
de voz e dados em função da necessidade de grande quantidade de banda
passante e o custo a ser replicado para os usuários. Neste modelo, cada circuito
alocado para uma chamada telefônica tem garantido durante todo tempo em que a
chamada estiver estabelecida 64 Kbps de banda.

Nesse cenário, a tecnologia VoIP ou Voz sobre IP se apresenta como a evolução do


modelo telefônico tradicional, permitindo a transmissão de voz em tempo real, que
antes era feita sobre uma rede comutada em circuitos e em sua evolução é feita em
uma rede comutada por pacotes, encapsulada em pacotes de dados e transportados
através do protocolo IP.

Por isso, toda a tecnologia VoIP foi desenvolvida com base no modelo OSI de forma
que para o seu uso, independam o meio físico e a tecnologia de enlace utilizada. Os
protocolos e codec's VoIP fazem parte das camadas de Aplicações, Sessão e
Transporte do modelos OSI conforme tabela abaixo.

Modelo OSI VoIP

Camada 7 Aplicação ➪ Softphones / Asterisk

Dados Camada 6 Apresentação ➪ Codec (G711, iLBC, G729)

Camada 5 Sessão ➪ SIP, H323, IAX

Segmentos Camada 4 Transporte ➪ UDP + RTP

Pacotes Camada 3 Rede ➪ IP

Frames Camada 2 Enlace ➪ PPP,Frame Relay,


HDLC,Ethernet

Bits Camada 1 Física ➪ Par Metálico, Fibra

• Na camada de aplicação está presente a voz comprimida de acordo com o

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 77


4linux.com.br 6. Análise de rede

codec utilizado, citamos como exemplo o G.729, G.723, G.711 e GSM;

• Na camada de sessão são negociados o inicio e fim das chamadas.


Atualmente o protocolo mais usado é o SIP.

• Na camada de Transporte os pacotes de dados provenientes das camadas


de Aplicação e Sessão são encapsulados em segmentos. No caso dos
codec's, eles são encapsulados pelo RTP, RAS ou RTCP e no caso dos
protocolos de sessão eles são normalmente encapsulados pelo UDP.

Dessa forma, o segmento gerado, seja ele proveniente da camada de aplicação ou


de sessão, serão encapsulados pelo protocolo IP, formando um pacote e enviados
através do meio de comunicação disponível, seja ele Ethernet, ATM, Wireless, etc..

Quando o pacote chega ao seu destino, ele é aberto e dá-se inicio ao processo
inverso, onde o pacote é aberto, remove-se seu cabeçalho, restando o segmento,
esse é aberto, remove-se seu cabeçalho restando a aplicação.

6.3. Definindo um protocolo

6.3.1. SIP

Padrão aberto descrito pela IETF, largamente implementado, as principais


operadoras VoIP estão usando SIP. É o protocolo padrão para a telefonia IP no
momento.

• Pontos fortes: padrão da IETF, larga adoção do mercado;


• Pontos fracos: problemas no uso do NAT, uso da banda com RTP é alto.

6.3.2. IAX2

Protocolo proprietário do Asterisk. Eficiente em banda passante e principalmente


pode passar facilmente por firewalls com NAT.
• Pontos fortes: eficiência em banda passante, segurança e facilidade com
NAT;
• Pontos fracos: proprietário, baixa adoção pelo mercado.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 78


4linux.com.br 6. Análise de rede

6.3.3. H323

Largamente usado em voz sobre ip. Essencial na conectividade com projetos mais
antigos usando roteadores Cisco ou gateways de voz. H323 ainda é padrão para
fornecedores de PABX e roteadores, muito em bora eles comecem a adotar o SIP.
Excelente para videoconferência.
• Pontos fortes: larga adoção do mercado, padronização pela ITU;
• Pontos fracos: complexo, pouco adotado em telefonia IP em detrimento ao
SIP.

6.3.4. RTP/RTCP

É um protocolo que foi desenvolvido para tornar possível o transporte de pacotes


contendo voz, vídeo ou outro tipo de mídia (informação) sobre uma rede IP. O RTCP
é um protocolo auxiliar no processo de transmissão do RTP é ele que consegue
medir o jitter e a qualidade da mídia passante.

• Pontos fortes: detecta pacotes perdidos, jitter e chegada fora de ordem;


• Pontos fracos: não garante qualidade de serviço, pois trafega sob UDP.

6.3.5. Quadro comparativo

Protocolo Mantenedor Utilização


- Troncos entre servidores Asterisk
IAX2 Digium - Terminais atrás de NAT
- Conexão com provedores de serviço
- Telefones IP
SIP IETF
- Conexão com provedores de serviço
- Telefones H323
H323 ITU-T
- Gateways H323
SCCP Cisco (Proprietário) - Telefones IP Cisco e CallManager

6.4. Definindo um CODEC


Codec's são usados para converter um sinal analógico de voz em uma versão
codificada digitalmente. Codec's variam na qualidade do som (MOS), banda
passante necessária e requisitos computacionais. Cada serviço, programa, fone ou

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 79


4linux.com.br 6. Análise de rede

gateway, tipicamente, suporta vários codec's diferentes e quando vão falar um com
outro negociam quais codec's serão empregados. Alguns codec's como o G.729
necessitam de pagamento de royalties para o seu uso. Quando dois dispositivos
conectados ao Asterisk não possuem codec's compatíveis entre si, o Asterisk
executa um processo chamado transcodificação para traduzir os codec's entre os
terminais. A tabela a seguir exibe um comparativo entre os principais codec's
utilizados no Asterisk:

G.711 G.729 G.723 GSM iLBC

Largura de Banda (Kbps) 64 8 5,3 ou 6,3 13 13,3 ou 15

Complexidade (Mips) 0,35 13 19 5 18

Resistência a perda de pacotes ——- 3% 3% 3% 5% ou 7%

MOS 4,41 4,14 3,79 3.7 4,07


Fonte: http://ensinar.wordpress.com

MOS - A qualidade de voz é medida em MOS (Mean Opinion Score, ou média dos resultados das
opiniões). Os testes para MOS seguem a norma P.800 da ITU. O MOS varia em uma escala de um
(qualidade ruim) a cinco (qualidade excelente);

Complexidade – A complexidade de um codec é medida em MIPS (milhões de instruções por


segundo). Chega a ser difícil comparar a complexidade em MIPS, pois ela é dependente de um
processador. Em muitos casos os codec's são processados em DSP’s (Digital Signal Processor),
preparados, construídos e até programados para isso, o que alivia a CPU principal do processo de
codificação e decodificação. Logo o processamento de codec's pode ser feito tanto por software
como por hardware.

6.4.1. Escolhendo um codec

Cada tipo de codec possui uma aplicação diferente, dependente do sistema,


ambiente e solução a que ele for implementado. Por isso, saber escolher pode fazer
uma grande diferença. Abaixo temos uma análise para cada tipo de rede:

• Codec's para redes locais: Em redes locais geralmente temos banda


passante em abundância, de forma que o nível de compressão tem um peso
pequeno na escolha do codec a ser utilizado. Nesse caso uma escolha
natural seria o g.711, que ocuparia cerca de 100kbps (incluindo os
cabeçalhos) para cada ligação. O codec G711 é conhecido por ulaw para
G711u e alaw para G711a que são variações do PCM equivalente ao G711;

• Codec's para redes WAN: Em uma rede WAN (Wide Area Network),

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 80


4linux.com.br 6. Análise de rede

normalmente temos uma banda passante pequena (64, 128 ou 256 Kbps)
onde podemos priorizar o tráfego de voz. Nesse tipo de redes, normalmente,
é pouco comum ocorrerem perdas de pacotes. Há três bons codec's para
esse tipo de rede: o G.729 provavelmente se destaca, pois provê uma
excelente qualidade de voz com uma compressão de 8 para 1; o G.723
permite taxas de compressão ainda maiores, mas com certa perda de
qualidade; por fim temos o GSM que é uma alternativa para aqueles que
procuram custo/benefício. O ponto negativo do GSM fica para o fato de não
ter suporte ao codec na maioria dos telefones IP’s e ATA’s;

• Codec's para Internet: Em uma rede com Internet há dois desafios: banda
passante e falta de controle do meio. Por isso temos uma latência alta e jitter
(variação da latência), que culminam com a perda de pacotes. Alguns codec's
foram desenvolvidos com esses requisitos em mente. O codec mais indicado
para esse tipo de rede é o iLBC, que tem uma boa resistência a perda de
pacotes e usa pouca banda passante. Mais informações podem ser
encontradas na tabela de codec's deste módulo.

6.4.2. Overhead, payload e cálculo de banda

Quando os dados são enviados através de uma rede orientada a pacote, cada
pacote possui uma série de cabeçalhos, os cabeçalhos contém diversas
informações importantes para o envio/recebimento destes pacotes. Porém os
cabeçalhos podem causar uma sobrecarga (overhead) dependendo da tecnologia
de enlace e protocolos envolvidos.

Payload é o tempo em milisegundos armazenados em um pacote de dados e, o


padrão na maioria dos codec's são 20ms de audio por pacote. Por exemplo, se
colocarmos 30 ou 40ms de audio em um único pacote, economizaremos banda e
consequentemente diminuiremos o overhead.

Se fizermos uma analogia simples para determinarmos o overhead de um pacote


VoIP, podemos, entre outras conclusões, determinar qual o melhor tipo de link a ser
utilizado.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 81


4linux.com.br 6. Análise de rede

Codec Link Cálculo Resultado


Ethernet Ethernet + IP + UDP + RTP + g.711 95.2 Kbps (x1.48)
G.711 PPP PPP + IP + UDP + RTP + g.711 82.4 Kbps (x1.28)
Frame Relay FR + IP + UDP + RTP + g.711 82.8 Kbps (x1.29)
Ethernet Ethernet + IP + UDP + RTP + g.729 39.2 Kbps (x4.9)
G.729 PPP PPP + IP + UDP + RTP + g.729 26.4 Kbps (x3.3)
Frame Relay FR + IP + UDP + RTP + g.729 26.8 Kbps (x3.35)

Estratégias para redução de overhead dos cabeçalhos

• Compressão do cabeçalho RTP


◦ Definida na RFC2508;
◦ Em um link Frame Relay utilizando g.729 pode-se conseguir uma redução
de 58,2% (de 26.4 Kbps para 11,2 Kbps);
◦ Não suportado pelo Asterisk – deve ser implementada fim-a-fim nos
roteadores de borda, o que acaba dificultando ainda mais sua
implementação.
• Utilização do IAX2 em modo trunked
◦ Utiliza o mesmo cabeçalho para vários pacotes de voz;
◦ Rendimentos crescentes em função do número de chamadas simultâneas;
◦ Implementado entre servidores Asterisk exclusivamente no protocolo IAX2.
• Alterar o tamanho do quadro de voz transportado
◦ Sacrifica latência para reduzir banda passante utilizada;
◦ Todos os equipamentos devem utilizar o mesmo número de frames por
pacote;
◦ Para utilizar com Asterisk:

allow=G729:40

6.5. Transcodificação de CODEC


Em algumas situações o Asterisk precisa converter os pacotes de voz de um codec
para o outro. Com isto um canal pode estar configurado em IAX2 com codec GSM e
se comunicar com outro com canal SIP e CODEC G.711. Esse processo é

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 82


4linux.com.br 6. Análise de rede

conhecido como transcodificação e consome muitos recursos de CPU.

Sempre que há conversão de pacotes de voz de um codec para o outro, inclusive


em leitura e gravação de gravações de dados, ocorre a transcodificação.

Se esse processo puder ser evitado pode-se poupar recursos de CPU e evitar a
compra de licenças G.729 desnecessárias.

6.6. Tipos de registros SIP e IAX (user, peer, friend)


Quando definimos uma conta para um cliente seja ele SIP ou IAX devemos definir
um parâmetro chamado type. Este parâmetro é muito importante pois ele determina
como o Asterisk ira tratar o método de autenticação de uma chamada entrante ou
sainte.

• USER – Usuários podem fazer chamadas através de um servidor Asterisk,


mas não podem receber chamadas do servidor. Isto é útil em uma situação
onde você pode prover alguns serviços telefônicos ao cliente, mas nunca
deve poder chamar o telefone, tal como um provedor de longa distância. Para
o Asterisk uma conta do tipo User é considerada uma conta é de ENTRADA,
ou seja o Asterisk espera que o cliente envie suas credenciais para que a
chamada seja autenticada e processada.

• PEER – Um peer é um cliente para o qual o Asterisk pode enviar as


chamadas, mas dificilmente pode receber. Isto pode ser útil para ter um
telefone que só recebe chamadas, ou encaminha chamadas a um servidor
Asterisk de uso especial como um Media Server para serviços de Correio de
Voz. Quando criamos uma conta do tipo Peer no Asterisk, esta conta é de
SAÍDA, ou seja, o Asterisk envia suas credenciais para o destino, o destino é
quem valida as credencias do Asterisk e permite ou não essa chamada. Este
é o tipo de conta padrão no uso com operadoras VoIP, pois neste modelo
quem recebe as credenciais é a operadora e não o Asterisk.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 83


4linux.com.br 6. Análise de rede

• FRIEND – Normalmente, o servidor ou dispositivo precisarão ser um “user” e


um “peer” ao mesmo tempo, neste caso, você o definiria como um “friend”,
que é um atalho para “user” mais “peer”. Um “friend” pode ambos enviar e
receber chamadas de um servidor. Quando uma conta é destinada a um
telefone, provavelmente cairá nesta categoria, assim como um servidor
remoto que precise acesso as suas extensões. Quando uma conta é definida
no tipo Friend, o Asterisk envia e recebe as credencias do dispositivo final,
para cada chamada entrante ou sainte existe um método de autenticação.

Dica: Para RAMAIS, utilize sempre o tipo FRIEND.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 84


4linux.com.br 6. Análise de rede

6.7. Laboratório – Asterisk

6.7.1. Objetivos

• Instalar e configurar o CODEC g.729 Open Source


IMPORTANTE! Este laboratório tem por finalidade ensinar o aluno a
instalar a versão OpenG729 que NÃO deve ser utilizada em ambiente
corporativo sem estar devidamente licenciado. Para o desenvolvimento de
projetos e soluções que venham a utilizar o G729 adquira de forma legalizada
no website da Digium. O custo médio é de US$ 10,00 por canal.
6.7.2. Baixando e Instalando o Codec

Antes de instalar o CODEC devemos conhecer a arquitetura do nosso servidor.


Atualmente os processadores e os sistemas operacionais tem suporte a arquitetura
X86_64 de 64bits. Porém também é comum encontrar máquinas com processadores
64 bits rodando sistema operacional 32bits (o inverso não é possível), logo se o
sistema operacional é 32bits o CODEC instalado também deve ser 32bits.

• Conhecendo a arquitetura do processador.

Para identificarmos o processador em um ambiente Linux, basta visualizar o


conteúdo do arquivo cpuinfo, através da execução do comando:

# cat /proc/cpuinfo

O resultado deverá ser algo como:

processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 42
model name : Intel(R) Core(TM) i3-2370M CPU @ 2.40GHz
stepping : 7
microcode : 0x28
cpu MHz : 2394.670
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 85


4linux.com.br 6. Análise de rede

apicid : 0
initial apicid : 0
fdiv_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep
mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse
sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs
bts xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq
dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid
sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx
lahf_lm arat epb xsaveopt pln pts dtherm tpr_shadow vnmi
flexpriority ept vpid
bogomips : 4789.34
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:

Identifique o parâmetro clflush size. No exemplo acima, o valor 64 identifica


que o processador tem arquitetura 64 bits. Este comando em servidores com
múltiplos processadores e núcleos pode ser bem extenso, observe a primeira
linha processor: 0 indicando que este bloco é referente ao primeiro núcleo do
primeiro processador.

Outra informação relevante são as flags do tipo SSSE3, SSE3 e SSE4, estas
identificam a presença de co-processadores que auxiliam no desempenho da
transcodificação.

• Identificando a arquitetura do sistema operacional (Kernel Linux)

O segundo passo é saber se o Kernel atual do sistema é 32 ou 64 bits. Isso


faz toda a diferença inclusive para o Asterisk. Vale ressaltar que Kernel 64 é o
mais indicado por questões de performance do sistema. O comando indicado
para obter esta informação é:

# uname -a

Os resultados obtidos devem ser parecidos com:

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 86


4linux.com.br 6. Análise de rede

◦ Para 32 Bits

Linux new32b 2.6.32-5-686-bigmem #1 SMP Fri May 10


09:11:45 UTC 2013 i686 GNU/Linux

◦ Para 64 bits

Linux source64 2.6.32-5-amd64 #1 SMP Mon Feb 25


00:26:11 UTC 2013 x86_64 GNU/Linux

• Identificando a versão do Asterisk.

Por último temos que identificar a versão do Asterisk instalada no sistema.


Para tal execute.

# asterisk -vvvr
*CLI> core show version

A saída deve ser algo parecido com:


Asterisk 1.8.23.0 built by root @ Centos on a x86_64 running
Linux on 2013-08-20 06:10:08 UTC

• Selecionado o download do módulo OpenG729.

Através do navegador acesso o site, http://asterisk.hosting.lv e selecione a


versão do seu Asterisk. Será apresentada uma lista com as opções para
download de codec's G722 ou G729.

Para processador 64 bits Intel e Kernel 64 utilize o seguinte módulo:

• codec_G729-ast18-icc-glibc-x86_64-pentium4.so

Para processador com arquitetura Intel 64 com flag SSE3:

◦ codec_G729-ast18-icc-glibc-x86_64-core2-sse4.so

Para arquitetura 32 bits Intel:

◦ codec_G729-ast18-icc-glibc-pentium4.so

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 87


4linux.com.br 6. Análise de rede

Algumas informações úteis sobre a nomenclatura dos arquivos:

◦ ICC – Compilador C da Intel, indicado para ambientes de produção;

◦ GCC – Compilador C GNU, é o padrão para uso com Kernel Linux;

◦ core2 – Compatível com processadores Intel multicore, incluíndo Xeon;

◦ Opterom – Processador da AMD;

◦ Athlon – Processador AMD.

• Efetuando o download do módulo G729 e instalando no Asterisk 1.8

Supondo que o seu processador é um Intel e seu sistema operacional seja


32bits, execute os seguintes passos.

# cd /usr/lib/asterisk/modules
# wget http://asterisk.hosting.lv/bin/codec_g729-ast18-icc-
glibc-pentium4.so .
# mv codec_g729-ast18-icc-glibc-pentium4.so codec_g729.so
# chmod +x codec_g729.so

• Ativando o Open G729 no Asterisk.

# asterisk -vvvr
*CLI> module load codec_g729.so
Loaded codec_G729.so
== Registered translator 'g729tolin' from format G729 to slin, cost
2000
== Registered translator 'lintoG729' from format slin to g729, cost
9000
Loaded codec_G729.so => (g729 Coder/Decoder, based on IPP)

• Validar os tempos de transcodificação para o G729

*CLI> core show translation

• Testando o G729

Edite o arquivo /etc/asterisk/sip.conf e defina na conta SIP do seu telefone IP

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 88


4linux.com.br 6. Análise de rede

somente o uso do G729, desta forma quando o telefone fizer uma chamada
para o softphone o Asterisk ira transcodificar o áudio de G711 para G729.

# nano /etc/asterisk/sip.conf
[NN00]
type=friend
host=dynamic
disallow=all
allow=g729

Após a alteração, recarregue as configurações do SIP na CLI> do Asterisk.

*CLI> sip reload

Execute uma chamada do telefone IP para o Sofphone, atenda e com a


chamada ainda em curso execute o seguinte comando para exibir
informações relevantes dos canais ativos.

*CLI> sip show channels

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 89


Módulo 7

Protocolo IAX
4linux.com.br 7. Protocolo IAX

7. Protocolo IAX

7.1. IAX – Conceitos


O IAX, acrônimo para “Inter Asterisk eXchange”, é um protocolo desenvolvido pela
Digium com o objetivo de estabelecer comunicação entre servidores Asterisk. O IAX
é um protocolo de transporte, tal como o SIP, no entanto faz uso apenas de uma
única porta UDP (4569), tanto para sinalização como para mídia (streams RTP). O
fato de utilizar apenas uma porta é uma vantagem em cenários com Firewall e/ou
NAT. IAX2 é versão 2 do IAX, já padronizado na RFC 5456.

Esse protocolo opera em modo cliente e servidor e a troca de mensagens é feita no


formato binário sendo classificadas como frames. O IAX se utiliza dos chamados Full
Frames, para transmissão de dados de sinalização, ou seja, a chamada telefônica é
estabelecida, monitorada e encerrada com a troca de Full Frames, que são enviados
de tempos em tempos. Já os chamados Mini Frames, são responsáveis pela
transmissão dos dados de mídia (voz).

O tráfego de informação do protocolo IAX também pode ser feito em modo trunk, de
tal maneira que várias chamadas podem ser agrupadas em um único conjunto de
pacotes, com um único cabeçalho IP, economizando os recursos de rede e
diminuindo o atraso dos pacotes de voz.

7.2. Características do IAX2


• Minimiza o uso de banda passante para o tráfego de ambos, media e controle
com ênfase específica em chamadas de voz individuais;
• Provê transparência à NAT (Network Address Translation);
• Tem a possibilidade de transmitir informações sobre o plano de discagem;
• Suporta a implantação eficiente de recursos de paging e intercomunicação;
• Utiliza uma única porta: UDP 4569.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 91


4linux.com.br 7. Protocolo IAX

7.3. Métodos de autenticação


O protocolo IAX2 suporta basicamente três métodos de autenticação:

• plaintext – Texto puro, esse método é o padrão e oferece pouca segurança


pelo fato da senha passar em texto puro na rede e que pode ser facilmente
identificado;

• md5 – Hash MD5 oferece uma segurança extra, ele opera de forma
semelhante ao SIP, fazendo um processo conhecido como Three-Way-
handshake;

• rsa – Par de chaves de criptografia RSA. É método mais seguro pois utiliza as
chaves para autenticação. Necessita de configuração em ambos servidores.

7.3.1. Conexões de entrada

Quando o Asterisk recebe uma conexão de entrada, a informação da chamada inicial


pode incluir um nome de usuário (do campo username) ou não. Além disso, a
conexão de entrada tem um endereço IP que o Asterisk usa para a autenticação
também.

Se o nome do usuário é fornecido, o Asterisk segue o seguinte fluxo:

1. Pesquisa o iax.conf para uma entrada “type-user” (ou “type=friend”) com a


seção nome ([username]). Se não encontra, recusa a conexão;
2. Se a entrada encontrada tem configurações do tipo “deny/allow”
(negar/permitir), compara o endereço IP do originador da chamada. Se a
conexão não for permitida, recusa a conexão;
3. Faz a checagem da senha (secret) (plaintext, md5 ou rsa). Se falhar, recusa a
conexão;
4. Aceita a conexão e envia para o originador para o contexto especificado na
configuração context= da entrada no arquivo iax.conf.

Se um nome de usuário NÃO é fornecido, o Asterisk segue o seguinte fluxo:

1. Pesquisa por um “type=user” (ou type=”friend”) no arquivo iax.conf sem uma


senha especificada e também nas restrições do tipo “deny/allow”. Se uma

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 92


4linux.com.br 7. Protocolo IAX

entrada é encontrada, aceita a conexão e usa o nome da entrada do iax.conf


como o nome do usuário;

2. Pesquisa por um “type=user” (ou type=”friend”) no iax.conf com uma senha ou


chave RSA especificada e também verifica restrições “deny/allow”. Se uma
entrada é encontrada, tenta autenticar o chamador usando a senha
especificada ou a chave, e se passar, aceita a conexão e usa o nome
encontrado no iax.conf como nome do usuário.

7.3.2. Conexões de saída

Conexões de saída podem pegar suas informações de autenticação de:

• Uma descrição do canal IAX2 passado pelo comando Dial();


• Uma entrada “type=peer ou friend” no arquivo iax.conf;
• Uma combinação dos dois.
Exemplo:

Supondo que o arquivo iax.conf contenha as seguintes informações:

[curso-out]
type=peer
username=curso_username
secret=curso_secret
host=curso.com
;
;
[iax-gateway]
type=friend
allow=192.168.0.1
context=incoming
host=192.168.0.1

Ao utilizar o comando ... A reação do Asterisk será ...


Conectar-se com host curso.com, usando o
Dial(IAX2/curso-out/1234) usuário e senha especificados no arquivo
iax.conf para autenticação.
Conectar-se com o host curso.com, mas ao
especificar user2:secret2 como nome e senha
Dial(IAX2/user2:secret2@curso-out/1234)
respectivamente, isto ira sobrescreve as
entradas no iax.conf.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 93


4linux.com.br 7. Protocolo IAX

Ao utilizar o comando ... A reação do Asterisk será ...


Conectar-se com o host curso.com, mas
nenhum nome de usuário foi especificado.
Dial(IAX2/curso.com/1234) Como nenhuma das entradas no arquivo
iax.conf bate com a descrição do canal
curso.com, a conexão é recusada.
Conectar-se com o host 192.168.0.1, sem
especificar nenhum nome, e se o host pedir
uma senha, nenhuma senha será fornecida.
Dial(IAX2/iax-gateway/5678)
Este tipo de entrada deve ser usado somente
para conexões entre hosts com alto grau de
confiança

7.4. Arquivo de configuração


O arquivo de configuração do IAX (/etc/asterisk/iax.conf) é uma coleção de seções,
cada qual representando uma entidade dentro do escopo do IAX, com exceção da
seção [general].

Na seção [general] um número de parâmetros que afetam todo o sistema pode ser
configurado. Especificamente os codec's default, portas, endereços, comportamento
do jitter, bits de TOS e registros.

7.4.1. Seção [general]

Diretiva Descrição
port = <portnum> Define a porta em que o IAX vai se ligar. O padrão é 4569.
Isto permite ligar o IAX a um endereço IP especifico e não
bindaddr = <ipaddr> a todos os endereços. O padrão é: 0.0.0.0 (todos
endereços)
A seleção de banda passante define a seleção de codec's
com valores apropriados para uma determinada banda.
high – habilita todos os codec's e é recomendado para
conexões acima de 10Mbps.
médium – elimina os codec's U-law e A-law deixando
bandwidth = [low|medium|high] apenas os codec's com 32Kbps ou menos (Com MP3 como
um caso especial). Isto pode ser usado em conexões de
banda larga se desejado.
low – elimina o ADPCM e MP3, deixando apenas o G723,
GSM e LPC10. A configuração recomendada é selecionar
“low” e depois desabilitar LPC10. O LPC10 tem a voz
robotizada.
allow/disallow=[gsm|lpc10| O "allow" e "disallow" permite fazer uma seleção criteriosa
g723.1|adpcm|ulaw|alaw|mp3|
slinear|all] de codec's.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 94


4linux.com.br 7. Protocolo IAX

Diretiva Descrição
O buffer de jitter deve sempre estar habilitado a menos que
jitterbuffer = [yes|no]
você saiba que todas as suas conexões estão na LAN.
A quantidade de drops é o número máximo de pacotes de
dropcount = <dropamount> voz que você vai permitir que sejam descartados. Valores
úteis são 3-10.
O “maxjitterbuffer” é a quantidade máxima de buffer de jitter
maxjitterbuffer = <max>
que pode ser usado.
O “maxexcessbuffer” é a quantidade máxima de excesso no
maxexcessbuffer = <max> buffer de jitter que é permitido antes que o buffer de jitter
seja lentamente comprimido para eliminar a latência.
Configura o código de contabilização para registros
accountcode = <code> recebidos com o IAX. O código de contabilização pode
sobrescrever a base por usuário para chamadas entrantes.
Controla como o registro é etiquetado:
omit – faz com que nenhum registro seja escrito;
amaflags = [default|omit|
billing|documentation] billing e documentation – etiquetam os registros como
registros para cobrança e documentação respectivamente;
default – seleciona o default do sistema.
O IAX pode opcionalmente configurar o bit TOS (Type of
Service) do cabeçalho IP. Isto ajuda a performance no
tos=[lowdelay|throughput|
reliability|mincost|none] roteamento. O valor recomendado é “lowdelay”, que muitos
roteadores vão reconhecer e dar prioridade melhorando a
qualidade da voz.
O registro permite notificar um servidor Asterisk remoto
(com um endereço fixo) qual seu endereço atual. Para que
o registro funcione, o Asterisk remoto vai precisar ter uma
entrada com o mesmo nome to tipo “dynamic peer” (e
senha (secret) se fornecido). O nome é um campo
obrigatório e é o nome do “peer” remoto a quem nós
register=><name>[:<secret>]@<
host>[:port]: desejamos nos identificar. Entretanto se em colchetes ( [ ] )
então é interpretado como o nome de uma chave RSA a ser
usada. Neste caso o Asterisk deve ter a chave privada e o
servidor remoto terá a correspondente chave pública
(/var/lib/asterisk/keys/<name>.key). O campo "host" é
obrigatório e é o nome do host ou endereço IP do servidor
Asterisk remoto. A especificação da porta é opcional.

7.4.2. Clientes IAX

Diretiva Descrição
[identifier] A seção inicia com um identificador em colchetes ( [ ] ). O
identificador deve ser uma string alfanumérica.
type=[user|peer| Esta linha diz ao asterisk como interpretar esta entidade. Usuários
friend] são dispositivos que se conectam a nós, enquanto “peers” são
pessoas às quais nos conectamos, e “friend” é um atalho para criar
um “user” e um “peer” com informações idênticas.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 95


4linux.com.br 7. Protocolo IAX

Campos do tipo “User”

Diretiva Descrição
Uma ou mais linhas de contexto podem ser especificadas
pelo usuário, deste modo dando ao usuário a possibilidade de
context = <context>
colocar as chamadas em dados contextos. A maioria dos
usuários usa o contexto “default”.
As regras de permitir e negar podem ser aplicadas a
usuários, permitindo a eles se conectar de determinados
endereços IP e não de outros. As regras são interpretadas na
seqüência e são todas avaliadas em um dado endereço IP,
permit = <ipaddr>/<netmask> com o resultado final sendo a decisão Por exemplo:
deny = <ipaddr>/<netmask> permit=0.0.0.0/0.0.0.0
deny=192.168.0.0/255.255.255.0
Esta combinação ira negar qualquer um em 192.168.0.0 com
mascara de 24 bits (classe C).
Você pode sobrescrever o identificador de chamada passado
pelo usuário para você (Se ele escolher enviar) de maneira
callerid = <callerid>
que ele sempre esteja correto do ponto de vista do seu
servidor.
Você pode selecionar que métodos de autenticação são
auth = [md5|plaintext|rsa] permitidos. Múltiplos métodos podem ser especificados,
separado por vírgulas.
A linha “secret” especifica a senha compartilhada para os
secret = <secret>
métodos md5 ou autenticação em texto simples.
A linha "inkeys" especifica que chaves nós podemos usar
para autenticar um “peer” remoto. Os arquivos de chave
inkeys = key1[:key2...]
ficam em /var/lib/asterisk/keys/<name>.pub e são chaves
públicas.

7.5. Cenários de uso

7.5.1. Cliente IAX

O Asterisk suporta telefones IP baseados em IAX como o SNOM e o AIXy e também


softphones como o Firefly e Gnophone. Para configurar um telefone IAX basta
configurar o arquivo iax.conf e o próprio telefone. Exemplo de configuração de um
telefone IAX:

[8035]
type=friend
context=default
auth=md5
secret=senha

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 96


4linux.com.br 7. Protocolo IAX

notransfer=0
callerid=8035
host=dynamic
allow=gsm

7.5.2. Provedor IAX

Neste cenário, é feita a conexão a um provedor de telefonia IAX como a Brasil Vox
Telecom (http://www.brasilvox.com.br).

O site http://www.voipcharges.com/providers.php dispõe de uma lista de provedores


SIP/IAX pelo mundo.

7.5.3. Entroncamento IAX

Cenário onde dois servidores Asterisk estão ligados usando o protocolo IAX2.
Existem diversas maneiras de fazer esta conexão, sendo a mestre-escravo a mais
conhecida.

Porém, se você está em uma rede confiável, pode abstrair diversas diretivas da
configuração do arquivo iax.conf. O exemplo a seguir mostra como conectar dois
Asterisk de maneira muito simples, utilizando o protocolo IAX. Note que a única
diferença reside no número IP, um apontando para o outro.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 97


4linux.com.br 7. Protocolo IAX

Matriz (Ip: 200.2.2.2) Filial (Ip: 200.1.1.1)


[MatrizFilial] [MatrizFilial]
type=friend type=friend
auth=md5 auth=md5
username=MatrizFilial username=MatrizFilial
secret=MatrizFilial secret=MatrizFilial
context=default context=default
host=200.1.1.1 host=200.2.2.2
qualify=yes qualify=yes
disallow=all disallow=all
allow=alaw,ulaw,gsm,G729 allow=alaw,ulaw,gsm,G729
trunk=yes trunk=yes

7.6. Comandos da *CLI>


Comando Finalidade
iax2 show netstats Exibe estatísticas sobre os pacotes IAX
Exibe uma lista de todos os “peers” IAX2 configurados no sistema
iax2 show peers
(troncos e ramais)
iax2 show channels Exibe uma lista de todos os “canais” IAX2 no servidor
iax2 show registry Exibe todos os registros feitos pelo servidor
iax2 set debug Ativa o LOG dos pacotes IAX na *CLI> do Asterisk

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 98


4linux.com.br 7. Protocolo IAX

7.7. Laboratório – Asterisk

7.7.1. Interligando o PABX das filiais usando troncos IAX

O objetivo de exercício é permitir que cada filial possa ligar para as outras por
intermédio de uma conexão IAX2 Trunk.

• Movendo o arquivo iax.conf para iax.conf.old

# cd /etc/asterisk
# mv iax.conf iax.conf.old

• Criando um novo arquivo iax.conf: Pode-se utilizar qualquer editor de


arquivos para esta tarefa, como: gedit :: nano :: pico :: mcedit :: vim. O nano é
o ideal para quem não tem experiência com Linux.

# nano /etc/asterisk/iax.conf

• Criando as contas para as outras filiais no seu iax.conf: Crie uma conta
IAX para cada uma das filiais conforme o modelo. Não é necessário criar uma
conta para a sua filial. Esta conta é utilizada para autenticar a chamada
entrante vinda das outras equipes. Ajuste o modelo abaixo de acordo com as
instruções passadas:

[general]
bindport=4569
bindaddr=0.0.0.0
disallow=all
allow=ulaw,alaw,g729
;
; Primeira filial
;
[filial-NN]
host=IP_Filial-NN
type=user
context=from-filiais
secret=filial-NN

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 99


4linux.com.br 7. Protocolo IAX

trunk=yes
;
; Segunda Filial
;
[filial-NN]
host=IP_Filial-NN
type=user
context=from-filiais
secret=filial-NN
trunk=yes

Obs: Onde NN = Número da Filial

• Crie uma extensão no plano de discagem para cada ligar para outras
filiais: Edite o arquivo /etc/asterisk/extensions.conf e crie uma extensão
para cada uma das equipes.

[interno]
;Filial-01
exten=>_100X,1,Dial(IAX2/filial-FF:filial-FF@IPdafilial-01/$
{EXTEN},60,tT)
..
;Filial-02
exten=>_110X,1,Dial(IAX2/filial-FF:filial-FF@IPdafilial-02/$
{EXTEN},60,tT)
;
;
[from-filiais]
;regra de entrada das chamadas vindas das outras filiais
exten => _XXXX,1,Goto(interno,${EXTEN},1)

FF = Número da minha Filial.

Obs.: Digite dialplan reload na *CLI> do Asterisk para ativar as alterações.

*CLI> iax2 reload


*CLI> dialplan reload
*CLI> iax2 show peers

Disque para os ramais das outras filiais para testar as configurações.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 100


4linux.com.br 7. Protocolo IAX

7.8. Laboratório – SNEP


No menu Cadastros >> Troncos, crie um tronco do tipo “SNEP IAX2” com outra
filial.

Lembre-se que para a comunicação entre você e a filial, ambos devem ter um tronco
entre si.

Atente para as seguintes informações:

• Identificador – uma expressão alfanumérica que deve ser a mesma em


ambos.

• Host remoto – IP da filial.

7.8.1. Conectando com o Asterisk

No arquivo /etc/asterisk/sip.conf, inclua, dentro da seção [general], a seguinte linha:

#include snep/snep-iax2-trunks.conf

Ainda no arquivo /etc/asterisk/sip.conf, no final, inclua a seguinte linha:

#include snep/snep-iax.conf

Para que o Asterisk reconheça estas alterações, na CLI>, digite:

*CLI> iax2 reload

Verifique no menu Status >> Ramais, Troncos Ip, Filas, na seção Troncos IAX, se
o servidor registrou corretamente.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 101


Módulo 8

Protocolo SIP
4linux.com.br 8. Protocolo SIP

8. Protocolo SIP

8.1. SIP – Conceitos


O protocolo SIP (Session Initiation Protocol) foi projetado para funcionar sobre a
camada de aplicação do modelo OSI. Sua principal função é estabelecer chamadas
e conferência através de redes IP, sem considerar o tipo de mídia a ser transferida.
Esse protocolo é um padrão do IETF (Internet Engineering Task Force) e sua última
versão, a SIPv2 foi publicada em 2002 sob a RFC 3261.

O protocolo SIP pertence ao grupo dos protocolos de sinalização fim-a-fim baseado


em texto, o qual sinaliza o início, a modificação e o encerramento das sessões. As
sessões se baseiam no modelo cliente-servidor e independem do tipo de dado
trafegado dentro do canal estabelecido. Os protocolos de sinalização para VoIP,
como o SIP, devem contemplar a codificação de voz, a configuração das chamadas,
o transporte de dados, o modo de autenticação, os requisitos e as tecnologias de
segurança, as primitivas de comunicação, o formato do cabeçalho e do
endereçamento e a sintaxe das mensagens.

As funções básicas do protocolo SIP são:

• possui mecanismos para permitir que dois interlocutores estabeleçam


chamadas através de uma rede IP. Através do SIP, o emissor avisa ao
receptor que deseja iniciar a sessão, ambos acordam a codificação de mídia
e podem encerrar a sessão;
• permite que o emissor determine o IP corrente do receptor, pois este pode
estar em uma rede com DHCP ou mesmo utilizar vários dispositivos SIP ao
mesmo tempo;
• contêm mecanismos que gerenciam as chamadas sem que seja necessário
reiniciá-la, como adição de novas mídias, mudanças de codificação, adição
de outros participantes, transferência de chamadas e chamada em espera.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 103


4linux.com.br 8. Protocolo SIP

8.2. Características do SIP


O protocolo SIP foca na simplicidade e, uma vez que é apenas um mecanismo de
controle da sessão, apenas inicia, modifica e termina uma sessão de comunicação,
não intervindo nos dados trafegados, o que torna o protocolo facilmente adaptável
às mais diversas arquiteturas.

8.2.1. Arquitetura

A arquitetura do SIP é composta de quatro elementos básicos, que juntos, formam


uma rede SIP:

• Agente de Usuário
◦ Função: Interagir com o usuário do sistema SIP;
◦ Características: Envia e recebe requisições SIP;
◦ Papel: Pode atuar como cliente (UAC – Agente Utilizador Cliente) ou
servidor (UAS – Agente Utilizador Servidor).

• Proxy SIP
◦ Função: Recebe as requisições e as encaminha para servidores mais
próximos do destino;
◦ Papel: Servidor intermediário. Atua como cliente e servidor;
◦ Tipo: Stateful Proxy Server e Stateless Proxy Server:
▪ O Stateful Proxy Server mantém o estado da chamada e permite dividir
a chamada, criando uma árvore de busca pelo usuário nos múltiplos
servidores. Vantagens: maior confiabilidade, capacidade de mensurar o
gasto do cliente, utiliza o protocolo TCP;
▪ O Stateless Proxy Server encaminha para os próximos saltos tanto as
requisições com as respostas e não mantêm o estado das conexões.
Vantagem: maior velocidade.

• Servidor de Redirecionamento
◦ Função: Responde uma requisição do Agente do Usuário com o nome e a
localização do usuário;
◦ Características: Não reencaminha pedidos.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 104


4linux.com.br 8. Protocolo SIP

• Servidor de Registro
◦ Função: Serviço de localização;
◦ Características: Armazena registro sobre usuários.

8.2.2. Estrutura da mensagem

As mensagens do protocolo SIP se assemelham com as mensagens do protocolo


HTTP. Possuem o formato header:field, onde header representa o campo do
cabeçalho da mensagem e field representa a informação contida neste campo do
cabeçalho. O SIP utiliza a regra de ignorar os campos de cabeçalhos que não
puderam ser entendidos pelo servidor. Abaixo podemos ver uma estrutura básica do
cabeçalho SIP. As informações foram retiradas da RFC 3261, que especifica o
protocolo SIP.

Uma requisição SIP válida deve conter ao menos os campos To, From, CSeq, Call-
ID e Max-Forwards, os quais são todos obrigatórios em todas as mensagens SIP.
Outros campos podem se juntar a esses.

8.2.3. Comunicação

O protocolo SIP utiliza o modelo cliente-servidor para comunicação entre as


entidades envolvidas no protocolo. Na sua versão 2 (RFC 3261), possui seis
primitivas de comunicação:

• Invite – Solicita o início de uma sessão. Nessa mensagem, podem-se


determinar, através do protocolo de descrição da sessão (SDP, do inglês), os
parâmetros da sessão. Caso esta primitiva seja enviada depois da sessão
iniciada, ela é utilizada para alterar os parâmetros da sessão e é conhecida
como Re-Invite;
• Ack – É a confirmação de uma mensagem de Invite. O Ack deve conter a
configuração dos parâmetros da sessão, caso o Invite correspondente não
possua;
• Cancel – É usada para cancelar todas as primitivas já enviadas que carecem
de resposta;
• Options – Requisita ao receptor uma listagem com as suas capacidades, tais

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 105


4linux.com.br 8. Protocolo SIP

como primitivas, codec's e extensões suportadas, e a sua disponibilidade;


• Register – É utilizada por um cliente que deseja registrar um apelido (alaias)
de seu endereço em um servidor SIP;
• Bye – É utilizada para terminar a sessão.

As respostas a mensagens do SIP são em formato texto como no protocolo http.


Aqui estão as respostas mais importantes.

• 1XX – mensagens de informação (100–tentando, 180–campainha,183–


progresso);
• 2XX – pedido completado com sucesso (200 – OK);
• 3XX – encaminhamento de chamada, o pedido deve ser direcionado para
outro lugar. (302 – temporariamente movido, 305 – use proxy);
• 4XX – erro (403 – Proibido);
• 5XX – erro de servidor (500 – Erro interno do servidor, 501 – Não
implementado);
• 6XX – falha global (606 – Não aceitável).

8.2.4. Autenticação

Podemos dividir a autenticação no SIP em dois grupos: Entre dois UA ou entre um


UA e um servidor. Os agentes de usuários devem se autenticar no início da sessão a
fim de garantir que o interlocutor é realmente quem diz ser. Os servidores podem
exigir uma autenticação do emissor antes de redirecionar uma chamada para o
agente de usuário receptor.
A autenticação pode ser feita baseando-se no HTTP Digest ou utilizando criptografia
e troca de certificados.
Na Figura a seguir, podemos observar o processo de autenticação utilizando HTTP
Digest em um servidor proxy (a) e em um servidor de registro (b).

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 106


4linux.com.br 8. Protocolo SIP

Na autenticação do usuário no servidor de proxy, o agente de usuário envia a


requisição de começo de sessão. O servidor proxy recusa o pedido, com uma
resposta de erro 407, avisando que requer autenticação e faz um desafio para o
usuário. Este apresenta as suas credenciais de acesso no campo Authorization do
cabeçalho da mensagem SIP, a qual possui mesmo Call-Id da mensagem recusada
e CSeq incrementado de uma unidade. Se o usuário enviar as credenciais
corretamente, o servidor proxy aceita a requisição e continua com os procedimentos
de início da sessão.
No HTTP Digest, utiliza-se nome de usuário e senha para credenciar o usuário ao
serviço, contudo este método não garante a segurança, pois as credencias são
transmitidas em claro. O HTTP Digest deve ser utilizado com TLS (Transport Layer
Security) ou com S/MIME (Secure / Multipurpose Internet Mail Extensions) para
prover segurança na autenticação SIP. Para autenticar duas entidades SIP, o TLS é
eficiente, mas para a autenticação de mais de duas entidades, o S/MIME se torna
mais indicado.

8.2.5. Endereços SIP

Um endereço SIP tradicional é disposto na forma sip:usuario@IP_servidor, como


por exemplo: sip:pisa@146.164.69.183. Contudo, esta estrutura de endereçamento
é de difícil memorização. Assim, foi criado um mecanismo de endereçamento que se
assemelha aos endereços de e-mail, como em sip:pisa@sip.gta.ufrj.br, ou que

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 107


4linux.com.br 8. Protocolo SIP

seja simplesmente o nome próprio do usuário, desde que único.


Utilizando este mecanismo de endereçamento, o servidor SIP pode encaminhar a
chamada para o dispositivo que o usuário esteja usando no momento, desde um
computador a um aparelho celular.
Se o usuário possuir uma página pessoal e deseje divulgar seu endereço SIP para
seus visitantes, basta que ele coloque o endereço na página, da mesma forma que é
feito para e- mail (método não aconselhável, pois pode causar o recebimento de
SPAMs). O usuário só precisa adicionar a URL 'sip:usuario@dominio.com' e quando
o visitante acessar a página e clicar nesta URL, o aplicativo SIP instalado na
máquina é ativado e faz a chamada para o usuário que publicou seu endereço.

8.3. Fluxo de mensagens


Nesta sessão examinaremos um exemplo concreto de comunicação utilizando o
protocolo SIP. No exemplo a seguir, Alice deseja chamar Bob. Ambos estão
utilizando computadores com aplicativos baseados no protocolo SIP, instalados para
fazer e receber chamadas telefônicas. Admitamos que Alice saiba o endereço IP de
Bob.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 108


4linux.com.br 8. Protocolo SIP

• Na figura acima, podemos observar que a sessão SIP é iniciada quando Alice
envia uma mensagem INVITE para Bob, por UDP na porta 5060. A porta 5060
é a porta padrão do protocolo SIP e este também pode receber mensagens
por TCP. Nesta mensagem, estão contidos um identificador para Bob, o
endereço de Alice, o tipo de dado que Alice deseja receber: áudio em
codificação AVP 0 (PCM codificado com lei µ), o protocolo de transporte RTP
e a porta que ela receberá os pacotes: 25012;
• Ao receber esta mensagem de Alice, a campainha de Bob toca;
• Ao atender, Bob envia uma resposta com o código 200 OK para Alice na porta
5060. Nesta mensagem de Bob, constam o seu endereço IP, a porta em que
deseja receber os pacotes de áudio utilizando o protocolo de transporte RTP:
43569, e a codificação de áudio que deseja receber os dados: AVP 3
(codificação GSM);
• Após receber a resposta de Bob, Alice envia uma mensagem com a primitiva
ACK, confirmando que a comunicação foi estabelecida com sucesso.
Observe que, neste exemplo, ambos os usuários utilizaram codificadores de
voz diferentes, pois o SIP não determina o tipo da mídia que será transmitida
durante a sessão. Alice deverá codificar seu áudio com GSM e Bob com a lei
µ do PCM.

• Depois de estabelecida a sessão, utilizando a porta 5060, ambos transmitirão


os pacotes de dados para a porta especificada. Bob deve enviar os pacotes
de áudio para a porta 25012 do IP 146.164.69.183. Alice deve enviar os
pacotes de áudio para a porta 43569 do IP 146.164.69.190;

• Após o fim da transmissão, Bob aciona o seu aplicativo SIP para terminar a
sessão. Então o agente de usuário de Bob envia uma mensagem com a
primitiva BYE para Alice.

• Esta envia uma mensagem de resposta 200 OK, confirmando o término da


sessão. A sessão é então encerrada em ambos os agentes de usuário.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 109


4linux.com.br 8. Protocolo SIP

8.4. Diferença entre B2BUA e SIPProxy


A principal característica que diferencia um B2BUA (back-to-back user agent) de um
SIP Proxy é que o SIP Proxy é mais rápido pois não realiza conversão de codec's e
tratamento de mídias, apenas lida com a sinalização SIP. Já os B2BUA são mais
lentos, mas conseguem realizar todo um controle de mídia, conversão de codec's, e
oferecer outros recursos como URA(Unidade de resposta audível), TTS (Conversão
de texto para voz), entre outros.

Com relação ao balanceamento de carga, o SIP Proxy consegue realizar um melhor


gerenciamento, através de algoritmos específicos com hash, com propriedades
como call-id e username. Mensagens de redirecionamento são utilizadas com baixo
consumo de processamento da máquina e também tem tolerância de falhas. No
B2BUA estes recursos não são encontrados.

O SIP Proxy abre a possibilidade de gerenciar toda a sinalização de protocolos SIP,


ou seja, em um ambiente com implementação de fabricantes diferentes é possível
visualizar todo o tráfego SIP e analisar exatamente a troca de informação entre eles.

Outra questão é o suporte a protocolos LDAP, Radius e Diameter que no SIP Proxy
já são nativos, e no B2BUA não, mas também são possíveis.

Em um ambiente de clientes atrás de NAT, o SIP Proxy consegue um desempenho


superior ao B2BUA. Permitindo por exemplo, que você envie áudio ou vídeo
diretamente entre dois clientes atrás de NAT.

Ainda na comunicação em rede pública, o SIP Proxy sempre vai precisar de um


gateway. O B2BUA, nesse caso integrado com o SIPProxy, pode resolver este
problema.

Abaixo uma tabela comparativa resumindo as características de cada uma destas


plataformas.

B2BUA SipProxy
O Asterisk é um B2BUA O Openser é um SIPProxy
Não trabalha tão bem com clientes NAT Gerencia melhor clientes que utilizam NAT
Gerencia tradução de CODEC's, protocolos, Arquitetura mais rápida

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 110


4linux.com.br 8. Protocolo SIP

B2BUA SipProxy
serviços de URA e outros
Possui serviços de mídia, como áudio, vídeo, É melhor para escalabilidade e balanceamento
correio e reconhecimento de voz de carga
Utilizado para comunicação com a rede pública Gerencia toda a sinalização SIP

8.5. Modos de Operação

8.5.1. Proxy

No diagrama SIP abaixo podemos observar o funcionamento de uma ligação VOIP


entre dois ramais cadastrados no mesmo servidor SIP:

Neste exemplo de chamada usando o protocolo SIP é possível observar facilmente


as mensagens trocadas para estabelecer a chamada. Abaixo o passo a passo do
diagrama:

1. O usuário Lucien discou para o usuário Carlos, neste momento o ramal do


Lucien encaminhou o INVITE para o servidor.sip (servidor em que está

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 111


4linux.com.br 8. Protocolo SIP

registrado);
2. O servidor encaminhou o INVITE para o ramal do usuário Carlos que está
registrado no mesmo servidor (ligação interna), e respondeu ao Lucien “100
Trying” informando que está tentando efetuar a ligação;
3. O ramal do Carlos quando recebe a solicitação da chamada envia o “180
Ringing” para o servidor, informando que recebeu o INVITE e está chamando;
4. O servidor repassa para o ramal do Lucien a mensagem informando que o
telefone está chamando;
5. O Carlos atende o telefone, neste momento o ramal dele envia “200 OK”
informando que o telefone foi atendido e já é possível estabelecer o fluxo de
mídia;
6. O servidor repassa o “200 OK” para o ramal originador da chamada (Lucien)
que responde com “ACK” (Acknowledge) confirmando que recebeu o “200
OK”;
7. O servidor repassa o “ACK” para o ramal do Carlos que ao receber a
confirmação abre a sessão de mídia diretamente entre os dois ramais, dando
inicio a conversação entre os dois usuários;
8. O usuário Carlos encerra a chamada, nesse momento o ramal envia a
mensagem de BYE, informando o sinal de desligamento;
9. O servidor repassa o BYE para o ramal do Lucien, que responde com 200 Ok,
confirmando o encerramento da chamada.

Através desta mesma imagem podemos fazer algumas observações:

• Sempre que o ramal destino estiver disponível e receber a requisição de


chamada (INVITE) ele retorna o Ring (180 Ringing) informando que está
chamando. Caso este ramal esteja ocupado, não esteja registrado ou por
algum outro motivo não possa atender ele ira retornar um código de erro;
• O fato de a mídia estar passando diretamente de um ramal para o outro
(ponto-a-ponto), é um forte indicativo do Servidor SIP estar atuando como um
SIP Proxy;
• Em uma chamada com o áudio passando ponto-a-ponto o servidor não tem
como fazer controle de mídia ou gravar as chamadas, porém o consumo de
banda é muito menor, afinal só trafegam os pacotes Sip (puramente texto)

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 112


4linux.com.br 8. Protocolo SIP

para o controle da chamada no servidor SIP;


• No caso de haver algum problema no envio do encerramento da chamada
(BYE) geralmente ocorrem as “chamadas presas”, que continuam ativas por
não terem recebido o sinal de desligamento.

8.5.2. Redirect

No modo Redirect Server, ao receber uma requisição de nova chamada de um


usuário do cadastrado, o servidor SIP faz o processamento desta requisição e
identifica o endereço do usuário chamado (destino). Porém, neste caso, o servidor
não encaminha a requisição para a terminação de destino, ele informa ao usuário
que gerou a requisição qual é o endereço desta terminação, ou seja, o usuário
pergunta ao servidor SIP em qual endereço está o destino, semelhante ao
funcionamento de um servidor DNS. A imagem a seguir ilustra o funcionamento do
Redirect Server.

Neste exemplo de fluxo de chamadas, é possível perceber claramente que a forma


de comunicação entre o usuário Carlos e o servidor SIP está diferente do outro
modo de operação do servidor. Abaixo explicaremos a comunicação dessa chamada

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 113


4linux.com.br 8. Protocolo SIP

VOIP passo-a-passo.

1. O usuário Carlos discou para o usuário Lucien, encaminhando o invite para o


servidor SIP responsável;
2. O servidor recebeu a requisição do usuário Carlos e enviou uma mensagem
100 Trying para avisar ao usuário que ele recebeu e está processando a
requisição;
3. Após fazer o processamento e determinar em qual endereço o usuário Lucien
está localizado, o servidor responde ao usuário Carlos com uma mensagem
do tipo SIP Redirect, 302 Moved Temporaly (Movido Temporariamente), com
as informações de localização do usuário Lucien. Note que é neste ponto
onde efetivamente é feito o redirecionamento;
4. O usuário Carlos confirma o recebimento da informação enviando um ACK
para o servidor;
5. Neste momento, o usuário Carlos já possui as informações de localização do
usuário Lucien, então ele pode convidar o usuário Lucien para iniciar uma
chamada diretamente (ponto-a-ponto). Deste modo ele envia um INVITE
diretamente ao usuário Lucien, tentando estabelecer uma chamada VOIP;
6. Como padrão, o usuário Lucien responde ao usuário Carlos com uma
mensagem de 100 Trying para informar que recebeu a requisição e está
processando a requisição;
7. Em seguida é enviada uma mensagem de 180 Ringing para o usuário Carlos,
avisando que o telefone está chamando. Neste ponto é acionado o tom de
chamando no telefone do usuário Carlos;
8. Quando o usuário Lucien atende a chamada (tira o telefone do gancho), é
enviada uma resposta 200 OK, confirmando o atendimento da chamada;
9. Após confirmação de atendimento, o usuário Carlos envia uma mensagem
ACK confirmando o recebimento da sinalização de atendimento;
10. Após a conclusão do atendimento, os canais de áudio são estabelecidos.
Note que em uma conversa VoIP com protocolo SIP, são abertos dois canais
de áudio distintos, um transportando a fala de cada usuário, e utilizando um
protocolo diferente, o RTP;
11. O usuário Carlos encerra a chamada (desligando o telefone) e o usuário

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 114


4linux.com.br 8. Protocolo SIP

Lucien é informado do encerramento com uma mensagem do tipo BYE;


12. O usuário Lucien confirma a recepção da mensagem BYE e envia um 200 OK
confirmando a conclusão da chamada.

Um fato importante deste modo de operação é que o servidor SIP só está presente
no início da chamada VOIP, no momento em que o usuário Carlos faz a primeira
requisição. Logo, neste modo, não é possível estabelecer nenhum controle sobre a
chamada, como tarifação por exemplo, em contra-partida o consumo de recursos
computacionais do servidor é extremamente baixo.

8.6. SIP no Asterisk


É importante ressaltar que o Asterisk não é nem um SIP Proxy nem um SIP
Redirector. O Asterisk é um Media Gateway. Em sua arquitetura, o Asterisk é
descrito como um B2BUA (back-to-back user agent). Em outras palavras ele conecta
dois canais SIP como se fossem canais de um PABX.

8.6.1. Nomenclatura dos canais SIP

O formato do nome de um canal SIP usado para uma conexão de saída é:

SIP/[exten@]peer[:portno]

onde:
• exten – Se definido, então o Asterisk ira requisitar ao “peer” que se conecte à
extensão “exten”;
• peer – O nome do peer ao qual se conectar, podendo ser:
◦ Um “peer” ou “friend” definido em sip.conf;
◦ Um endereço IP;
◦ Um nome de domínio. Para nomes de domínio o Asterisk ira primeiro olhar
no registro DNS SRV para aquele domínio.
• portno – A porta UDP a ser usada. Se omitido o Asterisk ira utilizar a 5060.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 115


4linux.com.br 8. Protocolo SIP

Exemplos:
exten=>s,1,Dial(SIP/ipphone)
exten=>s,1,Dial(SIP/curso@4linux.com.br)
exten=>s,1,Dial(SIP/192.168.1.8:5060,20)
exten=>s,1,Dial(SIP/8500@sip.com:9876)

8.6.2. Arquivo de configuração

O arquivo de configuração do SIP (/etc/asterisk/sip.conf) é uma coleção de seções,


cada qual representando uma entidade dentro do escopo do SIP, com exceção da
seção [general].

Na seção [general] um número de parâmetros que afetam todo o sistema pode ser
configurado. Especificamente os codec's default, portas, endereços, comportamento
do jitter, bits de TOS e registros. A seção [general] do sip.conf inclui as seguintes
diretivas:

Diretiva Significado
Permite codec's na ordem de preferência (use DISALLOW=ALL
allow = <codec>
primeiro, antes de permitir outros codec's)
disallow = all Desabilita todos os codec's (configuração global)
Se configurado, qualquer um estará apto a se logar como um
autocreatepeer = yes|no peer (Sem checagem de credenciais, útil para operar com o
SER).
bindaddr = 0.0.0.0 Endereço IP onde o serviço está instalado
canreinvite = update|yes|no (configuração global)
Contexto default para a entradas de chamadas em
context = default
extensions.conf.
defaultexpirey = 120 Tempo padrão do registro de entrada e a saída.
Endereço IP que será colocado em mensagens SIP, se o
externip = 200.180.4.110
Asterisk estiver atrás de um dispositivo NAT.
localnet =
10.10.1.0/255.255.255.0 endereço local e máscara de rede

Configura o “from” padrão como domínio nas mensagens SIP


fromdomain = <domain>
quando atuando como um cliente SIP
maxexpirey = 3600 Tempo máximo de registro que será permitido (em segundos)
nat = yes|no Configuração global
Permite sobrescrever o mime-type (mime = multipurpose internet
notifymimetype=text/plain mail extensions) no campo MWI NOTIFY usado nas mensagens
on-line do voice-mail.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 116


4linux.com.br 8. Protocolo SIP

Diretiva Significado
Habilita a checagem dos cabeçalhos identificadores de
pedantic= yes|no chamada, cabeçalhos SIP com múltiplas linhas e cabeçalhos
codificados em URI (uniform resource identifier), to-tag, from-tag.
port=<portno> Porta TCP a qual se ligar
register => <username>@<sip
client/peer_id_in_sip.conf>/<e Registra com um provedor SIP
xtension>
srvlookup = yes|no Habilita DNS SRV lookups em chamadas
tos=<valor> lowdelay|
throughput|reliability mincost
|none Seta o campo tipo de serviço nos pacotes SIP.
(valores núméricos também são
aceitos, como tos=184)
videosupport=yes|no Liga o suporte para vídeo no SIP
Permite que o cabeçalho SIP “User-Agent” possa ser
useragent
customizado.
trustpid = yes|no Se é possível confiar na identificação da parte remota
Muda a forma de autenticação do Asterisk(default) para sua
realm = meu realm
própria.

8.6.3. Clientes SIP

Diretiva Significado
[identifier] A seção inicia com um identificador em chaves ([]’s). O identificador
deve ser uma string alfanumérica.
type=[user|peer| Esta linha diz ao asterisk como interpretar esta entidade. Usuários
friend] são dispositivos que se conectam a nós, enquanto “peers” são
pessoas às quais nos conectamos, e “friend” é um atalho para criar
um “user” e um “peer” com informações idênticas.
accountcode Usuários podem estar associados a um código de contabilização.
amaflags=default|omit| Categorização de registros CDR (CDR – Registro detalhado de
billing|documentation chamadas usado na bilhetagem).

callgroup
canreinvite Se o cliente é capaz de suportar SIP reinvites
context Contexto no plano de discagem para as chamadas de saída deste
cliente.
defaultip Endereço Ip default deste cliente, se especificado
host=“dynamic” Usado se o cliente não registrou em qualquer outro endereço IP
dtmfmode Como o cliente gerencia a sinalização DTMF
fromuser Especifica o usuário para colocar no “from” ao invés do callerid
(sobrescreve o callerid) quando colocando chamadas para outro peer
(outro SIP proxy).

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 117


4linux.com.br 8. Protocolo SIP

Diretiva Significado
fromdomain=<domain> Configura o domínio default “from:” nas mensagens SIP quando
colocando chamadas para um “peer”.
host= Como encontrar o cliente: IP ou nome do host. Se você quiser que o
telefone se registre, use a palavra dynamic ao invés do IP do host.
incominglimit e Limita o número de chamadas ativas simultâneas para um cliente
outgoinglimit SIP.
insecure Não verifica o ip do host e a porta para o peer (não usuário).
language O código de linguagem definido em indications.conf – Define a
linguagem para os “prompts” e sinais locais de telefonia.
mailbox Extensão da caixa postal de e-mail (Para indicações de espera de
mensagens)
md5secret Hash MD5 de “<usuário>:asterisk:<secret>” (pode ser usado ao invés
de secret).
nat =yes|no Esta variável muda o comportamento do Asterisk para cliente atrás
de um firewall. Isto não resolve o problema se o Asterisk estiver atrás
de um Firewall e o cliente fora.
permit,deny,mask Endereço IP e restrição de rede
pickupgroup Grupo que pode capturar as chamadas de colegas usando *8 e a
aplicação pickup() na extensão *8
port Porta SIP do cliente
qualify=yes|no Verifica se o cliente está alcançável ou não
restrictid=yes|no Para ter o callerid restrito -> Enviando como ANI;use isto para ocultar
o callerid
rtptimeout Termina as chamadas se não houver atividade RTP por x segundos,
quando não estiver em espera (hold)
rtpholdtimeout Termina a chamada se não houver atividade RTP quando em espera
(hold) (deve ser maior que o rtptimeout)
type=peer|user|friend Relacionamento com o cliente (provedor de saída ou full client)
secret Se o Asterisk estiver agindo como um servidor SIP, então este cliente
SIP deve logar com esta senha.Se o Asterisk estiver agindo como S
IP Client para um servidor SIP remoto que requer autenticação do
tipo SIP INVITE, então este campo é usado para autenticar os SIP
INVITEs que o Asterisk envia para o servidor remoto
username Nome do usuário usado no SIP INVITE
allow-disallow Permitir ou negar codec's
musiconhold Configura as classes de música em espera em chamadas de um
telefone SIP.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 118


4linux.com.br 8. Protocolo SIP

8.7. Travessia de NAT (Problemas e Soluções)


A tradução de endereços IP (NAT) tem sido usada pela maioria dos provedores de
serviço e empresas como uma maneira de contornar os problemas da falta de
endereçamento IP. Normalmente as empresas recebem um pequeno bloco de
endereços IP que varia normalmente de 1 a 256 endereços “válidos”.

O NAT resolve este problema mapeando os endereços internos para endereços


públicos externos. Um endereço IP:Porta interno é mapeado para um endereço
IP:Porta externo. Com este mapeamento o roteador sabe como encaminhar de volta
um pacote vindo da rede externa. Este mapeamento é valido por um tempo pré-
determinado, após o qual na ausência de tráfego é descartado.

Existem quatro tipos de NAT:

8.7.1. Full Cone (Cone Completo)

No caso do “Full Cone”, o mapeamento é bem estabelecido e qualquer um da


Internet pública que queira alcançar um cliente atrás do NAT, precisa apenas saber o
esquema de mapeamento de forma a mandar pacotes para ele.

Por exemplo:

Um computador atrás de um NAT com IP 10.0.0.1 enviando e recebendo na porta


8000 é mapeado para a porta externa IP no NAT de 200.180.4.168:1234. Qualquer
um na Internet pode enviar pacotes para este endereço e porta IP e estes pacotes
serão passados para o cliente na máquina esperando em 10.0.0.1:8000.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 119


4linux.com.br 8. Protocolo SIP

8.7.2. Restricted Cone (Cone Restrito)

No caso de cone restrito, o par IP/Porta externo só é aberto uma vez que o
computador interno envie dados para o endereço de destino IP específico.

Por exemplo:

No caso onde o cliente envia um pacote para um computador externo, o NAT mapeia
o cliente 10.0.0.1:8000 para o 200.180.4.168:1234. Assim o computador externo
pode enviar pacotes de volta. Entretanto o NAT ira bloquear pacotes vindos de
outros computadores externos.

8.7.3. Port Restricted Cone (Cone restrito por porta)

Um NAT do tipo “port restricted” é quase idêntico ao “Restricted Cone”, mas neste
caso o NAT ira bloquear todos os pacotes a menos que o cliente tenha previamente
enviado um pacote para o IP e porta que está enviando para o NAT.

Desta forma, se o cliente enviar para um computador externo para a porta 1010, o
NAT apenas ira permitir pacotes de volta se eles vierem de 200.180.4.168 na porta
1010.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 120


4linux.com.br 8. Protocolo SIP

8.7.4. Simétrico

Um mapeamento específico do IP:Porta para um NAT público IP:Porta é dependente


do endereço de destino para o qual o pacote é enviado.

Por exemplo:

Se um cliente envia de 10.0.0.1:1010 para o computador B, ele pode ser mapeado


como 200.180.4.168:1010. Se enviar da mesma porta para um endereço IP
diferente, ele é mapeado de forma diferente 187.23.13.4:5678. O computador A e B
podem responder apenas para este mapeamento. Se qualquer um tentar enviar para
a outra porta mapeada, estes pacotes são descartados como no caso do Cone
Restrito. O par externo IP:porta é aberto apenas quando o computador interno envia
dados para um destino específico.

8.7.5. Soluções práticas para o Asterisk

O mais difícil a respeito do NAT no Asterisk é entender que existem diversas


situações de projeto e cada uma deve ser tratada individualmente. Em primeiro lugar
vamos tratar como duas soluções separadas.

• Asterisk atrás de NAT


• Clientes atrás de NAT

Obviamente existem diversas situações intermediárias e a coisa se complica


pensando que temos diferentes tipos de NAT. Para aumentar a complexidade temos
clientes que suportam diferentes tipos de soluções para NAT (TURN, STUN, ICE,

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 121


4linux.com.br 8. Protocolo SIP

ALG). Isto pode tornar o problema realmente complexo.

Para simplificar, vamos usar duas situações que são as mais típicas. O Asterisk está
atrás de um Firewall sob domínio da área técnica da empresa. Os clientes são
externos e não temos domínio sobre a configuração dos firewalls destes clientes.

Asterisk atrás de NAT

Quando o Asterisk está atrás de NAT podemos usar as configurações localnet e


externip no arquivo sip.conf além de redirecionar as portas no Firewall. Supondo que
o endereço IP externo fosse 200.184.7.1 e que a rede local interna fosse
192.168.1.0/24. Isto ficaria assim:

[general]
externip = 200.84.7.1
localnet = 192.168.1.0/255.255.255.0

Além disso, é preciso redirecionar as portas UDP 5060 e RTP de 10000 à 20000 no
Firewall. Se você quiser reduzir esta faixa pode editar o arquivo rtp.conf.

Cliente atrás de NAT

Quando um cliente está atrás de um NAT, normalmente este NAT é dinâmico,


principalmente quando em uso doméstico. Com isto, só restam as opções de o
cliente suportar STUN ou UPnP para que possa aprender o endereçamento de uma
fonte externa ou a partir do roteador respectivamente. O ALG (Application Lawyer
Gateway) também é um recurso disponível na maioria dos modems ADSL
residenciais. Este sistema é uma camada que permite uma aplicação alterar as
regras de roteamento, mas, na prática, as aplicações não são totalmente
compatíveis e o modem pode travar, portanto evite o uso deste. Uma outra forma de
um cliente atrás de um NAT operar com o Asterisk é o uso de um túnel baseado em
PPTP, IPIP ou IPSec, isto pode ser feito através de um roteador (Cisco ou Linux),
outro método bastante utilizado é a VPN Virtual Private Network, no entanto este tem
um ponto negativo, pois gera overhead de cabeçalhos aumentando o consumo de
banda. Quando operar um cliente atrás de um NAT configure STUN no cliente, pois
este serviço permite o telefone descobrir o seu endereço válido e corrigir os
endereços de rede no cabeçalho SIP. No arquivo do canal SIP coloque os seguintes
parâmetros na configuração do cliente

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 122


4linux.com.br 8. Protocolo SIP

/etc/asterisk/sip.conf

nat=yes
directmedia=no
qualify=yes

onde:
• nat=yes – ignora o cabeçalho VIA e usa o endereço de onde chega o pacote.
• directmedia=no – força o fluxo de mídia pelo Asterisk.
• qualify=yes – força que um pacote exploratório mantenha o NAT aberto.

8.8. DTMF
DTMF é a sigla em inglês de "Dual-Tone Multi-Frequency", ou seja, são os tons
resultantes do cruzamento de duas frequências. As frequências destes tons e suas
combinações são mostradas na tabela a seguir.

Hz 1209 1336 1477


697 1 2 3
770 4 5 6
852 7 8 9
941 * 0 #

O tom de discagem final, que é enviado à central, é a frequência obtida do


cruzamento da frequência alta e baixa de uma certa tecla. Por exemplo: ao teclar o
número 5 o tom enviado é a soma de uma senóide na frequência de 1336Hz com
uma outra senóide de 770Hz.

O SIP trabalha com quatro meios de envio do DTMF:

• info – Os dígitos serão enviados dentro do pacote SIP;

• rfc2833 – Os dígitos serão enviados dentro do cabeçalho do pacote RTP;

• inband – Os dígitos são enviados dentro do payload de voz;

• auto – O Asterisk tenta enviar os dígitos via rfc2833, em caso de falha envia
inband.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 123


4linux.com.br 8. Protocolo SIP

8.9. Comandos da *CLI>


Comando Finalidade
sip show peers Exibe todas as contas do tipo peer incluindo friends
sip show registry Exibe o estado de registro do servidor
sip set debug Habilita o debug SIP
sip reload Recarrega o módulo SIP do Asterisk
sip show settings Exibe as configurações

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 124


4linux.com.br 8. Protocolo SIP

8.10. Laboratório – Asterisk


Conectando a um provedor VoIP

O objetivo deste exercício é conectar o seu servidor Asterisk a um provedor VoIP


utilizando o protocolo SIP. O provedor então completará as ligações destinadas às
outras filiais.

• Criando uma entrada para o registro de sua conta SIP no IP do provedor


VoIP: Crie uma conta SIP do tipo (peer) fornecida pelo seu provedor, no caso
o instrutor, no seu arquivo: /etc/asterisk/sip.conf

[general]
register => filial-FF:senha-FF@EnderecoIPdoProvedorVoIP

[op-voip]
type=peer
defaultuser=filial-FF
secret=senha-FF
context=interno
host=IPdoServidor
dtmfmode=rfc2833
directmedia=no
insecure=port,invite
qualify=yes
fromuser=filial-FF
fromdomain=IPdoServidor

Para ativar as alterações realizadas, recarregue o módulo SIP.

*CLI> sip reload


*CLI> sip show peers
*CLI> sip show registry

• Criando uma regra para realizar e receber ligações do seu provedor


VoIP: Edite o plano de discagem e acrescente a seguinte extensão no
contexto default no arquivo /etc/asterisk/extensions.conf:

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 125


4linux.com.br 8. Protocolo SIP

[interno]
...
...
include=>to-pstn

[to-pstn]
exten => _0XXXX,1,Dial(SIP/op-voip/${EXTEN:1},30,tT)

[from-pstn]
exten => _FFXX,1,Dial(SIP/${EXTEN},60,t)

FF – Número da sua filial.

Para ativar as alterações realizadas recarregue o plano de discagem.

*CLI> dialplan reload

Disque para os ramais das outras equipes para testar as configurações. Não
esqueça de discar o (zero) “0” antes dos números dos ramais das outras equipes.
Caso você não coloque o “0” antes do número, você utilizará as regras criadas no
exercício anterior.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 126


4linux.com.br 8. Protocolo SIP

8.11. Laboratório – SNEP

8.11.1. Tronco com a filial

No menu Cadastros >> Troncos, crie um tronco do tipo “SNEP SIP” com outra filial.

Lembre-se que para a comunicação entre você e a filial, ambos devem ter um tronco
entre si.

Atente para as seguintes informações:

• Host remoto – IP da filial.

8.11.2. Tronco com provedor VoIP

No menu Cadastro >> Troncos, crie um tronco com uma operadora VoIP (os dados
serão fornecidos pelo instrutor).

8.11.3. Conectando com o Asterisk

No arquivo /etc/asterisk/sip.conf, inclua na seção [general], a seguinte linha:

#include snep/snep-sip-trunks.conf

Ainda no arquivo /etc/asterisk/sip.conf, no final, inclua a seguinte linha:

#include snep/snep-sip.conf

Para que o Asterisk reconheça estas alterações, na CLI>, digite:

*CLI> sip reload

Verifique no menu Status >> Ramais, Troncos Ip, Filas, na seção Troncos SP, se o
servidor registrou corretamente.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 127


Módulo 9

Plano de discagem
4linux.com.br 9. Plano de discagem

9. Plano de discagem
O plano de discagem é o coração do Asterisk. Ele é quem define como o Asterisk ira
gerenciar as chamadas. Consiste basicamente de uma lista de instruções ou passos
que o Asterisk deve seguir. Essas instruções são disparadas a partir dos dígitos
recebidos de um canal ou aplicação. Para configurar o Asterisk é fundamental que
se entenda o plano de discagem dele.

A maior parte do plano de discagem está contida no arquivo extensions.conf no


diretório /etc/asterisk, mas também é possível programar o plano de discagem
através do módulo AEL (Asterisk Extension Language). Este módulo permite uma
programação semelhante ao C com estruturas e rotinas. Outro método é provido
pelo módulo pabx_lua.so que permite programar o plano de discagem na linguagem
Lua.

O arquivo extensions.conf

O arquivo extensions.conf é basicamente organizado da seguinte forma:

contexto → extensões → prioridades → aplicações


Dois contextos são padrões em arquivos extensions.conf:

[ general ]
Define algumas configurações gerais, como por exemplo:

Diretiva Significado
static Esta opção afeta apenas a operação do comando save dialplan. O valor
default é no, mas o arquivo exemplo do extensions.conf instalado com o
Asterisk explicitamente seta static=yes.
writeprotect Se writeprotect=no e static=yes, então você pode salvar o plano de discagem
atual com o comando save dialplan.
Definições nas variáveis globais na categoria [globals] permanecem sem
modificação. O valor default é “no”.
clearglobalvars Apaga as variáveis globais quado o plano de discagem for recarregado
(*CLI>dialplan reload).

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 129


4linux.com.br 9. Plano de discagem

[ globals ]

Na seção [globals], você pode definir as variáveis globais (ou constantes) e seus
valores iniciais. Elas são usadas para simplificar mudanças futuras na configuração
do PABX. O valor atual das variáveis globais pode ser mudado usando a função
GLOBAL. O valor da variável global pode ser referenciado, usando a sintaxe: $
{NOMEDAVARIAVEL}. As variáveis globais não são sensíveis a
maiúscula/minúscula, mas por convenção são declaradas em maiúsculo.

Exemplos:

RINGTIME=3

Determina quanto tempo deve tocar antes de encaminhar a chamada ao voicemail.

VMANNOUNCE=mysounds/my-vm-annouce

Determina qual arquivo de áudio deve ser tocado como anuncio do voicemail.

IMPORTANTE: Estas definições por si só não tem efeito algum. O Asterisk


não sabe o que fazer com estas variáveis. É de sua responsabilidade saber o
que fazer com elas no seu plano de discagem.

9.1. Inclusão Contextos


Os contextos possuem uma série de extensões que determinam que tipo de
chamada um e um determinado canal pode fazer, este canal é atrelado a somente
um contexto. Supondo que existam três contextos o primeiro chamado [ramais], o
segundo chamado [celular] e o terceiro chamado [fixo], deste modo supondo que o
ramal 2000 esteja incluso no contexto [ramais], e que este contexto possua somente
regras para ligações internas, o ramal 2000 não poderá executar chamada para
outros destinos, como por exemplo celulares.

Para solucionar este problema o programador pode inserir regras de discagem de


celular dentro do contexto [ramais] o que não é indicado, pois todos os ramais
inclusos neste contexto poderão ligar para celular o que pode ser uma falha de
segurança.

[ramais]

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 130


4linux.com.br 9. Plano de discagem

exten => 20XX,1,Dial(SIP/${EXTEN},60,tT)

[fixo]
;fixo-local
exten => _[2-5]XXXXXXX,1,Dial(DAHDI/g0/${EXTEN},60,T)

;fixo-DDD
exten => _0ZZZZ[2-5]XXXXXXX,1,Dial(DAHDI/g0/${EXTEN},60,T)

include => ramais

[celular]
;Celular Local
exten => _[6-9]XXXXXXX,1,Dial(DAHDI/g0/${EXTEN},60,T)

;Celulares DDD do RJ e SP iniciando com 9


exten => 0ZZ[12]X9XXXXXXXX,1,Dial(DAHDI/g0/${EXTEN},60,T)

include => fixo

9.2. Variáveis
O conceito de variável no Asterisk é comum a qualquer linguagem de programação.
Podemos criar nossas próprias variáveis ou fazer uso das variáveis já existentes, ou
criadas em tempo de execução do próprio Asterisk.

Para usar variáveis, utilizamos a sintaxe: ${NOMEDAVARIAVEL}. Também é


possível utilizar expressões $[EXPRESSION], que podem ser expressões regulares,
de comparação, de adição e subtração e outras.

IMPORTANTE: Os nomes de variáveis definidos pelo usuário não são


sensíveis à maiúsculas e minúsculas. ${VarName} e ${varname} se referem a
mesma variável. Entretanto as variáveis definidas pelo Asterisk diferenciam
maiúsculas e minúsculas. Logo, ${EXTEN} funciona, mas ${exten} não.

9.2.1. Variáveis globais

Podem ser configuradas no contexto [globals] do arquivo extensions.conf ou


usando o comando SetGlobalVar. Uma vez definida, elas podem ser referenciadas
por qualquer canal à qualquer hora.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 131


4linux.com.br 9. Plano de discagem

9.2.2. Variáveis de canal

São configuradas usando o comando Set. Cada canal recebe seu próprio espaço de
variáveis, de forma que não há chance de colisões entre diferentes chamadas, e a
variável é automaticamente destruída quando o canal é desligado. Existem algumas
variáveis de canal configuradas pelo Asterisk que você pode se referir como
definições do plano de discagem. Variáveis definidas pelo Asterisk diferenciam
caixas alta e baixa.

9.2.3. Variáveis de ambiente

Fornecem um meio de acessar variáveis de ambiente Unix de dentro do Asterisk. Se


você definir uma variável de canal com o mesmo nome de uma variável global
(lembre-se variáveis definidas pelo usuário, não se importam com maiúsculas e
minúsculas), referências ao nome da variável retornarão o valor da variável de canal.
Em um ambiente, você pode acessar as variáveis da seguinte forma:

Variável Significado
${ENV(nomedavariavel)}
${ENV(ASTERISK_PROMPT)} O prompt atual da linha de comando CLI
O nome do arquivo gravado pela última vez com o comando
${ENV(RECORDED_FILE)}
Record

9.2.4. Variáveis específicas de aplicações

Algumas aplicações usam entradas de dados extras e fornecem a saída na forma de


variáveis de canal.

Aplicação Variável Significado


retorna ${AVAILCHAN} O primeiro canal disponível.
ChanIsAvail retorna
O nome do canal de origem.
${AVAILORIGCHAN}
Se uma discagem falhou, esta é a mensagem de
retorna ${CAUSECODE}
erro.
Dial
Texto com o código de status da última tentativa de
retorna ${DIALSTATUS}
discagem.
MeetMe recebe input de Um script de AGI para rodar
{MEETME_AGI_BACKGROUND}

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 132


4linux.com.br 9. Plano de discagem

Aplicação Variável Significado


O número de segundos que o usuário esteve na
retorna ${MEETMESECS}
conferência.
Hangup lê a ${PRI_CAUSE} variável para configurar os códigos de retorno PRI.
TXTLookup retorna ${TXTCIDNAME} O resultado de um DNS lookup.

9.2.5. Variáveis específicas para MACRO

Em um contexto de macro, algumas variáveis adicionais de canal estão disponíveis.

Variável Significado
${ARG1} O primeiro argumento passado pela macro.
${ARG2} O segundo argumento passado pela macro e assim por diante.
${MACRO_CONTEXT} O Contexto da extensão que disparou a macro.
${MACRO_EXTEN} A extensão que disparou a macro.
Configurado por uma macro para influenciar a prioridade de execução
${MACRO_OFFSET}
ao sair da macro.
${MACRO_PRIORITY} A prioridade na extensão onde esta macro foi disparada.

Mais sobre variáveis pode ser encontrado em:

http://www.voip-info.org/wiki/view/Asterisk+variables

9.3. Expressões
O uso de expressões no plano de discagem do Asterisk permite programar
determinadas operações em uma linha de código, mantendo assim o plano de
discagem mais claro e elegante. As expressões podem ser divididas em:

9.3.1. Operadores matemáticos

Operador Ação
+ Somar
- Subtrair
* Multiplicar
/ Dividir
% Módulo

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 133


4linux.com.br 9. Plano de discagem

Para realizar uma operação, basta colocá-la entre $[ ]. Exemplo:


$[1 + 2]
$[${ARG1} + ${ARG2}]
Set(VAR=$[${ARG1} + ${ARG2}])

9.3.2. Operadores lógicos

Operador Ação
& E
| Ou
! Negação

9.3.3. Operadores de comparação

Operador Ação
> Maior
< Menor
>= Maior ou igual
<= Menor ou igual
= Igual
!= Diferente

9.3.4. Aplicações práticas de Expressões.

exten => s,n,GotoIf($[4>3]?ura,s,1:ura,i,1)

• Caso 4 seja maior que 3: vai para o contexto ura, extension s e prioridade 1;
• Caso seja falso vai para contexto ura, extensão i (invalid) e prioridade 1.

exten => s,n,GoIfTime(8:00-12:59,*,*,*?manha,s,1)

• Desvia o contexto caso o horário esteja de acordo com o especificado.

exten => s,n,ExecIfTime(12:00-13:00,*,*,*?PlayBack(almoco))

Executa algo caso a hora seja a hora especificada. Você pode usa-la no horário de
almoço por exemplo, tocando um arquivo de audio que diz que a empresa está em
seu horário de almoço.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 134


4linux.com.br 9. Plano de discagem

9.4. Funções
As funções possuem um tratamento avançado no plano de discagem, assim como
em qualquer linguagem de programação o Asterisk possui uma série de funções que
podem ser utilizadas para criar funcionalidades avançadas no plano de discagem,
para saber mais sobre as funções verifique na CLI com o seguinte comando:

CLI> core show functions

Alguns exemplos das funções mais comuns:

• LEN(string) - retorna o comprimento da string nome da variável.

Exemplo:
exten=>100,1,Set(Fruta=pera)
exten=>100,2,NoOp(${LEN(Fruta)}) ;; # 1
exten=>100,3,NoOp(${LEN(${Fruta})}) ;; # 2

◦ #1 – mostra um valor de 5 ( O Comprimento da string “fruta”).


◦ #2 – mostra o valor de 4 (O comprimento da string “pera”.)
Esta é uma boa maneira de verificar se uma string está vazia ou nula.

• STRFTIME([epoch][,timezone[,format]]) - Seta data/hora do sistema para


uma determinada variável, muito útil quando utilizado em conjunto com
gravação de chamadas.

Exemplo:
exten => s,1,set(CallTime=${STRFTIME(${EPOCH},GMT-3,%C%y%m%d
%H%M)})

◦ %C – Ano representado pelos dois primeiros dígitos, exemplo 2013 = 20


◦ %y – Ano representado pelos dois últimos dígitos, exemplo 2013 = 13.
◦ %m – Mês no formato decimal, exemplo Janeiro = 01 , Fevereiro = 02 e
etc.
◦ %d – Dia do mês no formato decimal, varia de 01 até 31.
◦ %H – Hora no formato decimal em 24 Horas, de 00 até 23.
◦ %M – Minuto no formato decimal de 00 até 59.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 135


4linux.com.br 9. Plano de discagem

• IFTIME(<timespecs?[<true>][:<false>])

<timespecs> = <time range>,<days of week>,<days of month>,<months>

onde:

<time range>= <hora>':'<minuto>'-'<hora>':'<minuto>

<hora> = um número, 0 a 23, inclusive

<minuto> = um número, 0 a 59, inclusive

<days of week> = <nomedia> ou <nomedia>'-'<nomedia>

<nomedia> = "sun" | "mon" | "tue" | "wed" | "thu" | "fri" | "sat"

<days of month> = <dianum> ou <dianum>'-'<dianum>

<daynum> = um número, 1 a 31, inclusive

<months> = <nomedomes> ou <nomedomes>'-'<nomedomes>

<nomedomes> = "jan" | "feb" | "mar" | "apr" | "may" | "jun" | "jul" |


"aug" | "sep" | "oct" | "nov" | "dec"

Exemplo:
exten => s,1,Set(foo=${IFTIME(*|mon|8-15|nov?
Bom:Ruim)})

onde:
* – Em qualquer horário
mon – De uma segunda-feira
8-15 – Que seja entre os dias 8 e 15
nov – Do mês de novembro
?Bom – Caso a condição seja válida, responde: Bom
:Ruim – Senão, responde: Ruim

9.4.1. Aplicações condicionais

• GotoIfTime(<timespecs>?[labeliftrue][:labeliffalse])
Desvia o fluxo da chamada para “labeliftrue” se as condições de tempo de

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 136


4linux.com.br 9. Plano de discagem

<timespecs> (veja definição em IFTIME) coincidirem, caso contrário, vai para


“labeliffalse”.
Exemplo:
exten => s,n,GotoIfTime(*,*,26-30,May?telefonista)

onde:
* – Em qualquer horário
* – Em qualquer dia da semana
26-30 – Que seja entre os dias 26 a 30
May – Do mês de maio
?telefonista - Desvia chamada para o contexto telefonista.

9.4.2. Manipulação de Strings

Substrings

${string:offset:length}

• offset: ponto de início


• length: comprimento
Retorna uma substring da string, iniciando na posição definida por “offset” e
retornando o comprimento de caracteres definido em “length”. Se o offset é
negativo, isto é pego da direita para esquerda a partir do fim da string. Se o
comprimento é omitido , ou é negativo, então todo o resto da string apartir do
ponto de início (offset) é retornado.

Exemplos:
exten=>_NXX.,1,Set(DDD=${EXTEN:0:3}) ;; #1
exten=>_516XXXXXXX,1,Dial(${EXTEN:3}) ;; #2

• #1 – Pega os primeiros três dígitos da variável ${EXTEN}


• #2 – Pega todos dígitos da variável ${EXTEN}, exceto o 3 primeiros

Concatenação

Para concatenar duas strings, simplesmente escreva-as juntas.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 137


4linux.com.br 9. Plano de discagem

Exemplos:
${foo}${bar}
555${Onumero}
${DDD}555${ONumero)

Mais sobre funções pode ser encontrado em:


http://www.voip-info.org/wiki/view/Asterisk+functions

9.5. Macros e Sub-rotinas


Macros são rotinas, ou melhor, sub-rotinas que são usadas mais de uma vez dentro
do plano de discagem, evitando à reedificação de dados. Elas facilitam operações e
organização, onde os códigos podem ser reutilizados.

Similar uma função, passamos o nome da rotina, e quantos argumentos como


variáveis serão usadas, na hora de chamar basta fazer referencia a macros usando
a quantidade de argumentos que foram especificados anteriormente, na criação da
macro.

Vejamos a sintaxe da macro:

Macro(nome da macro, arg1,arg2)

Onde temos:

• Macro – A chamada para criação da Macro;


• nome da macro – O nome da macro que está sendo criada, e será
referenciado posteriormente;
• arg(n) - Argumentos que serão passados para macro

A macro deverá ser criada antes do uso nos contextos, por exemplo:

[macro-exemplo]
exten => s,1,Dial(${ARG1}/${ARG2},${ARG3})
;
; Definicao do contexto interno
;
[interno]
exten => _4XXX,1,Macro(exemplo,SIP,${EXTEN},30)

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 138


4linux.com.br 9. Plano de discagem

Na macro acima, estamos usando a aplicação Dial. Desta forma, temos uma macro
chamada exemplo, que chama a aplicação Dial, com os argumentos padrão,
Tecnologia (SIP,AIX,DGV, etc), identificação da extensão, timeout (opcional no Dial).
Podemos facilmente ter digitado:

Dial(SIP/${EXTEN},30)

Não existe uma diferença muito grande, em digitar daquela forma e essa, pois
usamos uma linha somente, agora imagine, várias linhas em vez de uma. Vejamos
outro exemplo:

[macro-hello]
exten => s,1,Answer
exten => s,n,Playback(${ARG1})
;
; Definicao do contexto ramais
;
[ramais]
exten => 1234,1,Macro(ola)

Desta forma fica um pouco mais claro o uso. Criamos a macro hello, que atenderá a
chamada através da aplicação Answer, e depois tocará uma música que será
passada como argumento na chamada da macro, através da aplicação Playback.

O Asterisk na versão 1.8 ou superior tem suporte uma nova aplicação chamada
Gosub() que tem a mesma função da aplicação Macro, porém com uma pequena
diferença na sintaxe do comando. Em versões futuras a aplicação Macro será
depreciada sendo substituída pela nova Gosub.

9.6. Extensões especiais


O Asterisk usa alguns nomes de extensão para propósitos especiais.

Ext Nome Significado


s Start
m Usado para planos de discagem que entram em um contexto sem
outras informações como o identificador de chamada. Mesmo se você
conhecesse o identificador de chamada, você ainda tem um lugar para

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 139


4linux.com.br 9. Plano de discagem

Ext Nome Significado


começar.
Usado quando chamadas ficaram inativas a pós um “prompt” ter sido
t Timeout
tocado. Também usado para desligar uma linha que esteja ociosa.
Usado para chamadas que tenham sido desligadas devido ao
T AbsoluteTimeout AbsoluteTimeout() ter sido alcançado. É útil, por exemplo, para tocar
uma notificação com Playback().
Usado para limpar uma chamada. Pode ser usado para tocar uma
h Hangup
mensagem de adeus antes de desligar.
Usado quando discando para uma extensão desconhecida no contexto
i Invalid ou entrada desconhecida em um menu da URA (Unidade de Resposta
Audível).

9.7. Roteamento baseado em horário


Um plano de discagem pode conter vários contextos. Quando uma chamada está
entrando, ela vem por um canal. Este canal pertence à um contexto. Dentro de um
contexto podemos incluir outros através do comando:

include => context|<times>|<weekdays>|<mdays>|<months>

onde:
• context = nome do contexto
• times / weekdays / mdays / months – veja a especificação <timespec>
descrita no item Funções >> Condicionais.

Exemplo:

Supondo que uma empresa trabalhe somente nos dia úteis, e das 8 as 18 hs, as
chamadas entrantes vão para a URA dentro do horário de expediente. Caso
contrário, toca uma mensagem e encerra a chamada.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 140


4linux.com.br 9. Plano de discagem

No contexto [default], teríamos as seguintes inserções:

; Este é o horário de expediente


include=>expediente|08:00-18:00|mon-fri|*|*
; Este são o horário fora de expediente
include=>foraexpediente|18:00-23:59|*|*|*
include=>foraexpediente|00:00-08:00|*|*|*
include=>foraexpediente|*|sat-sun|*|*|*

9.8. Funções e Aplicações para o AstDB


A base de dados do Asterisk usa a versão 1 do Berkley DB que é parecido com o
registry do Windows. Este banco de dados pode ser usado pelo Asterisk para
armazenar dados temporários, e configurações. Um exemplo de uso é a
transferência com consulta, onde se o telefone está ocupado ele guarda a extensão
em uma base de dados e fica re-tentando até conseguir.

Os dados são agrupados em famílias e identificados com uma chave que é única
dentro da família.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 141


4linux.com.br 9. Plano de discagem

9.8.1. Famílias

• cidname – usado pelo comando LookupCIDName


• blacklist – usado pelo comando LookupBlacklist

9.8.2. Aplicações específicas do AstDB

Existem operações que você pode usar dentro do plano de discagem em


extensions.conf:

• DBdel – Deleta uma chave da base de dados.

• DBdeltree – Deleta uma família ou árvore da base de dados.

• DBget – Recupera um valor da base de dados.

• DBput – Armazena um valor na base de dados.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 142


4linux.com.br 9. Plano de discagem

9.9. Interface gráfica


Para o SNEP todas as chamadas (entrantes, saintes, internas, etc) estão definidas
em rotas, que fazem parte das Regras de Negócio.

Uma Rota executa ações no SNEP e para que isso aconteça, algumas condições
devem ser satisfeitas, como:

• Uma condição de "encaixe" - a origem e o destino da chamada devem se


enquadrar em uma rota cadastrada;

• O horário da chamada deve ser compatível com o horário de incidência da


regra.

Ao acessar o menu Regras de Negócio >> Rotas, será exibida uma tela com a lista
de rotas já cadastradas (veja próxima figura).

Ao criarmos ou alterarmos uma rota, as seguintes informações serão necessárias:

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 143


4linux.com.br 9. Plano de discagem

• Descrição: Uma descrição textual para facilitar a visualização da regra na


lista de regras de negócio.
• Origem: A origem da chamada. É possível selecionar mais de uma origem
para a ação usando diferentes critérios como expressão regular no formato
Asterisk, um número específico, grupo de ramais, etc. Os tipos de origens
podem ser:
◦ Qualquer: qualquer número ou expressão;
◦ Expressão regular: expressão no padrão Dialplan do Asterisk, que ira
verificar se o número de origem da chamada coincide. Exemplos:
▪ 0800. -> números que iniciem com "0800";
▪ [7-9]X. -> números que iniciem com “7, 8 ou 9”;
▪ 0XX48[2-6]X. -> números que: iniciem com “0” (zero) + 2 (dois) dígitos

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 144


4linux.com.br 9. Plano de discagem

quaisquer + “48” + 1 (um) dígito entre 2 e 6 + “n”


dígitos
◦ Grupo de Ramal: um grupo de ramais dentre os cadastrados no sistema;
◦ Grupo de Contato: um grupo de contatos dentre os cadastrados no
sistema;
◦ Ramal: número de um ramal cadastrado no sistema;
◦ Alias de Expressão: um alias de expressão cadastrado no sistema;
◦ Tronco: um tronco dentre os cadastrados no sistema;

◦ Observação: Os botões + e x são usados para adicionar ou retirar


“origens” da rota.
• Destino: mesmo conceito das origens. É necessário selecionar um critério
para “encaixe” do destino da chamada. Os tipos de destinos são basicamente
os mesmos da origem, porém:
◦ Não se aplicam destinos para:
▪ Troncos
◦ Podem existir destinos do tipo:
▪ Sem destino: sem destino definido (em branco);
• Dias da semana e Tempos válidos: horários e dias da semana em que a
rota é válida. Caso a chamada encaixe com a origem e o destino, mas não
esteja dentro do horário de validade, a rota será ignorada;
• Gravação: gravar ou não a chamada. O arquivo da gravação pode ser
recuperado pelo relatório Chamadas do Período;
• Prioridade: em situações onde 2 ou mais rotas satisfazem uma condição de
encaixe, a prioridade é utilizada para definir qual rota tem preferência;
• Ações de uma regra: o roteamento e destino das chamadas no SNEP são
definidos pelas ações de uma rota. Essas ações irão “trabalhar” com a
requisição original e encaminhar a chamada para um ramal, tronco, fila, entre
outros. As ações disponíveis no SNEP são:
◦ Defina Centro de Custos: define o centro de custos que será usado para
classificar a chamada;
◦ Desviar para Contexto: envia a chamada para um contexto do “Dialplan
do Asterisk”. Essa opção é usada quando há necessidade de

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 145


4linux.com.br 9. Plano de discagem

customização de algum comportamento do Asterisk. Comumente é usada


na criação de URA/IVR;
◦ Discar para Ramal: encaminha a chamada para um ramal cadastrado no
SNEP. Caso nenhum ramal seja especificado a ação tentará usar o ramal
do número de destino da chamada;
◦ Discar para Tronco: a chamada será direcionada para um tronco;
◦ Enviar e-mail: envia um e-mail, com o assunto, destinatário e cabeçalho
definidos;
◦ Enviar para Fila: a chamada será direcionada para uma fila de
atendimento;
◦ Executar Aplicação: executa uma aplicação do Asterisk.
◦ Loop: gera um laço nas ações. Toda vez que essa ação for chamada ela
direciona o fluxo da execução das ações para o índice da ação definido
em sua configuração;
◦ Pedir senha: esta ação atende a chamada e pede uma senha para o
originador. Esta senha, se não for definida na própria ação, será obtida do
cadastro do ramal originador;
◦ Reescrever pedido: edita uma requisição, sendo possível modificar a
origem ou o destino da chamada. É possível "cortar" o número de
origem/destino usando o "|" (pipe) para definir até que ponto o número
será cortado. Esemplo: 0XX|XX. será cortado o 0XX ficando somente os
números a partir do terceiro carácter. Essa ação também permite adicionar
um prefixo e sufixo ao número original;
◦ Restaurar pedido: restaura a requisição aos seus valores inciais. Reverte
as modificações das ações “Reescrever Requisição”.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 146


4linux.com.br 9. Plano de discagem

9.10. Laboratório – Asterisk

9.10.1. Básico do plano de discagem

• Laboratório de funções e expressões: Crie a extensão 9200 no plano de


discagem, esta extensão executa uma série de aplicações e funções, quando
terminar ligue para a extensão e veja o resultado na CLI.

• Teste as seguintes aplicações do plano de discagem:


◦ Set – Define valor as variáveis e invoca funções.
◦ NoOp – No Operation, equivalente ao comando println do C.
◦ Answer – Atende um canal e estabelece um fluxo de aúdio.
◦ SayDigits – Pronuncia os dígitos numéricos.
◦ Hangup – Finaliza uma chamada.

/etc/asterisk/extensions.conf

[interno]
exten => 9200,1,Set(NAME="ASTERISK")
exten => 9200,n,Set(I=4)
exten => 9200,n,NoOP(${NAME})
exten => 9200,n,NoOP(${I})
exten => 9200,n,Answer()
exten => 9200,n,SayDigits(${I})
exten => 9200,n,Wait(1)
exten => 9200,n,NoOP($[${I}+${I}])
exten => 9200,n,SayDigits($[${I} + ${I}])
exten => 9200,n,NoOP($[${I}=4])
exten => 9200,n,NoOP($[${I}=4 & ${NAME}=”ASTERISK”])
exten => 9200,n,NoOP($[${I}=4?"MATCH"::"DO NOT MATCH"])
exten => 9200,n,Hangup

Recarregue as mudanças na CLI do Asterisk.


*CLI> dialplan reload

Aumente a verbosidade para analisar a saída dos comandos

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 147


4linux.com.br 9. Plano de discagem

*CLI> core set verbose 3

Ligue para o ramal 9200 e analise a saída na *CLI>, certifique-se que


entendeu a saída dos comandos.

9.10.2. Discagem de saída

• Crie uma extensão para as chamadas locais, considere “SIP/op-voip” como


canal de saída. Estas chamadas não podem ser usadas para números
precedidos por 6,7,8 e 9. Esta extensão deve ser adicionada no contexto [to-
pstn]
[to-pstn]
exten => _[2-5]XXXXXXX,1,Dial(SIP/op-voip/${EXTEN},20)

• Crie uma extensão de chamada para interurbanos dentro do contexto to-pstn,


desconsidere o código da operadora discada pelo usuário e use uma
operadora fictícia “55”. Esta linha não deve permitir chamadas interurbanas
com celular.
exten => _0ZZZZ[2-5]XXXXXXX,1,Dial(SIP/op-voip/055$
{EXTEN:3},20)

• Crie uma extensão de chamadas para celular dentro do contexto to-pstn. Os


celulares começam com 6, 7, 8 e 9.
exten => _[6-9]XXXXXXX,1,Dial(SIP/op-voip/${EXTEN},20)

• Crie uma extensão de saída para celular interurbano dentro do contexto to-
pstn.
exten => _0ZZZZ[6-9]XXXXXXX,1,Dial(SIP/op-voip/055$
{EXTEN:3},20)

9.10.3. Entrada de chamadas

Faça com que as chamadas vidas do provedor SNEP sejam encaminhadas para os
ramais 01 e 02 respectivamente utilizando uma varável global.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 148


4linux.com.br 9. Plano de discagem

ATENÇÃO: Comente a linha: exten => _FFXX,1,Dial(SIP/${EXTEN},60,t), onde FF é


o número da as filial.

/etc/asterisk/extensions.conf

[globals]
HUNTGROUP=SIP/FF01&SIP/FF02 ;Troque FF pelo seu prefixo

[from-pstn]
; exten => _FFXX,1,Dial(SIP/${EXTEN},60,t) ; Comente esta linha

; Este é o horário de expediente


include => expediente,08:00-18:00,mon-fri,*,*
; Este são o horário fora de expediente
include => foraexpediente,18:00-23:59,*,*,*
include => foraexpediente,00:00-08:00,*,*,*
include => foraexpediente,*,sat-sun,*,*,*

[expediente]
exten => _FFXX,1,Dial(${HUNTGROUP},20,t) ;Troque FF pelo seu
prefixo

[foraexpediente]
exten => _X.,1,Answer()
exten => _X.,n,Playback(queue-thankyou)

9.10.4. Aplicação Macro

Crie uma Macro abaixo dos contextos criados anteriormente, depois utilize a
aplicação Macro para executar uma chamada através da mesma.

[interno]

exten => _FFXX,1,Macro(discaramal,SIP/${EXTEN}) ;Troque FF por seu


prefixo

;exten => NN00,1,Dial(SIP/NN00,60,tT) ;COMENTE ESTA LINHA


;exten => NN01,1,Dial(SIP/NN01,60,tT) ;COMENTE ESTA LINHA

[macro-discaramal]
exten => s,1,Dial(${ARG1},10,tT)
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s,n,Hangup()
exten => s-BUSY,1,Voicemail(${ARG1},b)
exten => s-BUSY,n,Hangup()

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 149


4linux.com.br 9. Plano de discagem

exten => s-CHANUNAVAIL,1,Voicemail(${ARG1},u)


exten => s-CHANUNAVAIL,n,Hangup()
exten => s-CONGESTION,1,Congestion()
exten => s-CONGESTION,n,Hangup()
exten => s-NOANSWER,1,Voicemail(${ARG1},u)
exten => s-NOANSWER,n,Hangup()
exten => s-.,1,Goto(s-NOANSWER,1)

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 150


4linux.com.br 9. Plano de discagem

9.11. Laboratório – SNEP


O SNEP possui diversos AGI's (Asterisk Gateway Interface) que executam ações
dentro do Asterisk e precisam ser chamados a partir do extensions.conf. Por isso,
este arquivo, no SNEP, é totalmente ajustado para atender esta prerrogativa e, para
tanto precisaremos utiliza-lo.

9.11.1. Carregando o extensions.conf do SEP no Asterisk

• Copiando e renomeando o arquivo para o diretório /etc/asterisk

# cd /etc/asterisk
# cp
/var/www/snep2/install/etc/asterisk/extensions.conf .
/extensions-snep.conf

• Criando a chamada a partir do exrtensions.conf: No arquivo


/etc/asterisk/exrtensions.conf, inclua, no final, a seguinte linha::

# include extensions-snep.conf

• Copiando os arquivos da relação: SNEP x Asterisk x MySQL

# cd /etc/asterisk
# cp /var/www/snep2/install/etc/asterisk/res_odbc.conf ./
# cp /var/www/snep2/install/etc/asterisk/manager.conf ./
# cp /var/www/snep2/install/etc/asterisk/agents.conf ./
# cp /var/www/snep2/install/etc/asterisk/cdr_odbc.conf ./
# cp /var/www/snep2/install/etc/asterisk/extconfig.conf ./

• Recarregando os módulos ajustados: alteramos a configuração de vários


módulos do Asterisk que já estavam carregados (odbc, manager, agents, cdr,
etc) e por isso precisamos recarrega-los. Para facilitar, vamos reiniciar o
Asterisk

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 151


4linux.com.br 9. Plano de discagem

# service asterisk restart

9.11.2. Definindo os Centros de custos

• Crie os Centros de Custos para cada operadora de saída baseado na


seguinte tabela:

Código Nome/descrição Tipo


2.01 Saídas operadora A S
2.01.01 Saídas operadora A – Fixo Local S
2.01.02 Saídas operadora A – Fixo LDN S
2.01.03 Saídas operadora A – Celular Local S
2.01.04 Saídas operadora A – Celular LDN S
2.01.05 Saídas operadora A – Outras S

9.11.3. Criando rotas

• Crie uma rota para as chamadas internas – ramal a ramal, utilizando os


seguintes parâmetros:

◦ Origem: Grupo → todas


◦ Destino: Grupo → todas
◦ Ações:
▪ Definir Centro de Custos → 9-Internas
▪ Discar para ramal
Faça os testes discando de um ramal para outro.

• Crie uma rota para fazer chamadas para uma filial qualquer, utilizando os
seguintes parâmetros:
◦ Origem: Grupo → todas
◦ Destino: Expressão Regular → NNXX (onde NN = Número da Filial)
◦ Ações:
▪ Definir Centro de Custos → 9-Internas
▪ Discar para tronco → Tronco da Filial NN

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 152


4linux.com.br 9. Plano de discagem

• Crie uma rota para receber chamadas de uma filial qualquer, utilizando os
seguintes parâmetros:
◦ Origem: Expressão Regular → NNXX (onde NN = Número da Filial)
◦ Destino: Grupo → todas
◦ Ações:
▪ Definir Centro de Custos → 9-Internas
▪ Discar para ramal

Faça os testes discando para um ramal de outra filial.

• Crie uma rota para fazer chamadas para telefones Fixos Locais, utilizando os
seguintes parâmetros:
◦ Origem: Grupo → Todas
◦ Destino: Alias de Expressão → Fixo Local
◦ Ações:
▪ Definir Centro de Custos → 2-Saidas
▪ Discar para Tronco (Escolha um tronco de saída)

Faça os testes discando para um número Fixo Local.

9.11.4. Desafio

• Repita o exercício anterior, definindo os Centros de custos corretamente, mas


agora para
◦ Celular Local.
◦ Fixo LDN.
◦ Celular LDN.
• Após fazer as chamadas, verifique o relatório Registro de Chamadas.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 153


Módulo 10

Recursos da classe V
4linux.com.br 10. Recursos da classe V

10. Recursos da classe V

10.1. URA - (Unidade de Resposta Audível)


O Asterisk possui uma série de aplicações, porém quando falamos em URA ou IVR
temos que programá-la no plano de discagem e, para tal, necessitamos de algumas
aplicações básicas do Asterisk. São elas:

• Answer()

◦ Atende o canal e sincroniza o áudio.

• Bakground(<arquivoDeAudio>)

◦ Toca o prompt da URA e aguarda por uma entrada DTMF.

• WaitExten(<seg>)

◦ Caso o prompt da URA seja tocada até o fim o usuário ainda pode digitar
uma opção em mais x segundos passado como argumento.

• Goto(<contexto>,<extensão>,<prioridade>)

◦ Move a chamada para um determinado ponto no plano de discagem.

• Read(<var>) - Opcional

◦ Armazena os dígitos discados pelo cliente em uma variável. Isto é muito


útil em aplicações avançadas, como por exemplo checar o CPF ou
número do cartão de crédito em um banco de dados.

• Record(<arquivo>) - Opcional

◦ Os arquivos de áudio utilizados em uma URA corporativa normalmente


são gravadas em estúdio, o que da uma qualidade profissional, porém se
este recurso não estiver disponível é possível gravar um arquivo de áudio
pelo telefone executando esta aplicação em uma determinada extensão.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 155


4linux.com.br 10. Recursos da classe V

Exemplo de URA

[entrada]
exten => _X.,1,Goto(URA,s,1) ;Toda a chamada entrante é
;desviada para a URA

[URA]
exten => s,1,Answer() ;Atende o canal
exten => s,n,Background(menuDaUra) ;Toca o audio do menu da URA
exten => s,n,WaitExten(2) ;Aguarda mais 2 segundos

exten => 1,1,Goto(suporte,s,1) ;Caso o DTMF seja 1

exten => 2,1,Goto(comercial,s,1) ;Caso o DTMF seja 2

exten => 3,1,Goto(financeiro,s,1) ;Caso o DTMF seja 3

exten => i,1,Playback(invalido) ;Toca mensagem de inválido

exten => i,n,Goto(s,1) ;Vá para o início da ura

exten=> t,1,Dial(${RECEPCAO},30,t) ;Se nenhuma opção for


;digitada envia a chamada
;para a telefonista

[suporte]
exten => s,1,Dial(SIP/2000,40) ;Chama o ramal do suporte
[comercial]
exten => s,1,Dial(SIP/2001,40) ;Chama o ramal do comercial
[financeiro]
exten => s,1,Dial(SIP/2002,40) ;Chama o ramal do financeiro

10.2. Estacionamento
Pode ser usado para estacionar uma chamada. Isto auxilia quando você está
atendendo em um telefone fora da sua sala. Estaciona a chamada em uma
determinada extensão e quando se move de volta a sua sala digita a extensão onde
a chamada está estacionada.

Por padrão a extensão 700 é usada para estacionar um a chamada.

Como funciona:

1. No meio de uma conversa, tecle # ou *1 para iniciar uma transferência, então


disque 700;

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 156


4linux.com.br 10. Recursos da classe V

2. O Asterisk ira agora anunciar a extensão do estacionamento, mais


provavelmente 701 ou 702;
3. Desligue, e o originador da chamada será colocado em espera na extensão
anunciada;
4. Disque 701 (a extensão anunciada) a partir de qualquer ramal e então você
pode recuperar a chamada e continuar conversando;
5. Se o originador ficar estacionada por mais tempo que o limite então o Asterisk
tocará a extensão discada originalmente.

Onde configurar:

As configurações estão no arquivo features.conf, dentro do diretório /etc/asterisk

No arquivo extensions.conf inclua a seguinte linha no contexto em que os ramais


estão inclusos:

include=>parkedcalls

No arquivo features.conf, descomente as linhas:

[general]
parkext=>700
parkpos = >701-720
context=>parkedcalls
parkingtime=>45

onde:

• parkpos=>701-720 - Posições de estacionamento, é possível definir mais ou


menos ramais para esta função;

• context=>parkedcalls - Nome do contexto de estacionamento, para ativá-lo


é necessária a instrução INCLUDE no arquivo extensions.conf.

• parkingtime=>45 – Número de segundos que uma chamada pode ser


estacionada (padrão 45 segundos). Após o tempo expirar, a chamada volta
para o ramal original.

Para visualizar as chamadas estacionadas:

*CLI> parkedcalls show

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 157


4linux.com.br 10. Recursos da classe V

10.3. Captura
A captura permite que você puxe um chamado de um colega no mesmo grupo de
chamadas. Isto evita que você tenha de levantar para atender um telefone do seu
vizinho que não para de tocar. Discando *8 você pode capturar uma chamada no
seu grupo de chamadas. Este recurso pode ser alterado via arquivo features.conf No
arquivo sip.conf vamos adicionar duas linhas em cada ramal.

callgroup=xx
pickupgroup=xx

Essa funcionalidade não está no arquivo features.conf. Para implementá-la, criar a


linha:

pickupexten=>*8

Esta forma de captura de chamadas funciona apenas para canais de comunicação


com o mesmo protocolo, ou seja, um canal de comunicação SIP somente pode
capturar uma chamada tocando em outro canal de comunicação SIP. Para
solucionar este problema existe ainda uma outra forma de capturar as chamadas,
independente do protocolo e grupo, para isso adicione a aplicação Pickup ao
extensions.conf:

exten => _33900X,1,Pickup(${EXTEN:2}@treinamento)

Sua sintaxe é:

Pickup(extensão[@contexto])

Onde:
• extensão - Extensão que deseja capturar;
• contexto - Contexto no qual está a extensão que deseja capturar.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 158


4linux.com.br 10. Recursos da classe V

10.4. Transferência
Existem duas possibilidades de transferência de chamadas. Transferência direta e
Transferência assistida. A configuração desses dois tipos de transferência também
pode ser feita diretamente no Asterisk, sendo útil para telefones convencionais que
não possuem as teclas de HOLD e TRANSFER. Esta configuração está no
arquivo /etc/asterisk/features.conf.

10.4.1. Transferência Assistida

Uma transferência Assistida é quando há interação do usuário que vai receber a


ligação.

atxfer – Transferência assistida. Remova o comentário da linha a seguir no arquivo


features.conf para efetivar a função.

/etc/asterisk/features.conf

atxfer => *2

10.4.2. Transferência Direta

Uma transferência direta é quando o usuário só transfere a ligação e não há


interação.

blindxfer - Transferência direta. Por padrão o dígito # realiza esta transferência.

/etc/asterisk/featues.conf

blindxfer => #

Se preferir também pode utilizar uma combinação de teclas:


blindxfer => *1

10.4.3. A transferência ainda não está funcionando

É necessário habilitar a transferência nos canais de comunicação, colocando as


opções t e/ou T.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 159


4linux.com.br 10. Recursos da classe V

• t – habilita a transferência para o lado destino da chamada.

• T – habilita a transferência para o lado originador da chamada.

Exemplo:

exten => 1000,1,Dial(SIP/${EXTEN},35,tT)

10.5. Conferência
A conferência no Asterisk é feita usando o aplicativo MeetMe(). O MeetMe() é uma
funcionalidade muito simples de usar com a vantagem de funcionar com qualquer
tipo de canal. Alguns telefones padrão SIP, por exemplo, têm seus próprios
mecanismos de conferência que também podem ser usados, mas o método padrão
para conferência é o MeetMe().

10.5.1. Formato:

MeetMe(Confno[|options][|password])

onde:

• Confno – número da sala de conferência;

• options – Opções de configuração:

◦ m – Configura o modo ouvir apenas;

◦ t – Configura o modo apenas fala;

◦ i – Anuncia a entrada e saída de usuário;

◦ p – Permite ao usuário sair da conferência pressionando #;

◦ X – Permite ao usuário sair da conferência discando uma extensão válida


de um dígito. A extensão é executada em ${MEETME_EXIT_CONTEXT}
ou no contexto atual se a variável não tiver sido definida;

◦ v – modo vídeo;

◦ q – modo quieto (não toca os sons de entrada e saída);

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 160


4linux.com.br 10. Recursos da classe V

◦ d – adiciona dinamicamente a conferência;

◦ D – dinamicamente adiciona a conferência, pedindo pelo pin (personal


identification number). Quando ouvir o pedido do pin, se o usuário não
quiser um pin designado para a conferência ele deve discar ‘#’;

◦ M – Habilita música em espera quando a conferência tem um único


usuário;

◦ e – Seleciona uma conferência vazia;

◦ E – Seleciona uma conferência vazia sem pin.

• password – Especifica uma senha a aser solicitada para cada usuário que
entrar na sala de confer6encia.

10.5.2. Configuração

Vamos configurar a nossa sala de conferência. Para isso vamos apagar o conteúdo
do arquivo meetme.conf em /etc/asterisk e editar o seu novo conteúdo:

[general]
audiobuffers =32

[rooms]
conf => 5001
conf => 5002 ,123456

onde:

• audiobuffers=32 – Número de pacotes de áudio de 20ms que serão


guardados em um buffer de memória quando pertencem a canais que não
são DAHDI. Isto permite sincronizar o áudio dos distintos participantes e evitar
atrasos na voz. Pode ser um valor de 2 a 32.

• conf => ramal_da_sala,senha_de_acesso

10.5.3. Aplicação

Coloque no arquivo extensions.conf a sala de conferência 5001.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 161


4linux.com.br 10. Recursos da classe V

exten=>5001,1,MeetMe(5001)

10.6. Música de espera


O Asterisk, por padrão, já vem com algumas músicas que são utilizadas para
chamadas aguardando uma transferência ou em uma fila de atendimento. O diretório
padrão utilizado pelo Asterisk é o /var/lib/asterisk/moh. O Asterisk entende que as
músicas em espera podem ser organizadas em sessões, que são sub-diretórios
dentro de /var/lib/asterisk/moh, que por sua vez é a sessão denominada de
default.

O arquivo de configuração e controle das músicas de espera é o musiconhold.conf,


que fica em /etc/asterisk.

/etc/asterisk/musiconhold.conf

[default]
mode=files
directory=/var/lib/asterisk/moh
random=yes

onde:

• [default] – indica o nome da sessão;


• mode=files – indica para o Asterisk ler arquivos;
• directory=/var/lib/asterisk/moh – indica o diretório de onde as músicas
serão lidas;
• randon=yes – indica que vai usar os arquivos de som aleatoriamente.
O arquivo sip.conf precisa ser ajustado na seção [general] ou nas seções
individuais de cada ramal.

/etc/asterisk/sip.conf

[general]
musicclass=default

10.6.1. Comandos da *CLI> relacionados

Para visualizar as classes cadastradas e onde estão suas músicas:

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 162


4linux.com.br 10. Recursos da classe V

*CLI> moh show classes

Para visualizar as músicas reconhecidas pelo moh:

*CLI> moh show files

10.7. Siga-me
Para implementar esta funcionalidade é necessário criar um contexto específico para
ativar e desativar a funcionalidade. Este contexto pode ser criado dentro do
arquivo /etc/asterisk/extensions.conf. Veja o exemplo:

O primeiro passo é a criação dos contextos ativa e desativa do siga-me:

/etc/asterisk/extensions.conf

; Ativa Siga-me incondicional


[sigame-on]
exten => _*71*.,1,NoCDR()
exten => _*71*.,2,Set(DB(CF/${CALLERID(num)})=${EXTEN:4})
exten => _*71*.,3,Playback(beep)
exten => _*71*.,4,Playback(vm-saved)
exten => _*71*.,5,Hangup

; Desativa o siga-me incondicional


[sigame-off]
exten => _*72*,1,NoCDR()
exten => _*72*,2,DBdel(CF/${CALLERID(num)})
exten => _*72*,3,Playback(beep)
exten => _*72*,4,Playback(vm-saved)
exten => _*72*,5,Hangup

O segundo passo é criar/ajustar o contexto que cuida da discagem para os ramais e


é ele quem verifica se existe ou não o siga-me para o ramal.

[interna]
exten => _1XXX,1,Noop(CF/${EXTEN})
exten => _1XXX,2,Set(siga=${DB(CF/${EXTEN})})
exten => _1XXX,3,Dial(SIP/${siga},30,Ttw)

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 163


4linux.com.br 10. Recursos da classe V

exten => _1XXX,4,Dial(SIP/${EXTEN}) ;


exten => _1XXX,5,Hangup

Neste caso, todas as ligações que forem feitas para qualquer o número 1XXX, ele
vai verificar na base de dados do asterisk se existe algum registro CF referente ao
ramal de destino e se existe um valor para esse registro, caso haja, ele efetua o
siga-me, caso não faz a ligação normal.

Se você tem um arquivo de configuração extensions.conf zerado, apenas com o


contexto default criado, faça as seguintes alterações conforme abaixo:

[default]
include = > sigame-on
include = > sigame-off
include = > internas

10.8. VoiceMail
O VoiceMail, ou correio de voz é o serviço de "secretária eletrônica"do Asterisk, isto
é, ao identificar que o destino de uma chamada não está disponível, possibilita ao
originador da chamada deixar uma mensagem de voz, a qual é gravada em um
arquivo de áudio na caixa postal do ramal chamado.

Para configurar o correio de voz você deve seguir os seguintes passos:

1. Configure o arquivo voicemail.conf para criar os usuários e senhas do voicemail ;

2. Configure o arquivo extensions.conf para que uma chamada ocupada ou não


atendida seja direcionada para o utilitário VoiceMail();

3. Configure uma extensão para que o usuário possa o uvir seu correio de voz e
administrá-lo.

10.8.1. Configurando o arquivo voicemail.conf

Edite o arquivo: /etc/asterisk/voicemail.conf. Adicione as linhas a seguir para definir


os parâmetros de funcionamento do correio de voz:

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 164


4linux.com.br 10. Recursos da classe V

[general]
format=wav49|gsm|wav
attach=yes
delete=no
maxmsg=100
maxsecs=180
minsecs=10
maxsilence=3
serveremail=asterisk
emailsubject=[Voip 4Linux]: Nova Mensagem ${VM_MSGNUM} na caixa
postal ${VM_MAILBOX}
emailbody=Caro(a) ${VM_NAME}:\n\nvoce tem nova mensagem de
voz.\nDuracao:${VM_DUR}.\nEnviado por: ${VM_CALLERID}, em $
{VM_DATE}.\n Para ouvir sua caixa postal disque para
9900.\n\nObrigado!\n\n\tDexter\n\twww.dexter.com.br\n\t\n\n
emaildateformat=%A, %B %d, %Y at %r
[zonemessages]
brazil=America/Sao_Paulo|’vm-received’ QR 16
[default]
SIP/9001 => 1234,Dexter Clem,root@localhost, delete=yes
SIP/9002 => 1234,Administrativo,root@localhost , delete=yes
SIP/9003 => 1234,Comercial,root@localhost, delete=yes

10.8.2. Criando uma Macro para uso com Voicemail

Edite o arquivo: /etc/asterisk/extensions.conf e ao final dos contextos já criados


acrescente a [macro-ramal], esta Macro move a chamada para a aplicação Voicemail
caso o ramal esteja ocupado, não atender ou se estiver indisponível.

[macro-ramal]
exten => s,1,Dial(${ARG1}/${ARG2},20,tT) ;ARG1=SIP ; ARG2=90XX
exten => s,n,Goto(${DIALSTATUS},1)
exten => BUSY,1,VoiceMail(${ARG2},b)
exten => NOANSWER ,1,VoiceMail(${ARG2},u)
exten => CHANUNAVAIL ,1,VoiceMail(${ARG2},u)

[ramais]
exten => _90XX,1,Macro(ramal,SIP,${EXTEN})

Para criar as regras de discagem para que os usuários possam verificar suas caixas
postais, edite novamente o arquivo: /etc/asterisk/extensions.conf. Adicione as linhas
a seguir ao final do contexto treinamento para permitir aos seus usuários a consulta
as suas caixas postais

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 165


4linux.com.br 10. Recursos da classe V

exten => 9900,1,Answer


exten => 9900,n,VoiceMailMain(${CALLERID(num)}@default)
exten => 9900,n,HangUp

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 166


4linux.com.br 10. Recursos da classe V

10.9. Interface gráfica


O SNEP, por padrão, já vem com os principais recursos vistos até aqui já
configurados, além de recursos adicionais.

Para facilitar o entendimento e organizar os arquivos de configuração, o SNEP


utilizar os seguintes arquivos para configurar estes recursos:

/etc/asterisk/snep/snep-features.conf

• Estacionamento 700
• Captura direta *55 + No. Ramal
• Captura por grupo *8
• Siga-me – Ativar *20
• Siga-me – Desativar *21
• Não perturbe – ativar *22
• Não perturbe – Desativar *23
• Espionar Canais *99 + No. Ramal
• Espionar Canais – Sussurro *98 + No. Ramal
• Espionar Canais por grupo *97 + No. Ramal
• Espionar Canais por grupo – Sussurro *96 + No. Ramal
• Saber o número do ramal *503
• Gravar audio *100
• Ouvir última gravação do *100 *101
• Agenda (Cadastros >> Contatos) *12 + Cód (P/telefone fixo)
*13 + Cód (P/ telefone celular)

/etc/asterisk/snep/snep-authconferences.conf
/etc/asterisk/snep/snep-conferences.conf
• Salas de conferência 901 a 915

/etc/asterisk/snep/snep-musiconhold.conf

• Seções das músicas de espera

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 167


4linux.com.br 10. Recursos da classe V

Os recursos de voicemail e salas de conferência são configuráveis via Interface


gráfica, respectivamente, nas opções:

• Cadastros >> Conferências

• Configurações >> Músicas de espera

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 168


4linux.com.br 10. Recursos da classe V

10.10. Laboratório – Asterisk

10.10.1. Criando uma URA

• Criando as mensagens da URA

Vamos criar uma extensão para gerar as gravações a serem utilizadas nas
URAs que serão construídas mais adiante. Edite o arquivo
/etc/asterisk/extensions.conf e, dentro do contexto [interno], adicione as
seguintes linhas:

[interno]
...
exten => _777.,1,Record(${EXTEN:3}:ulaw)
exten => _777.,n,wait(1)
exten => _777.,n,Playback(${EXTEN:3})
exten => _777.,n,Hangup()

Recarregue o plano de discagem:

*CLI> diaplan reload

• Gravando as mensagens

Para gravar as mensagens, digite “777” seguido do nome do arquivo (código)


a ser gravado. Não se esqueça de digitar # para finalizar a gravação. Você
deverá ouvir o que foi gravado logo após o término da gravação.

Grave as seguintes frases:

Nome arquivo Mensagem


Você ligou para xyz, disque 1 para suporte, 2 para treinamento, 3 para
111
vendas ou aguarde
222 Você ligou para o suporte
333 Você ligou para o treinamento
444 Você ligou para vendas

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 169


4linux.com.br 10. Recursos da classe V

Dentro do arquivo /etc/asterisk/extensions.conf, no contexto [expediente],


comente a linha existente e adicione a linha chamando a ura, conforme
mostrado abaixo:

[expediente]
;exten => _FFXX,1,Dial(${HUNTGROUP},20,t)
exten => _X.,1,goto(ura,s,1)

Agora, crie um arquivo chamado ura.conf dentro de /etc/asterisk, com as


seguintes linhas:

[ura]
exten => s,1,Answer()
exten => s,2,BackGround(111)
exten => s,3,WaitExten(2)
exten => t,1,Dial(${TELEFONISTA})

exten=> 1,1,Playback(222)
exten=> 1,n,Dial(SIP/FF01)
exten=> 1,n,Hangup()

exten=> 2,1,Playback(333)
exten=> 2,n,Dial(SIP/FF02)
exten=> 2,n,Hangup()

exten=> 3,1,Playback(444)
exten=> 3,n,Dial(SIP/FF03)
exten=> 3,n,Hangup()

onde: FF = Número da sua Filial.

no arquivo /etc/asterisk/extensions.conf, insira, no contexto [interno], a


seguinte linha:

exten => 999,1,Goto(expediente,1234,1)

Recarregue o plano de discagem com o comando:

*CLI>dialplan reload

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 170


4linux.com.br 10. Recursos da classe V

10.10.2. Funções típicas do PABX

• Música em Espera

Prepare o seu plano de discagem para testar a música em espera editando o


arquivo /etc/asterisk/extensions.conf e adicionando a configuração abaixo
dentro do contexto [interno]:

[interno]
...
exten => 9100,1,Answer()
exten => 9100,n,MusicOnHold(default,30)

Recarregue o plano de discagem com o comando:

*CLI> dialplan reload

Teste a música em espera padrão discando para a extensão 9100

• Transferência Direta (Blind Call Transfer)

Altere o valor do parâmetro featuredigittimeout dentro do arquivo


/etc/asterisk/features.conf. Esta variável controla o tempo entre um dígito e
outro que será interpretado pelo Asterisk. O seu valor padrão corresponde a
1000 ms, o qual é curto. Altere este valor para 2000 ms (2 segundos) e
descomente a linha.

Ainda no mesmo arquivo, descomente a linha: blindxfer => # dentro do


contexto [featuremap] (Não esqueça de apagar o número 1 que está junto ao
#).

Recarregue as configurações, digitando no asterisk o seguinte comando:

*CLI> module reload features

Para testar a transferência de chamadas direta, a partir do softphone disque


para um dos telefones IP;

No telefone, tecle #, você vai ouvir a mensagem “transfer” ou “transferência” e


após digite o ramal do outro telefone e novamente #.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 171


4linux.com.br 10. Recursos da classe V

• Transferência Assistida (Consultative Call Transfer)

Entre no arquivo /etc/asteriskfeatures.conf e retire o comentário da linha


atxfer => *2.

Recarregue as configurações, digitando no asterisk o seguinte comando:

*CLI> module reload features

Disque do softphone para o telefone IP. No telefone IP disque *2 para


transferir para o número desejado. Após falar com o destino desligue o
telefone para completar a transferência.

• Call Parking (estacionamento de chamadas)

Prepare o seu plano de discagem para o estacionamento de chamadas. No


contexto [interno], insira a seguinte linha:

include => parkedcalls

Recarregue as configurações, digitando no asterisk o seguinte comando:

*CLI> dialplan reload

Para testar o estacionamento de chamadas: disque de um ramal para outro.

Após atender, transfira a ligação para o número 700. O sistema vai lhe
informar o número da sala onde a ligação foi estacionada. Desligue.

Agora disque para o número da sala informado no item anterior e veja o que
acontece.

• Call Pickup (captura de chamadas)

Prepare o Asterisk para a captura de chamadas editando o arquivo


/etc/asterisk/features.conf e descomente a linha: pickupexten = *8

Recarregue as configurações, digitando no asterisk o seguinte comando:

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 172


4linux.com.br 10. Recursos da classe V

*CLI> module reload features

Prepare seus ramais SIP para a captura de chamadas editando o arquivo


/etc/asterisk/sip.conf e adicione as linhas abaixo na configuração de todos
os ramais:

callgroup=1
pickupgroup=1
directmedia=no

Recarregue as configurações digitando o comando:

*CLI> sip reload

Peça para alguém de outra filial para discar para um dos seus ramais.

A partir do outro telefone (que não está tocando) disque *8# e capture a
ligação.

• Implementando uma sala de conferência

Prepare o Asterisk para a utilização de Salas de Conferência. Edite o arquivo


/etc/asterisk/meetme.conf e adicione as linhas abaixo no final do arquivo
dentro da sessão rooms:

conf=>9500
conf=>9501,1234

Recarregue as configurações digitando o comando:

*CLI> reload app_meetme.so

Prepare o seu plano de discagem para a utilização de salas de conferência.


Edite o arquivo /etc/asterisk/extensions.conf e adicione a configuração
abaixo dentro do seu contexto [interno]:

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 173


4linux.com.br 10. Recursos da classe V

exten=>9500,1,MeetMe(9500)
exten=>9501,1,Meetme(9501)

Recarregue as configurações digitando o comando:

*CLI> dialplan reload

Teste ligando do softphone e do telefone IP para a sala de conferência.

Peça para alguém dos outros grupos para discar para algum dos seus ramais
e transfira a ligação para uma das salas de conferência.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 174


4linux.com.br 10. Recursos da classe V

10.11. Laboratório – SNEP


Todos os recursos de classe V já estão definidos no SNEP. Aguns ajustes são
necessários:

• Incluindo MOH SNEP no Asterisk: Edite o arquivo


/etc/asterisk/musiconhold.conf e, no seu final, insira a seguinte linha:

#include snep/snep-musiconhold.conf

Recarregue as configurações digitando os comandos:

*CLI> reload res_musiconhold.so

10.11.1. Testando recursos no SNEP

• No menu Cadastros >> Salas de Conferência, ative uma sala de


conferência e faça os testes de funcionamento transferindo chamadas
recebidas para a sala;

• Ative o recurso Não perturbe em seu telefone através do recurso *22


◦ Verifique se o recurso foi ativado olhando em Relatorios >> Serviços
Utilizados.
◦ Desative o recurso através da combinação *23 e verifique novamente o
relatório.

• Repita o teste, mas agora para o recurso siga-me (*20 e *21).

• No menu Configurações >> Musicas de espera, crie uma nova seção


chamada curso e transfira uma música de espera para esta seção.
Verifique: Se o diretório /var/lib/asterisk/moh/curso foi criado
# ls /var/lib/asterisk/moh

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 175


4linux.com.br 10. Recursos da classe V

Verifique: Se a música está no diretório criado


# ls /var/lib/asterisk/moh/curso

• No menu Cadastros >> Grupos de Captura, crie um grupo de captura


chamado Curso e em seguida coloque seus ramais neste grupo.
◦ Peça para alguém ligar para um de seus ramais e tente “capturar a
chamada utilizando o ramal que não está tocando.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 176


Módulo 11

DAC
4linux.com.br 11. DAC

11. DAC
O DAC (Distribuição de Chamadas Automaticamente) é composto por Filas e
Agentes. As filas são configuradas no arquivo queues.conf e os agentes no arquivo
agents.conf. As filas são grupos de agentes/ramais que irão receber as chamadas
entrantes na fila. Os agentes são os dispositivos que irão receber as chamadas. O
principio de funcionamento das filas de atendimento pode ser resumido nos
seguintes passos:

1. As chamadas entrada são colocadas na fila;


2. Membros da fila atendem (extensões que autenticaram como agentes);
3. Uma estratégia de gerenciamento e distribuição da fila é usada;
4. É tocada música enquanto o usuário espera na fila;
5. São feitos anúncios para membros e para quem está na fila.

11.1. Ramais x Agentes


Os agentes são extensões de telefone que são usados por seres humanos. Os
agentes se diferenciam dos ramais pela necessidade de fazer login e logoff para
inciar e para o seu uso. Este recurso permite que um agente utilize qualquer ramal
físico e as chamadas serão sempre creditadas a ele, facilitando assim a bilhetagem.

Recursos adicionais como “pausas” podem ser atribuídas aos agentes, fazendo com
que os mesmos fiquem sem receber chamadas temporariamente. Os agentes foram
criados com o propósito principal de estarem logados em filas de atendimento.

Ramais também podem estar em filas de atendimento e, assim como os agentes,


podem pertencer a mais de uma fila.

11.2. Estratégias de distribuição


Chamadas são distribuídas entre os membros de uma fila de acordo com uma entre
várias estratégias.

• ringall – Toca todos os canais disponíveis até que um atenda;

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 178


4linux.com.br 11. DAC

• roundrobin – Distribui igualmente as chamadas pelas interfaces.

• leastrecent – Distribui para a interface que menos recebeu chamadas.

• fewestcalls – Toca aquela com menos chamadas completadas.

• random – Toca uma interface aleatória

• rrmemory – Roundrobin com memória, se lembra onde deixou a última


chamada.

11.3. Configuração

11.3.1. Filas de atendimento

Edite o arquivo /etc/asterisk/queues.conf e adicione as linhas a seguir:

[general]
persistentmembers = yes
autofill = yes
monitor-type = MixMonitor
;
[Comercial] ;; Nome da fila
musicclass = default
strategy = ringall
timeout = 15
retry = 5
maxlen = 0

onde:

• persistentmembers – Armazena os membros no AstDB para que ao reiniciar


o Asterisk, os membros automaticamente voltem para as filas que fazem
parte;
• autofill – A quantidade de chamadas entregue será igual ao número de
agentes disponíveis para atendimento;
• monitor-type – Usa a nova aplicação MixMonitor ao invés de Monitor. As
chamadas na fila serão gravadas e mixadas;
• musicclass – Indica que classe de música será utilizada na fila;
• announce – Anuncia ao agente em qual fila ele está atendendo a chamada;

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 179


4linux.com.br 11. DAC

• strategy – São várias as estratégias de distribuição das chamadas entre os


agentes;
• timeout – Quanto tempo de ring é utilizado antes de considerar o Timeout e
passar para outro agent;
• maxlen – Quantidade máxima de pessoas esperando na fila. 0 (zero) significa
ilimitado;
• retry – Quanto tempo de espera antes de tentar todos os membros
novamente.
• setinterfacevar – Se configurado para yes, pouco antes da chamada ser
comutada com um agente de fila, a variável MEMBERINTERFACE seá
definida com o nome da interface (ex. Agent/1234);
• announces – Conjunto de opções de anúncio de posição e de tempo de
espera na fila.

11.3.2. Os agentes

O arquivo /etc/asterisk/agents.conf contem os dados dos agentes. Assim como o


sip.conf e o iax.conf, este arquivo possui diretivas globais (que valem para todos os
agentes) e as diretivas individuais.

/etc/asterisk/agents.conf

[general]
persistentagents=yes
multiplelogin=yes
;
[agents] ; aqui se inicia as configurações dos
agentes
maxlogintries=3
autologoff=15
autologoffunavail=yes
endcall=yes
musiconhold => default
group=1
; ======= Definicao dos agentes =======
; Essa parte é dedicada a configuração do agente seguindo a
sintaxe:
; agent => agentid,agentpassword,name
[agents]
agent => X00,X00,Agente X00
agent => X01,X01,Agente X01

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 180


4linux.com.br 11. DAC

onde:

• persistentagents=yes – define se o callbacklogin terá que ser armazenado


em uma base de dados interna do Asterisk. Assim toda vez que reiniciarmos o
Asterisk esses dados serão recarregados automaticamente;

• multiplelogin=yes – define se é permitido que uma mesma extensão pode-


se conectar com multiplos agentes;

• maxlogintries=3 – número máximo de tentativas que tem um agente para


conectar;

• autologoff=15 – se um agente não atende uma chamada dentro de 25


segundos ele será desconectado automaticamente;

• autologoffunavail=yes – se a extensão que o agente se conecta estiver


indisponível automaticamente o agente é deslogado;

• endcall=yes – um agente pode terminar uma chamada usando a tecla * ;

• musiconhold => default – é a classe da música de espera que o agente


escutará quando estiver logado.

11.4. Login e Logout de Agentes


Para efetuar Login e Logout dos agentes é necessário definir extensões que
executem as aplicações do Asterisk próprias para esta finalidade.

Para Login, utilizamos a aplicação AddQueueMember, cuja sintaxe é:

AddQueueMember(fila, agente)

Exemplo, no plano de discagem:

; Login do Agente
exten => _550,1,Answer
exten => _550,2,AddQueueMember(Comercial,Agent/${CALLERID(num)})
exten => _550,3,Hangup

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 181


4linux.com.br 11. DAC

Para Logout, utilizamos a aplicação RemoveQueueMember, cuja sintaxe é:

RemoveQueueMember(fila, agente)

Exemplo o plano de discagem:

; Logout do Agente
exten => _551,1,Answer
exten => _551,2,RemoveQueueMember(Comercial,Agent/$
{CALLERID(num)})
exten => _551,3,Hangup

11.5. Habilitando a gravação nas filas


Para habilitar as gravações, ajuste o arquivo queues.conf e no contexto [general],
insira as seguintes diretivas.

/etc/asterisk/queues.conf

[general]
;Habilita a gravação de chamadas endereçadas aos agentes.
;
monitor-type=MixMonitor
;
;Formato usado para gravar as chamadas (wav, gsm, wav49)
;O mais indicado é o wav49 pois ocupa pouco espaço e é compatível
;com a maioria dos Sistemas Operacionais.
;
monitor-format=gsm|wav|wav49;
;
;O diretório padrão para salvar as gravações
;
/var/spool/asterisk/monitor

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 182


4linux.com.br 11. DAC

11.6. Interface gráfica


A Fila é uma das funcionalidades que o SNEP tem para a implementação de um Call
center básico ou um DAC. Filas permitem que vários ramais façam parte de um
grupo para que chamadas de entrada possam ser direcionadas para este. Filas, em
seu conceito direto, permitem que um ou mais chamadores fiquem aguardando o
atendimento enquanto um agente ou operador não estiver disponível.

As principais informações pertinentes a uma Fila de Atendimento são:

• Nome da fila : nome que identifica a fila. Observar para não usar espaços ou
caracteres acentuados/especiais como: çãé@#%...;
• Classe das músicas de espera: conjunto de arquivos de som a serem
usados como músicas de espera. (Veja mais em: Configurações >> Músicas
em Espera);
• Arquivo de anúncio da fila: define o arquivo de som que contém a
mensagem informando o nome da fila que o chamador está;
• Intervalo de repetição das mensagens: tempo em segundos que as
mensagens de aviso serão repetidas durante uma espera;
• Estratégia de distribuição: Estratégias de distribuição de chamadas

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 183


4linux.com.br 11. DAC

11.6.1. Membros de uma Fila

Estáticos: geralmente atribuídos a ramais físicos que ficarão na fila em tempo


integral. Para cadastrar um membro estático em uma fila, clique no ícone Membros
da fila, selecione os ramais, mova-os para a “caixa da direita” e salve.

Dinâmicos: também chamados de agentes, devem ser cadastrados no sistema


informando-se código, nome e senha, e quando associado a uma uma fila, possui as
seguintes funcionalidades:

• *01 + Cód Agente: efetua login na Fila


• *02 + Cód Agente: efetua logoff da Fila
• *03 + Cód Agente: entra em PAUSA
• *04 + Cód Agente: sai da PAUSA

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 184


4linux.com.br 11. DAC

11.7. Laboratório – Asterisk

11.7.1. Implementando distribuição automática de chamadas

Neste exercício criaremos uma fila de atendimento para o departamento fictício de


vendas com dois agentes de atendimento. Para isso prepare o Asterisk para a
utilização da Distribuição Automática de Chamadas.

Edite o arquivo /etc/asterisk/queues.conf e adicione as linhas abaixo:

[vendas]
strategy=rrmemory
music = default
timeout = 15
retry = 2
maxlen = 0

• Recarregue o módulo na CLI para ativar as alterações realizadas.

*CLI> module reload app_queue.so

Confirme se a configuração da fila foi carregada com sucesso na CLI.


*CLI> queue show

Prepare o plano de discagem para a utilização da DAC.

Edite o arquivo /etc/asterisk/extensions.conf e adicione a configuração abaixo


dentro dos contextos indicados:

[interno]
;Executa Login do agente
exten => 550,1,Set(FILA=vendas)
exten => 550,n,Goto(memberAdd,s,1)

;Executa Logoff do agente


exten => 551,1,Set(FILA=vendas)
exten => 551,n,Goto(memberRemove,s,1)

[from-pstn]
; Recebendo as ligações do seu provedor e entregando no DAC
exten=>0800FF,1,Answer ; FF = Número da sua filial

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 185


4linux.com.br 11. DAC

exten=>0800FF,2,Queue(vendas) ; FF = Número da sua filial

[to-pstn]
;Discando para DAC das outras filiais
exten => _0800XX,1,Dial(SIP/${EXTEN}@op-voip,20,tT)

[memberAdd]
exten => s,1,AddQueueMember(${FILA},SIP/${CALLERID(NUM)})
exten => s,n,ExecIf($["${AQMSTATUS}" = "ADDED"]?Background(agent-
loginok))
exten => s,n,hangup()

[memberRemove]
exten => s,1,RemoveQueueMember(${FILA},SIP/${CALLERID(NUM)})
exten => s,n,ExecIf($["${RQMSTATUS}" = "REMOVED"]?
Background(agent-loggedoff))
exten => s,n,hangup()

Obs.: FF é o número da sua filial. Não esqueça de digitar “dialplan reload” para
ativar as alterações realizadas.

Teste

• Disque para o número 550 do seu ramal SIP para se logar como um agente.
• Digite o comando

*CLI> queue show vendas

• Peça para outro aluno ligar para a sua filial 0800NFF, onde FF é o número da
sua filial.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 186


4linux.com.br 11. DAC

11.8. Laboratório – SNEP


• Criando uma fila de atendimento: A partir do menu Cadastros >> Filas, crie
uma fila com os seguintes parâmetros:

◦ Nome da Fila: atendimento


◦ Músicas de espera: default

• Adicionando membros na fila: Na lista de filas cadastradas, clique no ícone


“Membros” e associe os ramais desejados à fila “atendimento”

• Ajustando as rotas: Altere a rota que recebe chamadas das filiais e, troque a
ação:

◦ Discar para Ramal

por

◦ Discar para fila

• Teste: Peça para um colega de outra filial discar para seu ramal. Note que:

◦ Para você, o telefone vai tocar normalmente;


◦ Para a filial, será tocada uma música de espera.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 187


Módulo 12

Segurança
4linux.com.br 12. Segurança

12. Segurança

12.1. Execução do processo Asterisk


Por padrão, o processo do Asterisk é configurado para ser executado com o usuário
root. Em questões de segurança, esta não é uma boa prática. Por isso a troca do
usuário de execução do Asterisk é importante. Para fazer este processo:

• Pare o Asterisk.

# /etc/init.d/asterisk stop

• Crie o grupo asterisk.

# groupadd asterisk

• Crie o usuário asterisk e adicione no grupo asterisk.

# /usr/sbin/useradd -d /var/lib/asterisk -g asterisk asterisk

• Mude os donos e grupos dos diretórios do asterisk

# chown -R asterisk:asterisk /var/lib/asterisk


# chown -R asterisk:asterisk /var/log/asterisk
# chown -R asterisk:asterisk /var/run/asterisk
# chown -R asterisk:asterisk /var/spool/asterisk
# chown -R asterisk:asterisk /usr/lib/asterisk
# chown -R root:asterisk /etc/asterisk

• Edite o arquivo /etc/asterisk/asterisk.conf e ajuste a linha astrundir:

astrundir => /var/run/asterisk

• Altere o script de start do asterisk para informar qual usuário.Faça um backup


do arquivo atual:
# cp /etc/init.d/asterisk /etc/init.d/asterisk.old

• Edite o arquivo /etc/init.d/asterisk e descomente as linhas abaixo:

AST_USER=asterisk
AST_GROUP=asterisk

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 189


4linux.com.br 12. Segurança

12.2. Segurança nos arquivos de configuração


Ajustar as permissões de arquivos e diretórios é outra boa prática no gerenciamento
de sistemas abertos. No Asterisk não é diferente, portanto, tenha em mente seguir
sempre as normas mais comumente utilizadas para permissões de arquivos e
diretórios. No caso do Asterisk:
• Mude as permissões dos diretórios:

chmod 750 /var/lib/asterisk -R


chmod 750 /var/log/asterisk -R
chmod 750 /var/run/asterisk -R
chmod 750 /var/spool/asterisk -R
chmod 750 /usr/lib/asterisk -R
chmod 750 /etc/asterisk -R

12.3. Rejeitando autenticação


Por padrão, o Asterisk aceita chamadas vindas de qualquer peer, para que nenhum
usuário ou cracker invada seu servidor e dispare ligações para todos os ramais com
a aplicação “SIPP” abaixo é descrito como bloquear esta ação. Dentro do arquivo sip
adicione/ajuste as seguintes linhas:

Allowguest=no
Autocreatepeer=no
alwaysauthreject = yes
call-limit=1 deny =0.0.0.0/0.0.0.0
permit =192.168.0.0/255.255.255.0 a
lwaysauthreject=yes
realm=sip.4linux.com.br
domain=sip.4linux.com.br

onde:

• Allowguest=no – Não permite com que o Asterisk receba chamada de


nenhum usuário desconhecido ou host;
• Autocreatepeer=no – Não permite criar peer automática;
• Deny=0.0.0.0/0.0.0.0 – Não aceitar pedidos de autenticação SIP de todos os
endereços IP;
• Allow=192.168.0.0/24 – Use para permitir que apenas um subconjunto
razoável de endereços IP para alcançar cada listadas extensão / usuário em

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 190


4linux.com.br 12. Segurança

seu ser;
• Alwaysauthreject = yes Esta opção foi por um tempo (desde 1.2?), mas o
padrão é "não", que permite o vazamento de informações de extensão. Definir
esta opção como "sim" irá rejeitar os pedidos de autenticação de usuários
válidos ruim com as informações rejeição mesmo que com nomes de usuário
inválido, negando atacantes remotos a capacidade de detectar extensões
existentes com ataques de força bruta adivinhar;
• Realm=sip.4linux.com.br – Define qual nome de domínio real para facilitar a
tradução de endereço para o usuário;
• domain=sip.4linux.com.br – FQDN de domínio do Asterisk.

12.4. Fail2Ban e Asterisk


Fail2ban é um serviço que monitora os logs de diversos serviços em busca de uma
expressão regular específica definida em suas configurações. Assim o atacante que
efetuar diversas tentativas de acesso em um determinado serviço (no nosso caso
Asterisk) por X vezes em um pequeno intervalo de tempo, será automaticamente
bloqueado através do iptables (Linux), por 3600 segundos (padrão).

12.4.1. Download

Para dar início as configurações, vamos efetuar o download do produto no seguinte


endereço:

• Link do Projeto: http://www.fail2ban.org/wiki/index.php/Downloads

• Link de Download: http://sourceforge.net/projects/fail2ban/files/

Neste documento estamos usando a versão fail2ban-0.8.4.tar.bz2você pode efetuar


o download de uma versão mais atual, lembre-se de sempre usar um source estável.
Após o baixar o pacote, precisaremos descompactar o arquivo, para isso
precisaremos do pacote bzip2, caso esteja inexistente no seu sistema, você deverá
instalar este pacote, no Debian, basta seguir estes procedimentos:

# apt-get update
# apt-get install bzip2

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 191


4linux.com.br 12. Segurança

Para descompactar o pacote:

# tar -xvf fail2ban-0.8.4.tar.bz2

Após descompactar o pacote, o ideal é que o arquivo README seja lido com
atenção, adiantando o processo, um requisito do produto (contido no leia-me, seria a
versão do Python >= ao 2.3). Instale-o:

# apt-get update
# apt-get install python (ou python2.4)

Agora estamos prontos para instalação e configuração! Lembre-se sempre de ler a


documentação do produto para desenvolver novas features ou modificar qualquer
item não incluso neste manual durante o procedimento de instalação.

12.4.2. Instalação

# cd fail2ban-0.8.4
# python setup.py install

Feito isso, o produto estará instalado no seu sistema operacional, no diretório:


/usr/share/fail2ban ou em/usr/local/share/fail2ban.

Não vamos editar nada neste diretório. O que interessa neste momento é a
verificação da existência dos arquivos binários no nosso PATH. O comando a seguir
deverá exibir a versão do produto:

# fail2ban-server -V

Repita o procedimento para os outros executáveis para confirmar suas existências:

# fail2ban-client -V
# fail2ban-regex -V

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 192


4linux.com.br 12. Segurança

Obs 1:Caso não consiga visualizar as informações do produto, você deverá


adicionar o PATH dos executáveis ao seu .bashrc ou adicioná-los ao PATH do
usuário root.

Obs 2: As novas versões do produto, criam as pastas automaticamente, sem a


necessidade da execução dos dois procedimentos abaixo, antes de executar estes
procedimentos, verifique se as pastas já existem em seu sistema, caso sim, prossiga
para script de inicialização e configurações.

Agora vamos criar os diretórios de configurações do serviço. No Debian as


configurações padrão seriam:

# mkdir -p /etc/fail2ban
# chown root.root /etc/fail2ban -R

Copie o conteúdo da pasta “config”no diretório de instalação do produto para:


/etc/fail2banda seguinte forma:

# cp -arv /root/fail2ban-0.8.4/config/* /etc/fail2ban

12.4.3. Script de Inicialização

O pacote source não contém o script de inicialização automática (RC’s), portanto é


necessário copiá-lo no site do projeto e salvá-lo em nosso sistema operacional, crie
o arquivo “/etc/init.d/fail2ban” e no link abaixo, copie o script de inicialização:

• http://www.fail2ban.org/wiki/index.php/MANUAL_0_8. O Script está no


Item 2.2 “Installing from sources on a GNU/Linux system”

Apenas alguns ajustes serão necessários neste script, vamos precisar organizar o
PATH (caso necessário. No meu caso, os executáveis estão em /usr/local/bin), edite
no arquivo /etc/init.d/fail2ban as seguintes linhas:

• (Linha 19 ADD) PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin/

• (Linha 25 EDIT)DAEMON=/usr/local/bin/$NAME-client

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 193


4linux.com.br 12. Segurança

Salve e saia do arquivo, aplique permissões de execução para o arquivo:

# cd /etc/init.d/
# chmod +x fail2ban

Inicie o serviço e verifique o status de funcionamento:

# /etc/init.d/fail2ban start

Verificando se a execução está em andamento:

# netstat -nlp | grep fail2ban

deve responder algo como:

LISTENING 10580 5111/python /var/run/fail2ban/fail2ban.sock

Olhando os logs:

# tail -f /var/log/fail2ban.log

deve responder algo como:

fail2ban.server : INFO Changed logging target to


/var/log/fail2ban.log for Fail2ban v0.8.4

Agora que o serviço está ativo em execução, vamos definir sua inicialização
automática no Sistema Operacional:

# cd /etc/init.d/
# update-rc.d -f fail2ban defaults

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 194


4linux.com.br 12. Segurança

12.4.4. Configuração

Por padrão as configurações do fail2ban estão no arquivo “jail.conf” localizado em:


“/etc/fail2ban/”. Para começar a monitorar o Asterisk, devemos adicionar no final
deste arquivo as seguintes configurações:

#
# Asterisk
#
[asterisk]
enabled = true
filter = asterisk
action = iptables-allports[name=asterisk, protocol=all]
sendmail-whois[name=Asterisk, dest= TI@EMPRESA.com.br, sender=
security@CLIENTE.com.br]
logpath = /var/log/asterisk/full
maxretry = 5
bantime = 172800

Outra configuração importante no arquivo /etc/fail2ban/jail.conf é:

• ignoreip – ela é responsável por não bloquear a própria máquina, a rede


interna do cliente, ou qualquer IP Externo que deva conectar ao serviço
Asterisk ou qualquer outro serviço monitorado pelo fail2ban, sendo assim,
configure da seguinte forma:

ignoreip = 127.0.0.1 192.168.0.0/24 200.200.200.200


100.100.100.100

Com a configuração do Asterisk criada em “/etc/fail2ban/jail.conf” e o ignoreip


devidamente setado para não bloquear nossas redes, precisamos agora criar o
arquivo responsável pela leitura de logs do Asterisk.

Dentro de “/etc/fail2ban/filter.d” crie o arquivo “asterisk.conf”

• ATENÇÃO: O nome do arquivo criado na pasta “/etc/fail2ban/filter.d/” deve ser


IGUAL ao nome dado na opção “filter” para cada serviço no “jail.conf”, ou
seja, se eu tenho uma filter chamada asterisk, meu arquivo deve ser chamar
asterisk.conf dentro da pasta “/etc/fail2ban/filter.d/”:

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 195


4linux.com.br 12. Segurança

/etc/fail2ban/filter.d/asterisk.conf

# Fail2Ban configuration file


# $Revision: 250 $
#
[INCLUDES]
[Definition]
#_daemon = asterisk
# Option: failregex
# Notes.: regex to match the password failures messages in the
logfile. The
# host must be matched by a group named "host". The tag "<HOST>"
can
# be used for standard IP/hostname matching and is only an alias
for
# (?:::f{4,6}:)?(?P<host>\S+)
# Values: TEXT
#

failregex = NOTICE.* .*: Registration from '.*' failed for


'<HOST>:.*' - Wrong password

NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - No


matching peer found

NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' -


Username/auth name mismatch

NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' -


Device does not match ACL

NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - Peer


is not supposed to register

NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - ACL


error (permit/deny)

NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' -


Device does not match ACL

NOTICE.* <HOST> failed to authenticate as '.*'$

NOTICE.* .*: No registration for peer '.*' \(from <HOST>:.*\)

NOTICE.* .*: Host <HOST> failed MD5 authentication for '.*' (.*)

NOTICE.* .*: Failed to authenticate user .*@<HOST>:.*

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 196


4linux.com.br 12. Segurança

ignored.
# Values: TEXT
#
ignoreregex =

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 197


Módulo 13

Asterisk Realtime
4linux.com.br 13. Asterisk Realtime

13. Asterisk Realtime


O arquivo de configuração do Asterisk é bastante simples de mexer, porém a titulo
de criação de interfaces e outras ferramentas, ter as informações no banco de dados
facilita bastante o nosso trabalho e, além disso, permite uma configuração mais
dinâmica sem a necessidade de fazer reload a cada alteração de arquivo.

13.1. Como funciona


O Asterisk Realtime permite utilizar um banco de dados, como MySQL, para
armazenar as configurações em vez dos tradicionais arquivos de texto no
/etc/asterisk.

Além dos dados ficarem em tabelas do MySQL, também a recarga das alterações
são feitas automaticamente pelo Asterisk dispensando o comando reload, isto
porque quando chega uma requisição no Asterisk ele procura a informação no banco
caso não seja encontrada na memória.

13.2. Configurar o Asterisk Real Time


O Asterisk possui alguns módulos específicos para alguns tipos de banco de dados
como o PostgreSQL, MySQL e ODBC. Provavelmente será necessário recompilar o
Asrterisk para poder ativar os recursos de acesso ao banco.

13.2.1. Dependências

No sistema operacional temos poucas dependências

# apt-get install gcclibxml2-dev unixodbc-dev mysql-server


libmyodbc

Após instalar as dependências, recompile o asterisk.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 199


4linux.com.br 13. Asterisk Realtime

13.2.2. Configurando o ODBC

Edite o arquivo /etc/unixodbc.ini:

[asterisk]
Driver = MySQL
Description = MySQL ODBC 3.51 Driver DSN
Server = localhost
Port = 3306
Database = asterisk
Option = 3
Socket =

Edite o arquivo /etc/odbcinst.ini:

[MySQL]
Description = MySQL driver
Driver = /usr/lib/odbc/libmyodbc.so
Setup = /usr/lib/odbc/libodbcmyS.so
CPTimeout =
CPReuse =

13.2.3. Habilitar o acesso ao MySQL

Edite o arquivo /etc/asterisk/res_odbc.conf para adicionar o datasource ao


Asterisk:

[asterisk]
enabled => yes
dsn => asterisk
; Altere abaixo o usuario de conexao com o banco
username => myuser
; Altere abaixo a senha de conexao com o banco
password => mypass
pre-connect => yes

13.2.4. Especificando para usar o sip pelo banco

Edite o arquivo /etc/asterisk/extconfig.conf:

[settings]
sippeers => odbc,asterisk,sipfriends

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 200


4linux.com.br 13. Asterisk Realtime

13.2.5. Criando o banco de dados

Os passos a serem executados no banco de dados compreendem:

• Criar um arquivo sipfriends.sql com o conteúdo sql da tabela que pode ser
encontrado em:

http://www.voip-info.org/wiki/view/Asterisk+RealTime+Sip.

• Criar o database e nossa tabela, utilizando os comandos:

# mysqladmin -uroot -p -e “create database asterisk”


# mysql -uroot -p asterisk < sipfriends.sql

• Dar os privilégios de acesso ao banco para um usuario:

# mysql -uroot -p asterisk


Enter password:

mysql >GRANT ALL ON asterisk.* to


USUARIO_A_SER_USADO@'localhost' IDENTIFIED BY
'SENHA_A_SER_USADA'

Lembre-se de usar o mesmo usuário e senha especificado para o odbc, caso o


banco esteja em servidor separado, troque o valor de localhost para o ip do servidor
asterisk.

13.3. Criando ramais


A criação de ramais compreende simplesmente popular a tabela sipfriends com as
informações de cada ramal a ser criado.

Nao havendo erro nenhum você pode configurar o usuário 1000 com a senh
“senha$456” no telefone ou softphone.

Ao se registrar você verá uma mensagem similar a abaixo no *CLI> do Asterisk.

-- Registered SIP '1000' at 162.17.98.65:51797

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 201


4linux.com.br 13. Asterisk Realtime

Para poder verificar o status, você pode usar o comando abaixo no cli do asterisk

*CLI> sip show peer 1000 load

Importante! Uma vez configurado o Realtime, os ramais criados em banco


⚠ não ficam na memória, ou seja, não é possível visualizar as informações com
o comando “*CLI> sip show peers”. Caso seja necessário armazenar em memória
inclua no sip.conf o parâmetro “rtcachefriends=yes”.

Laboratório – Asterisk

O objetivo deste laboratório e que o aluno aprenda como configurar o sistema


realtime para criar os canais SIP e as extensões em um banco de dados mysql.
Duas extensões novas serão criadas NN10 e NN11 e os telefones serão
reconfigurados para estas extensões demonstrando o funcionamento do sistema
realtime.

• Edite o arquivo de configuração do RealTime.

# cd /etc/asterisk
# gedit res_mysql.conf

res_mysql.conf

[general]
dbhost = 127.0.0.1
dbname = asteriskdb
dbuser = asterisk
dbpass = asterisk
dbport = 3306
;dbsock = /tmp/mysql.sock

• Crie o banco de dados asteriskdb no MySQL.

# mysql -u root -p
Enter password:

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 202


4linux.com.br 13. Asterisk Realtime

mysql> create database asteriskdb;


mysql> grant all privileges on asteriskdb.* to asterisk@localhost
identified by 'asterisk';

• Para criar as tabelas necessárias no MySQL, faça do dowload do arquivo


SQL com os comandos necessários a criação do banco de dados.

wget http://endereçoipdoinstrutor/realtime/realtime.sql
mysql –p –u asterisk <realtime.sql

• Para configurar o realtime, edite o arquivo extconfig.conf e adicione as


seguintes linhas para configurar as bases de dados a serem usadas no real-
time.

/etc/asterisk/extconfig.conf

[settings]
iaxusers => mysql,asteriskdb,iax_buddies
iaxpeers => mysql,asteriskdb,iax_buddies
sipusers => mysql,asteriskdb,sip_buddies
sippeers => mysql,asteriskdb,sip_buddies
voicemail => mysql,asteriskdb,voicemail
extensions => mysql,asteriskdb,extensions_table

• Recarregue o servidor asterisk e verifique se o realtime carregou


corretamente usando o seguinte comando na linha de comando do Asterisk.

*CLI>realtime mysql status

A resposta deve ser algo parecido com:


Connected to asteriskdb@127.0.0.1, port 3306 with username
asterisk for 1 minutes, 14 seconds.

• Insira dois registros no banco de dados MySQL na tabela sip_buddies usando


os comandos abaixo.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 203


4linux.com.br 13. Asterisk Realtime

# mysql -u asterisk -p
Enter password:

mysql> USE asteriskdb;


mysql> INSERT INTO sip_buddies(name, canreinvite, context,
dtmfmode, host, secret) VALUES ('FF10', 'no', 'default',
'rfc2833', 'dynamic', 'FF10');
mysql> INSERT INTO sip_buddies(name, canreinvite, context,
dtmfmode, host, secret) VALUES ('FF11', 'no', 'default',
'rfc2833', 'dynamic', 'FF11');

Onde: FF é o número da sua filial.

• Inclua as extensões no banco de dados.

# mysql -u asterisk -p
Enter password:
mysql> use asteriskdb;
mysql> insert into extensions_table(id, context, exten, priority,
app, appdata) VALUES ('1','teste', 'FF10','1','Dial','SIP/FF10');
mysql> insert into extensions_table(id, context, exten, priority,
app, appdata) VALUES ('2','teste', 'FF11','1','Dial','SIP/FF11');

• Inclua as extensões RealTime no plano de discagem, no contexto [default].

switch => realtime/teste@extensions

• Recarregue as extensões para habilitar o RealTime.

*CLI>dialplan reload

• Reconfigure seu telefone SIP e o softphone para os ramais NN10 e NN11 Não
se esqueça de reiniciar os telefones para que se registrem novamente. Use o
comando sip show peers e verifique que os peers não aparecem enquanto
não há uma ligação.
*CLI>sip show peers

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 204


4linux.com.br 14. Os Autores

14. Os Autores
Felipe Ribeiro Pasa, profissional de redes Asterisk certificado dCAP e LPI possui 8
anos de experiência com projetos e implantação de redes VoIP e 10 anos de
experiência com Linux. Já desempenhou várias funções como suporte, analista de
redes, desenvolvimento e pré-venda de equipamentos para redes VoIP. Atua como
instrutor Asterisk e Linux desde 2007, já ministrou treinamentos em 10 capitais
brasileiras totalizando mais de 3.000 horas/aula. Hoje atua como instrutor e
consultor auxiliando as empresas que trabalham no desenvolvimento de sistemas
integrados a tecnologias VoIP como Asterisk, FreeSwitch e OpenSIPS.

Flávio Henrique Somensi é sócio-fundador da OpenS Tecnologia e iniciou sua


carreira profissional em 1989, desenvolvendo sistemas para web e gerenciando
servidores Linux, utilizando exclusivamente Software Livre. Precursor no
planejamento e desenvolvimento do software SNEP, foi o responsável por todo
código escrito até meados de 2009. Participa de vários projetos de tecnologia e
também já ministrou palestras e cursos relacionados a Joomla, PHP, MySQL, Shell
Script , OpenOffice e Suítes Office Microsoft. Graduando em Gestão de TI pelo
SENAC de Florianópolis – SC, atualmente exerce a função de diretor da OpenS
Tecnologia, onde é gestor e responsável pela Unidade SNEP Net.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 205


4linux.com.br 15. Bibliografia

15. Bibliografia
http://ead.opens.com.br/course/view.php?id=5

http://www.sneplivre.com.br

http://wiki.sj.ifsc.edu.br/wiki

http://ensinar.wordpress.com/2008/12/21/a-importancia-dos-codec's/

https://wiki.asterisk.org/wiki

http://www.voipexperts.com.br/

http://www.asteriskdocs.com.br/blog/

http://www.voip-info.org/wiki

Gonçalves, Flavio Eduardo de Andrade. Asterisk PABX, Guia de Configuração.

Construindo um PABX-Ip na prática com Asterisk e SNEP Página 206

Você também pode gostar