Siguiendo una línea de opinión personal, y tal y como prometí en el anterior artículo Porqué recomiendo Debian y no CentOS, escribo sobre porqué es mejor configurar Asterisk mediante archivos de configuración y no mediante un intefaz web generalista como FreePBX.
Dar gracias a todos aquellos que esperaban impacientemente un artículo como este, bien por ser un «tema flame» que causa ampollas entre los defensores de los interfaces webs y los defensores de la línea de comandos. No hay necesidad de ser extremo en ningún punto, ni ser «pro-interfaces» ni ser «pro-consola«, aquellos que son «pro-interfaces» saben que a menudo (y más frecuentemente de lo que quisieran) necesitan de una consola, y aquellos que son «pro-consola» seguro que tienen instalado un interfaz gráfico donde impera KDE o Gnome o incluso XFce o WindowMaker.
Quiero dejar claro que trabajo a diario con interfaces webs, por lo que conozco bastante FreePBX, Asterisk-GUI y otros interfaces generalistas de facturación, de grabación y algunos otros, menos conocidos, que considero proyectos perfectos para la función que deben tener: un sistema de comunicaciones pequeño, bien controlado, bien configurado y sabiendo qué hacen y cómo lo hacen además hacer lo que debe hacer. Este artículo va en otro sentido, y no critico ningún proyecto opensource que, como siempre dijo, merecen todo mi respeto y admiración tanto por parte de sus desarrolladores como el de sus usuarios.
Cuando hablo de «editar tus propios archivos de configuración» me refiero principalmente a crear tu propia configuración a mano, y no crearlo utilizando un interfaz web, no significa que la configuración deba ser mediante archivos de configuración, también puede ser vía base de datos o cualquier otra forma de configuración que permita realizar cualquier acción que deseemos o necesitemos y podamos controlar a la perfección tal y como a continuación explico.
Vamos a entendernos…
Como usuario y desarrollador de Asterisk, me encuentro a diario con necesidades de todo tipo, desde personas que conocen Asterisk, hasta auténticos profanos en la materia que lo mismo les dá si tienen un Asterisk como una lavadora mientras hace lo que tiene que hacer. Es por esto por lo que en muchas ocasiones me encuentro en la tesitura de tener que acceder a los sistemas Asterisk de otras personas para configurar una tarjeta, un gateway, un proveedor IP o simplemente añadir un usuario y configurar un teléfono. Normalmente, el acceso se hace mediante SSH (lo cual facilita la tarea, el tiempo y por lo tanto, el coste de la intervención) y en otras ocasiones, el usuario lo que tiene es un interfaz web de gestión (generalmente FreePBX o sucedáneo) donde, a pesar de rellenar todos los campos correctamente (y que el cliente no tiene ni idea de para qué sirve la mayoría de ellos) la tarjeta/gateway/proveedor no funciona como debería y toca acceder manualmente a los archivos de configuración y añadirlo a mano (lo que se traduce en tiempo desperdiciado en configurarlo vía web, dando vueltas buscando el problema, para al final acceder directamente al archivo y hacerlo manualmente).
Cuando vi por primera vez FreePBX (cuando se llamaba Asterisk@Home), me dí cuenta que muchos usuarios lo instalaban porque no sabían cómo funcionaba Asterisk y este interfaz «facilitaba» su configuración añadiendo un interfaz gráfico, mostrando campos y valores que el usuario debía rellenar utilizando su ratón y un dedo para pulsar teclas. También descubrí que en el interfaz no estaban todos los campos que hacían falta y que, además de ser más lento rellenar un formulario web que escribir texto, este generaba un código demasiado complejo y anti-intuitivo para ser interpretado por alguien que «había instalado el interfaz web para tener su primer contacto de una forma fácil y aprender», algo que prácticamente nadie ha conseguido y el que lo ha hecho así, ha perdido un tiempo precioso en aprender a configurar Asterisk de una forma seria y organizada en lugar de aprender a interpretar macros que asignan valores a variables que son consultadas si alguien hace una llamada internacional y tiene marcado en el interfaz un checkbox.
Configuración orientada a todos y a nadie
Lo primero que hay que entender, es que un interfaz web tiene como objetivo «simplificar» la configuración de un sistema, tomando ciertos valores con los valores por defecto cuando no es necesario o cuando el valor por defecto es correcto. Esto es así en cualquier interfaz web tipo «front-end» de configuración. Si el interfaz web fuese tan completo que permitiese configurar TODOS los parámetros necesarios, entonces no tiene sentido, ya que los conocimientos que hacen falta para configurar la aplicación serían los mismos que para configurarlo vía web, por lo tanto:
Un interfaz web no tiene TODAS las opciones que podemos configurar, por lo tanto un sistema que ha sido configurado vía interfaz web, no es tan potente ni flexible como uno configurado a mano vía archivos de configuración.
Hasta ahí, creo que queda claro que no sólo no vamos a disponer de todas las opciones si no que además, en el caso de Asterisk, se tomarán ciertos parámetros por defecto, por lo tanto, como en el interfaz no tenemos la opción ‘allowguest’, el sistema (salvo que los desarrolladores indiquen lo contrario) utilizarán el valor por defecto. Vamos a ver cual es:
allowguest = yes|no : Allow or reject guest calls. Default is yes.
Así que, por defecto, nuestro sistema va a procesar las peticiones SIP entrantes sin necesidad de autentificarse.
<ironic>Es estupendo</ironic>
Por suerte, las últimas versiones corrigen este parámetro (pero esto no siempre ha sido así, y la mayoría de los usuarios de interfaces como FreePBX no cambian este parámetro, por lo tanto, dejan la puerta abierta a cualquier petición de llamada a Sierra Leona hecha por parte de una persona que vive a varios cientos de miles de kilómetros de distancia).
Un interfaz web para gestionar un Asterisk como FreePBX sigue la misma filosofía que un interfaz web para gestionar un enlace biónico de compensación molecular en el LHC: Debes saber qué estás configurando para no causar una catástrofe. La parte gráfica puede parecer más intuitiva, pero si no sabes para qué sirve cada opción, lo mismo da lo que estés configurando.
¿Un interfaz web para gestionar el Asterisk de una empresa, es igual al interfaz web para gestionar el Asterisk de un callcenter, el de un proveedor IP o el de una casa?
Rotundamente NO.
Es necesario un interfaz diferente en función del tipo de empresa o instalación que vayamos a configurar.
¿Qué ventajas tiene editar los archivos a mano?
Soy plenamente consciente que editar un archivo, pese a ser una de las acciones más antiguas y todavía existentes dentro del mundo de la informática, hay mucha gente que lo considera todo un misterio y por eso prefieren que una aplicación se lo haga todo mucho más fácil.
No obstante, cuando introduces un número limitado de entradas y esperas una salida completamente funcional, es más difícil acertar con lo que realmente quieres.
Por ejemplo: Estamos configurando un gateway, y a la hora de hacer una llamada, el sistema no lo hace correctamente y la llamada no sale.
En el interfaz no aparece ninguna información que nos indique el motivo ¿qué hacemos entonces? Aprovechamos la consola de Asterisk con la esperanza de ver algún error que nos indique el motivo de porqué la llamada no sale.
Craso error, miles de líneas de dialplan se agolpan en la consola como personas frente a la central de venta de entradas para un concierto de Justin Bieber… todas esperando a ser procesadas por tu mente e igual de fanáticas y molestas. xD
Si sólo queríamos procesar un intento de llamada, ¿porqué toda esa cantidad de líneas?
Porque un interfaz web generalista, no sabe qué necesitas y por lo tanto, tiene que estar preparado para cualquier cosa que se te ocurra (dentro de sus propios límites), así que empieza a procesar variables, ver si el usuario SIP que hace la prueba tiene permisos, configurando el DID de salida si el número a llamar es geográfico, móvil o internaciona, realizar condiciones sobre macros por si el número marcado lleva un 4 en el tercer dígito y has configurado tu país de residencia como Afganistan, o si has marcado un *59 número que previamente se ha configurado como «desvío»… o cualquier otra opción sobre el número que hemos marcado para hacer la prueba de salida en un gateway.
Creo que todos nos hemos encontrado alguna vez con este problema, así que no voy a incidir más sobre él.
El problema viene que si queríamos ver el error, vamos a perder al menos 15 o 30 minutos en visualizar todos los mensajes que aparecen por la consola (o el archivo de log) y entender qué está haciendo el interfaz, pero difícilmente veremos el error, porque, para evitar asustar a los usuarios, muchos interfaces «configuran el Asterisk» para que no aparezcan ciertos mensajes o errores por la consola CLI.
En cambio, configurando el sistema a mano, tu controlas todo lo que se ejecuta en cada momento, por lo que al escribir algo como:
exten=>_9XXXXXXXX,1,Dial(SIP/gateway/${EXTEN})
podremos ver en seguida cual es el motivo de porqué no sale la llamada, ya que «por defecto» sí que aparecen los mensajes de error por la consola y sólo hay que esperar que se ejecute una única línea, no miles, por lo tanto, el tiempo de depuración se reduce a menos de un minuto.
Porque muchas veces, el sistema ya viene con herramientas para facilitar añadir fácilmente usuarios, por ejemplo, utilizando plantillas de Asterisk, o bien otras herramientas que ya vimos en la presentación del VoIP2DAY del 2008 sobre trucos para Asterisk.
Por lo tanto, cuando tenemos 400 extensiones o usuarios, cualquiera que edite los archivos de configuración a mano, tardará mucho menos en configurarlas que utilizando un interfaz web:
... [usuario325](extensiones) secret=vn4n3ms94. [usuario326](extensiones) secret=tiekd934kd ...
Únicamente hay que escribir dos líneas por cada extensión (teniendo una plantilla bien configurada), si no utilizamos el truco del #exec <script>, con lo que terminaríamos incluso bastante antes, aunque claro, para eso hay que saber configurar un Asterisk.
Interfaces, sí, pero responsablemente
Pese a todo lo que pueda parecer, no estoy completamente en contra de los interfaces web, de hecho soy partidario a ofrecerle al usuario final un interfaz de gestión (importante a lo de «GESTION», que no configuración), el usuario no tiene porqué configurar nada, ya que él no sabe configurar el sistema, el debe gestionarlo, entiéndase esto como, añadir un usuario, modificar los datos, cambiar las locuciones, habilitar o deshabilitar las grabaciones o los desvíos, ver a qué número llaman sus usuarios, etc. pero no para configurarlo. ¿Un usuario normal de una centralita sabe para qué sirve el campo ‘reinvite’ en la configuración de un gateway? ¿qué deberá poner ahí? ¿deberá dejarlo por defecto? ¿y si por defecto viene mal configurado?
No tiene sentido un interfaz web, si este no es utilizable de forma intuitiva y sin requerir ningún tipo de conocimiento, y en el caso en que así lo fuera ¿para qué haría falta un profesional como tú que lees estas líneas?.
El problema viene que muchas empresas instalan el único interfaz que conocen, que es gratuito y que tiene actualizaciones periódicas: FreePBX, el interfaz que tuvo que cambiar de nombre por temas legales y que inicialmente se llamaba «Asterisk en casa» ¿os imagináis a una empresa de 4.000 empleados, con altos niveles de seguridad, puertas biométricas, decenas de primarios, y todas las comunicaciones gestionadas por un programa llamado «Asterisk en casa«?
Yo si 🙁
Claro, no todas las empresas que tienen FreePBX tienen 4.000 empleados y una seguridad extrema en sus instalaciones, el resto son empresas pequeñas de no más de 20 empleados y que pueden permitirse que les entre un bot un sábado por la mañana y se dedique a hacer llamadas sin parar a Sierra Leona hasta el lunes por la mañana haciendo un gasto por valor de decenas de miles de euros, por un parámetro mal configurado por alguien que no sabía configurar un Asterisk en condiciones y prefirió dejar la suerte de configuración en manos de un interfaz gratuito y exento de responsabilidades.
Resumiendo
Quizá lo peor de un interfaz, no sea la configuración generalista que ejecuta 1200 líneas para una llamada entre usuarios SIP, ni los errores de seguridad que cuando se presentan son terribles, quizá lo peor no sea incluso la cantidad de tiempo que hay que perder para configurar una instalación en condiciones de unos 50 o 60 teléfonos, 2 gateways y un proveedor IP, lo peor de estos interfaces webs, es que el 90% de las empresas que no saben de Asterisk y se dedican a comercializar sistemas «profesionales», lo utilizan.
Lo utilizan vendiéndolo como «sistema para que el usuario tenga el control completo«, pero en el fondo suelen ser empresas que no saben de comunicaciones, no saben de Asterisk y no saben de SIP lo suficiente para configurar el sistema convenientemente para su cliente, por lo tanto, cuando hay algún problema no saben resolverlo y eso da mala fama a los que trabajamos con Asterisk.
La prueba más conveniente de lo que digo es cierto, es que los alumnos que han asistido a un curso de Asterisk, que inicialmente suelen utilizar interfaces web como FreePBX para configurar su Asterisk, al salir del curso y aprender cómo se configura un sistema vía archivos de configuración, no vuelven a utilizarlo jamás, es más, suelen programarse sus propios interfaces web, esta vez orientados a sus clientes y son capaces de resolver los problemas que se presentan porque conocen cómo funciona el sistema por dentro.
Nota final
Por supuesto, en todo hay excepciones y profesionales que utilizan interfaces web generalistas pero que conocen perfectamente cómo funciona por dentro Asterisk y son capaces de resolver cualquier problema que pueden presentarse, pero un 5% de los usuarios no es una cantidad suficientemente importante como para evitar generalizar.