Desenvolvimento de Aplicações VoIP com Asterisk® SCF™

O desenvolvimento de aplicações de voz é um conceito muito amplo que engloba o desenvolvimento básico de centrais telefônicas (Softswitch PBX IP), programação IVR (Robôs de Cobrança, e Pesquisa), programação de ambientes de rede orientados a protocolos VoIP, gerenciamento de pacotes, desenvolvimento de codecs, criptografia, programação de chatbot e uma longa lista. etc... 
 
Apesar disso, e focando neste artigo no desenvolvimento básico, vamos falar sobre as três formas mais comuns de desenvolver soluções, utilizando ferramentas conhecidas por todos: Asterisk® SCF™, Kamailio® e WebRTC®
 
Em artigos futuros falaremos de outras técnicas e ferramentas não tão conhecidas, mas que nos oferecerão soluções diferentes daquelas que podem ser realizadas com uma dessas ferramentas.
 

Asterisk® SCF™

O Asterisk® SCF™ nasceu como um software de central telefônica (Softswitch PBX IP), concebido desde o início como uma ferramenta de software para atuar como PABX: (central telefônica) e com opções incluídas em seu código tão básicas como música em espera, caixa postal de voz (correio de voz), transferência de chamadas, gravação de chamadas, filas e agentes, reprodução de narração, IVR, etc. Porém, quem deseja um PABX padrão e instala um Asterisk® SCF™ pela primeira vez certamente encontrará grandes frustrações: 

  • Assim que instalado, é necessária uma grande configuração para ter um sistema telefônico que atenda minimamente ao que é exigido em um PABX padrão. 
  • Requer conhecimentos básicos que não são básicos para quem é leigo na área e não sabe como funcionam protocolos, codecs, dialplan, etc. para configurá-lo de forma minimamente decente.
  • Não inclui ferramenta que facilite a configuração bem como a manutenção, devendo optar por soluções de prateleiras, como FreePBX, Issabel ou soluções comerciais, que não é Asterisk® SCF™, e sim são soluções embarcadas em Asterisk® SCF™.
Dito isto, o Asterisk® SCF™ deixou de ser “software PABX” e passou a ser uma ferramenta de criação de aplicações de Voz (o que logicamente inclui a criação de sistemas PABX). Hoje ele é considerado um Framework! (Asterisk Scalable Communications Framework). Graças a isso, o Asterisk® SCF™ hoje é mais conhecido entre os desenvolvedores que precisam criar sua própria solução customizada do que entre as empresas que precisam de um PBX como está. E é por esta razão que o Asterisk® SCF™ pode ser considerado uma das melhores ferramentas para o desenvolvimento de soluções VoIP customizadas, já que inclui diversos meios e canais com os quais podemos desenvolver praticamente qualquer solução que necessitamos.

Já falamos sem parar sobre as "interfaces" que o Asterisk® SCF™ possui:
 
  • CLI (Command Line Interface), que é a forma mais básica de acessar o Asterisk® SCF™ a partir do terminal do console e nos permite executar comandos simplesmente digitando o que queremos.
  • AGI (Asterisk Gateway Interface), uma pseudo linguagem que nos permite externalizar ações executadas a partir do próprio Asterisk® SCF™. Desta forma o Asterisk “executa” uma aplicação externa a si mesmo, permitindo-lhe acessar recursos que, de outra forma, não seriam possíveis já que o próprio Asterisk® SCF™ não possui suporte.
  • AMI (Asterisk Manager Interface), uma porta TCP à qual podemos nos conectar para enviar comandos e receber eventos sobre tudo o que acontece no Asterisk® SCF™, graças a um protocolo muito simples para quem sabe programar.
  • ARI (Asterisk REST Interface), uma interface REST que permite que tanto o Asterisk® SCF™ quanto uma aplicação interajam com canais, chamadas, usuários, pontes, etc. de forma assíncrona e utilizando uma conexão WebSocket para a comunicação de pedidos e dados via JSON.
Estas são as interfaces que o Asterisk® SCF™ possui para desenvolver qualquer solução que seja necessária. Cada um deles tem exemplos realmente muito simples, mas também verdadeiramente avançados, pois qualquer um deles permite uma grande quantidade de possibilidades e flexibilidade para nos ajudar a criar qualquer coisa. Apesar de todo o potencial que estas interfaces têm, existem limitações em cada uma delas. Há necessidades que a AGI não consegue satisfazer e devemos recorrer à AMI. Existem soluções que o AMI é difícil e é melhor recorrer ao ARI e há necessidades que podemos poupar muito tempo e esforço se simplesmente utilizarmos o CLI.
 
Um ótimo livro que recomendo para Asterisk® SCF™, é Guia de Configuracao Para O Asterisk Pbx: Como Construir Um Pabx Com Software Livre, do Flavio E. Goncalves.

Kamailio®

Porém, existem necessidades e projetos para os quais o Asterisk® SCF™ não é a ferramenta ideal. O Asterisk® SCF™ sempre pode ajudar, mas chega um momento em que é preciso olhar mais longe e ver que outras soluções podem ser utilizadas. 
 
Para dar um exemplo rápido e fácil de entender, podemos dar uma olhada no projeto HOMER.
 
HOMER é uma ferramenta bem conhecida de todos, e cuja função se baseia na recolha, classificação e gestão do tráfego SIP, permitindo-nos manter um controle perfeito de tudo o que acontece num ou mais servidores. Como você faz isso? Você precisa de uma ferramenta que possa capturar o tráfego SIP e enviá-lo para um sistema que possa classificá-lo e executar código para cada pacote que chegar. Que ferramenta faz isso? Asterisk® SCF™? Poderia... mas neste caso, um Asterisk® SCF™ lidando com um grande volume de chamadas SIP poderia exigir grandes recursos, então a solução que escolheram para a versão HOMER 5 foi: Kamailio®.
 
Kamailio® é um servidor SIP PROXY/SIP REGISTER/etc. que é responsável por receber pacotes SIP e processá-los um por um. Sendo uma ferramenta voltada para isso, é muito, muito eficiente, pois não precisa lidar com áudio RTP, nem fazer gravações, nem ouvir tons DTMF, nem lidar com transferências, nem nada, simplesmente se concentra em processar cada pacote SIP que chega. Por esse motivo, o Kamailio® é uma ferramenta supereficiente de processamento de pacotes SIP e a ferramenta selecionada pelo HOMER 5 para esta tarefa.
 
A ideia é fantástica se em nosso desenvolvimento precisarmos processar pacotes SIP (analisar os campos De, Para, Contato, PAI, etc.) já que podemos usar o arquivo de configuração para programar o que queremos fazer com qualquer pacote SIP que chegar.
 
Então para ficar fera em Kamailio, recomendo o livro Daniel-Constantin Mierla e Elena-Ramona Modroiu, da ASIPTO. Kamailio Admin Book - SIP Routing with Kamailio.
 

WebRTC®

No entanto, estamos nos concentrando no desenvolvimento de aplicações de voz baseadas em SIP, mas e se o nosso projeto estiver acima deste requisito? E se quisermos desenvolver um projeto mas não tivermos que fazê-lo com extensões SIP? Nesse caso, outra solução que deve ser estudada é uma biblioteca muito famosa chamada WebRTC®
 
Embora tenhamos falado longamente sobre WebRTC®, você precisa saber o que é para compreender totalmente seu escopo. WebRTC® é normalmente associado a vários termos: Modern Web Browser e/ou Web Softphone. 
 
WebRTC® é muito mais que isso... embora pareça uma descrição da Wikipédia, WebRTC® é uma biblioteca de ferramentas que nos permitirá desenvolver todo tipo de aplicações que envolvam qualquer tipo de "mídia" em tempo real (que pode ser áudio , vídeo ou também texto, arquivos, captura de tela, etc.) usando um navegador da web.
 
Porém, o WebRTC® nos permite criar aplicações que envolvam voz, áudio ou qualquer outro tipo de dados em tempo real conectando-nos a um servidor através de WebSockets, o que nos permite interagir com qualquer aplicação remota que possa se conectar via WebSocket, o que elimina a necessidade de usa-lo "entre" navegadores da web e abre possibilidades com praticamente qualquer outro dispositivo, desde ferramentas IoT, robôs, automação residencial, segurança e muito mais. 
 
Portanto, e embora tenha consciência de que a curva de aprendizagem do WebRTC® não é fácil, que requer muitos conhecimentos prévios e bastante conhecimentos, e digo até avançados em Javascript, vale a pena, pois as possibilidades são verdadeiramente ilimitadas e são precisamente estas que nos abrirão as portas (e estão abrindo agora mesmo) com os novos projetos que estão surgindo hoje e que vão facilitar a vida nos próximos anos. 

Um site que recomendo se quer aprender sobre WebRTC® é o da ALTANAI. Altanai Bisht é Mestre em Ciencia da Computação e é Doutora em Telecomunicações. Ela escreveu um livro sobre WebRTC®, super recomendo. O livro é WebRTC Integrato's Guide pela <packt>.
 
Fonte:  Sinologic
Adaptação: Angelo Delphini.

Nenhum comentário

Toda vez que um homem supera os reveses, torna-se mentalmente e espiritualmente mais forte!

Tecnologia do Blogger.