Vous êtes sur la page 1sur 206

442 Construindo um PABX-IP

na prtica com Asterisk e


SNEP

www.4linux.com.br
Sumrio

1. Cenrio do Curso ............................................................................................................ 9


1.1. Conheca a DEXTER.................................................................................................10
1.1.1. A Dexter ............................................................................................................ 10
1.2. Cenrio a ser criado na empresa Dexter..................................................................11
2. Introduo a telefonia....................................................................................................13
2.1. O incio......................................................................................................................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. Princpios do VoIP ........................................................................................... 20
2.2.5. Caractersticas do VoIP .................................................................................... 23
2.2.6. Cenrios 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 compilaco................................................................................... 33
3.4. Estrutura de arquivos e diretrios do Asterisk .........................................................35
3.5. Principais arquivos de configuraco.........................................................................37
3.6. Gerenciando o processo Asterisk.............................................................................37
3.6.1. Inciando automaticamente................................................................................ 39
3.7. Laboratrio 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 Analgicos.................................................................................................... 45
4.1.1. Interfaces FX..................................................................................................... 46
4.2. Canais Digitais ......................................................................................................46
4.3. Protocolos de Sinalizaco........................................................................................ 47
4.4. Hardwares de Telefonia .......................................................................................... 49
5. Configurando um PABX-IP............................................................................................53
5.1. Bsico do plano de discagem ..................................................................................53
5.1.1. Contextos.......................................................................................................... 53
5.1.2. Extenses..........................................................................................................54
5.1.3. Prioridades........................................................................................................ 57
5.1.4. Aplicaces ........................................................................................................ 58
5.2. Configurando um canal SIP......................................................................................58
5.2.1. Configurando os Ramais SIP............................................................................ 60
5.3. Interface grfica ....................................................................................................... 62
5.3.1. Instalando o SNEP ........................................................................................... 62
5.3.2. Conhecendo a interface grfica ....................................................................... 63
5.3.3. Conceitos: Ramais e Troncos .......................................................................... 64
5.4. Laboratrio 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. Laboratrio SNEP..................................................................................................70
5.5.1. Baixando e instalando o pacote do SNEP e dependncias.............................70
5.5.2. Ajustando as permisses ................................................................................. 70
5.5.3. Integrando Snep x Asterisk .............................................................................. 71
5.5.4. Ajuste dos diretrios de audio........................................................................... 71
5.5.5. Criaco de base de dados, usurio e importaco de dados............................72
5.5.6. Configuraces iniciais do SNEP....................................................................... 72
5.5.7. Ajustando as configuraces SNEP x Asterisk................................................... 73
6. Anlise 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 clculo de banda.............................................................80
6.5. Transcodificaco de CODEC ...................................................................................81
6.6. Tipos de registros SIP e IAX (user, peer, friend) ..................................................... 82
6.7. Laboratrio 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. Caractersticas do IAX2............................................................................................ 90
7.3. Mtodos de autenticaco ........................................................................................ 91
7.3.1. Conexes de entrada........................................................................................ 91
7.3.2. Conexes de sada........................................................................................... 92
7.4. Arquivo de configuraco ......................................................................................... 93
7.4.1. Seco [general] ................................................................................................ 93
7.4.2. Clientes IAX.......................................................................................................94
7.5. Cenrios 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. Laboratrio Asterisk............................................................................................... 98
7.7.1. Interligando o PABX das filiais usando troncos IAX..........................................98
7.8. Laboratrio SNEP................................................................................................100
7.8.1. Conectando com o Asterisk.............................................................................100
8. Protocolo SIP................................................................................................................102
8.1. SIP Conceitos...................................................................................................... 102
8.2. Caractersticas do SIP .......................................................................................... 103
8.2.1. Arquitetura....................................................................................................... 103
8.2.2. Estrutura da mensagem.................................................................................. 104
8.2.3. Comunicaco...................................................................................................104
8.2.4. Autenticaco.................................................................................................... 105
8.2.5. Enderecos SIP.................................................................................................106
8.3. Fluxo de mensagens.............................................................................................. 107
8.4. Diferenca entre B2BUA e SIPProxy ...................................................................... 109
8.5. Modos de Operaco............................................................................................... 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 configuraco.................................................................................. 115
8.6.3. Clientes SIP..................................................................................................... 116
8.7. Travessia de NAT (Problemas e Soluces)............................................................ 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. Simtrico..........................................................................................................120
8.7.5. Soluces prticas para o Asterisk................................................................... 120
8.8. DTMF...................................................................................................................... 122
8.9. Comandos da *CLI>............................................................................................... 123
8.10. Laboratrio Asterisk........................................................................................... 124
8.11. Laboratrio 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. Incluso Contextos................................................................................................. 129
9.2. Variveis................................................................................................................. 130
9.2.1. Variveis globais.............................................................................................130
9.2.2. Variveis de canal........................................................................................... 131
9.2.3. Variveis de ambiente..................................................................................... 131
9.2.4. Variveis especficas de aplicaces................................................................131
9.2.5. Variveis especficas para MACRO................................................................ 132
9.3. Expresses............................................................................................................. 132
9.3.1. Operadores matemticos................................................................................ 132
9.3.2. Operadores lgicos......................................................................................... 133
9.3.3. Operadores de comparaco .......................................................................... 133
9.3.4. Aplicaces prticas de Expresses.................................................................133
9.4. Funces.................................................................................................................. 134
9.4.1. Aplicaces condicionais.................................................................................. 135
9.4.2. Manipulaco de Strings...................................................................................136
9.5. Macros e Sub-rotinas..............................................................................................137
9.6. Extenses especiais .............................................................................................. 138
9.7. Roteamento baseado em horrio........................................................................... 139
9.8. Funces e Aplicaces para o AstDB...................................................................... 140
9.8.1. Famlias........................................................................................................... 141
9.8.2. Aplicaces especficas do AstDB................................................................... 141
9.9. Interface grfica...................................................................................................... 142
9.10. Laboratrio Asterisk........................................................................................... 146
9.10.1. Bsico do plano de discagem....................................................................... 146
9.10.2. Discagem de sada........................................................................................147
9.10.3. Entrada de chamadas................................................................................... 147
9.10.4. Aplicaco Macro ........................................................................................... 148
9.11. Laboratrio 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 Audvel)................................................................. 154
10.2. Estacionamento.................................................................................................... 155
10.3. Captura ................................................................................................................ 157
10.4. Transferncia........................................................................................................ 158
10.4.1. Transferncia Assistida ................................................................................ 158
10.4.2. Transferncia Direta...................................................................................... 158
10.4.3. A transferncia ainda no est funcionando................................................. 158
10.5. Conferncia.......................................................................................................... 159
10.5.1. Formato:........................................................................................................ 159
10.5.2. Configuraco................................................................................................. 160
10.5.3. Aplicaco....................................................................................................... 161
10.6. Musica 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 grfica.................................................................................................... 166
10.10. Laboratrio Asterisk ........................................................................................ 168
10.10.1. Criando uma URA....................................................................................... 168
10.10.2. Funces tpicas do PABX............................................................................169
10.11. Laboratrio SNEP............................................................................................ 173
10.11.1. Testando recursos no SNEP....................................................................... 173
11. DAC..............................................................................................................................176
11.1. Ramais x Agentes................................................................................................. 176
11.2. Estratgias de distribuico....................................................................................176
11.3. Configuraco ........................................................................................................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 gravaco nas filas...........................................................................180
11.6. Interface grfica.................................................................................................... 181
11.6.1. Membros de uma Fila.................................................................................... 182
11.7. Laboratrio Asterisk........................................................................................... 183
11.7.1. Implementando distribuico automtica de chamadas................................. 183
11.8. Laboratrio SNEP.............................................................................................. 185
12. Segurana...................................................................................................................187
12.1. Execuco do processo Asterisk............................................................................187
12.2. Seguranca nos arquivos de configuraco............................................................ 188
12.3. Rejeitando autenticaco ...................................................................................... 188
12.4. Fail2Ban e Asterisk .............................................................................................. 189
12.4.1. Download.......................................................................................................189
12.4.2. Instalaco...................................................................................................... 190
12.4.3. Script de Inicializaco....................................................................................191
12.4.4. Configuraco................................................................................................. 193
13. Asterisk Realtime....................................................................................................... 197
13.1. Como funciona .....................................................................................................197
13.2. Configurar o Asterisk Real Time........................................................................... 197
13.2.1. Dependncias.............................................................................................. 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
NOTAES:

- Indica que o pargrafo em questo faz referncia a um assunto de importncia alta


ou algum alerta importante;

# - Indica o console de terminal do linux, como usurio root. Os comandos desta linha
somente funcionaro em um terminal linux e como usurio root.

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


funcionaro se o Asterisk estiver rodando e os mdulos necessrios instalados.

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


funcionaro se o MySQL estiver rodando e os mdulos necessrios instalados.

Esta apostila est registrada na Biblioteca Nacional como material didtico


Tcnico/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. Cenrio do Curso

Mdulo 1

1. Cenrio 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 mdio porte! Para ajud-lo a conseguir este objetivo, vamos usar um
cenrio que nos permitir ter uma viso macro da telefonia como um todo.

Vamos orient-lo a fazer a melhor soluco 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 mdias empresas.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 9


4linux.com.br 1. Cenrio do Curso

1.1. Conhea a DEXTER

1.1.1. A Dexter

A DEXTER Courier uma empresa que trabalhar o mximo possvel com cdigo
aberto e conta com vrios servicos, como servidor de arquivos, dns, email, proxy,
autenticaco de usurios e agora Asterisk para gerenciar sua telefonia.

A DEXTER atua no segmento de logstica e tem como principal objetivo prestar ser-
vicos 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 prtica com Asterisk e SNEP Pgina 10


4linux.com.br 1. Cenrio do Curso

1.2. Cenrio a ser criado na empresa Dexter

Dentro de cada filial, sero implementados os seguintes recursos/funcionalidades:

Cadastro de Ramais e Troncos


Interligaco com filiais e com operadoras
Realizaco de chamadas internas e externas
Ativaco do recurso Estacionamento
Ativaco do recurso Correio de Voz
Ativaco do recurso No perturbe
Ativaco do recurso Siga-me
Ativaco do recurso Filas
Noces de Seguranca
Implementaco da Interface grfica

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 11


Mdulo 2

Introduo a
telefonia
4linux.com.br 2. Introduco a telefonia

2. Introduo a telefonia

2.1. O incio
A telefonia, assim como inumeras outras reas da Engenharia Eltrica e cincia
modernas, teve seu incio com a descoberta e desenvolvimento da Eletricidade e do
Magnetismo, cujos estudos foram iniciados em 1830 pelo ingls Michael Faraday.

A primeira invenco foi feita em 1837 por Samuel Morse: o Telgrafo Eltrico, que
permite a comunicaco entre dois pontos ligados por uma fiaco condutora. Da
surgiram duas tecnologias de Telecomunicaces, a que suprimia a fiaco condutora,
usando transmisses de ondas eletromagnticas no ar (Rdio, Televiso) e a que
mantinha a fiaco (Telgrafo, 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 telefnico da sua casa. Se
sua casa tiver duas linhas telefnicas, dois pares diferentes de fios de cobre vo 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 telefnica, 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 resoluco de 8 bits (8KHz X 8 bits = 64 kbps). Ele ento combina sua

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 13


4linux.com.br 2. Introduco a telefonia

voz com dezenas de outras vozes atravs de um MUX (Multiplexador) e emite-as por
um unico fio (geralmente um cabo coaxial ou um cabo de fibra tica) at a
companhia telefnica.

2.2.1. Conceitos

Linha Analgica: Linha que trafega sinais analgicos;


Tronco Analgico: padro de interconexo analgico entre centrais publicas
e privadas;
Linha Digital: linha que trafega sinais digitais;
Tronco E1: padro de transmisso digital que compacta 30 canais de voz em
um canal digital. o padro digital de interconexo entre centrais publicas e
privadas. Podemos afirmar que o E1 um enlace de dados com banda de
2Mbps Full Duplex. Sob o E1 podem operar dois protocolos, so eles:
ISDN Tecnologia digital que permite trafegar dados, voz e vdeo, comum
nos Estados Unidos e Europa, no Brasil est disponvel principalmente
nas capitais e tambm pode ser chamado de RDSI Rede Digital de
Servico Integrado;
MFC/R2 Muito comum no Brasil, Amrica Latina e sia. Atualmente o
mais adotado pelas operadoras de telefonia nacional.
Central Pblica Analgica: equipamento que estabelece, administra e
termina conexes telefnicas analgicas;
Central Pblica Digital: equipamento que estabelece, administra e termina
conexes telefnicas digitais.

2.2.2. Projeto Asterisk

O Asterisk um projeto de Software Livre, portanto de cdigo 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 contribuices de programadores ao redor do mundo,


seu desenvolvimento ativo e sua rea de aplicaco muito promissora.

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

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 14


4linux.com.br 2. Introduco a telefonia

uma poderosa central telefnica multi-protocolo com recursos avancados. Isto


significa que o Asterisk pode ser um componente de uma soluco de comunicaco
unificada ou de um simples PABX, ou seja, ele no um produto acabado e sim uma
ferramenta para desenvolver soluces de comunicaco.

Com o Asterisk, possvel implementar novos recursos e funcionalidades na


telefonia de uma empresa, como por exemplo:

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


conexes de banda larga;
Conectar as centrais telefnicas de escritrios ou filiais de uma empresa
utilizando a internet ou rede de comunicaco privada;
Implementar URA's (Unidades de Resposta Audvel) para automatizar e
agilizar o atendimento de chamadas telefnicas;
Permitir que a Central Telefnica decida qual operadora telefnica utilizar ao
fazer chamadas (LCR Rota de Menor Custo);
Fcil integraco com sistemas de terceiros, como ERP e CRM;
Alm disso, o Asterisk possui nativamente muitas funcionalidades avancadas que
facilitam e agregam valor a soluco de PABX IP, como por exemplo:

Filas de atendimento;
Correio de voz;
Salas de conferncia;
Estacionamento de chamadas;
Gravaco de chamadas;
Registro detalhado das chamadas de entrada e sada;
E muito mais
Por que utilizar o Asterisk?

Sistema aberto;
Reduco de custos;
Controle total;
Aumento de produtividade;
Melhoria no atendimento;

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 15


4linux.com.br 2. Introduco a telefonia

Multiplataforma, compatvel com Linux, Unix, BSD e outros SO's.

A Digium

A Digium, Inc. uma empresa de tecnologia de comunicaces sediada em


Huntsville, Alabama. especializada no desenvolvimento e fabricaco de hardware
e software de comunicaces de telefonia, principalmente para plataforma Asterisk.

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


Spencer para oferecer soluces proprietrias e open source. O hardware de
telefonia ainda a sua principal fonte de receita.

Devido ao fato de que algumas empresas tem objeces ao uso de softwares open
source, a Digium fornece o Asterisk em trs licencas diferentes:

Asterisk GPL: o produto mais conhecido da empresa. uma aplicaco


PABX open source que roda em plataforma Unix-Like;
Asterisk Business Edition: uma verso comercial do Asterisk. A Digium
afirma que esta verso sofre mais testes do que a verso de cdigo aberto;
Asterisk OEM: Verso exclusiva para fabricantes de equipamentos que
queiram embarcar o Asterisk em hardware, comum para comercializar
soluces proprietrias.
Os produtos da Digium seguem duas categorias, Software Asterisk e Hardware. A
Digium tambm produz e fornece suporte complementar ao Asterisk, como o
CODEC G729, Fax para o Asterisk, placas de telefonia analgica e digital, placas
para transcodificaco e mdulos para cancelamento de eco.

2.2.3. Arquitetura do Asterisk

O Asterisk foi desenvolvido para ter o mximo de flexibilidade tornando-o um sistema


modular e transparente a protocolos, codec's e hardware de diversos fabricantes,
podendo ser compatvel com qualquer tecnologia existente ou que venha a ser
lancada, sem que sejam necessrias mudanca no nucleo do sistema.

O Asterisk possui uma arquitetura modular, carregando seus mdulos


separadamente, sendo possvel customizar uma soluco, permitindo maior
flexibilidade tanto de hardware quanto de software. Neste modelo possvel

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 16


4linux.com.br 2. Introduco 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 mdulos para uma grande quantidade de


tecnologias tanto TDM quanto IP. Um canal uma conexo de entrada/sada
de uma chamada no Asterisk, ou seja, toda a chamada entrante ou sainte no
sistema chega por um Canal, um canal pode ser uma conexo a um telefone
analgico 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 analgica e/ou digital.


Canais DAHDI, Khomp e DGV so alguns exemplos.
Canal IP ou VoIP prov suporte a uma srie de protocolos de rede
utilizados livremente na internet e alguns proprietrios. Canais SIP, IAX2 e
H323 so alguns exemplos.
Para prover canais o Asterisk possui uma srie de mdulos - um para cada
tipo de tecnologia seja ela TDM ou IP. Alguns canais so classificados como
especiais, pois se aplicam somente ao Asterisk para uso em determinadas

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 17


4linux.com.br 2. Introduco a telefonia

aplicaces.

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 tambm na telefonia IP, a converso do


som analgico 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 necessrio para aquele tipo
de informaco. Por exemplo: um MP3 Player consegue reproduzir um arquivo
no formato MP3 pois o mesmo possui este CODEC instalado internamente.
Com o Asterisk no diferente, ele tem suporte a uma srie 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 tambm
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 sesso e, se ambos suportarem o mesmo CODEC, a
chamada ento estabelecida.

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


codec's a serem utilizados no estabelecimento da sesso. A principal funco
do CODEC transformar o udio analgico em formato digital para que este
possa ser transmitido pela rede IP.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 18


4linux.com.br 2. Introduco a telefonia

Cada CODEC possui suas particularidades. Alguns so leves no


processamento, porm ocupam mais banda, outros so pesados em seu
processamento mas possuem uma alta taxa de compresso, o que garante
uma boa economia de banda. Outros ainda possuem uma resistncia a perda
de pacotes avancado, o que garante uma qualidade de ligaco eficiente
mesmo em redes onde haja perda de pacotes em sua transmisso.

O Asterisk tem uma caracterstica importante que a capacidade de fazer a


transcodificaco. Este recuso permite a traduco de codec's em tempo de
execuco. 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 no suportarem os mesmos codec's, o Asterisk converte os
formatos permitindo assim a chamada entre os dispositivos. Isto possvel
desde que ambos os codec's estejam devidamente instalados.

Cuidado!!! A transcodificao deve ser evitada ao mximo. Quanto


mais transcodificaes forem feitas simultaneamente, mais processamento e
memria sero necessrios, o que pode comprometer a qualidade das
ligaes. Para casos extremos a Digium disponibiliza uma placa, modelo
TC400B. Esta placa possui um DSP (processador) exclusivo para
transcodificao de G729, o que pode garantir uma boa qualidade de ligaes
onde a transcodificao inevitvel.
Abaixo segue a tabela de alguns codec's:

Tipo de Codificao Taxa de Bits (Kbits/s) Licena


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

Caractersticas 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 prtica com Asterisk e SNEP Pgina 19


4linux.com.br 2. Introduco 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 So responsveis por definir a forma/linguagem como os


pontos de comunicaco (terminais, gateways, etc) vo negociar entre si. So
responsveis por tarefas como sinalizaco para estabelecer conexo,
determinar ponto de destino, roteamento entre pontos, e tambm questes de
sinalizaco de telefonia como campainha, identificados de chamada,
desconexo, etc. Os protocolos mais utilizados so o IAX e o SIP;

APLICAES Toda funco bsica do Asterisk provida por uma aplicaco.


Por exemplo: para executar uma chamada usa-se a aplicaco Dial(), para
transferir uma chamada usa-se a aplicaco Transfer(). Algumas aplicaces
so mais avancadas, como por exemplo o ConfBridge() e MeetMe() para
conferncia. Existem mais de 100 aplicaces internas prontas para uso e,
alm das aplicaces, existem as funces que possuem funcionalidades mais
avancadas. As principais aplicaces e funces sero abordadas no
treinamento.

2.2.4. Princpios do VoIP

Voz sobre IP, tambm 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 comunicaco de voz. Os
principais benefcios do VoIP so:

a reduco do custo com infra-estrutura devido ao uso de uma unica rede


para transportar dados e voz;
a flexibilidade pois facilita tarefas e disponibilizaco de servicos no
suportados pelo sistema de telefonia convencional;

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 20


4linux.com.br 2. Introduco a telefonia

a interoperabilidade pois em sua maioria os protocolos e padres so


abertos e possuem RFC definida.

VOIP Implementao

DIFICULDADES O protocolo UDP largamente implementado nas


tecnologias de VoIP, mas o UDP no fornece um mecanismo para assegurar
que os pacotes de dados sejam entregues em ordem sequencial, ou ainda
que forneca garantias de qualidade de servico. Alm disso as
implementaces VoIP sofrem com o problema de latncia e jitter (variaces
de atraso).

Outro desafio para o roteamento de trfego VoIP so os firewalls e os


tradutores de endereco (NAT). Os mtodos mais comuns para passar por
firewalls incluem STUN, ICE e TURN.

Do ponto de vista de gesto, se a estrutura de rede e os equipamentos forem


antigos ou inexistentes, uma mudanca para VoIP pode elevar muito o custo do
projeto, pois ser necessrio mudancas no cabeamento e a aquisico de
novos equipamentos como comutadores, roteadores, telefones IP (cujo preco
mais alto que um telefone analgico), e aumento da banda de conexo
(para suportar essa nova tecnologia), alm da mo de obra especializada.

Em resumo, os principais desafios tcnicos do VoIP so latncia, perda de


pacotes, eco, jitter e segurana. 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 so conectados diretamente


s linhas de telefone da empresa de telefonia ou um PABX, que, em caso de
falha de energia, ainda so funcionais pelo uso de geradores de energia de
apoio localizados na central telefnica. Entretanto, os equipamentos VoIP
domsticos utilizam roteadores de banda larga e outros equipamentos que
dependem da energia eltrica. Mesmo que a energia eltrica esteja
disponvel, o provedor de acesso Internet pode estar indisponvel. Enquanto

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 21


4linux.com.br 2. Introduco a telefonia

o PSTN amadureceu atravs das dcadas de uso e atualmente considerado


confivel, a maioria das redes de banda larga so 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 no errar no
projeto.

QUALIDADE DE SERVIO Algumas conexes de banda larga possuem


uma qualidade pobre de transmisso taxa de upload muito baixa. Quando
os pacotes IP so perdidos ou atrasados em algum ponto da rede, existe uma
queda momentnea da voz na conversaco. Isso mais perceptvel em redes
bastante congestionadas ou onde existem grandes distncias entre os pontos
de conexo ou rotas de baixa qualidade, ou seja, tecnologia VoIP s funciona
em redes estveis e bem dimensionadas.

SEGURANA A maioria das soluces VoIP ainda no suportam criptografia,


o que resulta na possibilidade de se ouvir chamadas alheias, alterar seu
conteudo e o pior, fraudes no sistema de telefonia que podem gerar um
grande prejuzo ao cliente. Algumas empresas utilizam artifcios como VPN
para tornar o acesso mais seguro. Entretanto, seguranca atravs de
criptografia e autenticaco ainda no est amplamente disponvel no mercado
e so poucos dispositivos que suportam SIPs ou SRTP. Atualmente o
protocolo SIP suporta operar sob TLS, porm todos os dispositivos envolvidos
devem ter suporte a esta funcionalidade. O Asterisk j tem suporte a TLS
desde a verso 1.6.

PROTOCOLOS Alguns dos protocolos utilizados no VoIP para sinalizaco


de chamadas so SIP, H.323, MGCP, H.248/MEGACO, SCCP, Jingle e IAX.
Estes protocolos so apenas responsveis pelo gerenciamento de sesso, ou
seja, atravs destes protocolos possvel saber se uma chamada foi
estabelecida e quanto tempo ela durou. Para a transmisso de mdia, voz,
vdeo e dados usa-se outro protocolo na camada de transporte do modelo
OSI, normalmente o RTP que tambm opera sobre UDP.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 22


4linux.com.br 2. Introduco a telefonia

SIP um protocolo de controle referente camada de aplicaces do


Modelo de Referncia OSI (Open System Interconnection), que usado
para iniciar, modificar ou terminar sesses ou chamadas multimdia entre
usurios. O SIP utiliza por padro a porta UDP 5060 e TCP 5061 para
sinalizaco e da 10000 a 20000 para fluxos de mdia RTP;

IAX um protocolo desenvolvido pela Digium com o objetivo de


estabelecer comunicaco entre servidores Asterisk. IAX um protocolo de
transporte, tal como o SIP, no entanto faz uso apenas de uma unica porta,
a UDP 4569 tanto para sinalizaco como para fluxo de mdia RTP. Outra
vantagem o modo de operaco chamado Trunk, onde o protocolo utiliza
uma estratgia para economia de banda aproveitando um unico cabecalho
IAX para multiplas ligaces simultneas. 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 adoco pelo mercado
em dispositivos como telefones e gateways apesar de j possuir uma
RFC.

2.2.5. Caractersticas do VoIP

O VoIP pode facilitar tarefas difceis em redes tradicionais. Chamadas entrantes


podem ser automaticamente roteadas para o telefone VoIP, independentemente da
localizaco na rede. Por exemplo, possvel levar um telefone VoIP para uma
viagem, e, de onde voc conect-lo Internet poder receber ligaces, contanto que
a conexo seja rpida e estvel o suficiente. O fato da tecnologia ser atrelada
Internet tambm traz a vantagem de poder integrar telefones VoIP a outros servicos
como conversaco de vdeo, mensageiros instantneos, compartilhamento de
arquivos e gerenciamento de listas telefnicas. Estar relacionado Internet tambm
significa que o custo da chamada independe da localizaco geodsica e dos
horrios de utilizaco, ambos os parmetros usados na cobranca na telefonia fixa e
mvel, e cujos valores variam de operadora a operadora.

Vrios pacotes de servico VoIP incluem funcionalidades que em redes tradicionais


seriam cobradas parte, como conferncia a trs, redirecionamento de chamadas,
rediscagem automtica e identificador de chamadas.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 23


4linux.com.br 2. Introduco a telefonia

Apesar de amplamente utilizado atravs de computadores, o VoIP pode ser utilizado


atravs de adaptadores para telefones analgicos ou gateways VoIP, que so
aparelhos que podem ser conectados diretamente em uma conexo banda larga e a
um aparelho telefnico comum ou a um PABX em posices de troncos ou ramais.
Eles fornecem a interchamada entre as redes IP e fixas (analgicas).

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 usurio Alice faz uma chamada para Bob, uma requisico INVITE enviada
ao servidor;
O INVITE negado pelo servidor, que envia uma reposta 407 solicitando as
credencias do usurio Alice;
Uma nova requisico INVITE gerado pela Alice, agora esse INVITE
acompanhado de um novo cabecalho contendo um hash MD5 a ser validado
pelo Asterisk;

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 24


4linux.com.br 2. Introduco a telefonia

O Asterisk gera um novo INVITE e envia para o destino, nesse caso o usurio
Bob. Logo aps o telefone de Bob envia uma mensagem 180, indicando que
o mesmo comecou 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 sesso
entre os dois canais estabelecida;
O udio da chamada est no fluxo de mdia RTP. Observe que o protocolo de
sesso SIP neste momento no mais necessrio;
Quando o usurio Bob desliga o telefone uma reaquisico do tipo BYE
enviado ao Asterisk informando que a sesso foi encerrada, o fluxo de mdia
interrompido e uma resposta 200 OK confirma o recebimento do BYE;
Este fluxo de mensagens do INVITE at o BYE conhecido como Dilogo
SIP. Desta forma o Asterisk consegue bilhetar a chamada, pois ele sabe
quando a sesso iniciou e quando foi finalizada.

2.2.6. Cenrios de uso

Viso Geral

Dentro de uma viso geral, o Asterisk um PABX hbrido que integra tecnologias
como TDM e telefonia IP agregando funcionalidades extras como correio de voz,
URA, DAC e outras.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 25


4linux.com.br 2. Introduco a telefonia

100% VoIP

O Asterisk pode operar em uma rede puramente VoIP sem interfaces TDM, essa
soluco pode ser bem econmica quando no existe conexo Digital E1 ou
Analgica com a Operadora. As operadoras j fornecem em alguns pontos um
tronco conhecido por NGN ou SIP Trunk, estes troncos operam puramente em IP
no sendo necessrio a compra de interfaces ISDN ou R2 nem tanto analgicas. O
Asterisk executa todas essas funces de forma simplificada.

Softswitchs

So computadores que tem a funco de comutar circuitos de hardware na forma de


interfaces padro de telefonia. Entretanto a forma de comercializaco destes
equipamentos segue muitas vezes a lgica mostrada na figura abaixo, onde todos
os componentes so separados e muitas vezes de diferentes fabricantes.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 26


4linux.com.br 2. Introduco 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
prtica 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 srie de portas analgicas


para uso com Asterisk. Estas portas podem ser do tipo FXS (Utilizadas para ligar a
um telefone), FXO (Utilizadas para ligar a uma linha telefnica). Um outro tipo de
banco de canais que faz bastante sucesso so 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 prtica com Asterisk e SNEP Pgina 27


4linux.com.br 2. Introduco a telefonia

Media Gateway

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


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

Com a convergncia reduco do numero de circuitos e um melhor aproveitamento


dos recursos. Os projetos mais comuns so conhecidos como Toll-Bypass
(Contornando a tarifaco), pois eliminam os custos de operadora de longa distncia
nos telefonemas entre as filiais da empresa.

URA (Unidade de Resposta Audvel)

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


empresas de CallCenter (SAC). Este recurso permite o atendimento automtico da
chamada e logo aps um anuncio de menu de opces para o usurio 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 especfico
para realizar as tarefas de telefonia tais como:

atender;
discar;
desligar;
reconhecer dgitos;

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 28


4linux.com.br 2. Introduco a telefonia

falar;
etc.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 29


Mdulo 3

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

3. Compilando e Instalando

3.1. Definindo o Hardware


O Asterisk tem a caracterstica de utilizar muito o processador, pois ele usa o
processador para fazer o processamento dos sinais digitais. Em sistemas menores o
hardware normalmente no um problema, entretanto, em sistemas de grande
capacidade o hardware deve ser muito bem estudado para no causar falhas de
desempenho, manifestadas por problemas na qualidade de udio para os usurios,
muitas vezes na forma de ecos e picotes de voz. De forma prtica, um PABX-IP
bsico pode ser configurado a partir de um computador com processador
equivalente ao Pentium com 256Mb de RAM e 1 Gb de disco rgido. A tabela a
seguir foi elaborada para ser utilizada como referncia de dimensionamento do
hardware necessrio a um numero mdio de ramais.

Cenrio: Cenrio: Cenrio:


Item Levar em considerao At 5 At 10 At 15
canais canais canais
- Numero de chamadas simultneas
- Gravaco das chamadas
Processador x86 400 Mhz x86 1 Ghz x86 3 Ghz
- codec's utilizados
- Funcionalidades utilizadas
- Numero de chamadas simultneas
Memria RAM - Gravaco de chamadas 256Mb 512Mb 1 Gb
- codec's utilizados
- Sem gravaco: 10 Gb
Disco Rgido - Gravaco de Chamadas - Com gravaco: 10 Gb para SO e 1,2
Mb por minuto gravado (WAV)
Placa me - Placas de telefonia x Slots PCI disponveis
Sistema
- Distribuico Linux de sua preferncia
Operacional

Importante!! Este dimensionamento foi baseado na compilao de um


Asterisk simples mas ele pode variar dependendo das funcionalidades a
serem agregadas, como por exemplo, acesso a banco de dados, execuo de
softwares de terceiros na mesma mquina e assim por diante. Fique atento as
necessidades da soluo.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 so
construdas para trabalhar com Linux. Vrias distribuices so utilizadas com
sucesso para implementar o Asterisk, como SUSE, Fedora, Debian, Slackware e
Gentoo. O importante ficar atento para os pacotes necessrios para compilar o
Asterisk e/ou drivers das placas de telefonia que voc for utilizar. Pesquise antes
com os fabricantes das placas as recomendaces de cada um.

Cada sistema operacional tem suas ferramentas prprias para instalaco e


compilaco de software, no caso do Debian e suas variantes utiliza-se o apt-get e
nas distribuices baseadas em Red-Hat o aplicativo yum.

3.3. Baixando e instalando o Asterisk


O cdigo 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 vrias verses que podem ser baixadas, sendo a verso 12 a mais recente.
Ao escolher sua verso do Asterisk, leve em consideraco:

Compatibilidade do hardware de telefonia a ser utilizado veja com o


fabricante do hardware para quais verses 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 discusses como o
Asterisk Brasil (http://www.asteriskbrasil.org/) podem ajuda-lo a decidir sobre
isso;

Interface Grfica algumas interfaces grficas, como o SNEP, implementam


funcionalidades extras ao Asterisk, logo, no so compatveis com todas as
verses.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 32


4linux.com.br 3. Compilando e Instalando

Importante!! Em ambientes de produo evite utilizar verses muito novas,


pois estas podem conter bugs e acabar causando srios problemas em seu
ambiente. No esquea: servio de telefonia um servio crtico em qualquer
ambiente.
A tabela a seguir mostra as linhas de tempo de lancamento para todas as verses
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 distribuices
GNU/Linux ou atravs da compilaco do cdigo fonte. recomendvel que a
instalaco atravs dos pacotes de software seja voltada apenas para estudos do
Asterisk.

A instalaco atravs da compilaco o melhor caminho para um servidor de


produco. 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 questes de
transcodificaco de codec's de udio.

3.3.1. Processo de compilao

Para compilar o Asterisk necessrio obter os arquivos do cdigo-fonte do Asterisk.


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

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 33


4linux.com.br 3. Compilando e Instalando

Como mencionado anteriormente possvel instalar o Asterisk atravs dos pacotes


pr-compilados padro do Linux, para o Debian e derivados:

# apt-get install asterisk

Para Linux padro RedHat, como o CentOS:

# yum install asterisk

Para uma instalaco mais otimizada recomendado o processo de compilaco.


Estes so os pacotes necessrios para compilar o Asterisk:

asterisk-1.8-current.tar.gz Pacote do Asterisk verso 1.8. O sufixo current


aponta para a verso de release atual.

dahdi-linux-complete-current.tar.gz Apesar de no ser obrigatria, a


instalaco do pacote DAHDI recomendada pois permite que o canal DAHDI
seja compilado e tambm prove temporizaco para outras aplicaces como o
MeetMe (conferncia).

libpri-1.4.tar.gz Este pacote contm 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 no ira conseguir efetuar chamadas em canais digitais ISDN.

importante ressaltar que a instalaco e compilaco siga a seguinte ordem:

1. LibPRI
2. DAHDI
3. Asterisk

Seguindo esta ordem o Asterisk ter todos os pr-requisitos para a compilaco dos
mdulos gerais.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 34


4linux.com.br 3. Compilando e Instalando

3.4. Estrutura de arquivos e diretrios do Asterisk


Depois da instalaco, o Asterisk cria no sistema de arquivos uma srie de arquivos e
diretrios, os principais arquivos de configuraco esto em /etc, os aquivos de log
em /var/log. Agora vamos ver cada um deles e conhecer um pouco mais.

Diretrios:

/etc/asterisk Principais arquivos de configuraco 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 padro
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 autenticaco de
troncos IAX;
/var/lib/asterisk/moh Arquivos de musica em espera (Music on Hold);
/var/lib/asterisk/sounds Arquivos de sons que podem ser utilizados nas
chamadas telefnicas e na utilizaco de aplicaces como URA por exemplo;
/var/lib/asterisk/static-http Arquivos de exemplo para criaco de um
ambiente de gerenciamento Web para o Asterisk;
/usr/lib/asterisk/modules Arquivos de mdulos, aplicativos, funces,
codec's, canais etc;
/var/spool/asterisk/monitor Diretrio padro para os arquivos de gravaco
de chamads;
/var/spool/asterisk/voicemail Contm as mensagens de udio das caixas
postais;
/var/log/asterisk Arquivos de log, usado para anlise na hora de resolver
algum problema (troubleshooting).

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 35


4linux.com.br 3. Compilando e Instalando

Arquivos em /etc/asterisk:

agents.conf Configuraco 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 Configuraces do codec speex somente;
dundi.conf Distributed Universal Number Discovery;
enum.conf Mapeamento de numero telefnico E.164;
extconfig.conf Configuraco para a conexo 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 Configuraco de acesso SQL via ODBC;
http.conf Servidor Http integrado ao Asterisk;
iax.conf Arquivo de configuraco do canal IAX2;
meetme.conf Configuraco das salas de conferncia
sip.conf Arquivo de configuraco do canal SIP;
modules.conf Define o carregamento de mdulos do Asterisk;
queues.conf Define as filas de atendimento;
res_odbc.conf Conexo via ODBC para acesso a recursos externos;
res_pgsql.conf Conexo com Banco de Dados Postgres;
res_mysql.conf Conexo com Banco de Dados MySQL;
users.conf Arquivo para configuraco fcil de usurios;

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 36


4linux.com.br 3. Compilando e Instalando

voicemail.conf Arquivo de configuraco do correio de voz.

3.5. Principais arquivos de configurao


asterisk.conf O Asterisk faz referncia a uma srie de diretrios dentro do
sistema operacional. Estes diretrios so definidos dentro deste arquivo;
logger.conf o arquivo que controla os logs do Asterisk. Nele esto
configurados os parmetros 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 utilizaco do logrotate do linux recomendvel para
gerenciar os arquivos de log;
extensions.conf Consiste de uma lista de instruces ou passos que o
Asterisk deve seguir. Essas instruces so disparadas a partir dos dgitos
recebidos de um canal ou aplicaco;
sip.conf Contm parmetros relacionados configuraco dos telefones e
operadoras SIP;
iax.conf Contm parmetros relacionados ao protocolo Inter-Asterisk (IAX),
que normalmente usado para comunicaces entre servidores Asterisk.

3.6. Gerenciando o processo Asterisk


Aps a instalaco do Asterisk o sistema automaticamente configurado para
carreg-lo na inicializaco do sistema operacional. Porm 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,
necessrio carregar o Asterisk em modo Foreground.

Existem dois modos de carregar o Asterisk.

Foreground Quando o Asterisk no consegue carregar normalmente este modo


apresenta todas as mensagens de carga do Asterisk. Ele muito util para depuraco
de problemas na inicializaco. Quando carregado neste modo alguns recursos esto
limitados, portanto aps detectar o problema, reinicie o Asterisk para carrega-lo em
modo Background.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 37


4linux.com.br 3. Compilando e Instalando

# /usr/sbin/asterisk vvvgc
*CLI>

onde:

-v indica o verbose informaces a serem exibidas na *CLI> do Asterisk.


Quanto maior o numero de v's, mais detalhes sero fornecidos ;
-g Faz com que o Asterisk descarregue o nucleo em caso de segment
violation
-c Habilita o modo de console. Inicia o Asterisk em Foreground (na frente,
implica na opco f), com uma console com interface de linha de comando.

Background Modo normal de inicializaco do Asterisk. Este modo ativa todos os


recursos do Asterisk podendo o usurio 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 configuraco. Muito embora
a quantidade de configuraces possveis seja muito grande, apenas um pequeno
conjunto necessrio 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


responsvel por carregar o processo, conectar na *CLI> quando o processo j est
em execuco, enviar comandos para a *CLI>, fazer depuraco de problemas, etc.

As principais opces do comando asterisk so:

# /usr/sbin/asterisk -h ::(Exibe as opes do comando)

-v indica o nvel de verbose informaces 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 prtica com Asterisk e SNEP Pgina 38


4linux.com.br 3. Compilando e Instalando

-h Help, exibe as opces do comando.


-C <arquivo> - Carrega o Asterisk com outro arquivo de configuraco
diferente de /etc/asterisk/asterisk.conf
-f No executa o Fork do processo.
-r Conecta remotamente na CLI.
-n Desabilita a cor na console.
-i Inicializa chaves de criptografia na inicializaco.
-q Modo silencioso, no exibe as mensagens.
-d Habilita modo de debug
-x comando - Executa o comando na CLI e devolve a sada, implica no
uso da opco -r.

3.6.1. Inciando automaticamente

Cada sistema operacional tem mtodos levemente diferentes de iniciar os


programas em tempo de inicializaco. O diretrio /usr/src/asterisk/contrib/init.d
contm scripts para alguns sistemas operacionais. Existem duas maneiras de criar o
arquivo de inicializaco automaticamente:

Copie o script equivalente ao seu Sistema Operacional para o diretrio


/etc/init.d, renomeie-o para asterisk e forneca as permisses necessrias
para sua execuco na inicializaco.
Outra maneira , durante a compilaco e, logo aps compilar o asterisk
(make), executar o comando:

# make config

Este comando instala o script de inicializaco correto para a sua verso de


Linux no diretrio /etc/init.d. Este diretrio contm os scripts de inicializaco
de todos os servicos padro do Linux.

Por padro o script de inicializaco vem configurado para rodar o asterisk como root,
o que no uma boa opco. Para ajustar isso, altere no script de inicializaco as
variveis AST_USER e AST_GROUP. No esqueca de ajustar as permisses de
dono e grupo dos arquivos e diretrios do Asterisk.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 39


4linux.com.br 3. Compilando e Instalando

3.7. Laboratrio Asterisk

3.7.1. Objetivos

Instalar os pacotes necessrios para compilaco no Linux.


Fazer o download dos pacotes contendo o cdigo fonte.
Descompactar os pacotes.
Compilar e Instalar.
Gerenciar o processo Asterisk.

3.7.2. Instalar e compilar o Asterisk

Instalar os pacotes necessrios para a compilao: A partir do terminal do


Linux, faca o login com o usurio root e instale os seguintes pacotes com o
utilitrio 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 diretrio /usr/src e faca o


download dos pacotes contendo o cdigo-fonte necessrio.

# 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 prtica com Asterisk e SNEP Pgina 40


4linux.com.br 3. Compilando e Instalando

Descompactar os Pacotes: Descompactar os arquivos com o utilitrio 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 inicializao, /etc/init.d/

3.7.3. Gerenciar o processo Asterisk e conectar a CLI

Iniciar Asterisk em Background

# service asterisk start

Aps a carga do Asterisk ser possvel conectar na CLI, uma interface em


linha de comando:

# asterisk -vvvr

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 41


4linux.com.br 3. Compilando e Instalando

Entre com o seguinte comando para visualizar a verso 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 inicializaco, ou seja, em
modo foreground:

# asterisk -vvvgc

Se o Asterisk carregar com sucesso voc ter acesso sua CLI, note que
agora voc no 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 no houverem mais chamadas


ativas.
# hostname*CLI> core stop when convenient

Novas chamadas no podem ser processadas e o processo

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 42


4linux.com.br 3. Compilando e Instalando

interrompido at que todas as chamadas ativas sejam finalizadas.


# hostname*CLI> core stop gracefully

Forca o desligamento, se houver chamadas ativas todas sero


desligadas!
# hostname*CLI> core stop now

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 43


Mdulo 4

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

4. Telefonia TDM

4.1. Canais Analgicos


A maior parte das implementaces de telefonia analgica usa um par trancado de
fios metlicos. Quando um loop fechado, o telefone recebe o tom de discagem da
central telefnica seja ela publica (operadora) ou privada (pabx). Dizemos que este
tipo de sinalizaco do tipo loop-start. Existem basicamente trs sinalizaces:

Sinalizao de superviso Podemos destacar os sinais on-hook (no


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

On-Hook Quando o usurio larga o telefone no gancho, o PABX


interrompe e no permite que a corrente seja transmitida;
Off-Hook O usurio que desejar fazer uma chamada telefnica deve
passar para o estado off-hook (fora do gancho), retirando o telefone do
gancho. Este estado fecha o loop eltrico, o qual indica ao PABX que o
usurio deseja fazer uma chamada telefnica;
Ringing O usurio ao realizar uma ligaco, envia uma voltagem ao
ringer (campainha) que avisa ao outro usurio a recepco de uma
chamada. A companhia telefnica tambm manda um tom de volta
avisando a quem discou o progresso da chamada.

Sinalizao de endereamento Podemos usar dois tipos de sinalizaco


para a discagem, o multifrequencial (dtmf) ou o pulso (usado nos antigos
telefones de disco). Os usurios que tem um teclado para discagem tm
associado a cada boto um conjunto de frequncias alta e baixa. A
combinaco destes dois tons indica para a central qual o digito. Isto
conhecido como dtmf (dual tone multifrequency).

Sinalizao de informao A sinalizaco de informaco mostra o


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

Tom de discagem;

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 45


4linux.com.br 4. Telefonia TDM

Sinal de ocupado;
Tom de retorno (ringback);
Congestionamento (congestion);
Numero invlido;
Tom de confirmaco.

4.1.1. Interfaces FX

As interfaces FX so interfaces analgicas que permite a conexo de um tronco ou


de um telefone com uma central PABX. Elas esto divididas em:

FXO (Foreign eXchange Office) - Basicamente utilizadas para a


comunicaco com o PABX. Uma porta FXO em um roteador se comunica
diretamente com a PSTN ou PABX, esta comunicaco requer dialtone,
indicaco de ringing e prover indicadores de chamadas em progresso.
Interfaces FXO conectam o PABX a outro comutador (PABX, Rede Publica,
gateway de voz sobre IP). muito comum ligar uma interface FXO de uma
central telefnica (ramal) um gateway VoIP e transportar a voz empacotada
para outro gateway onde uma interface FXS conecta um telefone.

FXS (Foreign eXchange Station) - So as conhecidas linhas residenciais


padro. Podem ser utilizadas para conectar dispositivos bsicos: telefones,
modems e faxes. Deve prover voltagem, gerar ringing, detecco de off-
hook e indicar chamadas em progresso.

4.2. Canais Digitais


Quando o numero de linhas telefnicas solicitadas por um cliente passa a ser muito
grande, a companhia telefnica normalmente entrega um canal digital. O E1 possui
uma taxa transferncia de 2 Mbps e pode ser dividido em 32 canais de 64 Kbps

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 46


4linux.com.br 4. Telefonia TDM

cada. A contrataco de linhas E1 abaixo de 2 Mbps conhecida como "E1


fracionrio". A conexo a Centrais publicas da Rede Brasileira de Telefonia feita
atravs de troncos E1. A Interface para um Tronco E1 um conjunto de dois cabos
coaxiais [metlicos ou pticos], um para transmisso [TX] e outro para recepco
[RX], por onde passam 30 canais de voz digitalizados [01 a 15 e 17 a 31] e 1 canal
de sinalizaco telefnica [16].

Os troncos E1 podem ser classificados, quanto a sua sinalizaco, em:

R2 ou MFC/R2 a sinalizaco mais comum em uso nos sistemas de


telefonia publica comutada no Brasil. Esta sinalizaco tambm chamada de
CAS (Channel Associated Signalling), pois vinculado ao canal de udio
trafega outro tipo de sinalizaco, a sinalizaco MFC (Multi Frequencial
Compelida). O R2-MFC est dividido em duas sinalizaces distintas: o R2 que
a sinalizaco de linha e o MFC que a sinalizaco de registro.

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


servicos integrados) - permite transmitir grandes volumes de dados, sinais de
vdeo e udio sobre uma unica linha telefnica a alta velocidade. O custo
depende de condices contratuais com a operadora.

4.3. Protocolos de Sinalizao


Protocolo conjunto de regras responsvel por controlar o formato e o significado

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 47


4linux.com.br 4. Telefonia TDM

dos pacotes ou mensagens trocadas entre entidades de uma mesma camada. Ele
define as opces de servico como a solicitaco do incio da comunicaco, a
confirmaco do pedido, a configuraco da transmisso de dados ou mdia, a
resposta ao envio de informaces e a desconexo definindo tambm sub protocolos
responsveis por controles especficos.

Um protocolo de sinalizaco para VoIP deve especificar a codificaco da voz, a


configuraco das chamadas, o transporte de dados, o modo de autenticaco,
seguranca, mtodos utilizados na comunicaco, cabecalho, enderecamento e
sintaxe da mensagem. Sinalizar significa que a informaco da chamada carregada
atravs dos limites da rede.

Os dispositivos de comunicaco denominados terminais devem ser bem definidos


pelo protocolo. Para controlar outras reas que no so cobertas pelo protocolo de
sinalizaco, h uma cooperaco 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 configuraco de
chamada, o HTTP (HyperText Transfer Protocol) como cdigo de resposta
aceitaco da ligaco.

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


seus protocolos de aplicaco 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 padro H.323


um conjunto de protocolos verticalizados para sinalizaco e controle da
comunicaco entre terminais que suportam aplicaces de udio (Voz), vdeo

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 48


4linux.com.br 4. Telefonia TDM

ou comunicaco de dados multimdia;

SIP (Session Initiation Protocol) - O protocolo SIP, definido atravs da


recomendaco RFC 2543 do IETF, estabelece o padro de sinalizaco e
controle para chamadas entre terminais e possui os seus prprios
mecanismos de seguranca e confiabilidade. Estabelece recomendaces para
servicos adicionais tais como transferncia e redirecionamento de chamadas,
identificaco de chamadas (chamado e chamador), autenticaco de
chamadas (chamado e chamador), conferncia, entre outros. o principal
protocolo adotado pelo mercado.

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


com o objetivo de estabelecer comunicaco entre servidores Asterisk. IAX
um protocolo de transporte, tal como o SIP, no entanto faz uso apenas de
uma unica porta UDP (4569) tanto para sinalizaco como para streams RTP
(audio). O fato de utilizar apenas uma porta uma vantagem em cenrios de
Firewall e/ou NAT. IAX2 verso nr. 2 do IAX. Apesar de suas vantagens em
relaco a outros procolos, sua implementaco ainda baixa.

4.4. Hardwares de Telefonia


Telefones IP Os telefones IP algumas vezes so chamados de Telefones
VoIP, Telefones SIP ou softphones. Baseiam-se no princpio da transmisso
de voz pela internet, ou so mais conhecidos como tecnologia VoIP (ou voz
sobre protocolo de internet).
Interfaces de comunicao so placas destinadas a prover soluces de
Telefonia Computadorizada, Telefonia IP e VoIP. Com conexo para interfaces
telefnicas analgicas, digitais e GSM, essas placas propiciam o
desenvolvimento de uma grande quantidade de aplicaces, como por
exemplo, PABX IP, Media Gateway, URA, Gravadores de Chamadas
Telefnica, Correio de Voz e Discadores Automticos.
Interface FXS a interface que fornece a linha analgica 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 prtica com Asterisk e SNEP Pgina 49


4linux.com.br 4. Telefonia TDM

Interface FXO a interface que recebe a linha analgica. o plug no


telefone ou aparelho de fax, ou o(s) plug(s) no seu sistema de telefonia
analgica;
Interface E1 uma interface que recebe um link de dados a 2Mbps.
Este tipo de enlace permite at 30 canais simultneos de voz e/ou vdeo,
geralmente fornecidos via rdio ou fibra at o modem do cliente;
Interface GSM uma interface que permite a conexo 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 Tambm conhecido como Banco de Canais, pois prove uma
srie de portas Analgicas do tipo FXS que podem ser conectadas
diretamente aos telefones analgicos;
Gateway GSM Tambm conhecido popularmente como chipeira, um
equipamento que possue uma srie de portas GSM e uma interface de
comunicaco com o PABX, que pode ser IP ou TDM. Possui por padro 1
slots para SIMM Card por porta, porm alguns modelos permitem at dois
SIMM Card por porta. Com este equipamento possvel reduzir o custo com
a telefonia contratando um servico de consulta a portabilidade de modo a
chamada efetuada pela mesma operadora do numero de destino;
ATA (Adaptador de Telefone Analgico) - usado para conectar o telefone ou
aparelho de fax analgico 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 mximo, quando forem de 8 portas ou mais identificado como um
Gateway;
EBS (External Board Series) - So mdulos compactos de 1U e meio rack
para todas as interfaces: E1, GSM, FXS, FXO e gravaco, trabalhando fora
do servidor, o que permite fcil ampliaco de cenrios, criaco de sistemas
redundantes, entre outras facilidades.

Existem no mercado uma srie de fabricantes de hardware de telefonia para


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

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 50


4linux.com.br 4. Telefonia TDM

como a KHOMP possuem hardware para soluces com alta disponibilidade e melhor
adequaco. Outros fabricantes mais conhecidos: Sangoma, Aligera, Digivoice,
RedFone, YXWireless, Audiocodes.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 51


Mdulo 5

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

5. Configurando um PABX-IP

5.1. Bsico do plano de discagem


O plano de discagem o coraco do Asterisk, pois ele quem define como as
chamadas sero processadas. Ele consiste de uma lista de instruces ou passos
que o Asterisk deve seguir. Essas instruces so disparadas a partir dos dgitos
recebidos atravs de um canal. A maior parte do plano de discagem est contida no
arquivo extensions.conf no diretrio /etc/asterisk. Normalmente este arquivo est
separado em quatro partes, a partir da seguinte lgica hierrquica:

Contexto
9 Extenso
9 Prioridade
9 Aplicaco

5.1.1. Contextos

Os contextos tm um papel importante no Asterisk na organizaco e seguranca do


plano de discagem. Os contextos tambm definem o escopo e permitem separar
diferentes partes do plano de discagem. importante ressaltar que os contextos
esto ligados diretamente aos canais, ou seja, cada canal existe dentro de um
contexto. Quando uma ligaco 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 ns fossemos criar um
contexto para a entrada de chamadas, poderamos definir como:
[entrada]
...
[saida]
...

Todas as instruces colocadas aps a definico so partes do contexto. Um novo


contexto iniciado quando uma nova definico de contexto encontrada.
No incio do arquivo extensions.conf podem ser declarados dois contextos especiais,
so eles: [general] e [globals] o primeiro utilizado para opces gerais e o

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 53


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

segundo para declaraco de variveis globais que podem ser utilizadas ao longo da
programaco, abordado com mais detalhes nos mdulos frente. A seguir
apresentamos um exemplo de Dialplan com os contextos [general] e [gobals]
[general] ;Opes gerais do Dialplan
writeprotect=yes ;Modo somente leitura
static=yes ;Modo esttico

[globals] ;Define as variveis Globais


TELEFONISTA=SIP/5500 ;Declarao de varivel

[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. Extenses

As extenses so declaradas dentro dos contextos e determinam o fluxo das


chamadas. Uma extenso na verdade uma regra. Quando uma chamada chega ao
Asterisk ele procura uma regra que case com as regras (extenses) declaradas
dentro de um contexto.

exten => nmero(nome), prioridade, aplicao

Dentro de cada contexto sero definidas diversas extenses, 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 incio de uma regra;

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 54


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

2000 o conjunto de dgitos que foi recebido (numero discado);


1, 2 e 3 aps o 2000 so as prioridades que determinam a ordem de
execuco;
Dial, voicemail e Hangup so aplicaces do Asterisk.

Neste exemplo, o Asterisk ao receber uma chamada para o numero 2000, far tocar
o Ramal 2000 por 60 segundos, se no atender, ser desviado para a prxima
prioridade que executa o Voicemail (caixa postal) e depois desliga a chamada.

Sendo assim, uma Extenso uma Regra de discagem dividida em 3 partes:

exten => Identificador + Prioridade + Aplicao

exten => define o incio de regra, seguido por um identificador por uma prioridade e
uma aplicaco.

Identificador pode ser de 3 tipos:

Numrico

exten => 9052

Numrico com CallerID

exten => 9052/1150603400

Alfanumrico

exten => ura32

Reservados/Especiais (No podem ser utilizados para outra finalidade)

exten => ?

onde ? pode ser:

s Usado em canais FXO onde no recebe o numero de B;


t Usado em URA quando o usurio no disca nenhuma opco;
T Timetout de Discagem, quando ningum atende;

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 55


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

i Digito Invlido, quando o usurio tecla uma opco invalida na URA;


a Usado quando pressionado '*' dentro do Voicemail;
h Usado no desligamento de uma chamada.
O identificador de uma extenso tambm pode ser expresso atravs de uma
mscara baseada em expresso regular (ER). Este um recurso muito util
para evitar que sejam construdos milhares de regras repetidas. Toda mscara
deve iniciar com o carcter underline ou underscore, como por exemplo:

exten => _0XXXXXXXX

ER Funo Exemplo
X Um numero entre 0 e 9 _XX -> qualquer numero de 00 a 99
Z Um numero entre 1 e 9 _ZZ -> qualquer numero de 11 a 99 exceto (20,30,40,...)
N Um numero entre 2 e 9 _NN -> qualquer numero de 22 a 99 exceto (20,21,30,31,...)
_[0-9] -> um numero entre 0 e 9 - equivalente a X
_[15-7] -> um numero da lista: 1 ou 5 at 7.
[e] Lista de opces
_[13457] -> um numero da lista: 1 ou 3 ou 4 ou 5 ou 7.
_[a-zA-Z] -> uma letra maiuscula ou minuscula do alfabeto.
_0800. -> Expresso regular que vale para qualquer numero
Qualquer carcter,
. que inicie com _0800 + qualquer outro carcter, 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 Expresses 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 prtica com Asterisk e SNEP Pgina 56


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

5.1.3. Prioridades

Definem a ordem de execuco de uma extenso. As prioridades podem ser:

Numricas:

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

A prioridade 1 obrigatria! No existe regra vlida se no houver esta


prioridade.

Prxima (next):

Imagine uma extenso com 50 prioridades. Se a prioridade 4 for removida


todas as demais abaixo devero 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()

Prxima (next) com Rtulo (Label):

Quando as prioridades eram somente enumeradas, era fcil 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 aplicaco Voicemail para que o
usurio deixe uma mensagem. Caso contrrio 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 so a ordem de execuco de cada extenso. Cada prioridade


chama uma aplicaco especfica. Normalmente estes numeros de prioridade

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 57


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

comecam com 1 e aumentam de um a um em cada extenso, mas isso no


impede de ser utilizada de forma mais intuitiva recebendo um rtulo.

Ateno! Cuidado para no declarar duas prioridades iguais na


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

5.1.4. Aplicaes

Uma aplicaco no plano de discagem o destino final da execuco de uma


extenso, ou seja, cada aplicaco tem uma finalidade exclusiva. O Asterisk possui
mais de 150 aplicaces, como por exemplo:

Dial Aplicaco responsvel por executar uma chamada;


Hangup Desliga um canal;
Answer Atende um canal;
MixMonitor Grava uma chamada;
Record Grava um unico canal de udio;
MeetMe Conferncia;
Goto Move uma chamada no plano de discagem.

As aplicaces tambm podem receber argumentos, e isso depende de cada


aplicaco. Para saber mais sobre cada uma delas possvel exibir uma pgina de
manual na prpria interface do Asterisk.

Para listar todas as aplicaces disponveis:

*CLI> core show applications

Para obter informaces detalhadas de uma aplicaco especfica:

*CLI> core show application Dial

5.2. Configurando um canal SIP


Um canal pode ser interpretado como uma conexo de entrada e/ou sada de uma
chamada no Asterisk. Um canal pode ser uma conexo a um telefone analgico

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 configuraces


esto 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 aps 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 seco define alguns parmetros globais do protocolo SIP e


tambm opces que podem ser herdadas pelas demais contas criadas ao
longo do arquivo.
udpbindaddr Define o endereco IP e Porta UDP onde as requisices
SIP sero recebidas. Quando o servidor possui mais de um endereco, eles
devem ser declarados separados por vrgula seguido por dois pontos mais
o numero da porta. A declaraco da porta s obrigatria quando esta for
diferente da porta padro (5060). Caso o servidor tenha que ouvir em
todas as interfaces o endereco 0.0.0.0 declarado, exemplo:
172.16.0.253:5065;
tcpbindaddr O mesmo que udpbindaddr, porm neste caso o SIP
transportado via TCP. Este protocolo utilizado quando se deseja

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 padro TCP e 5061 a padro 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
vrgula ou o parmetro all para desabilitar todos os codec's;
allow Habilita um ou mais CODEC's separados por vrgula ou o
parmetro all para todos os codec's;
[identificador] - Identificaco do ramal o identificador pode ser um valor
numrico, texto (string) ou alfanumrico.
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 questes bsicas
de seguranca utilizar sempre senhas fortes;
host Para que uma chamada seja entregue a um telefone, o Asterisk
precisa saber o seu IP. Caso o endereco seja declarado de forma esttica
e o telefone trocar o IP, o mesmo ira parar de receber ligaces. Se o
endereco for dinmico o parmetro dynamic deve ser definido.;
username Quando este parmetro declarado o valor do mesmo deve
ser utilizado como nome de usurio para registro, caso no tenha sido
declarado, o nome do [identificador] usado para o mesmo propsito.

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 padro 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 srie de Softphones disponveis no mercado, sendo que
alguns so gratuitos e outros no. Os softphones comercias tem suporte ao CODEC
G729 e podem ser instalados em muitos dispositivos como nos smartphones.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 prtica com Asterisk e SNEP Pgina 61


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

5.3. Interface grfica


O SNEP uma famlia de soluces capaz de transformar a comunicaco das
Empresas, integrando voz, dados e sistemas.

Na funco de um PABX hbrido (analgico, 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 comunicaco e aumentar a
eficincia nas relaces 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 administraco, configuraco e monitoramento


que agrega inteligncia ao Asterisk.

5.3.1. Instalando o SNEP

A ISO (Imagem de CD bootvel) foi criada com o intuito de facilitar todo o processo
de instalaco dos softwares necessrios para o completo funcionamento do SNEP.
As configuraces bsicas de alguns softwares tambm so feitas automaticamente,
o que torna a instalaco do SNEP um processo simples, rpido 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 instalaco tambm pode ser feita manualmente, baixando o arquivo .tgz ou o
pacote .deb do SNEP. Estes arquivos e os respectivos manuais de instalaco podem
ser encontrados no site www.sneplivre.com.br.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 62


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

5.3.2. Conhecendo a interface grfica

A Interface do SNEP foi projetada obedecendo conceitos de ergonomia e


praticidade, tendo como caractersticas principais: clareza, simplicidade e
objetividade.

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

Facilidade para cadastrar Ramais, Troncos, Rotas, etc;


Ajustes automticos de arquivos de configuraco;
Monitoramento em tempo real de logs, links, conexes, etc;
Relatrios, Grficos e Estatsticas diversos.
A seguir poderemos identificar as principais funcionalidades:

Exibe menus de mdulos


adicionais instalados

Indicadores de menu e Lista itens cadastrados


rotina em execuco Menu principal
Ajuda contextual

Status do sistema/servicos Verso do SNEP

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 63


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

5.3.3. Conceitos: Ramais e Troncos

Troncos Os Troncos so o meio de comunicaco 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:

Analgicos: linhas de telefonia convencionais onde cada numero geralmente


exige um meio fsico prprio;
Digitais: conhecido tambm como E1 ou DDR, consiste em um grupo de
numeros de telefones que chegam/saem por um unico meio fsico;
GSM: consiste em um chip de telefonia celular geralmente conectado
atravs de unidades conhecidas como Cel-Fix ou atravs de placas
especficas acopladas ao servidor de telefonia;
VOIP: consistem em contas (host, usurio, senha) fornecidas por um
provedor de telefonia que por sua vez encaminham as chamadas para o
mundo externo;

Ramais Os Ramais so o meio fsico utilizado para prover comunicaco entre


duas ou mais pessoas. Os tipos de ramais mais comuns podem ser:

IP: so ramais que utilizam protocolos de comunicaco especficos de


telefonia IP, como SIP e IAX2. Ramais IP podem ser aparelhos especficos ou
ento 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 Telefnica que est
conectada ao SNEP.
Khomp: este tambm um conceito utilizado pelo SNEP. Consiste em
identificar em qual porta de um Banco de Canais KFXS um ramal Analgico
est conectado.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 64


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

5.4. Laboratrio Asterisk

5.4.1. Objetivos

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


Configurar dois ramais SIP via interface grfica.

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

O Asterisk j possui o arquivo /etc/asteris/sip.conf repleto de informaces de


exemplo, porm em nosso laboratrio vamos criar um arquivo desde o inicio que
ser incrementado com mais parmetros ao decorrer dos laboratrios.

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 no tem experincia com Linux

# nano /etc/asterisk/sip.conf

Copie este modelo trocando as letras NN pelo numero 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 prtica com Asterisk e SNEP Pgina 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 mudancas 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 padro do Asterisk, no 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 no tem experincia com Linux

# nano /etc/asterisk/extensions.conf

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

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 alteraces 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 no 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 criaco de um perfil
ser apresentada, clique em OK para continuar

Voc pode configurar o Twinkle de vrias formas. Neste laboratrio vamos usar o
guia de configuraco Wizard.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 67


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

Entre com o nome do Perfil, troque NN pelo numero da sua Filial

Complete os campos conforme o modelo, troque NN pelo numero da sua Filial.

5.4.5. Configurando o telefone IP

Identifique o IP do seu telefone e acesse as configuraces atravs do seu


navegador. Configure um segundo ramal neste telefone.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 usurio.

b) Faca uma ligaco entre os ramais e verifique se est funcionando.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 69


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

5.5. Laboratrio SNEP

5.5.1. Baixando e instalando o pacote do SNEP e dependncias

# 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 permisses

# 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 parmetros. Edite os arquivos listados abaixo usando

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 alteraces:

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 diretrios de audio

Msicas 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 prtica com Asterisk e SNEP Pgina 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. Criao de base de dados, usurio e importao de dados

Voc precisa a senha de administrador do Mysql, informada na instalaco deste. Ao


executar os comandos a seguir, ser criada uma base de dados no MySQL com as
seguintes informaces:

Nome da base de dados (database) : snep25


Usurio de Conexo: snep
Senha do Usurio de Conexo: sneppass

Este usurio/database permitem conexes somente locais (localhost). Para


conectar-se ao MySQL a partir de outra mquina, ser necessrio 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 prtica com Asterisk e SNEP Pgina 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. Configuraes iniciais do SNEP

Acesse a interface grfica 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 Configuraes >> Parmetros, 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 configuraes SNEP x Asterisk

Verifique no diretrio /etc/asterisk/snep/snep-sip.conf que os ramais que voc


criou na interface, esto todos neste arquivo. Porm, o Asterisk ainda no 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 configuraces do sip com o comando:

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 73


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

*CLI> sip reload

Obs: Os ramais que voc cadastro no Asterisk tambm podem ser includos na
interface do SNEP. Para isso, na seco tecnologia de canais, altere o tipo para
Manual, e no campo Manual, utilize a combinaco: SIP/numero_ramal.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 74


Mdulo 6

Anlise de rede
4linux.com.br 6. Anlise de rede

6. Anlise de rede
Precisamos entender que at o comeco da dcada de 1990 haviam dois tipos bem
distintos de rede publica:

Rede de telefonia (PSTN);


Rede de computadores (Internet).

A rede de telefonia se baseava em servicos dedicados com meios de transmisso


determinsticos; ou seja, havia sempre um meio de transmisso apto a transmitir a
informaco desejada. No caso, a voz at o cliente final. Isso era conseguido gracas
capilarizaco das redes com o mnimo de compartilhamentos desses recursos.
Com isso, tem-se um cenrio ideal para a rede baseada em circuitos.

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


disputa pelo recurso meio de transmisso. Isso acontece no s nas redes locais
onde a formaco da rede em rvore mas tambm na Internet. No bastasse isso,
vrios servicos distribudos 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, vrias reas de estudo de redes de telefonia e
de computadores, uma vez que existe um panorama bastante inspito para a
transmisso de voz em tempo real, transmisso esta fragmentada em pacotes.

Dentre as vrias reas, cabe destacar:

tecnologias/protocolos de sinalizaco;
tecnologias/protocolos para descrever quais os tipos de mdia suportados em
cada ponta da comunicaco;
tecnologias/protocolos para transmisso das mdias em ambos os sentidos;
tecnologias/protocolos para garantir a qualidade do servico (QoS).
Enquanto que os trs primeiros esto mais ligados s pontas da comunicaco,
geralmente dois usurios finais, no ultimo item, qualidade de servico, que reside

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 76


4linux.com.br 6. Anlise de rede

hoje o grande problema de implementaco de VoIP em escala.

6.2. Arquitetura de redes


Atravs do modelo tradicional de telefonia, praticamente invivel a convergncia
de voz e dados em funco da necessidade de grande quantidade de banda
passante e o custo a ser replicado para os usurios. Neste modelo, cada circuito
alocado para uma chamada telefnica tem garantido durante todo tempo em que a
chamada estiver estabelecida 64 Kbps de banda.

Nesse cenrio, a tecnologia VoIP ou Voz sobre IP se apresenta como a evoluco do


modelo telefnico tradicional, permitindo a transmisso de voz em tempo real, que
antes era feita sobre uma rede comutada em circuitos e em sua evoluco feita em
uma rede comutada por pacotes, encapsulada em pacotes de dados e transportados
atravs 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 fsico e a tecnologia de enlace utilizada. Os
protocolos e codec's VoIP fazem parte das camadas de Aplicaces, Sesso e
Transporte do modelos OSI conforme tabela abaixo.

Modelo OSI VoIP

Camada 7 Aplicao Softphones / Asterisk

Dados Camada 6 Apresentao Codec (G711, iLBC, G729)

Camada 5 Sesso 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 Fsica Par Metlico, Fibra

Na camada de aplicao est presente a voz comprimida de acordo com o

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 77


4linux.com.br 6. Anlise de rede

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

Na camada de sesso so 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 Aplicaco e Sesso so encapsulados em segmentos. No caso dos
codec's, eles so encapsulados pelo RTP, RAS ou RTCP e no caso dos
protocolos de sesso eles so normalmente encapsulados pelo UDP.

Dessa forma, o segmento gerado, seja ele proveniente da camada de aplicaco ou


de sesso, sero encapsulados pelo protocolo IP, formando um pacote e enviados
atravs do meio de comunicaco disponvel, 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 cabecalho, restando o segmento,
esse aberto, remove-se seu cabecalho restando a aplicaco.

6.3. Definindo um protocolo

6.3.1. SIP

Padro aberto descrito pela IETF, largamente implementado, as principais


operadoras VoIP esto usando SIP. o protocolo padro para a telefonia IP no
momento.

Pontos fortes: padro da IETF, larga adoco do mercado;


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

6.3.2. IAX2

Protocolo proprietrio do Asterisk. Eficiente em banda passante e principalmente


pode passar facilmente por firewalls com NAT.
Pontos fortes: eficincia em banda passante, seguranca e facilidade com
NAT;
Pontos fracos: proprietrio, baixa adoco pelo mercado.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 78


4linux.com.br 6. Anlise 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 padro para
fornecedores de PABX e roteadores, muito em bora eles comecem a adotar o SIP.
Excelente para videoconferncia.
Pontos fortes: larga adoco do mercado, padronizaco 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 possvel o transporte de pacotes


contendo voz, vdeo ou outro tipo de mdia (informaco) sobre uma rede IP. O RTCP
um protocolo auxiliar no processo de transmisso do RTP ele que consegue
medir o jitter e a qualidade da mdia passante.

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


Pontos fracos: no garante qualidade de servico, pois trafega sob UDP.

6.3.5. Quadro comparativo

Protocolo Mantenedor Utilizao


- Troncos entre servidores Asterisk
IAX2 Digium - Terminais atrs de NAT
- Conexo com provedores de servico
- Telefones IP
SIP IETF
- Conexo com provedores de servico
- Telefones H323
H323 ITU-T
- Gateways H323
SCCP Cisco (Proprietrio) - Telefones IP Cisco e CallManager

6.4. Definindo um CODEC


Codec's so usados para converter um sinal analgico de voz em uma verso
codificada digitalmente. Codec's variam na qualidade do som (MOS), banda
passante necessria e requisitos computacionais. Cada servico, programa, fone ou

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 79


4linux.com.br 6. Anlise de rede

gateway, tipicamente, suporta vrios codec's diferentes e quando vo falar um com


outro negociam quais codec's sero empregados. Alguns codec's como o G.729
necessitam de pagamento de royalties para o seu uso. Quando dois dispositivos
conectados ao Asterisk no possuem codec's compatveis entre si, o Asterisk
executa um processo chamado transcodificaco 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

Resistncia 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 mdia dos resultados das
opinies). 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 (milhes de instrues por


segundo). Chega a ser difcil comparar a complexidade em MIPS, pois ela dependente de um
processador. Em muitos casos os codec's so processados em DSPs (Digital Signal Processor),
preparados, construdos e at programados para isso, o que alivia a CPU principal do processo de
codificao e decodificao. 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 aplicaco diferente, dependente do sistema,


ambiente e soluco a que ele for implementado. Por isso, saber escolher pode fazer
uma grande diferenca. Abaixo temos uma anlise para cada tipo de rede:

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


passante em abundncia, de forma que o nvel de compresso 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
cabecalhos) para cada ligaco. O codec G711 conhecido por ulaw para
G711u e alaw para G711a que so variaces do PCM equivalente ao G711;

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

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 80


4linux.com.br 6. Anlise de rede

normalmente temos uma banda passante pequena (64, 128 ou 256 Kbps)
onde podemos priorizar o trfego de voz. Nesse tipo de redes, normalmente,
pouco comum ocorrerem perdas de pacotes. H trs bons codec's para
esse tipo de rede: o G.729 provavelmente se destaca, pois prov uma
excelente qualidade de voz com uma compresso de 8 para 1; o G.723
permite taxas de compresso ainda maiores, mas com certa perda de
qualidade; por fim temos o GSM que uma alternativa para aqueles que
procuram custo/benefcio. O ponto negativo do GSM fica para o fato de no
ter suporte ao codec na maioria dos telefones IPs e ATAs;

Codec's para Internet: Em uma rede com Internet h dois desafios: banda
passante e falta de controle do meio. Por isso temos uma latncia alta e jitter
(variaco da latncia), 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 resistncia a perda de
pacotes e usa pouca banda passante. Mais informaces podem ser
encontradas na tabela de codec's deste mdulo.

6.4.2. Overhead, payload e clculo de banda

Quando os dados so enviados atravs de uma rede orientada a pacote, cada


pacote possui uma srie de cabecalhos, os cabecalhos contm diversas
informaces importantes para o envio/recebimento destes pacotes. Porm os
cabecalhos 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


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

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


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

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 81


4linux.com.br 6. Anlise de rede

Codec Link Clculo 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)

Estratgias para reduo de overhead dos cabealhos

Compresso do cabealho RTP


Definida na RFC2508;
Em um link Frame Relay utilizando g.729 pode-se conseguir uma reduco
de 58,2% (de 26.4 Kbps para 11,2 Kbps);
No suportado pelo Asterisk deve ser implementada fim-a-fim nos
roteadores de borda, o que acaba dificultando ainda mais sua
implementaco.
Utilizao do IAX2 em modo trunked
Utiliza o mesmo cabecalho para vrios pacotes de voz;
Rendimentos crescentes em funco do numero de chamadas simultneas;
Implementado entre servidores Asterisk exclusivamente no protocolo IAX2.
Alterar o tamanho do quadro de voz transportado
Sacrifica latncia para reduzir banda passante utilizada;
Todos os equipamentos devem utilizar o mesmo numero de frames por
pacote;
Para utilizar com Asterisk:

allow=G729:40

6.5. Transcodificao de CODEC


Em algumas situaces 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 prtica com Asterisk e SNEP Pgina 82


4linux.com.br 6. Anlise de rede

conhecido como transcodificaco e consome muitos recursos de CPU.

Sempre que h converso de pacotes de voz de um codec para o outro, inclusive


em leitura e gravaco de gravaces de dados, ocorre a transcodificaco.

Se esse processo puder ser evitado pode-se poupar recursos de CPU e evitar a
compra de licencas G.729 desnecessrias.

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 parmetro chamado type. Este parmetro muito importante pois ele determina
como o Asterisk ira tratar o mtodo de autenticaco de uma chamada entrante ou
sainte.

USER Usurios podem fazer chamadas atravs de um servidor Asterisk,


mas no podem receber chamadas do servidor. Isto util em uma situaco
onde voc pode prover alguns servicos telefnicos ao cliente, mas nunca
deve poder chamar o telefone, tal como um provedor de longa distncia. 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 util para ter um
telefone que s recebe chamadas, ou encaminha chamadas a um servidor
Asterisk de uso especial como um Media Server para servicos de Correio de
Voz. Quando criamos uma conta do tipo Peer no Asterisk, esta conta de
SADA, ou seja, o Asterisk envia suas credenciais para o destino, o destino
quem valida as credencias do Asterisk e permite ou no essa chamada. Este
o tipo de conta padro no uso com operadoras VoIP, pois neste modelo
quem recebe as credenciais a operadora e no o Asterisk.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 83


4linux.com.br 6. Anlise de rede

FRIEND Normalmente, o servidor ou dispositivo precisaro 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 extenses. 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 mtodo de autenticaco.

Dica: Para RAMAIS, utilize sempre o tipo FRIEND.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 84


4linux.com.br 6. Anlise de rede

6.7. Laboratrio Asterisk

6.7.1. Objetivos

Instalar e configurar o CODEC g.729 Open Source


IMPORTANTE! Este laboratrio tem por finalidade ensinar o aluno a
instalar a verso OpenG729 que NO deve ser utilizada em ambiente
corporativo sem estar devidamente licenciado. Para o desenvolvimento de
projetos e solues que venham a utilizar o G729 adquira de forma legalizada
no website da Digium. O custo mdio 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. Porm tambm comum encontrar mquinas com processadores
64 bits rodando sistema operacional 32bits (o inverso no possvel), logo se o
sistema operacional 32bits o CODEC instalado tambm deve ser 32bits.

Conhecendo a arquitetura do processador.

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


conteudo do arquivo cpuinfo, atravs da execuco 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 prtica com Asterisk e SNEP Pgina 85


4linux.com.br 6. Anlise 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 parmetro clflush size. No exemplo acima, o valor 64 identifica


que o processador tem arquitetura 64 bits. Este comando em servidores com
multiplos processadores e nucleos pode ser bem extenso, observe a primeira
linha processor: 0 indicando que este bloco referente ao primeiro nucleo do
primeiro processador.

Outra informaco relevante so as flags do tipo SSSE3, SSE3 e SSE4, estas


identificam a presenca de co-processadores que auxiliam no desempenho da
transcodificaco.

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 diferenca inclusive para o Asterisk. Vale ressaltar que Kernel 64 o
mais indicado por questes de performance do sistema. O comando indicado
para obter esta informaco :

# uname -a

Os resultados obtidos devem ser parecidos com:

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 86


4linux.com.br 6. Anlise 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 verso do Asterisk.

Por ultimo temos que identificar a verso do Asterisk instalada no sistema.


Para tal execute.

# asterisk -vvvr
*CLI> core show version

A sada 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 mdulo OpenG729.

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


verso do seu Asterisk. Ser apresentada uma lista com as opces para
download de codec's G722 ou G729.

Para processador 64 bits Intel e Kernel 64 utilize o seguinte mdulo:

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 prtica com Asterisk e SNEP Pgina 87


4linux.com.br 6. Anlise de rede

Algumas informaces uteis sobre a nomenclatura dos arquivos:

ICC Compilador C da Intel, indicado para ambientes de produco;

GCC Compilador C GNU, o padro para uso com Kernel Linux;

core2 Compatvel com processadores Intel multicore, inclundo Xeon;

Opterom Processador da AMD;

Athlon Processador AMD.

Efetuando o download do mdulo 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 transcodificao 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 prtica com Asterisk e SNEP Pgina 88


4linux.com.br 6. Anlise 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

Aps a alteraco, recarregue as configuraces 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
informaces relevantes dos canais ativos.

*CLI> sip show channels

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 89


Mdulo 7

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

7. Protocolo IAX

7.1. IAX Conceitos


O IAX, acrnimo para Inter Asterisk eXchange, um protocolo desenvolvido pela
Digium com o objetivo de estabelecer comunicaco entre servidores Asterisk. O IAX
um protocolo de transporte, tal como o SIP, no entanto faz uso apenas de uma
unica porta UDP (4569), tanto para sinalizaco como para mdia (streams RTP). O
fato de utilizar apenas uma porta uma vantagem em cenrios com Firewall e/ou
NAT. IAX2 verso 2 do IAX, j padronizado na RFC 5456.

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


formato binrio sendo classificadas como frames. O IAX se utiliza dos chamados Full
Frames, para transmisso de dados de sinalizaco, ou seja, a chamada telefnica
estabelecida, monitorada e encerrada com a troca de Full Frames, que so enviados
de tempos em tempos. J os chamados Mini Frames, so responsveis pela
transmisso dos dados de mdia (voz).

O trfego de informaco do protocolo IAX tambm pode ser feito em modo trunk, de
tal maneira que vrias chamadas podem ser agrupadas em um unico conjunto de
pacotes, com um unico cabecalho IP, economizando os recursos de rede e
diminuindo o atraso dos pacotes de voz.

7.2. Caractersticas do IAX2


Minimiza o uso de banda passante para o trfego de ambos, media e controle
com nfase especfica em chamadas de voz individuais;
Prov transparncia NAT (Network Address Translation);
Tem a possibilidade de transmitir informaces sobre o plano de discagem;
Suporta a implantaco eficiente de recursos de paging e intercomunicaco;
Utiliza uma unica porta: UDP 4569.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 91


4linux.com.br 7. Protocolo IAX

7.3. Mtodos de autenticao


O protocolo IAX2 suporta basicamente trs mtodos de autenticaco:

plaintext Texto puro, esse mtodo o padro e oferece pouca seguranca


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

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

rsa Par de chaves de criptografia RSA. mtodo mais seguro pois utiliza as
chaves para autenticaco. Necessita de configuraco em ambos servidores.

7.3.1. Conexes de entrada

Quando o Asterisk recebe uma conexo de entrada, a informaco da chamada inicial


pode incluir um nome de usurio (do campo username) ou no. Alm disso, a
conexo de entrada tem um endereco IP que o Asterisk usa para a autenticaco
tambm.

Se o nome do usurio fornecido, o Asterisk segue o seguinte fluxo:

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


seco nome ([username]). Se no encontra, recusa a conexo;
2. Se a entrada encontrada tem configuraces do tipo deny/allow
(negar/permitir), compara o endereco IP do originador da chamada. Se a
conexo no for permitida, recusa a conexo;
3. Faz a checagem da senha (secret) (plaintext, md5 ou rsa). Se falhar, recusa a
conexo;
4. Aceita a conexo e envia para o originador para o contexto especificado na
configuraco context= da entrada no arquivo iax.conf.

Se um nome de usurio NO 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 tambm nas restrices do tipo deny/allow. Se uma

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 92


4linux.com.br 7. Protocolo IAX

entrada encontrada, aceita a conexo e usa o nome da entrada do iax.conf


como o nome do usurio;

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


chave RSA especificada e tambm verifica restrices deny/allow. Se uma
entrada encontrada, tenta autenticar o chamador usando a senha
especificada ou a chave, e se passar, aceita a conexo e usa o nome
encontrado no iax.conf como nome do usurio.

7.3.2. Conexes de sada

Conexes de sada podem pegar suas informaces de autenticaco de:

Uma descrico do canal IAX2 passado pelo comando Dial();


Uma entrada type=peer ou friend no arquivo iax.conf;
Uma combinaco dos dois.
Exemplo:

Supondo que o arquivo iax.conf contenha as seguintes informaces:

[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 reao do Asterisk ser ...


Conectar-se com host curso.com, usando o
Dial(IAX2/curso-out/1234) usurio e senha especificados no arquivo
iax.conf para autenticaco.
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 prtica com Asterisk e SNEP Pgina 93


4linux.com.br 7. Protocolo IAX

Ao utilizar o comando ... A reao do Asterisk ser ...


Conectar-se com o host curso.com, mas
nenhum nome de usurio foi especificado.
Dial(IAX2/curso.com/1234) Como nenhuma das entradas no arquivo
iax.conf bate com a descrico do canal
curso.com, a conexo 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 conexes entre hosts com alto grau de
confianca

7.4. Arquivo de configurao


O arquivo de configuraco do IAX (/etc/asterisk/iax.conf) uma coleco de seces,
cada qual representando uma entidade dentro do escopo do IAX, com exceco da
seco [general].

Na seco [general] um numero de parmetros que afetam todo o sistema pode ser
configurado. Especificamente os codec's default, portas, enderecos, comportamento
do jitter, bits de TOS e registros.

7.4.1. Seo [general]

Diretiva Descrio
port = <portnum> Define a porta em que o IAX vai se ligar. O padro 4569.
Isto permite ligar o IAX a um endereco IP especifico e no
bindaddr = <ipaddr> a todos os enderecos. O padro : 0.0.0.0 (todos
enderecos)
A seleco de banda passante define a seleco de codec's
com valores apropriados para uma determinada banda.
high habilita todos os codec's e recomendado para
conexes acima de 10Mbps.
mdium 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 conexes de
banda larga se desejado.
low elimina o ADPCM e MP3, deixando apenas o G723,
GSM e LPC10. A configuraco recomendada selecionar
low e depois desabilitar LPC10. O LPC10 tem a voz
robotizada.
allow/disallow=[gsm|lpc10| O "allow" e "disallow" permite fazer uma seleco criteriosa
g723.1|adpcm|ulaw|alaw|mp3|
slinear|all] de codec's.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 94


4linux.com.br 7. Protocolo IAX

Diretiva Descrio
O buffer de jitter deve sempre estar habilitado a menos que
jitterbuffer = [yes|no]
voc saiba que todas as suas conexes esto na LAN.
A quantidade de drops o numero mximo de pacotes de
dropcount = <dropamount> voz que voc vai permitir que sejam descartados. Valores
uteis so 3-10.
O maxjitterbuffer a quantidade mxima de buffer de jitter
maxjitterbuffer = <max>
que pode ser usado.
O maxexcessbuffer a quantidade mxima de excesso no
maxexcessbuffer = <max> buffer de jitter que permitido antes que o buffer de jitter
seja lentamente comprimido para eliminar a latncia.
Configura o cdigo de contabilizaco para registros
accountcode = <code> recebidos com o IAX. O cdigo de contabilizaco pode
sobrescrever a base por usurio 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 cobranca e documentaco respectivamente;
default seleciona o default do sistema.
O IAX pode opcionalmente configurar o bit TOS (Type of
Service) do cabecalho IP. Isto ajuda a performance no
tos=[lowdelay|throughput|
reliability|mincost|none] roteamento. O valor recomendado lowdelay, que muitos
roteadores vo reconhecer e dar prioridade melhorando a
qualidade da voz.
O registro permite notificar um servidor Asterisk remoto
(com um endereco fixo) qual seu endereco 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
obrigatrio e o nome do peer remoto a quem ns
register=><name>[:<secret>]@<
host>[:port]: desejamos nos identificar. Entretanto se em colchetes ( [ ] )
ento 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 publica
(/var/lib/asterisk/keys/<name>.key). O campo "host"
obrigatrio e o nome do host ou endereco IP do servidor
Asterisk remoto. A especificaco da porta opcional.

7.4.2. Clientes IAX

Diretiva Descrio
[identifier] A seco inicia com um identificador em colchetes ( [ ] ). O
identificador deve ser uma string alfanumrica.
type=[user|peer| Esta linha diz ao asterisk como interpretar esta entidade. Usurios
friend] so dispositivos que se conectam a ns, enquanto peers so
pessoas s quais nos conectamos, e friend um atalho para criar
um user e um peer com informaces idnticas.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 95


4linux.com.br 7. Protocolo IAX

Campos do tipo User

Diretiva Descrio
Uma ou mais linhas de contexto podem ser especificadas
pelo usurio, deste modo dando ao usurio a possibilidade de
context = <context>
colocar as chamadas em dados contextos. A maioria dos
usurios usa o contexto default.
As regras de permitir e negar podem ser aplicadas a
usurios, permitindo a eles se conectar de determinados
enderecos IP e no de outros. As regras so interpretadas na
seqncia e so todas avaliadas em um dado endereco IP,
permit = <ipaddr>/<netmask> com o resultado final sendo a deciso Por exemplo:
deny = <ipaddr>/<netmask> permit=0.0.0.0/0.0.0.0
deny=192.168.0.0/255.255.255.0
Esta combinaco 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 usurio 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 mtodos de autenticaco so
auth = [md5|plaintext|rsa] permitidos. Multiplos mtodos podem ser especificados,
separado por vrgulas.
A linha secret especifica a senha compartilhada para os
secret = <secret>
mtodos md5 ou autenticaco em texto simples.
A linha "inkeys" especifica que chaves ns podemos usar
para autenticar um peer remoto. Os arquivos de chave
inkeys = key1[:key2...]
ficam em /var/lib/asterisk/keys/<name>.pub e so chaves
publicas.

7.5. Cenrios de uso

7.5.1. Cliente IAX

O Asterisk suporta telefones IP baseados em IAX como o SNOM e o AIXy e tambm


softphones como o Firefly e Gnophone. Para configurar um telefone IAX basta
configurar o arquivo iax.conf e o prprio telefone. Exemplo de configuraco de um
telefone IAX:

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

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 96


4linux.com.br 7. Protocolo IAX

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

7.5.2. Provedor IAX

Neste cenrio, feita a conexo a um provedor de telefonia IAX como a Brasil Vox
Telecom (http://www.brasilvox.com.br).

O site http://www.voipcharges.com/providers.php dispe de uma lista de provedores


SIP/IAX pelo mundo.

7.5.3. Entroncamento IAX

Cenrio onde dois servidores Asterisk esto ligados usando o protocolo IAX2.
Existem diversas maneiras de fazer esta conexo, sendo a mestre-escravo a mais
conhecida.

Porm, se voc est em uma rede confivel, pode abstrair diversas diretivas da
configuraco do arquivo iax.conf. O exemplo a seguir mostra como conectar dois
Asterisk de maneira muito simples, utilizando o protocolo IAX. Note que a unica
diferenca reside no numero IP, um apontando para o outro.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 estatsticas 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 prtica com Asterisk e SNEP Pgina 98


4linux.com.br 7. Protocolo IAX

7.7. Laboratrio Asterisk

7.7.1. Interligando o PABX das filiais usando troncos IAX

O objetivo de exerccio permitir que cada filial possa ligar para as outras por
intermdio de uma conexo 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 no tem experincia 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. No necessrio 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
instruces 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 prtica com Asterisk e SNEP Pgina 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 = Numero da Filial

Crie uma extenso no plano de discagem para cada ligar para outras
filiais: Edite o arquivo /etc/asterisk/extensions.conf e crie uma extenso
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 = Numero da minha Filial.

Obs.: Digite dialplan reload na *CLI> do Asterisk para ativar as alteraces.

*CLI> iax2 reload


*CLI> dialplan reload
*CLI> iax2 show peers

Disque para os ramais das outras filiais para testar as configuraces.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 100


4linux.com.br 7. Protocolo IAX

7.8. Laboratrio SNEP


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

Lembre-se que para a comunicaco entre voc e a filial, ambos devem ter um tronco
entre si.

Atente para as seguintes informaces:

Identificador uma expresso alfanumrica 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 seco [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 reconheca estas alteraces, na CLI>, digite:

*CLI> iax2 reload

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

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 101


Mdulo 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 aplicao do modelo OSI. Sua principal funco estabelecer chamadas
e conferncia atravs de redes IP, sem considerar o tipo de mdia a ser transferida.
Esse protocolo um padro do IETF (Internet Engineering Task Force) e sua ultima
verso, a SIPv2 foi publicada em 2002 sob a RFC 3261.

O protocolo SIP pertence ao grupo dos protocolos de sinalizaco fim-a-fim baseado


em texto, o qual sinaliza o incio, a modificaco e o encerramento das sesses. As
sesses se baseiam no modelo cliente-servidor e independem do tipo de dado
trafegado dentro do canal estabelecido. Os protocolos de sinalizaco para VoIP,
como o SIP, devem contemplar a codificaco de voz, a configuraco das chamadas,
o transporte de dados, o modo de autenticaco, os requisitos e as tecnologias de
seguranca, as primitivas de comunicaco, o formato do cabecalho e do
enderecamento e a sintaxe das mensagens.

As funces bsicas do protocolo SIP so:

possui mecanismos para permitir que dois interlocutores estabelecam


chamadas atravs de uma rede IP. Atravs do SIP, o emissor avisa ao
receptor que deseja iniciar a sesso, ambos acordam a codificaco de mdia
e podem encerrar a sesso;
permite que o emissor determine o IP corrente do receptor, pois este pode
estar em uma rede com DHCP ou mesmo utilizar vrios dispositivos SIP ao
mesmo tempo;
contm mecanismos que gerenciam as chamadas sem que seja necessrio
reinici-la, como adico de novas mdias, mudancas de codificaco, adico
de outros participantes, transferncia de chamadas e chamada em espera.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 103


4linux.com.br 8. Protocolo SIP

8.2. Caractersticas do SIP


O protocolo SIP foca na simplicidade e, uma vez que apenas um mecanismo de
controle da sesso, apenas inicia, modifica e termina uma sesso de comunicaco,
no intervindo nos dados trafegados, o que torna o protocolo facilmente adaptvel
s mais diversas arquiteturas.

8.2.1. Arquitetura

A arquitetura do SIP composta de quatro elementos bsicos, que juntos, formam


uma rede SIP:

Agente de Usurio
Funco: Interagir com o usurio do sistema SIP;
Caractersticas: Envia e recebe requisices SIP;
Papel: Pode atuar como cliente (UAC Agente Utilizador Cliente) ou
servidor (UAS Agente Utilizador Servidor).

Proxy SIP
Funco: Recebe as requisices e as encaminha para servidores mais
prximos do destino;
Papel: Servidor intermedirio. Atua como cliente e servidor;
Tipo: Stateful Proxy Server e Stateless Proxy Server:
O Stateful Proxy Server mantm o estado da chamada e permite dividir
a chamada, criando uma rvore de busca pelo usurio nos multiplos
servidores. Vantagens: maior confiabilidade, capacidade de mensurar o
gasto do cliente, utiliza o protocolo TCP;
O Stateless Proxy Server encaminha para os prximos saltos tanto as
requisices com as respostas e no mantm o estado das conexes.
Vantagem: maior velocidade.

Servidor de Redirecionamento
Funco: Responde uma requisico do Agente do Usurio com o nome e a
localizaco do usurio;
Caractersticas: No reencaminha pedidos.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 104


4linux.com.br 8. Protocolo SIP

Servidor de Registro
Funco: Servico de localizaco;
Caractersticas: Armazena registro sobre usurios.

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
cabecalho da mensagem e field representa a informaco contida neste campo do
cabecalho. O SIP utiliza a regra de ignorar os campos de cabecalhos que no
puderam ser entendidos pelo servidor. Abaixo podemos ver uma estrutura bsica do
cabecalho SIP. As informaces foram retiradas da RFC 3261, que especifica o
protocolo SIP.

Uma requisico SIP vlida deve conter ao menos os campos To, From, CSeq, Call-
ID e Max-Forwards, os quais so todos obrigatrios em todas as mensagens SIP.
Outros campos podem se juntar a esses.

8.2.3. Comunicao

O protocolo SIP utiliza o modelo cliente-servidor para comunicaco entre as


entidades envolvidas no protocolo. Na sua verso 2 (RFC 3261), possui seis
primitivas de comunicaco:

Invite Solicita o incio de uma sesso. Nessa mensagem, podem-se


determinar, atravs do protocolo de descrico da sesso (SDP, do ingls), os
parmetros da sesso. Caso esta primitiva seja enviada depois da sesso
iniciada, ela utilizada para alterar os parmetros da sesso e conhecida
como Re-Invite;
Ack a confirmaco de uma mensagem de Invite. O Ack deve conter a
configuraco dos parmetros da sesso, caso o Invite correspondente no
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 prtica com Asterisk e SNEP Pgina 105


4linux.com.br 8. Protocolo SIP

como primitivas, codec's e extenses suportadas, e a sua disponibilidade;


Register utilizada por um cliente que deseja registrar um apelido (alaias)
de seu endereco em um servidor SIP;
Bye utilizada para terminar a sesso.

As respostas a mensagens do SIP so em formato texto como no protocolo http.


Aqui esto as respostas mais importantes.

1XX mensagens de informaco (100tentando, 180campainha,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 No
implementado);
6XX falha global (606 No aceitvel).

8.2.4. Autenticao

Podemos dividir a autenticaco no SIP em dois grupos: Entre dois UA ou entre um


UA e um servidor. Os agentes de usurios devem se autenticar no incio da sesso a
fim de garantir que o interlocutor realmente quem diz ser. Os servidores podem
exigir uma autenticaco do emissor antes de redirecionar uma chamada para o
agente de usurio receptor.
A autenticaco pode ser feita baseando-se no HTTP Digest ou utilizando criptografia
e troca de certificados.
Na Figura a seguir, podemos observar o processo de autenticaco utilizando HTTP
Digest em um servidor proxy (a) e em um servidor de registro (b).

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 106


4linux.com.br 8. Protocolo SIP

Na autenticaco do usurio no servidor de proxy, o agente de usurio envia a


requisico de comeco de sesso. O servidor proxy recusa o pedido, com uma
resposta de erro 407, avisando que requer autenticaco e faz um desafio para o
usurio. Este apresenta as suas credenciais de acesso no campo Authorization do
cabecalho da mensagem SIP, a qual possui mesmo Call-Id da mensagem recusada
e CSeq incrementado de uma unidade. Se o usurio enviar as credenciais
corretamente, o servidor proxy aceita a requisico e continua com os procedimentos
de incio da sesso.
No HTTP Digest, utiliza-se nome de usurio e senha para credenciar o usurio ao
servico, contudo este mtodo no garante a seguranca, pois as credencias so
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 seguranca na autenticaco SIP. Para autenticar duas entidades SIP, o TLS
eficiente, mas para a autenticaco de mais de duas entidades, o S/MIME se torna
mais indicado.

8.2.5. Endereos SIP

Um endereco SIP tradicional disposto na forma sip:usuario@IP_servidor, como


por exemplo: sip:pisa@146.164.69.183. Contudo, esta estrutura de enderecamento
de difcil memorizaco. Assim, foi criado um mecanismo de enderecamento que se
assemelha aos enderecos de e-mail, como em sip:pisa@sip.gta.ufrj.br, ou que

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 107


4linux.com.br 8. Protocolo SIP

seja simplesmente o nome prprio do usurio, desde que unico.


Utilizando este mecanismo de enderecamento, o servidor SIP pode encaminhar a
chamada para o dispositivo que o usurio esteja usando no momento, desde um
computador a um aparelho celular.
Se o usurio possuir uma pgina pessoal e deseje divulgar seu endereco SIP para
seus visitantes, basta que ele coloque o endereco na pgina, da mesma forma que
feito para e- mail (mtodo no aconselhvel, pois pode causar o recebimento de
SPAMs). O usurio s precisa adicionar a URL 'sip:usuario@dominio.com' e quando
o visitante acessar a pgina e clicar nesta URL, o aplicativo SIP instalado na
mquina ativado e faz a chamada para o usurio que publicou seu endereco.

8.3. Fluxo de mensagens


Nesta sesso examinaremos um exemplo concreto de comunicaco utilizando o
protocolo SIP. No exemplo a seguir, Alice deseja chamar Bob. Ambos esto
utilizando computadores com aplicativos baseados no protocolo SIP, instalados para
fazer e receber chamadas telefnicas. Admitamos que Alice saiba o endereco IP de
Bob.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 108


4linux.com.br 8. Protocolo SIP

Na figura acima, podemos observar que a sesso SIP iniciada quando Alice
envia uma mensagem INVITE para Bob, por UDP na porta 5060. A porta 5060
a porta padro do protocolo SIP e este tambm pode receber mensagens
por TCP. Nesta mensagem, esto contidos um identificador para Bob, o
endereco de Alice, o tipo de dado que Alice deseja receber: udio em
codificaco 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 cdigo 200 OK para Alice na porta
5060. Nesta mensagem de Bob, constam o seu endereco IP, a porta em que
deseja receber os pacotes de udio utilizando o protocolo de transporte RTP:
43569, e a codificaco de udio que deseja receber os dados: AVP 3
(codificaco GSM);
Aps receber a resposta de Bob, Alice envia uma mensagem com a primitiva
ACK, confirmando que a comunicaco foi estabelecida com sucesso.
Observe que, neste exemplo, ambos os usurios utilizaram codificadores de
voz diferentes, pois o SIP no determina o tipo da mdia que ser transmitida
durante a sesso. Alice dever codificar seu udio com GSM e Bob com a lei
do PCM.

Depois de estabelecida a sesso, utilizando a porta 5060, ambos transmitiro


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;

Aps o fim da transmisso, Bob aciona o seu aplicativo SIP para terminar a
sesso. Ento o agente de usurio de Bob envia uma mensagem com a
primitiva BYE para Alice.

Esta envia uma mensagem de resposta 200 OK, confirmando o trmino da


sesso. A sesso ento encerrada em ambos os agentes de usurio.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 109


4linux.com.br 8. Protocolo SIP

8.4. Diferena entre B2BUA e SIPProxy


A principal caracterstica que diferencia um B2BUA (back-to-back user agent) de um
SIP Proxy que o SIP Proxy mais rpido pois no realiza converso de codec's e
tratamento de mdias, apenas lida com a sinalizaco SIP. J os B2BUA so mais
lentos, mas conseguem realizar todo um controle de mdia, converso de codec's, e
oferecer outros recursos como URA(Unidade de resposta audvel), TTS (Converso
de texto para voz), entre outros.

Com relaco ao balanceamento de carga, o SIP Proxy consegue realizar um melhor


gerenciamento, atravs de algoritmos especficos com hash, com propriedades
como call-id e username. Mensagens de redirecionamento so utilizadas com baixo
consumo de processamento da mquina e tambm tem tolerncia de falhas. No
B2BUA estes recursos no so encontrados.

O SIP Proxy abre a possibilidade de gerenciar toda a sinalizaco de protocolos SIP,


ou seja, em um ambiente com implementaco de fabricantes diferentes possvel
visualizar todo o trfego SIP e analisar exatamente a troca de informaco entre eles.

Outra questo o suporte a protocolos LDAP, Radius e Diameter que no SIP Proxy
j so nativos, e no B2BUA no, mas tambm so possveis.

Em um ambiente de clientes atrs de NAT, o SIP Proxy consegue um desempenho


superior ao B2BUA. Permitindo por exemplo, que voc envie udio ou vdeo
diretamente entre dois clientes atrs de NAT.

Ainda na comunicaco em rede publica, 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 caractersticas de cada uma destas


plataformas.

B2BUA SipProxy
O Asterisk um B2BUA O Openser um SIPProxy
No trabalha to bem com clientes NAT Gerencia melhor clientes que utilizam NAT
Gerencia traduco de CODEC's, protocolos, Arquitetura mais rpida

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 110


4linux.com.br 8. Protocolo SIP

B2BUA SipProxy
servicos de URA e outros
Possui servicos de mdia, como udio, vdeo, melhor para escalabilidade e balanceamento
correio e reconhecimento de voz de carga
Utilizado para comunicaco com a rede publica Gerencia toda a sinalizaco SIP

8.5. Modos de Operao

8.5.1. Proxy

No diagrama SIP abaixo podemos observar o funcionamento de uma ligaco VOIP


entre dois ramais cadastrados no mesmo servidor SIP:

Neste exemplo de chamada usando o protocolo SIP possvel observar facilmente


as mensagens trocadas para estabelecer a chamada. Abaixo o passo a passo do
diagrama:

1. O usurio Lucien discou para o usurio Carlos, neste momento o ramal do


Lucien encaminhou o INVITE para o servidor.sip (servidor em que est

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 111


4linux.com.br 8. Protocolo SIP

registrado);
2. O servidor encaminhou o INVITE para o ramal do usurio Carlos que est
registrado no mesmo servidor (ligaco interna), e respondeu ao Lucien 100
Trying informando que est tentando efetuar a ligaco;
3. O ramal do Carlos quando recebe a solicitaco 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 possvel estabelecer o fluxo de
mdia;
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
confirmaco abre a sesso de mdia diretamente entre os dois ramais, dando
inicio a conversaco entre os dois usurios;
8. O usurio 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.

Atravs desta mesma imagem podemos fazer algumas observaces:

Sempre que o ramal destino estiver disponvel e receber a requisico de


chamada (INVITE) ele retorna o Ring (180 Ringing) informando que est
chamando. Caso este ramal esteja ocupado, no esteja registrado ou por
algum outro motivo no possa atender ele ira retornar um cdigo de erro;
O fato de a mdia 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 no tem
como fazer controle de mdia ou gravar as chamadas, porm o consumo de
banda muito menor, afinal s trafegam os pacotes Sip (puramente texto)

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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
no terem recebido o sinal de desligamento.

8.5.2. Redirect

No modo Redirect Server, ao receber uma requisico de nova chamada de um


usurio do cadastrado, o servidor SIP faz o processamento desta requisico e
identifica o endereco do usurio chamado (destino). Porm, neste caso, o servidor
no encaminha a requisico para a terminaco de destino, ele informa ao usurio
que gerou a requisico qual o endereco desta terminaco, ou seja, o usurio
pergunta ao servidor SIP em qual endereco 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, possvel perceber claramente que a forma


de comunicaco entre o usurio Carlos e o servidor SIP est diferente do outro
modo de operaco do servidor. Abaixo explicaremos a comunicaco dessa chamada

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 113


4linux.com.br 8. Protocolo SIP

VOIP passo-a-passo.

1. O usurio Carlos discou para o usurio Lucien, encaminhando o invite para o


servidor SIP responsvel;
2. O servidor recebeu a requisico do usurio Carlos e enviou uma mensagem
100 Trying para avisar ao usurio que ele recebeu e est processando a
requisico;
3. Aps fazer o processamento e determinar em qual endereco o usurio Lucien
est localizado, o servidor responde ao usurio Carlos com uma mensagem
do tipo SIP Redirect, 302 Moved Temporaly (Movido Temporariamente), com
as informaces de localizaco do usurio Lucien. Note que neste ponto
onde efetivamente feito o redirecionamento;
4. O usurio Carlos confirma o recebimento da informaco enviando um ACK
para o servidor;
5. Neste momento, o usurio Carlos j possui as informaces de localizaco do
usurio Lucien, ento ele pode convidar o usurio Lucien para iniciar uma
chamada diretamente (ponto-a-ponto). Deste modo ele envia um INVITE
diretamente ao usurio Lucien, tentando estabelecer uma chamada VOIP;
6. Como padro, o usurio Lucien responde ao usurio Carlos com uma
mensagem de 100 Trying para informar que recebeu a requisico e est
processando a requisico;
7. Em seguida enviada uma mensagem de 180 Ringing para o usurio Carlos,
avisando que o telefone est chamando. Neste ponto acionado o tom de
chamando no telefone do usurio Carlos;
8. Quando o usurio Lucien atende a chamada (tira o telefone do gancho),
enviada uma resposta 200 OK, confirmando o atendimento da chamada;
9. Aps confirmaco de atendimento, o usurio Carlos envia uma mensagem
ACK confirmando o recebimento da sinalizaco de atendimento;
10. Aps a concluso do atendimento, os canais de udio so estabelecidos.
Note que em uma conversa VoIP com protocolo SIP, so abertos dois canais
de udio distintos, um transportando a fala de cada usurio, e utilizando um
protocolo diferente, o RTP;
11. O usurio Carlos encerra a chamada (desligando o telefone) e o usurio

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 114


4linux.com.br 8. Protocolo SIP

Lucien informado do encerramento com uma mensagem do tipo BYE;


12. O usurio Lucien confirma a recepco da mensagem BYE e envia um 200 OK
confirmando a concluso da chamada.

Um fato importante deste modo de operaco que o servidor SIP s est presente
no incio da chamada VOIP, no momento em que o usurio Carlos faz a primeira
requisico. Logo, neste modo, no possvel estabelecer nenhum controle sobre a
chamada, como tarifaco por exemplo, em contra-partida o consumo de recursos
computacionais do servidor extremamente baixo.

8.6. SIP no Asterisk


importante ressaltar que o Asterisk no 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 conexo de sada :

SIP/[exten@]peer[:portno]

onde:
exten Se definido, ento o Asterisk ira requisitar ao peer que se conecte
extenso exten;
peer O nome do peer ao qual se conectar, podendo ser:
Um peer ou friend definido em sip.conf;
Um endereco IP;
Um nome de domnio. Para nomes de domnio o Asterisk ira primeiro olhar
no registro DNS SRV para aquele domnio.
portno A porta UDP a ser usada. Se omitido o Asterisk ira utilizar a 5060.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 configurao

O arquivo de configuraco do SIP (/etc/asterisk/sip.conf) uma coleco de seces,


cada qual representando uma entidade dentro do escopo do SIP, com exceco da
seco [general].

Na seco [general] um numero de parmetros que afetam todo o sistema pode ser
configurado. Especificamente os codec's default, portas, enderecos, comportamento
do jitter, bits de TOS e registros. A seco [general] do sip.conf inclui as seguintes
diretivas:

Diretiva Significado
Permite codec's na ordem de preferncia (use DISALLOW=ALL
allow = <codec>
primeiro, antes de permitir outros codec's)
disallow = all Desabilita todos os codec's (configuraco global)
Se configurado, qualquer um estar apto a se logar como um
autocreatepeer = yes|no peer (Sem checagem de credenciais, util para operar com o
SER).
bindaddr = 0.0.0.0 Endereco IP onde o servico est instalado
canreinvite = update|yes|no (configuraco global)
Contexto default para a entradas de chamadas em
context = default
extensions.conf.
defaultexpirey = 120 Tempo padro do registro de entrada e a sada.
Endereco IP que ser colocado em mensagens SIP, se o
externip = 200.180.4.110
Asterisk estiver atrs de um dispositivo NAT.
localnet =
10.10.1.0/255.255.255.0 endereco local e mscara de rede

Configura o from padro como domnio nas mensagens SIP


fromdomain = <domain>
quando atuando como um cliente SIP
maxexpirey = 3600 Tempo mximo de registro que ser permitido (em segundos)
nat = yes|no Configuraco 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 prtica com Asterisk e SNEP Pgina 116


4linux.com.br 8. Protocolo SIP

Diretiva Significado
Habilita a checagem dos cabecalhos identificadores de
pedantic= yes|no chamada, cabecalhos SIP com multiplas linhas e cabecalhos
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 servico nos pacotes SIP.
(valores nmricos tambm so
aceitos, como tos=184)
videosupport=yes|no Liga o suporte para vdeo no SIP
Permite que o cabecalho SIP User-Agent possa ser
useragent
customizado.
trustpid = yes|no Se possvel confiar na identificaco da parte remota
Muda a forma de autenticaco do Asterisk(default) para sua
realm = meu realm
prpria.

8.6.3. Clientes SIP

Diretiva Significado
[identifier] A seco inicia com um identificador em chaves ([]s). O identificador
deve ser uma string alfanumrica.
type=[user|peer| Esta linha diz ao asterisk como interpretar esta entidade. Usurios
friend] so dispositivos que se conectam a ns, enquanto peers so
pessoas s quais nos conectamos, e friend um atalho para criar
um user e um peer com informaces idnticas.
accountcode Usurios podem estar associados a um cdigo de contabilizaco.
amaflags=default|omit| Categorizaco 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 sada deste
cliente.
defaultip Endereco Ip default deste cliente, se especificado
host=dynamic Usado se o cliente no registrou em qualquer outro endereco IP
dtmfmode Como o cliente gerencia a sinalizaco DTMF
fromuser Especifica o usurio para colocar no from ao invs do callerid
(sobrescreve o callerid) quando colocando chamadas para outro peer
(outro SIP proxy).

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 117


4linux.com.br 8. Protocolo SIP

Diretiva Significado
fromdomain=<domain> Configura o domnio 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 invs do IP do host.
incominglimit e Limita o numero de chamadas ativas simultneas para um cliente
outgoinglimit SIP.
insecure No verifica o ip do host e a porta para o peer (no usurio).
language O cdigo de linguagem definido em indications.conf Define a
linguagem para os prompts e sinais locais de telefonia.
mailbox Extenso da caixa postal de e-mail (Para indicaces de espera de
mensagens)
md5secret Hash MD5 de <usurio>:asterisk:<secret> (pode ser usado ao invs
de secret).
nat =yes|no Esta varivel muda o comportamento do Asterisk para cliente atrs
de um firewall. Isto no resolve o problema se o Asterisk estiver atrs
de um Firewall e o cliente fora.
permit,deny,mask Endereco IP e restrico de rede
pickupgroup Grupo que pode capturar as chamadas de colegas usando *8 e a
aplicaco pickup() na extenso *8
port Porta SIP do cliente
qualify=yes|no Verifica se o cliente est alcancvel ou no
restrictid=yes|no Para ter o callerid restrito -> Enviando como ANI;use isto para ocultar
o callerid
rtptimeout Termina as chamadas se no houver atividade RTP por x segundos,
quando no estiver em espera (hold)
rtpholdtimeout Termina a chamada se no houver atividade RTP quando em espera
(hold) (deve ser maior que o rtptimeout)
type=peer|user|friend Relacionamento com o cliente (provedor de sada ou full client)
secret Se o Asterisk estiver agindo como um servidor SIP, ento este cliente
SIP deve logar com esta senha.Se o Asterisk estiver agindo como S
IP Client para um servidor SIP remoto que requer autenticaco do
tipo SIP INVITE, ento este campo usado para autenticar os SIP
INVITEs que o Asterisk envia para o servidor remoto
username Nome do usurio usado no SIP INVITE
allow-disallow Permitir ou negar codec's
musiconhold Configura as classes de musica em espera em chamadas de um
telefone SIP.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 118


4linux.com.br 8. Protocolo SIP

8.7. Travessia de NAT (Problemas e Solues)


A traduco de enderecos IP (NAT) tem sido usada pela maioria dos provedores de
servico e empresas como uma maneira de contornar os problemas da falta de
enderecamento IP. Normalmente as empresas recebem um pequeno bloco de
enderecos IP que varia normalmente de 1 a 256 enderecos vlidos.

O NAT resolve este problema mapeando os enderecos internos para enderecos


publicos externos. Um endereco IP:Porta interno mapeado para um endereco
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, aps o qual na ausncia de trfego 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 publica que queira alcancar um cliente atrs do NAT, precisa apenas saber o
esquema de mapeamento de forma a mandar pacotes para ele.

Por exemplo:

Um computador atrs 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 endereco e porta IP e estes pacotes
sero passados para o cliente na mquina esperando em 10.0.0.1:8000.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 endereco de destino IP especfico.

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 idntico 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 prtica com Asterisk e SNEP Pgina 120


4linux.com.br 8. Protocolo SIP

8.7.4. Simtrico

Um mapeamento especfico do IP:Porta para um NAT publico IP:Porta dependente


do endereco 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 endereco 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 so descartados como no caso do Cone
Restrito. O par externo IP:porta aberto apenas quando o computador interno envia
dados para um destino especfico.

8.7.5. Solues prticas para o Asterisk

O mais difcil a respeito do NAT no Asterisk entender que existem diversas


situaces de projeto e cada uma deve ser tratada individualmente. Em primeiro lugar
vamos tratar como duas soluces separadas.

Asterisk atrs de NAT


Clientes atrs de NAT

Obviamente existem diversas situaces intermedirias e a coisa se complica


pensando que temos diferentes tipos de NAT. Para aumentar a complexidade temos
clientes que suportam diferentes tipos de soluces para NAT (TURN, STUN, ICE,

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 121


4linux.com.br 8. Protocolo SIP

ALG). Isto pode tornar o problema realmente complexo.

Para simplificar, vamos usar duas situaces que so as mais tpicas. O Asterisk est
atrs de um Firewall sob domnio da rea tcnica da empresa. Os clientes so
externos e no temos domnio sobre a configuraco dos firewalls destes clientes.

Asterisk atrs de NAT

Quando o Asterisk est atrs de NAT podemos usar as configuraces localnet e


externip no arquivo sip.conf alm de redirecionar as portas no Firewall. Supondo que
o endereco 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

Alm 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 atrs de NAT

Quando um cliente est atrs de um NAT, normalmente este NAT dinmico,


principalmente quando em uso domstico. Com isto, s restam as opces de o
cliente suportar STUN ou UPnP para que possa aprender o enderecamento de uma
fonte externa ou a partir do roteador respectivamente. O ALG (Application Lawyer
Gateway) tambm um recurso disponvel na maioria dos modems ADSL
residenciais. Este sistema uma camada que permite uma aplicaco alterar as
regras de roteamento, mas, na prtica, as aplicaces no so totalmente
compatveis e o modem pode travar, portanto evite o uso deste. Uma outra forma de
um cliente atrs de um NAT operar com o Asterisk o uso de um tunel baseado em
PPTP, IPIP ou IPSec, isto pode ser feito atravs de um roteador (Cisco ou Linux),
outro mtodo bastante utilizado a VPN Virtual Private Network, no entanto este tem
um ponto negativo, pois gera overhead de cabecalhos aumentando o consumo de
banda. Quando operar um cliente atrs de um NAT configure STUN no cliente, pois
este servico permite o telefone descobrir o seu endereco vlido e corrigir os
enderecos de rede no cabecalho SIP. No arquivo do canal SIP coloque os seguintes
parmetros na configuraco do cliente

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 122


4linux.com.br 8. Protocolo SIP

/etc/asterisk/sip.conf

nat=yes
directmedia=no
qualify=yes

onde:
nat=yes ignora o cabecalho VIA e usa o endereco de onde chega o pacote.
directmedia=no forca o fluxo de mdia pelo Asterisk.
qualify=yes forca que um pacote exploratrio mantenha o NAT aberto.

8.8. DTMF
DTMF a sigla em ingls de "Dual-Tone Multi-Frequency", ou seja, so os tons
resultantes do cruzamento de duas frequncias. As frequncias destes tons e suas
combinaces so 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 frequncia obtida do


cruzamento da frequncia alta e baixa de uma certa tecla. Por exemplo: ao teclar o
numero 5 o tom enviado a soma de uma senide na frequncia de 1336Hz com
uma outra senide de 770Hz.

O SIP trabalha com quatro meios de envio do DTMF:

info Os dgitos sero enviados dentro do pacote SIP;

rfc2833 Os dgitos sero enviados dentro do cabecalho do pacote RTP;

inband Os dgitos so enviados dentro do payload de voz;

auto O Asterisk tenta enviar os dgitos via rfc2833, em caso de falha envia
inband.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 mdulo SIP do Asterisk
sip show settings Exibe as configuraces

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 124


4linux.com.br 8. Protocolo SIP

8.10. Laboratrio Asterisk


Conectando a um provedor VoIP

O objetivo deste exerccio conectar o seu servidor Asterisk a um provedor VoIP


utilizando o protocolo SIP. O provedor ento completar as ligaces 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 alteraces realizadas, recarregue o mdulo SIP.

*CLI> sip reload


*CLI> sip show peers
*CLI> sip show registry

Criando uma regra para realizar e receber ligaes do seu provedor


VoIP: Edite o plano de discagem e acrescente a seguinte extenso no
contexto default no arquivo /etc/asterisk/extensions.conf:

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 Numero da sua filial.

Para ativar as alteraces realizadas recarregue o plano de discagem.

*CLI> dialplan reload

Disque para os ramais das outras equipes para testar as configuraces. No


esqueca de discar o (zero) 0 antes dos numeros dos ramais das outras equipes.
Caso voc no coloque o 0 antes do numero, voc utilizar as regras criadas no
exerccio anterior.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 126


4linux.com.br 8. Protocolo SIP

8.11. Laboratrio 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 comunicaco entre voc e a filial, ambos devem ter um tronco
entre si.

Atente para as seguintes informaces:

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
sero fornecidos pelo instrutor).

8.11.3. Conectando com o Asterisk

No arquivo /etc/asterisk/sip.conf, inclua na seco [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 reconheca estas alteraces, na CLI>, digite:

*CLI> sip reload

Verifique no menu Status >> Ramais, Troncos Ip, Filas, na seco Troncos SP, se o
servidor registrou corretamente.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 127


Mdulo 9

Plano de discagem
4linux.com.br 9. Plano de discagem

9. Plano de discagem
O plano de discagem o coraco do Asterisk. Ele quem define como o Asterisk ira
gerenciar as chamadas. Consiste basicamente de uma lista de instruces ou passos
que o Asterisk deve seguir. Essas instruces so disparadas a partir dos dgitos
recebidos de um canal ou aplicaco. 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


diretrio /etc/asterisk, mas tambm possvel programar o plano de discagem
atravs do mdulo AEL (Asterisk Extension Language). Este mdulo permite uma
programaco semelhante ao C com estruturas e rotinas. Outro mtodo provido
pelo mdulo 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 extenses prioridades aplicaes


Dois contextos so padres em arquivos extensions.conf:

[ general ]
Define algumas configuraces gerais, como por exemplo:

Diretiva Significado
static Esta opco afeta apenas a operaco 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, ento voc pode salvar o plano de discagem
atual com o comando save dialplan.
Definices nas variveis globais na categoria [globals] permanecem sem
modificaco. O valor default no.
clearglobalvars Apaga as variveis globais quado o plano de discagem for recarregado
(*CLI>dialplan reload).

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 129


4linux.com.br 9. Plano de discagem

[ globals ]

Na seco [globals], voc pode definir as variveis globais (ou constantes) e seus
valores iniciais. Elas so usadas para simplificar mudancas futuras na configuraco
do PABX. O valor atual das variveis globais pode ser mudado usando a funco
GLOBAL. O valor da varivel global pode ser referenciado, usando a sintaxe: $
{NOMEDAVARIAVEL}. As variveis globais no so sensveis a
maiuscula/minuscula, mas por convenco so declaradas em maiusculo.

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 definies por si s no tem efeito algum. O Asterisk


no sabe o que fazer com estas variveis. de sua responsabilidade saber o
que fazer com elas no seu plano de discagem.

9.1. Incluso Contextos


Os contextos possuem uma srie de extenses que determinam que tipo de
chamada um e um determinado canal pode fazer, este canal atrelado a somente
um contexto. Supondo que existam trs 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 ligaces internas, o ramal 2000 no 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 no indicado, pois todos os ramais
inclusos neste contexto podero ligar para celular o que pode ser uma falha de
seguranca.

[ramais]

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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. Variveis
O conceito de varivel no Asterisk comum a qualquer linguagem de programaco.
Podemos criar nossas prprias variveis ou fazer uso das variveis j existentes, ou
criadas em tempo de execuco do prprio Asterisk.

Para usar variveis, utilizamos a sintaxe: ${NOMEDAVARIAVEL}. Tambm


possvel utilizar expresses $[EXPRESSION], que podem ser expresses regulares,
de comparaco, de adico e subtraco e outras.

IMPORTANTE: Os nomes de variveis definidos pelo usurio no so


sensveis maisculas e minsculas. ${VarName} e ${varname} se referem a
mesma varivel. Entretanto as variveis definidas pelo Asterisk diferenciam
maisculas e minsculas. Logo, ${EXTEN} funciona, mas ${exten} no.

9.2.1. Variveis 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 prtica com Asterisk e SNEP Pgina 131


4linux.com.br 9. Plano de discagem

9.2.2. Variveis de canal

So configuradas usando o comando Set. Cada canal recebe seu prprio espaco de
variveis, de forma que no h chance de colises entre diferentes chamadas, e a
varivel automaticamente destruda quando o canal desligado. Existem algumas
variveis de canal configuradas pelo Asterisk que voc pode se referir como
definices do plano de discagem. Variveis definidas pelo Asterisk diferenciam
caixas alta e baixa.

9.2.3. Variveis de ambiente

Fornecem um meio de acessar variveis de ambiente Unix de dentro do Asterisk. Se


voc definir uma varivel de canal com o mesmo nome de uma varivel global
(lembre-se variveis definidas pelo usurio, no se importam com maiusculas e
minusculas), referncias ao nome da varivel retornaro o valor da varivel de canal.
Em um ambiente, voc pode acessar as variveis da seguinte forma:

Varivel Significado
${ENV(nomedavariavel)}
${ENV(ASTERISK_PROMPT)} O prompt atual da linha de comando CLI
O nome do arquivo gravado pela ultima vez com o comando
${ENV(RECORDED_FILE)}
Record

9.2.4. Variveis especficas de aplicaes

Algumas aplicaces usam entradas de dados extras e fornecem a sada na forma de


variveis de canal.

Aplicao Varivel Significado


retorna ${AVAILCHAN} O primeiro canal disponvel.
ChanIsAvail retorna
O nome do canal de origem.
${AVAILORIGCHAN}
Se uma discagem falhou, esta a mensagem de
retorna ${CAUSECODE}
erro.
Dial
Texto com o cdigo de status da ultima tentativa de
retorna ${DIALSTATUS}
discagem.
MeetMe recebe input de Um script de AGI para rodar
{MEETME_AGI_BACKGROUND}

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 132


4linux.com.br 9. Plano de discagem

Aplicao Varivel Significado


O numero de segundos que o usurio esteve na
retorna ${MEETMESECS}
conferncia.
Hangup l a ${PRI_CAUSE} varivel para configurar os cdigos de retorno PRI.
TXTLookup retorna ${TXTCIDNAME} O resultado de um DNS lookup.

9.2.5. Variveis especficas para MACRO

Em um contexto de macro, algumas variveis adicionais de canal esto disponveis.

Varivel Significado
${ARG1} O primeiro argumento passado pela macro.
${ARG2} O segundo argumento passado pela macro e assim por diante.
${MACRO_CONTEXT} O Contexto da extenso que disparou a macro.
${MACRO_EXTEN} A extenso que disparou a macro.
Configurado por uma macro para influenciar a prioridade de execuco
${MACRO_OFFSET}
ao sair da macro.
${MACRO_PRIORITY} A prioridade na extenso onde esta macro foi disparada.

Mais sobre variveis pode ser encontrado em:

http://www.voip-info.org/wiki/view/Asterisk+variables

9.3. Expresses
O uso de expresses no plano de discagem do Asterisk permite programar
determinadas operaces em uma linha de cdigo, mantendo assim o plano de
discagem mais claro e elegante. As expresses podem ser divididas em:

9.3.1. Operadores matemticos

Operador Ao
+ Somar
- Subtrair
* Multiplicar
/ Dividir
% Mdulo

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 133


4linux.com.br 9. Plano de discagem

Para realizar uma operaco, basta coloc-la entre $[ ]. Exemplo:


$[1 + 2]
$[${ARG1} + ${ARG2}]
Set(VAR=$[${ARG1} + ${ARG2}])

9.3.2. Operadores lgicos

Operador Ao
& E
| Ou
! Negaco

9.3.3. Operadores de comparao

Operador Ao
> Maior
< Menor
>= Maior ou igual
<= Menor ou igual
= Igual
!= Diferente

9.3.4. Aplicaes prticas de Expresses.

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, extenso i (invalid) e prioridade 1.

exten => s,n,GoIfTime(8:00-12:59,*,*,*?manha,s,1)

Desvia o contexto caso o horrio 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 horrio de
almoco por exemplo, tocando um arquivo de audio que diz que a empresa est em
seu horrio de almoco.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 134


4linux.com.br 9. Plano de discagem

9.4. Funes
As funces possuem um tratamento avancado no plano de discagem, assim como
em qualquer linguagem de programaco o Asterisk possui uma srie de funces que
podem ser utilizadas para criar funcionalidades avancadas no plano de discagem,
para saber mais sobre as funces verifique na CLI com o seguinte comando:

CLI> core show functions

Alguns exemplos das funces mais comuns:

LEN(string) - retorna o comprimento da string nome da varivel.

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 varivel, muito util quando utilizado em conjunto com
gravaco de chamadas.

Exemplo:
exten => s,1,set(CallTime=${STRFTIME(${EPOCH},GMT-3,%C%y%m%d
%H%M)})

%C Ano representado pelos dois primeiros dgitos, exemplo 2013 = 20


%y Ano representado pelos dois ultimos dgitos, exemplo 2013 = 13.
%m Ms no formato decimal, exemplo Janeiro = 01 , Fevereiro = 02 e
etc.
%d Dia do ms 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 prtica com Asterisk e SNEP Pgina 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 numero, 0 a 23, inclusive

<minuto> = um numero, 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 numero, 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 horrio
mon De uma segunda-feira
8-15 Que seja entre os dias 8 e 15
nov Do ms de novembro
?Bom Caso a condico seja vlida, responde: Bom
:Ruim Seno, responde: Ruim

9.4.1. Aplicaes condicionais

GotoIfTime(<timespecs>?[labeliftrue][:labeliffalse])
Desvia o fluxo da chamada para labeliftrue se as condices de tempo de

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 136


4linux.com.br 9. Plano de discagem

<timespecs> (veja definico em IFTIME) coincidirem, caso contrrio, vai para


labeliffalse.
Exemplo:
exten => s,n,GotoIfTime(*,*,26-30,May?telefonista)

onde:
* Em qualquer horrio
* Em qualquer dia da semana
26-30 Que seja entre os dias 26 a 30
May Do ms de maio
?telefonista - Desvia chamada para o contexto telefonista.

9.4.2. Manipulao de Strings

Substrings

${string:offset:length}

offset: ponto de incio


length: comprimento
Retorna uma substring da string, iniciando na posico 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, ento todo o resto da string apartir do
ponto de incio (offset) retornado.

Exemplos:
exten=>_NXX.,1,Set(DDD=${EXTEN:0:3}) ;; #1
exten=>_516XXXXXXX,1,Dial(${EXTEN:3}) ;; #2

#1 Pega os primeiros trs dgitos da varivel ${EXTEN}


#2 Pega todos dgitos da varivel ${EXTEN}, exceto o 3 primeiros

Concatenao

Para concatenar duas strings, simplesmente escreva-as juntas.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 137


4linux.com.br 9. Plano de discagem

Exemplos:
${foo}${bar}
555${Onumero}
${DDD}555${ONumero)

Mais sobre funces pode ser encontrado em:


http://www.voip-info.org/wiki/view/Asterisk+functions

9.5. Macros e Sub-rotinas


Macros so rotinas, ou melhor, sub-rotinas que so usadas mais de uma vez dentro
do plano de discagem, evitando reedificaco de dados. Elas facilitam operaces e
organizaco, onde os cdigos podem ser reutilizados.

Similar uma funco, passamos o nome da rotina, e quantos argumentos como


variveis sero usadas, na hora de chamar basta fazer referencia a macros usando
a quantidade de argumentos que foram especificados anteriormente, na criaco da
macro.

Vejamos a sintaxe da macro:

Macro(nome da macro, arg1,arg2)

Onde temos:

Macro A chamada para criaco da Macro;


nome da macro O nome da macro que est sendo criada, e ser
referenciado posteriormente;
arg(n) - Argumentos que sero 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 prtica com Asterisk e SNEP Pgina 138


4linux.com.br 9. Plano de discagem

Na macro acima, estamos usando a aplicaco Dial. Desta forma, temos uma macro
chamada exemplo, que chama a aplicaco Dial, com os argumentos padro,
Tecnologia (SIP,AIX,DGV, etc), identificaco da extenso, timeout (opcional no Dial).
Podemos facilmente ter digitado:

Dial(SIP/${EXTEN},30)

No existe uma diferenca muito grande, em digitar daquela forma e essa, pois
usamos uma linha somente, agora imagine, vrias 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 atravs da aplicaco Answer, e depois tocar uma musica que ser
passada como argumento na chamada da macro, atravs da aplicaco Playback.

O Asterisk na verso 1.8 ou superior tem suporte uma nova aplicaco chamada
Gosub() que tem a mesma funco da aplicaco Macro, porm com uma pequena
diferenca na sintaxe do comando. Em verses futuras a aplicaco Macro ser
depreciada sendo substituda pela nova Gosub.

9.6. Extenses especiais


O Asterisk usa alguns nomes de extenso para propsitos especiais.

Ext Nome Significado


s Start
m Usado para planos de discagem que entram em um contexto sem
outras informaces como o identificador de chamada. Mesmo se voc
conhecesse o identificador de chamada, voc ainda tem um lugar para

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 139


4linux.com.br 9. Plano de discagem

Ext Nome Significado


comecar.
Usado quando chamadas ficaram inativas a ps um prompt ter sido
t Timeout
tocado. Tambm usado para desligar uma linha que esteja ociosa.
Usado para chamadas que tenham sido desligadas devido ao
T AbsoluteTimeout AbsoluteTimeout() ter sido alcancado. util, por exemplo, para tocar
uma notificaco 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 extenso desconhecida no contexto
i Invalid ou entrada desconhecida em um menu da URA (Unidade de Resposta
Audvel).

9.7. Roteamento baseado em horrio


Um plano de discagem pode conter vrios contextos. Quando uma chamada est
entrando, ela vem por um canal. Este canal pertence um contexto. Dentro de um
contexto podemos incluir outros atravs do comando:

include => context|<times>|<weekdays>|<mdays>|<months>

onde:
context = nome do contexto
times / weekdays / mdays / months veja a especificaco <timespec>
descrita no item Funes >> Condicionais.

Exemplo:

Supondo que uma empresa trabalhe somente nos dia uteis, e das 8 as 18 hs, as
chamadas entrantes vo para a URA dentro do horrio de expediente. Caso
contrrio, toca uma mensagem e encerra a chamada.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 140


4linux.com.br 9. Plano de discagem

No contexto [default], teramos as seguintes inserces:

; Este o horrio de expediente


include=>expediente|08:00-18:00|mon-fri|*|*
; Este so o horrio fora de expediente
include=>foraexpediente|18:00-23:59|*|*|*
include=>foraexpediente|00:00-08:00|*|*|*
include=>foraexpediente|*|sat-sun|*|*|*

9.8. Funes e Aplicaes para o AstDB


A base de dados do Asterisk usa a verso 1 do Berkley DB que parecido com o
registry do Windows. Este banco de dados pode ser usado pelo Asterisk para
armazenar dados temporrios, e configuraces. Um exemplo de uso a
transferncia com consulta, onde se o telefone est ocupado ele guarda a extenso
em uma base de dados e fica re-tentando at conseguir.

Os dados so agrupados em famlias e identificados com uma chave que unica


dentro da famlia.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 141


4linux.com.br 9. Plano de discagem

9.8.1. Famlias

cidname usado pelo comando LookupCIDName


blacklist usado pelo comando LookupBlacklist

9.8.2. Aplicaes especficas do AstDB

Existem operaces que voc pode usar dentro do plano de discagem em


extensions.conf:

DBdel Deleta uma chave da base de dados.

DBdeltree Deleta uma famlia 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 prtica com Asterisk e SNEP Pgina 142


4linux.com.br 9. Plano de discagem

9.9. Interface grfica


Para o SNEP todas as chamadas (entrantes, saintes, internas, etc) esto definidas
em rotas, que fazem parte das Regras de Negcio.

Uma Rota executa aces no SNEP e para que isso aconteca, algumas condices
devem ser satisfeitas, como:

Uma condico de "encaixe" - a origem e o destino da chamada devem se


enquadrar em uma rota cadastrada;

O horrio da chamada deve ser compatvel com o horrio de incidncia da


regra.

Ao acessar o menu Regras de Negcio >> Rotas, ser exibida uma tela com a lista
de rotas j cadastradas (veja prxima figura).

Ao criarmos ou alterarmos uma rota, as seguintes informaces sero necessrias:

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 143


4linux.com.br 9. Plano de discagem

Descrio: Uma descrico textual para facilitar a visualizaco da regra na


lista de regras de negcio.
Origem: A origem da chamada. possvel selecionar mais de uma origem
para a aco usando diferentes critrios como expresso regular no formato
Asterisk, um numero especfico, grupo de ramais, etc. Os tipos de origens
podem ser:
Qualquer: qualquer numero ou expresso;
Expresso regular: expresso no padro Dialplan do Asterisk, que ira
verificar se o numero de origem da chamada coincide. Exemplos:
0800. -> numeros que iniciem com "0800";
[7-9]X. -> numeros que iniciem com 7, 8 ou 9;
0XX48[2-6]X. -> numeros que: iniciem com 0 (zero) + 2 (dois) dgitos

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 144


4linux.com.br 9. Plano de discagem

quaisquer + 48 + 1 (um) dgito entre 2 e 6 + n


dgitos
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: numero de um ramal cadastrado no sistema;
Alias de Expresso: um alias de expresso cadastrado no sistema;
Tronco: um tronco dentre os cadastrados no sistema;

Observao: Os botes + e x so usados para adicionar ou retirar


origens da rota.
Destino: mesmo conceito das origens. necessrio selecionar um critrio
para encaixe do destino da chamada. Os tipos de destinos so basicamente
os mesmos da origem, porm:
No se aplicam destinos para:
Troncos
Podem existir destinos do tipo:
Sem destino: sem destino definido (em branco);
Dias da semana e Tempos vlidos: horrios e dias da semana em que a
rota vlida. Caso a chamada encaixe com a origem e o destino, mas no
esteja dentro do horrio de validade, a rota ser ignorada;
Gravao: gravar ou no a chamada. O arquivo da gravaco pode ser
recuperado pelo relatrio Chamadas do Perodo;
Prioridade: em situaces onde 2 ou mais rotas satisfazem uma condico de
encaixe, a prioridade utilizada para definir qual rota tem preferncia;
Aes de uma regra: o roteamento e destino das chamadas no SNEP so
definidos pelas aces de uma rota. Essas aces iro trabalhar com a
requisico original e encaminhar a chamada para um ramal, tronco, fila, entre
outros. As aces disponveis no SNEP so:
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 opco usada quando h necessidade de

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 145


4linux.com.br 9. Plano de discagem

customizaco de algum comportamento do Asterisk. Comumente usada


na criaco de URA/IVR;
Discar para Ramal: encaminha a chamada para um ramal cadastrado no
SNEP. Caso nenhum ramal seja especificado a aco tentar usar o ramal
do numero de destino da chamada;
Discar para Tronco: a chamada ser direcionada para um tronco;
Enviar e-mail: envia um e-mail, com o assunto, destinatrio e cabecalho
definidos;
Enviar para Fila: a chamada ser direcionada para uma fila de
atendimento;
Executar Aplicao: executa uma aplicaco do Asterisk.
Loop: gera um laco nas aces. Toda vez que essa aco for chamada ela
direciona o fluxo da execuco das aces para o ndice da aco definido
em sua configuraco;
Pedir senha: esta aco atende a chamada e pede uma senha para o
originador. Esta senha, se no for definida na prpria aco, ser obtida do
cadastro do ramal originador;
Reescrever pedido: edita uma requisico, sendo possvel modificar a
origem ou o destino da chamada. possvel "cortar" o numero de
origem/destino usando o "|" (pipe) para definir at que ponto o numero
ser cortado. Esemplo: 0XX|XX. ser cortado o 0XX ficando somente os
numeros a partir do terceiro carcter. Essa aco tambm permite adicionar
um prefixo e sufixo ao numero original;
Restaurar pedido: restaura a requisico aos seus valores inciais. Reverte
as modificaces das aces Reescrever Requisico.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 146


4linux.com.br 9. Plano de discagem

9.10. Laboratrio Asterisk

9.10.1. Bsico do plano de discagem

Laboratrio de funes e expresses: Crie a extenso 9200 no plano de


discagem, esta extenso executa uma srie de aplicaces e funces, quando
terminar ligue para a extenso e veja o resultado na CLI.

Teste as seguintes aplicaes do plano de discagem:


Set Define valor as variveis e invoca funces.
NoOp No Operation, equivalente ao comando println do C.
Answer Atende um canal e estabelece um fluxo de audio.
SayDigits Pronuncia os dgitos numricos.
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 mudancas na CLI do Asterisk.


*CLI> dialplan reload

Aumente a verbosidade para analisar a sada dos comandos

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 147


4linux.com.br 9. Plano de discagem

*CLI> core set verbose 3

Ligue para o ramal 9200 e analise a sada na *CLI>, certifique-se que


entendeu a sada dos comandos.

9.10.2. Discagem de sada

Crie uma extenso para as chamadas locais, considere SIP/op-voip como


canal de sada. Estas chamadas no podem ser usadas para numeros
precedidos por 6,7,8 e 9. Esta extenso deve ser adicionada no contexto [to-
pstn]
[to-pstn]
exten => _[2-5]XXXXXXX,1,Dial(SIP/op-voip/${EXTEN},20)

Crie uma extenso de chamada para interurbanos dentro do contexto to-pstn,


desconsidere o cdigo da operadora discada pelo usurio e use uma
operadora fictcia 55. Esta linha no deve permitir chamadas interurbanas
com celular.
exten => _0ZZZZ[2-5]XXXXXXX,1,Dial(SIP/op-voip/055$
{EXTEN:3},20)

Crie uma extenso de chamadas para celular dentro do contexto to-pstn. Os


celulares comecam com 6, 7, 8 e 9.
exten => _[6-9]XXXXXXX,1,Dial(SIP/op-voip/${EXTEN},20)

Crie uma extenso de sada 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

Faca com que as chamadas vidas do provedor SNEP sejam encaminhadas para os
ramais 01 e 02 respectivamente utilizando uma varvel global.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 148


4linux.com.br 9. Plano de discagem

ATENO: Comente a linha: exten => _FFXX,1,Dial(SIP/${EXTEN},60,t), onde FF


o numero 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 horrio de expediente


include => expediente,08:00-18:00,mon-fri,*,*
; Este so o horrio 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. Aplicao Macro

Crie uma Macro abaixo dos contextos criados anteriormente, depois utilize a
aplicaco Macro para executar uma chamada atravs 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 prtica com Asterisk e SNEP Pgina 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 prtica com Asterisk e SNEP Pgina 150


4linux.com.br 9. Plano de discagem

9.11. Laboratrio SNEP


O SNEP possui diversos AGI's (Asterisk Gateway Interface) que executam aces
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 diretrio /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 relao: 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 mdulos ajustados: alteramos a configuraco de vrios


mdulos 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 prtica com Asterisk e SNEP Pgina 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 sada baseado na


seguinte tabela:

Cdigo Nome/descrio Tipo


2.01 Sadas operadora A S
2.01.01 Sadas operadora A Fixo Local S
2.01.02 Sadas operadora A Fixo LDN S
2.01.03 Sadas operadora A Celular Local S
2.01.04 Sadas operadora A Celular LDN S
2.01.05 Sadas operadora A Outras S

9.11.3. Criando rotas

Crie uma rota para as chamadas internas ramal a ramal, utilizando os


seguintes parmetros:

Origem: Grupo todas


Destino: Grupo todas
Aces:
Definir Centro de Custos 9-Internas
Discar para ramal
Faca os testes discando de um ramal para outro.

Crie uma rota para fazer chamadas para uma filial qualquer, utilizando os
seguintes parmetros:
Origem: Grupo todas
Destino: Expresso Regular NNXX (onde NN = Numero da Filial)
Aces:
Definir Centro de Custos 9-Internas
Discar para tronco Tronco da Filial NN

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 152


4linux.com.br 9. Plano de discagem

Crie uma rota para receber chamadas de uma filial qualquer, utilizando os
seguintes parmetros:
Origem: Expresso Regular NNXX (onde NN = Numero da Filial)
Destino: Grupo todas
Aces:
Definir Centro de Custos 9-Internas
Discar para ramal

Faca os testes discando para um ramal de outra filial.

Crie uma rota para fazer chamadas para telefones Fixos Locais, utilizando os
seguintes parmetros:
Origem: Grupo Todas
Destino: Alias de Expresso Fixo Local
Aces:
Definir Centro de Custos 2-Saidas
Discar para Tronco (Escolha um tronco de sada)

Faca os testes discando para um numero Fixo Local.

9.11.4. Desafio

Repita o exerccio anterior, definindo os Centros de custos corretamente, mas


agora para
Celular Local.
Fixo LDN.
Celular LDN.
Aps fazer as chamadas, verifique o relatrio Registro de Chamadas.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 153


Mdulo 10

Recursos da classe V
4linux.com.br 10. Recursos da classe V

10. Recursos da classe V

10.1. URA - (Unidade de Resposta Audvel)


O Asterisk possui uma srie de aplicaces, porm quando falamos em URA ou IVR
temos que program-la no plano de discagem e, para tal, necessitamos de algumas
aplicaces bsicas do Asterisk. So 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 usurio ainda pode digitar
uma opco em mais x segundos passado como argumento.

Goto(<contexto>,<extenso>,<prioridade>)

Move a chamada para um determinado ponto no plano de discagem.

Read(<var>) - Opcional

Armazena os dgitos discados pelo cliente em uma varivel. Isto muito


util em aplicaces avancadas, como por exemplo checar o CPF ou
numero do carto de crdito em um banco de dados.

Record(<arquivo>) - Opcional

Os arquivos de udio utilizados em uma URA corporativa normalmente


so gravadas em estudio, o que da uma qualidade profissional, porm se
este recurso no estiver disponvel possvel gravar um arquivo de udio
pelo telefone executando esta aplicaco em uma determinada extenso.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 invlido

exten => i,n,Goto(s,1) ;V para o incio da ura

exten=> t,1,Dial(${RECEPCAO},30,t) ;Se nenhuma opo 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 extenso e quando se move de volta a sua sala digita a extenso onde
a chamada est estacionada.

Por padro a extenso 700 usada para estacionar um a chamada.

Como funciona:

1. No meio de uma conversa, tecle # ou *1 para iniciar uma transferncia, ento


disque 700;

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 156


4linux.com.br 10. Recursos da classe V

2. O Asterisk ira agora anunciar a extenso do estacionamento, mais


provavelmente 701 ou 702;
3. Desligue, e o originador da chamada ser colocado em espera na extenso
anunciada;
4. Disque 701 (a extenso anunciada) a partir de qualquer ramal e ento voc
pode recuperar a chamada e continuar conversando;
5. Se o originador ficar estacionada por mais tempo que o limite ento o Asterisk
tocar a extenso discada originalmente.

Onde configurar:

As configuraces esto no arquivo features.conf, dentro do diretrio /etc/asterisk

No arquivo extensions.conf inclua a seguinte linha no contexto em que os ramais


esto inclusos:

include=>parkedcalls

No arquivo features.conf, descomente as linhas:

[general]
parkext=>700
parkpos = >701-720
context=>parkedcalls
parkingtime=>45

onde:

parkpos=>701-720 - Posices de estacionamento, possvel definir mais ou


menos ramais para esta funco;

context=>parkedcalls - Nome do contexto de estacionamento, para ativ-lo


necessria a instruco INCLUDE no arquivo extensions.conf.

parkingtime=>45 Numero de segundos que uma chamada pode ser


estacionada (padro 45 segundos). Aps o tempo expirar, a chamada volta
para o ramal original.

Para visualizar as chamadas estacionadas:

*CLI> parkedcalls show

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 no 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 no est no arquivo features.conf. Para implement-la, criar a


linha:

pickupexten=>*8

Esta forma de captura de chamadas funciona apenas para canais de comunicaco


com o mesmo protocolo, ou seja, um canal de comunicaco SIP somente pode
capturar uma chamada tocando em outro canal de comunicaco SIP. Para
solucionar este problema existe ainda uma outra forma de capturar as chamadas,
independente do protocolo e grupo, para isso adicione a aplicaco Pickup ao
extensions.conf:

exten => _33900X,1,Pickup(${EXTEN:2}@treinamento)

Sua sintaxe :

Pickup(extenso[@contexto])

Onde:
extenso - Extenso que deseja capturar;
contexto - Contexto no qual est a extenso que deseja capturar.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 158


4linux.com.br 10. Recursos da classe V

10.4. Transferncia
Existem duas possibilidades de transferncia de chamadas. Transferncia direta e
Transferncia assistida. A configuraco desses dois tipos de transferncia tambm
pode ser feita diretamente no Asterisk, sendo util para telefones convencionais que
no possuem as teclas de HOLD e TRANSFER. Esta configuraco est no
arquivo /etc/asterisk/features.conf.

10.4.1. Transferncia Assistida

Uma transferncia Assistida quando h interaco do usurio que vai receber a


ligaco.

atxfer Transferncia assistida. Remova o comentrio da linha a seguir no arquivo


features.conf para efetivar a funco.

/etc/asterisk/features.conf

atxfer => *2

10.4.2. Transferncia Direta

Uma transferncia direta quando o usurio s transfere a ligaco e no h


interaco.

blindxfer - Transferncia direta. Por padro o dgito # realiza esta transferncia.

/etc/asterisk/featues.conf

blindxfer => #

Se preferir tambm pode utilizar uma combinaco de teclas:


blindxfer => *1

10.4.3. A transferncia ainda no est funcionando

necessrio habilitar a transferncia nos canais de comunicaco, colocando as


opces t e/ou T.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 159


4linux.com.br 10. Recursos da classe V

t habilita a transferncia para o lado destino da chamada.

T habilita a transferncia para o lado originador da chamada.

Exemplo:

exten => 1000,1,Dial(SIP/${EXTEN},35,tT)

10.5. Conferncia
A conferncia 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 padro SIP, por exemplo, tm seus prprios
mecanismos de conferncia que tambm podem ser usados, mas o mtodo padro
para conferncia o MeetMe().

10.5.1. Formato:

MeetMe(Confno[|options][|password])

onde:

Confno numero da sala de conferncia;

options Opces de configuraco:

m Configura o modo ouvir apenas;

t Configura o modo apenas fala;

i Anuncia a entrada e sada de usurio;

p Permite ao usurio sair da conferncia pressionando #;

X Permite ao usurio sair da conferncia discando uma extenso vlida


de um dgito. A extenso executada em ${MEETME_EXIT_CONTEXT}
ou no contexto atual se a varivel no tiver sido definida;

v modo vdeo;

q modo quieto (no toca os sons de entrada e sada);

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 160


4linux.com.br 10. Recursos da classe V

d adiciona dinamicamente a conferncia;

D dinamicamente adiciona a conferncia, pedindo pelo pin (personal


identification number). Quando ouvir o pedido do pin, se o usurio no
quiser um pin designado para a conferncia ele deve discar #;

M Habilita musica em espera quando a conferncia tem um unico


usurio;

e Seleciona uma conferncia vazia;

E Seleciona uma conferncia vazia sem pin.

password Especifica uma senha a aser solicitada para cada usurio que
entrar na sala de confer6encia.

10.5.2. Configurao

Vamos configurar a nossa sala de conferncia. Para isso vamos apagar o conteudo
do arquivo meetme.conf em /etc/asterisk e editar o seu novo conteudo:

[general]
audiobuffers =32

[rooms]
conf => 5001
conf => 5002 ,123456

onde:

audiobuffers=32 Numero de pacotes de udio de 20ms que sero


guardados em um buffer de memria quando pertencem a canais que no
so 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. Aplicao

Coloque no arquivo extensions.conf a sala de conferncia 5001.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 161


4linux.com.br 10. Recursos da classe V

exten=>5001,1,MeetMe(5001)

10.6. Msica de espera


O Asterisk, por padro, j vem com algumas musicas que so utilizadas para
chamadas aguardando uma transferncia ou em uma fila de atendimento. O diretrio
padro utilizado pelo Asterisk o /var/lib/asterisk/moh. O Asterisk entende que as
musicas em espera podem ser organizadas em sesses, que so sub-diretrios
dentro de /var/lib/asterisk/moh, que por sua vez a sesso denominada de
default.

O arquivo de configuraco e controle das musicas 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 sesso;


mode=files indica para o Asterisk ler arquivos;
directory=/var/lib/asterisk/moh indica o diretrio de onde as musicas
sero lidas;
randon=yes indica que vai usar os arquivos de som aleatoriamente.
O arquivo sip.conf precisa ser ajustado na seco [general] ou nas seces
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 esto suas musicas:

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 162


4linux.com.br 10. Recursos da classe V

*CLI> moh show classes

Para visualizar as musicas reconhecidas pelo moh:

*CLI> moh show files

10.7. Siga-me
Para implementar esta funcionalidade necessrio criar um contexto especfico 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 criaco 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 no 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 prtica com Asterisk e SNEP Pgina 163


4linux.com.br 10. Recursos da classe V

exten => _1XXX,4,Dial(SIP/${EXTEN}) ;


exten => _1XXX,5,Hangup

Neste caso, todas as ligaces que forem feitas para qualquer o numero 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 no faz a ligaco normal.

Se voc tem um arquivo de configuraco extensions.conf zerado, apenas com o


contexto default criado, faca as seguintes alteraces conforme abaixo:

[default]
include = > sigame-on
include = > sigame-off
include = > internas

10.8. VoiceMail
O VoiceMail, ou correio de voz o servico de "secretria eletrnica"do Asterisk, isto
, ao identificar que o destino de uma chamada no est disponvel, 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 usurios e senhas do voicemail ;

2. Configure o arquivo extensions.conf para que uma chamada ocupada ou no


atendida seja direcionada para o utilitrio VoiceMail();

3. Configure uma extenso para que o usurio 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 parmetros de funcionamento do correio de voz:

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 aplicaco Voicemail
caso o ramal esteja ocupado, no atender ou se estiver indisponvel.

[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 usurios 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 usurios a consulta
as suas caixas postais

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 prtica com Asterisk e SNEP Pgina 166


4linux.com.br 10. Recursos da classe V

10.9. Interface grfica


O SNEP, por padro, j vem com os principais recursos vistos at aqui j
configurados, alm de recursos adicionais.

Para facilitar o entendimento e organizar os arquivos de configuraco, 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
No perturbe ativar *22
No 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 numero do ramal *503
Gravar audio *100
Ouvir ultima gravaco do *100 *101
Agenda (Cadastros >> Contatos) *12 + Cd (P/telefone fixo)
*13 + Cd (P/ telefone celular)

/etc/asterisk/snep/snep-authconferences.conf
/etc/asterisk/snep/snep-conferences.conf
Salas de conferncia 901 a 915

/etc/asterisk/snep/snep-musiconhold.conf

Seces das musicas de espera

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 167


4linux.com.br 10. Recursos da classe V

Os recursos de voicemail e salas de conferncia so configurveis via Interface


grfica, respectivamente, nas opces:

Cadastros >> Conferncias

Configuraes >> Msicas de espera

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 168


4linux.com.br 10. Recursos da classe V

10.10. Laboratrio Asterisk

10.10.1. Criando uma URA

Criando as mensagens da URA

Vamos criar uma extenso para gerar as gravaces a serem utilizadas nas
URAs que sero construdas 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 (cdigo)


a ser gravado. No se esqueca de digitar # para finalizar a gravaco. Voc
dever ouvir o que foi gravado logo aps o trmino da gravaco.

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 prtica com Asterisk e SNEP Pgina 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 = Numero 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 prtica com Asterisk e SNEP Pgina 170


4linux.com.br 10. Recursos da classe V

10.10.2. Funes tpicas do PABX

Msica em Espera

Prepare o seu plano de discagem para testar a musica em espera editando o


arquivo /etc/asterisk/extensions.conf e adicionando a configuraco 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 musica em espera padro discando para a extenso 9100

Transferncia Direta (Blind Call Transfer)

Altere o valor do parmetro featuredigittimeout dentro do arquivo


/etc/asterisk/features.conf. Esta varivel controla o tempo entre um dgito e
outro que ser interpretado pelo Asterisk. O seu valor padro 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] (No esqueca de apagar o numero 1 que est junto ao
#).

Recarregue as configuraces, digitando no asterisk o seguinte comando:

*CLI> module reload features

Para testar a transferncia de chamadas direta, a partir do softphone disque


para um dos telefones IP;

No telefone, tecle #, voc vai ouvir a mensagem transfer ou transferncia e


aps digite o ramal do outro telefone e novamente #.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 171


4linux.com.br 10. Recursos da classe V

Transferncia Assistida (Consultative Call Transfer)

Entre no arquivo /etc/asteriskfeatures.conf e retire o comentrio da linha


atxfer => *2.

Recarregue as configuraces, 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 numero desejado. Aps falar com o destino desligue o
telefone para completar a transferncia.

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 configuraces, digitando no asterisk o seguinte comando:

*CLI> dialplan reload

Para testar o estacionamento de chamadas: disque de um ramal para outro.

Aps atender, transfira a ligaco para o numero 700. O sistema vai lhe
informar o numero da sala onde a ligaco foi estacionada. Desligue.

Agora disque para o numero 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 configuraces, digitando no asterisk o seguinte comando:

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 configuraco de todos
os ramais:

callgroup=1
pickupgroup=1
directmedia=no

Recarregue as configuraces digitando o comando:

*CLI> sip reload

Peca para algum de outra filial para discar para um dos seus ramais.

A partir do outro telefone (que no est tocando) disque *8# e capture a


ligaco.

Implementando uma sala de conferncia

Prepare o Asterisk para a utilizaco de Salas de Conferncia. Edite o arquivo


/etc/asterisk/meetme.conf e adicione as linhas abaixo no final do arquivo
dentro da sesso rooms:

conf=>9500
conf=>9501,1234

Recarregue as configuraces digitando o comando:

*CLI> reload app_meetme.so

Prepare o seu plano de discagem para a utilizaco de salas de conferncia.


Edite o arquivo /etc/asterisk/extensions.conf e adicione a configuraco
abaixo dentro do seu contexto [interno]:

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 173


4linux.com.br 10. Recursos da classe V

exten=>9500,1,MeetMe(9500)
exten=>9501,1,Meetme(9501)

Recarregue as configuraces digitando o comando:

*CLI> dialplan reload

Teste ligando do softphone e do telefone IP para a sala de conferncia.

Peca para algum dos outros grupos para discar para algum dos seus ramais
e transfira a ligaco para uma das salas de conferncia.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 174


4linux.com.br 10. Recursos da classe V

10.11. Laboratrio SNEP


Todos os recursos de classe V j esto definidos no SNEP. Aguns ajustes so
necessrios:

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 configuraces digitando os comandos:

*CLI> reload res_musiconhold.so

10.11.1. Testando recursos no SNEP

No menu Cadastros >> Salas de Conferncia, ative uma sala de


conferncia e faca os testes de funcionamento transferindo chamadas
recebidas para a sala;

Ative o recurso No perturbe em seu telefone atravs do recurso *22


Verifique se o recurso foi ativado olhando em Relatorios >> Servios
Utilizados.
Desative o recurso atravs da combinaco *23 e verifique novamente o
relatrio.

Repita o teste, mas agora para o recurso siga-me (*20 e *21).

No menu Configuraes >> Musicas de espera, crie uma nova seco


chamada curso e transfira uma musica de espera para esta seco.
Verifique: Se o diretrio /var/lib/asterisk/moh/curso foi criado
# ls /var/lib/asterisk/moh

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 175


4linux.com.br 10. Recursos da classe V

Verifique: Se a musica est no diretrio 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.
Peca para algum ligar para um de seus ramais e tente capturar a
chamada utilizando o ramal que no est tocando.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 176


Mdulo 11

DAC
4linux.com.br 11. DAC

11. DAC
O DAC (Distribuico de Chamadas Automaticamente) composto por Filas e
Agentes. As filas so configuradas no arquivo queues.conf e os agentes no arquivo
agents.conf. As filas so grupos de agentes/ramais que iro receber as chamadas
entrantes na fila. Os agentes so os dispositivos que iro receber as chamadas. O
principio de funcionamento das filas de atendimento pode ser resumido nos
seguintes passos:

1. As chamadas entrada so colocadas na fila;


2. Membros da fila atendem (extenses que autenticaram como agentes);
3. Uma estratgia de gerenciamento e distribuico da fila usada;
4. tocada musica enquanto o usurio espera na fila;
5. So feitos anuncios para membros e para quem est na fila.

11.1. Ramais x Agentes


Os agentes so extenses de telefone que so 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
fsico e as chamadas sero sempre creditadas a ele, facilitando assim a bilhetagem.

Recursos adicionais como pausas podem ser atribudas aos agentes, fazendo com
que os mesmos fiquem sem receber chamadas temporariamente. Os agentes foram
criados com o propsito principal de estarem logados em filas de atendimento.

Ramais tambm podem estar em filas de atendimento e, assim como os agentes,


podem pertencer a mais de uma fila.

11.2. Estratgias de distribuio


Chamadas so distribudas entre os membros de uma fila de acordo com uma entre
vrias estratgias.

ringall Toca todos os canais disponveis at que um atenda;

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 aleatria

rrmemory Roundrobin com memria, se lembra onde deixou a ultima


chamada.

11.3. Configurao

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 numero de
agentes disponveis para atendimento;
monitor-type Usa a nova aplicaco MixMonitor ao invs de Monitor. As
chamadas na fila sero gravadas e mixadas;
musicclass Indica que classe de musica ser utilizada na fila;
announce Anuncia ao agente em qual fila ele est atendendo a chamada;

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 179


4linux.com.br 11. DAC

strategy So vrias as estratgias de distribuico das chamadas entre os


agentes;
timeout Quanto tempo de ring utilizado antes de considerar o Timeout e
passar para outro agent;
maxlen Quantidade mxima 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 varivel MEMBERINTERFACE se
definida com o nome da interface (ex. Agent/1234);
announces Conjunto de opces de anuncio de posico 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 configuraes dos
agentes
maxlogintries=3
autologoff=15
autologoffunavail=yes
endcall=yes
musiconhold => default
group=1
; ======= Definicao dos agentes =======
; Essa parte dedicada a configurao 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 prtica com Asterisk e SNEP Pgina 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 sero recarregados automaticamente;

multiplelogin=yes define se permitido que uma mesma extenso pode-


se conectar com multiplos agentes;

maxlogintries=3 numero mximo de tentativas que tem um agente para


conectar;

autologoff=15 se um agente no atende uma chamada dentro de 25


segundos ele ser desconectado automaticamente;

autologoffunavail=yes se a extenso que o agente se conecta estiver


indisponvel automaticamente o agente deslogado;

endcall=yes um agente pode terminar uma chamada usando a tecla * ;

musiconhold => default a classe da musica de espera que o agente


escutar quando estiver logado.

11.4. Login e Logout de Agentes


Para efetuar Login e Logout dos agentes necessrio definir extenses que
executem as aplicaces do Asterisk prprias para esta finalidade.

Para Login, utilizamos a aplicaco 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 prtica com Asterisk e SNEP Pgina 181


4linux.com.br 11. DAC

Para Logout, utilizamos a aplicaco 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 gravao nas filas


Para habilitar as gravaces, ajuste o arquivo queues.conf e no contexto [general],
insira as seguintes diretivas.

/etc/asterisk/queues.conf

[general]
;Habilita a gravao de chamadas endereadas aos agentes.
;
monitor-type=MixMonitor
;
;Formato usado para gravar as chamadas (wav, gsm, wav49)
;O mais indicado o wav49 pois ocupa pouco espao e compatvel
;com a maioria dos Sistemas Operacionais.
;
monitor-format=gsm|wav|wav49;
;
;O diretrio padro para salvar as gravaes
;
/var/spool/asterisk/monitor

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 182


4linux.com.br 11. DAC

11.6. Interface grfica


A Fila uma das funcionalidades que o SNEP tem para a implementaco de um Call
center bsico ou um DAC. Filas permitem que vrios ramais facam 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 no estiver disponvel.

As principais informaces pertinentes a uma Fila de Atendimento so:

Nome da fila : nome que identifica a fila. Observar para no usar espacos ou
caracteres acentuados/especiais como: c@#%...;
Classe das msicas de espera: conjunto de arquivos de som a serem
usados como musicas de espera. (Veja mais em: Configuraces >> Musicas
em Espera);
Arquivo de anncio da fila: define o arquivo de som que contm a
mensagem informando o nome da fila que o chamador est;
Intervalo de repetio das mensagens: tempo em segundos que as
mensagens de aviso sero repetidas durante uma espera;
Estratgia de distribuio: Estratgias de distribuico de chamadas

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 183


4linux.com.br 11. DAC

11.6.1. Membros de uma Fila

Estticos: geralmente atribudos a ramais fsicos que ficaro na fila em tempo


integral. Para cadastrar um membro esttico em uma fila, clique no cone Membros
da fila, selecione os ramais, mova-os para a caixa da direita e salve.

Dinmicos: tambm chamados de agentes, devem ser cadastrados no sistema


informando-se cdigo, nome e senha, e quando associado a uma uma fila, possui as
seguintes funcionalidades:

*01 + Cd Agente: efetua login na Fila


*02 + Cd Agente: efetua logoff da Fila
*03 + Cd Agente: entra em PAUSA
*04 + Cd Agente: sai da PAUSA

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 184


4linux.com.br 11. DAC

11.7. Laboratrio Asterisk

11.7.1. Implementando distribuio automtica de chamadas

Neste exerccio criaremos uma fila de atendimento para o departamento fictcio de


vendas com dois agentes de atendimento. Para isso prepare o Asterisk para a
utilizaco da Distribuico Automtica 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 mdulo na CLI para ativar as alteraces realizadas.

*CLI> module reload app_queue.so

Confirme se a configurao da fila foi carregada com sucesso na CLI.


*CLI> queue show

Prepare o plano de discagem para a utilizao da DAC.

Edite o arquivo /etc/asterisk/extensions.conf e adicione a configuraco 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 ligaes do seu provedor e entregando no DAC
exten=>0800FF,1,Answer ; FF = Nmero da sua filial

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 185


4linux.com.br 11. DAC

exten=>0800FF,2,Queue(vendas) ; FF = Nmero 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 numero da sua filial. No esqueca de digitar dialplan reload para


ativar as alteraces realizadas.

Teste

Disque para o numero 550 do seu ramal SIP para se logar como um agente.
Digite o comando

*CLI> queue show vendas

Peca para outro aluno ligar para a sua filial 0800NFF, onde FF o numero da
sua filial.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 186


4linux.com.br 11. DAC

11.8. Laboratrio SNEP


Criando uma fila de atendimento: A partir do menu Cadastros >> Filas, crie
uma fila com os seguintes parmetros:

Nome da Fila: atendimento


Musicas 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
ao:

Discar para Ramal

por

Discar para fila

Teste: Peca 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 musica de espera.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 187


Mdulo 12

Segurana
4linux.com.br 12. Seguranca

12. Segurana

12.1. Execuo do processo Asterisk


Por padro, o processo do Asterisk configurado para ser executado com o usurio
root. Em questes de seguranca, esta no uma boa prtica. Por isso a troca do
usurio de execuco do Asterisk importante. Para fazer este processo:

Pare o Asterisk.

# /etc/init.d/asterisk stop

Crie o grupo asterisk.

# groupadd asterisk

Crie o usurio asterisk e adicione no grupo asterisk.

# /usr/sbin/useradd -d /var/lib/asterisk -g asterisk asterisk

Mude os donos e grupos dos diretrios 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 usurio.Faca 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 prtica com Asterisk e SNEP Pgina 189


4linux.com.br 12. Seguranca

12.2. Segurana nos arquivos de configurao


Ajustar as permisses de arquivos e diretrios outra boa prtica no gerenciamento
de sistemas abertos. No Asterisk no diferente, portanto, tenha em mente seguir
sempre as normas mais comumente utilizadas para permisses de arquivos e
diretrios. No caso do Asterisk:
Mude as permisses dos diretrios:

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 autenticao


Por padro, o Asterisk aceita chamadas vindas de qualquer peer, para que nenhum
usurio ou cracker invada seu servidor e dispare ligaces para todos os ramais com
a aplicaco SIPP abaixo descrito como bloquear esta aco. 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 No permite com que o Asterisk receba chamada de


nenhum usurio desconhecido ou host;
Autocreatepeer=no No permite criar peer automtica;
Deny=0.0.0.0/0.0.0.0 No aceitar pedidos de autenticaco SIP de todos os
enderecos IP;
Allow=192.168.0.0/24 Use para permitir que apenas um subconjunto
razovel de enderecos IP para alcancar cada listadas extenso / usurio em

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 190


4linux.com.br 12. Seguranca

seu ser;
Alwaysauthreject = yes Esta opco foi por um tempo (desde 1.2?), mas o
padro "no", que permite o vazamento de informaces de extenso. Definir
esta opco como "sim" ir rejeitar os pedidos de autenticaco de usurios
vlidos ruim com as informaces rejeico mesmo que com nomes de usurio
invlido, negando atacantes remotos a capacidade de detectar extenses
existentes com ataques de forca bruta adivinhar;
Realm=sip.4linux.com.br Define qual nome de domnio real para facilitar a
traduco de endereco para o usurio;
domain=sip.4linux.com.br FQDN de domnio do Asterisk.

12.4. Fail2Ban e Asterisk


Fail2ban um servico que monitora os logs de diversos servicos em busca de uma
expresso regular especfica definida em suas configuraces. Assim o atacante que
efetuar diversas tentativas de acesso em um determinado servico (no nosso caso
Asterisk) por X vezes em um pequeno intervalo de tempo, ser automaticamente
bloqueado atravs do iptables (Linux), por 3600 segundos (padro).

12.4.1. Download

Para dar incio as configuraces, vamos efetuar o download do produto no seguinte


endereco:

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 verso fail2ban-0.8.4.tar.bz2voc pode efetuar


o download de uma verso mais atual, lembre-se de sempre usar um source estvel.
Aps 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 prtica com Asterisk e SNEP Pgina 191


4linux.com.br 12. Seguranca

Para descompactar o pacote:

# tar -xvf fail2ban-0.8.4.tar.bz2

Aps descompactar o pacote, o ideal que o arquivo README seja lido com
atenco, adiantando o processo, um requisito do produto (contido no leia-me, seria a
verso do Python >= ao 2.3). Instale-o:

# apt-get update
# apt-get install python (ou python2.4)

Agora estamos prontos para instalaco e configuraco! Lembre-se sempre de ler a


documentaco do produto para desenvolver novas features ou modificar qualquer
item no incluso neste manual durante o procedimento de instalaco.

12.4.2. Instalao

# cd fail2ban-0.8.4
# python setup.py install

Feito isso, o produto estar instalado no seu sistema operacional, no diretrio:


/usr/share/fail2ban ou em/usr/local/share/fail2ban.

No vamos editar nada neste diretrio. O que interessa neste momento a


verificaco da existncia dos arquivos binrios no nosso PATH. O comando a seguir
dever exibir a verso do produto:

# fail2ban-server -V

Repita o procedimento para os outros executveis para confirmar suas existncias:

# fail2ban-client -V
# fail2ban-regex -V

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 192


4linux.com.br 12. Seguranca

Obs 1:Caso no consiga visualizar as informaces do produto, voc dever


adicionar o PATH dos executveis ao seu .bashrc ou adicion-los ao PATH do
usurio root.

Obs 2: As novas verses do produto, criam as pastas automaticamente, sem a


necessidade da execuco dos dois procedimentos abaixo, antes de executar estes
procedimentos, verifique se as pastas j existem em seu sistema, caso sim, prossiga
para script de inicializaco e configuraces.

Agora vamos criar os diretrios de configuraces do servico. No Debian as


configuraces padro seriam:

# mkdir -p /etc/fail2ban
# chown root.root /etc/fail2ban -R

Copie o conteudo da pasta configno diretrio de instalaco do produto para:


/etc/fail2banda seguinte forma:

# cp -arv /root/fail2ban-0.8.4/config/* /etc/fail2ban

12.4.3. Script de Inicializao

O pacote source no contm o script de inicializaco automtica (RCs), portanto


necessrio 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 inicializaco:

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 sero necessrios neste script, vamos precisar organizar o
PATH (caso necessrio. No meu caso, os executveis esto 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 prtica com Asterisk e SNEP Pgina 193


4linux.com.br 12. Seguranca

Salve e saia do arquivo, aplique permisses de execuco para o arquivo:

# cd /etc/init.d/
# chmod +x fail2ban

Inicie o servico e verifique o status de funcionamento:

# /etc/init.d/fail2ban start

Verificando se a execuo 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 servico est ativo em execuco, vamos definir sua inicializaco
automtica no Sistema Operacional:

# cd /etc/init.d/
# update-rc.d -f fail2ban defaults

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 194


4linux.com.br 12. Seguranca

12.4.4. Configurao

Por padro as configuraces do fail2ban esto no arquivo jail.conf localizado em:


/etc/fail2ban/. Para comecar a monitorar o Asterisk, devemos adicionar no final
deste arquivo as seguintes configuraces:

#
# 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 configuraco importante no arquivo /etc/fail2ban/jail.conf :

ignoreip ela responsvel por no bloquear a prpria mquina, a rede


interna do cliente, ou qualquer IP Externo que deva conectar ao servico
Asterisk ou qualquer outro servico 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 configuraco do Asterisk criada em /etc/fail2ban/jail.conf e o ignoreip


devidamente setado para no bloquear nossas redes, precisamos agora criar o
arquivo responsvel pela leitura de logs do Asterisk.

Dentro de /etc/fail2ban/filter.d crie o arquivo asterisk.conf

ATENO: O nome do arquivo criado na pasta /etc/fail2ban/filter.d/ deve ser


IGUAL ao nome dado na opco filter para cada servico 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 prtica com Asterisk e SNEP Pgina 195


4linux.com.br 12. Seguranca

/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 prtica com Asterisk e SNEP Pgina 196


4linux.com.br 12. Seguranca

ignored.
# Values: TEXT
#
ignoreregex =

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 197


Mdulo 13

Asterisk Realtime
4linux.com.br 13. Asterisk Realtime

13. Asterisk Realtime


O arquivo de configuraco do Asterisk bastante simples de mexer, porm a titulo
de criaco de interfaces e outras ferramentas, ter as informaces no banco de dados
facilita bastante o nosso trabalho e, alm disso, permite uma configuraco mais
dinmica sem a necessidade de fazer reload a cada alteraco de arquivo.

13.1. Como funciona


O Asterisk Realtime permite utilizar um banco de dados, como MySQL, para
armazenar as configuraces em vez dos tradicionais arquivos de texto no
/etc/asterisk.

Alm dos dados ficarem em tabelas do MySQL, tambm a recarga das alteraces
so feitas automaticamente pelo Asterisk dispensando o comando reload, isto
porque quando chega uma requisico no Asterisk ele procura a informaco no banco
caso no seja encontrada na memria.

13.2. Configurar o Asterisk Real Time


O Asterisk possui alguns mdulos especficos para alguns tipos de banco de dados
como o PostgreSQL, MySQL e ODBC. Provavelmente ser necessrio recompilar o
Asrterisk para poder ativar os recursos de acesso ao banco.

13.2.1. Dependncias

No sistema operacional temos poucas dependncias

# apt-get install gcclibxml2-dev unixodbc-dev mysql-server


libmyodbc

Aps instalar as dependncias, recompile o asterisk.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 prtica com Asterisk e SNEP Pgina 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 conteudo 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 privilgios 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 usurio 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 criaco de ramais compreende simplesmente popular a tabela sipfriends com as
informaces de cada ramal a ser criado.

Nao havendo erro nenhum voc pode configurar o usurio 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 prtica com Asterisk e SNEP Pgina 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


no ficam na memria, ou seja, no possvel visualizar as informaes com
o comando *CLI> sip show peers. Caso seja necessrio armazenar em memria
inclua no sip.conf o parmetro rtcachefriends=yes.

Laboratrio Asterisk

O objetivo deste laboratrio e que o aluno aprenda como configurar o sistema


realtime para criar os canais SIP e as extenses em um banco de dados mysql.
Duas extenses novas sero criadas NN10 e NN11 e os telefones sero
reconfigurados para estas extenses demonstrando o funcionamento do sistema
realtime.

Edite o arquivo de configuraco 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 prtica com Asterisk e SNEP Pgina 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 necessrias no MySQL, faca do dowload do arquivo


SQL com os comandos necessrios a criaco do banco de dados.

wget http://endereoipdoinstrutor/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 prtica com Asterisk e SNEP Pgina 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 numero da sua filial.

Inclua as extenses 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 extenses RealTime no plano de discagem, no contexto [default].

switch => realtime/teste@extensions

Recarregue as extenses para habilitar o RealTime.

*CLI>dialplan reload

Reconfigure seu telefone SIP e o softphone para os ramais NN10 e NN11 No


se esqueca de reiniciar os telefones para que se registrem novamente. Use o
comando sip show peers e verifique que os peers no aparecem enquanto
no h uma ligaco.
*CLI>sip show peers

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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 experincia com projetos e implantaco de redes VoIP e 10 anos de
experincia com Linux. J desempenhou vrias funces 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.

Flvio Henrique Somensi scio-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 responsvel por todo
cdigo escrito at meados de 2009. Participa de vrios projetos de tecnologia e
tambm j ministrou palestras e cursos relacionados a Joomla, PHP, MySQL, Shell
Script , OpenOffice e Sutes Office Microsoft. Graduando em Gesto de TI pelo
SENAC de Florianpolis SC, atualmente exerce a funco de diretor da OpenS
Tecnologia, onde gestor e responsvel pela Unidade SNEP Net.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 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

Goncalves, Flavio Eduardo de Andrade. Asterisk PABX, Guia de Configuraco.

Construindo um PABX-Ip na prtica com Asterisk e SNEP Pgina 206

Vous aimerez peut-être aussi