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