O FreeSWITCH é um soft-switch modular, escrito em C e licenciado sob a Mozilla Public License. Ele surge como uma alternativa viável para a maioria das necessidades em aplicações de voz, desde roteamento de sinalização SIP e mídia RTP ou SRTP, até URAs e fácil integração com aplicações externas.
Apesar das versões preliminares serem utilizadas em alguns ambientes de produção, com vazão de 300 chamadas por segundo, poderemos utilizá-lo com mais segunraça a partir do dia 26 de maio, quando será lançada sua versão 1.0.
Já existem alguns bindings da API do FreeSWITCH para algumas linguagens, como: Python, Java, Perl, Lua, Javascript; além de alguns frameworks que se conectam ao Event Socket e exportam funções para o disparo e controle de chamadas. Em ambos os casos, a abstração esperada é alcançada.
A arquitetura do FreeSWITCH foi cuidadosamente montada para evitar deadlocks, race conditions e todos os outros problemas enfrentados por usuários e programadores do Asterisk. Outra diferença para o Asterisk, é que o núcleo (core) do FreeSWITCH é consistente e não depende de módulos externos. O núcleo não deveria, nunca, depender de módulos externos, porém o do Asterisk depende.
Tudo isso se traduz em aprender com os erros e escrever software que trabalhe conosco, não contra nós. O core é orientado por uma máquina de estados, que controla o estado de cada nova sessão (ou chamada) criada. A cada transição de estado, um evento é gerado. Qualquer módulo pode registrar event handlers que são chamados quando determinados eventos são gerados. Inclusive, é possível que existam diversos event handlers pra um determinado evento. A propagação do mesmo se dará até que um dos event handlers chamados retorne SWITCH_STATUS_FALSE.
Toda essa coerência torna desnecessário os hacks para alcançar os objetivos de um soft-switch moderno, além de tornar o FreeSWITCH uma plataforma de desenvolvimento – mas não pára por aí.
Por padrão, o software lê suas configurações a partir de arquivos XML, mas qualquer módulo poderia ser o responsável por requisitar e interpretar as configurações. Uma estratégia interessante, é utilizar o mod_xml_curl, que já faz parte do FreeSWITCH, para solicitar todas as configurações via HTTP, ao invés de ler arquivos XML do disco.
Assim, poderia existir um servidor de configuração, que rodaria um webserver, um banco de dados e alguma linguagem de scripting ou um CGI. Poderiam existir 10 servidores com FreeSWITCH rodando, que executariam GETs no servidor de configuração, que entregaria a opção desejada.
Arquitetura simples, com configuração centralizada e desempenho escalonável: se uma expansão for necessária, é só adicionar mais um servidor com FreeSWITCH, igual aos outros já existentes. As configurações que podem ser puxadas remotamente não se limitam à adição e exclusão de usuários, mas a toda e qualquer opção configurável do software. Isso inclui o dialplan, que é flexível o suficiente para tomar decisões não apenas baseado em extension matching, mas também em endereços de rede, variáveis do canal, dados do usuário, etc., o que torna o esquema todo muito flexível.
Suporte para MFC/R2, amplamente utilizado no Brasil, está sendo escrito. Desta forma, poderemos utilizar os benefícios de uma plataforma VoIP livre e confiável.
o freeswitch é melhor que o asterisk? Utilizaria um asterisk em um callcenter com 300 ramais e 180 linhas digitais E1?
Configurei a minha conta do VoipCheap no FreeSwitch em “/usr/local/freeswitch/conf/sip_profiles/external/voipcheap.xml” com a seguinte configuração:
Com o Sotphone X-Lite consigo ligar para os numeros dos ramais internos do FreeSwitch mas não estou a conseguir ligar para um numero qualquer da rede publica PSTN !!??
Esta é a configuração do ficheiro “/usr/local/freeswitch/conf/sip_profiles/external/voipcheap.xml” porque a mesma não apareceu em cima: