Hoy veremos como configurar las extensiones de Freeswitch. Ya tenemos algunos ejemplos que vienen con la instalación de Freeswitch. Lo que haremos es cambiar algunos parámetros y hacer unas llamadas de prueba. Una premisa; mi Freeswitch está instalado en un servidor externo con todos los puertos necesarios abiertos. Las extensiones se conectan desde un portátil que está detrás de un router con ninguna puerta abierta.
Primero vamos a la carpeta de configuración de las extensiones:
cd /usr/local/freeswitch/conf/directory/default
ls
1000.xml 1003.xml 1006.xml 1009.xml 1012.xml 1015.xml 1018.xml default.xml
1001.xml 1004.xml 1007.xml 1010.xml 1013.xml 1016.xml 1019.xml example.com.xml
1002.xml 1005.xml 1008.xml 1011.xml 1014.xml 1017.xml brian.xml
Como pueden ver hay unas cuantas extensiones preconfiguradas. Abrimos una y miramos la configuración
nano 1000.xml
1 <include>
2 <user id="1000" mailbox="1000">
3 <params>
4 <param name="password" value="1234"/>
5 <param name="vm-password" value="1000"/>
6 </params>
7 <variables>
8 <variable name="toll_allow" value="domestic,international,local"/>
9 <variable name="accountcode" value="1000"/>
10 <variable name="user_context" value="default"/>
11 <variable name="effective_caller_id_name" value="Fulano"/>
12 <variable name="effective_caller_id_number" value="1000"/>
13 <variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>
14 <variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>
15 <variable name="callgroup" value="techsupport"/>
16 </variables>
17 </user>
18 </include>
Esta es la configuración básica de una extensión.
En la segunda línea aparece el numero de la extensión y de la casilla del correo de voz.
en la cuarta la contraseña para dicha extensión (cambiarla en seguida)
en la quinta la contraseña para acceder a la casilla del correo de voz. En FreeSWITCH hay un plan de llamadas ya configurado. Para acceder a la casilla de voz tenemos dos posibilidades. Llamando nuestro numero de extensión (en este caso 1000) entraremos directamente a nuestro correo de voz. Marcando la extensión 4000 tendremos que indicar el numero de nuestra casilla y la contraseña asociada.
En la octava línea definiremos que tipo de llamadas puede hacer la extensión. (locales, larga distancia e internacionales). Como veremos esto aparece en el plan de llamadas.
En la numero 9 definimos una cuenta para el registro de las llamadas.
En la línea 10 el contexto de la extensión
En la línea 11 el nombre del identificativo de llamada de esta extensión y en la 12 el numero.
Para concluir en la línea 15 el grupo a que pertenece la extensión.
Ahora echamos una miradita a otro archivo:
nano /usr/local/freeswitch/conf/directory/default.xml
<include>
<!--the domain or ip (the right hand side of the @ in the addr-->
1 <domain name="$${domain}">
<params>
2 <param name="dial-string" value="{presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})}"/>
</params>
<variables>
3 <variable name="record_stereo" value="true"/>
<variable name="default_gateway" value="$${default_provider}"/>
<variable name="default_areacode" value="$${default_areacode}"/>
4 <variable name="transfer_fallback_extension" value="operator"/>
</variables>
<groups>
5 <group name="default">
<users>
6 <X-PRE-PROCESS cmd="include" data="default/*.xml"/>
</users>
</group>
7 <group name="sales">
<users>
<!--
type="pointer" is a pointer so you can have the
same user in multiple groups. It basically means
to keep searching for the user in the directory.
-->
<user id="1000" type="pointer"/>
<user id="1001" type="pointer"/>
<user id="1002" type="pointer"/>
<user id="1003" type="pointer"/>
<user id="1004" type="pointer"/>
</users>
</group>
<group name="billing">
<users>
<user id="1005" type="pointer"/>
<user id="1006" type="pointer"/>
<user id="1007" type="pointer"/>
<user id="1008" type="pointer"/>
<user id="1009" type="pointer"/>
</users>
</group>
<group name="support">
<users>
<user id="1010" type="pointer"/>
<user id="1011" type="pointer"/>
<user id="1012" type="pointer"/>
<user id="1013" type="pointer"/>
<user id="1014" type="pointer"/>
</users>
</group>
</groups>
</domain>
</include>
En la línea 1 configuramos el dominio de este grupo de extensiones (default). Si no necesitamos tener mas de un dominio dejamos la línea como está.
La línea 2 define como será la sintaxis de la llamada para este grupo de extensiones.
En la línea 3 se define que las llamadas serán grabadas en modalidad estéreo
La línea 4 define que si una llamada no tiene éxito será transferida a una operadora
Línea 5 el nombre del grupo de extensiones
Línea 6 lee todos los archivos xml en la carpeta default (todas las configuraciones de las extensiones)
Desde la línea 7 empieza la configuración de los grupos de extensiones. Ejemplo: al grupo sales pertenecen las extensiones 1000,1001,1002,1003,1004. Este tipo de llamadas se definen en el dialplan. Llamando el grupo sales timbraran las cinco extensiones contemporáneamente.
Ahora podemos empezar a configurar nuestros softphones.
Para X-Lite:
Podemos añadir en contacts las demás extensiones para ver cuando estén conectadas. Miren en la imagen que sigue:

Y podemos controlar quienes está hablando y con quienes:

Y cosa que me ha asombrado más aun es que podemos chatear con las demás extensiones (cheverisimo!!!!). Parece que por fin el procolo SIMPLE por algo sirve
Si quieres hacer comentarios o correcciones a este escrito, bienvenidos :)
Chao
Comentarios
s/FreeSwitch/FreeSWITCH/ ;p
Hola :) me parece excelente tu blog. Sólo cambia la entradas donde sale FreeSwitch por FreeSWITCH.
- korihor
Gracias por el consejo
Gracias por el consejo. Lo empezaré a hacer.
Un saludo y hasta pronto :)
Chao
¿Cómo hacer para usar una cuenta ip ya existente?
Saludos, tengo una interrogante, yo poseo un número telefónico IP de un proveedor de mi ciudad, también tengo las credenciales necesarias (dirección IP del servidor SIP y el respectivo password de mi número). Si yo quisiera que cualquiera de las extensiones de FreeSWITCH (de la 1000 a la 1019) pudiese realizar llamadas "reales" utilizando la "cuenta ip" que ya poseo (me refiero a mi número real) ¿qué debo hacer?.... Bien, debo aclarar que tampoco quiero que me den la solución ya cocinada mientras yo duermo la siesta, noooo, he estado leyendo en internet, revisando las configuraciones y haciendo mis pruebas y tengo alguna idea vaga de qué debería hacerse, y las detallo a continuación:
Debo crear un "profile" para estas credenciales "reales" que tengo en "...INSTALACION_FS/conf/sip_profiles/nuevo_profile/default.xml".
Modificar el archivo default.xml en la ruta de "...INSTALACION_FS/conf/dialplan/" para que en lugar de un destino "local" de freeSWITCH, pueda utilizar el profile anterior y salir hacia una llamada real (para eso se usa el atributo [ action application="bridge" data="sofia/nuevo_profile/$1@direcccion_ip" ] )
No se si he logrado preguntarlo de la mejor forma, pero simplemente quisiera que mi freeSWITCH puediera hacer llamadas reales con las credenciales de un proveedor de voIP real.
Espero puedan ayudarme, y si no lo he dejado claro, díganme y lo trato de plantear más claro.
redbaron
Sip Provider
Primero debes configurar el "gateway" sip en tu freeSSWITCH. Para hacerlo puedes mirar esta pagina del wiki de FreeSWITCH http://wiki.freeswitch.org/wiki/SIP_Provider_Examples donde hay muchos ejemplos y quizás también él de tu proveedor.
Luego en el dialplan (miras los ejemplos) debes decirle a FreeSWITCH que por cada numero que empiece, por ejemplo, por 0, todas las llamadas vayan dirigidas e ese proveedor.
Por ultimo tienes que definir cuales extensiones tienen acceso a esa parte del dialplan (si no me acuerdo mal debes modificar y/o mirar el archivo default.xml en /usr/local/freeswitch/conf/directory
Cualquier logro o pregunta, aquí estamos para leerte
Chao
Seguimiento Sip Provider
Buenos días admin, lamento no haber escrito antes pero estuve enfermo y con incapacidad.... pero ya estoy mejor y pude probar tu sugerencia y efectivamente tuve algunos progresos, sin embargo aún no he logrado hacer que la llamada se concrete. He aquí lo realizado:
Agregué a mi proveedor en la ruta ...INSTALACION_FS/conf/directory/default/nuevoproveedor.xml
El contenido de ese XML es la siguiente:
<include>
<gateway name="nuevoproveedor">
<param name="username" value="22222222"/>
<param name="realm" value="x.x.x.x"/>
<param name="password" value="clave"/>
<param name="register" value="true"/>
</gateway>
</include>
Al parecer, se esta registrando bien, y lo he probado tanto en la ruta mencionada arriba como en ...INSTALACION_FS/conf/sip_profiles/external/nuevoproveedor.xml. Supongo yo que así es porque en un inicio, estaba colocando mal el "password" y el log de freeSWITCH me lanzaba una advertencia donde me indincaba que no habia podido registrar al proveedor, una vez corregí la contraseña y no hubo más advertencias.
Ahora, mi problema es la edición del archivo ...INSTALACION_FS/conf/dialplan/default.xml, ya que no tengo del todo claro qué debo colocar en la línea action application:
<extension name="nuevoproveedor">
<condition field="destination_number" expression="^(\d{8})$">
<action application="bridge" data="sofia/gateway/nuevoproveedor/$1"/>
</condition>
</extension>
Me he asegurado que la llamada que yo marco desde un cliente SIP en efecto sea "interceptada" por la definición de extensión que he colocado arriba (lo he visto en el modo debug del log), pero tal como lo he puesto, el error que me indica es el siguiente:
sofia_outgoing_channel() Invalid Gateway
y más abajo arroja este:
Cannot create outgoing channel of type [sofia] cause: [INVALID_NUMBER_FORMAT]
Ya he probado con otras expresiones para el atributo data del elemento action application, pero no quiero tampoco saturar con tantos casos. Simplemente creo que no sé qué debo poner allí, a pesar de que he visto los ejemplos, trato de colocar cosas semejantes a mi caso y nada. Tal vez me puedas echar la mano con este paso.
SIP Provider
Primero tienes que averiguar como quiere tu proveedor que marques los números. Uno que uso me pide que siempre ponga el 00 + código país + numero.
Luego mira la linea:
si no me acuerdo mal eso significa que cualquier numero de ocho cifras será procesado por el gateway que indicaste. Si marcas un numero de más de ocho cifras te sale el error.
pon el valor que necesitas para marcar y deberías solucionar el problema
Más info en cuanto pueda revisar los archivos de configuración de freeswitch.
Cuéntame si resolviste.
Chao
Seguimiento 2, SIP Provider
Gracias por tu pronta respuesta, fijate que el provedor de VoIP con el que estoy probando es un proveedor local de mi país, la llamada de prueba que deseo hacer es una llamada local, es por eso que mi intención era atrapar llamadas cuyo dnis sea 8 dígitos (cantidad de dígitos de los números locales en mi país). He utilizado esas credenciales en un cliente de softphone (Wengophone) y pude hacer la llamada local a un número de 8 dígitos sin problema, así que yo pensaría humildemente que esa parte esta bien (pero si aún así estoy ignorando algo, por favor me indicas).
Ahora, si la parte de la "captura" del número de destino estuviese correcta, el otro problema quedaría en el archivo "default.xml" dentro de dialplan. En la configuración que agruegué, la línea que dice:
action application="bridge" data="sofia/gateway/nuevoproveedor/$1"
Debe de estar mal (estoy convencido de eso), en primer lugar porque no tengo idea de qué he puesto allí (me he guiado por los ejemplos pero no entiendo la regla :P), y luego porque el primer mensaje de error en el log me dice:
sofia_outgoing_channel() Invalid Gateway
Por lo tanto yo entiendo que el gateway tampoco puede resolverlo debido a que no he colocado bien la línea que te comenté, antes de que ocurra el error del formato del número.
Gracias por el tiempo que dedicas a responder y a ayudar.
redbaron
Re: Seguimiento 2, SIP Provider
Se me ocurren dos cosas:
- la extensión de donde marcas tiene acceso a esa parte del dialplan?
- la linea donde FS hace da puente entre tu extensión y el gateway está bien. Lo único que se me ocurre es que el nombre que pusiste no corresponde al nombre que usaste para la configuración del gateway (aunque en la configuración que pegaste parece que si).
En cuanto pueda volveré a instalar FS (me he cambiado de servidor) y luego te cuento.
Chao
¡¡¡ SIP PROVIDER RESUELTO !!!
Buen día admin, te escribo para agradecerte el tiempo que tuviste en contestar mis preguntas, te comento que finalmente he resuelto mi problema y a continuación detallo la configuración final con la que todo funcionó:
Agregué un archivo de configuración para mi "gateway" en ...INSTALACION_FS/conf/sip_profiles/external/nuevoproveedor.xml (Lo he colocado en external porque según lo que entendí, allí van los gateways para poder efectuar llamadas salientes).
El contenido de éste archivo es el siguiente:
<include>
<gateway name="nuevoproveedor">
<param name="username" value="22222222"/>
<!-- Donde x.x.x.x es la ip o nombre de dominio de mi proveedor -->
<param name="realm" value="x.x.x.x"/>
<param name="password" value="clave"/>
<param name="register" value="true"/>
</gateway>
</include>
Luego, en el archivo ...INSTALACION_FS/conf/dialplan/default.xml, agregué la siguiente porción de código:
<extension name="nuevoproveedor">
<condition field="destination_number" expression="^(\d{8})$">
<action application="bridge" data="sofia/gateway/nuevoproveedor/$1"/>
</condition>
</extension>
Donde la expresión ^(\d{8})$, significa que interceptará todas las llamadas cuyo número de destino tenga ocho dígitos (esto es válido para mi caso, ya que la llamada que deseo hacer es local y los números locales de mi país son de 8 dígitos). También debo apuntar que "$1" es una variable que contiene todo el número digitado por el usuario que haya sido capturado por la expresión ^(\d{8})$.
Eso fue todo lo que modifiqué, no tuve que indicar las extensiones que usarían esa parte del dialplan ya que lo único que me interesaba era que cualqueir extensión registrada en FS pudise "salir" con ese gateway.
Usé un Wengophone (un cliente open source de softphone) y registré en él una cuenta con la extensión 1000 que trae de prueba FS, marqué el número local de 8 dígitos y listo, funcionó perfectamente.
Muchas gracias y cualquier avance o consulta estaré posteando de nuevo, muy buena web.
redbaron
SIP provider - donde estaba el error?
Me alegra que solucionaste.
Pero donde estaba el error?
Saludos
SIP provider - el error estaba en...
Ah, el error estaba en que había cambiado en varias ocasiones la ubicación de mi archivo de configuración del proveedor sip nuevoproveedor.xml, y la ultima prueba fallida la habia realizado en la ruta …INSTALACION_FS/conf/directory/default/nuevoproveedor.xml. Después que me inidicaste que la línea del dialplan action application=”bridge” data=”sofia/gateway/nuevoproveedor/$1″ estaba bien, solo devolví mi archivo a la ruta …INSTALACION_FS/conf/sip_profiles/external/nuevoproveedor.xml y funcionó.
Ahora me asalta otra duda, según la documentación (en la wiki oficial), en conf/directory también se colocan configuraciones (y hasta tienen ejemplos) pero no me queda claro cuándo configurarlos en conf/directory y cuándo en conf/sip_profiles, por mi parte pienso que éste ultimo directorio tiene un nombre más "correcto" (a parte de que allí es donde me ha funcionado).
Gracias de nuevo, ya probaré algunas otras cosas.
hola amigos
Disculpen tengo una pregunta, tengo dos cuentas de proveedores de Sip y lo quiero hacer es que cuando una extension llame para salientes verifique si esta ocupado el proveedor uno utilize el proveedor dos, si me pueden ayudar les agradecere mucho
2 proveedores
Una opcion es usar la variable "continue on fail":
http://wiki.freeswitch.org/wiki/Variable_continue_on_fail
gracias Admin
probare en este momento y les comento, cualquier cosa que pueda ayudar igual con gusto.
2 proveedoes
Disculpa la ignorancia pero donde tendria que poner eso, eso va en el dialplan cuando tiene que enlazarlo con el sip provider o en algun otro lugar..
y disculpas por la pregunta pero ya le he dado vuelta al asunto y no he podido
Gracias Admin
Ya funciono, estuve leyendo y al final eso iba en la parte del DIALPLAN , gracias por la ayuda, cualquier cosa que te pueda ayudar con gusto
De nada
De nada :)
ayudar? Muchas cosas pero por ahora me conformaria si ilustraras como configuraste el dialplan para que los demas puedan implementarlo si lo necesitan.
Para poder escribir un articulo si te registras tendrás tu blog personal donde escribir.
Saludos.
hola admin
estoy intentando poner todo el codigo del dialplan pero no aparece no se si puedas ver como hacer para que aparesca en el bloq, ya intente dos veces pro no se ve no se porque razon, si quieres te lo envio a tu correo y tu lo pones porfavor, disculpas por lo inconvenientes
Resuelto
Hola,
a mi me había pasado lo mismo y todavía no pude arreglarlo.
De todas formas ya puse una nueva entrada en el blog con tu aporte.
Muchísimas gracias.
Problema con reenvio de llamadas
Cordial saludo a todos los miembros de este foro. Alguien me puede ayudar con lo siguiente:
Alguien me esta llamando y no le contesto (o estoy ocupado, etc etc) y quiero que la llamada se reenvie hacia otra extension de freeSwitch.
Probe cambiando el archivo que aparece en freeswitch/conf/directory/default.xml
en la linea que dice
operator lo cambie por reenvio
y dentro de del arhivo FreeSWITCH/conf/dialplan/default.xml agregue el siguiente codigo:
//extension name="reenvio">
//condition field="destination_number" expression="^\*45$">
//action application="set" data="call_timeout=30"/>
//action application="set" data="continue_on_fail=true"/>
//action application="set" data="hangup_after_bridge=true"/>
//action application="bridge" data="sofia/${domain}/1000%${domain}"/>
///condition>
///extension>
Que lo encontre en la pagina freeSWITCH.org.
Alguien me puede echar una manito. Gracias
Nota... reemplazar // por menor que... la pagina no me deja escribirlo
Re: Problema con reenvio de llamadas
Intenta sostituir la linea:
//action application="bridge" data="sofia/${domain}/1000%${domain}"/>
con:
action application="transfer" data="1001 XML default"
1001 es la extension donde quieres reenviar la llamada.
Cuéntanos
Saldos
freeswitch como softphone
Hola amigos, necesito en un sistema embebido tener un softphone, he tenido probelmas compilando los softphone tradicionales, asi que me decidi en trabajar con freeswitch, pero no he encontrao buena informacion de como configurarlo para que sirva solo como softphone, lo conectaria a un servidor asterisk casero. si pueden ayudarme seria de gran ayuda, gracias
Re: freeswitch como softphone
En FreeSWITCH se utiliza el modulo mod_portaudio (siempre y cuando en el pc haya una tarjeta de sonido) para hacer llamadas. El problema es que no creo que se pueda conectar a un servidor externo.
De hecho se utiliza (como si fuera un softphone) para hacer llamadas a extensiones (endpoints) configuradas en el FreeSWITCH mismo.
Otra cosa es que configures FreeSWITCH de modo che pueda llamar las extensiones configuradas en Asterisk.
Saludos
Hola, gracias por
Hola, gracias por responde.
Si habia mirado el modulo mod_portaudio y lo pensaba usar en una plataforma como un cliente de un servidor externo de asterisk, pero dentro de una red local, es decir no a un servidor en la nube de internet..........
Eso es viable!?
Gracias
Re: Hola, gracias por
Hola,
si logra interconectar asterisk con FreeSWITCH de forma que puedas llamar las extensiones de asterisk desde freeSWITCH, pues te funcionará.
Otras formas no veo.
Mira si este articulo te sirve:
http://www.freeswitch.es/node/61
Saludos
Enviar un comentario nuevo