Prográmate un “SIMPA” telefónico con una Raspberry Pi y Asterisk

Ahorro en la factura de teléfono con Asterisk y Raspberry Pi“Se hace saber a los dueños del bar, que ya vendrán los Reyes Magos a pagar”. Esta es la frase que utilizaban los mozos de mi pueblo anunciando el “zenit” de la fiesta para temor de unos hosteleros acostumbrados a esta “confianza” de unos fieles clientes, que no sólo les hacían partícipes de la fiesta, sino protagonistas de la misma.

No pretendemos desde aquí gastarle ninguna broma a nadie ni tampoco animar a dejar de pagar un servicio. Simplemente queremos ayudarte a “exprimir” y aprovechar el que tienes contratado. Si repasamos el mercado de la telefonía para particulares en sus dos vertientes (móvil y fija), y salvaguardando las singularidades de cada empresa y tarifas disponibles, observamos unos patrones comunes.

El primero de todos, es la inclusión generalizada de las llamadas a fijos (y cada vez más a móviles) con la tarifa de Internet en telefonía fija. Del mismo modo, en telefonía móvil, es difícil encontrar una tarifa que no ofrezca un mínimo de MB para navegar por Internet.

Bien. Combinemos estos dos patrones y hagamos un usuario “tipo”, el cuál, contaría con una línea telefónica en su domicilio con Internet (llamadas incluidas) y que dispone de un teléfono móvil, con una línea que al menos le incluye unos MB para realizar llamadas. ¡Sí, sí! Has leído bien, “unos MB para realizar llamadas”. Eso es lo que pretendemos. Aprovechar esos MB de navegación de nuestra línea móvil para realizar llamadas a través de nuestra línea fija. ¡Nuestro “SIMPA”!

a

¿Qué necesitamos?

1 Raspberry Pi
1 Gateway FXO
1 Softphone compatible Android/IOS
1 Cliente OpenVPN compatible Android/IOS

 

esquema_simpa_rpi

Esquema de nuestro “simpa” telefónico con Raspberry Pi y Asterisk

Fase I-Instalación de Asterisk 11 en Raspberry Pi

Aunque existen distribuciones basadas en Raspibian con Asterisk preinstalado, nosotros recomendamos la compilación directa en la Raspberry, ya que al tratarse de un equipo de recursos limitados, vamos a ser lo más minimalistas posibles, de cara a dedicar la mayor parte de los mismos a nuestra configuración.

 

Fase II-Parametrización básica del Gateway Grandstream HT 503

En primer lugar le asignamos una ip fija de nuestra red local de manera que la Raspberry Pi pueda “localizarla” en cualquier caso.

basic_settings_gw_IP

Nos dirigimos a la pestaña “FXS” y elegimos el Caller ID Scheme “ETSI-FSK prior to ringing with RP”.

FXS_settings_CID

Por su parte, en la pestaña “FXO” el Caller ID transport será “Relay via SIP from”.

FXO_settings_CID

En la pestaña “FXO” nuevamente, debemos seleccionar “RFC2833” como opción principal (luego tendremos que hacer lo propio en la Raspberry Pi)

FXO_settings_DTMF

Una utilidad añadida que nos ofrece nuestro servidor de telefonía “at home” es la posibilidad de recibir todas las llamadas en nuestro smartphone cuando estemos fuera de casa, a través del softphone. Para ello, asociamos una extensión (Ej. 500) a la que serán reenviadas las llamadas que entran por la línea fija, una vez superado un timeout establecido por nosotros. Esto podemos hacerlo en la pestaña “Basic Settings”

basic_settings_fordward

a

Fase III-Configuración trunks RPi-Gateway y dialplan

Ya tenemos la Raspberry Pi con Asterisk instalado, así como el Gateway correctamente conectado a red local y a la línea analógica por donde “sacaremos” nuestras llamadas provenientes desde la RPi (que a su vez provienen del softphone instalado en nuestro smartphone). Para ello, necesitamos que la Raspberry y el Gateway “se vean”. ¿Cómo? Creando un trunk SIP entre ambos. En primer lugar, damos de alta al Gateway en la RPi

 

[gateway]
type=peer
host=10.10.0.80
context=desde-gateway
qualify=yes
disallow=all
allow=alaw
insecure=port,invite
port=5062
dtmfmode=rfc2833
trunk=yes
directmedia=yes

a

Por su parte, en el gateway a través de su portal web, podemos indicar el servidor SIP de registro (la Raspberry), así como el usuario. Para ello, nos dirigimos a la pestaña “FXO” e introducimos los valores.

trunk

a

Creamos un dialplan a nuestro gusto. Nosotros optamos por uno sencillo que diferencia las llamadas a fijos de las llamadas a móviles. En el caso de las llamadas a móviles, hemos optado por crear una pequeña agenda que utilizaremos para comprobar si el número marcado está en la misma. En caso afirmativo, la llamada mostrará  nuestra numeración saliente (callerid(num). En caso contrario, nos presentamos con el callerid personalizado “612345678” (el funcionamiento de ésta opción dependerá de nuestro operador).

 

 

Fase IV-Túnel openVPN Android-RPi y conexión softphone Android

Conectar un softphone al Asterisk instalado en nuestra Raspberry requiere que tengamos acceso a ésta última desde una red externa (la de nuestro operador móvil) o bien la de un “generoso” 🙂 punto de acceso WIFI. En cualquier caso, algo inseguro si no tomamos las medidas adecuadas. Aquí entra en juego openVPN. Nuestro smartphone estará en la red local de la RPi, en nuestra casa y el resto del mundo.

a

[RPi]

Instalamos OpenVPN y creamos el cliente “simpa”, que será el que usemos para levantar el túnel desde nuestro smartphone. La configuración básica sería:

a

[Smartphone]

La configuración de OpenVPN para Android es muy sencilla. Tan sólo tenemos que crear un nuevo perfil pinchando en el icono “+” superior a la derecha. En nuestro caso, lo llamamos “Simpa”. Una vez creado, elegimos el tipo “Usuario/Contraseña+Certificados” e importamos los certificados “ca.crt” del servidor y el certificado del cliente creado en la RPi “simpa.crt”. A partir de ahora, ya podemos intentar levantar el túnel contra nuestra Raspberry.

OpenVPN_for_Android

Una vez finalizado, ya tendremos conectividad con la Raspberry a través del túnel OpenVPN. El siguiente paso consiste en instalar un softphone para nuestro smartphone y crear una cuenta en Asterisk para que podamos registrarlo. Comencemos con esto último.

[RPi]

 

[movil]
type=friend
context=desde-usuarios
qualify=yes
disallow=all
allow=alaw
host=dynamic
secret=********

a

Nosotros hemos probado varios softphones y hemos encontrado especialmente interesantes CSipSimmple y Linphone. Ambos son libres (GPL) y ofrecen numerosas prestaciones. Una vez instalado, tan sólo es necesario “Añadir cuenta”  y rellenar los datos relativos a nuestra conexión:

Nombre de la cuenta: SIMPA

Servidor: 10.10.0.180

Nombre de usuario: movil

Password: ******

Una vez finalizado, ya podremos registrar el softphone contra la Raspberry Pi a través de la VPN y realizar nuestras llamadas “gratuitamente” desde nuestro smartphone saliendo por la línea fija.

Como hemos comentado anteriormente, puede interesaros que las llamadas que no sean atendidas en nuestra línea fija pasados X segundos, sean derivadas a nuestro softphone (y por tanto a nuesto smartphone cuando estemos fuera). Para ello, habíamos reservado y configurado la extensión 500 en el gateway. Ahora, tenemos que añadirla en el dialplan.

 

 

Fase V-Pruebas conectividad y funcionamiento

Durante nuestras pruebas hemos podido comprobar que esta sencilla configuración es operativa en gran cantidad de escenarios. Como es natural, el funcionamiento correcto está condicionado por la velocidad de datos de nuestra línea móvil. Tanto en los casos de conectividad 4G, 3G y E las llamadas se cursan sin problemas. En otras palabras, podremos sustituir las llamadas a través de la línea móvil en la mayor parte de los casos. Nuestra experiencia desde que lo hemos configurado, nos revela que aproximadamente el 80% de las llamadas las realizamos a través de la RPi.

 

VoIP VS Sistema tradicional

Para los más escépticos, os aportamos el proyecto en números para que cada uno pueda realizar sus propias conclusiones. Está claro que la implantación del escenario requiere una pequeña inversión inicial, así como un pequeño mantenimiento. Volvamos al planteamiento original en el que definíamos un usuario tipo con un Smartphone, línea móvil y línea fíja con llamadas incluidas. La evolución en las tarifas a móviles, se está orientando a tarifas planas, sopena de un correspondiente aumento en la factura. Nuestro análisis de los principales proveedores de telefonía móvil, muestra que podemos encontrar tarifas planas a partir de 20€ mensuales añadidos a la línea básica (incluído unos MB de navegación). Tomemos este dato (el más económico) para realizar nuestro estudio.

Importe anual tarifa plana móvil

20€x12 meses = 240€ anuales

Importe proyecto RPi+Gateway

Inversión inicial

1 RPi: 39,90€

1 Gateway FXO: 60€

Total: 99,90€

Mantenimiento

Consumo aproximado: 10 W

Importe consumo (tomando un importe de 0,22 Kwh con impuestos incluídos)

10 W x 24 horas x 365 días = 87600 W de consumo anuales

Importe anual: 87,600 x 0,22 = 19,272€

Los datos nos muestran que con lo que nos ahorramos en 5 meses amortizamos la inversión. A partir del 6 mes, el mantenimiento asciende a 1,6€ mensuales frente a los 20€ de la tarifa plana más barata. Nuevamente, encontramos una ventaja de la revolución de la telefonía IP. Ni que decir, que en todo momento estamos hablando de una sóla línea móvil. Ahora os toca a vosotros hacer números para saber cuánto ahorro implicaría para una casa en la que 3 miembros quieran apuntarse al “SIMPA” (en la mía quieren apuntarse amigos, pero ahora ya no tienen excusa para montarse uno ellos solitos 😉 )

¿Más?

Por pedir que no quede…Y puestos a ello, nos gustaría poder “ejercer” nuestro “SIMPA” aunque tengamos agotado nuestro bono de navegación de Internet o cuando estemos en zonas sin cobertura de alta velocidad. Lo ideal sería usar la línea del teléfono (la tradicional) para hablar pero “esquivando” el tarificador que luego nos llega en la factura. Sin duda, un gran reto, pero la VoIP tiene recursos para ello y en Irontec, que somos muy “SIMPAticos” vamos a explicártelo. Eso sí, será en un próximo post.

To be continued…



¿Te gusta este post? Es solo un ejemplo de cómo podemos ayudar a tu empresa...
Sobre Pedro Cadavid

Algún día hablaré. De momento, sólo escribo (entre líneas). ¿Me lees?

1 Comentario

¿Por qué no comentas tú también?


  • Muy bueno el post. Se me escapa un detalle:

    El servidor vpn de la raspberry tiene que estar accesible desde fuera de la red local para que esto funcione, tendríamos que hacer nat desde el router del proveedor de internet hacía la raspberry pi, ¿verdad? ¿O me he perdido algo?

    Aitzol Hace 2 años Responde


    • Hola Aitzol,

      ¡Muchas gracias por tu pregunta! En lo que respecta al servidor VPN tienes varias posibilidades:

      Que la RPi tenga una IP pública y no tengas que redirigir nada.

      Que la RPi tenga una IP de la LAN por lo que tendrías que redirigir el puerto en el que configures el servicio openVPN desde el router hacia la RPi.

      Que utilices otro equipo (o el propio router si tiene este servicio) como servidor openVPN y llegues a la RPi con las rutas de la LAN.

      pcadavid Hace 2 años Responde


      • Ok, y ¿podrías recomendar algún gateway?

        Gracias

        Aitzol Hace 2 años Responde


        • Aitzol,

          Siendo para una instalación sencilla como es el caso, cualquier modelo básico cumplirá de sobra siempre y cuando, disponga de al menos un puerto FXS para conectar el teléfono analógico y un FXO para conectar a la línea telefónica. El que mencionamos en el post es el Grandstream HT 503 que cumple de sobra.

          pcadavid Hace 2 años Responde


  • Mil disculpas…

    No me había dado cuenta de la referencia al gateway (he pasado directamente a leer la sección sin pararme en el título )

    aitzol Hace 2 años Responde


  • Impresionante el post!! gran nivel!!, he disfrutado leyendolo, lástima que mi tráfico de llamadas lo genero desde la calle, llamando a moviles, por lo que no lo veo para mi (de momento).

    juangmuriel Hace 2 años Responde


    • Juan,

      Muchas gracias. Precisamente un elevado número de llamadas desde la calle y a móviles despertó la idea del “SIMPA” 😉

      pcadavid Hace 2 años Responde


  • Hola Pcadavid muy buen articulo he podido instalar asterisk sobre debian hasta ahí todo bien.Pero tengo varias preguntas ¿tengo que tener linea de teléfono fijo para esto?.
    Te comento lo que tengo y lo que quiero:

    -Lo que tengo :
    —————————————————————-
    Teléfono fijo vía VOIP conectado a mi red local que sale al exterior por conexión de fibra óptica.Ya tengo un “Gateway” (creo yo) que es un aparato que hace de intermediario entre mi router el teléfono fijo convencional y esta conectado(me supongo) a una centralita PBX IP que son los que nos facturan este tema 20€/mes.Con mala calidad de audio y algunos cortes.

    -Lo que quiero:
    —————————————————————–
    Teléfono fijo via VOIP conectado a mi red local teniendo yo la centralita PBX IP(Asterisk) y si pudiera ser con una buena calidad de audio y sin cortes.Ademas si pudiera hacer lo que dices de llamar mediante VozIp a través de el internet de mi móvil seria increíble.Todo esto sin una linea convencional telefónica claro está. ¿Es esto posible?
    En cuanto al número de teléfono fijo supongo que tendría que pagar una tasa anual o mensual por tenerlo ¿No?

    Espero no haberme alargado en exceso,gracias.

    Saludos

    Miguel Hace 2 años Responde


    • Miguel,

      Por lo que comentas, tienes un Gateway FXS, el cuál, te permite usar tu teléfono analógico como si se tratara de uno IP. De ésta forma, estará conectado a través de la línea de Internet a la centralita del operador de VoIP que te está ofreciendo el servicio. Si el dispositivo es tuyo, puedes configurarlo para conectarlo a tu instalación de Asterisk.

      En el post comentamos cómo aprovechar las llamadas incluidas con nuestra tarifa ADSL o fibra que ofertan la mayoría de operadores. En tu caso, entiendo que no tenéis una línea telefónica fija, sino que tan sólo la línea de acceso a Internet y un servicio de telefonía IP (con una centralita virtual y una numeración). Si es este el caso, para poder realizar llamadas usando vuestra centralita Asterisk, necesitaréis contratar con un proveedor (tal vez el mismo que tenéis lo ofrece) la numeración (si no la tenéis contratada) así como una cuenta SIP para que podáis registrar vuestra centralita con la del operador y poder así realizar llamadas VoIP. Es decir, independientemente de que contéis con una centralita “en casa”, es necesario un canal para poder sacar (y recibir) las llamadas. Si no contáis con una línea fija, como el que planteamos en el post, necesitáis contratar este servicio con un operador VoIP (lo cuál no difiere en exceso de lo que tenéis actualmente).

      Llegados a este punto, el primer paso es determinar el motivo de la mala calidad del audio. Normalmente esto es causado por problemas en la red, donde probablemente, haya pérdidas importantes de paquetes. Tal vez lo interesante sería que probaseis la conectividad con la IP de vuestro operador desde un equipo conectado en vuestra red local. Para descartar que el problema no está en ésta última, podéis probar la conectividad contra vuestro router como paso previo. Esta operación la podéis realizar con un simple ping y ver si hay pérdidas de paquetes.

      La conexión mediante openVPN a la centralita desde cualquier smartphone. Podríais hacerlo de igual modo que en el post, sólo que las llamadas las haríais usando la cuenta de VoIP que configuréis, en lugar de la línea fija.

      Un saludo.

      Pedro Cadavid Hace 1 año Responde


  • Muchas gracias por la información, es lo que estaba buscando hace mucho, supongo que al hacer llamadas desde la red como si lo hiciera del Tel fijo, podría llamar desde otro país al precio de una llamada local.

    Alejandro Hace 1 año Responde


    • Hola Alejandro,

      ¡De eso se trata! Al conectarnos vía openVPN a nuestra Raspberry, realizaremos las llamadas como si estubiésemos en casa. No importa desde dónde nos conectemos (otra ciudad, país, etc).

      Un saludo.

      Pedro Cadavid Hace 1 año Responde


  • Sabeis si puedo utilizar el router livebox de orange, en lugar del gateway ? El livebox permite conectar telefonos analogicos directamente al router para recibir las llamas de linea fija. Quiza no so seria necesario comprar un gateway. Me podeis aclarar.

    Ramon Pamies Hace 1 año Responde


    • Ramon,

      El escenario que nos planteas con el Livebox es ditinto al propuesto en el post ya que por lo que nos comentas, es probable que tu Livebox ya cuente con tecnología VoIP y en nuestro caso, usamos en gateway porque tenemos una línea analógica. Ahora bien, en tu caso, necesitarías o bien comunicar tu Raspberry con el Livebox (Ej. mediante un trunk SIP) para enviarle las llamadas (desconozco si el Livebox permite ese tipo de configuración) o bien registrar la cuenta SIP de Orange en la Raspberry (tendrías que conseguir los datos de la cuenta) para así sacar las llamadas mediante la misma.

      Pedro Cadavid Hace 12 meses Responde


  • Buen trabajo !!!

    Estoy siguiendo to procedimiento de instalacion y me da errores en la linea:

    RPi#svn checkout http://svn.asterisk.org/svn/asterisk/branches/11 [^] asterisk-11

    Que hace [^] dentro de esta linea y si se puede eliminar.

    Muchas gracias,
    Roca

    Roca Hace 12 meses Responde


  • Hola, me parece súper interesante el articulo
    Muchas gracias por tu tiempo dándonos este tipo de contenido.

    En mi caso tengo fibra óptica en casa con Vodafone, donde me instalaron un router Technicolor TC7230.
    Este método que explicas me valdría a mi también a pesar de que tengo conectado un teléfono “normal” al puerto de phone1 del router, que tengo entendido que internamente me da servicio usando la tecnología Voip, es decir, que mis llamadas de por si no son de las antiguas “analógicas”, sino que el router usa voip y de ahí me da servicio a teléfono fijo de toda la vida
    A pesar de todo esto esta configuración que comentas también me valdría, o tengo que hacer alguna otra cosa ?

    Espero que se haya entendido lo que quería preguntar 😉

    Juan Alberto Hace 11 meses Responde


    • Hola Juan Alberto,

      Tu caso es muy similar al que nos planteaba Ramón Pamies, pero con Vodafone en lugar de Orange. En vuestro caso la configuración se simplifica mucho. Nosotros partimos de una línea analógica (hasta hace bien poco las más habituales) y teníamos que “convertirla” en SIP. Por ello recurríamos al gateway FXO. Sin embargo, vosotros ya tenéis un dispisitivo SIP, por lo que podéis simular el mismo escenario registrando vuestra cuenta SIP (en tu caso Vodafone) en la Raspbery Pi. Para ello necesitas 3 datos:

      -Servidor de registro (dominio o IP)
      -Usuario SIP
      -Passwod de la cuenta SIP

      Para conseguir estos datos, tendrás que ponerte en contacto con tu operador para que te los proporcione (y consultar si lo permite). También, puedes buscar en Google algo así como “cuenta SIP Vodafone”. Seguro que encuentras la forma de conseguirlo 😉 Una vez tengas estos 3 datos, sólo tienes que registralo. Puedes usar como base la configuración que usamos nosotros para el gateway en el fichero sip.conf. En tu caso además tendrás que rellenar los siguientes campos:
      type = peer
      host = con la IP o dominio de registro
      fromuser = Usuario SIP
      defaultuser = Usuario SIP
      secret = Password

      register => cuentaSIP:Password@servidorRegistro

      Si todo va bien, después de hacer un “sip reload” y un “sip show peers” deberías ver “REACHABLE” el nuevo peer que has añadido (Ej [vodafone])

      Para realizar llamadas usando tu cuenta, con sustituir el peer en el dialplan que proponemos:

      exten => _[67]XXXXXXXX,n,Dial(SIP/vodafone/${EXTEN},30,Ttm)

      Pedro Cadavid Hace 10 meses Responde


  • […] Como no es la primera vez que instalamos Asterisk en un RPI, podemos recurrir a nuestros apuntes para hacer que el proceso sea sencillo. Los pasos necesarios los podemos consultar aquí. […]

    Asterisk IOT: ¡Mis plantas me llaman por teléfono! | Blog Irontec Hace 10 meses Responde


  • Me da problemas al ejecutar el comando ./configure, me dice que el fichero o directorio no existe. Alguna idea de que puedo hacer

    maberi Hace 9 meses Responde


    • Hola,

      Probablemente, ese error te sale porque no estás dentro del directorio “asterisk-11” y por tanto no encuentra el comando “configure”. Puedes repasar los pasos:

      Paso 1-Vamos a la carpeta /usr/src

      RPI# cd /usr/src

      Paso 2-Descargamos la versión Asterisk 11. Pongo el comando entre comillas para que se muestre correctamente, pero tendrías que eliminarlas.

      RPI#“svn checkout http://svn.asterisk.org/svn/asterisk/branches/11 asterisk-11″

      Paso 3-Entramos en el directorio creado en la descarga de Asterisk 11

      RPI# cd asterisk-11

      Paso 4-Instalamos las dependencias

      RPI# apt-get install libncurses5-dev libsqlite3-dev libssl-dev libiksemel-dev

      Paso 5-Ejecutamos el “configure”

      RPI#./configure –disable-xmldoc –disable-asteriskssl

      Pedro Cadavid Hace 9 meses Responde


  • Una cosilla no se os ocurra crear la cuenta sip directamente con la aplicacion telefono del smartphone esto hace que la app de contactos falle y no puedas ni consultar telefonos ni añadir nuevos, para que vuelva a funcionar elimina la cuenta sip y reinicia el movil.

    No creo que sea por una mala configuracion mia del freebpx y mas bien creo que es un fallo de la app de contactos de google en android 6.0.1 por otro lado tampoco funciona correctamente porque yo escucho lo que yo hablo desde el portatil no se escucha en el telefono pero lo que yo hablo en el telefono se escucha en el portatil o al reves no me acuerdo. utilizando la aplicacion zoiper

    tigreci Hace 2 meses Responde


    • Una cosilla contaros que la centralita la monte exclusivamente para voip en pruebas, sin sip gateway, es decir solo de voip a voip como llamadas internas y sin vpn, vamos llamadas directas y un ddns, si muchos puertos pero como era una prueba de llamadas y no hay peligro por mucho que me hackearan las raspberry pues lo hice asi, pero la idea es que a futuro poder hacer esto con un router vodafone que lleva sip gateway integrado a saber como sera.

      Podriamos montar una megared de centralitas aunque ya esto se me escapa de mis conocimientos, es decir, como podria hacerse que varios freebpx se conecten entre ellos con numeros propios es decir si estas dentro de tu red tienes tu extension pero sin embargo si quieres llamar a otro numero de otro asterisk que se encuentra en rusia por poner un pais que tiene sus propias extensiones, como se ven entre ellos? tienes que añadirlo como una red trunk? o como es decir aparte de configurar tu asterisk para que tus numeros salgan fuera al marcar por ejemplo un cero si como haces que otro asterisk identifique tu numero prefijo + extension como tu asterisk + extension?

      con el nombre de dominio o como?

      ejemplo 111@miasterisk.ddns.com como llamas desde fuera a esto desde otro asterisk? este ultimo deberia añadir como trunk miasterisk.ddns.com? eso es lo que no entiendo si alguien conoce algun libro con liencia creative commons o similar de asterisk se lo agradeceria o algo que realmente te enseñe desde cero a configurar asterisk con freebpx al estilo de asterisk para torpes

      tigreci Hace 2 meses Responde


    • Hola Juanjo,

      Lo más probable es que el sofphone que has instalado no gestione correctamente o tenga algún tipo de conflicto a la hora de gestionar los contactos. Normalmente, los softphones tratan de integrar los contactos con los del sistema. ¿Qué softphone has usado?

      Gracias.

      Pedro Cadavid Hace 2 meses Responde


Queremos tu opinión :)