VoIP com FreeSWITCH Fale com REDES · PDF filebela mudanças à...

6

Click here to load reader

Transcript of VoIP com FreeSWITCH Fale com REDES · PDF filebela mudanças à...

Page 1: VoIP com FreeSWITCH Fale com REDES · PDF filebela mudanças à configuração do Fre1 mostra destaques Dialplan e a tabela 2 mostra os arquivos e sub-diretórios mais importantes

60 http://www.linuxmagazine.com.br

RE

DE

S

VoIP com FreeSWITCH

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

Projetos 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 alterna-tiva de alta funcionalidade e baixo orçamento que alvoroçou o mundo de sistemas de telefonia empresarial [1]. Talvez o software mais inquie-tante 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 Fre-eSwitch apareceu em ambientes de

produção como um switch de teleco-municaçõ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 proje-to OpenSim.

Além disso, é possível empregar o FreeSwitch como um aplicativo ou usá-lo como uma biblioteca (libfre-eswitch) que pode ser embarcada em software de terceiros. Essa dupla iden-tidade é semelhante à relação entre cURL (aplicativo) e libcurl (biblioteca).

O FreeSwitch tem sido utilizado em alguns cenários exóticos; no en-tanto, os novatos nos aplicativos de telefonia irão se dar bem com o Fre-eSwitch 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 apre-ciar o poder e a flexibilidade dessa versátil ferramenta de telefonia.

Instalando o FreeSwitchNo momento, a versão estável cor-rente 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é-com-pilados; porém, recomendo a com-pilação com o código fonte.

Primeiro, descompacte e instale a fonte. Neste exemplo, fiz o down-load em /usr/src e instalei a partir dos comandos:

tar zxvf freeswitch 1.0.4.tar.gzcd freeswitch 1.0.4./configuremake install

Recomendo usar os arquivos de som:

make cd-sounds-installmake 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

Figura 1 Tela de configuração da conta SIP no X-Lite.

Page 2: VoIP com FreeSWITCH Fale com REDES · PDF filebela mudanças à configuração do Fre1 mostra destaques Dialplan e a tabela 2 mostra os arquivos e sub-diretórios mais importantes

61

| REDESFreeSWITCH

Linux Magazine #70 | Setembro de 2010

principais arquivos executáveis do FreeSWITCH estejam em bin, por isso usei symlinks:

ln -s /usr/local/freeswitch/bin/freeswitch

/usr/local/bin/freeswitchln -s /usr/local/freeswitch/bin/fs_cli /usr/local/bin/fs_cli

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.

Seu novo softswitchO primeiro comando básico é version, que mostrará a versão do FreeSWI-TCH que está sendo executada, in-cluindo a revisão SVN. O comando status mostra informações sobre sua instância do FreeSWITCH incluin-do 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;i1;Built-in Input;2;0;2;Built-in Output;0;2;r,o3;Logitech USB Headset;0;2;

4;Logitech USB Headset;1;0;

O i e o o estão próximos aos dis-positivos de entrada e de saída sele-cionados. Para alterar o dispositivo de entrada, utilize o comando pa indev com o número do dispositivo,

pa indev #x

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 ar-quivos MOH (music on hold) ins-talados, esse comando chamará o ramal MOH e enviará o MOH ao dispositivo de saída PortAudio:

pa call 9999

Se uma música for ouvida, a cha-mada 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 dispo-sitivos de entrada e de saída estão funcionando, faça o teste:

pa call 9996

Agora, quando falar no disposi-tivo de entrada, sua voz ecoará no dispositivo de saída. O comando pa hangup terminará a ligação.

Como é possível ver, o FreeSWI-TCH 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.

Conectar um fone SIPA maneira mais comum de utilização do FreeSWITCH é com um fone SIP. O aparelho físico é normal-mente chamado de hard phone, já

o fone baseado em software é apro-priadamente chamado de softphone. Vários tipos de hard phones estão dis-poní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 siste-ma 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 pa-drão (a instalação do softphone no mesmo sistema que executa o Fre-eSWITCH não é recomendada; no entanto, em muitos casos, ela fun-cionará 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á dis-poní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

Figura 2 Cliente X-Lite registrado.

Page 3: VoIP com FreeSWITCH Fale com REDES · PDF filebela mudanças à configuração do Fre1 mostra destaques Dialplan e a tabela 2 mostra os arquivos e sub-diretórios mais importantes

62 http://www.linuxmagazine.com.br

REDES | FreeSWITCH

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 cha-mada 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çãoA configuração padrão do FreeSWI-TCH possui muitos recursos. A ta-bela 1 mostra destaques Dialplan e

a tabela 2 mostra os arquivos e sub-diretórios mais importantes da con-figuração FreeSWITCH.

A instalação padrão irá criar um diretório chamado /usr/local/fre-eswitch/conf, o qual chamarei de $CONF. Todos os arquivos de con-figuraçã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-

eSWITCH sem a necessidade de passar por um grande arquivo.

FreeSWITCH como um DaemonPara 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 pla-no 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 progra-ma fs_cli devem iniciar com uma barra invertida, por isso, digite /help

Tabela 1: Destaques do Dialplan

Ramais Função

1000-1019 Ramais Padrão2000-2002 Amostra de Grupos de Discagem30xx Conferências de Banda Estreita (8kHz)31xx Conferências de Banda Larga (16kHz)32xx Conferências de Banda Ultra-Larga (32kHz)33xx Conferências com Qualidade de CD (48kHz)4000 Recuperação de Correio de Voz5000 Amostra de IVR5900 Call Park5901 Recuperação de Call Park9888 Conferência FreeSWITCH9992 Aplicativo de Informação9996 Teste de Eco9999 Música de Espera (MOH)|

Tabela 2: Arquivos de configuração importantes

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

Page 4: VoIP com FreeSWITCH Fale com REDES · PDF filebela mudanças à configuração do Fre1 mostra destaques Dialplan e a tabela 2 mostra os arquivos e sub-diretórios mais importantes

63

| REDESFreeSWITCH

Linux Magazine #70 | Setembro de 2010

para ver uma lista de comandos dis-poní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 ape-nas 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 se-gundo plano enquanto configura um novo usuário e modifica o Dialplan.

Adicionar um usuário SIPO 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 per-mitir 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 Kathe-rine. 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

“corresponde a exatamente 4 dígitos – dos quais os dois primeiros são 10, o seguinte é 0 ou 1 e o último é qual-quer dígito entre 0 e 9 – e armazena o valor correspondente na variável $1”. Simplificando, corresponde a qual-quer coisa entre 1000-1019, inclusive.

Para adicionar o novo usuário Katherine ao ramal 1500, utilize o caracter pipe (|), que é um OR lógico:

<condition field="destination_number" expression="^(10[01][0-9]|1500)$">

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 con-figuraçõ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á regis-tering e depois Ready. Agora, é pos-sível fazer chamadas de seu próprio

ramal. Caso haja um segundo tele-fone, registre-o como 1000 e usu-o para chamar 1500.

Fora do switch LocalUma vantagem do VoIP são as liga-ções via internet gratuitas ou muito baratas. O FreeSWITCH pode ro-tear 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 mu-dança. Um simples teste é chamar o servidor de conferência pública Fre-eSWITCH. 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, ha-verá 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>

Page 5: VoIP com FreeSWITCH Fale com REDES · PDF filebela mudanças à configuração do Fre1 mostra destaques Dialplan e a tabela 2 mostra os arquivos e sub-diretórios mais importantes

64 http://www.linuxmagazine.com.br

REDES | FreeSWITCH

pa call sip:[email protected]

Vários provedores oferecem ser-viç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 cone-xões com esses provedores. Os ga-teways são usados para registros no provedor. Caso já possua um prove-dor SIP, use as configurações desse provedor. O wiki do FreeSWITCH oferece exemplos de configurações para alguns provedores [5]. Neste exemplo, mostrarei como configu-rar um gateway para iptel.org, que oferece contas SIP gratuitas.

Primeiramente, crie uma con-ta no site iptel.org [6] e anote seu nome de usuário e senha. Depois, crie um novo arquivo em $CONF/sip_profiles/external. Certifique-se 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 profile external restart reloadxml

“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 Fre-eSWITCH a reiniciar o perfil exter-nal após carregar os dados XML.O comando reloadxml é opcional; po-rém, coso tenha feito mudanças nos dados XML (criando ou editando um arquivo), será preciso que essas mudanças sejam carregadas na rei-nicializaçã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:[email protected] REGED

REGED significa que o gateway está registrado no provedor. Caso apare-

ça FAIL_WAIT, provavelmente há um problema de configuração.

O último passo para receber chamadas é a permissão no Dial-plan. A configuração padrão possui um contexto público que trata as chamadas recebidas pela internet como confiáveis.

Primeiro, é preciso permitir cha-madas ao seu novo usuário iptel.org e depois especificar onde rotear essas chamadas. Para isso, crie um novo arquivo chamado $CONF/dial-plan/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 num-ber (Destination numbers – números de destino – não se restringem a ca-racteres numéricos).

A chamada é roteada para o ramal especificado nos parâmetros informa-dos 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 regis-trado 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:[email protected]

Se a chamada for bem sucedida, chegará ao ramal destinado.

Codecs de qualidadeChamadas telefônicas tradicionais possuem uma qualidade de som marginal e os celulares são piores.

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>

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>

Page 6: VoIP com FreeSWITCH Fale com REDES · PDF filebela mudanças à configuração do Fre1 mostra destaques Dialplan e a tabela 2 mostra os arquivos e sub-diretórios mais importantes

65

| REDESFreeSWITCH

Linux Magazine #70 | Setembro de 2010

O FreeSWITCH oferece uma óti-ma qualidade de voz nas chamadas com codecs gratuitos e de código aberto. O codec de código aberto CELT [8] possui uma ótima qua-lidade 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 ressal-tar é que codecs de alta qualidade podem expor as limitações de head-sets. 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. Lo-calize a linha <param name=”sample-rate” value=”8000”/>, altere o valor para 48000 e salve o arquivo.

No prompt do FreeSWITCH di-gite os seguintes comandos:

reloadxmlreload 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ápi-da. As conferências FreeSWITCH podem misturar chamadas com quais-quer codecs e taxas de sampling. De fato, é possível fazer uma chamada

de conferência FreeSWITCH com o PSTN com +1-213-799-1400 e com-parar a diferença entre codecs VoIP de alta qualidade e e a baixa quali-dade do PSTN.

Próximo passoEsta breve introdução ao FreeSWI-TCH 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 FreeSwi-tch 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 vi-brante oferece suporte aos novatos e veteranos, portanto, junte-se a ela e continue aprendendo as grandes possibilidades do VoIP. n

Gostou do artigo?Queremos ouvir sua opinião. Fale conosco em [email protected]

Este artigo no nosso site: http://lnm.com.br/article/3854

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

[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

SIP – Protocolo de Inicio de Sessão

SIP, ou Session Initiation Protocol é um protocolo baseado em TCP/IP uti-lizado para sessões de multimídia através da Internet. O protocolo basea-do 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 strea-ming multimídia.