Conectar Asterisk a FreeSWITCH

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

Distribuir contenido Distribuir contenido