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:
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.
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;
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 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