Asterisk: Uma Análise Arquitetural
Marco A. P. Santos e Viviane de A. S. Ribeiro
Resumo—Este artigo apresenta uma análise arquitetural do
software Asterisk, uma solução open source utilizada na telefonia
que permite tratar as chamadas telefônicas de forma persona-
lizada. Possui características semelhantes a um PABX, como
correio de voz, respostas interativas, distribuição automática
de chamadas e conferência em chamadas. Sua arquitetura em
forma modular é composta por canais, CODECs, aplicações e
protocolos. O cérebro do Asterisk é o plano de discagem, é através
dele que são configuradas todas as ações tomadas quando uma
chamada é recebida. O Asterisk se consolidou no mercado como
um dos maiores softwares de companhia telefônica, devido ao fato
da grande flexibilidade oferecida na criação de novos serviços de
acordo com a necessidade do cliente.
I. INTRODUÇÃO
Este artigo descreve uma análise arquitetural do Asterisk
[1], considerado uma central telefônica híbrida, por imple-
mentar tanto funções de uma central telefônica quanto de
protocolos VoIP (Voice over Internet Protocol). Em suma, o
Asterisk é um framework que implementa as funcionalidades
de uma PABX (Private Automatic Branch Exchange), capaz
de fazer, realizar e tratar chamadas telefônicas de forma
personalizada.
O artigo está estruturado da seguinte forma: na primeira
seção é abordado o Asterisk, suas funcionalidades, vantagens,
limitações, requisitos funcionais e não funcionais que guiaram
as principais decisões arquiteturais do projeto. Na segunda se-
ção será apresentada a arquitetura geral do software, onde serão
mostrados os modelos das duas visões mais características do
projeto: visão estrutural e visão de implantação. A terceira
seção trata do plano de discagem (Dialplan) considerado o
cérebro do Asterisk.
II. ASTERISK
Asterisk é um framework de código aberto que implementa
as características de uma central telefônica e disponibiliza uma
imensa quantidade de recursos e funcionalidades, conforme as
necessidades da empresa. Seu nome vem do símbolo, *, que
nos sistemas Unix e DOS representa um “coringa” significando
qualquer caractere, qualquer arquivo.
Criado por Mark Spencer da empresa Digium, ao longo
dos anos o Asterisk recebe novas funções e características
desenvolvidas por outros programadores contribuindo assim
para sua evolução contínua. Foi desenvolvido para o Linux
e atualmente o Asterisk pode ser executado também no
FreeBSD, OpenBSD, Mac OS X, Sun Solaris e Microsoft
Windows.
O software básico do Asterisk inclui muitas características
encontradas em sistemas telefônicos caros e proprietários. Ele
aceita conexão em tempo real entre as redes PSTN (Public
Service Telephony Network) e redes VoIP, permitindo a cons-
trução eficaz de novos sistemas de telefonia ou a mudança dos
sistemas de telefonia convencional para as novas tecnologia de
VoIP.
Dentre as várias funcionalidades existentes, vale ressaltar
algumas [3]: Voice Mail, URA (Unidade de Resposta Auto-
mática), Distribuição Automática de Chamadas, Conferências,
Ramais Virtuais, Música em Espera, Estacionamento de Cha-
madas, Gravação de Chamadas e Programação de Interativi-
dade.
As principais vantagens em optar pelo uso do Asterisk são
[2]: Redução do custo de ligação (DDD e DDI); Funcionalida-
des flexíveis; Plano de numeração unificado para toda empresa,
Aumento da produtividade, Redução do custo de operação de
rede (convergência Telecom & TI), Integração da empresa,
Escalabilidade, Expansão das aplicações de voz e Baixo custo
de implementação.
Segundo [4], uma das limitações do Asterisk é o uso da
CPU (Central Processing Unit – Unidade Central de Proces-
samento) do servidor para processar sinais de voz, ao invés de
ter um DSP (Processador de Sinais Digitais) dedicado a cada
canal. Isso permitiu que o custo fosse reduzido para as placas
E1/T1, porém o sistema fica muito dependente da CPU.
A. Requisitos Funcionais e Não-Funcionais
O Asterisk possui vários requisitos funcionais semelhantes
aos encontradas nas PABX convencionais [7]:
• Correio de voz: quando um usuário não atende uma
ligação, existe a opção para o usuário que fez a
chamada deixar uma mensagem;
• Distribuidor Automático de Chamadas (DAC): caso
não haja nenhum operador disponível o usuário é
encaminhado para um sistema de filas e permanece
em espera;
• URA: atendimento eletrônico das ligações.
• Sala de Conferência: possibilita vários usuários con-
versar simultaneamente;
• Discador automático: faz chamadas automáticas a par-
tir de uma base de dados de telefones;
• Servidor de música de espera: arquivos podem ser
reproduzidos, de forma síncrona ou assíncrona, isso
ocorre geralmente quando chamada esta na fila de
espera.
• Registro detalhado das ligações: relatórios sobre as
ligações com duração, origem, destino e custo das
chamadas.
Dentre os requisitos Não-Funcionais do Asterisk, podemos
citar:
• Flexibilidade: criar novos recursos e novos serviços
de acordo com a necessidade da empresa, além disso,
é possível integrar com outros sistemas existentes:
Skype, Sistemas de Monitoramento e Controle de
Callcenters, etc.
• Escalabilidade: para aumentar sua capacidade
basta adicionar outro servidor e configurá-lo para
comunicar-se com o já existente.
• Redução de Custos das Ligações: é possível manter
ramais local (matriz) e remotamente (filiais), para isso
basta que todas as filiais possuam um computador com
o Asterisk instalado e um link de internet para cada
Asterisk, com isso toda a comunicação será realizada
através da internet sem a necessidade de operadoras
de telefonia [2].
• Interoperabilidade: o Asterisk suporta diferentes pro-
tocolos de VoIP existentes hoje na telefonia, tornando
a ligação e migração com sistemas híbridos altamente
facilitada.
III. ARQUITETURA DO ASTERISK
O Asterisk foi criado para ter o máximo de flexibilidade.
Ele é construído em módulos, permitindo ao administrador
escolher a configuração mais adequada à atender suas necessi-
dades. Esta configuração pode ser simples e utilizar apenas os
recursos básicos do Asterisk, como também pode ser complexa
e fazer uso de recursos avançados de conversação e plano de
discagem (Dialplan).
Um módulo no Asterisk é um componente com uma
funcionalidade específica, tal como um controlador de canal
(chan_sip.so) ou um recurso que aceita conexões externas
(func_odbc.so). O núcleo de um sistema Asterisk está na
configuração de seu plano de discagem, que define como
ele irá gerenciar todas as suas ligações. A configuração de
um plano de discagem, deve ser feita diretamente no arquivo
(extensions.conf), devendo se ter muito cuidado ao modificá-
lo.
A figura 1 mostra as APIs (Application Programming
Interface) específicas que foram definidas em torno de um
núcleo PABX, bem como seus principais módulos. Este nú-
cleo gerencia todas as conexões do PABX, independente de
protocolos, CODECs (codificador-decodificador) e hardwares
utilizados.
As APIS estão divididas em quatro grupos [4]:
• APIs de canais – Controla o tipo de conexão que está
sendo usada, seja ela VoIP, ISDN(Integrated Services
Digital Network) ou outra tecnologia;
• APIs de Aplicações – Permitem carregar vários mó-
dulos desempenhando funções específicas que podem
ser usados pelo sistema PABX;
• APIs de Traduções de CODECs – Carrega os módulos
para suportar os diversos formatos de compressão de
áudio, por exemplo: GSM (Groupe Special Mobile)
utilizado na comunicação de telefonia móvel, MP3
(MPEG 1 Layer-3) e G.711(A-Law padrão utilizado
no resto do mundo) & U-Law(padrão americano) que
é um codec de alta qualidade e alta compactação.
• APIs de Formato de Arquivos Asterisk – Gerencia
leitura e escrita dos diversos formatos de arquivos para
armazenamento, por exemplo: GSM e MP3.
Os principais módulos (componentes) do Asterisk são [4]:
• Núcleo de Comutação PABX – é a essência do Aste-
risk, pois é responsável por todas as conexões e tarefas
automáticas;
• Lançador de Aplicações – Carrega aplicações que
prestarão serviços para usuários, como correios de
voz, conferência e listagem de diretórios;
• CODEC Translator – Módulo responsável por codi-
ficar e decodificar os vários formatos de compressão
de áudio usados na telefonia;
• Agendamento e Gerenciador E/S – Responsável pelo
agendamento de tarefas de baixo nível do programa e
gerenciamento do sistema para otimização de desem-
penho.
Figura 1. Visão Estrutural Interna do Asterisk
A. Visão Estrutural
Os componentes do Asterisk podem ser divididos em
interfaces de hardware e software.
[6] As interfaces de hardware que podem ser utilizadas
são:
• Interfaces Analógicas: linha de telefone e telefone
analógico;
• Circuitos Digitais: T1 - usado nos Estados Unidos,
Canadá e Japão e, E1 - usado na Europa e no Brasil;
• Protocolos VoIP: SIP, H.323, etc.
[6] As interfaces de software são:
• Interface Pseudo TDM Zaptel: permite a integração
com o sistema digital e analógico e a realização de
vídeo conferência.
• Interface Não Zaptel: permite a integração com o
sistema digital e analógico, porém, não permite a
realização de vídeo conferência.
• Protocolos de pacotes de voz: protocolos para comu-
nicação VoIP.
Os componentes e conectores utilizados em uma configuração
básica de um PABX são mostrados na figura 2.
Figura 2. Visão Estrutural
A interface FXO/conector (Foreign eXchange Office) per-
mite a conexão a uma linha de telefone analógico e aceita um
tom de discagem. Conectam o PABX a outro comutador.
A interface FXS/conector (Foreign eXchange Station) for-
nece a linha analógica, em outras palavras, fornece o tom de
discagem além da sinalização indicando a chegada de uma
ligação.
A Internet Conecction/conector roteia as chamadas para
um provedor de serviços de telefonia.
O SIP (Session Initiation Protocol) Phone é um protocolo
padrão da VoIP baseado em texto, que utiliza o modelo
"requisição-resposta"e é utilizado para iniciar, modificar ou
terminar sessões de chamadas entre usuários. O SIP leva os
controles da aplicação para o terminal, eliminando a necessi-
dade de uma central de comutação, ele é usuário e servidor de
rede ao mesmo tempo.
B. Visão de Implantação
Nesta visão serão apresentados os componentes e conecto-
res da visão estrutural, focando na estrutura física sobre o qual
o software foi implantado e implementado. Esta visão ajuda
a explorar a configuração proposta para o sistema, mostrando
como alguns componentes foram distribuídos [8].
Os itens de hardware necessários para implantação do
Asterisk são: HD (hard disk), por não ser muito utilizado ele
requer em média 100Mb; sistemas operacionáis compatíveis
com a instalação, podem ser FreeBSD, OpenBSD, Mac OS X,
Sun Solaris e Microsoft Windows; memória e CPU. O Asterisk
faz uso intensivo de CPU e memória por sua necessidade de
acesso prioritário aos barramentos do processador e do sistema
[5]:
• Até 5 canais é recomendado no mínimo um computa-
dor com 400Mhz x86 e 256 MB de memória RAM;
• Para sistemas com até 10 canais é recomendado no
mínimo um computador com 1 GHz x86 e 512 MB
de RAM;
• Para sistemas com até 15 canais é recomendado no
mínimo um computador com 3 GHz x86 e 1 GB de
RAM;
• Para ambientes grandes com mais de 15 canais o
hardware deve ser muito bem projetado (a depender
com CPUs duplas e possivelmente múltiplos servido-
res em arquitetura distribuída) para não haver falhas
na comunicação.
Os itens de software necessários para instalação do Asterisk
são os pacotes. O principal que é o asterisk; os drivers da
telefonia zaptel - caso esteja utilizando hardware digital ou
analógico, ou o driver ztdummy como interface de temporiza-
ção; a biblioteca libpri - para o uso de interfaces ISDN PRI
(carrega voz e serviços de redes digitais [4]) ou o pacote zaptel.
A figura 3 mostra a visão de implantação do Asterisk. O
node do Asterisk representa sua estrutura interna com seus
componentes e conectores. Já o node de Device encontramos
os diversos dispositivos que se conectam com o Asterisk atra-
vés dos conectores (FXS, Adaptador de telefonia Analógica,
Ethernet e FXO).
Através desta visão de implantação percebemos que a API
de Canais do Asterisk é a interface núcleo da arquitetura do
Asterisk, pois é a partir dela que as chamadas são recebidas
ou enviadas, já que toda chamada é originada ou finalizada de
um canal.
IV. PLANO DE DISCAGEM DO ASTERISK
O coração do Asterisk é o plano de discagem, configurado
através do arquivo extension.conf onde os objetos são decla-
rados e configurados com as ações que serão tomadas quando
uma ligação for recebida. O plano de discagem é dividido em
quatro partes: contextos, extensões, prioridades e aplicações
[7].
A. Contextos
O plano de discagem é divido em seções chamadas de
contextos. Os contextos definem o escopo e permitem separar
diferentes partes do plano de discagem. Eles são diretamente
ligados aos canais e cada canal existe dentro de um contexto.
Quando uma ligação chega no Asterisk por um canal ela é
processada dentro de um contexto.
As extensões definidas dentro de um contexto são iden-
tificadas colocando o nome do contexto entre colchetes ([]),
por exemplo: [entradas]. Todas as instruções colocadas depois
da definição do contexto farão parte deste contexto até o
próximo contexto ser declarado. Existem dois tipos de contexto
principais: [globals] e [general].
No contexto [globals], definimos as variáveis globais e seus
valores iniciais, que serão utilizados por outros contextos, já
no [general] podemos ter informações de como o plano de
discagem irá funcionar, quais as prioridades e o que fazer
quando ocorrer uma falha.
Figura 3. Visão de Implantação
B. Extensões
Dentro de cada contexto estão definidas uma ou mais
extensões. Uma extensão é uma instrução executada pelo
Asterisk, disparada por alguma ligação recebida ou número
sendo discado no canal. As extensões especificam o que
acontece com cada ligação, sendo responsável por determinar
o fluxo de chamadas.
Uma extensão pode ser configurada usando a palavra exten
seguido do sinal de igual ou maior =>. Uma extensão é com-
posta por três componentes: o nome a extensão, a prioridade,
e uma aplicação (exten => 101,3,voicemail(SIP/101,20)).
C. Prioridade
A prioridade é definida por vários passos dentro de cada
extensão. Cada prioridade é numerada de forma sequencial,
começando em 1. Cada prioridade chama uma aplicação espe-
cífica, como no exemplo a seguir:
exten => 100,1,Answer( ) – atende a chamada
exten => 100,2,Hangup( ) – desliga a chamada
D. Aplicações
Partes fundamentais do Asterisk, cada aplicação executa
uma determinada ação sobre o canal atual, como tocar um
som, receber tom de discagem, ou desligar a chamada. Nos
exemplos de extensões e prioridades foram apresentadas duas
aplicações: Answer() e Hangup().
V. CONCLUSÃO
Com base nos estudos efetuados sobre o Asterisk perce-
bemos que o mesmo é uma boa solução para montar PABXs
com baixo custo, isso se deve ao fato de ser bastante flexível
na criação de novas funcionalidades. Seus recursos avançados,
facilidade de uso e menores custos são grandes atrativos tanto
para consumidores quanto para empresas de telefonia.
A arquitetura desenvolvida no Asterisk nos permitiu ana-
lisar conceitos importantes, tais como: canais, CODECS,
aplicações e protocolos. Composto por diversas tecnologias,
sua arquitetura modularizada permite a inclusão de novos
componentes sem a necessidade de modificar seu núcleo de
processamento. Todo o funcionamento do Asterisk é baseado
em seu plano de discagem que define como ele irá gerenciar
todas as ligações.
Há mais de 10 anos no mercado, o Asterisk é bem projetado
para o que ele faz e no decorrer desses anos ele alcançou
um notável equilíbrio entre flexibilidade e complexidade. Esse
equilíbrio foi obtido devido ao fato do Asterisk ser em código
aberto e você ter a liberdade de poder customizá-lo conforme
você desejar. Você pode fazer que ele distribua chamadas au-
tomaticamente, configure músicas, promoções para chamadas
na fila de espera, conferências, etc, podendo se tornar a base
para um sistema completo de telefonia.
Com as informações expostas concluímos que a arquitetura
do Asterisk foi desenvolvida de forma a atender os requisitos
funcionais já que as principais funções de chamadas são muito
bem elaboradas. Devido a sua estrutura modularizada, com
baixo acoplamento e alta coesão os requisitos não-funcionais
estão sendo atendidos, garantindo assim um software de qua-
lidade e com uma arquitetura robusta mas ao mesmo tempo
permissível a novas funcionalidades.
REFERÊNCIAS
[1] KELLER, Alexandre. Asterisk na prática. 2a Ed. Editor: Rubens Prates.
Novatec Editora Ltda. 2011.
[2] PEREIRA, Alberto Rodrigo. Asterisk - O sistema de telefo-
nia open source. Disponível em: http://www.vivaolinux.com.br/artigo/
Asterisk-O-sistema-de-telefonia-open-source. Acesso em: 25 mai. 2013.
[3] BERALDI, Roger. Asterisk - O Futuro da Telefonia. Disponí-
vel em: http://rogerberaldi.com/wp-content/uploads/2008/01/setac2006.
pdf. Acesso em: 25 mai. 2013.
[4] GONÇALVES, Flávio Eduardo de Andrade. Asterisk PBX Guia de
Configuração. Disponível em: http://www.taioque.com.br/linux/Livro%
20Asterisk%20Curso%20Completo.pdf. Acesso em: 25 de mai. 2013.
[5] SANTOS, Luiz Arthur F. VoIP Asterisk. Disponível em: http://www.
slideshare.net/luiz_arthur/redes-voip-asterisk. Acesso em 25 mai. 2013.
[6] HARFF, Simone. Requisitos e Proposta para Implantação de um
Servidor VoIP. Trabalho de Conclusão de Curso (Especialista em
Tecnologias, Gerência e Segurança de Redes de Computadores)
– Universidade Federal do Rio Grande do Sul, 2008. Disponível
em: http://www.lume.ufrgs.br/bitstream/handle/10183/15984/000695302.
pdf?sequence=1. Acesso em: 26 mai. 2013.
[7] ROSA, Richard Hobold. Ferramenta para desenvolvimento de Planos
de Discagem no Asterisk. Trabalho final apresentado à disciplina de
Projeto em Ciência da Computação II no curso de Ciências da Com-
putação - Universidade Federal de Santa Catarina, 2007. Disponível
em: https://projetos.inf.ufsc.br/arquivos_projetos/projeto_753/Projetos%
20II%20-20Richard%20Hobold.pdf. Acesso em: 27 mai. 2013.
[8] AMBLER, SCOTT W. Modelagem Agil: Práticas eficazes para a
programação eXtrema e o processo unificado, 2004. Disponível em:
http://books.google.com.br/books?id=O9AZpUYGOGMC&printsec=
frontcover&hl=pt-BR&source=gbs_ge_summary_r&cad=0#v=
onepage&q&f=false. Acesso em: 31 mai. 2013.

Asterisk

  • 1.
    Asterisk: Uma AnáliseArquitetural Marco A. P. Santos e Viviane de A. S. Ribeiro Resumo—Este artigo apresenta uma análise arquitetural do software Asterisk, uma solução open source utilizada na telefonia que permite tratar as chamadas telefônicas de forma persona- lizada. Possui características semelhantes a um PABX, como correio de voz, respostas interativas, distribuição automática de chamadas e conferência em chamadas. Sua arquitetura em forma modular é composta por canais, CODECs, aplicações e protocolos. O cérebro do Asterisk é o plano de discagem, é através dele que são configuradas todas as ações tomadas quando uma chamada é recebida. O Asterisk se consolidou no mercado como um dos maiores softwares de companhia telefônica, devido ao fato da grande flexibilidade oferecida na criação de novos serviços de acordo com a necessidade do cliente. I. INTRODUÇÃO Este artigo descreve uma análise arquitetural do Asterisk [1], considerado uma central telefônica híbrida, por imple- mentar tanto funções de uma central telefônica quanto de protocolos VoIP (Voice over Internet Protocol). Em suma, o Asterisk é um framework que implementa as funcionalidades de uma PABX (Private Automatic Branch Exchange), capaz de fazer, realizar e tratar chamadas telefônicas de forma personalizada. O artigo está estruturado da seguinte forma: na primeira seção é abordado o Asterisk, suas funcionalidades, vantagens, limitações, requisitos funcionais e não funcionais que guiaram as principais decisões arquiteturais do projeto. Na segunda se- ção será apresentada a arquitetura geral do software, onde serão mostrados os modelos das duas visões mais características do projeto: visão estrutural e visão de implantação. A terceira seção trata do plano de discagem (Dialplan) considerado o cérebro do Asterisk. II. ASTERISK Asterisk é um framework de código aberto que implementa as características de uma central telefônica e disponibiliza uma imensa quantidade de recursos e funcionalidades, conforme as necessidades da empresa. Seu nome vem do símbolo, *, que nos sistemas Unix e DOS representa um “coringa” significando qualquer caractere, qualquer arquivo. Criado por Mark Spencer da empresa Digium, ao longo dos anos o Asterisk recebe novas funções e características desenvolvidas por outros programadores contribuindo assim para sua evolução contínua. Foi desenvolvido para o Linux e atualmente o Asterisk pode ser executado também no FreeBSD, OpenBSD, Mac OS X, Sun Solaris e Microsoft Windows. O software básico do Asterisk inclui muitas características encontradas em sistemas telefônicos caros e proprietários. Ele aceita conexão em tempo real entre as redes PSTN (Public Service Telephony Network) e redes VoIP, permitindo a cons- trução eficaz de novos sistemas de telefonia ou a mudança dos sistemas de telefonia convencional para as novas tecnologia de VoIP. Dentre as várias funcionalidades existentes, vale ressaltar algumas [3]: Voice Mail, URA (Unidade de Resposta Auto- mática), Distribuição Automática de Chamadas, Conferências, Ramais Virtuais, Música em Espera, Estacionamento de Cha- madas, Gravação de Chamadas e Programação de Interativi- dade. As principais vantagens em optar pelo uso do Asterisk são [2]: Redução do custo de ligação (DDD e DDI); Funcionalida- des flexíveis; Plano de numeração unificado para toda empresa, Aumento da produtividade, Redução do custo de operação de rede (convergência Telecom & TI), Integração da empresa, Escalabilidade, Expansão das aplicações de voz e Baixo custo de implementação. Segundo [4], uma das limitações do Asterisk é o uso da CPU (Central Processing Unit – Unidade Central de Proces- samento) do servidor para processar sinais de voz, ao invés de ter um DSP (Processador de Sinais Digitais) dedicado a cada canal. Isso permitiu que o custo fosse reduzido para as placas E1/T1, porém o sistema fica muito dependente da CPU. A. Requisitos Funcionais e Não-Funcionais O Asterisk possui vários requisitos funcionais semelhantes aos encontradas nas PABX convencionais [7]: • Correio de voz: quando um usuário não atende uma ligação, existe a opção para o usuário que fez a chamada deixar uma mensagem; • Distribuidor Automático de Chamadas (DAC): caso não haja nenhum operador disponível o usuário é encaminhado para um sistema de filas e permanece em espera; • URA: atendimento eletrônico das ligações. • Sala de Conferência: possibilita vários usuários con- versar simultaneamente; • Discador automático: faz chamadas automáticas a par- tir de uma base de dados de telefones; • Servidor de música de espera: arquivos podem ser reproduzidos, de forma síncrona ou assíncrona, isso ocorre geralmente quando chamada esta na fila de espera. • Registro detalhado das ligações: relatórios sobre as ligações com duração, origem, destino e custo das chamadas. Dentre os requisitos Não-Funcionais do Asterisk, podemos citar:
  • 2.
    • Flexibilidade: criarnovos recursos e novos serviços de acordo com a necessidade da empresa, além disso, é possível integrar com outros sistemas existentes: Skype, Sistemas de Monitoramento e Controle de Callcenters, etc. • Escalabilidade: para aumentar sua capacidade basta adicionar outro servidor e configurá-lo para comunicar-se com o já existente. • Redução de Custos das Ligações: é possível manter ramais local (matriz) e remotamente (filiais), para isso basta que todas as filiais possuam um computador com o Asterisk instalado e um link de internet para cada Asterisk, com isso toda a comunicação será realizada através da internet sem a necessidade de operadoras de telefonia [2]. • Interoperabilidade: o Asterisk suporta diferentes pro- tocolos de VoIP existentes hoje na telefonia, tornando a ligação e migração com sistemas híbridos altamente facilitada. III. ARQUITETURA DO ASTERISK O Asterisk foi criado para ter o máximo de flexibilidade. Ele é construído em módulos, permitindo ao administrador escolher a configuração mais adequada à atender suas necessi- dades. Esta configuração pode ser simples e utilizar apenas os recursos básicos do Asterisk, como também pode ser complexa e fazer uso de recursos avançados de conversação e plano de discagem (Dialplan). Um módulo no Asterisk é um componente com uma funcionalidade específica, tal como um controlador de canal (chan_sip.so) ou um recurso que aceita conexões externas (func_odbc.so). O núcleo de um sistema Asterisk está na configuração de seu plano de discagem, que define como ele irá gerenciar todas as suas ligações. A configuração de um plano de discagem, deve ser feita diretamente no arquivo (extensions.conf), devendo se ter muito cuidado ao modificá- lo. A figura 1 mostra as APIs (Application Programming Interface) específicas que foram definidas em torno de um núcleo PABX, bem como seus principais módulos. Este nú- cleo gerencia todas as conexões do PABX, independente de protocolos, CODECs (codificador-decodificador) e hardwares utilizados. As APIS estão divididas em quatro grupos [4]: • APIs de canais – Controla o tipo de conexão que está sendo usada, seja ela VoIP, ISDN(Integrated Services Digital Network) ou outra tecnologia; • APIs de Aplicações – Permitem carregar vários mó- dulos desempenhando funções específicas que podem ser usados pelo sistema PABX; • APIs de Traduções de CODECs – Carrega os módulos para suportar os diversos formatos de compressão de áudio, por exemplo: GSM (Groupe Special Mobile) utilizado na comunicação de telefonia móvel, MP3 (MPEG 1 Layer-3) e G.711(A-Law padrão utilizado no resto do mundo) & U-Law(padrão americano) que é um codec de alta qualidade e alta compactação. • APIs de Formato de Arquivos Asterisk – Gerencia leitura e escrita dos diversos formatos de arquivos para armazenamento, por exemplo: GSM e MP3. Os principais módulos (componentes) do Asterisk são [4]: • Núcleo de Comutação PABX – é a essência do Aste- risk, pois é responsável por todas as conexões e tarefas automáticas; • Lançador de Aplicações – Carrega aplicações que prestarão serviços para usuários, como correios de voz, conferência e listagem de diretórios; • CODEC Translator – Módulo responsável por codi- ficar e decodificar os vários formatos de compressão de áudio usados na telefonia; • Agendamento e Gerenciador E/S – Responsável pelo agendamento de tarefas de baixo nível do programa e gerenciamento do sistema para otimização de desem- penho. Figura 1. Visão Estrutural Interna do Asterisk A. Visão Estrutural Os componentes do Asterisk podem ser divididos em interfaces de hardware e software. [6] As interfaces de hardware que podem ser utilizadas são: • Interfaces Analógicas: linha de telefone e telefone analógico; • Circuitos Digitais: T1 - usado nos Estados Unidos, Canadá e Japão e, E1 - usado na Europa e no Brasil; • Protocolos VoIP: SIP, H.323, etc. [6] As interfaces de software são: • Interface Pseudo TDM Zaptel: permite a integração com o sistema digital e analógico e a realização de vídeo conferência. • Interface Não Zaptel: permite a integração com o sistema digital e analógico, porém, não permite a realização de vídeo conferência.
  • 3.
    • Protocolos depacotes de voz: protocolos para comu- nicação VoIP. Os componentes e conectores utilizados em uma configuração básica de um PABX são mostrados na figura 2. Figura 2. Visão Estrutural A interface FXO/conector (Foreign eXchange Office) per- mite a conexão a uma linha de telefone analógico e aceita um tom de discagem. Conectam o PABX a outro comutador. A interface FXS/conector (Foreign eXchange Station) for- nece a linha analógica, em outras palavras, fornece o tom de discagem além da sinalização indicando a chegada de uma ligação. A Internet Conecction/conector roteia as chamadas para um provedor de serviços de telefonia. O SIP (Session Initiation Protocol) Phone é um protocolo padrão da VoIP baseado em texto, que utiliza o modelo "requisição-resposta"e é utilizado para iniciar, modificar ou terminar sessões de chamadas entre usuários. O SIP leva os controles da aplicação para o terminal, eliminando a necessi- dade de uma central de comutação, ele é usuário e servidor de rede ao mesmo tempo. B. Visão de Implantação Nesta visão serão apresentados os componentes e conecto- res da visão estrutural, focando na estrutura física sobre o qual o software foi implantado e implementado. Esta visão ajuda a explorar a configuração proposta para o sistema, mostrando como alguns componentes foram distribuídos [8]. Os itens de hardware necessários para implantação do Asterisk são: HD (hard disk), por não ser muito utilizado ele requer em média 100Mb; sistemas operacionáis compatíveis com a instalação, podem ser FreeBSD, OpenBSD, Mac OS X, Sun Solaris e Microsoft Windows; memória e CPU. O Asterisk faz uso intensivo de CPU e memória por sua necessidade de acesso prioritário aos barramentos do processador e do sistema [5]: • Até 5 canais é recomendado no mínimo um computa- dor com 400Mhz x86 e 256 MB de memória RAM; • Para sistemas com até 10 canais é recomendado no mínimo um computador com 1 GHz x86 e 512 MB de RAM; • Para sistemas com até 15 canais é recomendado no mínimo um computador com 3 GHz x86 e 1 GB de RAM; • Para ambientes grandes com mais de 15 canais o hardware deve ser muito bem projetado (a depender com CPUs duplas e possivelmente múltiplos servido- res em arquitetura distribuída) para não haver falhas na comunicação. Os itens de software necessários para instalação do Asterisk são os pacotes. O principal que é o asterisk; os drivers da telefonia zaptel - caso esteja utilizando hardware digital ou analógico, ou o driver ztdummy como interface de temporiza- ção; a biblioteca libpri - para o uso de interfaces ISDN PRI (carrega voz e serviços de redes digitais [4]) ou o pacote zaptel. A figura 3 mostra a visão de implantação do Asterisk. O node do Asterisk representa sua estrutura interna com seus componentes e conectores. Já o node de Device encontramos os diversos dispositivos que se conectam com o Asterisk atra- vés dos conectores (FXS, Adaptador de telefonia Analógica, Ethernet e FXO). Através desta visão de implantação percebemos que a API de Canais do Asterisk é a interface núcleo da arquitetura do Asterisk, pois é a partir dela que as chamadas são recebidas ou enviadas, já que toda chamada é originada ou finalizada de um canal. IV. PLANO DE DISCAGEM DO ASTERISK O coração do Asterisk é o plano de discagem, configurado através do arquivo extension.conf onde os objetos são decla- rados e configurados com as ações que serão tomadas quando uma ligação for recebida. O plano de discagem é dividido em quatro partes: contextos, extensões, prioridades e aplicações [7]. A. Contextos O plano de discagem é divido em seções chamadas de contextos. Os contextos definem o escopo e permitem separar diferentes partes do plano de discagem. Eles são diretamente ligados aos canais e cada canal existe dentro de um contexto. Quando uma ligação chega no Asterisk por um canal ela é processada dentro de um contexto. As extensões definidas dentro de um contexto são iden- tificadas colocando o nome do contexto entre colchetes ([]), por exemplo: [entradas]. Todas as instruções colocadas depois da definição do contexto farão parte deste contexto até o próximo contexto ser declarado. Existem dois tipos de contexto principais: [globals] e [general]. No contexto [globals], definimos as variáveis globais e seus valores iniciais, que serão utilizados por outros contextos, já no [general] podemos ter informações de como o plano de discagem irá funcionar, quais as prioridades e o que fazer quando ocorrer uma falha.
  • 4.
    Figura 3. Visãode Implantação B. Extensões Dentro de cada contexto estão definidas uma ou mais extensões. Uma extensão é uma instrução executada pelo Asterisk, disparada por alguma ligação recebida ou número sendo discado no canal. As extensões especificam o que acontece com cada ligação, sendo responsável por determinar o fluxo de chamadas. Uma extensão pode ser configurada usando a palavra exten seguido do sinal de igual ou maior =>. Uma extensão é com- posta por três componentes: o nome a extensão, a prioridade, e uma aplicação (exten => 101,3,voicemail(SIP/101,20)). C. Prioridade A prioridade é definida por vários passos dentro de cada extensão. Cada prioridade é numerada de forma sequencial, começando em 1. Cada prioridade chama uma aplicação espe- cífica, como no exemplo a seguir: exten => 100,1,Answer( ) – atende a chamada exten => 100,2,Hangup( ) – desliga a chamada D. Aplicações Partes fundamentais do Asterisk, cada aplicação executa uma determinada ação sobre o canal atual, como tocar um som, receber tom de discagem, ou desligar a chamada. Nos exemplos de extensões e prioridades foram apresentadas duas aplicações: Answer() e Hangup(). V. CONCLUSÃO Com base nos estudos efetuados sobre o Asterisk perce- bemos que o mesmo é uma boa solução para montar PABXs com baixo custo, isso se deve ao fato de ser bastante flexível na criação de novas funcionalidades. Seus recursos avançados, facilidade de uso e menores custos são grandes atrativos tanto para consumidores quanto para empresas de telefonia. A arquitetura desenvolvida no Asterisk nos permitiu ana- lisar conceitos importantes, tais como: canais, CODECS, aplicações e protocolos. Composto por diversas tecnologias, sua arquitetura modularizada permite a inclusão de novos componentes sem a necessidade de modificar seu núcleo de processamento. Todo o funcionamento do Asterisk é baseado
  • 5.
    em seu planode discagem que define como ele irá gerenciar todas as ligações. Há mais de 10 anos no mercado, o Asterisk é bem projetado para o que ele faz e no decorrer desses anos ele alcançou um notável equilíbrio entre flexibilidade e complexidade. Esse equilíbrio foi obtido devido ao fato do Asterisk ser em código aberto e você ter a liberdade de poder customizá-lo conforme você desejar. Você pode fazer que ele distribua chamadas au- tomaticamente, configure músicas, promoções para chamadas na fila de espera, conferências, etc, podendo se tornar a base para um sistema completo de telefonia. Com as informações expostas concluímos que a arquitetura do Asterisk foi desenvolvida de forma a atender os requisitos funcionais já que as principais funções de chamadas são muito bem elaboradas. Devido a sua estrutura modularizada, com baixo acoplamento e alta coesão os requisitos não-funcionais estão sendo atendidos, garantindo assim um software de qua- lidade e com uma arquitetura robusta mas ao mesmo tempo permissível a novas funcionalidades. REFERÊNCIAS [1] KELLER, Alexandre. Asterisk na prática. 2a Ed. Editor: Rubens Prates. Novatec Editora Ltda. 2011. [2] PEREIRA, Alberto Rodrigo. Asterisk - O sistema de telefo- nia open source. Disponível em: http://www.vivaolinux.com.br/artigo/ Asterisk-O-sistema-de-telefonia-open-source. Acesso em: 25 mai. 2013. [3] BERALDI, Roger. Asterisk - O Futuro da Telefonia. Disponí- vel em: http://rogerberaldi.com/wp-content/uploads/2008/01/setac2006. pdf. Acesso em: 25 mai. 2013. [4] GONÇALVES, Flávio Eduardo de Andrade. Asterisk PBX Guia de Configuração. Disponível em: http://www.taioque.com.br/linux/Livro% 20Asterisk%20Curso%20Completo.pdf. Acesso em: 25 de mai. 2013. [5] SANTOS, Luiz Arthur F. VoIP Asterisk. Disponível em: http://www. slideshare.net/luiz_arthur/redes-voip-asterisk. Acesso em 25 mai. 2013. [6] HARFF, Simone. Requisitos e Proposta para Implantação de um Servidor VoIP. Trabalho de Conclusão de Curso (Especialista em Tecnologias, Gerência e Segurança de Redes de Computadores) – Universidade Federal do Rio Grande do Sul, 2008. Disponível em: http://www.lume.ufrgs.br/bitstream/handle/10183/15984/000695302. pdf?sequence=1. Acesso em: 26 mai. 2013. [7] ROSA, Richard Hobold. Ferramenta para desenvolvimento de Planos de Discagem no Asterisk. Trabalho final apresentado à disciplina de Projeto em Ciência da Computação II no curso de Ciências da Com- putação - Universidade Federal de Santa Catarina, 2007. Disponível em: https://projetos.inf.ufsc.br/arquivos_projetos/projeto_753/Projetos% 20II%20-20Richard%20Hobold.pdf. Acesso em: 27 mai. 2013. [8] AMBLER, SCOTT W. Modelagem Agil: Práticas eficazes para a programação eXtrema e o processo unificado, 2004. Disponível em: http://books.google.com.br/books?id=O9AZpUYGOGMC&printsec= frontcover&hl=pt-BR&source=gbs_ge_summary_r&cad=0#v= onepage&q&f=false. Acesso em: 31 mai. 2013.