Blog

  • Cómo configurar el envío de emails desde Asterisk

    Es una pregunta bastante común y pese a que su respuesta es la misma, voy intentar dejarlo tan claro como sea posible.

    Asterisk es una aplicación, como cualquier otra que corra bajo Linux, y por lo tanto sigue una norma que siguen todas las aplicaciones en Linux: Asterisk NO ENVIA EMAILS, si no que se comunica con el servidor SMTP que tengamos instalado en nuestro sistema local y es este el que envía el email. Incluso si queremos utilizar un servidor remoto con una cuenta, el procedimiento sigue siendo el mismo.

    Por este motivo, y por que todas las aplicaciones en linux funcionan prácticamente igual (apache, pureftpd, syslog, etc…) suelen darle los emails que quieren enviar a una aplicación bastante conocida: SendMail.

    SendMail es un servidor de envío de emails (SMTP) y fue uno de los primeros y más avanzados servidores de este tipo, pero su poca fiabilidad (demasiados bugs para los administradores de redes) unido a su complejidad si queríamos configurar un servidor serio, hizo que apareciesen otros servidores SMTP más ligeros, simples y rápidos que Sendmail.

    No obstante, todos los sistemas continúan intentando enviar emails dejándolos a Sendmail y es por esto por lo que los nuevos y más sencillos servidores SMTP utilizan un truco para hacerse pasar por Sendmail y poder «suplantarlo», esto es, crean un enlace simbólico en el sistema con el nombre «sendmail», de manera que cuando una aplicación intenta acceder a «sendmail», realmente quien contesta es esta aplicación. 🙂

    Como ya he comentado, casi todas las aplicaciones que tienen la necesidad o la opción de enviar emails utilizan el servidor SMTP local, esto ha hecho que muchas distribuciones, para facilitar la configuración y envío de emails, instalen por defecto algunos sustitutos de sendmail como por ejemplo exim o postfix son las más conocidas.

    El principal problema de utilizar el servidor SMTP local es el proveedor: Debido al aumento de correos SPAM, los proveedores y los servidores de correo que van a recepcionar tu email comprobarán si realmente el servidor del que procede el email es realmente un servidor «oficial» o bien un servidor que se dedica a enviar SPAM, y como el servidor local no es realmente un servidor en toda regla (no tiene registros MX en el DNS de algún dominio, tiene una dirección IP dinámica, o ha sido utilizado por otro spamer) es por lo que se aconseja encarecidamente utilizar una cuenta de algún servidor de emails ya verificado y seguro.

    Posiblemente, tras la instalación de nuestra distribución preferida, podremos enviar emails con el comando:

    echo «Prueba de email» |mail -s «Prueba de email» miUsuario@miDominio.com

    Pero cuando hayamos enviado varios de este tipo y empecemos a confiarnos, veremos como nuestro cliente de correo empezará a considerarlo spam, o puede que ni llegue. Es entonces cuando tendremos que configurar nuestro servidor SMTP local para que envíe los emails mediante una cuenta autentificada.

    Para el ejemplo de configuración voy a hacerlo con Exim (el servidor que viene por defecto con Debian), quizá sea uno de los más sencillos de configurar y de manejar, aunque personalmente siempre he preferido Qmail por ser mucho más seguro, no obstante, como nuestro objetivo no es configurar un servidor de correos en toda regla, vamos a hacerlo con Exim (versión 4) que es la que trae Debian (y Ubuntu) de serie.

    Lo primero que tenemos que hacer es asegurarnos que lo tenemos instalado:

    apt-get install exim4 exim4-config

    Una vez que lo hayamos instalado, aparecerá una pantalla de configuración. Si no aparece, podremos acceder a ella en cualquier momento ejecutando el comando:

    dpkg-reconfigure exim4-config

    ¿Sencillo verdad? 🙂

    Será entonces cuando nos pregunte por distintas opciones de configuración:

    – ¿Quiere utilizar archivos separados para la configuración?
    Respondemos SI

    – ¿De qué forma queremos configurar nuestro servidor?
    Respondemos «enviar por SMARTHOST, y recibir por SMTP o Fetchmail»

    – Escriba el nombre del sistema:
    Respondemos con nuestro dominio: miDominio.com

    – Escriba la dirección IP desde donde va a atender las conexiones al SMTP:
    Respondemos: 127.0.0.1

    – Escriba otros servidores destino que el SMTP será aceptado:
    Aquí no respondemos nada, lo dejamos en blanco.

    – Sistemas a los que reenviar emails ?
    No piques, esto también hay que dejarlo en blanco. 😛

    – Escribe el sistema que gestionará el correo saliente de este sistema:
    (Aquí escribimos nuestro servidor SMTP remoto, por ejemplo…)
    smtp.miDominio.com

    Si queremos utilizar una cuenta de gmail, el servidor SMTP de gmail hay que especificarlo junto con el puerto que va a utilizar, y sería esto: smtp.gmail.com::587 (ojo que lleva dos simbolos de dos puntos antes del puerto)

    – ¿Quiere ocultar el nombre local del sistema local del email saliente?
    Pues NO.

    – Quiere cachear las peticiones DNS para ahorrar ancho de banda?
    Pues NO.

    Bien, hasta ahora tenemos algunos parámetros básicos configurados, pero no hemos indicado el usuario ni la contraseña con el que queremos autentificarnos para enviar emails. Si probásemos a enviar emails, seguramente nuestro servidor remoto recibiría un email de un tal root@localhost y nos lo rechazaría. 🙂

    Vamos a configurar los datos importantes:

    1º. – Editamos el archivo /etc/exim4/passwd.client y escribimos algo como esto:

    smtp.miDominio.com:usuario:contraseña

    En el caso de que queramos utilizar la cuenta de email, deberíamos poner algo como esto:

    gmail-smtp.l.google.com:usuario@gmail.com:contraseña
    *.google.com:usuario@gmail.com:contraseña
    smtp.gmail.com:usuario@gmail.com:contraseña

    De esta manera, sea cual sea el nombre del servidor SMTP que utilicemos en gmail, le enviaremos los parámetros correctos y nos aceptará el envío.

    2º.- Protegemos el archivo para que nadie tenga acceso a leer nuestros datos:

    chown root:Debian-exim /etc/exim4/passwd.client

    3º.- Si estamos configurando nuestra cuenta de Gmail, hay que indicarle (otra vez) que el envío debe hacerlo por el puerto 587 en lugar del estandar (el 25), por lo que tendremos que editar el archivo:

    /etc/exim4/conf.d/transport/30_exim4-config_remote_smtp_smarthost

    y justo encima de la línea que dice algo como: (hosts_try_auth…) añadir lo siguiente:
    port=587

    4º.- Por último, vamos a configurar nuestra identificación saliente:

    echo «root@localhost: usuario@miDominio.com" >> /etc/exim4/email-addresses

    Y listo, lo último que nos queda es recargar la configuración:

    ejecutamos: update-exim4.conf (es un comando 🙂

    Y probamos a enviar un email como hemos hecho antes…

    echo «Prueba de email» |mail -s «Prueba de email» miUsuario@miDominio.com

    y veremos cómo nos llega con el usuario y dominio correcto. 😀

    Bueno, parece más complicado de lo que realmente es. Una vez que se ha configurado unos cuantos sistemas con esta técnica, se hace todo diréctamente y sin tener que recordar los pasitos.

    Una vez tengamos esto hecho y podamos enviar emails con nuestra cuenta oficial, entonces podremos recibir los emails que hayamos configurado en el buzón de voz de Asterisk, o incluso nuestras alertas de arranque de asterisk o incluso enviar faxes mediante Hylafax,…

    Más información:
    http://www.exim.org/
    http://wiki.debian.org/GmailAndExim4
    http://wiki.debian.org/PkgExim4

  • Como ejecutar aplicaciones durante una llamada

    En la lista de Asterisk-ES a veces se comenta una utilidad que parece que no mucha gente conoce llamada «dynamic features». Oficialmente esta característica forma parte del conjunto de «recursos» que componen Asterisk y que, como su nombre indica, son añadidos dinámicos, lo que realmente significan, recursos que pueden ser accedidos dinámicamente durante una llamada.

    Estos añadidos son por ejemplo, las transferencias, el parking de llamadas y el mapa de aplicaciones (applicationmap), entre otros, y se definen en el archivo features.conf donde vamos a encontrar opciones y una serie de parámetros junto con un código de tecla que debemos pulsar para poder utilizarlos.

    Como ejemplo de estos añadidos encontramos los básicos como:

    • blindxfer (transferencia ciega)
    • atxfer (transferencia atendida)
    • automon (grabación bajo demanda)
    • pickupexten (captura de llamadas que suenan en los terminales del «grupo»)
    • automixmon (grabación bajo demanda y posterior mezcla de las locuciones)

    Hay una parte muy interesante llamada applicationmap que consiste en una serie de combinaciones que podemos modificar para ejecutar aplicaciones básicas de dialplan, durante una conversación.

    Por ejemplo: testfeature => #9,peer,Playback,tt-monkeys

    Este comando permitirá que cuando el llamante como el llamado durante una conversación, pulse las teclas # y 9, se reproduzca la locución tt-monkeys, algo muy gracioso, pero muy interesante en ciertos momentos.

    Existe una limitación para este tipo de comandos, y es que no es recomendable utilizarlo para ejecutar aplicaciones relacionadas con el dialplan directo, es decir: Macro, Goto, Background, WaitExten y algunas de este tipo, pero en cambio sí que se puede ejecutar un «AGI(aplicacion.agi)» 😛

    Para evitar el uso accidental de este tipo de comandos on-line, se hace necesario habilitar dicho comando mediante una variable llamada DYNAMIC_FEATURES justo antes de hacer la llamada: Set(DYNAMIC_FEATURES=testfeature)

    En Asterisk 1.6, nos encontramos algunas novedades bastante interesantes, como:

    • atxferdropcall (permite no perder la llamada en caso de que la transferencia no se realice corréctamente, en cuyo caso volvería a sonar en el usuario que inició la transferencia)
    • atxfernoanswertimeout (permite cambiar el timeout que una llamada transferida esté a la espera antes de volver a la extensión que inició la transferencia)
    • Grupos para habilitar varios applicationmaps sin necesidad de definirlos todos:
      Set(DYNAMIC_FEATURES=grupo)

      donde:
      [grupo]
      testfeature=>#9

    Grandes cosas se pueden llegar a hacer utilizando estas ventajas de Asterisk que son poco conocidas pero muy, muy útiles si se conocen.

    Que lo disfruteis. 😀

  • Novedades en el Chan_SIP3

    Olle Johansson en la lista Asterisk-Dev ha anunciado varias modificaciones que está programando para la nueva versión del chan_sip (chan_sip3 codename Pinneapple).

    La más curiosa de estas modificaciones es sin duda la batalla contra el usuario (recordemos la campaña -kill the user-) y que parece ser que está tomando forma.
    Olle no únicamente está decidido a «matar al usuario» si no también a los amigos (friend) y a los pares (peer) y está programando un cambio radical y mucho más sencillo de aprender.

    De esta manera existirían 3 tipos de usuarios en SIP:

    • phones: que definirán a los terminales, softphones, y básicamente lo que actualmente conocemos como friends.
    • trunk: que definirán los enlaces a proveedores SIP, es decir, lo que conocemos como peer.
    • services: que serán una mezcla entre trunk y phones permitiendo a Asterisk registrarse como un usuario SIP (un teléfono) en otro sistema y así poder hacer y recibir llamadas.

    La pregunta del millón: ¿para qué este cambio de nombres? Básicamente para simplificar la comprensión, y además facilitar la programación para continuar el desarrollo sin tanta «morralla».

    Este parche no será por el momento añadido a Asterisk 1.6.0 porque necesita ser testeado en condiciones, pero nos da una visión de por dónde van los tiros.

    (más…)

  • Listado de las 74 aplicaciones de VoIP más conocidas

    Aquí teneis un listado de las 74 aplicaciones de VoIP licenciadas como de código abierto más conocidas.

    Seguro que la mayoría las conocemos, pero puede que alguna no sepamos de su existencia hasta haberla visto en este listado.

    ¿Cual no conocías? 😀

    http://www.voipnow.org/2007/04/74_open_source_.html

  • 2º concurso de Digium a las empresas innovadoras

    El pasado verano, Digium organizó un concurso donde se buscaba a las empresas más innovadoras en determinados campos (ya hablé de este concurso entonces) y quienes fueron los ganadores.

    Pues bien, tras ver la gran acogida, Digium ha anunciado el segundo concurso a la innovación donde, al igual que el año pasado, se premiará a los mejores de las siguientes categorías:

    • Premio Pionero (Pioneer Award): A la implementación más innovadora.
    • Premio Gran Empresa (Big Biz Asterisk): a la implementación basada en Asterisk más grande.
    • Premio ROI (Return of Inversion): Solución más rápida en reembolsar su inversión.
    • Premio Negocio externo (Inside Out Award): Al mejor utilización de Asterisk en un negocio fuera del ámbito de las telecomunicaciones.

    Los ganadores serán anunciados del 22 al 25 de septiembre en la Astricon 2008 en Glendale (Arizona)

    El plazo límite para participar es hasta el día 1 de agosto, así que ya saben… a ver si nos animamos. 🙂

    Más información: http://www.digium.com/en/company/awards/innovation.php

  • Asterisk y los hoteles: la combinación perfecta

    Uno de los primeros lugares donde pensé que una aplicación como Asterisk sería mucho más que útil es en los hoteles y viendo que en el último hotel al que fuí tenía una siemens de más de 10 años me lo terminó de confirmar ya que están perdiendo una oportunidad de oro.

    Si uno piensa en cómo funciona cualquier hotel, se da cuenta que el número de llamadas es bastante bajo en comparación con el número de teléfonos existentes (por lo general, uno por habitación más los de uso interno) por lo que el número de enlaces y líneas a la PSTN suele ser bajo, consecuentemente el coste de mantenimiento por línea es bastante bajo.

    Según el tipo de hotel y el tipo de clientela que suela tener, muchas llamadas serán al extranjero (los países de origen de los clientes) por lo que, en este caso, la VoIP juega un papel ventajoso frente a llamadas a través de la línea convencional permitiéndonos utilizar cuentas SIP con unas tarifas realmente bajas a países y ahorrándole al hotel una cantidad considerable de dinero en llamadas.

    Pero hasta ahí, las ventajas de utilizar VoIP en un hotel, se mejoran considerablemente cuando además se utiliza un sistema Asterisk para elaborar servicios básicos o avanzados:

    Servicio despertador: Hoy día todos los hoteles tienen un ordenador que avisa al recepcionista o incluso que llama a la habitación. En algunos casos, la televisión se enciende si el cliente es lo suficientemente avispado como para aprender a programar la alarma en la televisión, pero que te llame un Asterisk automáticamente y te diga la temperatura en la calle, si llueve o hace sol, el horario del desayuno, o cualquier otra cosa… 🙂

    Servicios extras: Un menú IVR para pedir alguna toalla, solicitar el código para acceder a internet o el desayuno en la cama (que ganas de vacaciones)…

    Información sobre la ciudad: Todo lo que desea saber de la ciudad donde se encuentra el hotel, restaurantes, autobuses o estaciones de metro cercanas, últimos eventos culturales, museos, noticias locales, rutas turísticas, etc…

    y seguro que cualquiera que piense se le ocurren más servicios que podría ser interesante para un hotel.

    En resumen, pronto veremos cómo los hoteles empiezan a ofrecer estos servicios adicionales, y llamadas a un precio más económico para el cliente sin perdida de beneficios por llamadas, seguro que entonces más personas utilizarán el teléfono del hotel en lugar de su móvil para hacer llamadas a su país de origen y lo mejor de todo… mucho más económico que una centralita tradicional para tantas extensiones.

    Y como decía una pegatina de Asterisk que leí hace poco… «Estás utilizando Asterisk sin saberlo» 😛

    (más…)

  • Lo que el usuario de una distribución con Asterisk no vé

    A menudo recibo emails donde gente muy preparada y con muchos conocimientos sobre redes e informática buscan ayuda para solucionar algún problema que les ocurre cuando configuran su sistema Trixbox, Elastix, AsteriskNow, y no funciona como ellos esperaban.

    Es entonces cuando la gente que responde a estos emails le preguntan acerca de paquetes SIP, parámetros de configuración, o le sugieren determinados valores a ciertos parámetros que no han escuchado ni visto en su vida. Ocurre que tras estas respuestas el usuario se vé en la necesidad de tener que entrar a mano a una consola en modo texto y editar un archivo o ejecutar un comando, algo que, en el 80% de los usuarios que utilizan este tipo de distribuciones para montar su sistema de comunicaciones, no saben cómo se hace o directamente jamás lo han hecho.

    Los usuarios de distribuciones controladas por interfaces web suelen olvidar (o no quieren reconocer) que toda interfaz web es creada con un objetivo: simplificar la configuración y gestión de una aplicación (en este caso, de Asterisk), esta simplificación tiene un efecto muy negativo, impide realizar tareas que no han sido previamente preparadas por los creadores de dicho interfaz o incluso han sido desechadas por su complejidad y poco útil para un público general, se dice entonces que esa distribución está «a merced» de lo que permita hacer el interfaz web. En muchos casos he visto cómo gente con grandes conocimientos de redes, Asterisk y voip, han dicho que XXXXX no se puede hacer, simplemente porque el interfaz web no lo permite. Esto, además de no dejar en buen lugar a Asterisk, demuestra una falsa limitación que el comercial, conociendo las características de una aplicación tan versatil como es Asterisk, sí que anunció que era posible a su cliente.

    Alguna que otra vez me he encontrado con mensajes de usuarios con Trixbox o Elastix que no podían hacer transferencias, o que cuando intentaban llamar a una extensión esta no se encontraba disponible pese a haberse configurado corréctamente. La solución de estos problemas y otros miles, se podría solucionar de una forma muy sencilla mirando la configuración y comprobando que estos parámetros son correctos, o simplemente comprobando que el dialplan hace lo que se supone que debería hacer, pero para hacer un interfaz web que ayude a simplificar la configuración se requieren de macros, includes y variables extras que ayuden a convertir lo que el usuario quiere hacer a través de una web, a un código medianamente funcional y limitado a lo que se pueda hacer.

    Esa limitación no existe en un usuario final que únicamente quiere configurar 5 extensiones y 2 líneas analógicas que atiendan a una cola, pero en usuarios «avanzados» y «profesionales» esa limitación, no únicamente limita su trabajo, si no que le impide «controlar» el verdadero funcionamiento que está realizando su sistema Asterisk.

    Cuando un usuario se encuentra con algún problema, puede ser debido a un fallo de configuración –y de conocimiento– como colocar «inband» en lugar de «outofband» en alguna pestaña del interfaz web porque desconoce para qué sirve estos parámetros, pero el usuario avanzado, que sí sabe lo que significan, debe poder entrar en Asterisk y ver en la consola –que para eso está– qué es exáctamente lo que Asterisk está ejecutando, para poder encontrar el error, y el simple hecho de utilizar un interfaz web que, para simplificar la configuración, utilice macros, includes y variables, se hace inviable su lectura por la cantidad de código que escribe un FreePBX para hacer una simple llamada.

    En muchos casos, y después de comentar este problema con compañeros que trabajan con distribuciones de este tipo, suelen contestar que sus clientes necesitan de un interfaz web para poder añadir extensiones o cambiar el dialplan, es entonces cuando se llega al kit de la cuestión, –¿qué usuario final cambia su dialplan?- ¿es la responsabilidad de un usuario final poder cambiar un dialplan? ¿qué usuario final sabe para qué sirve cada valor de cada pestaña de cada campo necesario para añadir una extensión o crear una cola? Lo único que el usuario final sabe es que quiere añadir una extensión y no quiere prestar atención a los distintos parámetros que conlleva esta decisión, es por eso por lo que hay dos posibilidades:

    – Hacerle un interfaz web a medida que le permita entrar y añadir lo que el usuario avanzado quiera que añada. (para eso hay diferentes maneras: AJAM, AMI, PHP, etc…)

    – Que llame por teléfono y diga que quiere añadir una extensión, en cuyo caso será el usuario avanzado el que lo haga y sea responsable de estos cambios. (quizá no sea lo más agradable, pero el usuario final lo agradecerá y el usuario avanzado controlará que todo sigue funcionando corréctamente).

    IMHO.

    P.D.: Esto por supuesto es a nivel general, siempre hay excepciones.

  • LibPri 1.4.5 Released!

    Hace un par de días el equipo de desarrollo de Asterisk publicó la versión 1.4.5 de LibPri con un arreglo a una incompatibilidad descubierta cuando se utiliza una tarjeta de primario en una red telefónica que envía el «progress» de una llamada en curso en el canal de voz en lugar de en el canal de datos de manera que, si por algún motivo el usuario destino cuelga la llamada, el origen continúa recibiendo tonos a la espera de que el otro extremo descuelgue.

    Como consecuencia de esta incompatibilidad, muchos usuarios tardan entre 2 y 20 segundos en descubrir que el otro extremo ha colgado la llamada, algo que arregla esta versión de LibPri.

    Pese a que esta versión soluciona esta incompatibilidad, por defecto se encuentra deshabilitado. La próxima versión de Asterisk permitirá activar esta opción en el menú de configuración.

  • Nuevas locuciones para Asterisk 1.4 en español (Argentina)

    Acabo de hacerme eco de unas nuevas locuciones para Asterisk 1.4 con acento especialmente creado para Argentina.

    He de decir que las he escuchado y suenan realmente bien, y es que están grabadas con una locutora profesional llamada Thais Anabele Correa.

    Así que, desde aquí, mi agradecimiento y enhorabuena a la gente de Asterio por ofrecer estas locuciones bajo licencia Creative Common para el uso y disfrute de todos los usuarios de Asterisk.

    Lo que no sé muy bien es qué opinarán sobre que estas locuciones no se puedan utilizar de forma comercial (¿comercializar un Asterisk que incluya estas locuciones no incumpliría la licencia?).

    Podeis escuchar un ejemplo en el siguiente video:

    Más información: http://www.asterio.com.ar/ (más…)

  • Dialectic: Mejorando el acceso a la VoIP con Mac

    Acabo de conocer una aplicación que se define como «una versatil herramienta para hacer llamadas que unifica las aplicaciones para Mac, datos y teléfonos (tanto móviles, fijos como VoIP)».

    Dialectic es una aplicación que permite llamar, a través de cualquier aplicación que funcione en Mac, a cualquier número.

    Tiene soporte para conectar el Mac a terminales IP, a softphones como Eyebeam, Gizmo, Skype, y por supuesto directamente a Asterisk permitiéndonos no únicamente hacer llamadas haciendo clic en un número de teléfono que aparezca en la Agenda, si no programar cuando llamar, qué hacer cuando recibamos una llamada en el terminal o en el softphone que tengamos instalado y que esté soportado en este listado de plugins.

    • Bluetooth mobile phones
    • Landlines
    • Asterisk
    • BroadVoice
    • CallVantage
    • Cisco IP Phones
    • FRITZ!Box
    • Ovolab Phlink
    • Parliant PhoneValet
    • Speakeasy.net
    • ViaTalk
    • Vonage
    • VoIP Softphones: CounterPath softphones, Gizmo, iSoftPhone, JackenIAX, LoudHush, ohphoneX, Skype, WengoPhone, …

    Además de hacer llamadas, permite hacer muchas cosas muy interesantes (grabar conversaciones, añadir prefijos, y muchas cosas más, e incluso hacer y recibir llamadas utilizando nuestro móvil conectado por bluetooth,…)

    El sistema tiene muy buena pinta y habría que verlo más detenidamente, pero para una oficina donde trabajen con el sistema de Apple y utilicen VoIP, seguro que les encanta.

    La aplicación cuesta $25 (unos 16€) aunque tiene una demo de 14 días que podeis descargar.

    Más información: http://www.jonn8.com/dialectic/