FreeSWITCH como Gateway Skype para Asterisk - Actualizado

DEBIDO AL CAMBIO DE LAS API DE SKYPE EL GATEWAY YA NO FUNCIONA (09/2017)

La versión de Skype 2.0.0.72-3 para Linux ha sido desactivada por la misma Skype de forma que la vieja guía para instalar y configurar este Gateway ya no funciona. Desafortunadamente con la nueva versión de la configuración no se pueden activar más de 6 instancias de Skype y cada instancia necesita alrededor de 100KB de memoria RAM

Con el Gateway configurado podremos cursar llamadas de este tipo:

Skype –> FreeSWITCH –> Asterisk

Asterisk –> FreeSWITCH –> Skype

Utilizaremos:

  1. FreeSWITCH git versión
  2. Asterisk PBX 11.13.0
  3. CentOS 6.5 64bit
  4. Un servidor Digital Ocean con 1GB de RAM

Antes de compilar FreeSWITCH preparamos el servidor. Accedemos vía SSH y actualizamos el sistema:

yum update -y

Instalamos el editor nano y wget:

yum install nano wget -y

Continuamos con la configuración de la zona horaria (personalizar según su país):

rm /etc/localtime
ln -s /usr/share/zoneinfo/America/Bogota /etc/localtime

El idioma (español):

nano /etc/sysconfig/i18n

modificamos esta línea:

LANG="en_US.UTF-8"

para que quede:

LANG="es_CO.iso88591"

Guardamos los cambios.

Instalamos el paquete del network time protocol que se utiliza para tener actualizada la hora del servidor:

yum install ntp -y

Lo configuramos para que arranque en automático:

chkconfig ntpd on

Lo iniciamos:

service ntpd start

Creamos la partición de Swap ya que no viene por defecto:

dd if=/dev/zero of=/swapfile bs=1024 count=512k
mkswap /swapfile
swapon /swapfile

Configuramos la partición de swap para que arranque con el sistema:

nano /etc/fstab

al final del archivo añadimos la línea que sigue:

/swapfile          swap            swap    defaults        0 0

Guardamos los cambios y se cambiamos los permisos del archivo recién creado:

chmod 0600 /swapfile

Reiniciamos el sistema:

reboot

 

FreeSWITCH

Instalamos los repositorios Epel:

rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noa...

Librerías y dependencias para la compilación de FreeSWITCH:

yum install git gcc-c++ autoconf automake libtool wget python ncurses-devel zlib-devel libjpeg-devel git libxml2* \
openssl-devel e2fsprogs-devel sqlite-devel libcurl-devel pcre-devel speex-devel ldns-devel libedit-devel -y

Librerías y dependencias para la el modulo Skypopen de FreeSWITCH:

yum install libX11-devel pulseaudio Xvfb xorg-x11-fonts* xz pulseaudio-utils bzip2 qt-x11.i686 \
qtwebkit.i686 glibc.i686  libgcc.i686 libstdc++.i686 libXv.i686 \
libX11.i686 libXext.i686 libXScrnSaver.i686 pulseaudio-libs.i686 alsa-plugins-pulseaudio.i686

yum install libcanberra-gtk2.i686 gtk2-engines.i686 PackageKit-gtk-module.i686

Descargamos y compilamos FreeSWITCH:

cd /usr/src

git clone https://stash.freeswitch.org/scm/fs/freeswitch.git

cd freeswitch
./bootstrap.sh
./configure
make

Instalamos el programa, las locuciones y los archivos audio de la música de espera.

make install
make cd-sounds-install
make cd-moh-install

Activamos el modulo de Skypopen:

nano modules.conf

Modificamos esta línea:

#endpoints/mod_skypopen

para que quede:

endpoints/mod_skypopen

Guardamos los cambios y compilamos e instalamos el modulo:

make install

Modificamos la configuración del servidor de audio Pulseaudio:

mv /etc/pulse/system.pa /etc/pulse/system.pa.old

nano /etc/pulse/system.pa

Pegamos las líneas que siguen:

load-module module-null-sink
load-module module-native-protocol-unix

Guardamos los cambios.

nano /etc/pulse/daemon.conf

Añadimos al final del archivo las siguientes líneas:

daemonize = yes
system-instance = yes
resample-method = trivial
flat-volumes = yes
default-sample-rate = 48000
default-sample-channels = 1
default-fragment-size-msec = 20
default-sample-rate = 44100

Añadimos el usuario root al grupo pulse-access:

usermod -G pulse-access -a root

Para que las instancia de Skype funcionen correctamente hay que crear un UUID para el servidor:

dbus-uuidgen --ensure=/var/lib/dbus/machine-id

Iniciamos el servicio:

/usr/bin/pulseaudio --system=true --daemonize=true --log-level=info --log-target=syslog

Lo configuramos para que arranque al Boot del sistema:

nano /etc/rc.local

Al final de archivo añadimos:

/usr/bin/pulseaudio --system=true --daemonize=true --log-level=info --log-target=syslog

Guardamos los cambios y iniciamos la configuración del modulo:

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

./install.pl

Enter your name
[Giovanni]:
Andrea
You gave: 'Andrea'
It's OK? Please answer 'Y' for yes or 'N' for not [N]: y

OK Andrea, GREAT! Let's start real questions! (At any time, Ctrl-C to abort)

At the end of questions, before I do anything, I'll let you review all your answers, don't worry! :)

I'm about to download the Skype client for Linux version 2.0.0.72 for OSS
nicely repackaged by Arch Linux with official Skype permission.
I need to create a directory to download and unpack the Skype client
To accept the default, just press Enter

Enter the full path of the Skype download directory
[/tmp/skype_download]:
You gave: '/tmp/skype_download'
It's OK? Please answer 'Y' for yes or 'N' for not [N]: y

I'm about to install the Skype client
I would put the binary in /usr/local/freeswitch/skypopen/skype-clients-symlinks-dir and the associated files in /usr/share/skype
Location of associated files is mandatory (/usr/share/skype)
Location of binary is recommended (/usr/local/freeswitch/skypopen/skype-clients-symlinks-dir)
To accept the default, just press Enter

Enter the directory full path for Skype client binary
[/usr/local/freeswitch/skypopen/skype-clients-symlinks-dir]:
You gave: '/usr/local/freeswitch/skypopen/skype-clients-symlinks-dir'
It's OK? Please answer 'Y' for yes or 'N' for not [N]: y

I'm about to create the FreeSWITCH configuration file for mod_skypopen (skypopen.conf.xml)
I need to know where to put it, eg: where is the FreeSWITCH modules' config dir
To accept the default, just press Enter

Enter the directory full path for FreeSWITCH modules' config files
[/usr/local/freeswitch/conf/autoload_configs]:
You gave: '/usr/local/freeswitch/conf/autoload_configs'
It's OK? Please answer 'Y' for yes or 'N' for not [N]: y

I'm about to create the directory where to put our fake sound driver
Location of fake sound driver directory is where you like it more :)
To accept the default, just press Enter

Enter the directory full path for fake sound driver
[/usr/local/freeswitch/skypopen/skypopen-sound-driver-dir]:
You gave: '/usr/local/freeswitch/skypopen/skypopen-sound-driver-dir'
It's OK? Please answer 'Y' for yes or 'N' for not [N]: y

I'm about to create the configuration directory needed by the Skype clients
Location of Skype clients configuration directory is where you like it more :)
To accept the default, just press Enter

Enter the directory full path for Skype clients config
[/usr/local/freeswitch/skypopen/skype-clients-configuration-dir]:
You gave: '/usr/local/freeswitch/skypopen/skype-clients-configuration-dir'
It's OK? Please answer 'Y' for yes or 'N' for not [N]: y

I'm about to create a directory where I'll put the Skype clients startup script
Location of Skype clients startup script directory is where you like it more :)
To accept the default, just press Enter

Enter the directory full path for Skype clients startup script
[/usr/local/freeswitch/skypopen/skype-clients-startup-dir]:
You gave: '/usr/local/freeswitch/skypopen/skype-clients-startup-dir'
It's OK? Please answer 'Y' for yes or 'N' for not [N]: y

I'm about to create the directory for symlinks needed by the Skype clients startup script
Location of symlinks directory is where you like it more :)
To accept the default, just press Enter

Enter the directory full path for Skype clients symlinks
[/usr/local/freeswitch/skypopen/skype-clients-symlinks-dir]:
You gave: '/usr/local/freeswitch/skypopen/skype-clients-symlinks-dir'
It's OK? Please answer 'Y' for yes or 'N' for not [N]: y

How many Skype clients (channels) do you want to launch?
Each Skype client will be one channel to FreeSWITCH and use approx 70MB of ram
A quad core CPU can very easily support 20 or more Skype clients
Each Skype client allows one concurrent call
Eg: if you plan to have a max of 10 concurrent (outbound and/or inbound) Skype calls then enter 10
To accept the default, just press Enter

Indicamos el numero de instancias del cliente Skype que queremos ejecutar. Esto sería el numero de canales Skype que luego tendremos disponibles:

Enter how many Skype clients will be launched
[5]:
5
You gave: '10'
It's OK? Please answer 'Y' for yes or 'N' for not [N]: y

You want all of the Skype clients to use the same Skype login (skypeusername)?
eg: you want all of your skypopen channels to be Bob on the Skype network, or you want channel skype01 to be Bob, channel skype02 to be Alice, etc?
Please answer 'one' for all channels using the same Skype login (you'll be asked just one time for Skype login and password) or 'multi' for being asked for each channel

Con esta opción indicamos que todos los canales serán asociados a la misma cuenta SKype:

Enter 'one' or 'multi'
[one]:
one
You gave: 'one'
It's OK? Please answer 'Y' for yes or 'N' for not [N]: y

I need the Skype username which will be used by ALL the Skype clients to be launched
(That's the one-word you registered as login to the Skype network)
This installer will create the needed files to launch concurrently many (or one) instances of it

NB: DON'T ACCEPT the DEFAULT, write YOUR OWN

Ponemos el usuario Skype:

Enter the Skype clients username
[your_own_skype_username]: voztovoice-soporte
You gave: 'voztovoice-soporte'
It's OK? Please answer 'Y' for yes or 'N' for not [N]: y

I need the Skype password which will be used by ALL the Skype clients to be launched
(That's the one-word you registered as password to the Skype network)

NB: DON'T ACCEPT the DEFAULT, write YOUR OWN

La contraseña del usuario Skype

Enter the Skype clients password
[your_own_skype_password]: sesamo
You gave: 'sesamo'
It's OK? Please answer 'Y' for yes or 'N' for not [N]: y

Please check the following values:

directory for downloading and unpacking Skype client:
'/tmp/skype_download'
directory for Skype client binary:
'/usr/local/freeswitch/skypopen/skype-clients-symlinks-dir'
directory for FreeSWITCH modules' configs:
'/usr/local/freeswitch/conf/autoload_configs'
directory for fake sound driver:
'/usr/local/freeswitch/skypopen/skypopen-sound-driver-dir'
directory for Skype clients configs:
'/usr/local/freeswitch/skypopen/skype-clients-configuration-dir'
directory for Skype clients startup script:
'/usr/local/freeswitch/skypopen/skype-clients-startup-dir'
directory for Skype clients symlinks:
'/usr/local/freeswitch/skypopen/skype-clients-symlinks-dir'
how many Skype clients to launch: '10'
Skype login: 'voztovoice-soporte'
Skype password: 'sesamo'

Confirmamos la configuración:

Are you sure you like the values? Write 'sure' for yes
[nope]: sure
You gave: 'sure'
It's OK? Please answer 'Y' for yes or 'N' for not [N]: y

GREAT! Please stand back, I'm working...
SUCCESS!!!

Terminada la configuración del modulo, ejecutamos el script que contiene toda la información de arranque de las 5 instancias:

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

Cuando el proceso termine, deberíamos tener las 5 instancias de Skype Activadas:

ps aux

Captura

Configuramos el sistema para que el script se ejecute al Boot:

nano /etc/rc.local

Al final del archivo añadimos:

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

Guardamos los cambios y iniciamos FreeSWITCH:

/usr/local/freeswitch/bin/freeswitch -nonat

Cuando aparece el prompt de la consola, cargamos el modulo Skypopen:

load mod_skypopen

Si todo sale bien deberíamos ver las 5 instancias funcionando:

sk list

Captura

Para salir de la consola de FreeSWITHC digitamos 3 puntos:

Ya podemos activar el modulo para que se inicie con FreeSWITCH:

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

Al final del bloque:

<!-- Endpoints -->

Añadimos:

<load module="mod_skypopen"/>

Guardamos los cambios y configuramos el inicio automático de FreeSWITCH:

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

Desactivamos el inicio automático del servicio:

chkconfig freeswitch off

ya que FreeSWITCH tiene que iniciarse después de las instancias del cliente Skype. Por eso modificamos el archivo:

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

antes de esta línea:

exit 0

Borramos la siguiente línea:

sleep 7

y añadimos:

sleep 30
/etc/init.d/freeswitch start

Guardamos los cambios. Ahora configuramos FreeSWITCH. Como Asterisk PBX va a estar en el mismo servidor, tenemos que cambiar los puertos de escucha de FreeSWITCH:

nano /usr/local/freeswitch/conf/vars.xml

<X-PRE-PROCESS cmd="set" data="internal_sip_port=5060"/>
<X-PRE-PROCESS cmd="set" data="internal_tls_port=5061"/>

para que queden:

<X-PRE-PROCESS cmd="set" data="internal_sip_port=5062"/>
<X-PRE-PROCESS cmd="set" data="internal_tls_port=5063"/>

Guardamos los cambios. Ahora configuramos FreeSWITCH para que el trafico SIP y RTP con el Gateway (Asterisk) pase por la IP 127.0.0.1

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

modificamos estas dos líneas:

<param name="rtp-ip" value="$${local_ip_v4}"/>
<param name="sip-ip" value="$${local_ip_v4}"/>

para que queden:

<param name="rtp-ip" value="127.0.0.1"/>
<param name="sip-ip" value="127.0.0.1"/
>

Guardamos los cambios y le decimos a FreeSWITCH donde enviar las llamadas que lleguen desde usuarios Skype:

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

cambiamos esta línea:

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

para que quede:

<param name="destination" value="voztovoice-soporte"/>

Guardamos los cambios. Las llamadas llegarán al contexto “default” del dialplan. Lo abrimos:

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

antes de este bloque:

<extension name="global-intercept">
      <condition field="destination_number" expression="^886$">
        <action application="answer"/>
        <action application="intercept" data="${hash(select/${domain_name}-last_dial_ext/global)}"/>
        <action application="sleep" data="2000"/>
      </condition>
    </extension>

Añadimos:

<extension name="skype-call">
      <condition field="destination_number" expression="^(voztovoice-soporte)$">
       <action application="set" data="effective_callee_id_name=${skype_user}" />
       <action application="set" data="effective_callee_id_number=${skype_user}" />
       <action application="set" data="skype_get_inband_dtmf=true"/>
       <action application="bridge" data="{sip_cid_type=rpid}sofia/gateway/asterisk/skype"/>
      </condition>
    </extension>

Como se puede ver, todas las llamadas procedentes de Skype se enviarán al servidor Asterisk, extensión skype. Ahora pasamos al contexto para las llamadas procedentes de Asterisk:

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

Después de estas dos líneas:

<include>
  <context name="public">

Añadimos:

<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>

LA RR está por Round Robin y utiliza este algoritmo para distribuir las llamadas salientes entre los distintos canales Skype disponibles en FreeSWITCH.

Guardamos los cambios. De esta forma todas las llamadas procedentes de Asterisk que tengan como prefijo del nombre de extensión skype-, se procesaran en este bloque.

Por ultimo configuramos la troncal con Asterisk:

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

Copiamos las siguientes líneas:

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

Guardamos los cambios y seguimos con la instalación y configuración de Asterisk.

 

ASTERISK

Primero unas dependencias:

yum install libxml2* sqlite* libuuid* uuid* -y

Luego la PBX

cd /usr/src

wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-11.13.0.ta...
tar -xf asterisk-11.13.0.tar.gz
cd asterisk-11.13.0
./configure --libdir=/usr/lib64
make
make install
make samples
make config

Ahora tenemos que modificar dos archivos:

  • sip.conf
  • extensions.conf

nano /etc/asterisk/sip.conf

al final del archivo añadimos la configuración de la extensión que recibirá las llamadas procedentes de los usuario Skype y la troncal con FreeSWITCH:

[skgateway]
type=peer
context=skype
disallow=all
allow=alaw
allow=ulaw
qualify=yes
port=5080 
host=127.0.0.1
nat=no
directmedia=no

[1000]
type=friend
secret=sesamo
context=phones
disallow=all
allow=alaw
allow=g722
language=es
qualify=yes
host=dynamic
nat=force_rport,comedia
directmedia=no

Guardamos los cambios. Las llamadas procedentes de FreeSWITCH llegarán al contexto [skype] y la extensión 1000 tendrá acceso al contexto phones. Ahora el dialplan:

nano /etc/asterisk/extensions.conf

Al final del archivo insertamos el contexto para llamar a FreeSWITCH y de ahí a los usuarios Skype:

[phones]
exten => _[a-z].,1,Set(prefix=skype-${EXTEN})
same => n,set(CALLERID(all)=voztovoice-soporte)
same => n,NoOp(${prefix})
same => n,Dial(SIP/skgateway/${prefix})
same => n,Hangupg

Las llamadas procedentes de FreeSWITCH (contexto skype, extensión skype) la enviamos a la extensión 1000:

[skype]
exten => skype,1,NoOp(Llamada desde FreeSWITCH)
same => n,Set(skype=${SIP_HEADER(from)})
same => n,Dial(SIP/1000,30)
same => n,Hangup

Guardamos los cambios y reiniciamos el servidor para controlar que todos los servicios se inicien correctamente:

reboot

Configuramos la extensión 1000 en X-Lite y realizamos un par de pruebas.

Primero llamamos el usuario voztovoice-soporte desde Skype:

Captura

En X-Lite:

Captura2

Luego desde X-LIte llamamos el usuario voztovoice de Skype:

Captura

El resultado:

Captura

Audio perfecto!!!

Enlace de referencia: https://freeswitch.org/confluence/display/FREESWITCH/mod_skypopen

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo

6 comentarios

y como se hace

Y como se hace para que cuando agreguen el usuario de skype no aparesca como autorizacion pendiente ? y en lugar de eso que agregue los usuarios automaticamente?

Re: y como se hace

Hola,

la verdad no se y ese dato no aparece en el enlace de referencia. 

La única forma es escribir en la lista de correo de FreeSWITCH o de vez en cuando conectarse a Skype con ese nombre de usuario y autorizar todas las solicitudes.

Para las llamadas no hay problema ya que se puede configurar Skype para que las acepte desde usuarios no presentes en la lista de contactos.

Saludos

Contactos Skype

Aquí se explica:

"Skypopen automatically directs the Skype client instance to agree to a
request of being added to the Contact List and to make known its
"status" (online, offline, etc), without adding the requester to the
Contact List of the Skype client instance."

El cliente Skype acepta las solicitudes de nuevos contactos y vuelve visible su estado aunque no añada el contacto a la lista de contactos de la instancia que ha recibido la solicitud.

Saludos

Hola . aquien sabe como puedo

Hola . aquien sabe como puedo cambiar la contrasenia de usuario skype en mod_skypopen ? estoy utilizando freeswitch con mod_skypopen . funciona profectamente , pero veo por historia de llamadas en paginas skype ,hay bastante llamadas no fue realizada mi mismo . puede ser que hay otro parte esta utilizando mi cuentas de skype.por eso quiero cambiar la contrasenia de skype. aguien sabe como hacer lo ? desdde muchas gracias ,

saludos

Suscribirse a Comentarios de "FreeSWITCH como Gateway Skype para Asterisk - Actualizado" Suscribirse a VozToVoice - Todos los comentarios