VoIP com FreeSWITCH
REDES
Fale com
tranquilidade
O FreeSWITCH é uma plataforma de telefonia poderosa e
versátil que pode ir de um softphone até um PBX.
por Michael S. Collins
P
rojetos de código aberto vêm
diminuindo a barreira para que
entusiastas e empresas entrem
na era da telefonia VoIP. O Asterisk
PBX, por exemplo, é uma alternativa de alta funcionalidade e baixo
orçamento que alvoroçou o mundo
de sistemas de telefonia empresarial
[1]. Talvez o software mais inquietante de todos, no entanto, venha na
forma de uma biblioteca softswitch
escalonável chamada FreeSwitch.
O site do FreeSwitch [2] diz que ele
pode ser usado como um “mecanismo
de switching simples, um PBX, um
gateway de mídia ou um servidor de
mídia para hospedar aplicativos IVR”.
Com essa descrição versátil, o FreeSwitch apareceu em ambientes de
produção como um switch de telecomunicações, em vários cenários de
negócios como um PBX, como um
softphone para usuários de laptop e
até mesmo como um mecanismo
de roteamento de voz para o projeto OpenSim.
Além disso, é possível empregar o
FreeSwitch como um aplicativo ou
usá-lo como uma biblioteca (libfreeswitch) que pode ser embarcada em
software de terceiros. Essa dupla identidade é semelhante à relação entre
cURL (aplicativo) e libcurl (biblioteca).
O FreeSwitch tem sido utilizado
em alguns cenários exóticos; no entanto, os novatos nos aplicativos de
telefonia irão se dar bem com o FreeSwitch em sua configuração padrão
como um PABX SOHO. Embora os
arquivos de configuração e ajustes do
FreeSwitch pareçam complicados,
em pouco tempo, será possível apreciar o poder e a flexibilidade dessa
versátil ferramenta de telefonia.
Instalando
o FreeSwitch
Figura 1Tela de configuração da
conta SIP no X-Lite.
60
No momento, a versão estável corrente do FreeSwitch é a 1.0.4, que
pode ser baixada do site do projeto
[3] ou do repositório Subversion.
Diferentemente de outros projetos, o
SVN trunk é extremamente estável,
portanto, é aconselhavel usar o trunk
mais recente. De qualquer modo, os
desenvolvedores do FreeSWITCH
facilitaram a atualização para o último
trunk, mesmo que a última versão
estável esteja instalada.
Existem alguns binários pré-compilados; porém, recomendo a compilação com o código fonte.
Primeiro, descompacte e instale
a fonte. Neste exemplo, fiz o download em /usr/src e instalei a partir
dos comandos:
tar zxvf freeswitch 1.0.4.tar.gz
cd freeswitch 1.0.4
./configure
make install
Recomendo usar os arquivos de som:
make cd-sounds-install
make cd-moh-install
O FreeSWITCH utiliza arquivos
de som com taxas de sampling de
8, 16, 32 e 48kHz. Quase nenhum
sistema de telefonia – de código
aberto ou proprietário – faz o que o
FreeSWITCH faz com chamadas
com várias taxas de sampling.
A instalação leva algum tempo,
por isso encadeie os comandos com
o operador &&.
Quando o processo terminar,
haverá uma instalação básica do
FreeSWITCH. É bom que os dois
http://www.linuxmagazine.com.br
FreeSWITCH | REDES
principais arquivos executáveis do
FreeSWITCH estejam em bin, por
isso usei symlinks:
ln ‑s
/usr/local/freeswitch/bin/
freeswitch
/usr/local/bin/freeswitch
ln ‑s /usr/local/freeswitch/bin
/fs_cli /usr/local/bin/fs_cli
4;Logitech USB Headset;1;0;
O i e o o estão próximos aos dispositivos de entrada e de saída selecionados. Para alterar o dispositivo
de entrada, utilize o comando pa
indev com o número do dispositivo,
pa indev #x
Para iniciar o aplicativo, digite
freeswitch, e use o utilitário fs_cli
para acessar a linha de comando de
qualquer servidor FreeSWITCH aos
quais tenha acesso, mesmo que esteja
em outro servidor. Primeiramente,
haverá muita informação de debug/
log, mas não se preocupe com erros
e avisos nesse momento.
onde x é o número do dispositivo
de entrada. O dispositivo de saída
pode ser alterado com o comando
pa outdev. Na minha configuração,
usarei o dispositivo 4 como saída e
o 5 como entrada. Se houver os arquivos MOH (music on hold) instalados, esse comando chamará o
ramal MOH e enviará o MOH ao
dispositivo de saída PortAudio:
Seu novo softswitch
pa call 9999
O primeiro comando básico é version,
que mostrará a versão do FreeSWITCH que está sendo executada, incluindo a revisão SVN. O comando
status mostra informações sobre sua
instância do FreeSWITCH incluindo o tempo de execução e o número
de sessões ativas no momento. Outro
comando básico é o help, para ajuda.
Para sair do FreeSWITCH, digite
fsctl shutdown ou use o comando mais
breve ... (três pontos). Se houver
uma placa de som ou headsets em
seu sistema, tente o seguinte:
load mod_portaudio
Após algumas linhas de debug,
será exibida a mensagem +OK quando
o módulo for carregado. Agora, liste
os dispositivos PortAudio disponíveis
em seu sistema:
pa devlist
API CALL [pa(devlist)] output:
0;Built‑in Microphone;2;0;i
1;Built‑in Input;2;0;
2;Built‑in Output;0;2;r,o
3;Logitech USB Headset;0;2;
Linux Magazine #70 | Setembro de 2010
Se uma música for ouvida, a chamada foi bem sucedida. Caso contrário certifique-se de que os arquivos
MOH estão corretamente instalados.
Desligue com o comando pa hangup.
Para se certificar de que os dispositivos de entrada e de saída estão
funcionando, faça o teste:
pa call 9996
Agora, quando falar no dispositivo de entrada, sua voz ecoará no
dispositivo de saída. O comando pa
hangup terminará a ligação.
Como é possível ver, o FreeSWITCH e o PortAudio podem ser usados
para criar um softphone simples. Dessa
maneira, será possível usar qualquer
codec suportado por sua instalação – e
há codecs de alta qualidade disponíveis – sem a necessidade de instalação
de um cliente softphone.
o fone baseado em software é apropriadamente chamado de softphone.
Vários tipos de hard phones estão disponíveis. Os softphones têm versões
proprietárias e FLOSS. Uma versão
gratuita popular – mas sem código
aberto – é o X-Lite da CounterPath
[4], que está disponível para o Linux,
MacOS e Windows. Mesmo que seu
servidor FreeSWITCH esteja sendo
executado no Linux, seus softphones
podem funcionar em qualquer sistema operacional, contanto que sejam
compatíveis com o SIP.
Para começar, baixe o X-Lite no
seu sistema e faça a instalação padrão (a instalação do softphone no
mesmo sistema que executa o FreeSWITCH não é recomendada; no
entanto, em muitos casos, ela funcionará para testes).
Agora, inicie o X-Lite e abra o
menu de configuração de conta SIP
clicando no botão Show Menu (esse
botão é a pequena flecha no topo do
fone, à esquerda).
Apenas uma conta SIP está disponível no X-Lite, portanto, clique
nela e depois no botão Properties.
Como mostra a figura 1, preencha
os campos e use 1234 como senha
para o ramal 1000.
Então limpe o campo Dialing
plan, pois ele não é necessário com o
Conectar um fone SIP
A maneira mais comum de utilização
do FreeSWITCH é com um fone
SIP. O aparelho físico é normalmente chamado de hard phone, já
Figura 2Cliente X-Lite registrado.
61
REDES | FreeSWITCH
eSWITCH sem a necessidade de
passar por um grande arquivo.
Tabela 1: Destaques do Dialplan
Ramais
Função
1000-1019
2000-2002
30xx
31xx
32xx
33xx
4000
5000
5900
5901
9888
9992
9996
9999
Ramais Padrão
Amostra de Grupos de Discagem
Conferências de Banda Estreita (8kHz)
Conferências de Banda Larga (16kHz)
Conferências de Banda Ultra-Larga (32kHz)
Conferências com Qualidade de CD (48kHz)
Recuperação de Correio de Voz
Amostra de IVR
Call Park
Recuperação de Call Park
Conferência FreeSWITCH
Aplicativo de Informação
Teste de Eco
Música de Espera (MOH)|
FreeSWITCH. Agora, clique em OK,
depois em Close e o fone tentará o
registro. A figura 2 mostra um registro
bem sucedido. Para fazer uma chamada de teste, digite 9999 e clique no
botão verde para discar. Em alguns
instantes uma música de espera será
ouvida. Para fechar o FreeSWITCH,
use o comando fsctl shutdown.
Destaques da
configuração
A configuração padrão do FreeSWITCH possui muitos recursos. A tabela 1 mostra destaques Dialplan e
a tabela 2 mostra os arquivos e subdiretórios mais importantes da configuração FreeSWITCH.
A instalação padrão irá criar um
diretório chamado /usr/local/freeswitch/conf, o qual chamarei de
$CONF. Todos os arquivos de configuração são em formato XML e
podem incluir outros arquivos XML
adicionalmente.
O topo dessa árvore XML é $CONF/
freeswitch.xml, que contém vários
arquivos XML que, por sua vez,
contêm mais arquivos XML. Essa
organização permite que se façam
mudanças à configuração do Fre-
FreeSWITCH
como um Daemon
Para iniciar o FreeSWITCH como
um daemon, use o argumento de
linha de comando -nc:
freeswitch -nc
O FreeSWITCH dirá que está
sendo executado em segundo plano e dará o ID do processo (PID).
Para parar o FreeSWITCH, basta
digitar freeswitch -stop no prompt
do Linux. Por enquanto, deixe o
FreeSWITCH sendo executado e
use o comando fs_cli para conectar:
aparecerá uma saudação com uma
breve mensagem de boas vindas e
um prompt em linha de comando
e, talvez, alguma mensagem de
debug na tela. Para desabilitar o
debug, digite:
/log info
Isso irá restringir as mensagens
de log ao nível de INFO e abaixo e
evitará uma enxurrada de informações de debug.
Todos os comandos do programa fs_cli devem iniciar com uma
barra invertida, por isso, digite /help
Tabela 2: Arquivos de configuração importantes
62
Subdiretório/Arquivo
Descrição
$CONF/vars.xml
Define um número de variáveis de sistema customizáveis,
como senhas padrão e lista de preferência de codecs
$CONF/dialplan/default.xml
A maior parte do Dialplan padrão é configurada aqui
$CONF/directory/default/*.xml
Usuários individuais são definidos aqui, e.g., 1000.xml
$CONF/sip_profiles/internal.xml
Um “perfil SIP”, ou UA SIP para servir uma
porta IP (normalmente a porta 5060)
$CONF/sip_profiles/external.xml |
Outro UA SIP que lida com registros de saída
para provedores SIP (porta 5080)
$CONF/autoload_configs/modules.conf.xml |
Módulos carregados automaticamente na
inicialização do FreeSWITCH
http://www.linuxmagazine.com.br
FreeSWITCH | REDES
para ver uma lista de comandos disponíveis. Tudo o mais digitado no
prompt fs_cli será enviado para o
servidor FreeSWITCH, com uma
exceção: Os (...) não fecharão o
FreeSWITCH no fs_cli; isso apenas encerrará o programa. Em vez
de fechar o FreeSWITCH a partir
do fs_cli, saia do programa e então
digite o comando freeswitch stop no
prompt do Linux.
Mantenha o FreeSWITCH em segundo plano enquanto configura um
novo usuário e modifica o Dialplan.
“corresponde a exatamente 4 dígitos
– dos quais os dois primeiros são 10,
o seguinte é 0 ou 1 e o último é qualquer dígito entre 0 e 9 – e armazena o
valor correspondente na variável $1”.
Simplificando, corresponde a qualquer coisa entre 1000-1019, inclusive.
Para adicionar o novo usuário
Katherine ao ramal 1500, utilize o
caracter pipe (|), que é um OR lógico:
Adicionar
um usuário SIP
Agora, inicie o programa fs_cli
e digite reloadxml ou aperte F6. O
novo ramal está pronto para o uso.
O melhor meio de testar isso é
configurar um softphone (ou um
aparelho padrão caso haja algum)
como 1500 com o FreeSWITCH.
No seu cliente X-Lite, abra as configurações de conta SIP e altere o
nome de exibição para Katherine e
os campos User name e Authorization
user name para 1500 antes de salvar as
alterações. O cliente exibirá registering e depois Ready. Agora, é possível fazer chamadas de seu próprio
O FreeSWITCH vem com 20 usuários pré-determinados, mas se quiser
adicionar mais, apenas dois passos
modificam a configuração:
Adicione uma entrada de usuário em $CONF/directory/default/
Modifique o Dialplan para permitir que o novo usuário receba
chamadas
Para adicionar um novo usuário
chamado Katherine com o ramal
1500, vá para $CONF/directory/default
e faça uma cópia do arquivo 1000.xml:
cp 1000.xml 1500.xml
Em um editor, abra o 1500.xml,
substitua 1000 por 1500 e altere o
effective_caller_id_name para Katherine. Seu novo arquivo deverá ficar
parecido com o da listagem 1.
Agora, abra $CONF/dialplan/default.
xml e localize a entrada do Dialplan
(ou ramal) chamada Local_Extension.
Na linha:
<condition field="destination_
number" expression="^(10[01]
[0-9])$">
quem conhece expressões regulares
irá saber que ^(10[01][0-9])$ significa
Linux Magazine #70 | Setembro de 2010
<condition field="destination_
number" expression="^(10[01]
[0‑9]|1500)$">
ramal. Caso haja um segundo telefone, registre-o como 1000 e usu-o
para chamar 1500.
Fora do switch Local
Uma vantagem do VoIP são as ligações via internet gratuitas ou muito
baratas. O FreeSWITCH pode rotear ligações de e para a internet,
mesmo por trás de um dispositivo
NAT. Os dispositivos NAT causam
vários problemas para ligações SIP;
no entanto, o FreeSWITCH é ótimo
para contornar essas questões.
Em vários casos, a configuração
padrão funcionará sem qualquer mudança. Um simples teste é chamar o
servidor de conferência pública FreeSWITCH. A URI SIP desse servidor
é sip:[email protected],
e o Dialplan padrão irá conectar seu
fone se chamar 9888.
Se a chamada for completada, haverá uma voz TTS (text-to-speach)
anunciando seu nome ou número
de identificação. Caso você seja a
única pessoa na conferência, haverá
uma gravação que o informará disso.
Para chamar a conferência com
o PortAudio, digite:
Listagem 1: Novo usuário 1500.xml
01 <include>
02 <user id="1500" mailbox="1500">
03
<params>
04
<param name="password" value="$${default_password}"/>
05
<param name="vm‐password" value="1500"/>
06
</params>
07
<variables>
08
<variable name="toll_allow" value="domestic,international,
local"/>
09
<variable name="accountcode" value="1500"/>
10
<variable name="user_context" value="default"/>
11
<variable name="effective_caller_id_name"
value="Katherine"/>
12
<variable name="effective_caller_id_number" value="1500"/>
13
<variable name="outbound_caller_id_name"
value="$${outbound_caller_name}"/>
14
<variable name="outbound_caller_id_number"
value="$${outbound_caller_id}"/>
15
<variable name="callgroup" value="techsupport"/>
16
</variables>
17 </user>
18 </include>
63
REDES | FreeSWITCH
Listagem 2: Configuração de um gateway para uma conta SIP
01 <include>
02 <gateway name="iptel"> <!‐‐ used in dialstrings ‐‐>
03
<param name="username" value="YOUR_USERNAME_HERE"/>
04
<param name="realm" value="iptel.org"/>
05
<param name="password" value="YOUR_PASSWORD_HERE"/>
06
<param name="proxy" value="sip.iptel.org"/>
07 </gateway>
08 </include>
pa call
sip:[email protected]
sofia profile external
restart reloadxml
Vários provedores oferecem serviços de conexão que dão acesso à
PSTN (Public Switched Telephone
Network) ou simples contas SIP. O
FreeSWITCH usa o conceito de
“gateways” para estabelecer conexões com esses provedores. Os gateways são usados para registros no
provedor. Caso já possua um provedor SIP, use as configurações desse
provedor. O wiki do FreeSWITCH
oferece exemplos de configurações
para alguns provedores [5]. Neste
exemplo, mostrarei como configurar um gateway para iptel.org, que
oferece contas SIP gratuitas.
Primeiramente, crie uma conta no site iptel.org [6] e anote seu
nome de usuário e senha. Depois,
crie um novo arquivo em $CONF/
sip_profiles/external. Certifiquese de incluir o nome do usuário e
a senha nos campos apropriados. O
arquivo deve ficar parecido com o
da listagem 2.
Salve o arquivo e, no prompt do
FreeSWITCH, digite o comando:
“Sofia” é o nome da biblioteca
SIP [7] usada pelo FreeSWITCH
e é também o nome do comando
para executar funções relativas ao
SIP (digite sofia para ver a sintaxe).
O comando acima instrui o FreeSWITCH a reiniciar o perfil external após carregar os dados XML.O
comando reloadxml é opcional; porém, coso tenha feito mudanças nos
dados XML (criando ou editando
um arquivo), será preciso que essas
mudanças sejam carregadas na reinicialização do perfil. Para verificar
se seu sistema está registrado no iptel.
org, digite o comando:
sofia status
Caso seu registro esteja correto,
surgirá uma linha como a seguinte:
iptel gateway sip:myusername@sip.
iptel.org REGED
REGED significa que o gateway está
registrado no provedor. Caso apare-
Listagem 3: 00_inbound_iptel.xml
01 <include>
02 <extension name="iptel‐inbound">
03
<condition field="destination_number" expression="^(YOUR_
IPTEL.ORG_USERNAME)$">
04
<action application="set" data="domain_name=$${domain}"/>
05
<action application="transfer" data="9999 XML default"/>
06
</condition>
07 </extension>
08 </include>
64
ça FAIL_WAIT, provavelmente há um
problema de configuração.
O último passo para receber
chamadas é a permissão no Dialplan. A configuração padrão possui
um contexto público que trata as
chamadas recebidas pela internet
como confiáveis.
Primeiro, é preciso permitir chamadas ao seu novo usuário iptel.
org e depois especificar onde rotear
essas chamadas. Para isso, crie um
novo arquivo chamado $CONF/dialplan/public/00_inbound_iptel.xml
(ou faça uma cópia do arquivo de
exemplo chamado 00_inbound_did.
xml). Ele deve se parecer com o da
listagem 3.
Especifique seu nome de usuário
iptel.org na expressão regular. Seu
nome de usuário é o destination number (Destination numbers – números
de destino – não se restringem a caracteres numéricos).
A chamada é roteada para o ramal
especificado nos parâmetros informados ao aplicativo de transferência.
No meu caso, roteei para o ramal
MOH para o teste. É possível rotear
para seu fone SIP. Caso esteja registrado como 1000, então o destino
da transferência é 1000 XML default.
Salve o arquivo e vá para o prompt
do FreeSWITCH e pressione F6 (ou
digite reloadxml).
Para receber uma chamada na sua
nova conta, será preciso que alguém
faça uma ligação SIP para a sua nova
URI SIP iptel.org. Em resumo, é
possível testar com PortAudio. No
prompt do FreeSWITCH, digite:
pa call sip:myusername@sip.
iptel.org
Se a chamada for bem sucedida,
chegará ao ramal destinado.
Codecs de qualidade
Chamadas telefônicas tradicionais
possuem uma qualidade de som
marginal e os celulares são piores.
http://www.linuxmagazine.com.br
FreeSWITCH | REDES
O FreeSWITCH oferece uma ótima qualidade de voz nas chamadas
com codecs gratuitos e de código
aberto. O codec de código aberto
CELT [8] possui uma ótima qualidade sem dissipação.
O FreeSWITCH traz também os
codecs Siren [9] da Polycom. Esses
codecs de excelente qualidade não
têm o código aberto, mas estão livres
de royalties. A configuração padrão
utiliza os codecs Siren.
Um fato que é importante ressaltar é que codecs de alta qualidade
podem expor as limitações de headsets. Os equipamentos mais recentes
e os que estão na lista “certificada
do Skype” funcionarão melhor com
bons codecs. Pessoalmente, uso o
headset Logitech Clear Chat Pro
USB sem grandes problemas.
Para o teste, recomendo uma ligação a um amigo que também tenha
o FreeSWITCH instalado.
Para iniciar, faça uma chamada
PSTN ou com um celular, desligue
e, imediatamente, faça outra ligação
com um codec de alta qualidade.
A utilização do PortAudio facilita o
teste. Primeiramente, edite $CONF/
autoload_configs/portaudio.xml. Localize a linha <param name=”samplerate” value=”8000”/>, altere o valor
para 48000 e salve o arquivo.
No prompt do FreeSWITCH digite os seguintes comandos:
SIP – Protocolo de Inicio de Sessão
SIP, ou Session Initiation Protocol é um protocolo baseado em TCP/IP utilizado para sessões de multimídia através da Internet. O protocolo baseado em texto é similar ao HTTP, com requisições e respostas, campos de
cabeçalho, regras de codificação e códigos de status. Além do VoIP, o SIP
é usado em mensagens instantâneas, jogos online e distribuição de streaming multimídia.
de conferência FreeSWITCH com
o PSTN com +1-213-799-1400 e comparar a diferença entre codecs VoIP
de alta qualidade e e a baixa qualidade do PSTN.
Próximo passo
Esta breve introdução ao FreeSWITCH mostra apenas um pouco do
que esse software de código aberto
pode fazer. Uma maneira de usar
o FreeSWITCH na prática é apre-
sentada por Rob Smart, da IBM,
que escreveu um tutorial chamado
“Home VOIP system using FreeSwitch and a Linksys 3102 voice gateway”
[10] mostrando como configurar o
FreeSWITCH como um servidor
de comunicação no Reino Unido.
Uma comunidade crescente e vibrante oferece suporte aos novatos
e veteranos, portanto, junte-se a ela
e continue aprendendo as grandes
possibilidades do VoIP. n
Mais informações
[1]Comparação entre o FreeSWITCH e o Asterisk:
http://www.freeswitch.org/node/117
[2]Site do FreeSWITCH: http://www.freeswitch.org
[3]Download do FreeSWITCH: http://files.freeswitch.org
[4]X-Lite: http://www.counterpath.com/x‑lite.html
[5]FreeSWITCH wiki:
http://wiki.freeswitch.org/wiki/SIP_Provider_Examples
[6]Site iptel.org: http://www.iptel.org
[7]Biblioteca Sofia-SIP: http://sofia‑sip.sourceforge.net
reloadxml
reload mod_portaudio
Agora, ligue para seu amigo ou
faça uma conferência FreeSWITCH:
pa call 9888
A qualidade do áudio certamente
será bem melhor, especialmente se
sua conexão com a internet for rápida. As conferências FreeSWITCH
podem misturar chamadas com quaisquer codecs e taxas de sampling. De
fato, é possível fazer uma chamada
Linux Magazine #70 | Setembro de 2010
[8]CELT codec: http://www.celt‑codec.org
[9]Siren codecs: http://www.polycom.com/company/about_us/
technology/siren_g7221/ index.html
[10]Tutorial FreeSWITCH:
http://robsmart.co.uk/2009/06/02/freeswitch_linksys3102
Gostou do artigo?
Queremos ouvir sua opinião. Fale conosco em
[email protected]
Este artigo no nosso site:
http://lnm.com.br/article/3854
65
Download

Fale com tranquilidade