062-066 FreeSwitchLM56
062-066 FreeSwitchLM56
062-066 FreeSwitchLM56
EN VOZ BAJA
FreeSWITCH es una potente y verstil plataforma de telefona capaz de escalar desde un softphone hasta un PBX o incluso un switch de portadora por software. POR MICHAEL S. COLLINS
os proyectos de cdigo abierto han bajado la barrera de entrada a la telefona hasta el punto de hacerla accesible para aficionados y pequeas empresas. La popular herramienta de PBX Asterisk, por ejemplo, es una alternativa altamente funcional y de bajo coste para telefona que ha demostrado ser disruptiva en el mundo de los sistemas comerciales de telefona [1]. El que quizs sea el software ms disruptivo de todos, sin embargo, aparece en forma de librera para switch por software llamada FreeSWITCH. El sitio web de FreeSWITCH [2] asegura que puede usarse como motor switch simple, PBX, pasarela de medios o servidor de medios para alojar aplicaciones IVR. Haciendo honor a esa descripcin camalenica, FreeSWITCH ha aparecido como switch de telecomunicaciones en entornos de produccin como PBX en numerosos escenarios empresariales, como telfono por software en porttiles de usuarios, e incluso como motor de redireccin de voz en el proyecto OpenSim. Adems, FreeSWITCH se puede implantar como aplicacin o usarlo como una librera (libfreeswitch) para utilizarla en software de terceros. Esta doble identidad es similar a la relacin entre cURL (la aplicacin) y libcurl (la librera). FreeSWITCH se usa tambin en escenarios algo ms exticos, sin embargo, a aquellos que sean nuevos en materia de
aplicaciones de telefona les conviene comenzar con la configuracin predeterminada de FreeSWITCH, como PBX SOHO (es decir, para pequea oficina o uso domstico). Aunque en un primer momento la cantidad de archivos y valores de configuracin pueda parecer desbordante, en poco tiempo se aprecian la potencia y la flexibilidad de esta verstil herramienta de telefona.
Instalacin de FreeSWITCH
En el momento de escribir estas lneas, la versin actual y estable de FreeSWITCH es la 1.0.4, que se puede descargar desde el sitio web del proyecto [3], aunque tambin se puede utilizar el repositorio de Subversion para instalar la ltima versin. A diferencia de otros muchos proyectos, la rama trunk del SVN es extremadamente estable, por lo que quiz lo ms conveniente sea usar simplemente el ltimo trunk. En cualquier caso, los desarrolladores de FreeSWITCH han facilitado mucho la tarea de actualizar al ltimo trunk, incluso aunque se hubiera instalado la ltima versin estable. Se sabe que existen binarios precompilados; pero lo ms recomendable es compilar los fuentes. Primero, descomprimimos e instalamos los fuentes. Para este ejemplo los hemos descargado a /usr/src y desde all los hemos instalado:
tar zxvf freeswitch-1.0.4.tar.gz cd freeswitch-1.0.4
FreeSWITCH incluye archivos de sonido y es capaz de manejar frecuencias de muestreo de 8, 16, 32 y 48kHz. Muy pocos, si acaso alguno, independientemente de que sean libres o privativos, son capaces de hacer el tipo de cosas que puede hacer FreeSWITCH, como manejar llamadas a diferentes frecuencias de muestreo. La instalacin llevar su tiempo, as que no pasa nada por encadenar los comandos con el operador &&. Una vez finalizado el proceso, tendremos una instalacin bsica de FreeSWITCH. Debido a lo engorroso de tener dos archivos ejecutables principales de FreeSWITCH en el path, hemos usado enlaces simblicos:
ln -s U /usr/local/freeswitch/binU /freeswitch /usr/local/binU /freeswitch ln -s /usr/local/freeswitchU /bin/fs_cli /usr/local/binU /fs_cli
62
Nmero 56
WWW.LINUX-MAGAZINE.ES
FreeSWITCH ADMINISTRACIN
para acceder al intrprete de cualquier servidor de FreeSWITCH al que se tenga acceso, incluso aunque ste se encuentre en otro servidor. Al principio veremos informacin de registro/depurado, pero en este punto no hay que preocuparse acerca de los mensajes de error o de advertencia que pudieran aparecer.
mente. Para cambiar de dispositivo de entrada podremos usar el comando pa indev seguido del nmero de dispositivo,
pa indev #x
donde x es el nmero de dispositivo. El dispositivo de salida se cambia con el comando pa outdev. En la configuracin de ejemplo propuesta hemos usado el dispositivo 4 como dispositivo de salida y el dispositivo 5 como dispositivo de entrada. Si los archivos de MOH (music on hold) estn instalados, el siguiente comando provoca una llamada a la extensin MOH y enva el MOH al dispositivo PortAudio de salida:
pa call 9999
Despus de varias lneas de depurado, se puede ver un +OK siempre que el mdulo se haya cargado correctamente. Luego, listamos los dispositivos de PortAudio disponibles en el 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; 4;Logitech USB Headset;1;0;
Si se oye msica es porque la llamada ha tenido xito. En caso contrario, hay que ver si los archivos MOH estn correctamente instalados. Para colgar, se utiliza el comando pa hangup. Podemos comprobar que tanto el dispositivo de entrada como el de salida funcionan correctamente haciendo una prueba de echo,
pa call 9996
Pueden verse una i y una o junto a los dispositivos de entrada y salida, respectiva-
con lo que al hablar por el dispositivo de entrada, debera orse la voz en el de salida. Con el comando pa hangup, de nuevo, se desconecta. Como puede apreciarse, es posible usar FreeSWITCH y PortAudio para crear un telfono software simple. De este modo, cualquier codec soportado por la instalacin de FreeSWITCH es vlido; as, disponemos de codecs de muy alta calidad sin necesidad de instalar un cliente de telefona por software.
Linux, los softphones se podrn ejecutar en cualquier sistema operativo, siempre que cumplan con el estndar SIP. Para empezar, descargamos X-Lite y realizamos la instalacin predeterminada (no se recomienda instalar un softphone en el mismo sistema que alberga a FreeSWITCH, pero hemos hecho una excepcin slo para las pruebas). Luego, iniciamos X-Lite y abrimos la configuracin de la cuenta SIP pulsando sobre el botn Show Menu (el botn es la pequea flecha que hay sealando hacia abajo, en la parte superior del telfono, sobre el centro o la izquierda). En X-Lite slo hay disponible una cuenta SIP, por lo que pulsaremos sobre ella y elegiremos el botn Properties. Rellenaremos los campos como se muestra en la Figura 1, especificando 1234 como contrasea y 1000 como extensin. Lo siguiente que haremos ser desactivar el campo Dialing plan, ya que no ser necesario con FreeSWITCH. Luego, pulsamos sobre OK y sobre Close, y el telfono tratar de registrarse en el servicio. La Figura 2 muestra un registro correcto. Para hacer una llamada de prueba marcamos 9999 y pulsamos el botn verde de enviar. En unos momentos deberamos or la msica de espera. La Figura 3 mues-
WWW.LINUX-MAGAZINE.ES
Nmero 56
63
ADMINISTRACIN FreeSWITCH
tra una llamada en progreso a la extensin 9999. Para cerrar FreeSWITCH, usamos el comando fsctl shutdown ().
Configuracin
La configuracin predeterminada de FreeSWITCH incluye muchas funciones. La Tabla 1 muestra servicios predeterminados de Dialplan, y la Tabla 2 algunos de los archivos y subdirectorios ms importantes en la configuracin de FreeSWITCH. La instalacin predeterminada crea un directorio llamado /usr/local/freeswitch/ conf, al que nos referiremos a partir de ahora como $CONF. Todos los archivos de configuracin son XML, que pueden incluir a su vez otros archivos XML. La cima de este rbol XML es $CONF/ freeswitch.xml, que incluye varios archivos XML que a su vez incluyen a otros. Este mtodo de organizacin permite realizar cambios sobre la configuracin de FreeSWITCH sin tener que andar trasteando un solo y enorme archivo de configuracin.
de bienvenida y una interfaz de lnea de comandos, y puede que tambin con algunos mensajes de depuracin en pantalla. Para deshabilitar el nivel de depurado, introducimos
/log info
Con eso, se limitan los mensajes de registro al nivel INFO, evitando montones de mensajes con informacin de depurado. Todos los comandos del programa fs_cli comienzan con una barra, por lo que para consultar la lista de comandos disponibles se habr de introducir /help. Cualquier otra cosa que escribamos en el intrprete de fs_cli se enviar directamente al servidor de FreeSWITCH, con una sola excepcin: Los tres puntos () no apagarn el servidor de FreeSWITCH desde fs_cli; en vez de eso, cierran el programa fs_cli. En lugar de apagar FreeSWITCH desde fs_cli, hay que cerrar el programa e introducir el comando freeswitch -stop desde el intrprete de Linux. Dejaremos a FreeSWITCH ejecutndose en segundo plano mientras creamos un nuevo usuario y modificamos el Dialplan.
llamada
FreeSWITCH informar de que se est ejecutando en segundo plano y proporcionar su ID de proceso (PID). Para parar FreeSWITCH, basta con ejecutar freeswtich -stop desde un intrprete de comandos de Linux. Por ahora dejaremos a FreeSWITCH en funcionamiento y usaremos el comando fs_cli para conectarnos: Nos recibir con un breve mensaje
aquellos que estn familiarizados con expresiones regulares reconocern el patrn ^(10[01][0-9])$, que significa coincide con exactamente cuatro dgitos, de los cuales los dos primeros son 10, el siguiente es 0 1, y el ltimo es cualquiera entre 0 y 9, y guarda los cuatro dgitos en la variable $1. Dicho de un modo simple, coincide con cualquier nmero desde el 1000 hasta el 1019, ambos incluidos. Para aadir el nuevo usuario Catalina a la extensin 1500 se usa el carcter de tubera, que es un OR lgico:
<condition field=U destination_number U expression=U ^(10[01][0-9]|1500)$>
Luego, abrimos 1500.xml en un editor, cambiamos 1000 por 1500, y ponemos el valor de effective_caller_id_name a Catalina. El nuevo archivo debera ser similar al mostrado en el Listado 1. Entonces abrimos $CONF/dialplan/ default.xml y localizamos la entrada de
Ahora iniciamos el programa fs_cli e introducimos reloadxml o pulsamos F6. La nueva extensin ya est lista para ser usada. La mejor forma de probarla es configurar un softphone (o bien un telfono hardware, en caso de disponer de uno) como 1500 con FreeSWITCH. En el cliente XLite, abrimos la configuracin de las cuentas SIP y cambiamos el nombre a Catalina. Cambiaremos tambin User y Authorization a 1500 antes de guardar la configuracin. El cliente debera mostrar registering y luego Ready. Desde ese momento ya se podrn hacer llamadas
64
Nmero 56
WWW.LINUX-MAGAZINE.ES
FreeSWITCH ADMINISTRACIN
usando la nueva extensin. En caso de disponer de un segundo telfono, se le puede registrar con la 1000 y usarlo para llamar a la 1500.
proveedores de servicios. Las pasarelas se usan como registros de salida a los proveedores. Quien ya disponga de un proveedor de SIP, tendr que usar la configuracin proporcionada por el mismo. La wiki de FreeSWITCH ofrece configuraciones de ejemplo para varios proveedores [5]. En este ejemplo mostraremos cmo configurar una pasarela para iptel.org, que ofrece cuentas SIP gratuitas. Primero, creamos una cuenta en el sitio web iptel.org [6] y anotamos los datos de acceso. Luego, creamos un nuevo archivo llamado iptel.org.xml en $CONF/sip_profiles/external, asegurndonos de poner el nombre de usuario y la contrasea en los campos correspondientes. El archivo debera tener un aspecto como el mostrado en el Listado 2. Luego, guardamos el archivo y, desde el intrprete de FreeSWITCH, introducimos el comando:
sofia profile external restart reloadxml
U
Sofia es el nombre de la librera SIP [7] empleada por FreeSWITCH y es tambin el nombre del comando para la utilizacin de funciones relacionadas con SIP (para consultar la sintaxis adecuada, ejecutar el comando sofia sin argumentos). El comando anterior indica a FreeSWITCH que debe reiniciar el perfil externo despus de recargar los datos XML. La opcin reloadxml es opcional; sin embargo, si se han hecho cambios a los datos XML (creando o editando un archivo), se necesitar cargar dichos cambios al reiniciar el perfil. Para comprobar si el sistema se ha registrado con iptel.org, ejecutamos
sofia status
El estado REGED significa que la pasarela se ha registrado correctamente en el proveedor. Si apareciese FAIL_WAIT, entonces lo ms probable es que haya algn problema con la configuracin. El ltimo paso necesario para poder recibir llamadas es permitir su entrada en el Dialplan. La configuracin predeterminada tiene un contexto de Dialplan public que trata a las llamadas entrantes desde Internet como no confiables. Primero hay que permitir las llamadas al nuevo usuario iptel.org y luego hay que especificar a dnde se quieren enviar esas
Son varios los proveedores de servicios que ofrecen conectividad hacia y desde redes PSTNs (public switched telephone network) o cuentas SIP simples. FreeSWITCH hace uso del concepto de pasarela para establecer conexiones con estos
WWW.LINUX-MAGAZINE.ES
Nmero 56
65
ADMINISTRACIN FreeSWITCH
llamadas. Para ello, creamos un nuevo archivo $CONF/dialplan/public/ 00_inbound_iptel.xml (o hacer una copia del archivo de ejemplo llamado 00_inbound_did.xml). Debera ser como el del Listado 3. Hay que estar seguros de especificar el nombre de usuario iptel.org en la expresin regular. El nombre de usuario ser el nmero de destino (los nmeros de destino no estn restringidos a caracteres numricos). La llamada se enrruta a la extensin especificada en los parmetros proporcionados a la aplicacin de transferencia. En nuestro caso, la hemos dirigido hacia la extensin MOH, para simplificar las pruebas. Se puede enrrutar tambin hacia un telfono SIP. Si se est registrado como 1000, entonces el destino de la transferencia es 1000 XML default. Guardamos el archivo, nos dirigimos al intrprete de FreeSWITCH y pulsamos F6 (o introducimos reloadxml en el intrprete de FreeSWITCH). Para recibir una llamada en la nueva cuenta, alguien deber hacer una llamada SIP a la URI SIP del nuevo iptel.org. Introducimos, en el intrprete de FreeSWITCH:
pa call sip:myusername@sipU .iptel.org
SWITCH permite llamadas de alta-calidad, calidad-de-voz, mediante el uso de codecs gratuitos y de cdigo abierto. El codec de cdigo abierto CELT [8] ofrece una gran calidad y unas prdidas mnimas. Tambin estn incluidos con FreeSWITCH los codecs Siren [9] de Polycom. Estos codecs de alta calidad son de cdigo cerrado, pero estn libres de regalas. La configuracin predeterminada carga los codecs Siren. Para cargar el codec CELT ejecutamos el comando mod_celt. Algo que hay que tener en cuenta es que unos codecs de mayor calidad podran poner de manifiesto las limitaciones de los terminales. La mayora de los terminales ms modernos, as como aquellos listados como Skype certified, tendrn un buen rendimiento con codecs de alta calidad. En nuestras pruebas hemos usado un terminal Logitech Clear Chat Pro USB con buenos resultados. Para las pruebas recomendamos realizar las llamadas a algn amigo que tambin tenga FreeSWITCH instalado. Para comenzar, hacemos una llamada a PSTN o a mvil, luego, colgamos y hacemos una llamada usando un codec de alta calidad. Con PortAudio es fcil probarlo. Primero, editamos $CONF/autoload_configs/portaudio.xml. Localizamos la lnea <param name=sample-rate value =8000/>, cambiamos el valor a 48000 y guardamos. Desde el intrprete de FreeSWITCH introducimos los siguientes comandos:
reloadxml reload mod_portaudio
La calidad de audio debera ser mucho mayor, especialmente si se dispone de una conexin a Internet rpida. Las conferencias de FreeSWITCH pueden mezclar llamadas de cualquier codec y con cualquier frecuencia de muestreo. De hecho, podemos llamar a la conferencia de FreeSWITCH a travs de PSTN, marcando +1-213-799-1400, y comparar la diferencia que hay entre los codecs de alta calidad de VoIP y los de baja calidad del PSTN.
RECURSOS
[1] How does FreeSWITCH compare to Asterisk?: http://www.freeswitch. org/node/117 [2] Sitio Web de FreeSWITCH: http:// www.freeswitch.org [3] Descargas de FreeSWITCH: http:// files.freeswitch.org/ [4] X-Lite: http://www.counterpath.com/ x-lite.html [5] Wiki de FreeSWITCH: http://wiki. freeswitch.org/wiki/ SIP_Provider_Examples [6] Sitio Web iptel.org: http://www.iptel. org [7] Librera Sofia-SIP: http://sofia-sip. sourceforge.net [8] Codec CELT: http://www.celt-codec. org [9] Codecs Siren: http://www.polycom. com/company/about_us/ technology/siren_g7221/index.html [10] Tutorial de FreeSWITCH: http:// robsmart.co.uk/2009/06/02/ freeswitch_linksys3102
Listado 3: 00_inbound_iptel.xml
01 <include> 02 <extension name=iptel-inbound> 03 <condition field=destination_number expression=^(EL_NOMBRE_DE_USUARIO_DE_IPTEL.ORG)$> 04 <action application=set data=domain_name=$${domain}/> 05 <action application=transfer data=9999 XML default/> 06 </condition> 07 </extension> 08 </include>
66
Nmero 56
WWW.LINUX-MAGAZINE.ES