FreeSWITCH - Configuración de los "Gateways"

Hace mucho que no escribía con ganas porque la verdad cada día me iba enredando más con la “programación” de FreeSWITCH. Afortunadamente estoy empezando a entender algo y este “caja negra” está empezando a gustarme. ¿Porqué me gusta? Porque una vez que uno logre entender la arquitectura del programa, lo demás se vuelve mucho más fácil.

Hoy veremos como configurar los Gateway y como usarlos en el dialplan. Los Gateway pueden ser nuestro proveedores de llamadas VoIP (protocolo SIP) o, por ejemplo, una centralita Asterisk que tenemos instalada en otro servidor y que queremos usar para hacer algunos tipos de llamadas. Lo gateway que mostraré son dos:

  • un servidor Asterisk
  • uno de los tantos clones Betamax

 

Para Asterisk no se si hice una chapuzada (como les encanta decir en España) pero a mi me funciona y ya es mucho :)

Primero vamos en la carpeta sip_profiles/external

cd /usr/local/freeswitch/conf/sip_profiles/external

en esta carpeta encontraremos un archivo de ejemplo para la configuración de los gateway. Echarle una mirada no estaría mal.

 

Asterisk

Para mi servidor asterisk yo hice esto:

nano asterisk.xml

<include>
  <gateway name="asterisk">                                              
  <param name="username" value="3000"/>
  <param name="realm" value="sip.voztovoice.com"/>
  <param name="from-domain" value="sip.voztovoice.com"/>
  <param name="password" value="contraseña"/>
  <param name="expire-seconds" value="3600"/>
  <param name="register-transport" value="udp"/>
  <param name="retry-seconds" value="30"/>
  <param name="ping" value="25"/>
  </gateway>
</include>

Vamos a explicar las líneas;

  • gateway name: el nombre que queremos darle al gateway. Este nombre lo usaremos en el dialplan al momento de quererlo usar
  • username: el nombre de usuario que usaremos en asterisk para registrarnos (en este caso escogí la extensión 3000)
  • Real: el nombre del dominio o la dirección IP de Asterisk
  • from-domain: repetimos el nombre de dominio o la dirección IP de Asterisk
  • password: la contraseña para conectarnos a Asterisk para la extensión 3000
  • expire-seconds: después de cuantos segundos se renueva la registración al servidor Asterisk (una hora)
  • register-transport: el protocolo de transporte usado (UDP)
  • retry-seconds: en el caso que la registración se pierda FS intentará reconectarse cada 30 segundos
  • ping: cada 25 segundos FS enviara un paquete para controlar si la conexión está activa

En este caso tuve que modificar también la configuración de Asterisk:

nano /etc/asterisk/sip.conf

puse estas líneas

[3000]
type=friend
secret=contraseña
language=es
callerid=FreeSWITCH <3000>
mailbox=3000@default
nat=no
dtmfmode=rfc2833
context=ilimitado
type=friend
canreinvite=no
host=dynamic
qualify=yes
disallow=all
allow=g729
allow=alaw
allow=ulaw
allowsubscribe=yes
call-limit=10

No voy a explicar cada una porque me imagino que quien quiera conectar FS a Asterisk sepa algo de asterisk. De todas formas si quieren más información pueden visitar VozToVoice. Voy a subrayar solo dos cosas. El contexto ilimitado (como lo tengo configurado en Asterisk) permite hacer cualquier tipo de llamada, es decir que desde FreeSWITCH podré llamar las extensiones configuradas en Asterisk además de las llamadas internacionales. Con call-limit he definido el numero máximo de canales que esta extensión puede usar a la vez (un modo para limitar la carga en Asterisk). Otro modo para hacer lo mismo es usar el modulo Limit de FreeSWICTH del cual hablaré en un próximo articulo.

Luego en el dialplan he decidido que para todas las llamadas a Colombia FS use este gateway:

nano /usr/local/freeswitch/conf/dialplan/defautl/01_example.com.xml

<extension name="international">
  <condition field="${toll_allow}" expression="international"/>
  <condition field="destination_number" expression="^(57\d+)$">
    <action application="bridge" data="sofia/gateway/asterisk/$1"/>
  </condition>
</extension>

Como pueden ver en el nombre del gateway (la línea con “bridge” he puesto el mismo nombre que he definido en la configuración del gateway en la línea “gateway name”. $1 es la variable donde se almacena el numero que hemos marcado.

He hecho unas cuantas pruebas y todo parece funcionar. Hagan las suyas y luego me cuentan.

 

Intervoip

Intervoip es uno de los clones betamax. Esta es mi configuración:

nano intervoip.xml

<include>
  <gateway name="intervoip">
  <param name="username" value="fulano"/>
  <param name="from-domain" value="sip.intervoip.com"/>
  <param name="password" value="contraseña"/>
  <param name="proxy" value="sip.intervoip.com"/>
  <param name="expire-seconds" value="3600"/>
  <param name="register" value="true"/>
  <param name="register-transport" value="udp"/>
  <param name="retry-seconds" value="30"/>
  <param name="ping" value="25"/>
  </gateway>
</include>

Muy parecido al que configuramos para Asterisk.

Ahora si quiero usar este gateway para todas las llamadas a Italia modifico el mismo archivo del dialplan:

nano /usr/local/freeswitch/conf/dialplan/defautl/01_example.com.xml

y pego estas lineas

<extension name="international">
  <condition field="${toll_allow}" expression="international"/>
  <condition field="destination_number" expression="^(39\d+)$">
    <action application="bridge" data="sofia/gateway/intervoip/00$1"/>
  </condition>
</extension>

Antes de la variable $1 he puesto dos ceros porque para marcar con intervoip hay que indicar el numero de esta forma: 00 + código país + código ciudad + numero.

¿Ahora como hago para ver el estado de los gateway?

Si FreeSWITCH arranca al arrancar de Linux, como explicado en este articulo, entro en la consola de esta forma:

cd /usr/local/freeswitch/bin

fscli

y escribo

+OK log level  [7]
freeswitch@internal> sofia status gateway asterisk

==========================================================
Name            asterisk
Scheme          Digest
Realm           sip.voztovoice.com
Username        3000
Password        yes
From            <sip:3000@sip.voztovoice.com;transport=udp>
Contact         <sip:gw+asterisk@209.17.186.220:5080;transport=udp>
Exten           3000
To              sip:3000@sip.voztovoice.com
Proxy           sip:sip.voztovoice.com
Context         public
Expires         3600
Freq            3600
Ping            1243872562”
PingFreq        25
State           REGED
Status          UP
CallsIN         0
CallsOUT        0
==========================================================

Aparecerán toda una serie de informaciones además del estado de la conexión “State  REGED”

Para hoy es todo.

Comentarios

Hola, tu articulo me ha sido

Hola,

tu articulo me ha sido de gran utilidad, gracias! Pero solo explicas como realizar llamadas usando los gateway pero y recibir 1 llamada desde un gateway? Yo hace días que intento configurar esto y no lo consigo :( Estaría bien complementar este articulo con la entrada de llamadas ;)

 

Saludos.

Re: llamadas en entrada

Hola,

para las llamadas en entrada en la carpeta /usr/local/freeswitch/conf/dialplan/public

crear un archivo con nombre tipo:

00_proveedor.xml

donde pegas las siguientes lineas (poniendo en expression el numero de extension con que te entra la llamada (en mi caso Eutelia

A mi funciona sin problemas. Saludos

<include>

  <extension name="public_did">
    <condition field="destination_number" expression="^(07XXXXXXXXX)$">
      <!--
          If you're hosting multiple domains you will want to set the
          target_domain on these calls so they hit the proper domain after you
          transfer the caller into the default context.

          $${domain} is the default domain set from vars.xml but you can set it
          to any domain you have setup in your user directory.

      -->
      <action application="set" data="domain_name=$${domain}"/>
      <!-- This example maps the DID 5551212 to ring 1000 in the default context -->
      <action application="transfer" data="1000 XML default"/>
    </condition>
  </extension>
</include>

Ronald- Claves para Freeswitch

Amigo estoy usando sipx el cual cuenta con freeswitch para las conferencias, entonces mi pregunta va dirigida a cómo se configura freeswitch para que pida clave para salir a la PSTN,¿cómo se hace para configurar un pinset como en asterisk en freeswitch?

 

Gracias

Distribuir contenido Distribuir contenido