1) O documento descreve a arquitetura do software open source Asterisk, que permite tratar chamadas telefônicas de forma personalizada implementando funções de uma central telefônica.
2) A arquitetura modular do Asterisk é composta por canais, CODECs, aplicações e protocolos. O plano de discagem define as ações tomadas quando uma chamada é recebida e é considerado o cérebro do Asterisk.
3) O Asterisk tornou-se popular no mercado devido à sua grande flexibilidade para criar novos serviços de acordo com as necess
1. 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:
2. • 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.
3. • 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.
4. 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
5. 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.