El precedente articulo hemos visto como configurar Asterisk como Gateway en FreeSWITCH y como, desde FS, hacer llamadas usando las troncales registradas en Asterisk. Hoy veremos algo parecido. Como llamar desde Asterisk las extensiones FreeSWITCH.
La configuración es bastante sencilla.
En FreeSWITCH configuramos la extensión 1002 (ejemplo) de esta forma:
<include>
<user id="1002">
<params>
<param name="password" value="fulano"/>
<param name="vm-password" value="1234"/>
</params>
<variables>
<variable name="toll_allow" value="domestic,international,local"/>
<variable name="accountcode" value="1002"/>
<variable name="user_context" value="default"/>
<variable name="nibble_account" value="1002"/>
<variable name="effective_caller_id_name" value="Asterisk 1002"/>
<variable name="effective_caller_id_number" value="1002"/>
<variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>
<variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>
<variable name="callgroup" value="techsupport"/>
</variables>
</user>
</include>
Luego añadimos estas lineas al acl.conf.xml
nano /usr/local/freeswitch/conf/autoload_configs/acl.conf.xml
<list name="asterisk" default="deny">
<node type="allow" cidr="ipasterisk/32"/>
</list>
En ipasterisk ponemos el IP de Asterisk
Ahora modificamos otro archivo de FS:
nano /usr/local/freeswitch/conf/sip_profiles/internal.xml
buscamos esta linea:
<param name="apply-inbound-acl" value="domains"/>
y la cambiamos así:
<param name="apply-inbound-acl" value="asterisk"/>
Recargamos la configuracion de FS:
/etc/init.d/freeswitch restart
Pasamos a Asterisk. Añadimos al sip.conf de asterisk las siguientes líneas:
nano /etc/asterisk/sip.conf
en la parte register:
register => 1002:fulano@sip.freeswitch.org/1002
y en la parte de las extensiones:
[1002]
type=friend
context=from-fs
host=sip.freeswitch.org
fromdomain=sip.freeswitch.org
fromuser=1002
username=1002
secret=fulano
callerid=Asterisk PBX <1002>
qualify=yes
canreinvite=no
insecure=port,invite
dtmfmode=rfc2833
nat=no
disallow=all
allow=g729
allow=alaw
allow=ulaw
call-limit=10
Guardamos los cambios y pasamos al dialplan:
nano /etc/asterisk/extensions.conf
en nuestro contexto local añadimos:
;LLamadas a FreeSWICTH
exten => _1XXX,1,Dial(SIP/1002/${EXTEN})
exten => _1XXX,n,Hangup
De esta forma podremos llamar todas las extensiones predefinidas en FreeSWITCH (para los gateway no he hecho pruebas todavía).
Actualizamos las configuraciones desde la consola de asterisk:
asterisk –rvvvvvvvvvvvv
CLI> sip reload
CLI> dialplan reload
Desde cualquier extensión asterisk llamamos cualquier extensión FreeSWITCH
Hagan sus pruebas y me cuentan.
Chao
Comentarios
Si no funciona
He notado que ultimamente no me funcionaba este tipo de configuración.
Despues de un "largaaaa..." mirada a los logs de FS me di cuenta donde estaba el error.
Tenemos que modificar una linea en el dialplan default de FS:
nano /usr/local/freswitch/conf/dialplan/default.xml
en este bloque:
<extension name="Local_Extension">
<condition field="destination_number" expression="^(10[01][0-9])$">
<action application="set" data="dialed_extension=$1"/>
<action application="export" data="dialed_extension=$1"/>
<!-- bind_meta_app can have these args <key> [a|b|ab] [a|b|o|s] <app> -->
<action application="bind_meta_app" data="1 b s execute_extension::dx XML features"/>
<action application="bind_meta_app" data="2 b s record_session::$${base_dir}/recordings/${caller_id_number}.${strftim$
<action application="bind_meta_app" data="3 b s execute_extension::cf XML features"/>
<action application="set" data="ringback=${it-ring}"/>
<action application="set" data="transfer_ringback=$${hold_music}"/>
<action application="set" data="call_timeout=60"/>
<!-- <action application="set" data="sip_exclude_contact=${network_addr}"/> -->
<action application="set" data="hangup_after_bridge=true"/>
<!--<action application="set" data="continue_on_fail=NORMAL_TEMPORARY_FAILURE,USER_BUSY,NO_ANSWER,TIMEOUT,NO_ROUTE_DE$
<action application="set" data="continue_on_fail=true"/>
<action application="hash" data="insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}"/>
<action application="hash" data="insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}"/>
<action application="set" data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}$
<!--<action application="export" data="nolocal:sip_secure_media=${user_data(${dialed_extension}@${domain_name} var si$
<action application="hash" data="insert/${domain_name}-last_dial/${called_party_callgroup}/${uuid}"/>
<action application="bridge" data="user/${dialed_extension}@${domain}"/>
<action application="answer"/>
<action application="sleep" data="1000"/>
<action application="voicemail" data="default ${domain_name} ${dialed_extension}"/>
</condition>
</extension>
Modificamos la linea en negrita como aparece. En lugar de domain_name usamos domain.
De esta forma todo funciona perfectamente.
Saludos
Problema 407 proxy authentication required
Cordial saludo.
Estoy probando la conexion de sailfin con freeSWITCH
Los softphone estan conectados con FS y redirijo todo el trafico hacia sailfin
Cuando hago una llamada desde un Xlite a otro... no tiene problemas.... se envia el INVITE hacia Sailfin y sailfin envia el invite hacia FS y se establece la llamada entre los softphone
Pero tengo el servicio de "click to dial" en sailfin y este debe generar los INVITE, se envia el INVITE y FS responde: error 407 proxy authentication required
Probe habilitando la siguiente linea
En el archivo internal.xml dentro de sip_profiles
Gracias por su ayuda
..
Tengo exactamente el mismo problema, cual linea modificaste?, pudiste solucionarlo?
alejo
Este sirve para llamar desde asterisk a freeswitch, pero tambien desde freeswitch hacia asterisk desde la extension 1002 ¿?¿
Re: alejo
Exacto, sirve para llamar de asterisk a FreeSWITCH y de FreeSWITCH a Aasterisk.
Debería revisar mi configuración para ver si he cambiado algo pero en este momento está funcionando sin problemas con audio perfecto.
Saludos
MMM, es claro que en la parte
MMM, es claro que en la parte de "apply_inbound_acl" ps se agrega el servidor asterisk para las llamadas entrantes (inbound), pero donde exactamente permite llamar desde una extension en freeswitch hacia el servidor asterisk?
FreeSWITCH to Asterisk
Tienes toda la razón.
A ese articulo le falta una parte.
Primero configuramos en FreeSWICTH que todas las llamadas que empiezan con un 2 la direccionamos a Asterisk (si la extensiones internas de Asterisk empiezan todas por el numero 2)
en la carpeta /usr/local/freeswitch/conf/dialplan
modificamos el archivo 01_example.com.xml
y añadimos:
<extension name="Asterisk">
<condition field="${toll_allow}" expression="international"/>
<condition field="destination_number" expression="^(2\d+)$">
<action application="set" data="effective_caller_id_number=${outbound_caller_id_number}"/>
<action application="set" data="effective_caller_id_name=${outbound_caller_id_name}"/>
<action application="bridge" data="sofia/gateway/asterisk/$1"/>
</condition>
</extension>
Luego, siempre en FreeSWITCH configuramos un gateway que apunte a una extension de Asterisk:
nano /usr/local/freeswitch/conf/sip_profiles/external/asterisk.xml
Y ponemos:
<include>
<gateway name="asterisk">
<!--/// account username *required* ///-->
<param name="username" value="2600"/>
<!--/// auth realm: *optional* same as gateway name, if blank ///-->
<param name="realm" value="sip.voztovoice.com"/>
<!--/// username to use in from: *optional* same as username, if blank ///-->
<!--<param name="from-user" value="cluecon"/>-->
<!--/// domain to use in from: *optional* same as realm, if blank ///-->
<param name="from-domain" value="sip.voztovoice.com"/>
<!--/// account password *required* ///-->
<param name="password" value="1111"/>
<!--/// extension for inbound calls: *optional* same as username, if blank ///-->
<param name="extension" value="2600"/>
<!--/// proxy host: *optional* same as realm, if blank ///-->
<param name="proxy" value="sip.voztovoice.com"/>-->
<!--/// send register to this proxy: *optional* same as proxy, if blank ///-->
<!--<param name="register-proxy" value="mysbc.com"/>-->
<!--/// expire in seconds: *optional* 3600, if blank ///-->
<param name="expire-seconds" value="3600"/>
<!--/// do not register ///-->
<!--<param name="register" value="false"/>-->
<!-- which transport to use for register -->
<param name="register-transport" value="udp"/>
<!--How many seconds before a retry when a failure or timeout occurs -->
<param name="retry-seconds" value="30"/>
<!--Use the callerid of an inbound call in the from field on outbound calls via this gateway -->
<!--<param name="caller-id-in-from" value="false"/>-->
<!--Per togliere gw+ nel contact del dialogo SIP -->
<param name="extension-in-contact" value="true"/>
<!--extra sip params to send in the contact-->
<!--<param name="contact-params" value="tport=tcp"/>-->
<!--send an options ping every x seconds, failure will unregister and/or mark it down-->
<param name="ping" value="25"/>
</gateway>
</include>
Para terminar configuramos la extension 2600 en asterisk:
[2600]
type=friend
secret=1111
host=dynamic
language=es
accountcode=2600
callerid=FreeSWITCH <2600>
mailbox=2600@default
disallow=all
allow=ulaw
allow=alaw
nat=no
call-limit=10
Reiniciamos los dos servidores y hacemos las pruebas.
Saludos