Utilizar FreeSWITCH como Gateway Skype para Asterisk - CentOS 5.6 32bit

Versión para impresiónSend by email

La primera repercusión de la compra de Skype por parte de Microsoft es el anuncio de Digium que el soporte para el modulo chan_skype terminará el 26 de julio de 2013, mientras las ventas el próximo 26 de julio 2011. Quienes han adquirido un considerable numero de licencias (canales) tienen que empezar a pensar como poder seguir brindando este tipo de servicio después del 2013. Por mi parte, investigando un poco, he encontrado una solución que me parece hasta mejor del chan_skype, antes que nada, porque es totalmente gratuita. Esta solución se llama mod_skypopen y la soporta FreeSWITCH. Para aquellos que no lo conocen, FreeSWITCH es un software de telefonía parecido a Asterisk pero, desde mi punto de vista, mucho más solido. Si queremos seguir utilizando Asterisk y al mismo tiempo tener un Gateway hacia la red de Skype, esta es la mejor solución disponible. ¿Cómo funciona el modulo mod_skypopen? Este modulo crea un driver entre FreeSWITCH y Skype apoyándose a un cliente Skype instalado en la misma maquina donde es presente FreeSWITCH. Este canal utiliza las API de Skype. Para cada canal configurado se creará una nueva instancia del cliente. El único “defecto” es que cada canal configurado consuma alrededor de 70MB de memoria RAM. La ventaja es que podemos configurar cualquier usuario Skype sin el limite del chan_Skype de Asterisk, que permite configurar solamente usuarios Skype de tipo empresarial, es decir, creados desde el Skype Manager. En esta guía veremos como instalar FreeSWITCH en CentOS 5.6 32bit, el modulo skypopen y como configurar FreeSWITCH como Gateway hacia Skype para Asterisk.

Para empezar instalamos las librerías Vorbis:

yum install libvorbis libvorbis-devel vorbis-tools libogg libogg-devel

seguimos con la librería curl:

yum install curl curl-devel libidn-devel

algunos programas y librerías para compilar FreeSWITCH:

yum install gcc ncurses ncurses-devel make gcc-c++ libtermcap libtermcap-devel zlib zlib-devel libtool bison bison-devel openssl-devel bzip2 bzip2-devel wget newt newt-devel subversion flex gdbm-devel db4-devel

El servidor MySQL para las base de datos:

yum install mysql mysql-server mysql-devel

ODBC:

yum install unixODBC unixODBC-devel mysql-connector-odbc libtool-ltdl-devel

unas librerías necesarias para el modulo FAX de FreeSWITCH

yum install libtiff libtiff-devel libxml2 libxml2-devel libjpeg libjpeg-devel

otras librerías para el protocolo XMPP (para conectarse a GoogleTalk):

yum install gnutls gnutls-devel gnutls-utils

OpenLDAP:

yum install compat-openldap openldap openldap-clients openldap-devel openldap-servers

las librerías del protocolo SNMP:

yum install net-snmp net-snmp-devel net-snmp-libs net-snmp-utils

un servidor de correo electrónico:

yum install sendmail sendmail-devel sendmail-cf

Instalamos la interfaz grafica X11, las librerías alsa y el paquete devel del kernel

yum install libX11-devel Xvfb alsa-utils libXv libXScrnSaver xorg-x11-fonts* alsa-lib-devel libXScrnSaver kernel-devel alsa-lib libXScrnSaver libXv

y para terminar unas dependencias para la compilación de GIT:

yum install tcl tcl-devel

Terminada la instalación de estos paquetes, descargamos y compilamos GIT:

cd /usr/src

wget http://www.kernel.org/pub/software/scm/git/git-1.7.3.tar.gz

tar -xf git-1.7.3.tar.gz

cd git-1.7.3

./configure --prefix=/usr
make
make install

Ahora podemos descargar la ultima versión disponible de FreeSWITCH (que normalmente es también la más estable):

cd /usr/src

git clone git://git.freeswitch.org/freeswitch.git

cd freeswitch

./bootstrap.sh

./configure

Compilamos, instalamos las locuciones y los archivos de configuración predefinidos.

make && make install && make hd-sounds-install && make hd-moh-install && make samples

Este paso es previo a la compilación del modulo skypopen porque primero hay que instalar la música en espera y las locuciones de 16Khz. Una vez terminado podemos modificar el archivo donde se configuran los módulos que se quieren instalar con FreeSWITCH:

nano modules.conf

se modifica esta línea:

#endpoints/mod_skypopen

para que quede:

endpoints/mod_skypopen

Con el comando make install, se instalará el modulo mod_skypopen:

make install

Seguimos con la compilación de una falso driver OSS para Skype:

cd /usr/src/freeswitch/src/mod/endpoints/mod_skypopen/oss

make clean

make

insmod ./skypopen.ko

mknod /dev/dsp c 14 3

Ahora es junto el momento de la configuración de los usuarios y los canales Skype que queremos utilizar con FreeSWITCH. Esto se hace a través de uno script de instalación.

cd /usr/src/freeswitch/src/mod/endpoints/mod_skypopen/install

./install.pl

Contestamos todas las preguntas (bastantes intuitivas). En mi caso he configurado un usuario Skype con 4 canales disponibles.

skypopen1

Indicamos la carpeta donde se descargará el cliente Skype.

skypopen2

Indicamos la carpeta donde se instalará el cliente Skype.

skypopen3

El script instalará automáticamente el archivo de configuración del modulo mod_skypopen en la carpeta donde se guardan todas las configuraciones de los módulos.

skypopen4

Indicamos la carpeta donde instalar el driver audio “de mentira” para Skype.

skypopen5

Indicamos la carpeta donde instalar la configuración del cliente Skype.

skypopen6

Indicamos la carpeta donde instalar el script para iniciar el cliente Skype.

skypopen7

Indicamos la carpeta para la creación de un enlace simbólico al script de inicio del cliente Skype.

skypopen8

Indicamos el numero de instancias del cliente Skype ´(canales) que se iniciarán.

skypopen9

Si queremos que los 4 canales sean asociados al mismo usuario Skype elegimos “one”, si  queremos asignar cada canal a un distinto usuario Skype, elegimos “multi”.

skypopen10

Indicamos el nombre del usuario Skype.

skypopen11

Indicamos la contraseña del usuario Skype fulano. En la pantalla que sigue veremos un resumen de toda la configuración y si todo es correcto, escogemos “sure” y confirmamos con “y”. Ahora que tenemos nuestros canales configurados, iniciamos las 4 instancias del cliente Skype:

sh /usr/local/freeswitch/skypopen/skype-clients-startup-dir/start_skype_clients.sh

Instalamos el script de arranque de FreeSWICTH

cd /usr/src/freeswitch/build/

cp freeswitch.init.redhat /etc/init.d/freeswitch

nano /etc/init.d/freeswitch

Cambiamos las líneas que siguen:

PID_FILE=${PID_FILE-/opt/freeswitch/run/freeswitch.pid}
FS_USER=${FS_USER-freeswitch}
FS_FILE=${FS_FILE-/opt/freeswitch/bin/freeswitch}
FS_HOME=${FS_HOME-/opt/freeswitch}
FREESWITCH_ARGS="-nc"

Para que queden:

PID_FILE=${PID_FILE-/usr/local/freeswitch/run/freeswitch.pid}
FS_USER=${FS_USER-root}
FS_FILE=${FS_FILE-/usr/local/freeswitch/bin/freeswitch}
FS_HOME=${FS_HOME-/usr/local/freeswitch}
FREESWITCH_ARGS="-nc -nonat"

Volvemos ejecutable el archivo

chmod +x /etc/init.d/freeswitch

lo añadimos a la lista de servicios:

chkconfig --add freeswitch

y lo configuramos para que se inicie en automático:

chkconfig freeswitch on

Las llamadas procedentes de Asterisk llegarán al contexto publico de FreeSWITCH. Lo abrimos:

nano /usr/local/freeswitch/conf/dialplan/public.xml

y después de estas líneas:

<include>
  <context name="public">

ponemos:

   <extension name="skype_uri">
      <condition field="destination_number" expression="^skype/(.*)$">
        <action application="set" data="skype_get_inband_dtmf=true"/>
        <action application="bridge" data="skypopen/RR/$1"/>
      </condition>
    </extension>

Una pequeña explicación. Con la segunda línea declaramos que todas las llamadas con destinatario skype/nombreusuarioskype se procesarán en este bloque del dialplan. Con la tercera activamos la opción de enviar tonos DTMF a lo largo de la llamada SIP –> Skype y con la cuarta conectamos la llamada SIP  con el usuario Skype llamado a través del Gateway configurado en FreeSWITCH; RR está por Round Robin y permite utilizar el primer canal disponible de los cuatro configurados.

Ahora tenernos que modificar el archivo de configuración del modulo de mod_skypopen:

nano /usr/local/freeswitch/conf/autoload_configs/skypopen.conf.xml

Cambiamos estas dos líneas indicando que todas las llamadas para el usuario Skype fulano hay que transferirlas a la extensión 3200 del contexto Skype del dialplan:

<param name="context" value="default"/>
<param name="destination" value="5000"/>

para que queden:

<param name="context" value="skype"/>
<param name="destination" value="3200"/>

Guardamos los cambios y creamos el contexto skype:

nano /usr/local/freeswitch/conf/dialplan/skype.xml

<?xml version="1.0" encoding="utf-8"?>
<include>
  <context name="skype">

    <extension name="skype-call">
      <condition field="destination_number" expression="^(3[1-5]00)$"> 
       <action application="set" data="skype_get_inband_dtmf=true"/>
      <action application="bridge" data="sofia/gateway/asterisk/$1"/>
      </condition>
    </extension>
  </context>
</include>

Con este bloque de dialplan indicamos que todas las llamadas para las extensiones de 3100 a 3500 hay que enviarlas al servidor Asterisk a través de la troncal que vamos a crear en seguida. De esta forma si configuramos un nuevo usuario Skype en FreeSWITCH, podemos transferir la llamada a otra extensión Asterisk.

nano /usr/local/freeswitch/conf/sip_profiles/external/asterisk.xml

<include>
  <gateway name="asterisk">
  <param name="username" value="freeswitch"/>
  <param name="realm" value="IPServidorAsterisk"/>
  <param name="from-domain" value="IPServidorAsterisk"/>
  <param name="password" value="password"/>
  <param name="extension" value="freeswitch"/>
  <param name="proxy" value="IPServidorAsterisk"/>-->
  <param name="expire-seconds" value="3600"/>
  <param name="register-transport" value="udp"/>
  <param name="retry-seconds" value="30"/>
  <param name="extension-in-contact" value="true"/>
  <param name="ping" value="25"/>
  </gateway>
</include>

 

ASTERISK

El servidor Asterisk puede ser instalado en el mismo servidor de FreeSWITCH o en otro. Si está instalado en el mismo, en unos de los dos hay cambiar el puerto predefinido (5060) para la señalización SIP o sino tendremos un conflicto entre los dos servidores. Si cada PBX se instala en un servidor distinto, no hay ningún problema.

Primero creamos la extensión freeswitch en el sip.conf

nano /etc/asterisk/sip.conf

[freeswitch]
type=peer
context=from-skype
host=dynamic
fromuser=freeswitch
defaultuser=freeswitch
secret=password
qualify=yes
port=5080
directmedia=no
dtmfmode=rfc2833
disallow=all
allow=ulaw,alaw

Se guardan los cambios y se continua con el dialplan. Como hemos configurado en la extensión freeswitch el contexto from-skype, todas las llamadas que proceden de FreeSWITCH la procesamos en ese contexto:

nano /etc/asterisk/extensions.conf

[from-skype]
exten => 3200,1,Dial(SIP,${EXTEN})
same => n,Hangup

para las llamadas hacia usuarios skype, en nuestro contexto internal, ponemos:

[internal]
exten => _[a-z].,1,Set(prefix=skype/)
same => n,NoOp(${prefix}${EXTEN})
same => n,Dial(SIP/freeswitch/${prefix}${EXTEN})
same => n,Hangup

Guardamos los cambios y recargamos la configuración de Asterisk:

/etc/init.d/asterisk reload

Ahora volvemos a FreeSWITCH y lo iniciamos:

/usr/local/freeswitch/bin/freeswitch –nonat

skypopen12

Cargamos el modulo skypopen:

freeswitch@skypopen> load mod_skypopen:

skypopen13

Ahora desde un cliente Skype  para Windows llamamos el usuario configurado en FreeSWITCH. Debería timbrar la extensión 3200 de Asterisk. Como segunda prueba, desde una extensión conectada a Asterisk, llamamos el usuario Skype que estamos utilizando en el Cliente Skype de Windows.

¿Funcionó? Debería.

Si queremos que el modulo se cargue en automático al iniciar FreeSWITCH:

nano /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml

en el bloque “endpoints”, añadimos esta línea:

<load module="mod_skypopen"/>

Guardamos los cambios y iniciamos nuevamente FreeSwitch:

/etc/init.d/freeswitch start

Para entrar en la consola:

/usr/local/freeswitch/bin/fs_cli

para ver la lista de canales:

skypopen14

Que aprovechen!!!!

Wiki FreeSWITCH

Comentarios

Todavia es posible utilizar

Todavia es posible utilizar esta configuracion? Muchas Gracias

Error en instalacion del mod_skypopen

Hola

Esta es la primera vez que instalo freeswitch

aver si me puedesayudar porfavor
me sale un error en
Seguimos con la compilación de una falso driver OSS para Skype:
[root@ns5000104 oss]# make
make -C /lib/modules/3.2.13-grsec-xxxx-grs-ipv6-64/build M=/usr/src/freeswitch/src/mod/endpoints/mod_skypopen/oss LDDINC=/usr/src/freeswitch/src/mod/endpoints/mod_skypopen/oss/../include modules
make: *** /lib/modules/3.2.13-grsec-xxxx-grs-ipv6-64/build: No such file or directory. Stop.
make: *** [modules] Error 2

ya hi no quiero continua ya que ese error no devia salir

espero tu ayuda o actulizar el manual
atte

Re: Error en instalacion del mod_skypopen

Hola,

te aparece ese error porque no tienes la el paquete devel del Kernel instalado.

/lib/modules/3.2.13-grsec-xxxx-grs-ipv6-64/build

Parece que tu servidor es alquilado con OVH.

Pregunta a ellos donde puedes descargar las el paquete de las fuentes del Kernel.

Saludos

no logro pasar de ese mismo error

make -C /lib/modules/2.6.18-238.el5/build M=/usr/src/freeswitch/src/mod/endpoints/mod_skypopen/oss LDDINC=/usr/src/freeswitch/src/mod/endpoints/mod_skypopen/oss/../include modules
make: *** /lib/modules/2.6.18-238.el5/build: No such file or directory. Stop.
make: *** [modules] Error 2

Re: no logro pasar de ese mismo error

Estimado,

parece que no tienes instalado el paquete del kernel-devel versión 2.6.18-238.el5

En CentOS el comando para instalarlo es:

yum install kernel-devel

Averigua que sea la misma versión 2.6.18-238.el5

Saludos

este es el error

Package kernel-devel-2.6.18-348.1.1.el5.x86_64 already installed and latest version

Error skype

Hola.

Realicé la instalación siguiendo las instrucciones pero al momento de hacer una llamada desde una cuenta de skype en windows me muestra lo siguiente en el cli de freeswitch y se corta en seguida:

[INFO] mod_dialplan_xml.c:558 Processing Ariel->3200 in context skype
2013-05-29 16:15:10.342289 [NOTICE] switch_channel.c:978 New Channel sofia/external/3200 [14c11e48-c894-11e2-826f-51652b277e4a]
2013-05-29 16:15:10.342289 [NOTICE] mod_skypopen.c:2782 Ring-Ready skypopen/skype101!
2013-05-29 16:15:10.362221 [NOTICE] sofia.c:6553 Hangup sofia/external/3200 [CS_CONSUME_MEDIA] [CALL_REJECTED]
2013-05-29 16:15:10.362221 [NOTICE] switch_ivr.c:770 Ring Ready skypopen/skype101!
2013-05-29 16:15:10.362221 [INFO] mod_dptools.c:3096 Originate Failed. Cause: CALL_REJECTED
2013-05-29 16:15:10.362221 [NOTICE] switch_channel.c:4498 Hangup skypopen/skype101 [CS_EXECUTE] [CALL_REJECTED]
2013-05-29 16:15:10.362221 [NOTICE] switch_core_session.c:1567 Session 22 (sofia/external/3200) Ended
2013-05-29 16:15:10.362221 [NOTICE] switch_core_session.c:1571 Close Channel sofia/external/3200 [CS_DESTROY]
2013-05-29 16:15:10.362221 [NOTICE] switch_core_session.c:1567 Session 21 (skypopen/skype101) Ended
2013-05-29 16:15:10.362221 [NOTICE] switch_core_session.c:1571 Close Channel skypopen/skype101 [CS_DESTROY]

Distribuir contenido Distribuir contenido