0% encontró este documento útil (0 votos)
219 vistas39 páginas

Caso - Practico - Gestion - Del - Sistema Telefonico de Un Locutorio PDF

Cargado por

lopezmoleon
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
219 vistas39 páginas

Caso - Practico - Gestion - Del - Sistema Telefonico de Un Locutorio PDF

Cargado por

lopezmoleon
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 39

CAPÍTULO 6

CASO PRÁCTICO: GESTIÓN DEL SISTEMA


TELEFÓNICO DE UN LOCUTORIO

1 Introducción
Una vez visto que el rendimiento obtenido en los miniordenadores ejecutando Asterisk
es suficiente para gestionar un número considerable de llamadas simultáneas, se puede pensar
en las aplicaciones prácticas que esto puede tener. Por ejemplo, se puede configurar
adecuadamente los equipos con los que se ha trabajado para crear soluciones de bajo coste
para gestionar las llamadas telefónicas en instituciones o empresas de pequeño tamaño, como
ayuntamientos o PYMES por poner algunos ejemplos. De esta forma, mediante una inversión
inicial baja se pueden obtener todas las ventajas de VoIP que se han expuesto a lo largo de los
capítulos de este trabajo.

En nuestro caso, se ha pensado un uso que también parece adecuado para los equipos
con los que estamos trabajando: la creación de un sistema de gestión del sistema telefónico
de un locutorio. Durante este capítulo se muestra cómo un miniordenador con una
distribución GNU/Linux instalada, Asterisk para la gestión telefónica y algunos otros
servicios para implementar el sistema de gestión para el cliente, aporta ventajas significativas
con respecto a las soluciones empleadas actualmente para la gestión de locutorios.

2 Modelo de desarrollo
La ingeniería del software establece una serie de modelos que ayudan cuando hay que
desarrollar un producto software. Cada modelo describe una determinada aproximación a las
tareas o actividades que se llevan a cabo durante el proceso de desarrollo.
108 LA TELEFONÍA IP EN MINIORDENADORES

Para la creación de la aplicación Mi Locutorio se ha utilizado el modelo en cascada, en


el cuál el desarrollo es visto como una serie de etapas secuenciales de análisis, diseño,
implementación, prueba, implantación y mantenimiento (figura 6-1). La primera descripción
formal del modelo en cascada se atribuye normalmente a un artículo publicado en 1970 por
Winston W. Royce, aunque es curioso como Royce no empleó en ningún momento el término
“cascada”.

Figura 6-1. Esquema clásico del modelo en cascada

El modelo de desarrollo en cascada defiende que hay que completar y perfecccionar


una etapa determinada antes de poder pasar a la etapa siguiente. Sin embargo, existen varios
modelos en cascada modificados que incluyen algunas variaciones con respecto a este
proceso.

Para el desarrollo de la aplicación se han seguido las etapas tradicionales de cualquier


proceso de desarrollo de software. A continuación se enumeran y se explica brevemente en
qué consiste cada una de ellas:

• Análisis. Se analizan las necesidades de los usuarios del software para determinar qué
objetivos debe cubrir nuestra aplicación. Es importante que todos los requisitos se
especifiquen durante esta etapa.

• Diseño. Se realiza una descripción de la estructura global del sistema y la


especificación detallada de cada una de sus partes, prestando especial atención a la
forma en la que se combinarán unas partes con otras.

• Implementación. Es el proceso por el cuál escribiremos, probaremos y depuraremos


el código que creemos para nuestra aplicación.

• Prueba. Una vez se ha realizado la programación de todos los elementos del sistema,
éstos se ensamblan y se comprueba que funcionan correctamente antes de pasar a la
siguiente fase.
CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 109

• Implantación. El proceso por el cuál el software obtenido es puesto finalmente a


disposición de los clientes. La implantación es un proceso general que varía
dependiendo de las características y requerimientos de un software concreto.

• Mantenimiento. El mantenimiento del software es la modificación del producto


después de ser implantado. Esto se puede realizar, por ejemplo, para corregir errores,
para mejorar el rendimiento o para adaptar el producto a un entorno diferente.

Durante este capítulo se va a explicar cómo se han realizado las primeras cuatro
etapas expuestas anteriormente, desde el análisis para la creación de la aplicación hasta la
puesta a prueba del sistema.

3 Análisis del sistema

3.1 DESCRIPCIÓN DEL PROBLEMA

Hoy día son muchos los locutorios que siguen empleando la telefonía analógica para
realizar llamadas. Sin embargo, con los avances que proporciona VoIP a la hora de
comunicarse a través del teléfono y con la madurez que presenta esta tecnología en la
actualidad, parece claro que podría comenzar a utilizarse en el mundo de los locutorios.

El objetivo del proyecto es integrar todos los servicios necesarios para la gestión del
locutorio en los miniordenadores.

El sistema no sólo debe ser capaz de gestionar las llamadas del negocio, sino también
otros aspectos como la facturación, la tarificación a los clientes o la realización de informes
que puedan resultar valiosos. Se busca que no haya necesidad de unidades adicionales para
realizar todas estas acciones, algo que puede suceder al utilizar una centralita tradicional.

Además, el sistema emplea la tecnología VoIP para realizar las llamadas desde el
locutorio. Por lo tanto, es necesario incluir un sistema de gestión de operadores VoIP y de
tarificación por parte de éstos en nuestra aplicación. También es necesario gestionar las listas
de prioridad de operadores VoIP para garantizar que la llamada es realizada siempre, ya sea a
través de un operador u otro.

De esta forma, gracias al uso del miniordenador y al uso de VoIP reduciremos los
costes de un locutorio, tanto los de implantación de un sistema de gestión como los derivados
de la realización de llamadas.

3.2 PRODUCTOS EXISTENTES

A día de hoy dos aproximaciones muy diferentes siguen empleándose en la gestión


telefónica de un locutorio.

La primera, que se considera como tradicional, consiste en emplear una centralita que
realizará las llamadas a través de las líneas telefónicas que tenga contratadas el locutorio. Este
sistema se gestiona desde un ordenador que tiene instalado un software específicamente
creado para ello. Aunque a primera vista puede parecer un sistema rudimentario, lo cierto es
que sigue siendo la opción más utilizada en la mayoría de los locutorios. Los costes asociados
a ella son bastantes elevados debido a que es necesario un gran número de líneas para poder
110 LA TELEFONÍA IP EN MINIORDENADORES

realizar llamadas desde todas las cabinas, las llamadas se realizan a través de la línea
analógica y normalmente la centralita tiene un precio bastante alto (dependerá del número de
líneas que tenga que gestionar). Además, en muchas ocasiones al utilizar teléfonos analógicos
en las cabinas se deben emplear dispositivos adicionales para implementar algunas funciones
en el locutorio como mostrar datos en tiempo real sobre el tiempo de llamada o sobre la
tarificación. Empleando teléfonos VoIP y algún software como Asterisk, la implementación
de todas estas funciones sería mucho más simple. Algunas de las principales empresas que
ofrecen tradicionalmente este tipo de soluciones en nuestro país son Destel19, Tellink20 o
Jusan21. En la figura 6-2 se muestra la arquitectura que implementa normalmente Destel en
los locutorios que emplean telefonía analógica.

Figura 6-2. Sistema clásico de cableado de un locutorio

La segunda aproximación, mucho más reciente y menos explotada, emplea VoIP


para realizar las llamadas del locutorio. A simple vista el beneficio parece claro, ya que
empleando la tecnología VoIP puede tener contratada una única línea telefónica con conexión
a Internet y realizar todas las llamadas a través de ella. No es necesario contratar varias líneas
telefónicas dependiendo del número de cabinas que tenga el locutorio, sino que simplemente
hay que contratar una conexión a Internet con suficiente ancho de banda como para realizar
un número determinado de llamadas VoIP. Además, empleando teléfonos IP en el locutorio
reduciríamos aún más el coste al poder implementar estructuras más simples que no requieran
una gran cantidad de hardware adicional para conectar todos los elementos del sistema y
ofrecer funcionalidades extra. Actualmente esta tecnología ya se empieza a comercializar por
algunas empresas. Sin embargo, los sistemas que ofrecen de momento son en su mayoría
mixtos, instalándose un sistema con teléfonos analógicos pero que gracias al uso de un
gateway o de adaptadores podrá emplear la tecnología VoIP para realizar las llamadas desde
el locutorio. En la figura 6-3 se muestra el modelo seguido por Jusan para la instalación de los
nuevos sistemas basados en VoIP que están comercializando.

19
http://www.destel.net/
20
http://www.tellinksistemas.com/
21
http://www.jusan.es/
CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 111

Figura 6-3. Solución propuesta por Jusan para su sistema CL10 VoIP

Aunque su uso todavía no sea del todo generalizado en España, en Internet ya se


encuentran varios proyectos que proporcionan una aproximación completamente VoIP.

• Uno de los proyectos destacados es ip-CALLMASTER22. Esta solución propietaria


para Windows emplea el mismo ordenador que usa el gestor del locutorio para
ejecutar el software de control de los teléfonos del locutorio. La empresa que lo
comercializa, M&A Technologies Ltd., ofrece la posibilidad de instalarnos el sistema
completo en nuestro locutorio, integrándolo con unos modelos de teléfono VoIP
concretos que muestran información útil para los clientes en sus pantallas. En la figura
6-4 mostramos la configuración típica que propone la empresa para un locutorio que
emplee ip-CALLMASTER.

Figura 6-4. Arquitectura propuesta para la instalación de ip-CALLMASTER en un locutorio

22
http://www.matech.com.cy/ipcallmaster.html
112 LA TELEFONÍA IP EN MINIORDENADORES

La aplicación que han desarrollado permite la gestión de trunks, tarificación o


realización de informes por poner algunos ejemplos. Aunque quizás no sea tan
completa como otras soluciones tradicionales, no esté basada en Asterisk y tenga el
inconveniente de no ser una aplicación de código abierto (no permite la
personalización a nuestro gusto), supone un primer paso hacia un abaratamiento de los
costes para el dueño de un locutorio debido al uso de VoIP.

• Otro proyecto a tener en cuenta es asterBilling23. Este sistema de gestión


especialmente pensado para locutorios u otros negocios de estructura similar se
ejecuta sobre GNU/Linux y emplea Asterisk para realizar las llamadas. Utiliza un
modelo similar al que se pretende desarrollar ya que asterBilling consta de una
interfaz web para gestionar el locutorio, de forma que los usuarios únicamente tienen
que utilizar un navegador web para interactuar con la aplicación. asterBilling no es
gratuito (emplea el servicio astercc que permite utilizar de forma gratuita hasta cinco
canales de simultáneamente) y únicamente los scripts de la interfaz web son código
abierto. Actualmente se distribuye como parte de un paquete llamado asterCC, que
consta del demonio astercc, asterCRM (una solución para gestión de centros de
atención de llamadas) y del propio asterBilling. En la figura 6-5 se muestra una
captura de la interfaz web de la última versión disponible de la aplicación.

Figura 6-5. Vista de las cabinas de un locutorio en la versión 0.1 de asterBilling

• Por último y no menos importante se encuentra *starShop OSS24, proyecto del que
nuestra aplicación tomará muchas ideas. *starShop OSS es una solución de gestión de
locutorios distribuida bajo licencia GPL basada en Asterisk. Al igual que sucede con
asterBilling, la gestión de la aplicación se realiza a través de una interfaz web, que se
muestra en la figura 6-6. *starShop está disponible en varios idiomas y permite, por
ejemplo, facturación en tiempo real, consulta del historial de llamadas,
personalización de las tarifas según el destino llamado u obtención de informes sobre
las llamadas realizadas. Sin embargo, la última versión de *starShop OSS fue lanzada
en marzo de 2007 y el proyecto fue oficialmente descontinuado en febrero de 2008.
Debido a esto, algunas funciones no han sido implementadas completamente y el

23
http://astercc.org/about-asterbilling
24
http://www.starshop-online.com/
CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 113

desarrollo de la aplicación está en estos momentos estancado. Aún así, desde la página
oficial de la aplicación siguen ofreciéndose a día de hoy servicios de instalación y
configuración de *starShop para las empresas u organismos que lo deseen, previo
pago del precio estipulado. Además, la misma empresa ofrece una versión online de su
aplicación, *starShop ONLINE, para la cual el hospedaje y toda la configuración se
encuentran en un servidor remoto. Los usuarios se podrán conectar a través de Internet
a la web de la aplicación y tras identificarse podrán gestionar el locutorio a través de
ésta. En la figura 6-7 se muestra la configuración para locutorios ofrecida por la
empresa que comercializa *starShop ONLINE.

Figura 6-6. Vista de gestión de precios en la interfaz de *starShop OSS

Figura 6-7. Instalación propuesta por Global Communication Networks Ltd. para la configuración de red de un
locutorio en caso de emplear *starShop ONLINE

3.3 IDENTIFICACIÓN DE LOS REQUISITOS

Para comenzar a desarrollar la aplicación de gestión del sistema telefónico de


locutorios primero hay que identificar los requisitos mínimos que ésta tiene que cumplir. Tras
consultar las especificaciones de los sistemas de mayor implantación actualmente y charlar
con gente que tiene experiencia trabajando con este tipo de aplicaciones, se ha llegado a la
114 LA TELEFONÍA IP EN MINIORDENADORES

conclusión de que para ser liberada la aplicación deberá como mínimo tener las siguientes
características:

• Gestión de usuarios. Posibilidad de crear, editar y borrar usuarios de nuestra


aplicación.

• Gestión de operadores VoIP y precios de compra. Posibilidad de crear, editar y


borrar operadores VoIP. Además se podrán crear, editar y borrar precios de compra
asociados a estos operadores que dependan del destino al que se realice la llamada.

• Prioridades en el uso de operadores VoIP. Posibilidad de definir el orden de


prioridad para emplear los operadores VoIP dependiendo del destino al que se llame.
Además, será útil que haya alguna forma de definir prioridades automáticamente, por
ejemplo dependiendo del coste de la llamada por minuto.

• Gestión de precios de venta. Posibilidad de crear, editar y borrar los precios de venta
al público dependiendo del destino.

• Visualización en tiempo real del estado de las cabinas. Es importante que se puedan
visualizar en tiempo real datos como el tiempo de la llamada actual o el destino al que
se está llamando. Además, nuestra aplicación debe tener la opción de bloquear las
cabinas, tan común en locutorios.

• Emisión de facturas. Posibilidad de emitir facturas de las llamadas realizadas desde


una cabina. Además, se deberá conservar un histórico de facturas al que se pueda
acceder fácilmente en caso de que se desee recuperar alguna de éstas.

• Acceso a informes sobre las llamadas realizadas en el locutorio. Visualización de


datos relacionados con el coste de cada llamada y el precio de venta de ésta, pudiendo
obtener informes sobre ganancias o pérdidas en diferentes periodos de tiempo.

3.4 USUARIOS DEL SISTEMA

La aplicación a desarrollar va a permitir la interacción de diferentes tipos de usuarios.


Dependiendo del rol que éstos tengan, los usuarios podrán realizar unas acciones u otras
dentro de Mi Locutorio. En la figura 6-8 se muestra un pequeño diagrama con la estructura
jerárquica de los usuarios de Mi Locutorio.

A continuación se explica más detalladamente el papel de cada uno de ellos con


respecto al sistema.

Usuario de la aplicación

Los usuarios de la aplicación son los trabajadores del locutorio que utilizan la
aplicación de gestión. Al ser un tipo de usuario general sus funcionalidades se heredan a otros
usuarios y las acciones que puede realizar son muy limitadas, como por ejemplo cerrar la
aplicación.
CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 115

Figura 6-8. Jerarquía de usuarios de la aplicación Mi Locutorio

Usuario no identificado

Los usuarios no identificados son aquellos que han accedido a la aplicación sin iniciar
sesión. Hereda del usuario de la aplicación e incluye una nueva función, iniciar sesión.

Usuario identificado

Los usuarios identificados son aquellos que acceden a la aplicación y se identifican


satisfactoriamente en ella. Hereda todas las funciones del usuario de la aplicación y añade la
opción de cerrar sesión.

Administrador

Los administradores heredan de los usuarios identificados y tendrán acceso a todas las
funciones de la aplicación de gestión del locutorio. A continuación se enumeran las opciones
entre las que podrán elegir:

• Visualización de información de las cabinas en tiempo real, pudiendo facturar a los


clientes una vez han finalizado sus llamadas.

• Acceso a un historial de llamadas.

• Visualización de informes derivados de las llamadas realizadas en el locutorio, algo


muy útil para controlar el gasto de las llamadas desde las cabinas y los ingresos
derivados de éstas.

• Acceso completo a la gestión de precios de compra.

• Acceso completo a la gestión de precios de venta.

• Gestión de operadores VoIP.


116 LA TELEFONÍA IP EN MINIORDENADORES

• Gestión de las prioridades en el uso de operadores VoIP dependiendo del destino al


que se realice la llamada.

• Acceso a la gestión de usuarios de la aplicación.

• Acceso a la configuración básica de la aplicación.

Operador

Por último, los usuarios con permisos de operador tendrán menos opciones disponibles
que los administradores. De hecho, este rol está pensado para un dependiente que únicamente
puede comprobar el estado de las cabinas, facturar y obtener información sobre los precios de
venta. Las opciones a las que podrán acceder desde Mi Locutorio son las siguientes:

• Visualización de información de las cabinas en tiempo real, pudiendo facturar a los


clientes una vez hayan finalizado sus llamadas.

• Acceso a un historial de llamadas.

• Acceso a la visualización de los precios de venta.

4 Diseño del sistema

4.1 DISEÑO DEL ESQUEMA DE RED

Para realizar el diseño del sistema lo primero que hay que que hacer es plantear la
estructura de red que debe tener el locutorio. Aunque la aplicación a desarrollar podrá ser
instalada y configurada en diferentes entornos, en este apartado se define una arquitectura de
red local que parece adecuada para ser empleada en la mayoría de los casos. En la figura 6-9
se muestra un dibujo con la infraestructura de red que se ha diseñado. A continuación se
enumeran los elementos que la componen así como algunas de sus características:

• Miniordenador con la aplicación. La base de este trabajo es el uso de cualquiera de


los tres miniordenadores con los que se ha trabajado durante el proyecto. Está
conectado a la red local a través del switch. Para facilitar la conexión al sistema de
gestión desde el ordenador personal del establecimiento, el miniordenador empleado
debe tener asociada una IP fija dentro de la red local.

• Teléfonos IP. Ya se ha hablado de ellos durante el capítulo 2 de este mismo proyecto.


Éstos utilizan una IP del rango de direcciones locales disponibles. En principio no hay
ningún problema para que dichas direcciones sean asignadas por DHCP25 por el
router.

• Ordenador personal. Es el ordenador con el que el encargado o el dependiente del


negocio gestionará el locutorio. Por lo tanto, utiliza éste para conectarse al
miniordenador y así poder acceder a la gestión de la aplicación. Además, este
ordenador tiene acceso a Internet ya que su actividad no se tiene por qué limitar

25
DHCP (Dynamic Host Configuration Protocol en inglés) es un protocolo de red que permite a los nodos de una red IP
obtenter sus parámetros de configuración de forma automática.
CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 117

únicamente a la gestión de la aplicación creada. Al igual que los teléfonos IP, este
ordenador puede obtener su dirección por DHCP.

• Switch. Todos los teléfonos, el ordenador personal y el miniordenador del locutorio se


encuentran conectados al switch de la red local. El número mínimo de entradas en este
dispositivo depende del número de teléfonos que tiene el locutorio.

• Router módem. Este dispositivo permite conectarnos a Internet desde la red local. Es
decir, en definitiva conectará nuestra red privada con la red pública.

Figura 6-9. Configuración de red propuesta para nuestro sistema de gestión de locutorios

4.2 DISEÑO DE LA APLICACIÓN MI LOCUTORIO

Antes de comenzar a programar es necesario tener una idea clara de la estructura de la


aplicación a diseñar, clasificar los distintos componentes que lo van a formar y reflexionar
sobre las relaciones entre éstos así como sobre el comportamiento que deben ofrecer.

Se va a diseñar una aplicación que utiliza la arquitectura cliente-servidor. El usuario


utiliza un navegador web en el ordenador personal del locutorio que le permite utilizar la
aplicación de gestión del locutorio. Esta aplicación se comunica con los servicios del
miniordenador. Una de las ventajas que aporta esta aproximación al diseño es que la
aplicación creada es totalmente independiente del sistema operativo que se ejecute en el
118 LA TELEFONÍA IP EN MINIORDENADORES

ordenador desde el cuál se realiza la gestión del locutorio. En la figura 6-10 se muestra la
arquitectura de la aplicación que se pretende diseñar.

Figura 6-10. Arquitectura y conexiones entre los elementos principales de la aplicación Mi Locutorio

Mediante la aplicación web se puede consultar el estado actual de todas las cabinas
así como gestionarlas gracias a la conexión con algún módulo que sea capaz de interaccionar
con Asterisk. Además, se puede consultar el historial de llamadas, añadir nuevos trunks26 o
añadir nuevas tarifas de venta para llamadas a un determinado país por poner algunos
ejemplos. También se pueden realizar otras acciones relacionadas con la gestión de la
aplicación, como añadir nuevos usuarios con diferentes permisos a ésta o definir los
parámetros usados para imprimir las facturas. Todo esto es posible gracias al uso de alguna
tecnología del tipo lado del servidor27 para generar páginas web dinámicamente. De esta
forma el usuario puede interactuar con la aplicación web para realizar cambios que se reflejen
en la base de datos, a la vez que la página web muestra en tiempo real la información que se
encuentra en la base de datos.

Gracias al uso en el servidor de algún módulo que sea capaz de comunicarse con el
servicio Asterisk, se muestra información en tiempo real sobre el estado de cada una de las
cabinas y se pueden realizar otras acciones desde el navegador web, como el colgado de
teléfonos.

Como ya se ha comentado, Asterisk es el encargado de realizar las llamadas. En


nuestro caso empleamos un script para ello, que se comunicará también con la base de datos
para obtener información acerca de los trunks o guardar los CDRs de las llamadas realizadas
desde cada una de las cabinas. El algoritmo empleado en el script así como otros detalles
sobre la interacción de Asterisk con el sistema se especifican más adelante.

Por último, el sistema de gestión de la base de datos es el encargado de almacenar


información del locutorio y permitir la comunicación de Asterisk y el servidor web cuando
tengan que realizar operaciones relacionadas con la base de datos.

26
Trunk es comúnmente utilizado en VoIP para referirnos a un proovedor de servicio de finalización de llamadas entre teléfonos
que se encuentren en tipos diferentes de redes, por ejemplo entre un teléfono VoIP y uno conectado a PTSN.
27
Las tecnologías del tipo lado del servidor (server-side en inglés) se refieren a operaciones que son llevadas a cabo por el servidor
en una aplicación del tipo cliente-servidor.
CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 119

Asterisk

El funcionamiento de Asterisk es uno de los aspectos más importantes del diseño


del sistema. Los archivos de configuración de éste para cada una de las cabinas y de los
operadores VoIP se generarán automáticamente desde la aplicación web (independientemente
del protocolo que empleen para comunicarse), de forma que a la hora de configurar Asterisk
se editará el mínimo número de archivos de configuración posible.

A la hora de realizar las llamadas, se utiliza Asterisk Gateway Interface (AGI) para
añadir soporte para algún lenguaje de programación a Asterisk y así poder realizar todas las
operaciones de interacción con la base de datos y procesamiento de información necesarias
para el correcto funcionamiento del sistema. Por lo tanto, durante la implementación de la
aplicación es necesario escribir un script que se ejecuta cada vez que se realiza una llamada
desde cualquiera de las cabinas del locutorio. Para ello, el script debe realizar las siguientes
acciones:

1) Abrir conexión con la base de datos de la aplicación.

2) Obtener la cabina desde la que se emite la llamada y el número al que el cliente en esa
cabina está llamando.

3) Comprobar si la cabina está bloqueada.

a. En caso afirmativo, finalizar la ejecución del script (no se pueden realizar


llamadas hasta que no sea desbloqueada desde la interfaz web).

b. En caso negativo, continuar.

4) Obtener listado de trunks que pueden realizar la llamada a dicho destino.

5) Mientras la llamada no haya sido completada a través de algún trunk del listado y
queden en éste trunks disponibles para seguir intentando llamar.

a. Intentar completar la llamada a través del trunk de máxima prioridad no


utilizado anteriormente.

6) Guardar detalles sobre la llamada en la base de datos.

7) Cerrar conexión con la base de datos de la aplicación.

Interfaz web

Otro aspecto a tener en cuenta durante el diseño del sistema es el diseño de la interfaz
web ya que ésta debe ser usable, visual e intuitiva.

Aunque no se defina completamente la interfaz, ya que ésta es susceptible de cambiar


durante la implementación según el estilo visual que creamos que cumple más fielmente el
propósito, sí se puede realizar un pequeño boceto sobre la estructura y las diferentes partes
que ésta debe poseer (figura 6-11).
120 LA TELEFONÍA IP EN MINIORDENADORES

Figura 6-11. Estructura preliminar de la página principal de la aplicación web

4.3 DISEÑO DE LA BASE DE DATOS

Una de las partes más importantes de la aplicación será la base de datos ya que el
grueso de la información para el funcionamiento de la aplicación Mi Locutorio se encuentra
almacenado en ésta. En la figura 6-12 se puede ver el modelo entidad-relación28 diseñado para
la aplicación.

A continuación se comenta cada tabla de la base de datos y los campos que la


componen.

Tabla cabinas

La tabla cabinas almacena los datos sobre cada una de las cabinas o teléfonos que se
encuentran en el locutorio. Esta información es útil para la gestión de dichas cabinas desde la
aplicación web y para poder configurarlas correctamente desde Asterisk. La tabla 6-1 muestra
información de cada uno de los campos que componen la tabla.
Tabla 6-1. Datos en la tabla cabinas de la base de datos de la aplicación

Nombre del campo Tipo de datos Descripción

Número asignado a la cabina para poder identificarse con


nombre Entero
el servidor Asterisk (clave primaria).
Contraseña para poder identificarse con el servidor
password Entero
Asterisk.
Variable con el estado del bloqueo de la cabina en ese
bloqueada Lógico
instante.
tecnologia Enumerado Protocolo que emplea la cabina para comunicarse.
Información que es necesario insertar en un archivo de
config Texto
configuración de Asterisk para realizar llamadas.

28
En ingeniería del software, un diagrama o modelo entidad-relación (a veces denominado E-R o DER) es un concepto de
modelado de bases de datos que nos sirve para realizar una representación conceptual de la información. Los objetos de la base de datos
serán visualizados como entidades con una serie de atributos y éstos se vincularán mediante relaciones.
CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 121

Figura 6-12. Modelo E-R de la base de datos empleada por Mi Locutorio

Tabla cdrs

La tabla cdrs almacena los datos sobre cada una de las llamadas realizadas en las
cabinas del locutorio, sin importar cual haya sido su resultado final. Esta tabla es de vital
importancia ya que a partir de ella se obtienen las facturas para los clientes así como datos de
mucho valor para un gestor de locutorios. En la tabla 6-2 se muestra información sobre los
datos contenidos en dicha tabla.

Tabla config

La tabla config almacena datos sobre la configuración del locutorio que serán
empleados para la emisión de facturas, para la gestión de tarifas o para definir algunos
aspectos de la apariencia de la aplicación. En la tabla 6-3 se muestra información sobre los
datos contenidos en esta tabla.
122 LA TELEFONÍA IP EN MINIORDENADORES

Tabla 6-2. Datos en la tabla cdrs de la base de datos de la aplicación

Nombre del campo Tipo de datos Descripción

Identificador de un CDR (clave primaria


cdrid Entero
autoincrementable).
Número de la cabina desde la que fue realizada la
cabina Entero
llamada (índice).
telefono Cadena de caracteres Teléfono al que se realizó la llamada.
El nombre del trunk a través del cuál fue realizada la
trunk Cadena de caracteres
llamada (índice).
Respuesta devuelta por Asterisk al realizar la llamada:
respuesta Cadena de caracteres
ANSWER, CANCEL, BUSY, etc.
segundosfacturados Entero Segundos que ha duró la llamada.
El precio que tuvo la llamada para el cliente que la
precioventa Real
realizó.
El precio que tendrá la llamada para el locutorio, es
preciocompra Real
decir, el precio que tendremos que pagar al trunk.
El precio por minuto al que fue vendida la llamada para
precioventaminuto Real
el cliente que la realizó.
comienzollamada Cadena de caracteres La fecha y hora de comienzo de la llamada (índice).

destino Cadena de caracteres El lugar al que fue realizada la llamada (índice).


Variable que indicará si la factura para dicha llamada ha
sbool Lógico
sido ya emitida o no.
Número de factura en la que deberá ser incluida esta
numfactura Entero
llamada.
tiempoahora Cadena de caracteres La fecha y hora en la que fue emitida la factura (índice).

Tabla 6-3. Datos en la tabla cdrs de la base de datos de la aplicación

Nombre del campo Tipo de datos Descripción

Identificador de configuración (clave primaria


id Entero
autoincrementable).
moneda Cadena de caracteres Siglas de la divisa con la que trabajará la aplicación.
Nombre de la compañía que usa la aplicación de gestión
compania Cadena de caracteres
del locutorio.
Dirección de la compañía que usa la aplicación de
direccion Texto
gestión del locutorio.
Teléfono de contacto de la compañía que usa la
telefono Cadena de caracteres
aplicación de gestión del locutorio.
CIF de la compañía que usa la aplicación de gestión del
cif Cadena de caracteres
locutorio.
El número de cabinas que deberán aparecer en cada fila
numcabinasfila Entero
de la pantalla principal de la aplicación.
CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 123

Tabla tarifasclientes

La tabla tarifasclientes almacena información sobre los precios de venta que serán
aplicados a los clientes del locutorio según el destino al que efectúen la llamada. En la tabla
6-4 se muestra información sobre los datos contenidos en esta tabla.
Tabla 6-4. Datos en la tabla tarifasclientes de la base de datos de la aplicación

Nombre del campo Tipo de datos Descripción

Identificador de configuración (clave primaria


id Entero
autoincrementable).
El código identificador del país al que se realiza la
codigopais Cadena de caracteres
llamada (único).
destino Cadena de caracteres El lugar al que se realiza la llamada (índice).
Precio del establecimiento de llamada en la divisa
precioconexion Real
principal utilizada por la aplicación.
Precio por minuto de llamada en la divisa principal
preciominuto Real
utilizada por la aplicación.
Duración del bloque inicial (en segundos) que será
periodosegundosinicial Entero
facturado cuando se realice la llamada.
Duración de los bloques (en segundos) para realizar la
periodosegundos Entero
facturación cuando se realice una llamada.
Segundos al comenzar la llamada que no serán
segundoslibres Entero
contabilizados a la hora de realizar el cobro.
Identificador del primer trunk por el que se intentará
prioridad1 Entero
realizar la llamada a este destino.
Identificador del segundo trunk por el que se intentará
prioridad2 Entero
realizar la llamada a este destino.
Identificador del tercer trunk por el que se intentará
prioridad3 Entero
realizar la llamada a este destino.
Identificador del cuarto trunk por el que se intentará
prioridad4 Entero
realizar la llamada a este destino.
Identificador del quinto trunk por el que se intentará
prioridad5 Entero
realizar la llamada a este destino.

Tabla tarifastrunks

La tabla tarifastrunks almacena la información sobre los precios de compra que paga
el dueño del locutorio a cada uno de los operadores VoIP para poder realizar llamadas a los
destinos especificados. En la tabla 6-5 se muestra información sobre los datos contenidos en
esta tabla.

Tabla trunks

La tabla trunks almacena información general sobre los operadores VoIP que finalizan
las llamadas. Esta información es útil para asuntos tan diversos como obtener datos valiosos
sobre el coste de las llamadas realizadas en el locutorio o saber qué tecnología es necesario
usar para realizar llamadas a través de dicho trunk. En la tabla 6-6 se muestra información
sobre los datos contenidos en esta tabla.
124 LA TELEFONÍA IP EN MINIORDENADORES

Tabla 6-5. Datos en la tabla tarifastrunks de la base de datos de la aplicación

Nombre del campo Tipo de datos Descripción

Identificador de configuración (clave primaria


id Entero
autoincrementable).
El código identificador del país al que se realiza la
codigopais Cadena de caracteres
llamada (índice).
destino Cadena de caracteres El lugar al que se realiza la llamada (índice).
Identificador del trunk que proporciona el servicio
idtrunk Entero
(índice).
prefijo Cadena de caracteres Prefijo que debe ser añadido al teléfono que se llama.

sufijo Cadena de caracteres Sufijo que debe ser añadido al teléfono que se llama.
Precio del establecimiento de llamada en la divisa
precioconexion Real
empleada por el trunk.
Precio por minuto de llamada en la divisa principal
preciominuto Real
utilizada por el trunk.
Duración del bloque inicial (en segundos) que será
periodosegundosinicial Entero
facturado cuando se realice la llamada.
Duración de los bloques (en segundos) para realizar la
periodosegundos Entero
facturación cuando se realice una llamada.
Segundos al comenzar la llamada que no serán
segundoslibres Entero
contabilizados a la hora de realizar el cobro.

Tabla 6-6. Datos en la tabla trunks de la base de datos de la aplicación

Nombre del campo Tipo de datos Descripción

Identificador del trunk (clave primaria


id Entero
autoincrementable).
nombre Cadena de caracteres El nombre del trunk (único).

moneda Cadena de caracteres Siglas de la divisa con la que trabajará el trunk.


Tipo de cambio de la divisa que utiliza nuestra
cambio Real
aplicación con respecto a la divisa que emplea el trunk.
tecnologia Enumerado Protocolo que emplea el trunk para comunicarse.
Información que es necesario insertar en un archivo de
config Texto
configuración de Asterisk para realizar llamadas.

Tabla usuarios

La tabla usuarios almacena información relativa a los usuarios de la aplicación de


gestión del locutorio. En la tabla 6-7 se muestra información sobre los datos que contiene esta
tabla en la base de datos.

Tabla usuariosniveles

La tabla usuariosniveles almacena información de los distintos niveles que un usuario


puede tener en la aplicación de gestión de locutorios. Dependiendo del nivel éste tendrá
asignados diferentes permisos en la aplicación. En la tabla 6-8 se muestra información de los
datos que contiene dicha tabla.
CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 125

Tabla 6-7. Datos en la tabla usuarios de la base de datos de la aplicación

Nombre del campo Tipo de datos Descripción

Identificador del usuario (clave primaria


id Entero
autoincrementable).
El nombre identificador del usuario en la aplicación
login Cadena de caracteres
(único).
password Cadena de caracteres La contraseña del usuario.

idnivel Entero Identificador del nivel del usuario.

apellidos Cadena de caracteres Apellidos del usuario.

nombre Cadena de caracteres Nombre del usuario.

direccion Texto Dirección del usuario.

telefono Cadena de caracteres Teléfono de contacto del usuario.

Tabla 6-8. Datos en la tabla usuariosniveles de la base de datos de la aplicación

Nombre del campo Tipo de datos Descripción

Identificador del nivel de usuario para la aplicación


id Entero
(clave primaria).
nombre Cadena de caracteres Nombre asignado al nivel.

5 Implementación de la aplicación Mi Locutorio

5.1 INTRODUCCIÓN

La implementación de la aplicación Mi Locutorio no es una tarea fácil ya que hay que


implementar cada uno de los componentes que se han enumerado durante la fase de diseño de
la aplicación de forma adecuada y crear el código necesario para que al ensamblar todo el
sistema trabaje de la forma esperada.

En este apartado se presentan las tecnologías que se han utilizado para implementar la
aplicación, a excepción de Asterisk que ya ha sido tratado en otro capítulo aparte. Una vez
presentadas, se verá la implementación de la aplicación web utilizando estas tecnologías y
enumeraremos los scripts creados para que el adecuado funcionamiento de Mi Locutorio.

5.2 TECNOLOGÍA EMPLEADA

5.2.1 MySQL

MySQL es un sistema de gestión de base de datos relacional, multihilo y multiusuario


con más de once millones de instalaciones. MySQL se ejecuta como servidor, proporcionando
acceso multiusuario a un determinado número de bases de datos.
126 LA TELEFONÍA IP EN MINIORDENADORES

La empresa MySQL AB29 —desde enero de 2008 una subsidiaria de Sun


Microsystems— desarrolla MySQL como software libre. Por un lado, MySQL se ofrece bajo
la GNU GPL para cualquier uso compatible con esta licencia, aunque las empresas que
quieran incorporarlo en productos privativos también pueden comprar a la empresa una
licencia específica que les permita este uso. Al contrario que proyectos como Apache, donde
el software es desarrollado por una comunidad pública y el copyright del código está en poder
del autor individual, MySQL es propiedad y está patrocinado por una empresa privada, que
posee el copyright de la mayor parte del código. Esto es lo que posibilita el esquema de
licenciamiento anteriormente mencionado. Además de la venta de licencias privativas, la
compañía ofrece soporte y servicios, así como formación y certificaciones para el servidor
MySQL.

MySQL está desarrollado en su mayor parte en C y C++. Para generar el analizador


léxico de SQL ha sido empleado Yacc30, mientras que el analizador léxico ha sido creado sin
la ayuda de ningún generador. MySQL funciona en muchas plataformas diferentes, como
FreeBSD, Linux, Solaris, Mac OS X o Windows por poner algunos ejemplos.

Para la administración de MySQL se puede usar la herramienta de línea de comandos


incluida con el paquete de gestión de bases de datos. También hay disponibles interfaces
gráficas de usuarios para administración en la página oficial de MySQL, como MySQL
Administrador y MySQL Query Browser. Por último, además de las herramientas creadas por
MySQL AB que hemos mencionado anteriormente, existen aplicaciones comerciales y no
comerciales disponibles, como phpMyAdmin (una interfaz web de gestión gratuita
implementada en PHP) o Navicat Lite Edition (una aplicación de gestión gratis para uso en
escritorio).

Existen librerías disponibles para los lenguajes de programación más utilizados que
permiten acceder a las bases de datos MySQL a través de APIs31 específicas. Además,
MyODBC es una interfaz ODBC que permite a los lenguajes que soporten esta interfaz
comunicarse con la base de datos MySQL, ampliando de esta forma el número de lenguajes
que pueden interaccionar con MySQL.

Desde agosto de 2007, MySQL AB ofrece MySQL en dos versiones diferentes,


MySQL Community Server y Enterprise Server, cuyo código fuente es común. La serie de
producción actual de MySQL es 5.0 y la última versión estable que ha sido lanzada es la
5.0.27.

5.2.2 Lighttpd

Lighttpd es un servidor web seguro, rápido y flexible, optimizado para sistemas cuya
velocidad es un aspecto crítico. Es adecuado para servidores que sufran problemas de carga
debido a que usa poca memoria (comparándolo con otros servidores web) y su uso del
procesador también es bajo. Fue diseñado originalmente por Jan Kneschke, un programador
alemán que también trabaja para MySQL. Lo que nació como un experimento de cómo

29
MySQL AB es una compañía sueca fundada por David Axmark, Allan Larsson, y Michael Widenius. Para más información
se puede consultar http://www.mysql.com/.
30
Yacc (Yet Another Compiler Compiler) es un generador de analizadores sintácticos muy común en sistemas Unix.
31
Un API (Application Programming Interface) representa una interfaz de comunicación entre componentes software.
CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 127

manejar 10000 conexiones en paralelo en un servidor, hoy día es un servidor web de una gran
aceptación en todo el mundo.

Lighttpd soporta las interfaces FastCGI32, SCGI y CGI para la comunicación con otros
programas externos, permitiendo que las aplicaciones web escritas en cualquier lenguaje de
programación puedan ser usadas en este servidor. Es por ello que Lighttpd es muy popular
entre las comunidades de desarrolladores de Python, Perl, Ruby o Lua. Además, el
rendimiento de PHP ha recibido especial atención debido a la gran aceptación de la que goza
este lenguaje. De hecho, la interfaz FastCGI de Lighttpd podrá configurarse para emplear
aceleradores de PHP de forma eficiente.

Lighttpd es software libre y se distribuye bajo licencia BSD. En estos momentos este
servidor web se encuentra disponible para ser usado en sistemas GNU/Linux y otros sistemas
operativos Unix. Además, el proyecto WLMP se encarga desde hace algún tiempo de realizar
la portabilidad para poder ejecutar Lighttpd en Windows.

La última versión estable es la 1.4.20 y fue liberada el 30 de septiembre de 2008.

5.2.3 PHP

PHP (acrónimo inglés recursivo que significa PHP Hypertext Pre-processor) es un


lenguaje de programación interpretado, diseñado originalmente para la creación de páginas
web dinámicas. Es usado principalmente en interpretación del lado del servidor (server-side
scripting), aunque actualmente también puede ser utilizado desde una interfaz de línea de
comandos o en la creación de aplicaciones con interfaz gráfica usando las bibliotecas Qt o
GTK+.

PHP fue creado originalmente por Rasmus Lerdorf en 1995. Hoy día la
implementación principal de PHP es producida por The PHP Group y sirve como el estándar
de facto para PHP al no haber ninguna especificación formal. PHP es software libre
distribuido bajo la PHP License. PHP puede ser desplegado en la mayoría de servidores web y
en casi todos los sistemas operativos y plataformas sin coste alguno, encontrándose a día de
hoy instalado en más de 20 millones de sitios web y en un millón de servidores.

La principal aplicación de PHP es el desarrollo web, pudiendo ser embebido dentro de


código HTML. Cuando el cliente hace una petición al servidor para que le envíe una página
web, el servidor ejecuta el intérprete de PHP. Éste procesa el script solicitado que generará el
contenido de manera dinámica (por ejemplo obteniendo información de una base de datos33).
El resultado es enviado por el intérprete al servidor, quien a su vez se lo envía al cliente.

Como sucede con muchos lenguajes interpretados, los scripts PHP se guardan
normalmente como código fuente y son compilados en tiempo de ejecución por el intérprete
de PHP. Sin embargo, compilar en tiempo de ejecución reducirá el rendimiento ya que se
añadirá un paso extra durante la ejecución en tiempo real del script. Por ello, los scripts PHP
también pueden ser compilados antes de su ejecución usando compiladores PHP, de modo
similar a lo realizado con lenguajes como C. Además, los aceleradores de PHP pueden ofrecer

32
FastCGI es una alternativa al CGI estándar, cuya diferencia radica principalmente en que el servidor crea un único proceso
persistente para manejar un gran número de solicitudes en lugar de crear un proceso por cada solicitud del cliente.
33
PHP posee la capacidad de conectarse a los sistemas de gestión de base de datos más utilizados en la actualidad, destacando su
conectividad con MySQL.
128 LA TELEFONÍA IP EN MINIORDENADORES

ganancias significativas en el rendimiento cacheando la forma compilada de un script PHP en


memoria compartida. De esta forma, se evita el tiempo extra empleado para analizar
sintácticamente y compilar el código cada vez que el script es solicitado.

En estos momentos, la versión de PHP más actual es la 5.2.8, liberada en diciembre de


2008.

eAccelerator

eAccelerator es un acelerador de PHP gratuito de código abierto. Éste incrementará el


rendimiento de los scripts PHP cacheándolos cuando estén compilados, para que de esta
forma el tiempo empleado en la compilación de éstos sea prácticamente nulo. También
optimizará los scripts para acelerar su ejecución. eAccelerator está basado en el acelerador de
PHP MMCache, creado por Dmitry Stogov y del que todavía conserva gran parte de código
fuente.

Cada vez que se accede a un script PHP, PHP analiza y compila los scripts a
bytecode34. Una vez eAccelerator se instala en el servidor, éste optimiza el bytecode
compilado y lo cachea en la memoria compartida o en el disco. De esta forma en cada acceso
posterior al script, eAccelerator empleará el bytecode cacheado si está disponible en lugar de
volver a compilar el script.

eAccelerator sigue todavía en desarrollo. La última versión disponible es la 0.9.5.3 y


soporta todas las versiones que han aparecido tanto de PHP4 como de PHP5.

5.2.4 Flash Operator Panel

Flash Operator Panel es una aplicación de control para Asterisk. Se ejecuta en un


navegador web que pueda ejecutar un plugin Flash y muestra información en tiempo real
acerca de la actividad telefónica de nuestra centralita. La forma en la que se presentan los
contenidos es personalizable, pudiendo por ejemplo modificar los colores o los iconos que se
emplean. Además, tiene soporte para contextos por lo que los clientes registrados en nuestra
centralita pueden mostrarse separados por grupos.

Flash Operator Panel permitirá, entre otras cosas, realizar las siguientes acciones
relacionadas con la centralita Asterisk:

• Visualizar qué extensiones están ocupadas, sonando o disponibles.

• Comprobar quién está hablando y con quién.

• Comprobar el estado de los registros SIP e IAX de dispositivos en nuestra centralita.

• Ver los agentes identificados en el sistema.

• Colgar una llamada.

• Automáticamente mostrar una página con detalles de algún cliente.

34
Bytecode es un código intermedio más abstracto que el código máquina que recibe su nombre porque normalmente cada código
de operación tiene una longitud de un byte.
CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 129

Flash Operator Panel consta de dos partes: un servidor escrito en Perl y un cliente
Flash. De esta forma, Flash Operator Panel puede ser ejecutado sobre navegadores de
diferentes sistemas operativos como Windows, Mac OS X o Linux, siempre que sean
compatibles con el plugin Flash. Además, Flash Operator Panel se puede integrar fácilmente
en cualquier página web que hayamos creado.

La última versión disponible de esta aplicación es la 0.29, lanzada en mayo de 2008.

5.2.5 Sajax

Sajax (Simple AJAX Toolkit) es una herramienta de código abierto diseñada para
hacer lo más fácil posible el uso de AJAX35 en páginas web. Este paquete permite al
programador llamar a funciones ASP, ColdFusion, Io, Lua, PHP, Perl, Python o Ruby desde
su página web mediante JavaScript sin necesidad de forzar una actualización de la página en
el navegador. El grueso del trabajo es realizado por el paquete Sajax, así que gracias a éste
podremos usar AJAX de forma sencilla.

La última versión lanzada es la 0.12. Esta actualización mejora notablemente el


soporte para PHP, algo que resulta interesante para el desarrollo de nuestra aplicación.

5.3 APLICACIÓN WEB

Introducidos los componentes que emplearemos en nuestro sistema para hacer


funcionar la aplicación Mi Locutorio, podemos pasar a comentar el código que la compondrá.

Es importante que lo primero que hagamos sea comentar cómo hará uso la aplicación
de algunos de los elementos que hemos comentado en el anterior punto:

• MySQL. Es el el servidor de base datos instalado en el miniordenador que almacena


la información del locutorio y que interactúa con el script y la página web
desarrollada.

• Flash Operator Panel. Se integra en la aplicación web a través de su parte cliente en


Flash, que interactúa con la parte servidor de Flash Operator Panel. Precisamente el
servidor le proporciona información que obtiene estableciendo comunicaciones con el
servicio Asterisk que se ejecuta en la misma máquina que éste.

• Sajax. Se utiliza para implementar unas funciones simples que permitirán mejorar la
gestión de la aplicación evitando la recarga excesiva de páginas web desde el servidor.
Su uso se realiza exclusivamente en la página de gestión de cabinas para actualizar los
precios totales a pagar por los clientes que hayan empleado cada una de las cabinas,
para poner a cero una cabina cuando haya sido pagada o para bloquear o desbloquear
alguna de las cabinas de locutorio.

Una vez dicho esto, se va a ver el código PHP que se ha implementado para la
aplicación. El código completo de Mi Locutorio se encuentra en el CD-ROM que se adjunta
con el proyecto. Aún así, a continuación se muestra la lista de archivos y carpetas que

35
AJAX, acrónimo de Asynchronous JavaScript And XML (JavaScript asíncrono y XML en castellano), es una técnica de
desarrollo web para crear aplicaciones interactivas o RIA (Rich Internet Applications). Estas aplicaciones se ejecutan en el navegador de
los usuarios mientras se mantiene la comunicación asíncrona con el servidor en segundo plano.
130 LA TELEFONÍA IP EN MINIORDENADORES

componen la aplicación web así como una breve descripción del contenido de cada uno de
ellos.
CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 131

5.4 SCRIPTS DESARROLLADOS

Además del código PHP descrito en el punto anterior, ha sido necesario crear una serie
de scripts y editar algunos ficheros para la correcta configuración de los elementos que
componen el sistema. Todos los archivos pueden encontrarse en el CD-ROM que se adjunta
con este proyecto. Además, se puede encontrar más información sobre su contenido en el
apéndice I de esta memoria. A continuación se enumeran los archivos que se han
implementado y se comenta brevemente la función que cumple cada uno de ellos:

• MySQL. Se ha desarrollado un script SQL llamado milocutorio.sql de forma que


únicamente tengamos que cargarlo en el servidor MySQL y se cree toda la estructura
de tablas de la base de datos junto con los datos iniciales.

• Asterisk. Se han editado los siguientes archivos de configuración de Asterisk para que
se ajusten a los requisitos de la aplicación:

o sip.conf.

o iax.conf.

o zapata.conf.

o manager.conf.

o extensions.conf.

Además, se ha escrito un script en Perl para el AGI llamado milocutorio.agi que


utiliza el archivo de configuración que también hemos creado milocutorio-config.conf.
Como se expuso durante el diseño de la aplicación, este script controla el
funcionamiento de Asterisk cuando se realizan llamadas desde el locutorio, siguiendo
el algoritmo que se vió en el apartado 4.2 de este capítulo.

• Flash Operator Panel. Este paquete se integra en la aplicación web. La configuración


del cliente Flash y del servidor Perl de Flash Operator Panel se cargan de los scripts
que se han creado a partir de los ejemplos que se proporcionan con la aplicación. En
concreto estos archivos son los siguientes:

o op_server.cfg. El archivo de configuración principal del servidor Flash


Operator Panel.

o op_style.cfg. El archivo dónde se guarda el diseño visual. Desde él se puede


cambiar el tamaño de los botones, los colores, la colocación de los iconos o el
tamaño de éstos por poner algunos ejemplos.

o op_buttons.cfg. El archivo de configuración de los botones Flash de cada uno


de los teléfonos en Flash Operator Panel.
132 LA TELEFONÍA IP EN MINIORDENADORES

6 Prueba del sistema

6.1 INTRODUCCIÓN

La instalación de componentes y la configuración del sistema que se ha diseñado es


una de las principales tareas que hay que realizar cuando se quiera ofrecer la solución de
gestión de locutorios a un cliente. Sin embargo, antes de pasar a comercializar un sistema hay
que ponerlo a prueba.

El objetivo en este apartado es describir los pasos que se deben seguir para ofrecer Mi
Locutorio completamente configurado y listo para ser usado en cualquiera de los
miniordenadores. Para ello se utilizará la estructura de red expuesta en el apartado 4.1 de este
capítulo.

Para la puesta en marcha del sistema partimos desde un punto en el que se encuentra
instalado el sistema operativo Debian Etch así como Asterisk en el miniordenador. Para
obtener más información sobre la instalación de ambos simplemente hay que consultar los
capítulos 3 y 4 del proyecto. Una vez instalados Debian y Asterisk, se procede a la instalación
y configuración del resto de componentes.

6.2 PUESTA EN MARCHA DE LOS SERVICIOS

Lighttpd

En primer lugar hay que realizar la instalación de Lighttpd con soporte PHP en el
equipo. Para realizar la instalación se ejecuta el siguiente comando:
$> apt-get install lighttpd

Si la instalación se ha realizado correctamente, puede escribir la dirección IP del


miniordenador desde cualquier otro ordenador de la red y visualizar la página que se observa
en la figura 6-13.

Figura 6-13. Página servida por Lighttpd para confirmar la instalación


CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 133

La versión instalada será la 1.4.13. Hay que indicar que en Debian el directorio raíz de
Lighttpd es por defecto /var/www y el archivo de configuración del servidor se encuentra en
/etc/lighttpd/lighttpd.conf.

PHP

Una vez instalado Lighttpd se instala PHP5 ejecutando el siguiente comando:


$> apt-get install php5-cgi php5-gd php-pear

Para activar el soporte para PHP5 en Lighttpd hay que editar únicamente dos archivos.
Edite el primer archivo /etc/php5/cgi/php.ini y añada la línea que aparece en el listado 6-1 a
éste.
Listado 6-1. Final del archivo php.ini

cgi.fix_pathinfo=1

En segundo lugar edite el archivo /etc/lighttpd/lighttpd.conf y añada mod_fastcgi a la


instanciación de server.modules, quedando ésta como se refleja en el listado 6-2.

Listado 6-2. Parte del archivo lighttpd.conf


server.modules = (
"mod_access",
"mod_alias",
"mod_accesslog",
"mod_fastcgi",
# "mod_rewrite",
# "mod_redirect",
# "mod_status",
# "mod_evhost",
# "mod_compress",
# "mod_usertrack",
# "mod_rrdtool",
# "mod_webdav",
# "mod_expire",
# "mod_flv_streaming",
# "mod_evasive"
)

Además, al final de este mismo archivo deberemos insertar las líneas que aparecen en
listado 6-3.

Listado 6-3. Final del archivo lighttpd.conf



fastcgi.server = ( ".php" => ((
"bin-path" => "/usr/bin/php5-cgi",
"socket" => "/tmp/php.socket"
)))

Una vez hecho todo esto, hay que reiniciar el servidor Lighttpd para que los cambios
que se han realizado surtan efecto. Para ello ejecute el siguiente comando:
$> /etc/init.d/lighttpd restart

Para comprobar que se ha realizado la instalación de PHP correctamente edite el


fichero /var/www/info.php, que tendrá únicamente el contenido mostrado en el listado 6-4.
134 LA TELEFONÍA IP EN MINIORDENADORES

Listado 6-4. Contenido de info.php


<?php
phpinfo();
?>

Si la instalación se ha realizado correctamente, al introducir la ruta a ese archivo desde


cualquier ordenador de la red (por ejemplo http://192.168.0.16/info.php) en un navegador web
y visualizar el resultado, debe aparecer algo como lo mostrado en la figura 6-14.

Figura 6-14. Información sobre la instalación de PHP en nuestro miniordenador

Precisamente el archivo que se acaba de crear resulta muy útil en todo momento ya
que muestra información útil acerca de nuestra instalación de PHP. Por ejemplo, además de
ver que PHP está funcionando, podemos ver su versión exacta (en nuestro caso la versión
5.2.0-8), que funciona a través de Fast-CGI o los módulos que tiene activados en este
momento.

eAccelerator

El siguiente paso que hay que realizar es instalar eAccelerator. En este caso no hay
ningún paquete Debian disponible con este programa, así que hay que compilarlo e instalarlo
desde el código fuente descargado de la página web del proyecto. En nuestro caso, se ha
descargado la versión 0.9.5.3 de eAccelerator, la última estable en estos momentos. Antes de
hacer nada se instalan las siguientes dependencias:
$> apt-get install build-essential php5-dev bzip2

Una vez hecho esto puede pasar a descargar el código fuente del programa. Para ello
se ejecutan los siguientes comandos:
$> cd /usr/src
$> wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2

Ahora, en el directorio que se ha creado al descomprimir el código fuente, compile e


instale eAccelerator en el sistema ejecutando los siguientes comandos:
$> tar xvfj eaccelerator-0.9.5.3.tar.bz2
$> cd eaccelerator-0.9.5.3
$> phpize
CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 135

$> ./configure
$> make
$> make install

En estos momentos ya se encuentra instalado eAccelerator en el sistema. Ahora debe


indicarle a PHP que debe hacer uso de éste. Para ello edite el archivo
/etc/php5/cgi/conf.d/eaccelerator.ini y escriba el contenido del listado 6-5.
Listado 6-5. Contenido de eaccelerator.ini
extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/var/cache/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

Lighttpd lee todos los archivos que se encuentran en el directorio /etc/php5/cgi/conf.d/


cada vez que Lighttpd es iniciado o reiniciado, por lo que la próxima vez que reinicie el
servidor web el archivo que se ha creado es leído de forma automática. Antes de reiniciar el
servidor, se debe crear la carpeta referenciada en el archivo para que actúe como caché y darle
permisos de escritura para todo el mundo. En concreto debe ejecutar los siguientes comandos:
$> mkdir -p /var/cache/eaccelerator
$> chmod 0777 /var/cache/eaccelerator

Ahora reinicie el servidor para comprobar que se han realizado correctamente las
modificaciones:
$> /etc/init.d/lighttpd restart

Para verificar que la instalación se ha llevado a cabo de forma correcta simplemente


hay que abrir la página de información de PHP desde el navegador de algún ordenador de la
red y al examinar la página se puede encontrar el apartado que se muestra en la figura 6-15.

MySQL

Una vez instalado Lighttpd, PHP y eAccelerator, se debe instalar el sistema de gestión
de bases de datos MySQL. Éste está disponible como un paquete Debian y por lo tanto para
instalar el cliente y el servidor MySQL en el equipo únicamente hay que ejecutar:
$> apt-get install mysql-server mysql-client

La versión instalada en nuestro caso será la 5.0.27, última disponible en estos


momentos. Es interesante que la primera acción sea establecer la contraseña del usuario root
de MySQL y así proteger el acceso al gestor de la base de datos. Para ello ejecute el siguiente
comando, sustituyendo tucontraseña por la contraseña que desea utilizar:

$> mysqladmin –u root password tucontraseña


136 LA TELEFONÍA IP EN MINIORDENADORES

Figura 6-15. Información sobre eAccelerator en nuestra instalación de PHP

Es importante recordar que esta contraseña se va a utilizar en la configuración de la


aplicación web y del AGI de Asterisk.

Una vez instalado MySQL en el miniordenador debe instalar el soporte de PHP para
MySQL. Para ello debe ejecutar el siguiente comando:
$> apt-get install php5-mysql

Después de esto reinicie el servidor web una vez más ejecutando el siguiente
comando:
$> /etc/init.d/lighttpd restart

Por última vez, compruebe que la instalación se ha ejecutado de forma correcta


abriendo la página de información de PHP desde el navegador de algún ordenador de la red y
buscando el nuevo apartado MySQL, que debe aparecer como se muestra en la figura 6-16.

Figura 6-16. Información sobre el módulo de MySQL en PHP


CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 137

Asterisk

Para configurar Asterisk se debe utilizar el AGI que invocará un script Perl al que
pasará unos parámetros cada vez que realiza una llamada. Como en la instalación que se ha
realizado de Asterisk no se incluyó el soporte del AGI para Perl, debe instalarlo en este
momento. Primero descargue el último paquete disponible ejecutando los siguientes
comandos:
$> cd /usr/src
$> wget http://asterisk.gnuinter.net/files/asterisk-perl-0.10.tar.gz

Ahora descomprima el paquete, entre en la carpeta creada y compile e instale Perl para
Asterisk:
$> tar zxvf asterisk-perl-0.10.tar.gz
$> cd asterisk-perl-0.10
$> perl Makefile.PL
$> make install

De esta forma ya tiene el soporte del AGI para Perl instalado en el ordenador. Para
instalar un paquete adicional que hará falta para que el AGI maneje las fechas de forma
adecuada únicamente debe ejecutar esta línea adicional en el terminal:
$> apt-get install libdatetime-perl

Flash Operator Panel

En estos momentos únicamente queda instalar y configurar Flash Operator Panel en el


miniordenador para tener todos los servicios listos para que la aplicación funcione
correctamente. La instalación de éste se realiza siguiendo unos pasos que garanticen que Flash
Operator Panel no ponga en evidencia la seguridad del servidor en ningún momento. Para
instalar FOP debe realizar los siguientes pasos. En primer lugar ejecute los siguientes
comandos:
$> cd /usr/src
$> wget http://www.asternic.org/files/op_panel-0.29.tar.gz

Una vez descargado el paquete se descomprime y se entra en el directorio creado:


$> tar zxvf op_panel-0.29.tar.gz
$> cd op_panel-0.29

Copie todos los archivos con extensión .cfg (son archivos de configuración de Flash
Operator Panel) a la carpeta /etc/op-panel/, para lo cuál debe ejecutar los siguientes comandos
en el terminal:
$> mkdir /etc/op-panel
$> cp *.cfg /etc/op-panel/

La parte servidor de Flash Operator Panel se encuentra contenida en el script Perl


op_server.pl. Copie este archivo en /usr/sbin/ ejecutando la siguiente orden y establezca los
permisos de ejecución para el archivo:

$> cp op_server.pl /usr/sbin/


$> chmod +x /usr/sbin/op_server.pl
138 LA TELEFONÍA IP EN MINIORDENADORES

Ahora debe copiar el archivo con el panel Flash al directorio desde el que se carga la
página web. En nuestro caso cópielos a la carpeta /var/www/:
$> cp flash/operator_panel.swf /var/www/milocutorio/

En el paquete que ha descargado de Flash Operator Panel se proporcionan algunos


scripts para programar la ejecución del servidor de Flash Operator Panel cada vez que se
inicie nuestro miniordenador. Uno de ellos es para el sistema operativo Debian, por lo que
debe copiar dicho script a la carpeta /etc/init.d con el nombre de op-panel:
$> cp init/op_panel_debian.sh /etc/init.d/op-panel

Ahora hay que realizar la configuración en Debian para que el script op-panel sea
iniciado y parado en los diferentes niveles de ejecución. En concreto op-panel tiene que
ejecutarse durante el inicio del sistema después de Lighttpd y Asterisk con prioridad 98, y
tiene que pararse antes que Lighttpd y Asterisk con prioridad 5. Para ello ejecute el comando
update-rc.d de la siguiente forma:
$> cp /etc/init.d/
$> update-rc.d op-panel start 98 2 3 4 5 . stop 05 0 1 6 .

Por defecto la ruta especificada para el fichero del servidor op_server.pl en el script
Debian que acabamos de copiar será /usr/local/operator/bin/op_server.pl. Cambie la ruta por
/usr/sbin/op_server.pl y añada la ruta para que cargue los archivos de configuración de Flash
Operator Panel desde la carpeta /etc/op-panel/. Además hay que configurar Flash Operator
Panel para que guarde los logs de funcionamiento en la carpeta /var/log/op-panel/. Vamos a
crear la carpeta mediante la siguiente orden:
$> mkdir /var/log/op-panel

Por lo tanto, finalmente el script /etc/init.d/op-panel queda tal y como se muestra en el


listado 6-6.
Listado 6-6. Contenido del script op-panel
#! /bin/sh
#
# skeleton example file to build /etc/init.d/ scripts.
# This file should be used to construct scripts for /etc/init.d.
#
# Author: Miquel van Smoorenburg <[email protected]>.
# Ian Murdock <[email protected]>.
#
# You may remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.
#
# Version: @(#)skeleton 1.9.4 21-Mar-2004 [email protected]
#

set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/op_server.pl
NAME=op_panel
DESC="Flash Operator Panel"

PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

OPTIONS="-d -p $PIDFILE –c /etc/op-panel -l /var/log/op-panel"


CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 139

# Gracefully exit if the package has been removed.


test -x $DAEMON || exit 0

# Read config file if it is present.


#if [ -r /etc/default/$NAME ]
#then
# . /etc/default/$NAME
#fi

case "$1" in
start)
echo -n "Starting $DESC: $NAME"
start-stop-daemon --start --pidfile $PIDFILE --startas $DAEMON -- $OPTIONS
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
start-stop-daemon --stop --pidfile $PIDFILE
echo "."
;;
reload)

# If the daemon can reload its config files on the fly


# for example by sending it SIGHUP, do it here.
#
# If the daemon responds to changes in its config file
# directly anyway, make this a do-nothing entry.
#
echo -n "Reloading $DESC configuration..."
start-stop-daemon --stop --pidfile $PIDFILE --signal HUP
echo "done."
;;
restart|force-reload)
#
# If the "reload" option is implemented, move the "force-reload"
# option to the "reload" entry above. If not, "force-reload" is
# just the same as "restart".
#
echo -n "Restarting $DESC: $NAME"
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE --startas
$DAEMON
sleep 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --startas $DAEMON --
$OPTIONS
echo "."
;;
*)
# echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 1
;;
esac

exit 0

Una vez hecho todo esto únicamente debe iniciar el servicio op-panel ejecutando el
siguiente comando:
$> /etc/init.d/op-panel start
140 LA TELEFONÍA IP EN MINIORDENADORES

6.3 CONFIGURACIÓN DEL SISTEMA

Una vez hemos realizada la instalación de todos los servicios que se utilizan en el
miniordenador con la aplicación Mi Locutorio, hay que realizar la configuración del sistema y
a poner definitivamente en funcionamiento la aplicación.

MySQL

Cree la base de datos de la aplicación en el servidor MySQL. Para ello utilice el script
SQL llamado milocutorio.sql que habíamos creado anteriormente y sobre el que puede
encontrar más información en el apéndice I.

Para cargar el script primero hay que conectarse al servidor MySQL ejecutando la
siguiente orden:
$> mysql -u root -p

Una vez conectado debe ejecutar la orden source junto con la ruta del script SQL que
desea cargar:
mysql> source /usr/src/milocutorio/scripts/sql/milocutorio.sql;

De esta forma ya tiene la base de datos lista para ser utilizada. Para volver al terminal
de comandos ejecute el siguiente comando:
mysql> exit

Asterisk

A continuación se procede a la configuración de Asterisk. En primer lugar hay que


modificar tres archivos para que Asterisk cargue la configuración para comunicarse con los
teléfonos y con los trunks desde los ficheros generados por la aplicación web. En concreto son
los archivos /etc/asterisk/sip.conf, /etc/asterisk/iax.conf y /etc/asterisk/zapata.conf.

Para que Asterisk funcione de forma adecuada con Flash Operator Panel se debe
modificar el archivo /etc/asterisk/manager.conf, estableciendo el usuario y contraseña para
que Flash Operator Panel pueda identificarse y obtener información sobre las llamadas. Es
importante no olvidar definir la propia contraseña en el campo secret, que más tarde se
empleará durante la configuración de Flash Operator Panel.

Además, hay que modificar el archivo /etc/asterisk/extensions.conf para que éste llame
al AGI cada vez que se realice una llamada desde alguna de las cabinas.

Como el nombre especificado en extensions.conf para el script ha sido milocutorio.agi,


hay que crear un fichero con ese nombre en el directorio desde el cuál Asterisk carga los
scripts para el AGI. Por lo tanto se crea el archivo /var/lib/asterisk/agi-bin/milocutorio.agi.

Es importante que este script tenga permisos de ejecución, para lo cuál se ejecuta el
siguiente comando:
$> chmod +x /var/lib/asterisk/agi-bin/milocutorio.agi
CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 141

Además, hay que crear otro archivo llamado milocutorio-config.conf en la misma


carpeta en la que se ha creado el archivo anterior para definir la configuración de conexión a
la base de datos.

Para obtener más información acerca de todos los archivos que se acaban de enumerar,
puede consultar el apéndice I.

Una vez hecho esto, tan sólo queda un detalle para que Asterisk funcione
completamente. Se han creado para la aplicación una serie de mensajes (sonidos) para ser
reproducidos según los eventos que se produzcan al realizarse llamadas desde las cabinas. El
script creado para el AGI establece el orden para la reproducción de estos sonidos y para que
no haya ningún error se tienen que copiar en la carpeta /var/lib/asterisk/sounds/. En concreto
los sonidos grabados son los siguientes:

• MILOCUTORIO_DESPEDIDA. Se reproduce para en las despedidas.

• MILOCUTORIO_MASTARDE. Se reproduce cuando debe intentar llamar más tarde.

• MILOCUTORIO_NOCONTESTA. Se reproduce si el número no responde.

• MILOCUTORIO_NODISPONIBLE. Se reproduce si Mi Locutorio no se encuentra


operativo.

• MILOCUTORIO_NORECONOCIDO. Se reproduce si el número de teléfono


introducido no se reconoce como un número válido.

• MILOCUTORIO_OCUPADO. Se reproduce si el número llamado se encuentra


ocupado en estos momentos.

Los sonidos, al igual que pasa con todos los archivos creados, se encuentran en el
CD-ROM que se adjunta con el proyecto.

Flash Operator Panel

En estos momentos se va a configurar Flash Operator Panel en el miniordenador. Para


ello debe editar tres de los archivos que se han copiado a la carpeta /etc/op-panel/ para
obtener el comportamiento deseado de Flash Operator Panel. Estos archivos son
op_server.cfg, op_style.cfg y op_buttons.cfg.

El archivo op_buttons_milocutorio.cfg especificado en op_buttons.cfg lo genera la


aplicación web dependiendo de la información introducida acerca de las cabinas del locutorio,
los trunks empleados y la configuración de todos éstos.

Mi Locutorio

Por último, para que la aplicación funcione correctamente hay que copiar todos los
archivos enumerados en el punto 4.3 de este capítulo en el directorio /var/www/milocutorio/.
Una vez hecho esto hay que introducir la contraseña de conexión a MySQL en el fichero
basededatos.php. A continuación se muestra el contenido del fichero, destacando el dato que
debe ser modificado.
142 LA TELEFONÍA IP EN MINIORDENADORES

Listado 6-7. Contenido del archivo basededatos.php


<?php

function conectar_db()
{
$link=mysql_connect("localhost","root","tucontraseña")
or die("Error de conexión con la base de datos.");
mysql_select_db(milocutorio)
or die("Error seleccionando la base de datos: milocutorio");
return $link;
}

?>

De esta forma ya se encuentra preparado el sistema. Cada vez que se inicie el


miniordenador todos los servicios estarán activados para que los usuarios de la aplicación
simplemente se conecten al servidor web y la usen sin preocuparse de nada más.

Para comprobar el correcto funcionamiento de la aplicación puede teclear desde el


navegador de algún ordenador de nuestra red http://[direccion_IP_servidor]/milocutorio y
aparecerá la pantalla que se muestra en la figura 6-17.

Figura 6-17. Pantalla inicial de la aplicación Mi Locutorio

6.4 PRUEBAS EN LA APLICACIÓN

Una vez la aplicación ha sido instalada en el miniordenador, el administrador de cada


locutorio debe insertar la información necesaria para que pueda empezar a emplearse, como
datos sobre los trunks contratados, sobre las diferentes cabinas disponibles o sobre las tarifas
por poner algunos ejemplos.

A continuación se van a realizar los pasos iniciales que un gestor podría seguir una vez
el sistema haya sido desplegado. La realización de estos pasos permite poner a prueba la
aplicación y verificar que funciona cómo debe hacerlo. Además, aprovecharemos esta guía
para mostrar de forma breve las diversas opciones que la aplicación pone en manos de los
usuarios.

El primer punto importante es la gestión de usuarios. Como se comentó en el


apartado 3.4 de este capítulo, cuando un usuario se identifica en la aplicación puede tener dos
roles diferentes: administrador y operador del locutorio. En principio hay creados dos
CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 143

usuarios en la aplicación, uno por cada rol, con nombres de usuario/contraseñas admin/admin
y operador/operador respectivamente. Es importante que el administrador de la aplicación
modifique las contraseñas de dichos usuarios genéricos en el primer uso de ésta para evitar el
acceso no permitido. En las pruebas, se modifica la contraseña y otros datos del usuario
admin y se comprueba posteriormente que todos los cambios se han realizado con éxito
(figura 6-18).

Figura 6-18. Pantalla de gestión de usuarios de Mi Locutorio

Para comenzar a realizar llamadas, un usuario con permisos de administración debe


dar de alta algún operador VoIP que tenga contratado. Después de especificar todos los
parámetros solicitados y que el trunk haya sido añadido al sistema, se pueden definir las
tarifas de compra que este operador aplica dependiendo del destino al que se llama, bien
introduciendo los destinos uno a uno o a través de un fichero CSV36 (figura 6-19) facilitado
por el trunk. Además, se deben insertar las tarifas de venta a los clientes según el destino, para
lo cuál existen también las dos opciones de inserción especificadas anteriormente.

Figura 6-19. Pantalla de inserción de tarifas de compra desde un archivo CSV

36
Los ficheros CSV (del inglés comma-separated values) son un tipo de documento sencillo para representar datos en forma de
tabla, en los que las columnas se separan por comas (u otros caracteres) y las filas por saltos de línea.
144 LA TELEFONÍA IP EN MINIORDENADORES

Por último, en la página principal de la aplicación se puede establecer el número de


cabinas que hay disponibles en el locutorio. La numeración de las cabinas va desde 501 (para
la cabina 1) en adelante. Para identificar el teléfono en Asterisk necesitamos una contraseña
que se almacena en la tabla cabinas de la base de datos de la aplicación. Por defecto ésta es la
misma que el número de extensión del teléfono. Por ejemplo, el teléfono 1 tiene número de
extensión 501 y su contraseña de identificación es 501. En la pantalla principal, dónde se
define el número de cabinas, también se puede insertar información sobre el tipo de
tecnología empleada por los teléfonos o las características de la comunicación que se
establecerá entre Asterisk y éstos.

Una vez realizadas estas acciones, ya se pueden realizar llamadas y verificar el sistema
de facturación y de elaboración de informes. En la figura 6-20 se muestra la pantalla principal
de Mi Locutorio para un usuario con permisos de operador una vez configurado el sistema.

Figura 6-20. Pantalla principal de un usuario con permisos de operador

7 Futuras versiones
Mi Locutorio es la primera versión de una aplicación especialmente destinada a la
gestión de locutorios basados en VoIP. Aunque ya existían precedentes, esta aplicación parte
desde cero intentando mejorar alguna funcionalidad ya implementada por otros sistemas y
aportando nuevas funciones que consideramos importantes para este tipo de negocios.

La puesta en funcionamiento de la aplicación, como se ha podido ver durante este


capítulo, ha sido posible gracias a la mezcla de un gran número de tecnologías. La
combinación entre cualquiera de nuestros miniordenadores y todas éstas ha resultado muy
satisfactoria, obteniendo un pequeño equipo por un precio reducido pero que a la vez cuenta
con la potencia suficiente para gestionar todo el sistema de un locutorio.

Sin embargo, es la primera versión de la aplicación creada y por lo tanto hay aspectos
que pueden ser mejorados y opciones que pueden ser añadidas. A continuación se enumeran
algunas posibles mejoras que tenemos en mente:

• Integración con determinados modelos de teléfono. De esta forma se podría ofrecer


una solución más completa consistente en el miniordenador con todo instalado y
configurado así como teléfonos con una pantalla dónde se visualizaría la información
CAPÍTULO 6: GESTIÓN DEL SISTEMA TELEFÓNICO DE UN LOCUTORIO 145

qué deseáramos cómo deseáramos. Para ello deberíamos añadir el soporte para envío
de información en nuestra aplicación además de controlar la forma en que se
visualizarían los datos en el teléfono.

• Integración con determinados modelos de impresoras de tickets. De igual manera


que se podría implementar el soporte para mostrar la información deseada en
determinados modelos de teléfonos, también se puede adaptar la factura para que se
imprima correctamente en ciertos modelos de impresoras de tickets.

• Mejora en la realización de informes. Los informes podrían ser mejorados


añadiendo más opciones y generando gráficos que ayudaran visualmente a los
administradores a analizar los costes y ganancias del locutorio. Para este propósito se
podría implementar una solución propia o se podría hacer uso de paquetes de terceros
que proporcionan herramientas de análisis de CDRs. Además se podría añadir el
soporte para generar los informes directamente en PDF.

• Opción para tarjetas prepago. Sería muy útil añadir soporte para tarjetas prepago, de
forma que un cliente pudiera comprar crédito e ir gastándolo en nuestras cabinas cómo
deseara. Simplemente tendría que entrar en alguna cabina que el operador hubiera
desbloqueado previamente e introducir el número de tarjeta prepago junto con una
clave que definiría la primera vez que la empleara. La gestión de tarjetas prepago se
realizaría desde nuestra aplicación.

• Soporte multi-idioma. La implementación del soporte para varios idiomas sería


positivo para permitir la traducción de la aplicación y ampliar las posibilidades de
expansión. Por suerte, PHP proporciona una estructura perfecta para implementarlo
sin un elevado esfuerzo.

También podría gustarte