ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA INGENIERÍA TÉCNICA EN INFORMÁTICA DE SISTEMAS

Tamaño: px
Comenzar la demostración a partir de la página:

Download "ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA INGENIERÍA TÉCNICA EN INFORMÁTICA DE SISTEMAS"

Transcripción

1 ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA INGENIERÍA TÉCNICA EN INFORMÁTICA DE SISTEMAS Panel de administración web de una centralita telefónica VoIP Realizado por ENRIQUE MORÓN AYUSO Dirigido por PABLO NEIRA AYUSO Departamento LENGUAJES Y SISTEMAS INFORMÁTICOS Sevilla, septiembre de 2014

2 Lista de cambios Num. Fecha 0 01/09/2014 Lista de cambios Descripción Versión 1.0 del documento Autor Enrique Morón 2

3 Índice de contenido 1. Introducción Prefacio...21 Problema: Complejidad de la administración de una centralita de teléfono VoIP...23 Objetivos Asterisk Qué es un PBX? Qué es Asterisk? Asterisk en diferentes escenarios Llamadas internas en la oficina Conectar la oficina con Internet Conectar la oficina con la RTB Interfaces Web de administración de Asterisk FreePBX AsteriskGUI Voiceone Proyecto Beeton VS Principales paneles web de Asterisk existentes Características principales de las interfaces de administración de Asterisk Tabla comparativa de características de las interfaces de Asterisk Tipos de terminales VoIP usados con Asterisk Softphones Teléfonos IP Otros terminales VoIP para usar con Asterisk Tarjetas de comunicaciones para Asterisk Conexión mediante una línea de teléfono básica (analógica) Conexión mediante una línea RDSI Tarjetas híbridas Gateways Gateways analógicos, digitales y otros Otras tecnologías para integrar Asterisk mediante gateways Recorrido por el mercado actual de la telefonía de código abierto Nivel 1: Plataformas de telefonía Nivel 2: Soluciones gratuitas configurables Nivel 3: Soluciones de pago llave en mano Asterisk VS Centralitas convencionales Caso práctico Requisitos de la empresa para el nuevo sistema de telefonía...56 Requisito 1: Extensiones y buzones de voz...56 Requisito 2: Mensajería unificada...56 Requisito 3: Reutilización de las líneas analógicas...57 Requisito 4: Menú de bienvenida con opciones...57 Requisito 5: Gestión de llamadas del Departamento Técnico...58 Requisito 6: Gestión de llamadas para los Departamentos Comercial y de Desarrollo...58 Requisito 7: Servicios comunes de telefonía...58 Requisito 8: Bajo consumo eléctrico y bajo coste

4 Sistema de Administración básica de una centralita VoIP Requisito 9: Administración básica y sencilla de la centralita Soluciones a los requisitos deseados para el nuevo sistema de telefonía...59 Solución al requisito 1: Extensiones y buzón de voz...59 Solución al requisito 2: Mensajería unificada...59 Solución al requisito 3: Reutilización de las líneas analógicas...60 Solución al requisito 4: Menú de bienvenida con opciones...61 Solución al requisito 5: Gestión de llamadas del Departamento Técnico...61 Solución al requisito 6: Gestión de las llamadas para los Departamentos Comercial y Desarrollo...61 Solución al requisito 7: Servicios comunes de telefonía...61 Solución al requisito 8: Bajo consumo eléctrico y bajo coste...62 Solución al requisito 9: Administración básica y sencilla de la centralita Ejemplo de arquitectura hardware del nuevo sistema de telefonía Planificación Planificación Planificación temporal Planificación de costes, modelo COCOMO Aplicación del modelo Conclusiones de la aplicación del modelo Elicitación de requisitos Visión general del sistema Participantes en el proyecto Objetivos del sistema Descripción de los objetivos prioritarios del sistema Catálogo de requisitos del sistema Requisitos de información Requisitos funcionales Diagramas de casos de uso Definición de actores Casos de uso del sistema Subsistema de registro de llamadas Subsistema de gestión de extensiones SIP Subsistema de gestión de extensiones IAX Subsistema de acceso a consola cliente de Asterisk Subsistema de gestión de planes de llamadas Subsistema de gestión de buzones de voz Subsistema de gestión del IVR Subsistema de gestión de colas de llamadas Subsistema de gestión de sistemas de música en espera Subsistema de monitorización de servicios de la centralita Reglas de negocio Requisitos no funcionales Matrices de rastreabilidad Análisis de requisitos Modelo estático Diagrama estático Tipos y valores

5 4.1.3 Asociaciones Modelo dinámico, funcional y prototipos de interfaz de usuario Validación de usuario Subsistema gestión de extensiones SIP Creación de extensiones SIP Modificación de extensiones SIP Eliminación de extensiones SIP Subsistema gestión de extensiones IAX Creación de extensiones IAX Modificación de extensiones IAX Eliminación de extensiones IAX Subsistema gestión del registro de llamadas Subsistema de acceso a consola Subsistema de monitorización y estadísticas del sistema Subsistema de gestión del plan de llamadas Creación de contextos Modificación de contextos Crear nueva línea en un contexto Modificación de una línea de un contexto Eliminación de una línea de un contexto Funcionalidades del plan de llamadas Subsistema gestión de buzones de voz Creación de buzón de voz Modificación de un buzón de voz Eliminación de un buzón de voz Subsistema gestión de IVR Creación de un IVR Modificación de un IVR Eliminación de un IVR Subsistema gestión de colas de llamadas Creación de cola de llamada Modificación de una cola de llamada Eliminación de una cola de llamada Subsistema gestión de música en espera Creación de música en espera Modificación de música en espera Eliminación de música en espera Diseño del sistema Introducción Diagrama conceptual El patrón de diseño: MVC El lenguaje de programación: Python Introducción a Python Algunas particularidades de Python Framework Web : Django Patrón de diseño: MVC Django Asterisk Realtime (ARA)

6 Sistema de Administración básica de una centralita VoIP 5.7 Asterisk Gateway Interface (AGI) Proyecto PYST Diseño de datos Diagrama de la base de datos Descripción de tablas Sistema gestor para la base de datos: SQLite Normalización de la base de datos Implementación del sistema Aspectos relevantes de la implementación Solución al problema de la complejidad de administrar Asterisk: Proyecto Beeton Configurando Asterisk Realtime Estructura de directorios del proyecto Beeton Diseño navegacional con plantillas html Implementación de los diferentes servicios Implementación del sistema de logueo del usuario administrador Controlador login Plantillas para el login Implementación de la gestión del registro de llamadas Configuración del módulo cdr_sqlite de Asterisk Controlador de vistas del cdr Controlador de vistas para generar el informe de llamadas en pdf Plantillas para el registro de llamadas (cdr) Capturas de pantalla del registro de llamadas Implementación del sistema de acceso a consola de Asterisk Modelo y formulario para la consola Controlador de vistas para el acceso a la consola Plantillas html para el acceso a la consola cliente de Asterisk Capturas de pantalla de la consola de Asterisk Implementación de la gestión de extensiones SIP Mapeo de urls para la gestión de extensiones de tipo SIP Importación de librerías para el modelado de la gestión de extensiones SIP Modelado de datos para las extensiones SIP Formularios a partir del modelo de datos de extensiones SIP Plantillas html para la gestión de extensiones SIP Implementación de la gestión de extensiones IAX Mapeo de urls para la gestión de extensiones de tipo IAX Importación de librerías para el modelado de la gestión de extensiones IAX Modelado de datos para las extensiones IAX Formularios a partir del modelo de datos de extensiones IAX Plantillas html para la gestión de extensiones IAX Implementación del servicio de monitorización del sistema Mapeo de urls para la monitorización y las estadísticas del sistema Importación de librerías para la monitorización y registro de estadísticas Controlador de la vista del muestreo de la carga de la cpu Controlador de la vista de muestreo del uso de RAM Controlador de la vista de muestreo del uso del sistema de ficheros Controlador de la vista de muestreo de las llamadas activas

7 Controlador de la vista de muestreo de las extensiones registradas Controlador de la vista de muestreo de la grafica del uso de la CPU Controlador de la vista para la recogida de marcas para las estadísticas Script python para generar la tarea programada de recoger marcas para las gráficas Implementación de la gestión de planes de llamada Creación de la aplicación en django de los planes de llamada Modelado de datos de los planes de llamada Archivo de mapeo de urls para planes de llamada Modelado de datos para los planes de llamadas Controlador de vistas para la gestión del plan de llamadas Implementación del instalador de funcionalidades del plan de llamadas Implementación del servicio de IVR del plan de llamadas Implementación del servicio de música en espera del plan de llamadas Otras funcionalidades del plan de llamadas Instalación del hardware: Placa ALIX3D Instalación del Sistema Operativo y Asterisk Pruebas Introducción Pruebas de seguridad: OWASP Qué es OWASP? Vulnerabilidades de sesiones y autenticación del usuario adminsitrador Cross-Site Request Forgery (CSRF) Fallo en la restricción de acceso a URLs Protección insuficiente en la capa de transporte Pruebas de rendimiento Qué es SIPp? Configuración del entorno de pruebas de rendimiento con SIPp Resultados de las pruebas SIPp Con 5 llamadas simultáneas Con 10 llamadas simultáneas Con 15 llamadas simultáneas Con 20 llamadas simultáneas Con 25 llamadas simultáneas Conclusiones de las pruebas de llamadas con SIPp Conclusiones y futuros desarrollos del panel web Beeton ANEXO 1: MANUAL DE USUARIO Introducción Instalación de BeeTon Usando el panel de administración web de Beeton El estado del sistema Registro de llamadas e informes Gestión de extensiones Extensiones SIP Creación y modificación de extensiones SIP Eliminación de extensiones SIP Extensiones IAX

8 Sistema de Administración básica de una centralita VoIP Creación y modificación de extensiones IAX Eliminación de extensiones IAX Plan de llamadas Llamadas entre extensiones del mismo contexto Llamadas entre extensiones de diferentes contextos Menú de bienvenida con opciones (IVR) Añadir música en espera a una extensión Gestión de módulos: funcionalidades del plan de llamadas Acceso a la consola cliente de Asterisk Gestión de ficheros de audio ANEXO Conceptos básicos sobre los ficheros de configuración de Asterisk Directorios de Asterisk Gestión del plan de marcación de Asterisk Contextos Extensiones Prioridades Aplicaciones

9 Índice de ilustraciones Figura 1: Crecimiento en billones de minutos del tráfico de la telefonía tradicional y VoIP de 1993 a Figura 2: Asterisk en una red interna...27 Figura 3: Asterisk conectado a Internet...28 Figura 4: Asterisk conectado a la RTB...29 Figura 5: Panel de estado freepbx...31 Figura 6: Creación de extensión SIP en FreePBX...32 Figura 7: Consola cliente de Asterisk desde FreePBX...32 Figura 8: Estado del sistema de AsteriskGUI Figura 9: Creación de extensiones en AsteriskGUI Figura 10: Panel de administración Voiceone Gestión de extensiones...36 Figura 11: Panel de administración web Voiceone - Reglas de llamadas...36 Figura 12: Tabla de algunas de las características y funcionalidades de AsteriskGUI, FreePBX, Voiceone y el proyecto Beeton...39 Figura 13: Interfaz del softphone X-Lite Figura 14: Modelos de teléfonos IP Cisco...41 Figura 15: Videoteléfono Grandstream GXV Figura 16: Altavoz IP para techo (Cyberdata)...42 Figura 17: Portero electrónico IP (Alphatech Fermax IP DP)...42 Figura 18: Modelo AEX800 de Digium con ocho puertos analógicos...43 Figura 19: Interfaces FXS y FXO...44 Figura 20: Tarjeta Sangoma A500 BRI...45 Figura 21: Tarjeta híbrida: Digium HB Figura 22: Tarjeta híbrida: Beronet BF Figura 23: Gateway Linksys SPA Figura 24: Quadro ISDN Gateway de 4 puertos BRI...48 Figura 25: Grandstream ATA con un puerto FXS y un puerto FXO...48 Figura 26: Topex Mobilink 2 GSM a VoIP...49 Figura 27: Gateway Topex Tetra-SIP...49 Figura 28: Líneas analógicas de cada departamento...56 Figura 29: Menú de bienvenida de respuesta de voz interactiva...57 Figura 30: Carcasa del gateway Beronet con el módulo BF4FXO...60 Figura 31: Módulo Beronet BF4FXO...60 Figura 32: Placa ALIX 3D2 con carcasa de aluminio...62 Figura 33: Ejemplo de arquitectura hardware utilizada para el caso práctico presentado...63 Figura 34: Diagrama de subsistemas...88 Figura 35: Diagrama de casos de uso del subsistema de acceso a la consola de Asterisk...89 Figura 36: Diagrama de casos de uso del subsistema de gestión de buzones de voz...89 Figura 37: Diagrama de casos de uso del subsistema de gestión de colas de llamadas...90 Figura 38: Diagrama de casos de uso del subsistema de gestión de extensiones IAX...90 Figura 39: Diagrama de casos de uso del subsistema de gestión de extensiones SIP...91 Figura 40: Diagrama de casos de uso del subsistema gestión de planes de llamadas...92 Figura 41: Diagrama de casos de uso del subsistema gestión del registro de llamadas

10 Sistema de Administración básica de una centralita VoIP Figura 42: Diagrama de casos de uso del subsistema gestión de la música en espera...93 Figura 43: Diagrama de casos de uso del subsistema de gestión del IVR...94 Figura 44: Diagrama de casos de uso del subsistema de monitorización de la centralita...94 Figura 45: Esquema dinámico: login de usuario administrador Figura 46: Prototipo login de usuario administrador Figura 47: Esquema dinámico: Alta de extensión SIP Figura 48: Esquema dinámico: Modificar extensión SIP Figura 49: Esquema dinámico: Eliminar extensión SIP Figura 50: Esquema dinámico: Crear extensión IAX Figura 51: Esquema dinámico: Modificar extensión IAX Figura 52: Esquema dinámico: Eliminar extensión IAX Figura 53: Esquema dinámico: Consulta del registro de llamadas Figura 54: Esquema dinámico: Ejecución de ordenes en consola Figura 55: Esquema dinámico: Consulta estadísticas del sistema Figura 56: Esquema dinámico: Crear nuevo contexto Figura 57: Esquema dinámico: Crear nueva línea en un contexto Figura 58: Esquema dinámico: Modificar línea de un contexto Figura 59: Esquema dinámico: Borrar linea de un contexto Figura 60: Esquema dinámico: Crear un buzón de voz Figura 61: Esquema dinámico: Modificar un buzón de voz Figura 62: Esquema dinámico: Borrar buzón de voz Figura 63: Esquema dinámico: Crear sistema IVR Figura 64: Esquema dinámico: Modificar IVR Figura 65: Esquema dinámico: Eliminar IVR Figura 66: Esquema dinámico: Crear cola de llamadas Figura 67: Esquema dinámico: Modificar cola de llamada Figura 68: Esquema dinámico: Borrar cola de llamada Figura 69: Esquema dinámico: Crea sistema de música en espera Figura 70: Esquema dinámico: Modificar sistema de música en espera Ilustración 71: Esquema dinámico: Borrar sistema de música en espera Figura 72: Diagrama conceptual Figura 73: Modelo-Vista-Controlador Figura 74: Tipos de datos en Python Figura 75: Configuración de Asterisk Realtime usando un driver ODBC Figura 76: Listado de directorios Figura 77: Diseño navegacional con plantillas HTML Figura 78: Fichero de mapeo de url del proyecto: asteriskbee/urls.py Figura 79: Fichero de vistas del proyecto: asteriskbee/views.py Figura 80: Fichero de vistas del proyecto: asteriskbee/views.py Figura 81: Función ingresar del fichero asteriskbee/views.py Figura 82: Función admin del fichero asteriskbee/views.py Figura 83: Función cerrar del fichero asteriskbee/views.py Figura 84: Plantilla html para el login: asteriskbee/templates/login_base.html Figura 85: Configuración del módulo cdr_sqlite de Asterisk Figura 86: Fichero de configuración /etc/asterisk/cdr_sqlite3_cumston.conf Figura 87: Fichero de mapeo de url del proyecto: asteriskbee/urls.py Figura 88: Función cdr del fichero: /asteriskbee/api_cdr/views.py

11 Figura 89: Función formato_fecha del fichero: asteriskbee/api_cdr/views.py Figura 90: Función formato_lista_ registros fichero: asteriskbee/api_cdr/views.py Figura 91: Función formato_lista_registros_con_ext fichero: asteriskbee/api_cdr/views.py Figura 92: librerias para generar informa de llamadas en pdf: asteriskbee/api_cdr/views.py Figura 93: Función generar_pdf: asteriskbee/api_cdr/views.py Figura 94: Función llamadas_pdf: asteriskbee/api_cdr/views.py Figura 95: Plantilla html para el cdr: asteriskbee/templates/cdr/cdr.html Figura 96: Plantilla html para el cdr: asteriskbee/templates/cdr/formulario_busqueda_cdr.html Figura 97: Función envia_form javascript para el cdr: asteriskbee/templates/js/refresca_div.js Figura 98: Plantilla html para el cdr: asteriskbee/templates/cdr/registro_de_llamadas.html Figura 99: Formulario del cdr Figura 100: Formulario con resultados del registro de llamadas Figura 101: Formulario envío de ordenes por consola: asteriskbee/api_consola/forms.py Figura 102: Función generar_pdf: asteriskbee/api_cdr/views.py Figura 103: Función consola: asteriskbee/api_consola/views.py Figura 104: Función histo_comandos: asteriskbee/api_consola/views.py Figura 105: Plantilla html para la consola: asteriskbee/templates/consola/consola.html Figura 106: Plantilla html para el formulario de la consola: asteriskbee/templates/consola/form_consola.html Figura 107: Función carga_historial para el historial de la consola: asteriskbee/templates/js/refresca_div.js Figura 108: Ejecución del comando help en consola Figura 109: Fichero de mapeo de url para la gestión de extensiones SIP: asteriskbee/urls.py Figura 110: Librerias importadas para el modelado de extensiones SIP: asteriskbee/api_extensiones/models.py Figura 111: Modelado de datos de extensiones SIP: asteriskbee/api_extensiones/models.py Figura 112: Formularios a partir del modelo de extensiones SIP: asteriskbee/api_extensiones/models.py Figura 113: Plantilla html base para la gestion de extensiones SIP: asteriskbee/templates/extensiones/sip/sip.html Figura 114: Plantilla html que genera la lista de extensiones SIP: asteriskbee/templates/extensiones/sip/lista_ext_sip.html Figura 115: Plantilla html que genera el formulario para modificar la extension SIP: asteriskbee/templates/extensiones/sip/mod_ext_sip.html Figura 116: Fichero de mapeo de url para la gestión de extensiones IAX: asteriskbee/urls.py Figura 117: Librerias importadas para el modelado de extensiones IAX: asteriskbee/api_extensiones/models.py Figura 118: Modelado de datos de extensiones IAX: asteriskbee/api_extensiones/models.py Figura 119: Formularios a partir del modelo de extensiones IAX: asteriskbee/api_extensiones/models.py Figura 120: Plantilla html base para la gestion de extensiones IAX: asteriskbee/templates/extensiones/iax/iax.html Figura 121: Plantilla html que genera la lista de extensiones IAX: asteriskbee/templates/extensiones/iax/lista_ext_iax.html Figura 122: Plantilla html que genera el formulario para modificar la extension IAX: asteriskbee/templates/extensiones/iax/mod_ext_iax.html Figura 123: Fichero de mapeo de urls para la monitorización y estadísticas del sistema: 12

12 Sistema de Administración básica de una centralita VoIP asteriskbee/urls.py Figura 124: Librerias importadas para las vistas de muestreo de estadísticas: beeton/asteriskbee/api_status/views.py Figura 125: Función carga_cpu del fichero beeton/asteriskbee/api_status/views.py Figura 126: Función uso_ram del fichero beeton/asteriskbee/api_status/views.py Figura 127: Función uso_sist_fich_raiz del fichero beeton/asteriskbee/api_status/views.py Figura 128: Función llamadas_activas del fichero beeton/asteriskbee/api_status/views.py Figura 129: Función lista_extensiones_reg del fichero beeton/asteriskbee/api_status/views.py Figura 130: Función grafica_uso_cpu_dia del fichero beeton/asterisk-bee/api_status/views.py Figura 131: Función recoge_marcas del fichero beeton/asteriskbee/api_status/scripts_graficas/recoge_marcas_graficas.py Figura 132: Función recoge_marcas del fichero beeton/asteriskbee/api_status/scripts_graficas/recoge_marcas_graficas.py Figura 133: Script que genera el crontab para la ejecución del script recoge_marcas_graficas.py beeton/asterisk-bee/api_status/scripts_graficas/script_crontab.py Figura 134: Linea de api_dialplan en la lista de aplicaciones en settings.py Figura 135: Script Tabla Realtime del DialplanX Figura 136: Modelo de datos para una línea del dialplan en /home/asteriskbee/asteriskbee/api_dialplan/models.py Figura 137: Fichero de mapeo de urls para la gestión de los contextos de Asterisk: asteriskbee/urls.py Figura 138: Modela para la gestión de los contextos de Asterisk: beeton/asteriskbee/api_dialplan/models.py Figura 139: Modelo para la gestión de los contextos de Asterisk: beeton/asteriskbee/api_dialplan/models.py Figura 140: Modelo para la gestión de los contextos de Asterisk: beeton/asteriskbee/api_dialplan/models.py Figura 141: Función para mostrar los contextos de Asterisk: beeton/asteriskbee/api_dialplan/views.py Figura 142: Función para añadir un nuevo contexto en Asterisk: beeton/asteriskbee/api_dialplan/views.py Figura 143: Función para modificar o añadir una línea a un contexto: beeton/asteriskbee/api_dialplan/views.py Figura 144: Función para modificar el comentario de una línea del contexto: beeton/asteriskbee/api_dialplan/views.py Figura 145: Función para borrar una línea del contexto: beeton/asteriskbee/api_dialplan/views.py Figura 146: Función para cambiar la posición de una línea por otra en un contexto: beeton/asteriskbee/api_dialplan/views.py Figura 147: Estructura del paquete de funcionalidad Figura 148: Fichero de mapeo de urls para la administración de funcionalidades del plan de llamadas: asteriskbee/urls.py Figura 149: Modelado para la gestión de las funcionalidades del plan de llamadas: beeton/asteriskbee/api_admin_func/models.py Figura 150: Vista para la instalación de las funcionalidades del plan de llamadas: beeton/asteriskbee/api_admin_func/views.py Figura 151: Definición de la aplicación IVR del plan de llamadas: ivr.json

13 Figura 152: Lógica de la aplicación IVR del plan de llamadas: ivr.py Figura 153: Definición de la aplicación música en espera del plan de llamadas: moh.json Figura 154: Lógica de la aplicación música en espera del plan de llamadas: moh.py Figura 155: Lógica de la aplicación salto incondicional del plan de llamadas: salto.py Figura 156: Lógica de la aplicación recibir llamadas del plan de llamadas: responder_llamada.py Figura 157: Hardware utilizado Figura 158: Placa ALIX3D Figura 159: Placa ALIX3D2 con carcasa de aluminio Figura 160: Acceso a la consola serie con gtkterm Figura 161: Acceso a la placa ALIX desde consola serie con gtkterm Figura 162: Placa ALIX 3D2 con carcasa de aluminio Figura 163: Salida comando sipp con 5 llamadas simultaneas Figura 164: Salida consola de Asterisk, después de ejecutar sipp Figura 165: IPtraf: Uso de red con 5 llamadas simultáneas Figura 166: Uso de recursos con 5 llamadas simultáneas Figura 167: Salida comando sipp con 10 llamadas simultaneas Figura 168: IPtraf: Uso de red con 10 llamadas simultáneas Figura 169: Uso de recursos con 10 llamadas simultáneas Figura 170: Salida comando sipp con 15 llamadas simultaneas Figura 171: IPtraf: Uso de red con 15 llamadas simultáneas Figura 172: Uso de recursos con 15 llamadas simultáneas Figura 173: Salida comando sipp con 20 llamadas simultaneas Figura 174: IPtraf: Uso de red con 20 llamadas simultáneas Figura 175: Uso de recursos con 20 llamadas simultáneas Figura 176: Salida comando sipp con 25 llamadas simultaneas Figura 177: IPtraf: Uso de red con 25 llamadas simultáneas Figura 178: Uso de recursos con 25 llamadas simultáneas Figura 179: Tabla de resultados de las pruebas de rendimiento Figura 180: Estado del sistema Figura 181: Consulta del registro de llamadas por defecto Figura 182: Consulta del registro de llamadas sin datos Figura 183: Consulta registro de llamadas con fecha de inicio Figura 184: Consulta del registro de llamadas con varios parámetros Figura 185: Informe del registro de llamadas en pdf Figura 186: Lista de extensiones SIP Figura 187: Extensión SIP Figura 188: Opciones avanzadas extensiones SIP Figura 189: Eliminar extensión SIP Figura 190: Lista de extensiones IAX Figura 191: Extensión IAX Figura 192: Opciones avanzadas extensión IAX Figura 193: Eliminación de extensión IAX Figura 194: Lista de contextos Figura 195: Lista de lineas del contexto usuarios Figura 196: Lineas de espera y responder llamadas de la extensión Figura 197: Añadir línea de espera de 2 segundos a la extensión

14 Sistema de Administración básica de una centralita VoIP Figura 198: Línea responder llamadas extesión Figura 199: Lista de contextos Figura 200: Crear nuevo contexto: "Dpto. técnico" Figura 201: Lista de contextos Figura 202: Lista de extensiones SIP Índice de tablas Tabla:Universidad_de_Sevilla...71 Tabla:Dpto_Lenguajes_y_Sistemas_Informáticos...71 Tabla:Participante_Enrique_Morón_Ayuso...71 Tabla:Tutor_Pablo_Neira...72 Tabla:Objetivo_Gestión_autenticación_usuario...73 Tabla:Objetivo_gestión_registro_de_extensiones...73 Tabla:Objetivo_gestión_planes_de_llamada...74 Tabla:Objetivo_gestión_de_estadísticas...75 Tabla:Objetivo_acceso_consola_de_Asterisk...76 Tabla:IRQ-0001-Credenciales_usuario_administrador...78 Tabla:IRQ-0002-Información_extensiones_SIP...79 Tabla:IRQ-0003-Información_extensiones_IAX...80 Tabla:IRQ-0004-Infomación_línea_del_dialplan...81 Tabla:IRQ-0005-Infomación_registro_de_llamadas...82 Tabla:IRQ-0006-Información_sobre_buzón_de_voz...83 Tabla:IRQ-0007-Información_de_las_colas_de_llamadas...84 Tabla:IRQ-0008-Infoamción_sobre_música_en_espera...85 Tabla:IRQ-0009-Infomación_sobre_la_monitorización_del_sistema...85 Tabla:IRQ-0010-Información_sobre_el_IVR...86 Tabla:IRQ-0011-Información_del_historial_de_la_consola...87 Tabla:ACT-001-Actor_Administrador...95 Tabla:UC-0001-Identificación_del_usuario_Administrador...95 Tabla:UC-0002-Cerrar_sesión_usuario_Administrador...96 Tabla:UC-0003-Consulta_registro_de_llamadas...97 Tabla:UC-004-Consulta_extensiones_SIP...98 Tabla:UC-005-Crear_nueva_extensión_SIP...99 Tabla:UC-0006-Modificar_extensión_SIP Tabla:UC-0007-Eliminar_extensión_SIP Tabla:UC-0008-Consulta_extensiones_IAX Tabla:UC-0009-Crear_nueva_extensión_IAX Tabla:UC-0010-Modificación_extensión_IAX Tabla:UC-0011-Eliminar_extensión_IAX Tabla:UC-0012-Acceso_a_consola_Asterisk Tabla:UC-0013-Envío_orden_consola_Asterisk Tabla:UC-0014-Consulta_lista_contextos_del_dialplan Tabla:UC-0015-Crear_nuevo_contexto_del_dialplan Tabla:UC-0016-Modificar_contexto_del_dialplan Tabla:UC-0017-Eliminar_contexto

15 Tabla:UC-0018-Lista_líneas_de_un_contexto Tabla:UC-0019-Crear_nueva_línea_en_un_contexto Tabla:UC-0020-Modificar_línea_de_un_contexto Tabla:UC-0021-Eliminar_línea_de_un_contexto Tabla:UC-0022-Consulta_buzones_de_voz Tabla:UC-0023-Crear_nuevo_buzón_de_voz Tabla:UC-0024-Modificar_buzón_de_voz Tabla:UC-0025-Eliminar_buzón_de_voz Tabla:UC-0026-Consulta_líneas_dialplan_con_IVR Tabla:UC-0027-Crear_nueva_línea_con_IVR Tabla:UC-0028-Modificar_línea_con_IVR Tabla:UC-0029-Eliminar_línea_con_IVR Tabla:UC-0030-Consulta_colas_de_llamadas Tabla:UC-0031-Crear_cola_de_llamadas Tabla:UC-0032-Modificar_cola_de_llamadas Tabla:UC-0033-Eliminar_cola_de_llamadas Tabla:UC-0034-Consulta_listado_de_sistemas_de_música_en_espera Tabla:UC-0035-Crear_nuevo_sistema_de_música_en_espera Tabla:UC-0036-Modificar_sistema_de_música_en_espera Tabla:UC-0037-Eliminar_sistema_de_música_en_espera Tabla:UC-0038-Monitorización_de_servicios_básicos_de_la_centralita Tabla:FRQ-0001-Unicidad_registro_extensiones_SIP Tabla:FRQ-002-Unicidad_de_registro_de_extensiones_IAX Tabla:NFR-0001-Usabilidad Tabla:NFR-0002-Rendimiento Tabla Tabla Tabla:TYP-0001-Usuario Tabla:Atributo-Usuario::Nombre Tabla:Atributo_usuario::Contraseña Tabla:TYP-0002-Extensión_SIP Tabla:Atributo_Extensión_SIP::Nombre Tabla:Atributo_Extensión_SIP::Apellidos Tabla:Atributo_Extensión_SIP::Número_de_la_extensión Tabla:Atributo_Extensión_SIP::Usuario Tabla:Atributo_Extensión_SIP::Contraseña Tabla:Atributo_Extensión_SIP::Contexto Tabla:Atributo_Extensión_SIP::Callerid Tabla:TYP-0003-Extensión_IAX Tabla:Atributo_Extensión_IAX::Nombre Tabla:Atributo_Extensión_IAX::Apellidos Tabla:Atributo_Extensión_IAX::Número_de_la_extensión Tabla:Atributo_Extensión_IAX::Usuario Tabla:Atributo_Extensión_IAX::Contraseña Tabla:Atributo_Extensión_IAX::Contexto Tabla:Atributo_Extensión_IAX::Callerid Tabla:TYP-0004-Línea_del_dialplan

16 Sistema de Administración básica de una centralita VoIP Tabla:Atributo_Línea_del_dialplan::Contexto Tabla:Atributo_Línea_del_dialplan::Extensión Tabla:Atributo_Línea_del_dialplan::Prioridad Tabla:Atributo_Línea_del_dialplan::Aplicación Tabla:Atributo_Línea_del_dialplan::Parámetros Tabla:TYP-0005-Registro_de_llamada Tabla:Atributo_Registro_de_llamada::Fecha Tabla:Atributo_Registro_de_llamada::Hora Tabla:Atributo_Registro_de_llamada::Identificador Tabla:Atributo_Registro_de_llamada::Emisor Tabla:Atributo_Registro_de_llamada::Receptor Tabla:Atributo_Registro_de_llamada::Contexto Tabla:Atributo_Registro_de_llamada::Duración Tabla:Atributo_Registro_de_llamada::Estado Tabla:TYP-0006-Buzón_de_voz Tabla:Atributo_Buzón_de_voz::Número_de_buzón_de_voz Tabla:TYP-0007-Cola_de_llamada Tabla:Atributo_Cola_de_llamada::Nombre Tabla:Atributo_Cola_de_llamada::Lista_de_extensiones Tabla:Atributo_Cola_de_llamada::Prioridades Tabla:Atributo_Cola_de_llamada::Fichero_de_audio Tabla:TYP-0008-Música_en_espera Tabla:Atributo_Mśica_en_espera::Fichero_de_audio Tabla:TYP-0009-IVR Tabla:Atributo_IVR::Extensión Tabla:Atributo_IVR::Audio_dentro_de_horario Tabla:Atributo_IVR::Audio_fuera_de_horario Tabla:Atributo_IVR::Intervalo_horario Tabla:TYP-0010-Estadística Tabla:Atributo_Estadística::Porcentaje_uso_CPU Tabla:Atributo_Estadística::Hora Tabla:Atributo_Estadística::Fecha Tabla:Atributo_Estadística::Cantidad_de_llamadas Tabla:TYP-0012-Comando Tabla:Atributo_Comando::Nombre Tabla:ASO-0001-Crea(Usuario,Extensón_SIP) Tabla:Rol_Crea(Usuario,Extensión_SIP)::Usuario Tabla:Rol_Crea(Usuario,Extensión_SIP)::Extensión_SIP Tabla:ASO-0002-Crea(Usuario,Extensión_IAX) Tabla:Rol_Crea(Usuario,Extensión_IAX)::Usuario Tabla:Rol_Crea(Usuario,Extensión_IAX)::Extensión_IAX Tabla:ASO-0003-Genera(Usuario,Comando) Tabla:Rol_Genera(Usuario,Comando)::Usuario Tabla:Rol_Genera(Usuario,Comando)::Historial Tabla:ASO-0004-Produce(Registro_de_llamada,Estadística) Tabla:Rol_Produce(Registro_de_llamada,Estadística)::Registro_de_llamada Tabla:Rol_Produce(Registro_de_llamada,Estadística)::Estadística

17 Tabla:ASO-0005-esta_asociada(Extensión_SIP,Línea_del_dialplan) Tabla:Rol_esta_asociada(Extensión_SIP,Línea_del_dialplan)::Extensión_SIP Tabla:Rol_esta_asociada(Extensión_SIP,Línea_del_dialplan)::Línea Tabla:ASO-0006-esta_asociada(Extensión_IAX,Línea_del_dialplan) Tabla:Rol_esta_asociada(Extensión_IAX,Línea_del_dialplan)::Extensión_IAX Tabla:Rol_esta_asociada(Extensión_IAX,Línea_del_dialplan)::Línea_del_dialplan Tabla:ASO-0007-define(Usuario,Línea_del_dialplan) Tabla:Rol_define(Usuario,Línea_del_dialplan)::Usuario Tabla:Rol_define(Usuario,Línea_del_dialplan)::Línea_del_dialplan Tabla:ASO-0008-funcionalidad_de(Línea_del_dialplan,Buzón_de_voz) Tabla:Rol_funcionalidad_de(Línea_del_dialplan,Buzón_de_voz)::Línea Tabla:Rol_funcionalidad_de(Línea_del_dialplan,Buzón_de_voz)::Buzón_de_voz Tabla:ASO-0009-funcionalidad_de(Línea_del_dialplan,Música_en_espera) Tabla:Rol_funcionalidad_de(Línea_del_dialplan,Música_en_espera)::Línea Tabla:Rol_funcionalidad_de(Línea_del_dialplan,Música_en_espera)::Música_en_espera Tabla:ASO-0010-funcionalidad_de(Línea_del_dialplan,Cola_de_llamada) Tabla:Rol_funcionalidad_de(Línea_del_dialplan,Cola_de_llamada)::Línea Tabla:Rol_funcionalidad_de(Línea_del_dialplan,Cola_de_llamada)::Cola_de_llamadas Tabla:ASO-0011-funcionalidad_de(Línea_del_dialplan,IVR) Tabla:Rol_funcionalidad_de(Línea_del_dialplan,IVR)::Línea Tabla:Rol_funcionalidad_de(Línea_del_dialplan,IVR)::IVR Tabla:ASO-0012-Consulta(Usuario,Registro_de_llamada) Tabla:Rol_Consulta(Usuario,Registro_de_llamada)::Usuario Tabla:Rol_Consulta(Usuario,Registro_de_llamada)::Registro_de_llamadas Tabla:ASO-0013-Consulta(Usuario,Estadística) Tabla:Rol_Consulta(Usuario,Estadística)::Usuario Tabla:Rol_Consulta(Usuario,Estadística)::Estadística Tabla:SOP-0001-Identificación_del_usuario_administrador Tabla:Excepción_Identificación_del_usuario_administrador::no_pre Tabla:Excepción_Identificación_del_usuario_administrador::Usuario_no_registrado Tabla:Excepción_Identificación_del_usuario_administrador::Contraseña_errónea Tabla:SOP-0002-Crear_nueva_extensión_SIP Tabla:Excepción_Crear_nueva_extensión_SIP::no_pre Tabla:Excepción_Crear_nueva_extensión_SIP::Algún_campo_vacío Tabla:Excepción_Crear_nueva_extensión_SIP::Verificación_contraseña_incorrecta Tabla:SOP-0004-Modificar_extensión_SIP Tabla:Excepción_Modificar_extensión_SIP::Algún_campo_vacío Tabla:Excepción_Modificar_extensión_SIP::Contraseña_incorrecta Tabla:SOP-0006-Borrar_extensión_SIP Tabla:Excepción_Borrar_extensión_SIP::pre Tabla:SOP-0003-Crear_nueva_extensión_IAX Tabla:Excepción_Crear_extensión_IAX::no_pre Tabla:Excepción_Crear_extensión_IAX::Algún_campo_vacío Tabla:Excepción_Crear_extensión_IAX::Verificación_contraseña_incorrecta Tabla-SOP-0005-Modificar_extensión_IAX Tabla:Excepción_Modificar_extensión_IAX::Algún_campo_vacío Tabla:Excepción_Modificar_extensión_IAX::Verificación_contraseña_incorrecta

18 Sistema de Administración básica de una centralita VoIP Tabla:SOP-0007-Borrar_extensión_IAX Tabla:Excepción_Borrar_extensión_IAX::pre Tabla:SOP-0026-Consulta_registr_de_llamadas Tabla:SOP-0008-Acceso_a_consola Tabla:SOP-0027-Consulta_estadísticas Tabla:SOP-0009-Crear_nuevo_contexto Tabla:Excepción_Crear_nuevo_contexto::no_pre Tabla:Excepción_Crear_nuevo_contexto::campo_nombre_contexto_vacío Tabla:SOP-0011-Crear_nueva_línea_en_un_contexto Tabla:Excepción_Crear_nueva_línea_en_un_contexto::no_pre Tabla:SOP-0012-Modificar_línea_en_un_contexto Tabla:SOP-0013-Borrar_línea_en_un_contexto Tabla:SOP-0014-Crear_nuevo_buzón_de_voz Tabla:Excepción_Crear_nuevo_buzón_de_voz::no_pre Tabla:SOP-0015-Modificar_buzón_de_voz Tabla:SOP-0016-Borrar_buzón_de_voz Tabla:SOP-0017-Crear_nuevo_sistema_IVR Tabla:Excepción_Crear_nuevo_sistema_IVR::no_pre Tabla:SOP-0018-Modificar_un_sistema_IVR Tabla:SOP-0019-Borrar_un_sistema_IVR Tabla:SOP-0020-Crear_nuevo_sistema_de_colas_de_llamadas Tabla Tabla:SOP-0021-Modificar_sistema_colas_de_llamadas Tabla:SOP-0022-Borrar_cola_de_llamadas Tabla:SOP-0023-Crear_sistema_de_música_en_espera Tabla:Excepción_Crear_sistema_de_música_en_espera::no_pre Tabla Tabla:SOP-0025-Borrar_sistema_de_música_en_espera

19 1. Introducción 20

20 Sistema de Administración básica de una centralita VoIP Prefacio La telefonía IP o también llamada voz sobre IP (VoIP, Voice over IP), ha revolucionado el mundo de las telecomunicaciones en los últimos años. Un mercado, el de la telefonía, que se encontraba copado por grandes compañías de origen estatal y que usaba tecnologías que habían evolucionado muy poco a lo largo de estos últimos cien años, ha visto la irrupción de esta nueva tecnología de comunicación. Sin embargo, existe todavía un gran recelo respecto al uso de esta tecnología y mucha gente piensa que esta revolución es más un eslogan comercial que una realidad. Si atendemos a la siguiente figura, podemos ver cual ha sido la evolución de la VoIP y de la telefonía clásica en billones de minutos a lo largo de los diez últimos años: Figura 1: Crecimiento en billones de minutos del tráfico de la telefonía tradicional y VoIP de 1993 a Como podemos observar, aunque el volumen de minutos de la telefonía clásica supera claramente al de VoIP actualmente, la tendencia hace apuntar que esta última sobrepasará en unos años a la telefonía tradicional. 1 Datos obtenidos del informe de Telegeography, lo cuales pueden ser consultados en el siguiente enlace: 21

21 Esta irrupción de la telefonía IP en el mundo de las comunicaciones ha propiciado la llegada de nuevos operadores (como Skype, Voipbuster, etc) que en un escenario controlado por grandes compañías de telecomunicaciones empiezan a ganar terreno. Sin embargo, los operadores tradicionales siguen siendo los principales proveedores de VoIP debido entre otras cosas a su posición dominante en el mercado. Además de la llegada de nuevos operadores, la voz sobre IP ha propiciado también la creación de plataformas de telefonía de código abierto bajo licencia GPL (General Public Licence), las cuales proporcionan la base para la creación de soluciones de telefonía a medida y a bajo coste. Cualidades en las que radica la fuerza de estas plataformas. Dentro de estas plataformas, la que ha irrumpido con más fuerza es sin duda Asterisk. 22

22 Sistema de Administración básica de una centralita VoIP Problema: Complejidad de la administración de una centralita de teléfono VoIP Con la creación de los departamentos de Sistemas de información en las empresas, y la incorporación de técnicos informáticos cualificados. Se empieza a demandar la posibilidad de gestionar las centralitas telefónicas sin acudir a un personal externo. A pesar de las cualificaciones de dicho personal experto, los sistemas tradicionales han limitado la adquisición de conocimientos mínimos de administración de las centralitas de teléfonos (PBXs1). Por tanto, esta desventaja se traduce a que el personal no esté preparado para programar a nivel de código los dispositivos que se comporten como una centralita PBX. Y tampoco es un objetivo formar a expertos para realizar una administración básica como crear extensiones, Grupos de llamada, etc., esporádicamente. Es aquí donde surge la necesidad de un software de administración con el que el personal técnico de la empresa sea capaz de realizar esta tarea de Administración básica de una centralita de teléfono. 1 Para más información acerca de la definición de una PBX puedes consultar la Wikipedia: o el libro: VoIP y Asterisk, Redescubriendo la telefonía, (AlfaOmega-RA MA), pág:12. 23

23 Objetivos El objetivo principal de este proyecto es desarrollar una interfaz web que permita una administración básica de una centralita telefónica VoIP implementada con el software Asterisk. La herramienta deberá cubrir todas las configuraciones básicas de algunas de las funcionalidades que ofrece Asterisk. Del mismo modo ofrecerá una interfaz sencilla y minimalista, orientada a usuarios con pocos conocimientos sobre dicho software, paliando así el problema de la administración básica de una centralita telefónica VoIP descrito en el apartado anterior. Además, se pretende realizar la instalación del Asterisk sobre un sistema hardware de recursos reducidos, para ofrecer de este modo una minicentralita telefónica VoIP que cubra las necesidades de un pequeño grupo de usuarios. 24

24 Sistema de Administración básica de una centralita VoIP 1.1. Asterisk En este capítulo descubriremos qué es exactamente Asterisk y para qué sirve. Para ello presentaremos brevemente las funcionalidades que ofrece Qué es un PBX? Un PBX o PABX (Private Branch Exchange y Private Automatic Branch Exchange respectivamente) cuya traducción al español sería: central secundaria privada automática, es cualquier central telefónica conectada directamente a la red pública de teléfono por medio de líneas troncales para gestionar, además de las llamadas internas, las entrantes y/o salientes con autonomía sobre cualquier otra central telefónica. Este dispositivo generalmente pertenece a la empresa que lo tiene instalado y no a la compañía telefónica, de aquí al adjetivo privado as u denominación. Un PBX se refiere al dispositivo que actúa como una ramificación de la red primaria pública de teléfono, por lo que los usuarios no se comunican con el exterior mediante líneas telefónicas convencionales, sino que al estar el PBX conectado directamente a la RTB (Red de Telefonía Pública), será esta misma la que enrute la llamada hacia su destino final mediante enlaces unificados de transporte de voz llamados líneas troncales. En otras palabras, los usuarios de un PBX no tienen asociada ninguna central de teléfono pública, ya que es el mismo PBX la que actúa como tal, análogo a una central pública que da cobertura a todo un sector mientras que un PBX lo ofrece a las instalaciones de la compañía generalmente. No tiene límite en cuanto al número de estaciones que pueden servir, pero el precio aumenta según el número de estaciones. Los sistemas PBX son más sofisticados que los equipos multilínea o los sistemas híbridos, pero también son más costosos. La capacidad de un PBX no se determina por líneas, sino por puertos, el número total de alambres que puede conectar el sistema. Los sistemas PBX pueden soportar características especiales de tecnología avanzada. 25

25 Qué es Asterisk? Asterisk2 es un programa de software libre (bajo licencia GPL) capaz de simular la funcionalidad de una PBX. Como cualquier PBX, permite conectar un número determinado de teléfonos para hacer llamadas entre sí e incluso conectar un proveedor de VoIP, una línea analógica convencional, una RDSI tato básica como primaria, líneas de la red móvil (GSM), radios, etc. Este proyecto fue desarrollado por el ingeniero Mark Spencer 2, miembro fundador de la compañía DIGIUM y principal desarrollador de las versiones estables de Asterisk. Es una solución completamente software, por lo que existen multitud de desarrolladores que han aportado funciones y nuevas aplicaciones. Originalmente fué creada para sistemas Linux pero a día de hoy funciona también en sistemas OpenBSD, FreeBSD, Mac OS X, Solaris Sun y Windows, aunque Linux sigue siendo la que más soporte presenta. Esta solución le da una robustez innata para desplegar servicios típicos de los sistemas tradicionales, pero aportando mucha mas flexibilidad, control, creatividad y a muy bajo coste. Asterisk incluye muchas características que anteriormente solo estaban disponibles en costosos sistemas propietarios de PBX. Como son el buzón de voz, la distribución automática de llamadas, conferencias, sistema de respuesta de voz interactiva (IVR), y otras muchas. Además se pueden crear nuevas funcionalidades escribiendo un dialplan (plan de llamadas) en el lenguaje de script de Asterisk o añadiendo nuevos módulos escritos en lenguaje C o en cualquiero otro lenguaje de programación reconocido por Linux. Asterisk pretende revolucionar el mundo de las comunicaciones IP frente a las tradicionales soluciones, caracterizadas por su falta de transparencia para el usuario, sus protocolos propietarios y cerrados, así como su elevado coste. 2 Introducción del desarrollo de Asterisk por Mark Spencer puede consultarse en: Julio Gómez López, Francisco Gil Montoya, (2009), VoIP y Asterisk: Redescubriendo la telefonía, (AlfaOmega-RA MA), pág:61. 26

26 Sistema de Administración básica de una centralita VoIP 1.2. Asterisk en diferentes escenarios Teniendo en cuenta la función de un centralita telefónica, Asterisk puede usarse en multitud de escenarios. Así, puede proveer servicios de telefonía a usuarios que se encuentren en una red LAN (Red de Área Local) pudiendo así realizar llamadas entre ellos, o bien, yendo un poco más lejos, utilizar Internet para realizar llamadas a otros usuario conectados, o incluso tener la capacidad para llamar a teléfono convencionales conectados a la RTB (Red de Telefonía Básica tradicional). A continuación describiremos que necesita Asterisk para poder dar servicios en cada uno de estos casos Llamadas internas en la oficina El escenario más simple que podemos imaginar para Asterisk, es proporcionar llamadas para los usuarios de una red, la cual no esta conectada a Internet. Un ejemplo claro sería conectar la centralita Asterisk a la red local dentro de la empresa. Figura 2: Asterisk en una red interna 27

27 1.2.2 Conectar la oficina con Internet En este segundo escenario, tenemos la misma red privada que antes pero conectada a Internet. Con este simple hecho, un empleado de nuestra oficina podrá establecer llamadas con cualquier dispositivo VoIP que este conectado a Internet sin coste alguno. Solo habrá que tener en cuenta cuestiones tales como el ancho de banda necesario para soportar el aumento de tráfico, la seguridad, pero no habrá que incurrir en mas gastos que la propia conexión a Internet. Imaginemos que una compañía con dos sedes, una en Sevilla y otra en Berlín por ejemplo, tienen ambas un sistema Asterisk. Si las dos están conectadas a Internet, se podrán realizar llamadas entre ambos sitios a través de la red. Figura 3: Asterisk conectado a Internet 28

28 Sistema de Administración básica de una centralita VoIP Conectar la oficina con la RTB En este último escenario, la red privada ya conectada a Internet se ha unido a la red telefónica pública (RTB). Para poder recibir llamadas de cualquier teléfono convencional de la RTB necesitaremos de disponer de líneas de teléfonos proporcionadas por una compañía telefónica. Figura 4: Asterisk conectado a la RTB Las líneas telefónicas deberán llegar a Asterisk utilizando para ello una tarjeta conectada al bus PCI o un dispositivo externo denominado pasarela (Gateway) VoIP. Ambos métodos proveen una interfaz entre la red IP de la oficina con la red telefónica. 29

29 1.3. Interfaces Web de administración de Asterisk Hoy en día existen múltiples soluciones de telefonía IP basadas en Asterisk. La licencia de código abierto del software facilita que multitud de empresas de diversos tamaños y origen se dediquen al desarrollo de soluciones adaptadas a las necesidades del mercado. A continuación se citan algunas de las interfaces de administración de una centralita implementada con el software de Asterisk: FreePBX FreePBX3 es una de las interfaces web más populares de Asterisk, se estima que está instalado en mas de medio millón de servidores. FreePBX es un desarrollo Open Source, que se encuentra bajo licencia GNU GPL y ha sido desarrollado principalmente por Phillipe Lindheimer. - Tecnologías utilizadas: FreePBX utiliza MySQL como servidor de base de datos. El lenguaje de programación utilizado es PHP y Perl. - Soporte: Detrás de FreePBX existe una importante comunidad desarrollando y dando soporte al proyecto. - Algunos paquetes de software que utiliza: A parte del propio gestor de administración, también instala otros tres paquetes que ayudan a la gestión de la centralita. Se citan a continuación: - Call Detail Record (CDR): Que proporciona detalles de las llamadas entrantes o salientes de Asterik. - Asterisk Flash Operator Panel (FOP)4: Software que visualiza estados y con el que se pueden gestionar las llamadas, extensiones, colas de llamadas, salas de conferencia, etc. - Asterisk Recording Interface (ARI): Este software gestiona entre otras funcionales, los buzones de voz y grabaciones de los usuarios desde un entorno gráfico. Hay que puntualizar que estos paquetes se pueden instalar independientemente de FreePBX. 3 4 Web oficial del proyecto FreePBX: Más información acerca del módulo FOP de Asterisk en: 30

30 Sistema de Administración básica de una centralita VoIP - Lo mejor: Es completamente modular, nos permite ahorrrar recursos del servidor y facilita mucho su manejo. Al ser de los más conocidos, hay mucha información en la red. - Lo peor: Su complejidad de uso, ya que utiliza muchos tecnicismos por lo que requiere conocimientos de telefonía. Además genera muchas líneas en los ficheros de configuración de Asterisk difícilies de mantener para los usuarios mas experimentados, por este motivo FreePBX desaconseja la configuración de Asterisk desde los ficheros, si se utiliza el panel web para su administración. - Capturas de pantalla: A continuación se muestran algunas de las capturas de pantalla de la interfaz web FreePBX. Figura 5: Panel de estado freepbx 4 Imágenes de la wiki oficial de la web de freepbx: 31

31 Figura 6: Creación de extensión SIP en FreePBX Figura 7: Consola cliente de Asterisk desde FreePBX 32

32 Sistema de Administración básica de una centralita VoIP AsteriskGUI Es el frontend de administración oficial de DIGIUM para Asterisk, pero no tiene la potencia esperada como la tienen otros gestores Web como podría ser FreePBX. Debido, principalmente, a que no está soportado oficialmente por DIGIUM, y a la falta de documentación5. - Tecnologías utilizadas: Está escrito en HTML y javascript. Algunas de las ventajas que se le pueden atribuir a AsteriskGUI es que, es que no requiere un servidor web Apache, ni una base de datos Mysql, ni PHP. Utiliza la tecnología AJAM (Asynchronous Javascript Asterisk Manager), la cual permite a los navegadores web u otros aplicaciones que usen http, acceder directamente al Asterisk Manager Interface (AMI)6. De esta forma se pueden leer eventos y ejecutar comandos en el sistema de manera apropiada y vía web. - Soporte: A pesar de ser el panel de administración oficial de DIGIUM, este no está soportado oficialmente por la empresa. - Paquetes de software que utiliza: No depende de la disponibilidad de programas de terceros y bibliotecas, y no requiere instalación en cualquier distribución en particular, el único requisito es un servidor Asterisk corriendo en la máquina. Es decir esta interfaz es nativa del propio software de Asterisk. - Lo mejor: Viene integrado en el propio Asterisk, por lo que no requiere instalación. - Lo peor: No tiene soporte por la comunidad de Digium, tiene cierta complejidad de uso, es muy poco amigable, utiliza muchos tecnicismos por lo que requiere conocimientos de telefonía. - Capturas de pantalla: Algunas de las imágenes de la interfaz web AsteriskGUI de su versión 2.0, se muestran a continuación: 5 AsteriskGUI en la Wiki de Asterisk en: https://wiki.asterisk.org/wiki/display/ast/asterisk+gui y Julio Gómez López, Francisco Gil Montoya, (2009), VoIP y Asterisk: Redescubriendo la telefonía, (AlfaOmegaRA MA) pág: Mas información acerca de AMI en: 33

33 Figura 8: Estado del sistema de AsteriskGUI 2.0 Figura 9: Creación de extensiones en AsteriskGUI

34 Sistema de Administración básica de una centralita VoIP Voiceone Otra de las interfaces web más completas de administración de Asterisk. Voiceone también es un desarrollo Open Source, que se encuentra bajo licencia GNU GPL. - Tecnologías utilizadas: Voiceone utiliza Apache como servidor Web y MySQL como servidor de base de datos. El lenguaje de programación utilizado es PHP. - Soporte: Detrás de Voiceone existe una comunidad desarrollando y dando soporte al proyecto. - Paquetes de software que utiliza: No utiliza ningún paquete de software en particular, pero si que tiene un sistema de gestión de funcionalidades o también llamadas macros, que se pueden instalar y desinstalar como si fueran paquetes de software, y así adaptarse más a las necesidades funcionales. - Lo mejor: Ofrece una interfaz7 bastante amigable e intuitiva, para configuraciónes no muy avanzadas. Además detalla todas las opciones de configuración y es modular, permite la intalación de nuevas aplicaciones y funcionalidades. - Lo peor: No ofrece una monitorización básica de la centralita ni de los recursos utilizados, además para la configuraciónes más avanzadas puede resultar tedioso. Y genera una configuración en los ficheros de Asterisk difícil de mantener. 7 Se puede probar al demo online de la interfaz de administración voiceone en el siguiente enlace: 35

35 - Capturas de pantalla: Algunas de las imágenes de la interfaz web Voiceone se muestran a continuación: Figura 10: Panel de administración Voiceone Gestión de extensiones Figura 11: Panel de administración web Voiceone - Reglas de llamadas 36

36 Sistema de Administración básica de una centralita VoIP 1.4. Proyecto Beeton VS Principales paneles web de Asterisk existentes En los siguientes apartados describiremos las características principales que contienen los paneles de administración de Asterisk, y realizaremos una comparación detallada de cada una con respecto al proyecto Características principales de las interfaces de administración de Asterisk En este apartado haremos un repaso de las funcionalidades básicas que ofrecen las interfaces de administración de Asterisk citadas en los apartados anteriores: - Una monitorización básica del sistema: En la que se puedan visualizar los recursos utilizados de la máquina donde corre el servidor Asterisk, como pueden ser, la memoria RAM, la swap y el espacio en disco utilizados; el nombre del host, la version del sistema operativo, la hora actual del sistema y la fecha de la ultima actualización de Asterisk realizada, entre otras. - Sistema de gestión de usuarios y extensiones: La parte de la interfaz encargada de gestionar el registro de extensiones, es decir, toda la información referentes a los teléfonos registrados y al usuario de dicho número de teléfono. Estos datos pueden ser: el nombre del usuario, la contraseña, el del usuario, el caller-id, si usa o no buzón de voz dicho usuario, el protocolo utilizado para hacer las llamadas (SIP o IAX2), entre otros. - Monitorización básica de las llamadas actuales (canales activos) y un registro de las llamadas finalizadas. - Sistema de gestión de IVR (Interactive Voice Response), que permite configurar el sistema automatizado de respuesta interactiva cuando entra una llamada en la centralita. Esto nos permitirá ir encaminado las llamadas entrantes según las un criterio definido. Por ejemplo, un uusario al realizar una llamada a una empresa le saltará una operadora automática indicádole una serie de opciones que el usuario tendrá que elegir pulsando una tecla en su teléfono. De esta forma la llamada se encaminaría hacia un departamento de la empresa u a otro. - Gestión del buzón de voz de los usuarios: Esta función de la interfaz ofrece una herramienta para gestionar el sistema de buzones de voz de las extensiones registradas en la centralita. - Reglas de llamada entrantes y salientes (Incoming/Outbound Calling roules): O también llamado plan de llamadas (Dialplan), es el corazón de Asterisk, dónde se decide que hacer con cada una de las llamadas entrantes o salientes. En general son reglas que gestioan grupos de extensiones, y dónde se definen por ejemplo que extensiones pueden realizar llamadas entre sí, que extensiones pueden realizar llamadas al exterior o solo pueden hacer llamadas internas, que hacer con ciertas llamadas entrantes, y mucho más. 37

37 - Gestión de grupos de llamada: es un grupo de extensiones que sonaran de acuerdo a una determinada estrategia previamente establecida. Es decir, cuando una persona hace una llamada a un grupo de extensiones, dichos terminales sonaran a la vez, iran sonará uno del grupo cada vez siguiendo un criterio previamente definido. - Colas de llamada: es un sistema de distribución de las llamadas entrantes a un grupo de llamada específico. - Música en espera: Permite introducir categorías de música en espera basadas en archivos.wav y mp3. De este modo, el usuario puede poner diferentes melodías para ser reproducidas como música en espera, cunado recibe una llamada. 38

38 Sistema de Administración básica de una centralita VoIP Tabla comparativa de características de las interfaces de Asterisk A continuación se muestra una tabla con algunas de las diferencias funcionales entre las tres interfaces de administración citadas anteriormente: AsteriskGUI FreePBX Voiceone Mi proyecto: Beeton Documentación Monitorización básica del sistema Gestión de usuarios y extensiones Monitorización básica de llamadas actuales Sistema de gestión de IVR (Interactive Voice Response) Gestión del buzón de voz de los usuarios Reglas de llamada entrantes y salientes (Incoming/Outboun d Calling roules) Grupos de llamada Música en espera Gestión de colas de llamadas Consola de Asterisk CLI Soporte Complejidad de uso Figura 12: Tabla de algunas de las características y funcionalidades de AsteriskGUI, FreePBX, Voiceone y el proyecto Beeton Dónde: Tiene dicha característica o función y además es útil e intuitiva. Tiene dicha característica o función que es útil, pero no es muy intuitiva o su configuración no facilita la labor de la administración del sistema. No posee dicha característica o función. 39

39 1.5. Tipos de terminales VoIP usados con Asterisk Para realizar y recibir llamadas, los usuarios necesitan de unos dispositivos terminales que proporcionen la funcionalidad de un teléfono. Estos pueden ser ordenadores o teléfonos IP Softphones Para utilizar un ordenador como terminal VoIP es necesario utilizar una aplicación software que simule la llamada de un teléfono. Esta aplicación se conoce como Softphone. Entre los modelos más usados se encuentran el X-Lite 8 de CounterPath Corporation o el Zoiper 9. Existen además softphones para smartphones con Android, ios y Symbian entre otros. Figura 13: Interfaz del softphone X-Lite 3 8 Para más información visita la web oficial de CounterPath: Para más información visita la web oficial de Zoiper: 9 40

40 Sistema de Administración básica de una centralita VoIP Teléfonos IP La apariencia es de un teléfono convencional pero tiene una conexión RJ45 para conectarlo a la red. No solo existen teléfonos de sobremesa, sino que hay modelos inalámbricos (DECT y WiFI). Entre los principales fabricantes de teléfonos IP están: Cisco/Linksys, Polycom, Snom, Thomsom, Grandstream y Aastra. Figura 14: Modelos de teléfonos IP Cisco Siguiendo en la línea de los teléfonos, tanto en la categoría de softphones como hardphones, existen dispositivos con vídeo integrado. Gracias a ellos se pueden realizar videollamadas a través de nuestro sistema Asterisk hacia otro terminal que soporte una llamada de vídeo. Figura 15: Videoteléfono Grandstream GXV

41 1.5.3 Otros terminales VoIP para usar con Asterisk En Asterisk, los terminales VoIP no tienen porqué limitarse a teléfonos, ya sean software o hardware. Uno de este tipo de terminales son los altavoces para megafonía. No deja de ser un altavoz de telefonía, solo que en este caso se conecta a nuestra centralita Asterisk vía LAN usando SIP. También existen porteros electrónicos o botones de llamada de emergencia. En este caso, podríamos decir que estamos ante una especia de teléfono con uno o mas botones y que poseen un micrófono y un altavoz. Al pulsar los botones en estos dispositivos no hacemos otra cosa que enviar a nuestro sistema Asterisk unos DTMF10. Figura 16: Altavoz IP para techo (Cyberdata) Figura 17: Portero electrónico IP (Alphatech Fermax IP DP) 10 Para más información sobre los tonos de marción DTMF: 42

42 Sistema de Administración básica de una centralita VoIP 1.6 Tarjetas de comunicaciones para Asterisk Las compañias telefónicas nos ofrecen diferentes tecnologías para conectarnos a la red de telefonía básica. Aquí describiremos las dos formas más usuales Conexión mediante una línea de teléfono básica (analógica) La forma más simple de conectarnos sería mediante una línea POTS 11 (Plain Old Telephone Network) o línea de teléfono básica. Esta línea representa un canal de transmisión y solo se puede transmitir por él una llamada. Un ejemplo de este tipo de tarjetas, lo podemos ver en la siguiente figura. Figura 18: Modelo AEX800 de Digium con ocho puertos analógicos Esta tarjeta la comercializa la empresa Digium, la misma empresa creadora de Astersik. Se conecta al ordenador mediante el bus PCI, y presenta una serie de puertos a los que podemos conectar una combinación de líneas FXS (Foreign Exchange Station) y FXO (Foreign Exchange Office), además de un cancelador de eco por hardware, según el modelo. 11 Para más información sobre el término POTS consulta la wikipedia: 43

43 Las interfaces FXS es la que maneja al teléfono proporcinándole la batería y el voltaje necesario para que suene. En nuestra casa, es ni más ni menos la roseta en la pared dónde conectamos el teléfono. Una interfaz FXO recibe ese voltaje y hace sonar el teléfono, en este caso sería la clavija que introducimos en la roseta. En la siguiente figura, podemos ver claramente la colocación de las interfaces en el camino de una llamada desde la central hasta un teléfono. Figura 19: Interfaces FXS y FXO Por lo tanto la tarjeta AEX800 de Digium nos permite conectar líneas telefónicas que viene de la central a las interfaces FXS y teléfonos analógicos a las interfaces FXO. 44

44 Sistema de Administración básica de una centralita VoIP Conexión mediante una línea RDSI Otra forma muy común de conexión a la RTB 12 es utilizar una línea RDSI (Red Digital de Servicios Integrados). Estas líneas utilizan el bucle local para brindar una comunicación digital entre el usuario y el operador de telefonía. Este enlace digital está formado por canales de 64 Kbps los cuales pueden transportar audio y datos y soportan tanto conexiones de conmutación de circuitos como de conmutación de paquetes utilizando para ello otros protocolos como por ejemplo X.25. Además de estos canales llamados canales B, se usa otro canal de 16 o 64 Kbps llamado canal D para transportar datos referentes a la señalización. El protocolo RDSI ofrece dos servicios, el básico y el primario. El servicio básico (BRI) consta de dos canales B y un canal D, permitiendo tener sobre un mismo cable dos líneas telefónicas. El servicio primario, ofrece un número diferente de canales según estemos en Europa o Estados Unidos. En la primera, el servicio primario (PRI) ofrece un total de 30 canales B, mientras que el segundo, el número total de canales B es de 23. En ambos casos existe un canal D que transporta la señalización. Este número de canales hace que para Europa el servicio primario se equipare con una línea E1 y en el caso de Estados Unidos con una T1. Para conectar Asterisk a la RTB (Red de Telefonía Básica) mediante líneas de este tipo existen tarjetas que conectadas normalmente al bus PCI hacen de interfaz entre la red telefónica pública y nuestro sistema. Según el número de líneas que queramos utilizar, disponemos de varios modelos de tarjetas de diferentes fabicantes. Figura 20: Tarjeta Sangoma A500 BRI 12 Para más información sobre el término RTB (Red de Telefonía Conmutada) consulta la wikipedia: 45

45 1.6.3 Tarjetas híbridas Hay veces que tenemos variedad de tecnologías a poca escala, o bién pocos zócalos libres en una placa base o que tan solo queremos ahorrar costes. Es por ello que existen una serie de tarjetas que combinan la posibilidad de conexión con diferentes tipos de tecnologías. Normalmente se tratan de tarjetas a las que se le añaden una serie de módulos para agregar la conexión de una tecnología en concreto. Entre otra marcas, se muestra una de Digium y otra de Beronet a continuación. En el caso de las Beronet, existe incluso la posibilidad de incluir un módulo para la conexión con la red GSM 13 mediante una tarjeta SIM. Figura 21: Tarjeta híbrida: Digium HB8 Figura 22: Tarjeta híbrida: Beronet BF Para más información sobre el término GSM consulta la wikipedia: 46

46 Sistema de Administración básica de una centralita VoIP 1.7 Gateways En el apartado anterior conectábamos Asterisk a la red telefónica convencional mediantes tarjetas de comunicaciones, otra posibilidad es untilizar un dispositivo externo que haga de interfaz entre la red telefónica y la red IP. Es como si sacáramos la tarjeta antes comentada y la pusiésemos en una dispositivo aparte Gateways analógicos, digitales y otros En la siguiente figura podemos ver la pasarela VoIP Linksys SPA 3102, la cual tiene un puerto FXO RJ11 para conectarlo a la roseta de teléfono, un puerto FXS para conectar un teléfono o fax analógico, un puerto Ethernet para conetarlo a la red, y por último ofrece un puerto para conectarnos a Internet mediante DSL. Figura 23: Gateway Linksys SPA

47 También hay disponibles gateways para líneas RDSI básicas y RDSI primarias. Como por ejemplo: Figura 24: Quadro ISDN Gateway de 4 puertos BRI Figura 25: Grandstream ATA con un puerto FXS y un puerto FXO 48

48 Sistema de Administración básica de una centralita VoIP Otras tecnologías para integrar Asterisk mediante gateways Otra de las tecnologías con las que podemos integrar Asterisk es con la red móvil GSM, mediante un gateway. Al cual se le puede integrar una o varis tarjetas SIM con Asterisk vía SIP. La ventaja de este sistema, es que podremos seguir usando una ĺinea que ya tuviéramos, además de poder programar rutas inteligentes de llamadas salientes para reducir el consumo. Por ejemplo, si queremos que las llamadas a móviles salgan por la línea móvil, usaremos el gateway GSM. Figura 26: Topex Mobilink 2 GSM a VoIP Podemos encontrar también gateways para integrar Asterisk con radios Tetra. Aunque parezca rara la integración, es posible tener los teléfonos conectados con radios como las que usa la policía, ambulacias, aeropuertos, etc. Gracias al siguite adaptador que se muestra en la figura, todo ello vía SIP y estándar. Figura 27: Gateway Topex Tetra-SIP 49

49 1.8 Recorrido por el mercado actual de la telefonía de código abierto En el mercado actual, Asterisk no es la única solución para la telefonía de código abierto. Otros proyectos, cada unos con sus comunidades de desarrolladores. Ofrecen las funcionalidades de un PBX y aunque no son tan populares como Asterisk son soluciones perfectamente válidas. Para hacer un recorrido por las distintas posibilidades que nos ofrece el mercado, vamos a hacer una división de este en tres niveles: Plataformas de telefonía, soluciones configurables y soluciones llave en mano Nivel 1: Plataformas de telefonía En este primer nivel tenemos los proyectos que proveen la tecnología necesaria para desarrollar soluciones de telefonía. Son por tanto plataformas para desarrollar servicios de telefonía utilizados por los usuarios con un alto nivel técnico como por ejemplo empresas constructoras de PBX, de pasarelas VoIP, de Softphones, etc. Destacamos plataformas como: - sipxecs14 : el cual es compatible con Linux, Windows y Mac pero no soporta tarjetas para conectarse a la RTB, con lo que es obligatorio el uso de pasarelas adicionales si queremos conectarnos a ella. - Yate15 (Yet Another Telephony Engine) : es una solución que destaca por su flexibilidad ya que permite implementar un gran número de dispositivos tales como: clientes o servidores de VoIP, PBX, etc. Escrita en C++, se puede instalar en Linux o Windows y ofrece la posibilidad de extender sus funcionalidades usando para ello lenguajes de programación como PHP, Python y Perl Web oficial del proyecto sipxecs: Web oficial del proyecto Yate: 50

50 Sistema de Administración básica de una centralita VoIP - FreeSwitch16 : plataforma de telefonía diseñada para facilitar el desarrollo de aplicaciones de voz y chat, desde softphones hasta centralitas telefónicas. Esta diseñado para operar en varios sistemas operativos como Windows, MAC OS X, BSD, Linux y Solaris e interactuar fácilmente con las plataformas aquí comentadas Nivel 2: Soluciones gratuitas configurables En este segundo nivel, tenemos soluciones que proveen servicios personalizados aunque permiten la adición de nuevos módulos para obtener nuevas funcionalidades. Son más fácil de instalar y de configurar que las soluciones del nivel uno y vienen normalmente con una interfaz gráfica. Son todas gratuitas y entre ellas destacamos las siguientes: - FreePBX Distro17 : es otra PBX basada en Asterisk y da nombre a la interfaz gráfica más conocida para configurarla. Está escrita en PHP y se sirve de una base de datos MySQL. - PBX in a Flash18 (PIAF) : Una distribución de Asterisk basada en CentOS, utiliza FreePBX como interfaz gráfica, y dicha distribución está pensada para su instalación en sistemas que utilicen una memoria flash como sistema de almacenamiento. Adicionalmente, los creadores de PIAF han puesto a disposición de la comunidad de usuarios diferentes scripts mediante los cuales es posible habilitar nuevas funcionalidades a conveniencia. Todo lo anterior, siguiendo una metodología automatizada, pensada para el usuario con conocimientos limitados o básicos. El conjunto final acaba siendo un sistema Asterisk en el que el usuario puede ir añadiendo a conveniencia aquellas funcionalidades que le parecen de interés, aun sin tener unos conocimientos avanzados de Linux. 16 Web oficial del proyecto Freeswitch: Web oficial del proyecto FreePBX: 18 Web oficial del proyecto PBX in a Flash:

51 - AsteriskNOW19 : se trata de una distribución oficial de Digium, la misma empresa que creó Asterisk. Utiliza la interfaz AsteriskGUI para configurarlo, pero es compatible con la interfaz web FreePBX. - VoyageONE20 : distribución de Asterisk basada en Debian y que incluye le interfaz de administración web AsteriskGUI. Está pensada para la instalación en tarjetas de almacenamiento de tipo Flash. El sistema operativo tiene una instalación mínima, y está pensado para la instalaciones de entornos empotrados. - Elastix21 : Es de las pocas, por no decir la única que podemos encontrar en español. Ha mejorado mucho en los últimos años, ofreciendo ahora cursos de formación e incluso una certificación. Parece que ahora solo ofrece el panel de adminsitración en versión ISO con un sistema CentOS preinstalada. Seguramente sea la mas completa de todas. Además hay mucha documentación 19 Web oficial del proyecto AsteriskNOW: Web oficial del proyecto VoyageONE: 21 Web oficial del proyecto Elastix:

52 Sistema de Administración básica de una centralita VoIP Nivel 3: Soluciones de pago llave en mano Por último, en un tercer nivel se encontrarían las aplicaciones llave en mano, las cuales proporcionan una solución completa a usuarios finales que simplemente las usan y que a cambio de un desembolso económico obtienen una serie de ventajas como el soporte o el mantenimiento. Aquí nos encontramos con la versión de pago de las soluciones descritas en el nivel 2. Entre ellas cabe destacar: - TrixboxPro22 : es una versión de pago de Trixbox y nos ofrece aplicaciones ya configuradas que nos permite tener generación de información de errores, actualizaciones automáticas, sistemas de copias de seguridad automáticas, etc. Además su compra incluye también un servicio de soporte y de mantenimiento. - Asterisk Busines23 : es la versión de pago de AsteriskNow. Ofrece diferentes fórmulas dependiendo de la cual tendremos más o menos funcionalidades, tiempo de monitorización del sistema e incluso tiempo de formación para los usuarios Web oficial del proyecto TrixBoxPro: Web oficial del proyecto Asterisk Business: 53

53 1.9 Asterisk VS Centralitas convencionales A continuación se enumeran una serie de características que hacen de Asterisk una elección potente y segura a la hora de implantar una solución de telefonía: - En realidad Alcatel24, Nortel(BCM) son CPUs con un software similar a Asterisk para la parte de telefonía y un sistema operativo (Linux en ambos casos). Obviamente en un bonito chasis y con tarjetería propietaria. - Coste entre 25 y 50% menos. - Las capacidades avanzadas en otras centralitas telefónicas están incluidas de serie en Asterisk: grabación de llamadas, buzón de voz ilimitado, multiples contestadores aotomáticos, etc. - Con Asterisk se pueden hacer interconexiones vía Internet/VPN. - Con Asterisk puedes aumentar la funcionalidad de la centralita tradicional, integrarla o reemplazarla, sin perder funcionalidades. Esto se puede hacer incluso gradualmente. - Asterisk es una caja de herramientas, hay muchas aplicaciones telefónicas que se pueden instalar (no necesariamente de forma gratuita) como software de callcenter, alarmas, lanzadores de llamadas, IVRs, etc. - Al estar basado en protocolos abiertos puedes escoger el hardware de los mejores fabricantes y no hay que limitarse al reino del fabricante tradicional. Un teléfono digital/voip Panasonic no funciona en Alcatel ni en Nortel y viceversa. - Stocks. Muchas veces las partes la central telefónica tradicional se importan a pedido. Con Asterisk hay 2 o 3 mayoristas que frecuentemente abastecen de componentes al mercado. - Madurez. Si bien cualquier persona con un mínimo de experiencia puede instalar Asterisk, hay empresa y profesionales con muchos años de experiencia. También hay certificaciones oficiales y representaciones autorizadas del fabricante (Digium/Elastix). 24 Una de las soluciones hardware de una centralia que ofrece Alcatel para una empresa mediana : 54

54 Sistema de Administración básica de una centralita VoIP Caso práctico En este apartado vamos a analizar mediante un caso práctico, los requisitos que una pequeña empresa necesita para migrar de un sistema de telefonía tradicional, a un sistema de telefonía IP. De este modo iremos presentando las funcionalidades que deba contemplar la herramienta web de administración. Supongamos una pequeña empresa llamada empresa X en Sevilla, encargada de realizar proyectos informáticos de diversa índole. Dicha empresa X dispone para realizar y recibir llamadas, 4 líneas analógicas contratadas con un operador de telefonía. Y está formada por 8 trabajadores que trabajan habitualmente en la sede, y 2 que lo hacen de manera ocasional, pues normalmente trabajan en el sitio del cliente. Las líneas telefónicas se reparten entre los departamentos de la siguiente manera: - Departamento de Administración: lo compone una persona que se encarga de llevar los asuntos administrativos. Además, es la persona que atiende a las llamadas cuando un cliente llama al número de teléfono de la empresa. Tiene una línea de teléfono a su disposición. - Departamento Comercial: es el departamento encargado de elaborar ofertas comerciales a los clientes. Está compuesto por dos personas que comparten una línea de teléfono. - Departamento Técnico: es el encargado de solucionar las incidencias técnicas que se producen en los sitios del cliente. Está compuesta por una persona que realiza tele-asistencias, y dos personas que realizan tareas de mantenimiento en el sitio del cliente. El técnico que realiza teleasistencias dispone de una línea dedicada. - Departamento de Desarrollo: es el departamento encargado de elaborar soluciones software a los clientes. Está formado por un total de cuatro personas. Y como el caso anterior, todos comparten una línea telefónica. La figura a continuación ilustra esta disposición: 55

55 Figura 28: Líneas analógicas de cada departamento Requisitos de la empresa para el nuevo sistema de telefonía Se desea que todos los miembros de la empresa tengan una extensión de teléfono desde la cual se realicen y se reciban las llamadas. Requisito 1: Extensiones y buzones de voz Así mismo todos los usuarios del sistema deberán tener un buzón de voz asociado a una extensión para permitir que se pueda dejar un mensaje en el caso de que la persona no esté disponible o esté ocupada. Requisito 2: Mensajería unificada Se quiere que todos los empleados, dispongan de mensajería unificada, es decir, que si alguien dejase un mensaje en el buzón de voz de un miembro de la empresa, este sea automáticamente enviado como un archivo adjunto en un correo electrónico a su cuenta de correo. 56

56 Sistema de Administración básica de una centralita VoIP Requisito 3: Reutilización de las líneas analógicas La empresa, quiere seguir manteniendo las 4 líneas analógicas para poder comunicarse con la red pública de teléfono pero además, desea que haya un numero principal que agrupe a todas. Este correspondería al Departamento de administración, y sería el número principal de la empresa. Requisito 4: Menú de bienvenida con opciones Cuando se marque el número de teléfono principal de la empresa, se desea que una voz de operadora presente al usuario una serie de opciones las cuales se muestran en la figura a continuación: Figura 29: Menú de bienvenida de respuesta de voz interactiva - Si el usuario elige la opción 1, será para introducir él mismo una extensión de algún empleado de la empresa. Si el usuario introduce una extensión que no es válida, se le presentará un mensaje de error. - Si el usuario elige la opción 2, la llamada será encaminada a la extensión de la persona encargada del Departamento de Administración. - Si elige la opción 3, la llamada será encaminada al Departamento Técnico. De todos los técnicos que estén disponibles para atender las llamadas, se llamará a uno cada vez para repartir la carga de trabajo. -Si elige la opción 4, la llamada se encaminará al Departamento Comercial, haciendo sonar todas las extensiones de los miembros que lo conforman. - Si elige la opción 5, la llamada se encaminará al Departamento de Desarrollo siguiendo la misma política para la opción 4 antes indicada. 57

57 -Si el usuario marcase una opción que no es válida, se le indicará y se volverá a reproducir el menú de opciones. - Por último, si el usuario no marca ninguna extensión al término de mostrar todas las opciones, la llamada será atendida por el Departamento de Administración. Requisito 5: Gestión de llamadas del Departamento Técnico Cuando el usuario pulse la opción 4, y la llamada se encamine hacia el Departamento Técnico, o un usuario llamame a un número asociado a este departamento, se desea que la centralita pase la llamada al primer técnico que se encuentre disponible. Así mismo, se pide que si todos los técnico están ocupados, el usuario entre en una cola de espera, y que sea atendido cuando un técnico se quede libre. Por último, si hay varios técnicos que están libres, se quiere que se pase una llamada a uno distinto cada vez para repartir la carga de trabajo. Requisito 6: Gestión de llamadas para los Departamentos Comercial y de Desarrollo Se desea a su vez que cuando el usuario elija las opciones 4 o 5 del menú de opciones o cuando se realice una llamada a los números de teléfono asociados a los departamentos Comercial y de Desarrollo, suenen los teléfonos de todos los miembros que pertenecen al departamento seleccionado. El primero que descuelgue, será el que entre en conversación con el usuario. Requisito 7: Servicios comunes de telefonía Se desea que estén disponibles también servicios usuales de un PBX como son el estacionamiento, la captura y la transferencia de llamada. Requisito 8: Bajo consumo eléctrico y bajo coste La empresa quiere una solución de bajo consumo eléctrico y de bajo coste. Requisito 9: Administración básica y sencilla de la centralita Se desea que la centralita tengo una interfaz sencilla y amigable para su administración básica, para que en la manera de lo posible, tener que evitar la intervención de un técnico especializado para gestionar y modificar los requisitos anteriormente citados. Entremos en un poco de más detalle en este requisito que desea la empresa mediante un ejemplo práctico: 58

58 Sistema de Administración básica de una centralita VoIP Supongamos que la empresa X, después de migrar al nuevo sistema de telefonía, incorpora a su plantilla dos nuevos trabajadores, a un nuevo comercial y a un nuevo técnico. Y que además, se quiere incluir una música de espera, cuando el usuario realice la llamada al Departamento Técnico y en ese mismo momento todos los técnicos tengan sus líneas ocupadas. Por consiguiente, habría que asignar a los dos nuevos trabajadores una extensión SIP a cada uno, para darlos de alta en la centralita, para que puedan acceder al servicio de telefonía de la empresa mediante un dispositivo VoIP o un Softphone. Del mismo modo, al nuevo técnico habría que añadirlo al sistema de distribución automática de las llamadas, he incluir la música en espera si todos los técnicos están ocupados. En otras palabras, que para realizar gestiones de administración de una centralita telefónica, o tienes un técnico especializado en tu empresa que realice tareas de mantenimiento de dicha índole, algo poco frecuente a día de hoy en una empresa pequeña, o se contrata a un personal externo para que realice las tareas de mantenimiento de la centralita, con el consiguiente coste que eso conlleva. Por consiguiente, es aquí dónde surge la necesidad de desarrollar un software de gestión de una centralita de teléfono, con una interfaz minimalista, sencilla y que a la vez cubra la mayoría de las necesidades que una pequeña empresa necesita para administrar su centralita de telefonía VoIP sin tener que acudir a un personal experto Soluciones a los requisitos deseados para el nuevo sistema de telefonía Ahora bien, vamos a ver las soluciones a los requisitos demandados por la empresa que podemos dar con una centralita telefónica (PBX) usando Asterisk. Solución al requisito 1: Extensiones y buzón de voz Se crearán tantos usuarios SIP como empleados tenga la empresa, definiendo sus características. Así mismo se creará para cada uno de ellos un buzón de voz. Solución al requisito 2: Mensajería unificada Se configurará Asterisk para que use el servidor de correo de Google para que entregue los mensajes a su correcto destinatario. 59

59 Solución al requisito 3: Reutilización de las líneas analógicas Para brindar una solución a este requisito hay que de alguna forma adaptar las cuatro líneas analógicas a la red de telefonía IP. Para ello, se ha optado por la adquisición de un gateway, es decir, una dispositivo que haga de interfaz entre las cuatro líneas analógicas y la red IP para que la centralita pueda gestionar los cuatro líneas analógicas. El hardware que se utilizará sera un gateway Beronet 25 con el módulo integrado BF4FXO 26, con un precio alrededor de unos 400 Euros. Figura 30: Carcasa del gateway Beronet con el módulo BF4FXO Figura 31: Módulo Beronet BF4FXO Se ha optado por esta opción por ser una solución modular, ya que se puede adaptar a las necesidades de cada caso Para más información se puede consultar la documentación web oficial de Beronet: Para más información se puede consultar la documentación técnica de la wiki oficial de Beronet: 60

60 Sistema de Administración básica de una centralita VoIP Solución al requisito 4: Menú de bienvenida con opciones Se hará uso de un IVR (Interactive Voice Response), el cuál se encargará de interactuar con el usuario y encaminar la llamada a la extensión que elija. Para poder recibir las llamadas por la línea principal de la empresa y encaminarlas a las otras, será necesario pedir al proveedor de servicios que haga un agrupamiento de líneas. Así, si un usuario llama al número principal y elije comunicarse con un departamento y mientras se está produciendo la comunicación llama otro usuario a la línea principal, ésta no dará tono de ocupado. Solución al requisito 5: Gestión de llamadas del Departamento Técnico Para gestionar las llamadas del Departamento Técnico, se implementará un sistema de distribución automática de llamadas con las características de turnos rotativos de atención de llamada que requiere la empresa. Solución al requisito 6: Gestión de las llamadas para los Departamentos Comercial y Desarrollo Se configurarán los parámetros pertinentes para que la centralita actúe de la forma deseada por la empresa cuando el Departamento Comercial y el de Desarrollo reciban una llamada, no siendo necesario implementar un sistema de distribución de llamadas. Solución al requisito 7: Servicios comunes de telefonía Se configurarán los parámetros pertinentes para que la centralita telefónica instalada brinde estos servicios. 61

61 Solución al requisito 8: Bajo consumo eléctrico y bajo coste Para ofrecer una solución de bajo consumo y bajo coste, se utilizará un hardware específico con dichas características. Para ello se ha optado por la placa ALIX3D2/LX800 27, se trata de un sistema empotrado con las siguientes características: Figura 32: Placa ALIX 3D2 con carcasa de aluminio - Microprocesador de 500 Mhz AMD Geode LX Memoria RAM de 256 MB DDR. - Un puerto de LAN Ethernet RJ Un puerto Serie DB9 y dos puertos USB. - Unidad de almacenamiento: Una tarjeta CompactFlash de 4 GB. - Precio aproximado 90 Euros. 27 Para más información acerca de la placa ALIX3D2/LX800 se puede ver la documentación oficial de la página oficial de PCEngines: 62

62 Sistema de Administración básica de una centralita VoIP Solución al requisito 9: Administración básica y sencilla de la centralita Se propone un desarrollo de un interfaz web para la administración básica y sencilla de una centralita de teléfono VoIP Ejemplo de arquitectura hardware del nuevo sistema de telefonía En la siguiente figura se muestra lo que sería el ejemplo de los dispositivos hardware utilizados en el caso práctica presentado y que cubriría las necesidades de la empresa. Figura 33: Ejemplo de arquitectura hardware utilizada para el caso práctico presentado 63

63 2. Planificación 64

64 Sistema de Administración básica de una centralita VoIP 2.1. Planificación La planificación es una parte muy importante para la elaboración de un proyecto. Dividiremos esta en dos partes diferenciadas: la planificación temporal y la planificación de costes Planificación temporal En este apartado el objetivo principal es realizar una estimación de cómo va a transcurrir el proyecto, mirando al futuro y considerando cierto grado de inexactitud en los plazos. Se definirá un conjunto de tareas, con una duración estimada y una secuencia más o menos estricta. Sin embargo, a pesar de ser algo estimado, es fundamental planificar para poder abordar un proyecto aunque se realicen correcciones sobre la planificación inicial. La planificación temporal se realizará previa a la realización del proyecto y posteriormente se compararán los tiempos estimados con los reales en cada una de las tareas que compondrán el proyecto y el tiempo total de dedicación. Una vez finalizado, se calculará el error relativo del tiempo real de desempeño y el estimado inicialmente en cada una de las tareas y del proyecto en su conjunto. Error relativo= Valor Real Valor Estimado Valor Real En principio, las tareas que se prevén y sus estimaciones de tiempo son las siguientes: Tarea Tiempo previsto Tiempo dedicado Error relativo Documentación 18 horas 17 horas -0,06% Introducción 25 horas 30 horas 0,17% Planificación 4 horas 7 horas 0,43% Elicitación de requisitos 40 horas 60 horas 0,33% Análisis de requisitos 30 horas 17 horas -0,76% Diseño del sistema 30 horas 12 horas -1,50% Implementación del sistema 160 horas 214 horas 0,25% Pruebas 10 horas 4 horas -1,50% Preparación de la presentación 10 horas 4 horas -1,50% Maquetado 15 horas 6 horas -1,50% TOTAL 342 horas 371 horas -5,64% 65

65 Planificación de costes, modelo COCOMO El Modelo Constructivo de Costes (o COCOMO, por su acrónimo del inglés Constructive Cost Model), es un modelo de estimación de costes de software que incluye tres submodelos, donde cada uno ofrece un nivel de detalle y aproximación cada vez mayor, a medida que avanza el proceso de desarrollo del software: básico, intermedio y detallado. Fue desarrollado por Barry W. Boehm a finales de los 70 y comienzos de los 80, exponiéndolo detalladamente en su libro "Software Engineering Economics" (Prentice-Hall, 1981). Pertenece a la categoría de modelos de subestimaciones basados en estimaciones matemáticas. Está orientado a la magnitud del producto final, midiendo el tamaño del proyecto en líneas de código principalmente. Debido a esto presenta algunos inconvenientes: puede presentar algunas deficiencias: Los resultados no son proporcionales a las tareas de gestión ya que no tiene en cuenta los recursos necesarios para realizar las tareas. Se puede desviar de la realidad si indica mal el porcentaje de comentarios en las líneas de código. Es un tanto subjetivo, puesto que está basado en estimaciones y parámetros que pueden ser "vistos" de distinta manera por distintos analistas que usen el método. Se miden los costes del producto, de acuerdo a su tamaño y otras características, pero no la productividad. La medición por líneas de código no es válida en la orientación a objetos. Utilizar esta herramienta puede resultar un poco complicada, en comparación con otros métodos (que también sólo estiman). Si tenemos en cuenta esto, el resultado que obtendremos finalmente será una estimación aproximada del coste real del proyecto. La función básica que utilizan los tres modelos (básico, intermedio y detallado) es: E = a (Kl) b * m (X) donde: a y b son constantes con valores definidos en cada submodelo. Kl son las líneas de código en miles. E es el resultado de salarios/mes y horas-hombre. m(x) es un multiplicador que depende de 15 atributos. 66

66 Sistema de Administración básica de una centralita VoIP A la vez, cada submodelo también se divide en modos que representan el tipo de proyecto y puede ser: Modo orgánico: un pequeño grupo de programadores experimentados desarrollan software en un entorno familiar. El tamaño del software varía desde unas pocas miles de líneas(tamaño pequeño) a unas decenas de miles(tamaño medio). Modo semilibre o semiencajado: corresponde a un esquema intermedio entre el orgánico y el rígido; el grupo de desarrollo puede incluir una mezcla de personas experimentadas y no experimentadas. Modo rígido o empotrado: el proyecto tiene fuertes restricciones, que pueden estar relacionadas con la funcionalidad y/o pueden ser técnicas. El problema a resolver es único y es difícil basarse en la experiencia, puesto que puede no haberla. Constantes definidas en cada submodelo: Modo a b c d Orgánico 2,40 1,05 2,50 0,38 Semilibre 3,00 1,12 2,50 0,35 Rígido 3,60 1,20 2,50 0, Aplicación del modelo Dado que solo vamos a emplear una variable para la estimación (las líneas de código), se empleará el tipo de modelo COCOMO básico, ya que es un modelo estático de una sola variable. Además este proyecto está considerado, aplicando el modelo COCOMO, como software orgánico, pues posee alrededor de 3000 líneas de código. Se utiliza para obtener una primera aproximación rápida del esfuerzo. Con todo esto ya podemos obtener las personas medias por mes para abordar el proyecto, que viene dado por la siguiente expresión: PM = a * (Klb ) = 2,40 * (31,05) = 7 personas/mes 67

67 El tiempo de desarrollo que se necesita para el proyecto se calcula mediante: TDE = c * (PMd) = 2,50 * (70,38) = 6 meses Dividiendo el número de personas/mes por el número de meses necesarios para el desarrollo obtenemos el número de personas necesarias cada mes para cumplir el plazo obtenido en meses. CostePersonal = PM / TDE = (7 personas/mes) / 6 (meses) = 1 persona Con estos datos podemos calcular el coste mensual del proyecto suponiendo un sueldo mensual por persona de unos 1400 /mes: CosteMensual = CostePersonal * salario/mes = 1 persona * 1400 = 1400 /mes Con esto podemos calcular de forma estimada el coste TOTAL del proyecto, multiplicando el coste mensual por los meses necesarios para finalizar el proyecto: CosteTOTAL = CosteMensual * TDE = 1400 /mes * 6 meses =

68 Sistema de Administración básica de una centralita VoIP Conclusiones de la aplicación del modelo Se trata de una referencia aproximada del valor que supone el desarrollo del proyecto basado en líneas de código. Es una medida que puede tener variaciones importantes en función de si se tienen en cuenta las líneas en blanco, la complejidad de cada línea de código, la reutilización de código. En esta cifra, tampoco se ha tenido en cuenta otro aspecto importante como es el material utilizado. Es uno de los modelos más documentados en la actualidad y es muy fácil de utilizar. Es correcto con referencia a los 63 proyectos utilizados, aunque de ello no se debe desprender que deba ser válido siempre Más detalles acerca del modelo cocomo: 69

69 3. Elicitación de requisitos 70

70 Sistema de Administración básica de una centralita VoIP 3.1 Visión general del sistema En esta sección se indican los participantes, además de detallar los objetivos que se pretenden alcanzar para la finalización del proyecto Participantes en el proyecto Organización Universidad de Sevilla Dirección C/ San Fernando, Sevilla Teléfono Web: Organización Departamento de Lenguajes y Sistemas Informáticos Dirección Avda. Reina Mercedes s/n Sevilla Teléfono Fax Web: Participante Organización Universidad de Sevilla Rol Miembro del proyecto Es desarrollador Sí Es cliente No Es usuario No 71

71 Participante Pablo Neira Ayuso Organización Departamento de Lenguajes y Sistemas Informáticos Rol Tutor del proyecto Es desarrollador No Es cliente No Es usuario No Web: 72

72 Sistema de Administración básica de una centralita VoIP Objetivos del sistema OBJ-0001 Gestión de autenticación del usuario Administrador Versión 2.0 ( 06/11/2013 ) Autores Fuentes Descripción El sistema deberá tener un sistema de autenticación para el usuario Administrador, que será el usuario que administrará la centralita. Subobjetivos Ninguno Importancia vital Urgencia inmediatamente Estado pendiente de verificación Estabilidad media Ninguno OBJ-0002 Gestionar registro de extensiones Versión 2.0 ( 06/11/2013 ) Autores Fuentes Descripción El sistema deberá gestionar las extensiones(números de teléfono) de la centralita VoIP. Es decir, el sistema ofrecerá una herramienta básica para poder crear, modificar y eliminar las extensiones de la centralita VoIP, mediante una interfaz sencilla y amigable. Importancia vital Urgencia inmediatamente Estado en construcción Estabilidad alta Los tipos de extensiones que se gestionarán son de tipo IAX y SIP. 73

73 OBJ-0003 Gestionar planes de llamada (DialPlan) Versión 2.0 ( 06/11/2013 ) Autores Fuentes Descripción El sistema deberá gestionar los planes de llamadas entrantes y salientes de la centralita (PBX). Es decir, deberá decidir la ruta de cada una de las llamadas tanto entrantes como salientes siguiendo una serie de pasos que serán definidos en el Dialplan. Este objetivo engloba toda la lógica del plan de llamada, por lo que destacaremos 4 funcionalidades básicas de una centralita, identificándolas como subobjetivos del proyecto. Subobjetivos - Gestión de respuesta de voz interactiva (IVR): El sistema deberá gestionar las respuesta de voz interactiva de las llamadas entrantes. Es decir, el sistema ofrecerá una interfaz para crear, modificar y eliminar los mensajes de voz del sistema IVR o también llamado teleoperadora de las llamadas entrantes. - Gestión de los buzones de voz de las extensiones: El sistema deberá gestionar los mensajes de buzón de voz de los usuarios registrados en la centralita. - Gestión de colas de llamada: El sistema deberá gestionar colas de las llamadas entrantes. Es decir, si un usuario realiza una llamada a un grupo de usuario pertenecientes a un departamento, la llamada pasará a ser atendida por aquella persona que cumpla con un criterio determinado. Por ejemplo, si una persona realiza una llamada a un departamento técnico compuesto por 4 personas. Y el sistema que gestiona la cola de llamada está configurado para que se repartan las llamadas de forma equitativa entre los diferentes técnicos del departamento, la persona que llama será atendida por aquel operador del departamento que halla recibido menos carga de llamadas. - Gestión de la Música en espera: El sistema deberá gestionar la música en espera que se escuchará cuando una persona realice una llamada a nuestro sistema, y todos los terminales estén ocupados. Importancia vital Urgencia inmediatamente Estado en construcción Estabilidad media Ninguno 74

74 Sistema de Administración básica de una centralita VoIP OBJ-0004 Gestor de estadísticas Versión 2.0 ( 06/11/2013 ) Autores Fuentes Descripción Este objetivo dará información acerca de una serie de estadísticas de la centralita. Subobjetivos - Gestión del registro de llamadas e informes: El sistema deberá mostrar una lista con la información de las llamadas realizadas, tanto internas como externas. El sistema deberá generar informes de las llamadas realizadas a partir de un criterio especificado por el usuario. - Información y monitorización del sistema: El sistema deberá mostrar tanto el uso de recursos utilizados de la máquina como el estado del servidor de VoIP Asterisk. Este objetivo tendrá como finalidad principal, dar información al usuario Administrador de la centralita, sobre la monitorización básica del sistema. Como puede ser del uso de recursos y la cantidad de llamadas que se están realizando a tiempo real. Este objetivo irá recogiendo información cada cierto tiempo de la centralita y generará una serie de estadísticas de la misma. Como pueden ser el numero de llamadas realizadas, o el uso de recursos de la máquina. Importancia importante Urgencia hay presión Estado en construcción Estabilidad media 75

75 OBJ-0005 Acceso a la consola cliente de la centralita Versión 2.0 ( 06/11/2013 ) Autores Fuentes Descripción El sistema deberá acceder a la consola cliente del sistema Asterisk para abarcar así todas las configuraciones avanzadas posibles de la centralita. Importancia quedaría bien Urgencia puede esperar Estado en construcción Estabilidad media Es evidente que este objetivo no cumple con el requisito del uso minimalista de la administración de una centralita. Pero resulta muy útil el acceso a la misma, ya que posibilita la administración a usuarios mas avanzados desde la aplicación, además de ser útil desde un punto de vista docente, ya que permite al usuario ir familizarse con la consola de Asterisk a través del panel web. Este objetivo tendrá un requisito de información para guardar el historial de comandos ejecutados. Y poder así, tener constancia de la ejecución de los mismos por parte del usuario inexperto. 76

76 Sistema de Administración básica de una centralita VoIP Descripción de los objetivos prioritarios del sistema Como se ha podido observar en la descripción de los objetivos en el apartado anterior. Se han detallado la prioridad de cada uno de ellos. Existen 3 objetivos que son de vital importancia a la hora de desarrollar el software de administración de la centralita. Estos son: [OBJ-0001] Autenticación del usuario Administrador [OBJ-0002] Gestionar registro de extensiones [OBJ-0003] Gestionar planes de llamada (DialPlan) Con estos tres objetivos ya podríamos administrar la centralita de una forma muy básica, ya que englobaríamos la gestión de las extensiones de la centralita y la gestión de planes de llamadas con algunas funcionalidades básicas, que incluyen las caras centralitas comerciales, y que de alguna forma hacen que una centralita implementada con código abierto tenga ese importante valor añadido. Como podrían ser el sistema de respuesta de voz interactiva (IVR), también llamado teleoperadora, o la gestión de colas de llamadas entrantes. Los siguientes serían ya objetivos no prioritarios de cara al proyecto, pero no por eso menos importantes: [OBJ-0004] Gestión de estadísticas [OBJ-0005] Acceso a la consola cliente de Asterisk 77

77 3.2 Catálogo de requisitos del sistema Se detallarán los requisitos de información, con el objetivo de detallar la información que será necesaria almacenar así como las reglas de negocio que deberá cumplir dicha información. Por otro lado, se definirán los requisitos funcionales, donde se definirán los casos de uso, asociados a los actores del sistema Requisitos de información En las siguientes tablas se define la información que deberá almacenar el sistema para gestionar correctamente la aplicación software. Esta servirá para administrar el sistema básico de la centralita telefónica implementada con el software de Asterisk. IRQ-0001 Credenciales del usuario Administrador Versión 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [OBJ-0001] Autenticación del usuario Administrador Descripción Datos específicos El sistema deberá almacenar la información correspondiente a las credenciales de acceso para que el usuario administrador se pueda loguear en el sistema. En concreto: Nombre de usuario Contraseña Importancia vital Urgencia inmediatamente Estado pendiente de verificación Estabilidad media El nombre de usuario por defecto dado de alta en la plataforma será el de "Admin" o "Administrador". La plataforma también podrá tener varios usuarios dados de alta, pero todos tendrán el mismo perfil de administrador. 78

78 Sistema de Administración básica de una centralita VoIP IRQ-0002 Información sobre extensiones SIP Versión 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [OBJ-0002] Gestionar registro de extensiones Descripción Datos específicos El sistema deberá almacenar la información básica correspondiente a el registro de extensiones SIP de la centralita. En concreto: El nombre y los apellidos de la Persona que tendrá asociada dicha extensión El número de la extensión El usuario asociada a la extensión para la autenticación en el sistema. La contraseña asociada a la extensión para la la autenticación El contexto del plan de llamada que usará la extensión. El callerid, o identificador de llamada asociado al cliente SIP Importancia vital Urgencia inmediatamente Estado en construcción Estabilidad media En el registro de la extensión SIP se especifica si dicha extensión usa o no buzón de voz 79

79 IRQ-0003 Información sobre extensiones IAX Versión 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [OBJ-0002] Gestionar registro de extensiones Descripción Datos específicos El sistema deberá almacenar la información correspondiente a el registro de extensiones IAX de la centralita. En concreto: El nombre y los apellidos de la Persona que tendrá asociada dicha extensión El número de la extensión El usuario asociada a la extensión para la autenticación en el sistema. La contraseña asociada a la extensión para la la autenticación El contexto del plan de llamada que usará la extensión. El callerid, o identificador de llamada asociado al cliente IAX Importancia vital Urgencia inmediatamente Estado en construcción Estabilidad media En el registro de la extensión SIP se especifica si dicha extensión usa o no buzón de voz 80

80 Sistema de Administración básica de una centralita VoIP IRQ-0004 Información sobre la línea del Dialplan Versión 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción Datos específicos El sistema deberá almacenar la información correspondiente a la línea del Plan de llamada (Dialplan) de la centralita. En concreto: El contexto asociada a la línea del plan de llamadas La extensión asociada a la línea del plan de llamadas La prioridad asociada a la línea del plan de llamadas La aplicación, indica la aplicación que se ejecutará en dicha línea. Los parámetros o datos que se le pasan a dicha aplicación. Importancia vital Urgencia inmediatamente Estado en construcción Estabilidad media El Plan de llamada o Dialplan, es el corazón de una centralita de teléfono o PBX, ya que en el se define que hacer con cada una de las llamadas. Para ello la centralita definirá una serie de pasos (o líneas) que se irán ejecutando. Por consiguiente se recogerá la información referente a una línea (o a un paso) del plan de llamada. Del mismo modo, en el dialplan también se definen los pasos a seguir correspondientes a el sistema IVR (Interactive Voice Response), Buzón de Voz, Gestión de Colas de llamada y Música en espera. Es decir, que este requisito de información es necesario para satisfacer los objetivos que hacen referencia a dichas funcionalidades. 81

81 IRQ-0005 Información sobre el registro de llamadas Versión 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias Descripción Datos específicos [OBJ-0004] Gestión de estadísticas El sistema deberá almacenar la información correspondiente a el registro de todas las llamadas tanto entrantes como salientes. En concreto: Fecha y hora de la llamada Identificador de la llamada Emisor de la llamada Receptor de la llamada Contexto del dialplan utilizado Duración de la llamada Estado de finalización de la llamada Importancia importante Urgencia hay presión Estado en construcción Estabilidad media Se recogerán los datos especificados para poder generar informes de llamadas según un criterio de búsqueda 82

82 Sistema de Administración básica de una centralita VoIP IRQ-0006 Información sobre el buzón de voz Versión 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción Datos específicos El sistema deberá almacenar la información correspondiente de cada uno de los buzones de voz dados de alta en la centralita. En concreto: La extensión asociada al buzón de voz Importancia quedaría bien Urgencia puede esperar Estado en construcción Estabilidad media Ninguno 83

83 IRQ-0007 Información sobre las colas de llamadas Versión 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción Datos específicos El sistema deberá almacenar la información correspondiente a cada uno de los sistemas de colas de llamadas configurados en la centralita. En concreto: El nombre de la cola de llamada La lista de las extensiones que pertenecen a dicha cola de llamada Las prioridades de cada una de las extensiones de la cola de llamadas El nombre del fichero de audio que sonará si todos los agentes de la cola están ocupados. Prioridades de cada una de las extensiones de la cola de llamadas Importancia quedaría bien Urgencia puede esperar Estado en construcción Estabilidad media Ninguno 84

84 Sistema de Administración básica de una centralita VoIP IRQ-0008 Información sobre la música en espera Versión 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción El sistema deberá almacenar la información correspondiente a los sistemas de música en espera. En concreto: Datos específicos El nombre del fichero de audio que sonará como audio de música en espera Importancia quedaría bien Urgencia puede esperar Estado en construcción Estabilidad media Ninguno IRQ-0009 Información sobre la monitorización del sistema Versión 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias Descripción Datos específicos [OBJ-0004] Gestión de estadísticas El sistema deberá almacenar la información correspondiente a se guardará la información relevante sobre el uso del sistema y los recursos utilizados, para un posible análisis a posteriori del rendimiento de la centralita. En concreto: El porcentaje de uso de la cpu cada cierto tiempo La cantidad de llamadas diarias y mensuales Importancia quedaría bien Urgencia puede esperar Estado validado Estabilidad media Ninguno 85

85 IRQ-0010 Información sobre el IVR Versión 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción Datos específicos El sistema deberá almacenar la información correspondiente al sistema de respuesta de voz interactiva, o también llamado operadora automática. En concreto: La extensión asignada a la operadora. El menú de opciones de la operadora, es decir, una lista con la información referente a una linea del plan de llamadas, y el número del menú asociado. Un intervalo horario que especifique la hora en que la operadora informará de las opciones, si por ejemplo un usuario realiza una llamada a la centralita en horario de laboral o no. El fichero de audio del menú de opciones. El fichero de audio fuera del horario laboral, que la centralita reproducirá cuando el usuario realice una llamada fuera del horario de trabajo. El fichero de audio en vacaciones, que la centralita reproducirá cuando el usuario realice la llamada cuando la empresa este cerrada por vacaciones. Importancia importante Urgencia puede esperar Estado en construcción Estabilidad media Ninguno 86

86 Sistema de Administración básica de una centralita VoIP IRQ-0011 Información sobre el historial de la consola Versión 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [OBJ-0005] Acceso a la consola cliente de Asterisk Descripción Datos específicos El sistema deberá almacenar la información correspondiente al historial de los comandos que se ejecutarán en la consola. En concreto: El comando ejecutado en la consola. Importancia quedaría bien Urgencia puede esperar Estado en construcción Estabilidad media Ninguno 87

87 3.2.2 Requisitos funcionales En este apartado se dividirá el sistema en varios subsistemas, teniendo en cuenta las funcionalidades de cada uno, definiendo en cada uno los diferentes casos de uso Diagramas de casos de uso Figura 34: Diagrama de subsistemas 88

88 Sistema de Administración básica de una centralita VoIP Figura 35: Diagrama de casos de uso del subsistema de acceso a la consola de Asterisk Figura 36: Diagrama de casos de uso del subsistema de gestión de buzones de voz 89

89 Figura 37: Diagrama de casos de uso del subsistema de gestión de colas de llamadas Figura 38: Diagrama de casos de uso del subsistema de gestión de extensiones IAX 90

90 Sistema de Administración básica de una centralita VoIP Figura 39: Diagrama de casos de uso del subsistema de gestión de extensiones SIP 91

91 Figura 40: Diagrama de casos de uso del subsistema gestión de planes de llamadas 92

92 Sistema de Administración básica de una centralita VoIP Figura 41: Diagrama de casos de uso del subsistema gestión del registro de llamadas Figura 42: Diagrama de casos de uso del subsistema gestión de la música en espera 93

93 Figura 43: Diagrama de casos de uso del subsistema de gestión del IVR Figura 44: Diagrama de casos de uso del subsistema de monitorización de la centralita 94

94 Sistema de Administración básica de una centralita VoIP Definición de actores ACT-0001 Administrador Versión 2.0 ( 06/11/2013 ) Autores Fuentes Descripción Este actor representa el usuario administrador de la centralita de teléfono Ninguno Casos de uso del sistema UC-0001 Identificación del Administrador (login) Versión 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0001] Credenciales del usuario Administrador [OBJ-0001] Autenticación del usuario Administrador Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el administrador desee acceder a la aplicación Precondición El usuario Administrador tiene que estar registrado en el sistema Secuencia normal Paso 1 El actor Administrador (ACT-0001) solicita al sistema acceder a la aplicación 2 El sistema solicita las credenciales al administrador 3 El actor Administrador (ACT-0001) introduce sus credenciales 4 Excepciones Acción Paso 4 El sistema valida las credenciales del administrador y lo redirige al panel de administración de la centralita Acción Si las crendenciales del administrador no son correctas, el sistema informará del error, a continuación este caso de uso queda sin efecto Importancia vital Urgencia inmediatamente Estado pendiente de validación Estabilidad media Ninguno 95

95 UC-0002 Cerrar sesión del usuario Administrador (logout) Versión 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0001] Credenciales del usuario Administrador [OBJ-0001] Autenticación del usuario Administrador Descripción Secuencia normal El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario administrador desee salir del sistema Paso Acción 1 El actor Administrador (ACT-0001) solicita al sistema salir y con ello cerrar su sesión de usuario 2 El sistema cierra la sesión y el usuario Administrador es redireccionado a la página de validación Importancia vital Urgencia inmediatamente Estado pendiente de validación Estabilidad media Ninguno 96

96 Sistema de Administración básica de una centralita VoIP Subsistema de registro de llamadas UC-0003 Versión Consulta de registros de llamada 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias Descripción [OBJ-0004] Gestión de estadísticas El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando se realice una consulta sobre los registros de las llamadas, para ello se utilizarán diversos criterios Precondición El usuario Administrador deberá esta previamente validado en el sistema Secuencia normal Paso Excepciones Acción 1 El actor Administrador (ACT-0001) seleccionará uno de los criterios disponibles para mostrar información acerca de las llamadas registradas en el sistema y mandará la orden al sistema para que este muestre los registros de las llamadas que cumplan el criterio de búsqueda 2 El sistema realizará una búsqueda en la base de datos según el criterio dado y mostrará los registros de las llamadas que cumplan el criterio de búsqueda Paso 2 Acción Si el criterio de búsqueda no se especifica, por defecto se mostrarán el registros de todas las llamadas del día, el sistema realizará la consulta, a continuación este caso de uso continúa Urgencia hay presión Estado pendiente de validación Estabilidad media Ninguno 97

97 Subsistema de gestión de extensiones SIP UC-0004 Versión Consulta de extensiones SIP dadas de alta en la centralita 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0002] Información sobre extensiones SIP [OBJ-0002] Gestionar registro de extensiones Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando se realice una consulta sobre las extensiones SIP dadas de alta en la centralita o durante la realización de los siguientes casos de uso: [UC-0005] Crear nueva extension SIP, [UC-0006] Modificación de extension SIP, [UC-0007] Eliminar extension SIP Precondición El usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 El actor Administrador (ACT-0001) mandará la orden al sistema para acceder a la parte de gestión de las extensiones SIP 2 El sistema realizará una consulta de las extensiones SIP en la base de datos y mostrará una lista de todas las extensiones SIP dadas de alta en la centralita Importancia vital Urgencia inmediatamente Estado en construcción Estabilidad media Ninguno 98

98 Sistema de Administración básica de una centralita VoIP UC-0005 Versión Crear nueva extensión SIP 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0002] Información sobre extensiones SIP [OBJ-0002] Gestionar registro de extensiones Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador solicite dar de alta una nueva extensión SIP en el sistema Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 Se realiza el caso de uso Consulta de extensiones SIP dadas de alta en la centralita (UC-0004) 2 El actor Administrador (ACT-0001) seleccionará la opción "Crear extensión SIP" 3 El sistema mostrará las opciones para la creación de una nueva extensión SIP 4 El actor Administrador (ACT-0001) una vez introducido y/o seleccionada las diferentes opciones enviará al sistema la señal de actualizar los ficheros de configuración (Guardar cambios) 5 El sistema guardará en la base de datos la información referente a la nueva extensión SIP creada 6 Se realiza el caso de uso Consulta de extensiones SIP dadas de alta en la centralita (UC-0004) Importancia vital Urgencia inmediatamente Estado en construcción Estabilidad media Ninguno 99

99 UC-0006 Versión Modificación de extensión SIP 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0002] Información sobre extensiones SIP [OBJ-0002] Gestionar registro de extensiones Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador solicite modificar alguna de las extensiones SIP dadas de alta en la centralita Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 Se realiza el caso de uso Consulta de extensiones SIP dadas de alta en la centralita (UC-0004) 2 El actor Administrador (ACT-0001) seleccionará de la lista la extensión SIP a modificar, y pulsará la opción "Modificar extensión" El sistema mostrará las opciones de modificación de dicha extensión El actor Administrador (ACT-0001) una vez introducido y/o seleccionada las diferentes opciones enviará al sistema la señal de actualizar los ficheros de configuración (Guardar cambios) El sistema guardará en la base de datos la información a modificar Se realiza el caso de uso Consulta de extensiones SIP dadas de alta en la centralita (UC-0004) Importancia vital Urgencia inmediatamente Estado en construcción Estabilidad media Ninguno 100

100 Sistema de Administración básica de una centralita VoIP UC-0007 Versión Eliminar extensión SIP 1.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0003] Información sobre extensiones IAX [OBJ-0002] Gestionar registro de extensiones Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador solicite eliminar alguna de las extensiones SIP dadas de alta en la centralita Precondición El usuario administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 Se realiza el caso de uso Consulta de extensiones SIP dadas de alta en la centralita (UC-0004) 2 El actor Administrador (ACT-0001) seleccionará de la lista la extensión SIP a eliminar y pulsará la opción "Eliminar extensión SIP" 3 El sistema mostrará un mensaje para confirmar supresión de la extensión SIP 4 El actor Administrador (ACT-0001) Elegirá de una de las dos opciones mostradas por el sistema para confirmar la supresión de la extensión 5 Si el usuario Administrador selecciona "NO" para confirmar la supresión de la extensión SIP,, se realiza el caso de uso Consulta de extensiones SIP dadas de alta en la centralita (UC-0004) 6 Si el usuario Administrador selecciona "SI" para confirmar la supresión de la extensión SIP, el sistema eliminará de la base de datos la información referente a la extensión SIP 7 Se realiza el caso de uso Consulta de extensiones SIP dadas de alta en la centralita (UC-0004) Importancia importante Urgencia hay presión Estado en construcción Estabilidad media Ninguno 101

101 Subsistema de gestión de extensiones IAX UC-0008 Versión Consulta de extensiones IAX dadas de alta en la centralita 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0003] Información sobre extensiones IAX [OBJ-0002] Gestionar registro de extensiones Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando se realice una consulta sobre las extensiones IAX dadas de alta en la centralita o durante la realización de los siguientes casos de uso: [UC-0009] Crear nueva extension IAX, [UC-0010] Modificación de extension IAX, [UC0011] Eliminar extensión IAX Precondición El usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 El actor Administrador (ACT-0001) mandará la orden al sistema para que le muestre la información de todas las extensiones IAX dadas de alta en la centralita 2 El sistema realizará una consulta de las extensiones IAX en la base de datos y mostrará una lista de todas las extensiones IAX dadas de alta en la centralita Importancia vital Urgencia inmediatamente Estado en construcción Estabilidad media Ninguno 102

102 Sistema de Administración básica de una centralita VoIP UC-0009 Versión Crear nueva extensión IAX 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0003] Información sobre extensiones IAX [OBJ-0002] Gestionar registro de extensiones Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador solicite dar de alta una nueva extensión IAX en el sistema Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 Se realiza el caso de uso Consulta de extensiones IAX dadas de alta en la centralita (UC-0008) 2 El actor Administrador (ACT-0001) seleccionará la opción "Crear extensión IAX" 3 El sistema mostrará las opciones para la creación de una nueva extensión IAX 4 El actor Administrador (ACT-0001) una vez introducido y/o seleccionada las diferentes opciones enviará al sistema la señal de actualizar los ficheros de configuración (Guardar cambios) 5 El sistema guardará en la base de datos la información referente a la nueva extensión IAX creada 6 Se realiza el caso de uso Consulta de extensiones IAX dadas de alta en la centralita (UC-0008) Importancia vital Urgencia inmediatamente Estado en construcción Estabilidad media Ninguno 103

103 UC-0010 Versión Modificación de extensión IAX 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0003] Información sobre extensiones IAX [OBJ-0002] Gestionar registro de extensiones Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador solicite modificar alguna de las extensiones IAX dadas de alta en la centralita Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 Se realiza el caso de uso Consulta de extensiones IAX dadas de alta en la centralita (UC-0008) 2 El actor Administrador (ACT-0001) seleccionará de la lista la extensión IAX a modificar y pulsará la opción "Modificar extensión" 3 El sistema mostrará las opciones de modificación de dicha extensión 4 El actor Administrador (ACT-0001) una vez introducido y/o seleccionada las diferentes opciones enviará al sistema la señal de actualizar la configuración (Guardar cambios) 5 El sistema guardará en la base de datos la información a modificar referente a la extensión IAX Importancia vital Urgencia inmediatamente Estado en construcción Estabilidad media Ninguno 104

104 Sistema de Administración básica de una centralita VoIP UC-0011 Versión Eliminar extensión IAX 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0003] Información sobre extensiones IAX [OBJ-0002] Gestionar registro de extensiones Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador solicite eliminar alguna de las extensiones IAX dadas de alta en la centralita Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 Se realiza el caso de uso Consulta de extensiones IAX dadas de alta en la centralita (UC-0008) 2 El actor Administrador (ACT-0001) seleccionará de la lista la extensión IAX a eliminar 3 El sistema mostrará un mensaje para la confirmación de la supresión de dicha extensión IAX pulsará la opción "Eliminar extensión IAX" 4 El actor Administrador (ACT-0001) elegirá una de las dos opciones mostradas por el sistema para la supresión de la extensión IAX 5 Si el usuario Administrador selecciona "NO", se realiza el caso de uso Consulta de extensiones IAX dadas de alta en la centralita (UC-0008) 6 Si el usuario Administrador selecciona "SI" para la supresión de la extensión IAX, el sistema eliminará de la base de datos la información referente a dicha extansión IAX 7 Se realiza el caso de uso Consulta de extensiones IAX dadas de alta en la centralita (UC-0008) Importancia importante Urgencia hay presión Estado en construcción Estabilidad media Ninguno 105

105 Subsistema de acceso a consola cliente de Asterisk UC-0012 Versión Acceso a la consola cliente de Asterisk 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias Descripción [OBJ-0005] Acceso a la consola cliente de Asterisk El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador solicite acceso a la consola cliente de Asterisk Precondición El usuario Administrador debe estar validado en el sistema Secuencia normal Paso Acción 1 El actor Administrador (ACT-0001) solicita acceso a la consola cliente de la centralita Asterisk 2 El sistema recogerá la información de la salida por pantalla de la consola cliente de Asterisk y mostrará la información recogida en la aplicación junto con el formulario de envío de ordenes Importancia quedaría bien Urgencia puede esperar Estado en construcción Estabilidad media Ninguno 106

106 Sistema de Administración básica de una centralita VoIP UC-0013 Versión Envío de ordenes a la consola cliente de Asterisk 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias Descripción [OBJ-0005] Acceso a la consola cliente de Asterisk El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador quiera ejecutar una orden en la consola de comandos del sistema Asterisk Precondición El usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 El actor Administrador (ACT-0001) escribirá una orden en el formulario del ordenes mostrado y enviará la orden al sistema 2 El sistema recogerá dicha orden y la ejecutará en el consola cliente de Asterisk mostrando la información, junto con el formulario de envío de ordenes Importancia quedaría bien Urgencia puede esperar Estado en construcción Estabilidad media Ninguno 107

107 Subsistema de gestión de planes de llamadas UC-0014 Versión Consulta lista de contextos del plan de llamada (Dialplan) 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0004] Información sobre la línea del Dialplan [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Admisnitrador decida acceder al sistema que gestiona los contextos de la centralita o durante la realización de los siguientes casos de uso: [UC-0015] Crear nuevo Contexto en el plan de llamada (Dialplan), [UC-0016] Modificar un contexto, [UC-0017] Eliminar un contexto Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 El actor Administrador (ACT-0001) mandará la orden al sistema para que le muestre la lista con todos los contextos (o planes de llamada) configurados en la centralita 2 El sistema mostrará una lista con los contextos configurados así como algún detalle del mismo Importancia vital Urgencia inmediatamente Estado en construcción Estabilidad media Ninguno 108

108 Sistema de Administración básica de una centralita VoIP UC-0015 Versión Crear nuevo Contexto en el plan de llamada (Dialplan) 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0004] Información sobre la línea del Dialplan [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando se defina un nuevo contexto en la centralita Precondición El usuario administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 Se realiza el caso de uso Consulta lista de contextos del plan de llamada (Dialplan) (UC-0014) 2 El actor Administrador (ACT-0001) mandará la orden al sistema de que quiere crear un nuevo contexto, pulsando en "Crear contexto" 3 El sistema mostrará las diversas opciones para crear un contexto 4 El actor Administrador (ACT-0001) Mandará la señal de actualizar al sistema para actualizar los ficheros de configuración con los datos del nuevo contexto (Guardar cambios 5 El sistema guarda en la base de datos la información referente al nuevo contexto 6 Se realiza el caso de uso Consulta lista de contextos del plan de llamada (Dialplan) (UC-0014) Importancia vital Urgencia inmediatamente Estado en construcción Estabilidad media Ninguno 109

109 UC-0016 Versión Modificar un contexto 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0004] Información sobre la línea del Dialplan [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador quiera modificar el nombre de dicho contexto o alguna de sus líneas que lo componen Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 Se realiza el caso de uso Consulta lista de contextos del plan de llamada (Dialplan) (UC-0014) 2 El actor Administrador (ACT-0001) seleccionará uno de los contextos de la lista a modificar y pulsará sobre la opción "Modificar contexto" 3 Se realiza el caso de uso Lista de lineas de un contexto (UC-0018) Importancia importante Urgencia hay presión Estado en construcción Estabilidad media Ninguno 110

110 Sistema de Administración básica de una centralita VoIP UC-0017 Versión Eliminar un contexto 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0004] Información sobre la línea del Dialplan [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador quiera suprimir alguno de los contextos definidos en el sistema Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 Se realiza el caso de uso Consulta lista de contextos del plan de llamada (Dialplan) (UC-0014) 2 El actor Administrador (ACT-0001) Seleccionara de la lista de contextos el contexto que quiera eliminar y pulsará sobre la opción "Eliminar contexto" 3 El sistema Mostrará un mensaje para validar la supresión de dicho contexto 4 El actor Administrador (ACT-0001) seleccionará una de las dos opciones mostradas por el sistema para la verificación de la supresión de dicho contexto 5 Si el usuario Administrador elige la opción "NO", se realiza el caso de uso Consulta lista de contextos del plan de llamada (Dialplan) (UC0014) 6 Si el usuario Administrador elige la opción "SI", el sistema el sistema eliminará de la base de datos todas aquellas líneas que hagan referencia a dicho contexto seleccionado. 7 Se realiza el caso de uso Consulta lista de contextos del plan de llamada (Dialplan) (UC-0014) Importancia importante Urgencia hay presión Estado en construcción Estabilidad media Ninguno 111

111 UC-0018 Versión Lista de lineas de un contexto 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0004] Información sobre la línea del Dialplan [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador seleccione del Plan de llamada (Dialplan) uno de los contextos o durante la realización de los siguientes casos de uso: [UC0019] Crear nueva línea de un contexto, [UC-0020] Modificar línea de un contexto, [UC-0021] Eliminar línea de un contexto Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Importancia vital Urgencia inmediatamente Estado en construcción Estabilidad media Ninguno 1 Acción El sistema mostrará una lista con las líneas del contexto, con algún detalle y con las opciones de modificar o borrar cada línea. Así mismo también mostrará la opción de crear una nueva línea para dicho contexto. 112

112 Sistema de Administración básica de una centralita VoIP UC-0019 Versión Crear nueva línea de un contexto 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0004] Información sobre la línea del Dialplan [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador quiera agregar una nueva línea a un contexto previamente seleccionado Precondición El usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 Se realiza el caso de uso Lista de lineas de un contexto (UC-0018) 2 El actor Administrador (ACT-0001) pulsará sobre la opción "Añadir nueva línea al contexto". Después de seleccionar e introducir los datos sobre la nueva línea del contexto pulsara sobre la opción "Guardar cambios sobre la nueva línea" 3 El sistema guardará los datos referentes a la nueva líenea en la base de datos 4 Se realiza el caso de uso Lista de lineas de un contexto (UC-0018) Importancia vital Urgencia inmediatamente Estado en construcción Estabilidad media Ninguno 113

113 UC-0020 Versión Modificar línea de un contexto 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0004] Información sobre la línea del Dialplan [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando se realice una modificación de una línea de un contexto Precondición El usuario administrador deberá estar validado en el sistema Secuencia normal Paso 1 Acción Se realiza el caso de uso Lista de lineas de un contexto (UC-0018) 2 El actor Administrador (ACT-0001) selecciona la línea del contexto que quiere modificar y pulsará la opción "Modificar línea" 3 El sistema mostrará las opciones y funciones básicas de una línea del contexto 4 El actor Administrador (ACT-0001) guardará los cambios realizados pulsando sobre "Guardar Cambios de la linea del contexto" 5 El sistema guardará los cambios referentes a la modificación de la línea del contexto en la base de datos 6 Se realiza el caso de uso Lista de lineas de un contexto (UC-0018) Importancia vital Urgencia inmediatamente Estado en construcción Estabilidad media Ninguno 114

114 Sistema de Administración básica de una centralita VoIP UC-0021 Versión Eliminar línea de un contexto 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0004] Información sobre la línea del Dialplan [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando cuando el usuario Administrador quiere eliminar una línea de un contexto previamente seleccionado Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso 1 Acción Se realiza el caso de uso Lista de lineas de un contexto (UC-0018) 2 El actor Administrador (ACT-0001) seleccionará de la lista de lineas del contexto seleccionado, la línea a eliminar y pulsará sobre la opción "Eliminar línea" 3 El sistema mostrará un mensaje para verificar la supresión de dicha línea 4 El actor Administrador (ACT-0001) elegirá una de las dos opciones mostradas para la verificación de la supresión de la línea 5 Si el usuario Administrador selecciona "NO", se realiza el caso de uso Lista de lineas de un contexto (UC-0018) 6 Si el usuario Administrador selecciona "SI", el sistema eliminará de la base datos la información referente a dicha línea del contexto 7 Se realiza el caso de uso Lista de lineas de un contexto (UC-0018) Importancia vital Urgencia inmediatamente Estado en construcción Estabilidad media Ninguno 115

115 Subsistema de gestión de buzones de voz UC-0022 Versión Consulta de buzones de voz 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias Descripción [OBJ-0003] Gestionar planes de llamada (DialPlan) El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador decida acceder al sistema que gestiona los buzones de voz asociados a las extensiones o durante la realización de los siguientes casos de uso: [UC-0023] Crear nuevo buzón de voz, [UC-0024] Modificar buzón de voz, [UC-0025] Eliminar buzón de voz Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 El actor Administrador (ACT-0001) solicitará el acceso a la gestión de los buzones de voz del sistema 2 El sistema mostrará una lista con todos los buzones de voz dados de alta en el sistema Importancia importante Urgencia hay presión Estado en construcción Estabilidad media Ninguno 116

116 Sistema de Administración básica de una centralita VoIP UC-0023 Versión Crear nuevo buzón de voz 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias Descripción [OBJ-0003] Gestionar planes de llamada (DialPlan) El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario administrador quiera dar de alta un nuevo buzón de voz en la centralita Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción Se realiza el caso de uso Consulta de buzones de voz (UC-0022) El actor Administrador (ACT-0001) seleccionará la opción "Crear nuevo buzón" El sistema mostrá las diferentes opciones para crear el buzón de voz El actor Administrador (ACT-0001) introducirá y seleccionará las opciones para la creación del buzón y mandará la señal al sistema de actualizar los datos de configuración de la base de datos (Guardar cambios) 5 El sistema guardara en la base de datos la información a modificar 6 Se realiza el caso de uso Consulta de buzones de voz (UC-0022) Importancia quedaría bien Urgencia puede esperar Estado en construcción Estabilidad media Ninguno 117

117 UC-0024 Versión Modificar buzón de voz 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias Descripción [OBJ-0003] Gestionar planes de llamada (DialPlan) El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario administrador quiera hacer alguna modificación de los buzones de voz de las extensiones de la centralita Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso 1 Acción Se realiza el caso de uso Consulta de buzones de voz (UC-0022) 2 El actor Administrador (ACT-0001) seleccionará una de los buzones de voz a modificar de la lista mostrada por el sistema 3 El sistema mostrará al usuario administrador las diferentes opciones de modificación 4 El actor Administrador (ACT-0001) introducirá y seleccionará las opciones de modificación mandará al sistema la señal de modificación de los datos de la base de datos (Guardar cambios) 5 El sistema guardará en la base de datos la información a modificar 6 Se realiza el caso de uso Consulta de buzones de voz (UC-0022) Importancia importante Urgencia hay presión Estado en construcción Estabilidad media Ninguno 118

118 Sistema de Administración básica de una centralita VoIP UC-0025 Versión Eliminar buzón de voz 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias Descripción [OBJ-0003] Gestionar planes de llamada (DialPlan) [IRQ-0006] Información sobre el buzón de voz El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando cuando el usuario administrador quiera suprimir un buzón de voz Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso 1 Acción Se realiza el caso de uso Consulta de buzones de voz (UC-0022) 2 El actor Administrador (ACT-0001) seleccionara de la lista de buzones de voz el que quiera eliminar y pulsará sobre la opción "Eliminar buzón de voz" 3 El sistema mostrará un mensaje para la verificación de la supresión del buzón de voz 4 El actor Administrador (ACT-0001) elegirá una de las dos opciones para la verificación de la eliminación del buzón de voz 5 Si el usuario Administrador selecciona la opción "NO", se realiza el caso de uso Consulta de buzones de voz (UC-0022) 6 Si el usuario Administrador selecciona la opción "SI", el sistema eliminará toda la información referente al buzón de voz seleccionado 7 Se realiza el caso de uso Consulta de buzones de voz (UC-0022) Importancia quedaría bien Urgencia puede esperar Estado en construcción Estabilidad media Ninguno 119

119 Subsistema de gestión del IVR UC-0026 Versión Consulta de IVR (Respuesta de voz interactiva) 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias Descripción [OBJ-0003] Gestionar planes de llamada (DialPlan) El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando se muestra una lista de los IVR definidos en el sistema o durante la realización de los siguientes casos de uso: [UC-0027] Crear un nuevo IVR (Respuesta de voz interactiva), [UC-0028] Modificar IVR (Respuesta de voz interactiva), [UC-0029] Eliminar IVR (Respuesta de voz interactiva) Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 El actor Administrador (ACT-0001) seleccionará en el menú principal la opción de "Respuesta de voz interactiva (IVR)" 2 El sistema El sistema mostrará un lista con las extensiones que tienen asociado un IVR Importancia quedaría bien Urgencia puede esperar Estado en construcción Estabilidad media Ninguno 120

120 Sistema de Administración básica de una centralita VoIP UC-0027 Versión Crear un nuevo IVR (Respuesta de voz interactiva) 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando cuando el usuario Administrador quiera crear un nuevo sistema de respuesta de voz interactiva Precondición el usuario Administrador deberá estar validado en el sistema, además tendremos que tener al menos un contexto creado previamente para poder asociarlo al nuevo sistema de respuesta de voz interactiva (IVR) Secuencia normal Paso Acción 1 Se realiza el caso de uso Consulta de IVR (Respuesta de voz interactiva) (UC-0026) 2 El actor Administrador (ACT-0001) seleccionará la opción de "Crear un nuevo IVR" 3 El sistema mostrará las diferentes opciones para crear el sistema de respuesta de voz interactiva, entre ellas el contexto asociado. 4 El actor Administrador (ACT-0001) seleccionará y/o introducirá las diferentes opciones de la configuración y enviará la señal al sistema para que guarde la nueva configuración de Asterisk en la base de datos. 5 El sistema guardará la nueva información referente al nuevo sistema de IVR en la base de datos 6 Se realiza el caso de uso Consulta de IVR (Respuesta de voz interactiva) (UC-0026) Importancia importante Urgencia hay presión Estado en construcción Estabilidad media El sistema de respuesta de voz interactiva estará asociado siempre a un contexto 121

121 UC-0028 Versión Modificar IVR (Respuesta de voz interactiva) 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción Precondición Secuencia normal El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador quiera modificar alguna de las opciones del sistema de respuesta de voz interactiva el usuario Administrador deberá estar validado en el sistema Paso Acción 1 Se realiza el caso de uso Consulta de IVR (Respuesta de voz interactiva) (UC-0026) 2 El actor Administrador (ACT-0001) Seleccionará el IVR a modificar de la lista y mandará la señal al sistema para modificar el IVR seleccionado 3 El sistema mostrará las diferentes opciones de modificación del IVR 4 El actor Administrador (ACT-0001) una vez introducido y/o seleccionada las diferentes opciones enviará al sistema la señal de actualizar los ficheros de configuración (Guardar cambios) 5 El sistema El sistema guardará en la base de datos la información a modificar 6 Se realiza el caso de uso Consulta de IVR (Respuesta de voz interactiva) (UC-0026) Importancia quedaría bien Urgencia hay presión Estado en construcción Estabilidad media Ninguno 122

122 Sistema de Administración básica de una centralita VoIP UC-0029 Versión Eliminar IVR (Respuesta de voz interactiva) 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias Descripción [OBJ-0003] Gestionar planes de llamada (DialPlan) El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador quiera eliminar algún sistema de respuesta de voz interactiva definido en la centralita Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 Se realiza el caso de uso Consulta de IVR (Respuesta de voz interactiva) (UC-0026) 2 El actor Administrador (ACT-0001) seleccionará de la lista el sistema IVR a eliminar y pulsará sobre la opción "Eliminar sistema IVR" 3 El sistema mostrará un mensaje para la verificación de la eliminación del sistema IVR seleccionado 4 El actor Administrador (ACT-0001) elegirá una de las dos opciones mostradas por el sistema 5 Si el usuario Administrador pulsa la opción "NO", se realiza el caso de uso Consulta de IVR (Respuesta de voz interactiva) (UC-0026) 6 Si el usuario Administrador pulsa la opción "SI", el sistema eliminará toda la información del dialplan referente al IVR seleccionado, pero no eliminará el contexto al que pertenece 7 Se realiza el caso de uso Consulta de IVR (Respuesta de voz interactiva) (UC-0026) Importancia quedaría bien Urgencia hay presión Estado en construcción Estabilidad media Ninguno 123

123 Subsistema de gestión de colas de llamadas UC-0030 Versión Consulta de colas de llamada 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0007] Información sobre las colas de llamadas [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador quiera ver la lista de colas de llamadas configuradas en la centralita telefónica o durante la realización de los siguientes casos de uso: [UC-0031] Crear cola de llamada, [UC-0032] Modificar cola de llamada, [UC-0033] Eliminar cola de llamada Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 El actor Administrador (ACT-0001) solicitará el acceso para gestionar las colas de llamadas 2 El sistema mostrará una lista con todas las colas de llamadas configuradas en la centralita Importancia quedaría bien Urgencia puede esperar Estado validado Estabilidad media Ninguno 124

124 Sistema de Administración básica de una centralita VoIP UC-0031 Versión Crear cola de llamada 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0007] Información sobre las colas de llamadas [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador quiera crear un nuevo sistema de colas de llamadas en la centralita o durante la realización de los siguientes casos de uso: [UC-0032] Modificar cola de llamada Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso 1 Acción Se realiza el caso de uso Consulta de colas de llamada (UC-0030) 2 El actor Administrador (ACT-0001) seleccionará la opción "Crear nueva cola de llamadas" 3 El sistema mostrará las diferentes opciones para la creación de colas de llamadas 4 El actor Administrador (ACT-0001) Introducirá y/o seleccionará las diferentes opciones de configuración del nuevo sistema de cola de llamadas, y pulsará la opción "Guardar cambios" 5 El sistema guardará la nueva información referente a la nueva cola de llamada en la base de datos 6 Se realiza el caso de uso Consulta de colas de llamada (UC-0030) Importancia quedaría bien Urgencia puede esperar Estado validado Estabilidad media Ninguno 125

125 UC-0032 Versión Modificar cola de llamada 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0007] Información sobre las colas de llamadas [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador quiera modificar alguna de las colas de llamadas configuradas en la centralita Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso 1 Acción Se realiza el caso de uso Crear cola de llamada (UC-0031) 2 El actor Administrador (ACT-0001) seleccionará de la lista mostrada la cola de llamadas que quiere modificar y pulsará en el botón "Modificar Cola de llamada" 3 El sistema mostrará las diferentes opciones de modificación de la cola de llamadas correspondiente 4 El actor Administrador (ACT-0001) una vez introducidas y/o seleccionadas las diferentes opciones modificadas pulsará sobre la opción "Guardar cambios" 5 El sistema modificará en la base de datos la información correspondiente a la cola de llamadas. 6 Se realiza el caso de uso Consulta de colas de llamada (UC-0030) Importancia quedaría bien Urgencia puede esperar Estado validado Estabilidad media Ninguno 126

126 Sistema de Administración básica de una centralita VoIP UC-0033 Versión Eliminar cola de llamada 1.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0007] Información sobre las colas de llamadas [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador decida eliminar algún sistema de colas de llamadas definidos en la centralita Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 Se realiza el caso de uso Consulta de colas de llamada (UC-0030) 2 El actor Administrador (ACT-0001) seleccionará de la lista el sistema de colas de llamadas que quiere eliminar y pulsará sobre la opción "Eliminar Cola de llamadas" 3 El sistema mostrará un mensaje para confirmar la eliminación con dos opciones 4 El actor Administrador (ACT-0001) elegirá una de las dos opciones 5 Si el usuario Administrador pulsa sobre la opción "NO", se realiza el caso de uso Consulta de colas de llamada (UC-0030) 6 Si el usuario Administrador pulsa la opción "SI", el sistema eliminará de la base de datos toda la información referente a dicha cola de llamadas 7 Se realiza el caso de uso Consulta de colas de llamada (UC-0030) Importancia quedaría bien Urgencia puede esperar Estado validado Estabilidad media Ninguno 127

127 Subsistema de gestión de sistemas de música en espera UC-0034 Versión Consulta listado de sistemas de música en espera 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0008] Información sobre la música en espera [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador quiere gestionar el sistema de música en espera de la centralita telefónica o durante la realización de los siguientes casos de uso: [UC-0035] Crear nuevo sistema de música en espera, [UC-0036] Modificar sistema de música en espera, [UC-0037] Eliminar sistema de música en espera Precondición el usuario Administrador deberá estar validado en el sistema. Secuencia normal Paso Acción 1 El actor Administrador (ACT-0001) solicitará el acceso a sistema de música en espera de la centralita 2 El sistema mostrará una lista de todas las con todos los sistemas de música en espera definidos en la centralita. Importancia quedaría bien Urgencia puede esperar Estado validado Estabilidad media Ninguno 128

128 Sistema de Administración básica de una centralita VoIP UC-0035 Versión Crear nuevo sistema de música en espera 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0008] Información sobre la música en espera [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador quiera crear un nuevo sistema de música en espera en la centralita Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 Se realiza el caso de uso Consulta listado de sistemas de música en espera (UC-0034) 2 El actor Administrador (ACT-0001) pulsará sobre la opción "Crear un nuevo sistema de música en espera" 3 El sistema mostrará las diferentes opciones para crear el nuevos sistema de música en espera 4 El actor Administrador (ACT-0001) seleccionará y/o introducirá lso requisitos para el nuevo sistema de música en espera, y acto seguido pulasara sobre la opción "Guardar cambios" 5 6 El sistema guardará en la base de datos la nueva configuración Se realiza el caso de uso Consulta listado de sistemas de música en espera (UC-0034) Importancia quedaría bien Urgencia puede esperar Estado validado Estabilidad media Ninguno 129

129 UC-0036 Versión Modificar sistema de música en espera 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias [IRQ-0008] Información sobre la música en espera [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador quiera modificar un sistema de música en espera configurado en la centralita Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 Se realiza el caso de uso Consulta listado de sistemas de música en espera (UC-0034) 2 El actor Administrador (ACT-0001) seleccionará el sistema de música en espera que quiera modificar de la lista 3 El sistema mostrará al usuario las diferentes opciones de modificación del sistema de música en espera a modificar 4 El actor Administrador (ACT-0001) Modificará los parámetros referentes al sistema de música en espera seleccionado y mandará la señal al sistema para que guarde los cambios realizados en la base de datos, pulsando sobre la opción "Guardar cambios" 5 6 El sistema guardará los cambios realizados en la base de datos Se realiza el caso de uso Consulta listado de sistemas de música en espera (UC-0034) Importancia quedaría bien Urgencia puede esperar Estado validado Estabilidad media Ninguno 130

130 Sistema de Administración básica de una centralita VoIP UC-0037 Versión Eliminar sistema de música en espera 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias Descripción [IRQ-0008] Información sobre la música en espera [OBJ-0003] Gestionar planes de llamada (DialPlan) El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando el usuario Administrador quiera eliminar algún sistema de música en espera definido en la centralita Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 Se realiza el caso de uso Consulta listado de sistemas de música en espera (UC-0034) 2 El actor Administrador (ACT-0001) seleccionará de la lista el sistema de música en espera que quiera suprimir y pulsará sobre la opción "Eliminar sistema de música en espera" seleccionado 3 El sistema mostrará un mensaje con dos opciones para verificar la supresión de dicho sistema 4 El actor Administrador (ACT-0001) elegirá una de las dos opciones mostradas 5 Si el usuario Administrador pulsa en "NO", se realiza el caso de uso Consulta listado de sistemas de música en espera (UC-0034) 6 Si el usuario Administrador pulsa en "SI", el sistema eliminará de la base de datos la información referente al sistema de música en espera seleccionado 7 Se realiza el caso de uso Consulta listado de sistemas de música en espera (UC-0034) Importancia quedaría bien Urgencia puede esperar Estado validado Estabilidad media Ninguno 131

131 Subsistema de monitorización de servicios de la centralita UC-0038 Versión Consulta de la monitorización de servicos básicos de la centralilta 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias Descripción [OBJ-0004] Gestión de estadísticas El sistema deberá comportarse tal como se describe en el siguiente caso de uso cuando mostrará información sobre los servicios básicos de la centralita, así como el espacio en disco utilizado, la memoria RAM disponible y utilizada, información básica de la interfaz de red, y las llamadas en curso. Precondición el usuario Administrador deberá estar validado en el sistema Secuencia normal Paso Acción 1 El actor Administrador (ACT-0001) Mandará la señal al sistema para acceder a la monitorización básica del sistema, pulsará en "Estado del sistema" 2 El sistema mostrará la información básica de los servicios del sistema y de los recursos utilizados, así como las llamadas entrantes y salientes actuales. Importancia importante Urgencia hay presión Estado en construcción Estabilidad media Ninguno 132

132 Sistema de Administración básica de una centralita VoIP Reglas de negocio FRQ-0001 Unicidad de registro de extensiones SIP Versión 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias Descripción [IRQ-0002] Información sobre extensiones SIP [OBJ-0002] Gestionar registro de extensiones [UC-0005] Crear nueva extension SIP [UC-0006] Modificación de extension SIP El sistema deberá satisfacer la siguiente restricción: no puede haber dos extensiones SIP con el mismo identificador Importancia importante Urgencia hay presión Estado en construcción Estabilidad media Ninguno FRQ-0002 Unicidad de registro de extensiones IAX Versión 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias Descripción [IRQ-0003] Información sobre extensiones IAX [OBJ-0002] Gestionar registro de extensiones [UC-0009] Crear nueva extension IAX [UC-0010] Modificación de extension IAX El sistema deberá satisfacer la siguiente restricción: no puede haber dos extensiones IAX con el mismo identificador Importancia importante Urgencia hay presión Estado en construcción Estabilidad media Ninguno 133

133 3.2.4 Requisitos no funcionales NFR-0001 Usabilidad Versión 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias Descripción [OBJ-0002] Gestionar registro de extensiones [OBJ-0003] Gestionar planes de llamada (DialPlan) [OBJ-0004] Gestión de estadísticas [OBJ-0005] Acceso a la consola cliente de Asterisk El sistema deberá prestar una cómoda interfaz de cara al usuario Administrador de modo que fácilmente tenga acceso a lo que busca. Así mismo, el ofrecer unos informes de las llamadas de forma clara y ordenada contribuye a ofrecer un uso fácil y agradable. Importancia importante Urgencia hay presión Estado en construcción Estabilidad media NFR-0002 Rendimiento Versión 2.0 ( 06/11/2013 ) Autores Fuentes Dependencias Descripción [OBJ-0002] Gestionar registro de extensiones [OBJ-0003] Gestionar planes de llamada (DialPlan) [OBJ-0004] Gestión de estadísticas [OBJ-0005] Acceso a la consola cliente de Asterisk El sistema deberá ofrecer una respuesta aceptable tanto a los cambios de configuraciones, como al acceso a la consola cliente de Asterisk. Supone un punto importante en el rendimiento de la aplicación Importancia importante Urgencia hay presión Estado en construcción Estabilidad media 134

134 Sistema de Administración básica de una centralita VoIP 3.3 Matrices de rastreabilidad TRM-0001 OBJ-0001 IRQ-0001 OBJ-0002 OBJ-0003 OBJ-0004 OBJ IRQ IRQ IRQ IRQ IRQ IRQ IRQ IRQ IRQ IRQ Matriz de rastreabilidad: Requisitos de información OBJ-0002 OBJ-0003 OBJ-0004 OBJ-0005 UC UC TRM-0002 OBJ-0001 UC UC UC UC UC UC

135 UC UC UC UC UC UC UC UC UC UC UC UC UC UC UC UC UC UC UC UC UC UC UC UC UC UC UC UC UC UC Matriz de rastreabilidad: Requisitos funcionales - 136

136 Sistema de Administración básica de una centralita VoIP 4. Análisis de requisitos 137

137 4.1 Modelo estático En este apartado se describe el modelo estático del sistema, es decir, los tipos de objetos y las asociaciones entre los tipos de objetos que compone el estado del sistema que se han identificado durante el desarrollo del mismo Diagrama estático 138

138 Sistema de Administración básica de una centralita VoIP Tipos y valores TYP-0001 Usuario Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0001] Credenciales del usuario Administrador [OBJ-0001] Autenticación del usuario Administrador Descripción Este tipo de objetos representa cualquier usuario administrador que acceda a la aplicación Ninguno Atributo variable Usuario:: Nombre Descripción Este atributo representa el nombre de usuario del sistema Tipo String Ninguno Atributo variable Usuario:: Contraseña Descripción Este atributo representa la contraseña del usuario del sistema Tipo String Ninguno 139

139 TYP-0002 Extensión SIP Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0002] Información sobre extensiones SIP [OBJ-0002] Gestionar registro de extensiones Descripción Este tipo de objetos representa la extensión, o el número de teléfono de un terminal que usa el protocolo de comunicaciones SIP. Atributo variable Descripción Ninguno Extensión SIP:: Nombre Este atributo representa el nombre de la persona que tendrá asociada dicha extensión Tipo String Ninguno Atributo variable Extensión SIP:: Apellidos Descripción Este atributo representa los apellidos de la persona que tendrá asociada dicha extensión Tipo String Ninguno Atributo variable Extensión SIP:: Número de la extensión Descripción Este atributo representa el número de teléfono Tipo Integer Ninguno 140

140 Sistema de Administración básica de una centralita VoIP Atributo variable Descripción Extensión SIP:: Usuario Este atributo representa el usuario con el que se efectuará el registro en la centralita Tipo Integer Valor inicial Número de la extensión = Usuario Atributo variable Descripción El usuario será el mismo que el número de extensión. Para verificar así su unicidad Extensión SIP:: Contraseña Este atributo representa la contraseña del registro del usuario/extensión en la centralita Tipo String Ninguno Atributo variable Extensión SIP:: Contexto Descripción Este atributo representa el contexto al cual pertenece dicha extensión Tipo String Toda extensión debe tener asociado un contexto Atributo variable Extensión SIP:: Callerid Descripción Este atributo representa el identificador único de la extensión. Compuesto por el nombre, los apellidos y el número de extensión del usuario. Tipo String Formato: "Nombre, Apellidos <número_extensión>" 141

141 TYP-0003 Extensión IAX Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0003] Información sobre extensiones IAX [OBJ-0002] Gestionar registro de extensiones Descripción Este tipo de objetos representa la extensión, o el número de teléfono de un terminal que usa el protocolo de comunicaciones IAX Atributo variable Descripción Ninguno Extensión IAX:: Nombre Este atributo representa el nombre de la persona que tendrá asociada dicha extensión Tipo String Ninguno Atributo variable Extensión IAX:: Apellidos Descripción Este atributo representa los apellidos de la persona que tendrá asociada dicha extensión Tipo String Ninguno Atributo variable Extensión IAX:: Número de la extensión Descripción Este atributo representa el número de teléfono Tipo Integer Ninguno 142

142 Sistema de Administración básica de una centralita VoIP Atributo variable Descripción Extensión IAX:: Usuario Este atributo representa el usuario con el que se efectuará el registro en la centralita Tipo Integer Valor inicial Número de la extensión = Usuario Ninguno Atributo variable Extensión IAX:: Contraseña Descripción Este atributo representa la contraseña del registro del usuario/extensión en la centralita Tipo String Ninguno Atributo variable Extensión IAX:: Contexto Descripción Este atributo representa el contexto al cual pertenece dicha extensión Tipo String Ninguno Atributo variable Extensión IAX:: Callerid Descripción Este atributo representa el identificador único de la extensión. Compuesto por el nombre, los apellidos y el número de extensión del usuario. Tipo String Formato: "Nombre, Apellidos <número_extensión>" 143

143 TYP-0004 Línea del dialplan Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0004] Información sobre la línea del Dialplan [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción Este tipo de objetos representa una línea del plan de llamadas de la centralita Ninguno Atributo variable Descripción Línea del dialplan:: Contexto Este atributo representa el contexto al que pertenece la linea del plan de llamadas Tipo String Ninguno Atributo variable Línea del dialplan:: Extensión Descripción Este atributo representa La extensión asociada a la línea del plan de llamadas Tipo Integer Ninguno Atributo variable Línea del dialplan:: Prioridad Descripción Este atributo representa la prioridad de la línea del plan de llamadas Tipo Integer La centralita irá ejecutando linea a linea según su prioridad. (el número más bajo indica mayor prioridad) 144

144 Sistema de Administración básica de una centralita VoIP Atributo variable Descripción Línea del dialplan:: Aplicación Este atributo representa nombre de la aplicación que se ejecutará en dicha línea Tipo String Ninguno Atributo variable Línea del dialplan:: Parámetros Descripción Este atributo representa nombre de los parámetros que se le pasarán a la aplicación Tipo String Ninguno TYP-0005 Registro de llamada Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0005] Información sobre el registro de llamadas [OBJ-0004] Gestión de estadísticas Descripción Este tipo de objetos representa la llamada registrada en el sistema. Ninguno Atributo variable Registro de llamada:: Fecha Descripción Este atributo representa la fecha de la llamada registrada Tipo Date Ninguno 145

145 Atributo variable Registro de llamada:: Hora Descripción Este atributo representa la hora de la llamada registrada Tipo Time Ninguno Atributo variable Registro de llamada:: Identificador Descripción Este atributo representa el identificador único del registro de la llamada Tipo Integer Ninguno Atributo variable Registro de llamada:: Emisor Descripción Este atributo representa el emisor de la llamada Tipo String Valor inicial Emisor = Callerid Ninguno Atributo variable Registro de llamada:: Receptor Descripción Este atributo representa el receptor de la llamada Tipo String Ninguno Atributo variable Registro de llamada:: Contexto Descripción Este atributo representa el contexto en el que se realiza la llamada Tipo String Ninguno 146

146 Sistema de Administración básica de una centralita VoIP Atributo variable Registro de llamada:: Duración Descripción Este atributo representa la duración en minutos de la llamada registrada Tipo Integer Ninguno Atributo variable Registro de llamada:: Estado Descripción Este atributo representa el estado de la finalización de la llamada Tipo String RESPONDIDA / NO CONTESTA / FALLIDA TYP-0006 Buzón de voz Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0006] Información sobre el buzón de voz [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción Este tipo de objetos representa el buzón de voz de una determinada extensión Ninguno Atributo variable Buzón de voz:: Número de buzón de voz Descripción Este atributo representa el número del buzón de voz asociada a la extensión Tipo Integer Ninguno 147

147 TYP-0007 Cola de llamada Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0007] Información sobre las colas de llamadas [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción Este tipo de objetos representa La funcionalidad de cola de llamada del plan de llamadas Ninguno Atributo variable Cola de llamada:: Nombre Descripción Este atributo representa el nombre de la cola de llamadas Tipo String Ninguno Atributo variable Cola de llamada:: Lista de extensiones Descripción Este atributo representa la lista de las extensiones que pertenecen a la cola de llamada Tipo String Ninguno Atributo variable Cola de llamada:: Prioridades Descripción Este atributo representa Lista de las prioridades de cada una de las extensiones Tipo Integer Ninguno 148

148 Sistema de Administración básica de una centralita VoIP Atributo variable Descripción Cola de llamada:: Fichero de audio Este atributo representa nombre del fichero de audio que sonará al llamar a la cola de llamadas mientras el sistema escoge a la extensión que menos carga de llamadas ha recibido Tipo String Ninguno TYP-0008 Música en espera Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0008] Información sobre la música en espera [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción Este tipo de objetos representa el fichero de audio que sonará al realizar una llamada y todos los terminales estén ocupados Ninguno Atributo variable Música en espera:: Fichero de audio Descripción Este atributo representa el nombre del fichero de audio Tipo String Ninguno TYP-0009 IVR Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0010] Información sobre el IVR [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción Este tipo de objetos representa el sistema de respuesta de voz interactiva de la centralita Ninguno 149

149 Atributo variable IVR:: Extensión Descripción Este atributo representa número de la extensión asociada al IVR Tipo Integer Ninguno Atributo variable IVR:: Audio dentro de horario Descripción Este atributo representa el nombre del fichero de audio que sonará cunad o se realice una llamada dentro del horario establecido Tipo String Ninguno Atributo variable IVR:: Audio fuera de horario Descripción Este atributo representa el nombre del fichero de audio que sonará cunad o se realice una llamada fuera del horario establecido Tipo String Ninguno Atributo variable IVR:: Intervalo horario Descripción Este atributo representa el horario Tipo Date Ninguno TYP-0010 Estadística Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0009] Información sobre la monitorización del sistema 150

150 Sistema de Administración básica de una centralita VoIP [OBJ-0004] Gestión de estadísticas Descripción Este tipo de objetos representa El dato almacenado necesario para generar las estadísticas Ninguno Atributo variable Estadística:: Porcentaje de CPU Descripción Este atributo representa Valor del porcentaje del uso de la CPU Tipo Real Ninguno Atributo variable Estadística:: Hora Descripción Este atributo representa la hora en que se recogió el dato estadístico Tipo Date Ninguno Atributo variable Estadística:: Fecha Descripción Este atributo representa la fecha en que se recogió el dato estadístico Tipo Date Ninguno Atributo variable Estadística:: cantidad de llamadas Descripción Este atributo representa número de llamadas realizadas, tanto entrantes como salientes, de la centralita, en un determinado momento Tipo Integer Ninguno 151

151 TYP-0012 Comando Versión 1.0 ( 22/01/2014 ) Autores Dependencias [OBJ-0005] Gestión de acceso a la consola cliente [IRQ-0011] Información sobre el historial de comandos Descripción Este tipo de objetos representa el comando ejecutado en la consola cliente de Asterisk Atributo variable Descripción Ninguno Comando:: nombre Este atributo representa el nombre del comando completo con los parametros, que se ejecutó Tipo String Ninguno 152

152 Sistema de Administración básica de una centralita VoIP Asociaciones ASO-0001 Crea( Usuario, Extensión SIP ) Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0001] Credenciales del usuario Administrador [IRQ-0002] Información sobre extensiones SIP [OBJ-0002] Gestionar registro de extensiones Descripción Este tipo de asociación representa el hecho de que que un usuario Adminsitrador crea una nueva extensión de tipo SIP Ninguno Rol variable Crea( Usuario, Extensión SIP ):: Usuario Descripción Este rol representa El usuario administrador Tipo Usuario Multiplicidad 1 Ninguno Rol variable Crea( Usuario, Extensión SIP ):: Extensión SIP Descripción Este rol representa la extensión de tipo SIP Tipo Extensión SIP Multiplicidad 1 Ninguno 153

153 ASO-0002 Crea( Usuario, Extensión IAX ) Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0001] Credenciales del usuario Administrador [IRQ-0003] Información sobre extensiones IAX [OBJ-0002] Gestionar registro de extensiones Descripción Este tipo de asociación representa el hecho de que un usuario Administrador crea una nueva extensión de tipo IAX Ninguno Rol variable Crea( Usuario, Extensión IAX ):: Usuario Descripción Este rol representa el usuario Administrador Tipo Usuario Multiplicidad 1 Ninguno Rol variable Crea( Usuario, Extensión IAX ):: Extensión IAX Descripción Este rol representa La extensión de tipo IAX Tipo Extensión IAX Multiplicidad 1 Ninguno 154

154 Sistema de Administración básica de una centralita VoIP ASO-0003 Genera( Usuario, Comando ) Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0001] Credenciales del usuario Administrador [OBJ-0005] Gestión de acceso a la consola cliente [IRQ-0011] Información sobre el historial de comandos Descripción Este tipo de asociación representa el hecho de que que el usuario genere una historial de comandos al ejecutarlos en la consola Ninguno Rol variable Genera( Usuario, Comando ):: Usuario Descripción Este rol representa el usuario administrador Tipo Usuario Multiplicidad 1 Ninguno Rol variable Genera( Usuario, Comando ):: historial Descripción Este rol representa el comando generado, para ser guardado en el historial Tipo Comando Multiplicidad 1 Ninguno 155

155 ASO-0004 Produce( Registro de llamada, Estadística ) Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0005] Información sobre el registro de llamadas [IRQ-0009] Información sobre la monitorización del sistema [OBJ-0004] Gestión de estadísticas Descripción Este tipo de asociación representa el hecho de que el registro de llamadas produce datos estadísticos Ninguno Rol variable Produce( Registro de llamada, Estadística ):: Registro de llamada Descripción Este rol representa a la llamada registrada en el sistema Tipo Registro de llamada Multiplicidad 1 Ninguno Rol variable Produce( Registro de llamada, Estadística ):: Estadística Descripción Este rol representa al dato estadístico del sistema Tipo Estadística Multiplicidad 1 Ninguno 156

156 Sistema de Administración básica de una centralita VoIP ASO-0005 esta sociada( Extensión SIP, Línea del dialplan ) Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0002] Información sobre extensiones SIP [IRQ-0004] Información sobre la línea del Dialplan [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción Este tipo de asociación representa el hecho de que a que una estensión de tipo SIP está asociada a una linea del plan de llamadas de la centralita Ninguno Rol variable esta sociada( Extensión SIP, Línea del dialplan ):: Extensión SIP Descripción Este rol representa a la extensión de tipo SIP Tipo Extensión SIP Multiplicidad 1 Ninguno Rol variable esta sociada( Extensión SIP, Línea del dialplan ):: Línea Descripción Este rol representa a la línea del plan de llamadas Tipo Línea del dialplan Multiplicidad 1 Ninguno 157

157 ASO-0006 esta asociada( Extensión IAX, Línea del dialplan ) Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0003] Información sobre extensiones IAX [IRQ-0004] Información sobre la línea del Dialplan [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción Este tipo de asociación representa el hecho de que que una extensión de tipo IAX está asociada a una línea del plan de llamadas Ninguno Rol variable esta asociada( Extensión IAX, Línea del dialplan ):: Extensión IAX Descripción Este rol representa a una extensión de tipo IAX Tipo Extensión IAX Multiplicidad 1 Ninguno Rol variable esta asociada( Extensión IAX, Línea del dialplan ):: Línea del dialplan Descripción Este rol representa a una línea del plan de llamadas Tipo Línea del dialplan Multiplicidad 1 Ninguno 158

158 Sistema de Administración básica de una centralita VoIP ASO-0007 define( Usuario, Línea del dialplan ) Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0001] Credenciales del usuario Administrador [IRQ-0004] Información sobre la línea del Dialplan [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción Este tipo de asociación representa el hecho de que el usuario administrador crea una nueva línea en el plan de llamadas Ninguno Rol variable define( Usuario, Línea del dialplan ):: Usuario Descripción Este rol representa al usuario administrador de la centralita Tipo Usuario Multiplicidad 1 Ninguno Rol variable define( Usuario, Línea del dialplan ):: Línea del dialplan Descripción Este rol representa una línea del plan de llamadas Tipo Línea del dialplan Multiplicidad 1 Ninguno 159

159 ASO-0008 funcionalidad de( Línea del dialplan, Buzón de voz ) Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0004] Información sobre la línea del Dialplan [IRQ-0006] Información sobre el buzón de voz [OBJ-0003] Gestionar planes de llamada (DialPlan) Descripción Este tipo de asociación representa el hecho de que una línea puede tener una funcionalidad de buzón de voz Ninguno Rol variable funcionalidad de( Línea del dialplan, Buzón de voz ):: Línea Descripción Este rol representa a la línea del plan de llamadas Tipo Línea del dialplan Multiplicidad 1 Ninguno Rol variable funcionalidad de( Línea del dialplan, Buzón de voz ):: Buzón de voz Descripción Este rol representa a la funcionalidad de buzón de voz Tipo Buzón de voz Multiplicidad 1 Ninguno 160

160 Sistema de Administración básica de una centralita VoIP ASO-0009 funcionalidad de( Línea del dialplan, Música en espera ) Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0004] Información sobre la línea del Dialplan [OBJ-0003] Gestionar planes de llamada (DialPlan) [IRQ-0008] Información sobre la música en espera Descripción Este tipo de asociación representa el hecho de que una línea puede tener una funcionalidad de música en espera Ninguno Rol variable funcionalidad de( Línea del dialplan, Música en espera ):: Línea Descripción Este rol representa a la línea del plan de llamadas Tipo Línea del dialplan Multiplicidad 1 Ninguno Rol variable funcionalidad de( Línea del dialplan, Música en espera ):: Música en espera Descripción Este rol representa a la funcionalidad de música en espera Tipo Música en espera Multiplicidad 1 Ninguno 161

161 ASO-0010 funcionalidad de( Línea del dialplan, Cola de llamada ) Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0004] Información sobre la línea del Dialplan [OBJ-0003] Gestionar planes de llamada (DialPlan) [IRQ-0007] Información sobre las colas de llamadas Descripción Este tipo de asociación representa el hecho de que una línea puede tener una funcionalidad de cola de llamadas Ninguno Rol variable funcionalidad de( Línea del dialplan, Cola de llamada ):: Línea Descripción Este rol representa a la línea del plan de llamadas Tipo Línea del dialplan Multiplicidad 1 Ninguno Rol variable funcionalidad de( Línea del dialplan, Cola de llamada ):: Cola de llamadas Descripción Este rol representa a la funcionalidad de cola de llamadas Tipo Cola de llamada Multiplicidad 1 Ninguno 162

162 Sistema de Administración básica de una centralita VoIP ASO-0011 funcionalidad de( Línea del dialplan, IVR ) Versión 1.0 ( 22/01/2014 ) Autores Dependencias [IRQ-0004] Información sobre la línea del Dialplan [OBJ-0003] Gestionar planes de llamada (DialPlan) [IRQ-0010] Información sobre el IVR Descripción Este tipo de asociación representa el hecho de que una línea puede tener una funcionalidad de respuesta de voz interactiva (IVR) Ninguno Rol variable funcionalidad de( Línea del dialplan, IVR ):: Línea Descripción Este rol representa a la línea del plan de llamadas Tipo Línea del dialplan Multiplicidad 1 Ninguno Rol variable funcionalidad de( Línea del dialplan, IVR ):: IVR Descripción Este rol representa a la funcionalidad de resuesta de voz interactiva (IVR) Tipo IVR Multiplicidad 1 Ninguno 163

163 ASO-0012 Consulta( Usuario, Registro de llamada ) Versión 1.0 ( 23/01/2014 ) Autores Dependencias [IRQ-0005] Información sobre el registro de llamadas [OBJ-0004] Gestión de estadísticas [IRQ-0001] Credenciales del usuario Administrador Descripción Este tipo de asociación representa el hecho de que que el usuario realice una consulta al registro de llamadas Ninguno Rol variable Consulta( Usuario, Registro de llamada ):: Usuario Descripción Este rol representa el usuario administrador de la centralita Tipo Usuario Multiplicidad 1 Ninguno Rol variable Consulta( Usuario, Registro de llamada ):: Registro de llamadas Descripción Este rol representa el registro de llamadas del sistema Tipo Registro de llamada Multiplicidad 1 Ninguno 164

164 Sistema de Administración básica de una centralita VoIP ASO-0013 Consulta( Usuario, Estadística ) Versión 1.0 ( 23/01/2014 ) Autores Dependencias Descripción [IRQ-0001] Credenciales del usuario Administrador [IRQ-0005] Información sobre el registro de llamadas [OBJ-0004] Gestión de estadísticas [IRQ-0009] Información sobre la monitorización del sistema Este tipo de asociación representa el hecho de que que el usuario realice una consulta de las estadísticas de monitorización del sistema Ninguno Rol variable Consulta( Usuario, Estadística ):: Usuario Descripción Este rol representa el usuario administrador de la centralita Tipo Usuario Multiplicidad 1 Ninguno Rol variable Consulta( Usuario, Estadística ):: Estadística Descripción Este rol representa las estadísticas del sistema Tipo Estadística Multiplicidad 1 Ninguno 165

165 4.2 Modelo dinámico, funcional y prototipos de interfaz de usuario Validación de usuario SOP-0001 Tipo del resultado Versión Identificación del usuario Administrador Usuario identificado en el sistema 1.0 ( 22/01/2014 ) Autores Dependencias [UC-0001] Identificación del Administrador (login) Descripción El usuario introducirá sus datos en la pantalla de autenticación y será redirigido a la parte de estadísticas del sistema Parámetros Usuario : Usuario -- al nombre y la contraseña de usuario que usará para identificarse en la aplicación Expresiones de precondición pre1: ningún parámetro puede estar vacío Expresiones de precondición (OCL) pre1: true Expresiones de postcondición post1: se redirige al usuario a la parte de estadísticas del sistema Expresiones de postcondición (OCL) post1: true Ninguno Excepción Identificación del usuario Administrador::no pre1 Condición algún campo está vacío Condición (OCL) Expresión Expresión OCL false El sistema informará del error al usuario y se redirigirá a la pantalla de autenticación true Ninguno 166

166 Sistema de Administración básica de una centralita VoIP Excepción Identificación del usuario Administrador::Usuario no registrado en el sistema Condición el nombre de usuario no está registrado en el sistema Condición (OCL) Expresión Expresión OCL false se informará al usuario y se redigirá a la pantalla de identificación true Ninguno Excepción Identificación del usuario Administrador::Contraseña errónea Condición la contraseña introducida por el usuario no es correcta Condición (OCL) Expresión Expresión OCL false se informará del error y se redirigirá a la pantalla de identificación true Ninguno Figura 45: Esquema dinámico: login de usuario administrador 167

167 Figura 46: Prototipo login de usuario administrador 168

168 Sistema de Administración básica de una centralita VoIP Subsistema gestión de extensiones SIP Creación de extensiones SIP SOP-0002 Tipo del resultado Versión Crear nueva extensión SIP Una nueva extensión SIP creada en el sistema 1.0 ( 22/01/2014 ) Autores Dependencias [UC-0004] Consulta de extensiones SIP dadas de alta en la centralita [UC-0005] Crear nueva extension SIP Descripción el usuario administrador seleccionará el apartado de extensiones SIP, realizando a su vez una consulta de todas las extensiones SIP dadas de altta en la centralita, y luego el usuario seleccionará la "opción crear nueva extensión SIP". El sistema mostrará el formulario con los datos de la nueva extensión SIP. Parámetros Extensión SIP : Extensión SIP -- Todos los datos referentes a la extensión de tipo SIP Expresiones de precondición Expresiones de precondición (OCL) pre1: el usuario administrador deberá estar logueado en el sistema pre2: la extensión SIP no puede existir ya en el sistema pre1: true pre2: true Expresiones de postcondición post1: se ha añadido una nueva extensión SIP al sistema Expresiones de postcondición (OCL) post1: true Ninguno 169

169 Excepción Crear nueva extension SIP::no pre2 Condición la extensión SIP ya está dada de alta en el sistema Condición (OCL) Expresión Expresión OCL false el sistema informará al usuario de que la nueva extensión SIP ya esta dada de alta true Ninguno Excepción Crear nueva extension SIP::Algún campo está vacío Condición Condición (OCL) Expresión Expresión OCL Algún campo obligatorio del formulario de creción de extensiones SIP está vacío false el sistema mostrará al usuario el mensaje de error indicando que campo es erróneo true Ninguno Excepción Crear nueva extension SIP::Verificación de contraseña incorrecta Condición Condición (OCL) Expresión Expresión OCL La verificación de la contraseña para el registro de la nueva extensión SIP es incorrecta false el sistema informará al usuario que la verificación de la contraseña es incorrecta true Ninguno 170

170 Sistema de Administración básica de una centralita VoIP Figura 47: Esquema dinámico: Alta de extensión SIP 171

171 Modificación de extensiones SIP SOP-0004 Modificar extensión SIP Versión 1.0 ( 22/01/2014 ) Autores Dependencias [UC-0004] Consulta de extensiones SIP dadas de alta en la centralita [UC-0006] Modificación de extension SIP Descripción El usuario administrador seleccionará el apartado de extensiones SIP, realizando a su vez una consulta de todas las extensiones SIP dadas de alta en la centralita, y luego el usuario seleccionará la extensión SIP a modificar. El sistema mostrará el formulario con los datos de la extensión SIP seleccionada. Parámetros Extensión SIP : Extensión SIP -- Todos los datos referentes a la extensión de tipo SIP Expresiones de precondición Expresiones de precondición (OCL) pre1: el usuario administrador deberá estar logueado en el sistema pre2: la extensión SIP debe existir ya en el sistema pre1: true pre2: true Expresiones de postcondición Ninguno Expresiones de postcondición (OCL) true Ninguno Excepción Modificar extensión SIP::Algún campo está vacío Condición Condición (OCL) Expresión Algún campo obligatorio del formulario de modificación de extensiones SIP está vacío false el sistema mostrará al usuario el mensaje de error indicando que campo es erróneo Expresión OCL true Ninguno 172

172 Sistema de Administración básica de una centralita VoIP Excepción Condición Condición (OCL) Expresión Expresión OCL Modificar extensión SIP::Verificación de contraseña incorrecta La verificación de la contraseña para el registro de la nueva extensión SIP es incorrecta false el sistema informará al usuario que la verificación de la contraseña es incorrecta true Ninguno Figura 48: Esquema dinámico: Modificar extensión SIP 173

173 Eliminación de extensiones SIP SOP-0006 Tipo del resultado Versión Borrar extensión SIP una extensión SIP borrada del sistema 1.0 ( 22/01/2014 ) Autores Dependencias [UC-0004] Consulta de extensiones SIP dadas de alta en la centralita [UC-0007] Eliminar extension SIP Descripción el usuario administrador seleccionará el apartado de extensiones SIP, realizando a su vez una consulta de todas las extensiones SIP dadas de altta en la centralita, y luego el usuario seleccionará la extensión SIP a borrar. El sistema mostrará la confirmación al usuario de la extensión SIP para borrarla. Parámetros Extensión SIP : Extensión SIP -- la extensión SIP a borrar del sistema Expresiones de precondición Expresiones de precondición (OCL) pre1: el usuario debe estar logueado en el sistema pre2: la extensión SIP debe existir ya en el sistema pre1: true pre2: true Expresiones de postcondición post1: el sistema informará la eliminación de la extensión SIP Expresiones de postcondición (OCL) post1: true Ninguno Excepción Borrar extensión SIP::pre2 Condición la extensión a borrar debe existir en el sistema Condición (OCL) Expresión Expresión OCL false el sistema informará al usuario de que la extensión no existe en el sistema true Ninguno 174

174 Sistema de Administración básica de una centralita VoIP Figura 49: Esquema dinámico: Eliminar extensión SIP 175

175 4.2.3 Subsistema gestión de extensiones IAX Creación de extensiones IAX SOP-0003 Tipo del resultado Versión Crear nueva extensión IAX Una nueva extensión IAX creada en el sistema 1.0 ( 22/01/2014 ) Autores Dependencias [UC-0008] Consulta de extensiones IAX dadas de alta en la centralita [UC-0009] Crear nueva extension IAX Descripción El usuario administrador seleccionará el apartado de extensiones IAX, realizando a su vez una consulta de todas las extensiones IAX dadas de altta en la centralita, y luego el usuario seleccionará la "opción crear nueva extensión IAX". El sistema mostrará el formulario con los datos de la nueva extensión IAX. Parámetros Extensión IAX : Extensión IAX -- Todos los datos referentes a la extensión de tipo IAX Expresiones de precondición Expresiones de precondición (OCL) pre1: el usuario administrador deberá estar logueado en el sistema pre2: la extensión IAX no puede existir ya en el sistema pre1: true pre2: true Expresiones de postcondición post1: se ha añadido una nueva extensión IAX al sistema Expresiones de postcondición (OCL) post1: true Ninguno 176

176 Sistema de Administración básica de una centralita VoIP Excepción Crear nueva extensión IAX::no pre2 Condición la extensión IAX ya está dada de alta en el sistema Condición (OCL) Expresión Expresión OCL false el sistema informará al usuario de que la nueva extensión IAX ya esta dada de alta true Ninguno Excepción Crear nueva extensión IAX::Algún campo está vacío Condición Algún campo obligatorio de la creación de extensiones de tipo IAX está vacío Condición (OCL) Expresión Expresión OCL false el sistema mostrará un mensaje de error indicando que campo es obligatorio true Ninguno Excepción Crear nueva extensión IAX::Verificación de contraseña incorrecta Condición Condición (OCL) Expresión Expresión OCL el campo que verifica la contraseña pa el registro de la nueva extensión IAX en la centralita es erróneo false el sistema mostrará un mensaje de error indicando que la verificación de contraseña es incorrecta true Ninguno 177

177 Figura 50: Esquema dinámico: Crear extensión IAX 178

178 Sistema de Administración básica de una centralita VoIP Modificación de extensiones IAX SOP-0005 Modificar extensión IAX Versión 1.0 ( 22/01/2014 ) Autores Dependencias [UC-0004] Consulta de extensiones SIP dadas de alta en la centralita [UC-0010] Modificación de extension IAX Descripción El usuario administrador seleccionará el apartado de extensiones IAX, realizando a su vez una consulta de todas las extensiones IAX dadas de alta en la centralita, y luego el usuario seleccionará la extensión IAX a modificar. El sistema mostrará el formulario con los datos de la extensión IAX seleccionada. Parámetros Extensión IAX : Extensión IAX -- Todos los datos referentes a la extensión de tipo IAX Expresiones de precondición Expresiones de precondición (OCL) pre1: el usuario administrador deberá estar logueado en el sistema pre2: la extensión IAX debe existir ya en el sistema pre1: true pre2: true Expresiones de postcondición Ninguno Expresiones de postcondición (OCL) true Ninguno 179

179 Excepción Condición Condición (OCL) Expresión Expresión OCL Modificar extensión IAX::Algún campo está vacío Algún campo obligatorio del formulario de modificación de extensiones IAX está vacío false el sistema mostrará al usuario el mensaje de error indicando que campo es erróneo true Ninguno Excepción Modificar extensión IAX::Verificación de contraseña incorrecta Condición Condición (OCL) Expresión Expresión OCL La verificación de la contraseña para el registro de la nueva extensión IAX es incorrecta false el sistema informará al usuario que la verificación de la contraseña es incorrecta true Ninguno 180

180 Sistema de Administración básica de una centralita VoIP Figura 51: Esquema dinámico: Modificar extensión IAX 181

181 Eliminación de extensiones IAX SOP-0007 Tipo del resultado Versión Borrar extensión IAX una extensión IAX borrada del sistema 1.0 ( 22/01/2014 ) Autores Dependencias [UC-0004] Consulta de extensiones SIP dadas de alta en la centralita [UC-0011] Eliminar extensión IAX Descripción El usuario administrador seleccionará el apartado de extensiones IAX, realizando a su vez una consulta de todas las extensiones IAX dadas de alta en la centralita, y luego el usuario seleccionará la extensión IAX a borrar. El sistema mostrará la confirmación al usuario de la extensión IAX para borrarla. Parámetros Extensión IAX : Extensión IAX -- la extensión IAX a borrar del sistema Expresiones de precondición Expresiones de precondición (OCL) pre1: el usuario debe estar logueado en el sistema pre2: la extensión IAX debe existir ya en el sistema pre1: true pre2: true Expresiones de postcondición post1: el sistema informará la eliminación de la extensión SIP Expresiones de postcondición (OCL) post1: true Ninguno Excepción Borrar extensión IAX::pre2 Condición la extensión a borrar debe existir en el sistema Condición (OCL) Expresión Expresión OCL false el sistema informará al usuario de que la extensión no existe en el sistema true Ninguno 182

182 Sistema de Administración básica de una centralita VoIP Figura 52: Esquema dinámico: Eliminar extensión IAX 183

183 4.2.4 Subsistema gestión del registro de llamadas SOP-0026 Consulta registro de llamadas Versión 1.0 ( 23/01/2014 ) Autores Dependencias [UC-0003] Consulta de registros de llamada Descripción El usuario administrador seleccionará el apartado del registro de llamadas. Después introducirá una serie de patrones de búsqueda para realizar la consulta en la base de datos del registro de las llamadas. Parámetros Fecha de inicio : Date -- la fecha de inicio de la búsqueda en el registro de llamadas Fecha fin : Date -- La fecha límite de la búsqueda en el registro de llamadas Duración mínima : Time -- el tiempo mínimos en minutos de la duración de la llamada en el registro. Duracióm máxima : Date -- La duración máxima en minutos de la llamada en el registro Emisor : Integer -- número de la extensión que emite la llamada (SIP o IAX) Expresiones de precondición pre1: el usuario administrador deberá estar validado en el sistema Expresiones de precondición (OCL) pre1: true Expresiones de postcondición Expresiones de postcondición (OCL) post1: el sistema mostrará todos los registros de las llamadas que cumplan el patrón de búsqueda post1: true Ninguno 184

184 Sistema de Administración básica de una centralita VoIP Figura 53: Esquema dinámico: Consulta del registro de llamadas 185

185 4.2.5 Subsistema de acceso a consola SOP-0008 Tipo del resultado Versión Acceso a consola Acceso y envío de ordena de la consola cliente de Asterisk 1.0 ( 22/01/2014 ) Autores Dependencias [UC-0012] Acceso a la consola cliente de Asterisk [UC-0013] Envio de ordenes a la consola cliente de Asterisk Descripción Parámetros El usuario administrador seleccionará el acceso a consola. Ejecutará un comando. El sistema guardará el comando el el historial y mostrará la salida del mismo al usuario administrador Comando : Comando -- el comando ejecutado en la consola Expresiones de precondición pre1: el usuario Administrador deberá estar logueado en el sistema Expresiones de precondición (OCL) pre1: true Expresiones de postcondición post1: el sistema mostrará la salida de la ejecución del comando Expresiones de postcondición (OCL) post1: true Ninguno 186

186 Sistema de Administración básica de una centralita VoIP Figura 54: Esquema dinámico: Ejecución de ordenes en consola 187

187 4.2.6 Subsistema de monitorización y estadísticas del sistema SOP-0027 Tipo del resultado Versión Consulta estadísticas información de la centralita 1.0 ( 23/01/2014 ) Autores Dependencias [UC-0038] Consulta de la monitorización de servicos básicos de la centralilta Descripción Parámetros El sistema mostrará información de la centralita, como es el consumo de recursos, o la cantidad de llamadas diarias y mensuales. Ninguno Expresiones de precondición pre1: el usuario deberá estar validado en el sistema Expresiones de precondición (OCL) pre1: true Expresiones de postcondición post1: Información de la centralita Expresiones de postcondición (OCL) post1: true Ninguno Figura 55: Esquema dinámico: Consulta estadísticas del sistema 188

188 Sistema de Administración básica de una centralita VoIP Subsistema de gestión del plan de llamadas Creación de contextos SOP-0009 Tipo del resultado Versión Crear nuevo contexto Un nuevo contexto creado en el sistema 1.0 ( 22/01/2014 ) Autores Dependencias [UC-0014] Consulta lista de contextos del plan de llamada (Dialplan) [UC-0015] Crear nuevo Contexto en el plan de llamada (Dialplan) Descripción Parámetros Expresiones de precondición Expresiones de precondición (OCL) El usuario administrador seleccionará el apartado de contextos, el sistema mostrará todos los contextos creados. El usuario seleccionará la opción "Crear nuevo contexto" Nombre : String -- el nombre del contexto pre1: el usuario administrador deberá estar logueado en el sistema pre2: el contexto no puede existir ya en el sistema pre1: true pre2: true Expresiones de postcondición post1: se ha añadido una nueva contexto al sistema Expresiones de postcondición (OCL) post1: true Ninguno Excepción Crear nuevo contexto::no pre2 Condición el contexto con ese nombre ya existe en el sistema Condición (OCL) Expresión Expresión OCL false El sistema informará al usuario de que el nuevo contexto ya existe en el sistema true Ninguno 189

189 Excepción Crear nuevo contexto::el campo nombre del contexto está vacío Condición El campo nombre del contexto del formulario está vacío Condición (OCL) Expresión Expresión OCL false el sistema mostrará al usuario el mensaje de error indicando que el campo nombre del contexto no puede ser nulo true Ninguno Figura 56: Esquema dinámico: Crear nuevo contexto 190

190 Sistema de Administración básica de una centralita VoIP Modificación de contextos Crear nueva línea en un contexto SOP-0011 Tipo del resultado Versión Crear nueva linea en un contexto Una nueva linea creada para el contexto seleccionado 1.0 ( 22/01/2014 ) Autores Dependencias [UC-0014] Consulta lista de contextos del plan de llamada (Dialplan) [UC-0019] Crear nueva línea de un contexto [UC-0016] Modificar un contexto Descripción El usuario administrador seleccionará un contexto de la lista. el sistema mostrará todas las líneas de dicho contexto. El usuario seleccionara la opción "Añadir nueva linea" y enviará al sistema los datos de la nueva línea referentes a una funcionalidad determinada en el plan de llamadas. Parámetros Nombre Contexto : String -- El nombre del contexto seleccionado Linea : Línea del dialplan -- los parámetros de una línea del plan de llamadas Expresiones de precondición Expresiones de precondición (OCL) pre1: el usuario administrador deberá estar logueado en el sistema pre2: el contexto debe existir ya en el sistema pre3: la nueva linea no debe existir ya en dicho contexto pre1: true pre2: true pre3: true Expresiones de postcondición post1: se ha añadido una nueva linea al contexto seleccionado Expresiones de postcondición (OCL) post1: true Ninguno 191

191 Excepción Crear nueva linea en un contexto::no pre3 Condición la nueva línea definida ya existe en dicho contexto Condición (OCL) Expresión Expresión OCL false El sistema informará el usuario de que dicha línea ya existe en el contexto true Dos líneas en un contexto son iguales si, tienen definido el mismo contexto, la misma extensión y la misma prioridad. Independientemente de la funcionalidad de esta. De este modo, preservamos la lógica del plan de llamadas de la centralita. Figura 57: Esquema dinámico: Crear nueva línea en un contexto 192

192 Sistema de Administración básica de una centralita VoIP Modificación de una línea de un contexto SOP-0012 Tipo del resultado Versión Modificar linea en un contexto Una nueva linea de un contexto modificada 1.0 ( 23/01/2014 ) Autores Dependencias [UC-0014] Consulta lista de contextos del plan de llamada (Dialplan) [UC-0016] Modificar un contexto [UC-0020] Modificar línea de un contexto Descripción El usuario administrador seleccionará un contexto de la lista. el sistema mostrará todas las líneas de dicho contexto. El usuario seleccionara la línea que quiere modificar pulsando sobre "Modificar linea" y enviará al sistema los datos de la modificación de la línea. Parámetros Nombre Contexto : String -- El nombre del contexto seleccionado Linea : Línea del dialplan -- Los parámetros de una línea del plan de llamadas Expresiones de precondición Expresiones de precondición (OCL) pre1: el usuario administrador deberá estar logueado en el sistema pre2: el contexto debe existir ya en el sistema pre3: la linea a modificar debe existir ya en dicho contexto pre1: true pre2: true pre3: true Expresiones de postcondición post1: se ha modificado una linea del contexto seleccionado Expresiones de postcondición (OCL) post1: true Ninguno 193

193 Figura 58: Esquema dinámico: Modificar línea de un contexto 194

194 Sistema de Administración básica de una centralita VoIP Eliminación de una línea de un contexto SOP-0013 Tipo del resultado Versión Borrar linea en un contexto Una nueva linea de un contexto borrada 1.0 ( 23/01/2014 ) Autores Dependencias [UC-0014] Consulta lista de contextos del plan de llamada (Dialplan) [UC-0016] Modificar un contexto [UC-0021] Eliminar línea de un contexto Descripción El usuario administrador seleccionará un contexto de la lista. el sistema mostrará todas las líneas de dicho contexto. El usuario seleccionara la línea que quiere borrarr pulsando sobre "Borrar linea" y sistema la línea seleccionada. Parámetros Nombre Contexto : String -- El nombre del contexto seleccionado Linea : Línea del dialplan -- Los parámetros de una línea del plan de llamadas Expresiones de precondición Expresiones de precondición (OCL) pre1: el usuario administrador deberá estar logueado en el sistema pre2: el contexto debe existir ya en el sistema pre3: la linea a borrar debe existir ya en dicho contexto pre1: true pre2: true pre3: true Expresiones de postcondición post1: se ha borrado una linea del contexto seleccionado Expresiones de postcondición (OCL) post1: true Ninguno 195

195 Figura 59: Esquema dinámico: Borrar linea de un contexto 196

196 Sistema de Administración básica de una centralita VoIP Funcionalidades del plan de llamadas En este apartado se definen las funcionalidades más relevantes de la centralita, que gestionará el sistema Subsistema gestión de buzones de voz Creación de buzón de voz SOP-0014 Tipo del resultado Versión Crear nuevo buzón de voz Un nuevo buzón de voz creado en el sistema 1.0 ( 23/01/2014 ) Autores Dependencias [UC-0022] Consulta de buzones de voz [UC-0023] Crear nuevo buzón de voz Descripción Parámetros Expresiones de precondición Expresiones de precondición (OCL) El usuario adminsitrador seleccionará el apartado de Buzones de voz, el sistema mostrará todos los buzones creados. El usuario seleccionará la opción "Crear nuevo buzón de voz" Buzón : Buzón de voz -- los parámetros de un buzón de voz pre1: el usuario administrador deberá estar logueado en el sistema pre2: el buzón de voz no puede existir ya en el sistema pre1: true pre2: true Expresiones de postcondición post1: se ha añadido un nuevo buzón de voz al sistema Expresiones de postcondición (OCL) post1: true Ninguno 197

197 Excepción Condición Condición (OCL) Expresión Expresión OCL Crear nuevo buzón de voz::no pre2 El nuevo buzón de voz ya existe en el sistema false El sistema informará al usuario de que el nuevo buzón de voz ya existe en el sistema true Ninguno Figura 60: Esquema dinámico: Crear un buzón de voz 198

198 Sistema de Administración básica de una centralita VoIP Modificación de un buzón de voz SOP-0015 Tipo del resultado Versión Modificar un buzón de voz Un buzón de voz se modifica en el sistema 1.0 ( 23/01/2014 ) Autores Dependencias [UC-0022] Consulta de buzones de voz [UC-0024] Modificar buzón de voz Descripción Parámetros Expresiones de precondición Expresiones de precondición (OCL) El usuario administrador seleccionará el apartado de Buzones de voz, el sistema mostrará todos los buzones creados. El usuario seleccionará la opción "Modificar buzón de voz" Buzón : Buzón de voz -- los parámetros de un buzón de voz pre1: el usuario administrador deberá estar logueado en el sistema pre2: el buzón de voz debe existir ya en el sistema pre1: true pre2: true Expresiones de postcondición post1: se ha modificado un buzón de voz del sistema Expresiones de postcondición (OCL) post1: true Ninguno 199

199 Figura 61: Esquema dinámico: Modificar un buzón de voz 200

200 Sistema de Administración básica de una centralita VoIP Eliminación de un buzón de voz SOP-0016 Tipo del resultado Versión Borrar un buzón de voz Un buzón de voz se borra de el sistema 1.0 ( 23/01/2014 ) Autores Dependencias [UC-0022] Consulta de buzones de voz [UC-0025] Eliminar buzón de voz Descripción Parámetros Expresiones de precondición Expresiones de precondición (OCL) El usuario adminsitrador seleccionará el apartado de Buzones de voz, el sistema mostrará todos los buzones creados. El usuario seleccionará la opción "Borrar buzón de voz" Buzón : Buzón de voz -- los parámetros de un buzón de voz pre1: el usuario administrador deberá estar logueado en el sistema pre2: el buzón de voz debe existir ya en el sistema pre1: true pre2: true Expresiones de postcondición post1: se ha borrado un buzón de voz del sistema Expresiones de postcondición (OCL) post1: true Ninguno Figura 62: Esquema dinámico: Borrar buzón de voz 201

201 Subsistema gestión de IVR Creación de un IVR SOP-0017 Tipo del resultado Versión Crear nuevo sistema IVR Un nuevo sistema de respuesta de voz interactica (IVR) creado en el sistema 1.0 ( 23/01/2014 ) Autores Dependencias [UC-0026] Consulta de IVR (Respuesta de voz interactiva) [UC-0027] Crear un nuevo IVR (Respuesta de voz interactiva) Descripción El usuario administrador seleccionará el apartado de respuestas de voz interactiva, el sistema mostrará todos los sistemas IVR creados. El usuario seleccionará la opción "Crear nuevo sistema IVR" Parámetros Sistema IVR : IVR -- los parámetros de un sistema de respuesta de voz interactiva Expresiones de precondición Expresiones de precondición (OCL) pre1: el usuario administrador deberá estar logueado en el sistema pre2: el nuevo sistema IVR no puede existir ya en el sistema pre1: true pre2: true Expresiones de postcondición post1: se ha añadido un nuevo sistema de IVR Expresiones de postcondición (OCL) post1: true Ninguno Excepción Crear nuevo sistema IVR::no pre2 Condición el nuevo IVR ya existe en el sistema Condición (OCL) Expresión Expresión OCL false el sistema informará al usuario de que el nuevo IVR ya existe en el sistema true Ninguno 202

202 Sistema de Administración básica de una centralita VoIP Figura 63: Esquema dinámico: Crear sistema IVR 203

203 Modificación de un IVR SOP-0018 Tipo del resultado Versión Modificar un sistema IVR Un sistema IVR se modifica en el sistema 1.0 ( 23/01/2014 ) Autores Dependencias [UC-0026] Consulta de IVR (Respuesta de voz interactiva) [UC-0028] Modificar IVR (Respuesta de voz interactiva) Descripción Parámetros Expresiones de precondición Expresiones de precondición (OCL) El usuario adminsitrador seleccionará el apartado desistemas IVR, el sistema mostrará todos los sistemas IVR creados. El usuario seleccionará la opción "Modificar IVR" Sistema IVR : IVR -- los parámetros de un sistema IVR pre1: el usuario administrador deberá estar logueado en el sistema pre2: el sistema IVR debe existir ya en el sistema pre1: true pre2: true Expresiones de postcondición post1: se ha modificado un IVR del sistema Expresiones de postcondición (OCL) post1: true Ninguno Figura 64: Esquema dinámico: Modificar IVR 204

204 Sistema de Administración básica de una centralita VoIP Eliminación de un IVR SOP-0019 Tipo del resultado Versión Borrar un IVR Un IVR se borra de el sistema 1.0 ( 23/01/2014 ) Autores Dependencias [UC-0026] Consulta de IVR (Respuesta de voz interactiva) [UC-0029] Eliminar IVR (Respuesta de voz interactiva) Descripción El usuario administrador seleccionará el apartado de sistemas de IVR, el sistema mostrará todos los IVR creados. El usuario seleccionará la opción "Borrar sistema IVR" Parámetros Sistema IVR : IVR -- los parámetros de un sistema de respuesta de voz interactiva Expresiones de precondición Expresiones de precondición (OCL) pre1: el usuario administrador deberá estar logueado en el sistema pre2: el IVR debe existir ya en el sistema pre1: true pre2: true Expresiones de postcondición post1: se ha borrado un IVR del sistema Expresiones de postcondición (OCL) post1: true Ninguno Figura 65: Esquema dinámico: Eliminar IVR 205

205 Subsistema gestión de colas de llamadas Creación de cola de llamada SOP-0020 Tipo del resultado Versión Crear nuevo sistema de colas de llamadas Un nuevo sistema de colas de llamadas definido en el sistema 1.0 ( 23/01/2014 ) Autores Dependencias [UC-0030] Consulta de colas de llamada [UC-0031] Crear cola de llamada Descripción El usuario administrador seleccionará el apartado de gestión de colas de llamadas, el sistema mostrará todos los sistemas de colas de llamadas creados. El usuario seleccionará la opción "Crear nueva cola de llamadas" Parámetros Cola : Cola de llamada -- el conjunto de parámetros de un sistema de cola de llamadas Expresiones de precondición Expresiones de precondición (OCL) pre1: el usuario administrador deberá estar logueado en el sistema pre2: el nuevo sistema de colas de llamadas no puede existir ya en el sistema pre1: true pre2: true Expresiones de postcondición post1: se ha añadido un nuevo sistema de colas de llamadas Expresiones de postcondición (OCL) post1: true Ninguno Excepción Crear nuevo sistema de colas de llamadas::no pre2 Condición el nuevo sistema de colas de llamadas ya existe en el sistema Condición (OCL) Expresión false el sistema informará al usuario de que el nuevo sistema de colas de llamadas que se quiere definir, ya existe en el sistema Expresión OCL true Ninguno 206

206 Sistema de Administración básica de una centralita VoIP Figura 66: Esquema dinámico: Crear cola de llamadas 207

207 Modificación de una cola de llamada SOP-0021 Tipo del resultado Versión Modificar un sistema colas de llamadas Un sistema de cola de llamadas se modifica en el sistema 1.0 ( 23/01/2014 ) Autores Dependencias [UC-0030] Consulta de colas de llamada [UC-0032] Modificar cola de llamada Descripción El usuario adminsitrador seleccionará el apartado de gestión de colas de llamadas, el sistema mostrará todos los sistemas de colas de llamadas creados. El usuario seleccionará la opción "Modificar cola de llamada" Parámetros Cola : Cola de llamada -- el conjunto de parámetros de una cola de llamadas Expresiones de precondición Expresiones de precondición (OCL) pre1: el usuario administrador deberá estar logueado en el sistema pre2: el sistema de cola de llamadas seleccionada debe existir ya en el sistema pre1: true pre2: true Expresiones de postcondición post1: se han modificado parámetros de una cola de llamadas del sistema Expresiones de postcondición (OCL) post1: true Ninguno Figura 67: Esquema dinámico: Modificar cola de llamada 208

208 Sistema de Administración básica de una centralita VoIP Eliminación de una cola de llamada SOP-0022 Tipo del resultado Versión Borrar una cola de llamadas Una cola de llamadas se borra de el sistema 1.0 ( 23/01/2014 ) Autores Dependencias [UC-0030] Consulta de colas de llamada [UC-0033] Eliminar cola de llamada Descripción El usuario administrador seleccionará el apartado de gestión de colas de llamadas, el sistema mostrará todos los sistemas de colas de llamadas creados. El usuario seleccionará la opción "Borrar cola de llamada" Parámetros Cola : Cola de llamada -- el conjunto de parámetros de una cola de llamadas Expresiones de precondición Expresiones de precondición (OCL) pre1: el usuario administrador deberá estar logueado en el sistema pre2: la cola de llamadas debe existir ya en el sistema pre1: true pre2: true Expresiones de postcondición post1: se ha borrado una cola de llamadas definida en el sistema Expresiones de postcondición (OCL) post1: true Ninguno Figura 68: Esquema dinámico: Borrar cola de llamada 209

209 Subsistema gestión de música en espera Creación de música en espera SOP-0023 Tipo del resultado Versión Crear nuevo sistema de música en espera Un nuevo sistema de música en espera definido en el sistema 1.0 ( 23/01/2014 ) Autores Dependencias [UC-0034] Consulta listado de sistemas de música en espera [UC-0035] Crear nuevo sistema de música en espera Descripción El usuario administrador seleccionará el apartado de gestión de música en espera, el sistema mostrará todos los sistemas de música en espera creados. El usuario seleccionará la opción "Crear nuevo sistema de música en espera" Parámetros Música : Música en espera -- el conjunto de parámetros del sistema de música en espera Expresiones de precondición Expresiones de precondición (OCL) pre1: el usuario administrador deberá estar logueado en el sistema pre2: el nuevo sistema de música en espera no puede existir ya en el sistema pre1: true pre2: true Expresiones de postcondición post1: se ha añadido un nuevo sistema de música en espera Expresiones de postcondición (OCL) post1: true Ninguno Excepción Crear nuevo sistema de música en espera::no pre2 Condición Condición (OCL) Expresión El nuevo sistema de música en espera ya existe en el sistema false El sistema informará al usuario de que el nuevo sistema de colas de llamadas que se quiere definir, ya existe en el sistema Expresión OCL true Ninguno 210

210 Sistema de Administración básica de una centralita VoIP Figura 69: Esquema dinámico: Crea sistema de música en espera 211

211 Modificación de música en espera SOP-0024 Tipo del resultado Versión Modificar un sistema de música en espera Un sistema de música en espera se modifica en el sistema 1.0 ( 23/01/2014 ) Autores Dependencias [UC-0034] Consulta listado de sistemas de música en espera [UC-0036] Modificar sistema de música en espera Descripción El usuario administrador seleccionará el apartado de gestión de música en espera, el sistema mostrará todos los sistemas de música en espera creados. El usuario seleccionará la opción "Modificar sistema de música en espera" Parámetros Música : Música en espera -- el conjunto de parámetros de un sistema de música en espera Expresiones de precondición Expresiones de precondición (OCL) Expresiones de postcondición Expresiones de postcondición (OCL) pre1: el usuario administrador deberá estar logueado en el sistema pre2: el sistema de música en espera seleccionado debe existir ya en el sistema pre1: true pre2: true post1: se han modificado parámetros de un sistema de música en espera de la centralita post1: true Ninguno 212

212 Sistema de Administración básica de una centralita VoIP Figura 70: Esquema dinámico: Modificar sistema de música en espera Eliminación de música en espera SOP-0025 Tipo del resultado Versión Borrar un sistema de música en espera Un sistema de música en espera se borra de el sistema 1.0 ( 23/01/2014 ) Autores Dependencias [UC-0034] Consulta listado de sistemas de música en espera [UC-0037] Eliminar sistema de música en espera Descripción El usuario administrador seleccionará el apartado de gestión de sistemas de música en espera, el sistema mostrará todos los sistemas de música en espera creados. El usuario seleccionará la opción "Borrar sistema de música en espera" Parámetros Música : Música en espera -- el conjunto de parámetros de un sistema de música en espera Expresiones de precondición Expresiones de precondición (OCL) pre1: el usuario administrador deberá estar logueado en el sistema pre2: el sistema de música en espera debe existir ya en el sistema pre1: true pre2: true Expresiones de postcondición post1: se ha borrado un sistema de música en espera definido en el sistema Expresiones de postcondición (OCL) post1: true Ninguno 213

213 Ilustración 71: Esquema dinámico: Borrar sistema de música en espera 214

214 Sistema de Administración básica de una centralita VoIP 5. Diseño del sistema 215

215 5.1 Introducción En el siguiente apartado se detallan las tecnologías que se usaran para el desarrollo de la herramienta web de administración de una centralita implementada con el software Asterisk. Utilizaremos Python como lenguaje de programación y SQLite como base de datos. Todo el sistema se va a montar en un entorno Linux, concretamente en Debian. Y Django como framework de desarrollo. Además, nos apoyaremos en un proyecto de software libre llamado PYST escrito en Python, que nos facilitará la comunicación con el sistema Asterisk por medio de una serie de librerías. En la ilustración que se muestra en el siguiente apartado, se muestran en modo de bloques los tres componentes principales que formarán el proyecto. 216

216 Sistema de Administración básica de una centralita VoIP 5.2 Diagrama conceptual Figura 72: Diagrama conceptual En el diagrama conceptual hay que diferenciar los tres bloques principales del proyecto: - Interfaz web de usuario: que estará implementada en Python utilizando el framework Django, y desde el cual el usuario administrador tendrá acceso. - La utilización de scripts: para crear las diferentes funcionalidades de la centralita, y que incluirán las librerías del proyecto PYST para la comunicación con el sistema Asterisk mediante su pasarela de comunicaciónes Asterisk Gateway Inteface (AGI). - El sistema Asterisk: el sistema PBX Asterisk en el que se destaca el uso de la Arquitectura ARA (Asterisk Realtime Architecture), para guardar la configuración del sistema en una base de datos en vez de los tradicionales ficheros de texto, y así poder interactuar con los modelos definidos en la interfaz con Django. Todos estos elementos del diseño de detallan en los apartados siguientes. 217

217 5.3 El patrón de diseño: MVC El patrón Modelo Vista Controlador (MVC) es un patrón de arquitectura software que separa los datos de una aplicación, la interfaz de usuario y la lógica de control en tres componentes distintos. - El Modelo incorpora la capa del dominio y persistencia, es la encargada de guardar los datos en un medio persistente (ya sea una base de datos o un archivo de texto). - La Vista se encarga de presentar la interfaz al usuario, en sistemas web, esto es típicamente HTML, aunque pueden existir otro tipo de vistas. En la vista solo se deben de hacer operaciones simples, como ifs, ciclos, formateo, etc. - El Controlador es el que escucha los cambios en la vista y se los envía al modelo, el cual le regresa los datos a la vista, es un ciclo donde cada acción del usuario causa que se inicie de nuevo un nuevo ciclo. Figura 73: Modelo-Vista-Controlador Este patrón es usado en la mayoría de las aplicaciones webs y existen muchos frameworks que lo implementan, más adelante nos centraremos en ese tema. Aunque se pueden encontrar diferentes implementaciones de MVC, el flujo que sigue el control generalmente es el siguiente: 1. El usuario interactúa con la interfaz de usuario de alguna forma (por ejemplo, el usuario pulsa un botón, enlace, etc.) 218

218 Sistema de Administración básica de una centralita VoIP 2. El controlador recibe (por parte de los objetos de la interfaz-vista) la notificación de la acción solicitada por el usuario. El controlador gestiona el evento que llega, frecuentemente a través de un gestor de eventos (handler) o callback. 3. El controlador accede al modelo, actualizándolo, posiblemente modificándolo de forma adecuada a la acción solicitada por el usuario (por ejemplo, el controlador actualiza el carro de la compra del usuario). Los controladores complejos están a menudo estructurados usando un patrón de comando que encapsula las acciones y simplifica su extensión. 4. El controlador delega a los objetos de la vista la tarea de desplegar la interfaz de usuario. La vista obtiene sus datos del modelo para generar la interfaz apropiada para el usuario donde se refleja los cambios en el modelo (por ejemplo, produce un listado del contenido del carro de la compra). El modelo no debe tener conocimiento directo sobre la vista. Sin embargo, el patrón de observador puede ser utilizado para proveer cierta indirección entre el modelo y la vista, permitiendo al modelo notificar a los interesados de cualquier cambio. Un objeto vista puede registrarse con el modelo y esperar a los cambios, pero aun así el modelo en sí mismo sigue sin saber nada de la vista. El controlador no pasa objetos de dominio (el modelo) a la vista aunque puede dar la orden a la vista para que se actualice. Nota: En algunas implementaciones la vista no tiene acceso directo al modelo, dejando que el controlador envíe los datos del modelo a la vista. 5. La interfaz de usuario espera nuevas interacciones del usuario, comenzando el ciclo nuevamente. 219

219 5.4 El lenguaje de programación: Python En los siguientes apartados haremos una introdución al lenguje de programación Python y resaltaremos algunas de suspeculiaridades Introducción a Python Python es un lenguaje de programación interpretado creado por Guido van Rossum en el año Es un lenguaje de programación de alto nivel cuya filosofía hace hincapié en una sintaxis muy limpia y que favorezca un código legible. Se trata de un lenguaje de programación multiparadigma ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Usa tipado dinámico, es fuertemente tipado y es multiplataforma. Es administrado por la Python Software Foundation. Posee una licencia de código abierto, denominada Python Software Foundation License, que es compatible con la Licencia pública general de GNU a partir de la versión 2.1.1, e incompatible en ciertas versiones anteriores. Se compara habitualmente con Tcl, Perl, Scheme, Java y Ruby. En la actualidad Python se desarrolla como un proyecto de código abierto, administrado por la Python Software Foundation. Python es considerado como la "oposición leal" a Perl, lenguaje con el cual mantiene una rivalidad amistosa. Los usuarios de Python consideran a este mucho más limpio y elegante para programar. Actualmente (Enero 2014) se encuentra en la posición del ranking TIOBE 29, este ranking indica la popularidad de los lenguajes de programación. En el año 2010 fue el lenguaje de programación que más aumentó en popularidad

220 Sistema de Administración básica de una centralita VoIP Algunas particularidades de Python Python permite dividir el programa en módulos reutilizables desde otros programas Python. Viene con una gran colección de módulos estándar que se pueden utilizar como base de los programas (o como ejemplos para empezar a aprender Python). También hay módulos incluidos que proporcionan entrada/salida de ficheros, llamadas al sistema, sockets y hasta interfaces gráficas (GUI) como Tk, GTK, Qt, entre otros. Al ser un lenguaje de programación interpretado, ahorra un tiempo considerable en el desarrollo del programa, pues no es necesario compilar ni enlazar. El intérprete de Python estándar incluye un modo interactivo, en el cual se escriben las instrucciones en una especie de intérprete de comandos: las expresiones pueden ser introducidas una a una, pudiendo verse el resultado de su evaluación inmediatamente. Esto resulta útil tanto para las personas que se están familiarizando con el lenguaje como también para los programadores más avanzados: se pueden probar porciones de código en el modo interactivo antes de integrarlo como parte de un programa. Existen otros programas, tales como IDLE, bpython o IPython, que añaden funcionalidades extra al modo interactivo, como el autocompletado de código y el coloreado de la sintaxis del lenguaje. Los comentarios se inician con el símbolo #, y se extienden hasta el final de la línea. El intérprete no tiene en cuenta los comentarios, lo cual es útil si deseamos poner información adicional en nuestro código como, por ejemplo, una explicación sobre el comportamiento de una sección del programa. Las variables se definen de forma dinámica. Se usa el símbolo = para asignar valores. Los tipos de datos se pueden resumir en esta tabla: 221

221 Figura 74: Tipos de datos en Python - Mutable: si su contenido (o dicho valor) puede cambiarse en tiempo de ejecución. - Inmutable: si su contenido (o dicho valor) no puede cambiarse en tiempo de ejecución. Las funciones se definen con la palabra clave def, seguida del nombre de la función y sus parámetros. Otra forma de escribir funciones, aunque menos utilizada, es con la palabra clave lambda (que aparece en lenguajes funcionales como Lisp). El valor devuelto en las funciones con def será el dado con la instrucción return. Las clases se definen con la palabra clave class, seguida del nombre de la clase y, si hereda de otra clase, el nombre de esta. Una sentencia condicional (if) ejecuta su bloque de código interno sólo si se cumple cierta condición. Se define usando la palabra clave if seguida de la condición, y el bloque de código. Condiciones adicionales, si las hay, se introducen usando elif seguida de la condición y su bloque de código. Todas las condiciones se evalúan secuencialmente hasta encontrar la primera que sea verdadera, y su bloque de código asociado es el único que se ejecuta. Opcionalmente, puede haber un bloque final (la palabra clave else seguida de un bloque de código) que se ejecuta sólo cuando todas las condiciones fueron falsas. 222

222 Sistema de Administración básica de una centralita VoIP El bucle for es similar a foreach en otros lenguajes. Recorre un objeto iterable, como una lista, una tupla o un generador, y por cada elemento del iterable ejecuta el bloque de código interno. Se define con la palabra clave for seguida de un nombre de variable, seguido de in, seguido del iterable, y finalmente el bloque de código interno. En cada iteración, el elemento siguiente del iterable se asigna al nombre de variable especificado. El bucle while evalúa una condición y, si es verdadera, ejecuta el bloque de código interno. Continúa evaluando y ejecutando mientras la condición sea verdadera. Se define con la palabra clave while seguida de la condición, y a continuación el bloque de código interno. Para terminar y a modo resumen podemos decir que el principal objetivo que persigue este lenguaje es la facilidad, tanto de lectura, como de diseño. 223

223 5.5 Framework Web : Django Los framework Web proveen a las aplicaciones de unas infraestructuras de programación, permitiendo al usuario concentrarse en escribir código limpio y de fácil mantenimiento sin tener que reinventar nada. Django es un framework de desarrollo web de código abierto, escrito en Python, que cumple (en cierta medida) el paradigma del Modelo Vista Controlador. Fue desarrollado en origen para gestionar varias páginas orientadas a noticias de la World Company de Lawrence, Kansas, y fue liberada al público bajo una licencia BSD en julio de Su nombre hace alusión al guitarrista de jazz gitano Django Reinhardt. En Junio del 2008 anunciaron que la recién formada Django Software Foundation se haría cargo de Django en el futuro. La meta fundamental de Django es facilitar la creación de sitios web complejos. Éste framework pone énfasis en el re-uso, la conectividad y extensibilidad de componentes, del desarrollo rápido y del principio de DRY (del inglés Don't Repeat Yourself). Python es usado en todas las partes del framework, incluso en configuraciones, archivos, y en los modelos de datos. Uno de los "framework" más famosos o populares que se ha dado a conocer ha sido Ruby On Rails. Éste, abstrae completamente la interacción con bases de datos relacionales. El sistema es capaz de "adivinar" los modelos e inferir los objetos que intervienen en la aplicación con sólo examinar la definición de tablas en el sistema relacional. Hay un objeto, "ActiveRecord" que es el que relaciona o hace de puente entre el sistema relacional y el sistema orientado a objetos. Para finalizar podemos decir que basándose en algunas de las ideas de Rails y otras, han surgido bastantes herramientas de desarrollo de aplicaciones web con una orientación similar; código escaso, reusabilidad, limpieza, facilidad de mantenimiento, etc. Una vez hecha esta introducción al framework web usado para el desarrollo de la aplicación, entraremos en el tema de por qué hemos elegido éste framework y no otro. La respuesta la tenemos en la filosofía de diseño que sigue Django, la cual se seguirá en nuestro proyecto: - Menos código: Django hace uso de las capacidades dinámicas de Python. Sigue el principio DRY (Don't Repeat Yourself): cada porción de código debe 'vivir' en un sólo lugar, minimizando al máximo el mantenimiento de la aplicación. - Desarrollo veloz: El framework permite realizar las tareas tediosas del desarrollo web de una manera muy rápida. 224

224 Sistema de Administración básica de una centralita VoIP - Acoplamiento débil: Las diferentes capas que establece el framework no deben conocerse entre sí, es decir, cada capa debe de ser independiente, es decir, estar lo menos ligada posible a la capa con la que interactúa, de esta forma siempre podremos realizar modificaciones en una capa sin tener que realizar modificaciones o preocuparnos de efectos colaterales en otra capa diferente. - Consistencia: El framework debe ser consistente a todos los niveles, desde el código Python (bajo nivel) hasta el uso de Django en sí. En cuanto a lo que se refiere a las bases de datos: - Eficiencia SQL: Las sentencias SQL se ejecutan en el menor número de veces posibles, además son optimizadas internamente. Para cumplir esto por ejemplo el desarrollador tiene que llamar explícitamente el método save para actualizar los datos en la BD, por ésta razón es mejor que el framework 'invisiblemente' actualice constantemente. - Sintaxis concisa y potente: La API de la base de datos permite sentencias complejas y ricas en la menor porción de sintaxis (código) posible. Los joins de las tablas de la BD se realizan internamente si son necesarios. Cada objeto relacionado es accesible a lo largo de todo el sistema, en ambas direcciones; esto significa que si tenemos una tabla p.ej.: Libros que tiene una clave ajena (foreign key) a otra tabla Autores, en esta otra tabla de autores no aparece nada que tenga relación alguna con la de Libros, sin embargo, Django a la hora de crear las tablas a partir de los modelos, crea unos índices para que los objetos sean accesibles en ambos sentidos. Para interactuar con la BD, Django nos da la opción de usar código SQL. En cuanto a las vistas: Los desarrolladores no tienen por qué crear una, sino que con una función es suficiente. Las vistas tienen acceso a objetos request (petición que manda el cliente en forma de metadatos). La vista accede directamente a este objeto, en lugar de tener que acceder a él a través de una variable global. Por otro lado, el desarrollador se encargará de escoger el método de enviar los datos a través de la web: GET y POST. Django permite diferenciar entre uno y otro: En cuanto a lo que se refiere a las URLs: Una URL no debe estar ligada al código Python que hay detrás (acoplamiento débil). En cuanto al Sistema de plantillas: Es una herramienta que controla la presentación y la lógica de la presentación, sólo eso. No da soporte a más funcionalidad. Si hay un espacio en blanco (' ') en algún lugar de la plantilla por qué deberíamos hacer un tratamiento especial o lanzar una excepción? Todo espacio en blanco fuera de una etiqueta especial de plantilla será imprimido. 225

225 La mayoría de las aplicaciones web tienen elementos comunes en todas las páginas, una cabecera o barra de navegación. El sistema de plantillas nos permite especificar esta información en un sólo lugar, evitando la repetición innecesaria de código. Seguridad y protección: El sistema de plantillas no permite la inclusión de código malicioso, cómo podrían ser comandos que eliminen entradas de la Base de Datos. No se permite el uso de cualquier tipo de código Python en las plantillas Patrón de diseño: MVC Django. Veamos un ejemplo de MVC en Django: # models.py (las tablas de la base de datos) from django.db import models class Book(models.Model): name = models.charfield(maxlength=50) pub_date = models.datefield() # views.py (la parte lógica) from django.shortcuts import render_to_response from models import Book def latest_books(request): book_list = Book.objects.order_by('-pub_date')[:10] return render_to_response('latest_books.html' {'book_list':book_list}) # urls.py (la configuración URL) from django.conf.urls.defaults import * import views urlpatterns = patterns('', (r'latest/$', views.latest_books), ) 226

226 Sistema de Administración básica de una centralita VoIP # latest_books.html (la plantilla) <html><head><title>books</title></head> <body> <h1>books</h1> <ul> {% for book in book_list %} <li> {{book}} </li> {% endfor %} </ul> </body> </html> Lo principal que notamos es la separación de capas: El archivo models.py contiene una descripción de la tabla de la base de datos, como una clase Python. A esto se le llama el modelo. Usando esta clase se pueden crear, buscar, actualizar y borrar entradas de la base de datos usando código Python sencillo en lugar de escribir sentencias SQL. El archivo views.py contiene la lógica de la página, en la función latest_books(). A esta función se la denomina vista. El archivo urls.py especifica qué vista es llamada según el patrón URL. En este caso, la URL /latest/ será manejada por la función latest_books(). El archivo latest_books.html es una plantilla HTML que describe el diseño de la página. Una ventaja clara de este enfoque es que los componentes tienen un acoplamiento débil, esto es, cada parte de la aplicación es independiente a las otras y se pueden modificar sin afectar los cambios a las demás. 227

227 5.6 Asterisk Realtime (ARA) La arquitectura Asterisk Realtime, también llamada ARA (Asterisk Realtime Architecture), es un mecanismo que surgió a partir de la versión 1.2 de Asterisk. Que permite realizar la configuración de varias aspectos del sistema en tiempo real a través del uso de base de datos relacionales donde se guarda la información con detalle, en lugar de usar los clásicos ficheros de texto. La principal ventaja de esta arquitectura con respecto a otros modos de configuración de Asterisk, como puede ser AMI o el sistema de acceso por la consola de Asterisk (CLI), es que con estos tipos de sistemas estamos obligados a otorgar el control total del sistema a un usuario. Sin embargo, con el uso de Asterisk Realtime, al tener la configuración almacenada en una base de datos, podríamos utilizar cualquier lenguaje de programación para acceder a ella, adaptando dicha aplicación a usuarios de administración de Asterisk inexpertos. Obteniendo así una configuración más flexible y escalable. Y es precisamente por eso por lo que se ha optado por un diseño utilizando dicha arquitectura. 228

228 Sistema de Administración básica de una centralita VoIP 5.7 Asterisk Gateway Interface (AGI)30 AGI es una interfaz del sistema de Asterisk, que permite la comunicación con sistemas terceros de forma directa y servir de pasarela entre los distintos lenguajes de programación y Asterisk, mediante el uso de scripts invocados directamente desde el plan de llamada (o en inglés dialplan). La idea es usar AGI para gestionar el plan de llamada mediante scripts escritos en python. El funcionamiento de AGI es relativamente sencillo: -Primero hay que establecer una pasarela, entre el canal en curso, y un script ejecutable a voluntad. -Cuando la conexión se establece, lanza una serie de variables al script ejecutado, que son accesibles desde el mismo. La mayoría de estas variables tienen algo que ver con el canal. -El script puede ejecutar cualquier algoritmo, y entre sus secuencias, puede ejecutar comando específicos de AGI para influenciar en el flujo de llamada en curso. Este script puede perdurar en ejecución incluso después de finalizar la llamada. La pasarela AGI se establece directamente desde el plan de marcación, utilizando una de varias aplicaciones disponibles para efectuar esta gestión. Las disponibles actualmente son: - AGI() : Sería la aplicación estándar. Ejecuta la aplicación en la misma máquina que Asterisk, y se abre un flujo de entrada y salida clásico por la entrada y salida asociada correspondiente. - EAGI() : Hace referencia a Enhanced AGI, es exactamente igual que AGI, pero además se incorpora a la entrada, el canal en curso, pero solo en modo lectura. - Fast AGI() : Se diferencia de AGI, dado que el proceso se estable a través de una conexión TCP/IP (el flujo de información), concretamente por el puerto 4573, y de esta forma es posible liberar el peso de la máquina Asterisk de forma bastante eficiente. 30 Para más información acerca de la aruitectura AGI se puede consultar la wikipedia oficial de Asterisk: 229

229 En el momento que se establece la conexión AGI con cualquiera de las pasarelas, se lanzan todas las variables a la aplicación y estas son accesibles. Las variables tienen mucho que ver con el canal en curso, e incluso podemos mandar variables específicas de canal y otras posibilidades más concretas: agi_request: Ese nombre de la aplicación externa AGI que va a ser ejectuada en caso de ser AGI/eAGI, para el caso de FastAGI, es la URL que ejecutara el proceso en la máquina remota. agi_channel: El nombre del canal que ha ejecutado AGI. agi_language: El idioma seleccionado en el canal que ejecuta AGI. agi_type: El tipo de canal (SIP,IAX, etc ) agi_uniqueid: Identificador único para el canal. agi_version: Versión del sistema Asterisk en uso. agi_callerid: El identificador del llamante, de la llamada en curso. agi_dnid: El número marcado asociado al canal AGI. agi_rdnis: El número de redirección en caso que lo hubiera, asociado al canal, en otro caso pondría "unknown". agi_context: El contexto donde se ejecuto la aplicación AGI. agi_extension: La extensión del contexto. agi_priority: La prioridad de la extensión. agi_enhanced: Indicación de si eagi o AGI fue utilizado (1 significa que eagi fue utilizado). agi_accountcode: Código de cuenta en caso que utilicemos un sistema de billing. agi_threadid: El numero de proceso en el que Asterisk esta ejecutando la aplicación. agi_arg_<numero>: Considerando que numero puede ser cualquier numero natural, es la variable que almacena los argumentos que pasamos directamente desde la aplicación AGI, podría considerarse un método puro de entrada. Procesamientos y comandos Una vez que la pasarela ha sido establecida y las variables asignadas, se lanzan comandos a voluntad para interactuar con el sistema Asterisk. Para ello existen una serie de comandos específicos que ejecutaran diversas funcionalidades del sistema, algunos comandos más significativos se citan a continuación: - ANSWER : Responde la llamada entrante. - CHANNEL STATUS : Podemos sacar el estado de la llamada (contestada, llamando o no responde) - DATABASE DEL/DELTRE/GET/PUT : Comandos básicos para editar valor en AstDB. - EXEC : Ejecuta cualquier aplicación como si estuviera en el plan de marcación. - GET DATA : Recibe los tonos DTMF marcados por el llamante. - NOOP : Igual que la aplicación NoOp(). - SAY ALPHA : Dice como audio una cadena de caracteres. - RECORD : Tiene un funcionamiento similar a la aplicación Record() para grabar un sonido temporalmente. - SET VARIABLE : Podemos pasar una variable con contenido, a nuestro plan de marcación. 230

230 Sistema de Administración básica de una centralita VoIP 5.8 Proyecto PYST Existe un proyecto de software libre en fase beta llamado PYST:Python para Asterisk creado por Daniel Selans, Karl Putland, Matthew Nicholson y Ralf Schlatterbeck. Que básicamente se trata de un conjunto de interfaces y bibliotecas que encapsulan la comunicación de Asterisk con los sripts escritos en python. Las librerías del proyecto PYST utilizan Asterisk Gateway Interface (AGI) para establecer la comunicación con Asterisk. Como se ha descrito en el apartado anteriror. Para más información visita la web de sourceforge. (http://sourceforge.net/p/pyst/wiki/home/) Este proyecto nos facilitará la creación de funcionalidades mediante scripts escritos en Python, en los que incluiremos dichas librerias para abstraernos de la comunicación entre el sistema Asterisk y nuestra aplicación web. Y por que no, en un futuro poder aportar nuestro granito de arena a otro proyecto de software libre, aprovechando además la ampliación de funcionalidades de este proyecto. 231

231 5.9 Diseño de datos Diagrama de la base de datos A continuación se muestra el diagrama de la base de datos del panel de administración web Beeton. Los atributos que no pueden ser nulos aparecen en negrita: 232

232 Sistema de Administración básica de una centralita VoIP Descripción de tablas A continuación se muestran la tablas de la base de datos con todos sus atributos y sus tipos. 233

233 234

234 Sistema de Administración básica de una centralita VoIP 235

235 236

236 Sistema de Administración básica de una centralita VoIP 237

237 5.9.3 Sistema gestor para la base de datos: SQLite SQLite es un sistema de base de datos relacional, contenida en un pequña biblioteca escrita en C. SQLite es un proyecto de dominio público creado por D.Richard Hipp. A diferencia de los sitemas de gestión de base de datos cliente-servidor, el motor de SQLite no es un proceso independiente con el que el programa principal se comunica. En lugar de eso, la biblioteca SQLite se enlaza con el programa pasando a ser parte integral del mismo. El programa utiliza la funcionalidad de SQLite a través de llamadas simples a subrutinas y funciones. Esto reduce latencia en el acceso a la base de datos, debido a que las llamadas a funciones son más eficientes que la comunicación entre procesos. El conjunto de la base de datos (definiciones, tablas, índices y los propios datos), son guardados como un solo fichero estándar en la máquina host. Este diseño simple se logra bloqueando todo el fichero de base de datos al principio de cada transacción. SQLite usa un sistemas de tipos inusual. En lugar de asignar un tipo a una columna como en la mayor parte de los sistemas de base de datos SQL, los tipos se asignan a los valores individuales. Por ejemplo, se puede insertar un string en una columna de tipo entero. Por ser una base de datos simple, la hace perfecta para guardar la configuración de una centralita del proyecto. 238

238 Sistema de Administración básica de una centralita VoIP Normalización de la base de datos La normalización de la base de datos relacionales toma un esquema relacional y le aplicac un conjunto de técnicas para producir un nuevo esquema que representa la misma información pero contiene menos redundancias y evita posibles anomalías en las inserciones, actualizaciones y borrados. El proceso de normalización consiste en comprobar la secuencia si el esquema original esta en 1FN, 2FN y 3FN, analizando las dependencias funcionales en cada paso. Exigiremos que la base de datos este en tercera forma normal (3FN). Primera forma normal: Una tabla está en 1FN si sus atributos contienen valores atómicos, ninguno de nuestros atributos puede contener más de un valor, por lo tanto está en 1FN. Segunda forma normal: Un esquema está en 2FN si está en 1FN y todos sus atributos que no son la clave principal tienen dependencia funcional completa respecto a todas las claves existentes en el esquema. En otras palabras, para determinar cada atributo no clave se necesita la clave primaria completa, no vale con una subclave. La 2FN se aplica a las relaciones que tienen claves primarias compuestas por dos o más atributos. Tercera forma normal: Una relación está en tercera forma normal si, y sólo si, está en 2FN y cada atributo y cada atributo que no está incluido en la clave primaria no depende transitivamente de la clave primaria. Por lo tanto, a partir de un esquema en 2FN, tenemos que buscar dependencias funcionales entre atributos que no esten en la clave. En general, tenemos que buscar dependencias transitivas de la clave, es decir, secuencias de dependencias como la siguiente: K->A y A->B, dónde A y B no pertenecen a la clave. 239

239 6. Implementación del sistema 240

240 Sistema de Administración básica de una centralita VoIP 6.1 Aspectos relevantes de la implementación Antes de entrar en detalle con la implementación del panel de administración web, cabe destacar que en este apartado no se encuentra todos el código fuente de la misma. Ya que el objetivo de los siguientes apartados es comentar la funciones y las partes del código más relevantes. Para acceder al código fuente completo de la aplicación, basta con acceder a mi siguiente enlace de Github: https://github.com/emoronayuso/beeton Por otro lado comentar que para la maquetación de la herramienta web, se han utilizado una serie de librerias css llamadas bootstrap31, para facilitar la tarea del diseño de la aplicación. 6.2 Solución al problema de la complejidad de administrar Asterisk: Proyecto Beeton En los apartados siguientes se ira desglosando la implementación del desarrollo del panel de administración web del software Asterisk. Así como los pasos importantes para la configuración del mismo. 31 Para más información acerca de las librerías CSS de bootstrap, puedes consultar la web oficial: 241

241 6.2.1 Configurando Asterisk Realtime Este quizas sea uno de los apartados más importantes de la implementación. Y es que una de las posibilidades que ofrece Asterisk es permitir guardar los datos de su configuración en una base de datos, además de en los tradicionales ficheros de texto. Lo que permite la interacción con programas externos, en nuestro caso con la base de datos de Django que utilizará nuestra aplicación. Esta arquitectura se llama ARA32 (Asterisk Realtime Architecture), y permite actualizar la configuración de Asterisk a timpo real, lo que añade otra gran ventaja, el tener que reiniciar el sistema Asterisk cada vez que se modifique algún dato. Además al seguir manteneindo la configuración de los tradicionales ficheros de texto, hacen que Asterisk siga siendo un sistema totalmente escalable sin tener que limitarse a la configuración que ofrece en este caso el panel web. A continuación vamos a mostrar los pasos que se han seguido para la configuración de ARA: Lo primero será configurar el driver ODBC33 para la conexión de Asterisk con una base de datos SQLite, en este caso, instalaremos el driver ODBC en el Sistema Operativo Linux Debian seguimos los siguientes pasos: - Nos descargamos el driver de: - Lo instalamos con las siguientes ordenes: $./configure && make $ make install La integración de Asterisk Realtime con nuestro proyecto en Django se muestra en la siguiente figura, que muestra la configuración de todos los ficheros, para la configuración de ARA: 32 Para más información acerca de la Arquitectura de Asterisk a tiempo real (ARA), puedes consultar la guía de administración de Asterisk: https://wiki.asterisk.org/wiki/download/attachments/ /asterisk-admin-guide.pdf?api=v2 33 Para más información acerca del driver universal ODBC puedes consultar la sección de la wikipedia: 242

242 Sistema de Administración básica de una centralita VoIP Figura 75: Configuración de Asterisk Realtime usando un driver ODBC Como se observa en la figura, esta esta dividida en tres partes, la del sistema operativo Debian, que muestra la configuración básica de los dos ficheros, para el uso del driver odbc, lo más relevante de esta configuración es la especificación de la base de datos en el fichero /etc/odbc.ini,en la que se indica el fichero de base de datos SQLite que usa Asterisk por defecto /var/lib/asterisk/sqlite.db. La siguiente parte del sistema Asterisk muestra el contenido de tres ficheros de texto, el primero /etc/asterisk/res_odbc.conf lo mas relevante es el valor asignado al dsnx (Data Source Name) que representa la fuente de datos, y que hace referencia al conector definido en /etc/odbc.ini. Además al tratarse de una base de datos SQLite no hace falta indicarle un usuario y contraseña para la conexión. En el siguiente fichero de configuración de Asterisk, /etc/asterisk/res_config_sqlite.conf, se comentan las líneas de config_table y cdr_table, y se añade una línea dbfile, que le indicará a Asterisk el fichero de base de datos que usará el sistema Realtime. 243

243 El tercer fichero de la configuración de Asterisk hace referencia al tipo de configuración que gestionará Asterisk Realtime y sus tablas asociadas. Por ejemplo, la primera línea. extensions => odbc, asterisk, api_dialplan_linea, se especifica que Asterisk Realtime gestionará el fichero de configuración extensions.conf, es decir, el plan de llamada. También que usará el conector odbc asociado del contexto asterisk definido en /etc/asterisk/res_odbc.conf, y el tercer parámetro es el nombre de la tabla que guardará dicha información, en este caso la tabla se llama api_dialplan_linea. En definitiva, que por cada fichero de configuración que gestione Asterisk Realtime, se añadirá una nueva línea con las especificaciones pertinentes en /etc/asterisk/extconfig.conf. Por último, en nuestro proyecto de desarrollo de la herramienta web de administración escrito en DJANGO, crearemos un enlace simbólico de la base de datos configurada en el proyecto, a la base de datos de Asterisk. Y que accederemos a los datos mediante los diferentes modelos definidos en el proyecto. 244

244 Sistema de Administración básica de una centralita VoIP Estructura de directorios del proyecto Beeton Figura 76: Listado de directorios Tal y como se observa en la figura del árbol de directorios. Estos están organizados según las funcionalidades de la aplicación. 245

245 El archivo db_asteriskbee_sqlite.db es un enlace simbólico a la base de datos de Asterisk tal como se indicó en la figura del apartado de la configuración de Asterisk Realtime. De esta manera, obligamos al framework Django a utilizar la misma base de datos para la creación de los modelos, evitando de este modo, problemas de redundancia de datos y de sincronización. También destacar el directorio agi_bin, que será un enlace simbólico a la carpeta de scripts de asterisk donde se irán almacenadno los scripts python de las diferentes funcionalidades, como veremos más adelante. El archivo manage.py, que es el script que provee el framework Django para administrar las aplicaciones que iremos desarrollando, arrancar y detener el servidor web, creando entre otras. En el siguiente apartado iremos entrando en más detalle en cada uno de los subdirectorios. 246

246 Sistema de Administración básica de una centralita VoIP Diseño navegacional con plantillas html A continuación se muestra un diagrama con el diseño navegacional de la herramienta web, una vez que el usuario administrador se ha logueado en el sistema, junto con algunas de las plantillas HTML asociadas que iran generando las diferentes vistas: Figura 77: Diseño navegacional con plantillas HTML 247

247 6.2.4 Implementación de los diferentes servicios En este apartado se irá entrando en detalle en cada una de los servicios (subdirectorios) mostrados anteriormente Implementación del sistema de logueo del usuario administrador Para la autenticación del usuario adminsitrador, usaremos del módulo django.contrib.auth, las funciones authenticate() y login(). Y para el formulario de autenticación django.contrib.forms La función authenticated() acepta dos parámetros, username y password, y devuelve un tipo de objeto de tipo User, si la contraseña es correcta para la identificación del usuario. Si falla la comprobación (ya sea porque la contraseña es incorrecta o porque sea incorrecta la identificación del usuario), la función devolverá None Controlador login Lo primero que haremos será mapear la url en el fichero urls.py: urlpatterns = {' ', (r'^$','asteriskbee.views.home'), (r'^login/$','asteriskbee.views.ingresar'), (r'^admin/$','asteriskbee.views.admin'), (r'^cerrar/$','asteriskbee.views.cerrar'), } Figura 78: Fichero de mapeo de url del proyecto: asteriskbee/urls.py Donde en el mapeo de la url sin parametros llamaríamos a la función home del ficheros views de nuestro proyecto. El mapeo de /login (<dir_ip>:8000/login/) llamariamos a la función ingresar, que es la que se encarga de validar o no al usuario. 248

248 Sistema de Administración básica de una centralita VoIP El mapeo de /admin es el acceso a la aplicación (una vez ya logueado) y /cerrar para cerrar sesión. En el fichero views.py importamos las siguientes vistas: from from from from from from django.shortcuts import render_to_response django.contrib.auth.forms import UserCreationForm django.contrib.auth.forms import AuthenticationForm django.contrib.auth import login, authenticate, logout django.contrib.auth.decorators import login_required django.template import RequestContext Figura 79: Fichero de vistas del proyecto: asteriskbee/views.py Creamos la siguiente función para redirigir la url sin parámetros la vista de login: def home(request): return HttpResponseRedirect('/login') Figura 80: Fichero de vistas del proyecto: asteriskbee/views.py La función ingresar quedaría de la siguiente manera: def ingresar(request): if not request.user.is_anonymous(): return HttpResponseRedirect('/admin') if request.method == 'POST': formulario = AuthenticationForm(request.POST) if formulario.is_valid(): usuario = request.post['username'] clave = request.post['password'] acceso = authenticate(username=usuario, password=clave) if acceso is not None: if acceso.is_active: login(request, acceso) return HttpResponseRedirect('/admin') else: errores = True return render_to_response('ingresar.html', {'formulario':formulario,'errores': errores}, context_instance=requestcontext(request)) else: errores = True return render_to_response('ingresar.html', {'formulario':formulario,'errores': errores}, context_instance=requestcontext(request)) else: formulario = AuthenticationForm() return render_to_response('ingresar.html',{'formulario':formulario}, context_instance= RequestContext(request)) Figura 81: Función ingresar del fichero asteriskbee/views.py 249

249 Las funciones admin y cerrar quedarian def admin(request): usuario = request.user return render_to_response('admin.html',{'usuario':usuario}, context_instance=requestcontext(request)) Figura 82: Función admin del fichero def cerrar(request): logout(request) return HttpResponseRedirect('/') Figura 83: Función cerrar del fichero asteriskbee/views.py Con esto ya tendríamos todas las funciones (o vistas) necesarias para que el usuario administrador se autentifique. Ahora creamos el usuario administrador desde la shell de Django. Este método de crear usuarios se ha decidido hacer así por que no es la finalidad del proyecto gestionar usuarios, ya que solo será el único usuario administrador el que se autentique en el sistema. Accedemos a la shell de Django desde la consola: $ python manage.py shell Importamos el modelo user que hace referencia a la base de datos de usuarios: >>>from django.contrib.auth.models import User Importamos el modelo user que hace referencia a la base de datos de usuarios: >>>user = User.objects.create_user('admin') Guardamos los cambios en la base de datos: >>>user.save 250

250 Sistema de Administración básica de una centralita VoIP Salimos de la shell de python y le asignamos una clave al usuario admin que acabamos de crear mediante el script manage.py34, para que se guarde en la base de datos la clave aplicándole una encriptación hash: >>>exit() $ python manage.py changepassword admin 34 La documentación referente a la autenticación del usuario adminsitrador se ha seguido desde la web oficial del framewaork Django en: https://docs.djangoproject.com/en/1.4/topics/auth/#fields 251

251 Plantillas para el login Creamos una plantilla base para la vista de login de la aplicación, en este caso llamada login_base.html dentro del directorio templates: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>{% block titulo %}{% endblock %}</title> <link href="/css/base_login.css" rel="stylesheet" type="text/css"/> </head> <body> {% block encabezado%} {%endblock%} {% block errores_de_logueo%} {%endblock%} {%block contenido %} {%endblock%} </body> </html> Figura 84: Plantilla html para el login: asteriskbee/templates/login_base.html 252

252 Sistema de Administración básica de una centralita VoIP Implementación de la gestión del registro de llamadas Para la implementación de la funcionalidad del registro de llamadas, se haŕa uso del módulo cdr_sqlite (Call Detail Record) que provee Asterisk para el almacenamiento de los registros de llamadas en una base de datos, en este caso SQLite Configuración del módulo cdr_sqlite de Asterisk La configuración de Asterisk y la integración con el proyecto viene ilustrada en la siguiente figura: Figura 85: Configuración del módulo cdr_sqlite de Asterisk Como se observa en la figura, la aplicación api_cdr del proyecto, tendrá acceso a la base de datos del registro de llamadas de Asterisk directamente, desde el enlace simbólico. Esta aplicación no tendrá ningún modelo definido para la base de datos, ya que solo se encargará de realizar una serie de consultas definidas en el fichero de vistas (views.py) que se detalla en el siguiente apartado. Por otro lado, en la configuración de Asterisk, se muestra la activación del módulo cdr_sqlite en el fichero modules.conf, que creará la base de datos master.db automáticamente al reiniciar Asterisk con una única tabla llamada cdr con una serie de atributos definidos en el archivo de configuración cdr_sqlite3_custom.conf. 253

253 La estructura de este fichero cdr_sqlite3_custom.conf es muy básica: [master] table => cdr columns => calldate, clid, dcontext, channel, dstchannel, lastapp, lastdata, duration, billsec, disposition, amaflags, accountcode, uniqueid, userfield, test values => '${CDR(start)}','${CDR(clid)}','${CDR(dcontext)}', '${CDR(channel)}','${CDR(dstchannel)}','${CDR(lastapp)}', '${CDR(lastdata)}','${CDR(duration)}','${CDR(billsec)}', '${CDR(disposition)}','${CDR(amaflags)}','${CDR(accountcode)}', '${CDR(uniqueid)}','${CDR(userfield)}','${CDR(test)}' Figura 86: Fichero de configuración /etc/asterisk/cdr_sqlite3_cumston.conf En primer lugar definimos un único contexto llamado [master], y dentro de este, definimos los siguientes parámetros: Table: indicamos el nombre de la tabla, en este caso le llamaremos cdr. Columns: las columnas de la tabla. Values: los valores registrados por defecto de la función CDR de Asterisk. La ventaja del fichero de configuración cdr_sqlite3_custom.conf, es que podemos especificar que campos vamos a registrar a voluntad, lo que podría ser práctico en caso que deseemos utilizar este sistema de base de datos para uno fin muy específico. 254

254 Sistema de Administración básica de una centralita VoIP La descripción de la tabla cdr quedaría de la siguiente manera, según la configuración del archivo cdr_sqlite3_custom.conf35: 35 Sistema de almacenamiento personalizado de los registros de llamada de Asterisk en una base de datos SQLite: 255

255 Controlador de vistas del cdr Los ficheros para implementar el registro de llamadas serían los siguientes: Lo que hay que destacar es el fichero forms.py que usaremos para definir el formulario del envío de atributos para la consulta del registro de llamadas. Ya que no definiremos modelos para esta aplicación. Y por otro lado la base de datos del registro de llamadas (cdr.db) que será un enlace simbólico a la base de datos master.db, tal y como se indicó en el apartado anterior. Las líneas a incluir para mapear las urls en el fichero urls.py serían las siguientes: urlpatterns = {' ', (r'^admin/cdr/$',cdr), (r'^admin/cdr/generar_pdf/$',generar_pdf), } Figura 87: Fichero de mapeo de url del proyecto: asteriskbee/urls.py 256

256 Sistema de Administración básica de una centralita VoIP La función cdr del fichero views.py sería el def cdr(request): usuario=request.user bbdd = dbapi.connect(settings.static_root+"api_cdr/bbdd/cdr.db") cursor = bbdd.cursor() lista_con_formato = [] men ='' hay_fecha_ini = 0 genera_pdf = 0 if request.get: formulario = consulta_cdr_form(request.get) genera_pdf = request.get['genera_pdf'] contexto = request.get['contexto'] fecha_inicio = request.get['fecha_inicio'] fecha_fin = request.get['fecha_fin'] duracion_mas_de = request.get['duracion_mas_de'] duracion_menos_de = request.get['duracion_menos_de'] extension_llamante = request.get['extension_de'] if fecha_inicio!= '': hay_fecha_ini = 1 if fecha_fin=='': fecha_fin = datetime.now().strftime('%y-%m-%d') msg_dura = '' if duracion_mas_de=='': duracion_masde=int(0) else: duracion_masde = int(duracion_mas_de)*60 msg_dura = ' con una duracion de mas de '+duracion_mas_de+' minutos' if duracion_menos_de=='': ##Si nos esta definido el numero maximo de minutos multiplicamos por 2 los segundos que tiene un dia duracion_menosde=int(86400)*2*60 else: duracion_menosde = int(duracion_menos_de)*60 if duracion_mas_de=='': msg_dura = ' con una duracion menor de '+duracion_menos_de+' minutos' else: msg_dura = msg_dura +' y con una duracion menor de '+duracion_menos_de+' minutos' men = 'Llamadas registradas desde el '+formato_fecha(fecha_inicio) +' hasta el '+formato_fecha(fecha_fin)+msg_dura consulta = """select strftime('%d/%m/%y',calldate),strftime('%h: %M',calldate),clid,dcontext,dstchannel,duration,disposition from cdr where cast(duration as integer)>=? and cast(duration as integer)<=? and ( (julianday(calldate)>julianday(date(?))) and julianday(calldate)<julianday(date(?)) ) and dcontext in( select case when? = '*' then dcontext else (select dcontext from cdr where dcontext=?) end from cdr) order by calldate desc; """ 257

257 cursor.execute(consulta, (duracion_masde,duracion_menosde,fecha_inicio,fecha_fin,contexto,contexto,) ) else: ###Si se pulsa sobre el boton buscar sin fecha de inicio ##Llamadas de hoy del contexto seleccionado hay_fecha_ini = 0 men = " Llamadas registradas de hoy" fecha_inicio = datetime.now() consulta = """ select (strftime('%d/%m/%y',calldate))as fecha, (strftime('%h:%m',calldate))as hora,clid,dcontext,dstchannel,duration,disposition from cdr where (julianday(calldate)>julianday(date(?))) and dcontext in( select case when? = '*' then dcontext else (select dcontext from cdr where dcontext=?) end from cdr) order by calldate desc ; """ cursor.execute(consulta,(fecha_inicio,contexto,contexto,) ) #################Sacamos la lista de la ultima consulta ejecutada######## lista_registros = cursor.fetchall() lista_con_formato = formato_lista_registros(lista_registros) if extension_llamante!='': men = men + " de la extension "+extension_llamante lista_con_formato = formato_lista_registros_con_ext(lista_con_formato,extension_llamante) else: contexto ='*' formulario = consulta_cdr_form() hay_fecha_ini = 1 men = 'Llamadas registradas de hoy' fecha_inicio = datetime.now() consulta = """ select strftime('%d-%m-%y',calldate),strftime('%h: %M',calldate),clid,dcontext,dstchannel,duration,disposition from cdr where (julianday(calldate)>julianday(date(?))) and dcontext in( select case when? = '*' then dcontext else (select dcontext from cdr where dcontext=?) end from cdr) order by calldate desc; """ cursor.execute(consulta,(fecha_inicio,contexto,contexto,) ) lista_registros = cursor.fetchall() lista_con_formato = formato_lista_registros(lista_registros) cursor.close() bbdd.close() if genera_pdf == '1': return llamadas_pdf(request,formulario,lista_con_formato,men,hay_fecha_ini) return render_to_response('cdr/cdr.html',{'formulario':formulario.as_p(), 'lista_registros':lista_con_formato, 'msg' : men, 'hay_fecha_ini':hay_fecha_ini },context_instance=requestcontext(request)) Figura 88: Función cdr del fichero: /asteriskbee/api_cdr/views.py 258

258 Sistema de Administración básica de una centralita VoIP Las funciones formato_fecha, formato_lista_registros y formato_lista_registros_con_ext quedan de la siguiente manera: def formato_fecha(string_fecha): ##Formato del string_fecha: '%Y-%m-%d' fecha_lista = string_fecha.split('-') anio = fecha_lista[0] mes = fecha_lista[1] dia = fecha_lista[2] return dia+'/'+mes+'/'+anio Figura 89: Función formato_fecha del fichero: asteriskbee/api_cdr/views.py def formato_lista_registros(lista_registros): dic = [] for llamada in lista_registros: nhoras, duracion = divmod(long(str(llamada[5])), 3600) nmin, nseg = divmod(duracion,60) dic.append( (llamada[0],llamada[1],llamada[2], llamada[3],str(dest),str(nhoras).zfill(2)+':'+str(nmin).zfill (2)+':'+str(nseg).zfill(2), llamada[6]) ) return dic Figura 90: Función formato_lista_ registros fichero: asteriskbee/api_cdr/views.py def formato_lista_registros_con_ext(lista_registros, extension_llamante): dic = [] for llamada in lista_registros: lla = str(llamada[2]).split('<')[1].split('>')[0] if lla == str(extension_llamante): dic.append((llamada[0],llamada[1], llamada[2],llamada[3],llamada[4],llamada[5],llamada[6])) return dic Figura 91: Función formato_lista_registros_con_ext fichero: asteriskbee/api_cdr/views.py 259

259 Controlador de vistas para generar el informe de llamadas en pdf Para generar el informe en pdf del registro de llamadas importamos las siguientes librerias: import ho.pisa as pisa import cstringio as StringIO import cgi from django.template.loader import render_to_string from django.http import HttpResponse import codecs Figura 92: librerias para generar informa de llamadas en pdf: asteriskbee/api_cdr/views.py Las funciones para generar el informe de las llamadas en formato pdf vienen definidas de la siguiente manera: def generar_pdf(html): result = StringIO.StringIO() pdf = pisa.pisadocument (StringIO.StringIO( html.encode("utf8")), result) if not pdf.err: return HttpResponse(result.getvalue(), mimetype='application/pdf') return HttpResponse('Error al generar el PDF: %s' % cgi.escape(html)) Figura 93: Función generar_pdf: asteriskbee/api_cdr/views.py def llamadas_pdf(request, formulario, lista_con_formato,men, hay_fecha_ini): html = render_to_string('cdr/registro_de_llamadas.html', {'formulario':formulario.as_p(), 'lista_registros':lista_con_formato, 'msg' : men, 'hay_fecha_ini':hay_fecha_ini }, context_instance=requestcontext(request)) return HttpResponse(result.getvalue(), mimetype='application/pdf') Figura 94: Función llamadas_pdf: asteriskbee/api_cdr/views.py 260

260 Sistema de Administración básica de una centralita VoIP Plantillas para el registro de llamadas (cdr) Para las plantillas del registro de llamadas usaremos tres, cdr.html como base: {% extends "base.html" %} {% block titulo %} REGISTRO DE LLAMADAS {% endblock %} {% block head %} <script type="text/javascript" src="/js/refresca_div.js"> </script> {% endblock %} {% block encabezado %} <h1>registro de llamadas</h1> {% endblock %} {% block contenido %} {% include 'cdr/formulario_busqueda_cdr.html' %} <div id="div_registro_llamadas"> {% if lista_registros %} {% include 'cdr/registro_de_llamadas.html' %} {%else%} {{msg}} <p>no existe ningún registro de llamada que cumpla con ese patron de búsqueda {%endif%} </div> {% endblock %} Figura 95: Plantilla html para el cdr: asteriskbee/templates/cdr/cdr.html 261

261 <div id="div_form_busqueda_cdr"> <form id="form_busqueda_cdr" method='get' action=''>{% csrf_token %} <div id="div_campos_formulario_cdr"> Fecha Inicio:<input type="date" name="fecha_inicio"/> Fecha Fin:<input type="date" name="fecha_fin" /> {{formulario}} </div> <div id="div_imagen_genera_pdf"> <a onclick="envia_form();"> <img src="images/pdf_icono.png" height="22" width="22" />Generar informe en pdf </a> </div> <input type="hidden" id="genera_pdf" name="genera_pdf" value="0" /> <p><input type='submit' value='buscar' class="btn btn-default" /></p> </form> </div> Figura 96: Plantilla html para el cdr: asteriskbee/templates/cdr/formulario_busqueda_cdr.html El envío del formulario para generar el informa en pdf del registro de llamadas se realiza mendiante una llamada a una función javascript que se detalla a cotinuación: function envia_form(){ var statusconfirm = confirm("se va a generar el informe de llamadas en pdf... \nesta operacion puede tardar unos minutos dependiendo del numero de registros"); if (statusconfirm == true) { document.getelementbyid('genera_pdf').value=1; document.getelementbyid("form_busqueda_cdr").submit(); } } Figura 97: Función envia_form javascript para el cdr: asteriskbee/templates/js/refresca_div.js 262

262 Sistema de Administración básica de una centralita VoIP <p>registro DE LLAMADAS</p> {%ifequal hay_fecha_ini 0 %} <span style='color: red;'>debe introducir una fecha de inicio para la búsqueda</span> <p> {%endifequal%} {{msg}} <table id="tabla_cdr" cellspacing="0" border="1"> <tbody> <tr> <td>fecha</td> <td>hora </td> <td>emisor </td> <td>contexto</td> <td>receptor</td> <td>duracion</td> <td>estado</td> </tr> {% for fecha,hora,emisor,contexto,receptor,duracion,estado in lista_registros %} <tr> <td>{{fecha}} </td> <td> {{hora}} </td> <td> {{emisor}} </td> <td> {{contexto}} </td> <td> {{receptor}} </td> <td> {{duracion}} </td> <td> {% ifequal estado 'ANSWERED' %}<span style="color: green;"> RESPONDIDA</span>{% else%} {% ifequal estado 'NO ANSWER' %} NO RESPONDE {%else%} {% ifequal estado 'BUSY' %}<span style="color: blue;"> OCUPADO </span> {%else%} {% ifequal estado 'FAILED' %} <span style="color: red;"> FALLIDA</span> {%else%} {{estado}} {%endifequal%} {%endifequal%} {%endifequal%} {%endifequal %}</td> </tr> {% endfor %} </tbody> </table> Figura 98: Plantilla html para el cdr: asteriskbee/templates/cdr/registro_de_llamadas.html 263

263 Capturas de pantalla del registro de llamadas Algunas de las capturas de pantalla del sistema de búsqueda del registro de llamadas: Figura 99: Formulario del cdr Figura 100: Formulario con resultados del registro de llamadas 264

264 Sistema de Administración básica de una centralita VoIP Implementación del sistema de acceso a consola de Asterisk Modelo y formulario para la consola Para implementar el acceso por consola al cliente de Asterisk definiremos el formulario de envío de ordenes en el fichero forms.py, ya que este no estará sujeto a ningún modelo de base de datos, se muestra a continuación: from django import forms class consola_form(forms.form): comando = forms.charfield(label='comando',required=false) Figura 101: Formulario envío de ordenes por consola: asteriskbee/api_consola/forms.py Definiremos un formulario para el historial de comandos que iremos guardando en la base de datos según se vayan ejecutando las ordenes, en el archivo models.py: from django.db import models from django.forms import ModelForm class historial_comandos(models.model): comando = models.charfield(max_length=500,null=true) ##Creamos el formulario a partir del modelo class historialcomandosform(modelform): class Meta: model = historial_comandos Figura 102: Función generar_pdf: asteriskbee/api_cdr/views.py 265

265 Controlador de vistas para el acceso a la consola Las funciones encargadas de recoger el comando enviado por el formulario y de guardar en la base datos el comando ejecutado en el historial de los últimos 50 comandos ejecutados en la consola, quedaría de la siguiente manera (en views.py): from django.shortcuts import render_to_response from django.conf import settings import subprocess from asteriskbee.api_consola.forms import consola_form from models import def consola(request): usuario=request.user co_aux='' co_aux2='' tam_max_historial = 50 tam_his = historial_comandos.objects.all().count() if request.get: comando = request.get['comando'] h = historial_comandos() historial = historial_comandos.objects.all() if tam_his == 0: h.comando = comando h.save() elif tam_his == 1: h.comando = comando h.save() c = historial_comandos.objects.get(id=1) co_aux = c.comando c.comando = comando c.save() c = historial_comandos.objects.get(id=2) c.comando = co_aux c.save() else: for c in historial: if c.id==1: co_aux = c.comando c.comando = comando else: co_aux2 = c.comando c.comando = co_aux co_aux = co_aux2 c.save() if tam_his < tam_max_historial: h.comando = co_aux2 h.save() outfd = open(settings.static_root+'api_consola/archivos/archivo_out', 'w+') 266

266 Sistema de Administración básica de una centralita VoIP 'w+') errfd = open(settings.static_root+'api_consola/archivos/archivo_err', formulario = historialcomandosform() comando = request.get['comando'] subprocess.call(['asterisk', '-x', comando], stdout=outfd, stderr=errfd) outfd.close() errfd.close() fd = open(settings.static_root+'api_consola/archivos/archivo_out', 'r') output= fd.readlines() fd.close() fd = open(settings.static_root+'api_consola/archivos/archivo_err', 'r') err = fd.read() formulario = consola_form() id_comando = 0 return render_to_response('consola/consola.html',{'tam_historial': tam_his,'id_comando' : id_comando,'formulario_consola': formulario, 'salida_consola':output, 'salida_consola_error':err},context_instance=requestcontext(request)) Figura 103: Función consola: asteriskbee/api_consola/views.py def histo_comandos(request): comando_sele ='' h_comandos = historial_comandos.objects.all() if request.get: comando_s = h_comandos.get(id=request.get['id_historial_comando']) comando_sele = comando_s.comando return render_to_response('consola/form_consola.html',{ 'comando_sele' : comando_sele },context_instance=requestcontext(request)) Figura 104: Función histo_comandos: asteriskbee/api_consola/views.py 267

267 Plantillas html para el acceso a la consola cliente de Asterisk La plantilla para la consola quedaría de la siguiente manera: {%extends 'base.html'%} {% block titulo %} AsteriskBee - Consola de Asterisk {% endblock %} {% block head %} <script type="text/javascript" src="/js/refresca_div.js"> </script> {% endblock %} {% block bodyonload %} onload='carga_consola()' {%endblock%} {% block encabezado %} <h1>consola de Asterisk</h1> {% endblock %} {% block contenido %} <p> Consola de Asterisk</p> <div id="div_consola"> {% for linea in salida_consola %} <p>{{linea}}</p> {% endfor %} {{salida_consola_error}} </div> <div id="div_formulario_consola"> <form id="form_consola" method='get' action=''>{% csrf_token %} <div id="div_input_comando"> {% include 'consola/form_consola.html' %} </div> <input id="id_historial_comando" type="hidden" value="{{id_comando}}" /> <input id="id_tam_historial" type="hidden" value="{{tam_historial}}" /> </form> </div> {% endblock %} Figura 105: Plantilla html para la consola: asteriskbee/templates/consola/consola.html 268

268 Sistema de Administración básica de una centralita VoIP La plantilla html para el formulario de envío de ordenes por consola quedaría de la siguiente manera: <div class="row"> <div class="col-lg-6"> <div class="input-group"> <input class="form-control" id="id_comando" name="comando" type="text" onkeydown="carga_historial(event)" value="{{comando_sele}}" autofocus="autofocus" /> <span class="input-group-btn"> <input class="btn btn-default" id="boton_submit_form_consola" type='submit' value='ejecutar' /> </span> </div> </div> </div> Figura 106: Plantilla html para el formulario de la consola: asteriskbee/templates/consola/form_consola.html 269

269 La función javascript que se encargará de mostrar los comandos ejecutados anteriormente cuando pulsamos la tecla flecha arriba o flecha abajo sobre el input, vendría definida de la siguiente manera: function carga_historial(e){ if(window.event)keycode=window.event.keycode; else if(e) keycode=e.which; var ajax; ajax=ajaxfunction01(); //tecla arriba if (keycode == 38){ ajax.onreadystatechange=function(){ if(ajax.readystate==4){ document.getelementbyid('div_input_comando').innerhtml=ajax.responsetext; } } id = parseint(document.getelementbyid('id_historial_comando').value) + 1; if ( parseint(document.getelementbyid('id_tam_historial').value)<id ){ id = parseint(document.getelementbyid('id_tam_historial').value); }else{ id = parseint(document.getelementbyid('id_historial_comando').value) + 1; } document.getelementbyid('id_historial_comando').value = id; ajax.open("get","/admin/consola/historial_consola/? id_historial_comando="+id,true); ajax.send(null); //tecla abajo }else if(keycode == 40){ ajax.onreadystatechange=function(){ if(ajax.readystate==4){ document.getelementbyid('div_input_comando').innerhtml=ajax.responsetext; } } if (parseint(document.getelementbyid('id_historial_comando').value)>1 ){ id = parseint(document.getelementbyid('id_historial_comando').value) - 1; }else{ id=1; } document.getelementbyid('id_historial_comando').value = id; ajax.open("get","/admin/consola/historial_consola/? id_historial_comando="+id,true); ajax.send(null); } //Si el navegador no soporta la propiedad autofocus de input if(!("autofocus" in document.createelement("input")) ){ document.getelementbyid("id_comando").focus(); } } Figura 107: Función carga_historial para el historial de la consola: asteriskbee/templates/js/refresca_div.js 270

270 Sistema de Administración básica de una centralita VoIP Capturas de pantalla de la consola de Asterisk Figura 108: Ejecución del comando help en consola 271

271 Implementación de la gestión de extensiones SIP Mapeo de urls para la gestión de extensiones de tipo SIP Incluimos las siguientes líneas en el archivo urls.py: urlpatterns = {' ', (r'^admin/sip/$',ext_sip), (r'^admin/sip/crear_sip/$',add_sip), (r'^admin/sip/mod_sip/$',mod_sip), (r'^admin/sip/del_sip/$',del_sip), } Figura 109: Fichero de mapeo de url para la gestión de extensiones SIP: asteriskbee/urls.py Importación de librerías para el modelado de la gestión de extensiones SIP from django.db import models from django.forms import ModelForm from django import forms #Incluimos del modelo linea del dialplan para generar de forma dinamica el choices de context from asteriskbee.api_dialplan.models import linea Figura 110: Librerias importadas para el modelado de extensiones SIP: asteriskbee/api_extensiones/models.py 272

272 Sistema de Administración básica de una centralita VoIP Modelado de datos para las extensiones SIP Para la implementación de las extensiones tipo SIP crearemos un modelo acorde con lo especificado en el manual de administración de Asterisk36. class sip(models.model): #Creamos los campos adicionales Nombre y apellidos para darle un valor al 'callerid' #con el siguiente formato -> "Nomre Apellidos" <extension> nombre = models.charfield(max_length=80,null=true) apellidos = models.charfield(max_length=80,null=true) callerid = models.charfield(max_length=80,null=true,blank=true) username = models.charfield(max_length=80,verbose_name='usuario') name = models.charfield(max_length=80,verbose_name='extension') secret = models.charfield(max_length=80,null=true,verbose_name='clave') language = models.charfield(max_length=2,default='es',blank=true,verbose_name='idioma') host = models.charfield(max_length=31,default='dynamic') NAT_CHOICES = ( ('yes','yes'), ('no','no'), ('route','route'), ('never','never'), ) nat = models.charfield(max_length=5,choices=nat_choices,default='no') TYPE_CHOICES = ( ('friend','friend'), ('user','user'), ('peer','peer'), ) type = models.charfield(max_length=6,choices=type_choices,default='friend') accountcode = models.charfield(max_length=20,null=true,blank=true) AMAFLAGS_CHOICES = ( ('default','default'), ('omit','omit'), ('billing','billing'), ('documentation','documentation'), ) amaflags = models.charfield(max_length=13,null=true,choices=amaflags_choices,default='default') callgroup = models.charfield(max_length=10,null=true,blank=true) 36 Para el modelado de datos se ha tomado como referencia el modelo de base de datos SQLite definido en la guía de administración de Asterisk, en la página 544: https://wiki.asterisk.org/wiki/download/attachments/ /asterisk-admin-guide.pdf?api=v2 273

273 YES_NO_CHOICES =( ) ('yes','yes'), ('no','no'), cancallforward = models.charfield(max_length=3,choices=yes_no_choices,default='yes') directmedia = models.charfield(max_length=3,choices=yes_no_choices,default='yes') CONTEXTOS = [( c['context'], c['context'] ) for c in linea.objects.values('context').distinct() ] context = models.charfield(max_length=50,choices=contextos, verbose_name='contexto') defaultip = models.charfield(max_length=15,null=true,blank=true) DTMFMODE_CHOICES =( ('rfc2833','rfc2833'), ('info','info'), ('inband','inband'), ('auto','auto'), ) dtmfmode = models.charfield(max_length=7,null=true,choices=dtmfmode_choices,default='rfc2833') fromuser = models.charfield(max_length=80,null=true,blank=true) fromdomain = models.charfield(max_length=80,null=true,blank=true) insecure = models.charfield(max_length=4,null=true,default='no',blank=true) mailbox = models.charfield(max_length=50,null=true,blank=true) md5secret = models.charfield(max_length=80,null=true,blank=true) deny = models.charfield(max_length=95,null=true,blank=true) permit = models.charfield(max_length=95,null=true,blank=true) mask = models.charfield(max_length=95,null=true,blank=true) musiconhold = models.charfield(max_length=100,null=true,blank=true) pickupgroup = models.charfield(max_length=10,null=true,blank=true) qualify = models.charfield(max_length=3,null=true,default='yes',blank=true regexten = models.charfield(max_length=80,null=true,blank=true) restrictcid = models.charfield(max_length=3,null=true,choices=yes_no_choices,default='no') rtptimeout = models.charfield(max_length=3,null=true,default=60,blank=true) rtpholdtimeout = models.charfield(max_length=3,null=true,default=300,blank=true) setvar = models.charfield(max_length=100,null=true,blank=true) disallow = models.charfield(max_length=100,null=true,default='all',blank=true) allow = models.charfield(max_length=100,null=true,default='g729,ilbc,gsm,ulaw,alaw',blank=t rue) fullcontact = models.charfield(max_length=80,blank=true) ipaddr = models.charfield(max_length=15,blank=true) port = models.integerfield(default=0,null=true,blank=true) regserver = models.charfield(max_length=100,null=true,blank=true) regseconds = models.integerfield(default=0,blank=true) 274

274 Sistema de Administración básica de una centralita VoIP ##Definimos la forma de mostrar los datos al hacer una consulta, ##Para ello creamos la funcion str (self) def str (self): return '%s %s %s %s %s' % (self.nombre,self.apellidos,self.callerid,self.username,self.name) def unicode (self): return '%s %s %s %s' % (self.nombre,self.apellidos,self.username,self.name, self.secret) Figura 111: Modelado de datos de extensiones SIP: asteriskbee/api_extensiones/models.py 275

275 Formularios a partir del modelo de datos de extensiones SIP class sipuserformper(modelform): class Meta: #Ponemos el input callerid oculto callerid = forms.charfield(widget=forms.hiddeninput) widgets = { 'callerid' : forms.hiddeninput(), } #Creamos el formulario a partir del modelo definido con los atributos especificados en fields model = sip fields = ('nombre','apellidos','name','callerid') class sipuserformaco(modelform): class Meta: #####MODIFICACION DE ATRIBUTOS DEL FORMULARIO############### #Modificamos el campo secret para generar un input tipo password secret = forms.charfield(widget=forms.passwordinput) #Y Ponemos el input username de solo lectura, ya que se rellenara automaticamente con el mismo valor que la extension username = forms.charfield(widget=forms.textinput) widgets = { 'secret' : forms.passwordinput(), 'username' : forms.textinput(attrs={'readonly':'readonly',}), } model = sip fields = ('username','secret','context','language') class sipoptionform(modelform): class Meta: model = sip exclude = ('nombre','apellidos','username','callerid','name','secret','context','language') ##Creamos una formulario con todos loas campos necesario para la hora de guardarlo con save() class sipform(modelform): class Meta: model = sip Figura 112: Formularios a partir del modelo de extensiones SIP: asteriskbee/api_extensiones/models.py 276

276 Sistema de Administración básica de una centralita VoIP Plantillas html para la gestión de extensiones SIP {%extends 'base.html' %} {% block head %} <script type="text/javascript" src="/js/refresca_div.js"> </script> {% endblock %} {% block titulo %} Beeton - Extensiones SIP {% endblock %} {% block encabezado %} <h1>extensiones SIP</h1> {% endblock %} {% block contenido %} <div id="div_extensiones_sip"> <div id="div_extensiones_sip_menu"> <a href='crear_sip/' class="glyphicon glyphicon-plus">nueva extension SIP</a> </div> <div id="div_extensiones_sip_lista"> {% include 'extensiones/sip/lista_ext_sip.html' %} </div> </div> {% endblock %} Figura 113: Plantilla html base para la gestion de extensiones SIP: asteriskbee/templates/extensiones/sip/sip.html <ul> {%for key, value in mapa_extensiones_sip.items %} <li><a href="mod_sip/?id={{key}}">{{value}}</a> <a onclick="borra_sip({{key}},'{{value}}');"> <div id="div_imagen_borra_sip"><img src="images/borrar-icono-linea.png" height="22" width="22" ></div> </a> </li> {%endfor%} </ul> Figura 114: Plantilla html que genera la lista de extensiones SIP: asteriskbee/templates/extensiones/sip/lista_ext_sip.html 277

277 {%extends 'base.html'%} {% block titulo %} AsteriskBee - Extensiones SIP {% endblock %} {% block encabezado %} <h1>modificar extension SIP</h1> {% endblock %} {% block contenido %} <div id="div_form_crea_sip"> <form method="post" action="">{% csrf_token %} <input class="btn btn-default" id="boton_submit_form_crea_sip" type='submit' value='modificar Extension SIP' /> {% include 'extensiones/sip/form_ext_sip.html' %} </form> </div> {% endblock %} Figura 115: Plantilla html que genera el formulario para modificar la extension SIP: asteriskbee/templates/extensiones/sip/mod_ext_sip.html 278

278 Sistema de Administración básica de una centralita VoIP Implementación de la gestión de extensiones IAX Mapeo de urls para la gestión de extensiones de tipo IAX Incluimos las siguientes líneas en el archivo urls.py: urlpatterns = {' ', (r'^admin/iax/$',ext_iax), (r'^admin/iax/crear_iax/$',add_iax), (r'^admin/iax/mod_iax/$',mod_iax), (r'^admin/iax/del_iax/$',del_iax), } Figura 116: Fichero de mapeo de url para la gestión de extensiones IAX: asteriskbee/urls.py Importación de librerías para el modelado de la gestión de extensiones IAX from django.db import models from django.forms import ModelForm from django import forms #Incluimos del modelo linea del dialplan para generar de forma dinamica el choices de context from asteriskbee.api_dialplan.models import linea Figura 117: Librerias importadas para el modelado de extensiones IAX: asteriskbee/api_extensiones/models.py 279

279 Modelado de datos para las extensiones IAX Para la implementación de las extensiones tipo IAX crearemos un modelo acorde con lo especificado en el manual de administración de Asterisk37. class iax(models.model): YES_NO_CHOICES = ( ('yes','yes'), ('no','no'), ) nombre = models.charfield(max_length=80,null=true) apellidos = models.charfield(max_length=80,null=true) callerid = models.charfield(max_length=80,null=true,blank=true) username = models.charfield(max_length=80,verbose_name='usuario') name = models.charfield(max_length=80,primary_key=true,verbose_name='extension') TYPE_CHOICES = ( ('friend','friend'), ('user','user'), ('peer','peer'), ) type = models.charfield(max_length=6,choices=type_choices,default='friend') secret = models.charfield(max_length=80,null=true,verbose_name='clave') md5secret = models.charfield(max_length=80,null=true,blank=true) db5secret = models.charfield(max_length=100,null=true,blank=true) notransfer = models.charfield(max_length=10,null=true,blank=true) inkeys = models.charfield(max_length=100,null=true,blank=true) outkeys = models.charfield(max_length=100,null=true,blank=true) auth = models.charfield(max_length=100,null=true,blank=true) accountcode = models.charfield(max_length=100,null=true,blank=true) defaultip = models.charfield(max_length=15,null=true,blank=true) AMAFLAGS_CHOICES = ( ('default','default'), ('omit','omit'), ('billing','billing'), ('documentation','documentation'), ) amaflags = models.charfield(max_length=13,null=true,choices=amaflags_choices,default='default') CONTEXTOS = [( c['context'], c['context'] ) for c in linea.objects.values('context').distinct() ] context = models.charfield(max_length=50,choices=contextos,verbose_name='contexto') host = models.charfield(max_length=31,default='dynamic') language = models.charfield(max_length=2,default='es',blank=true,verbose_name='idioma') mailbox = models.charfield(max_length=50,null=true,blank=true) deny = models.charfield(max_length=95,null=true,blank=true) permit = models.charfield(max_length=95,null=true,blank=true) 280

280 Sistema de Administración básica de una centralita VoIP qualify = models.charfield(max_length=3,null=true,default='no',blank=true) disallow = models.charfield(max_length=100,null=true,default='all',blank=true) allow = models.charfield(max_length=100,null=true,default='alaw,g729,gsm,ulaw',blank=true) ipaddr = models.charfield(max_length=15,null=true,blank=true) port = models.integerfield(blank=true,default=4569) regseconds = models.integerfield(blank=true, default=0 ) requirecalltoken = models.charfield(max_length=15,default='auto') Figura 118: Modelado de datos de extensiones IAX: asteriskbee/api_extensiones/models.py 37 Para el modelado de datos se ha tomado como referencia el modelo de base de datos SQLite definido en la guía de administración de Asterisk, en la página 544: https://wiki.asterisk.org/wiki/download/attachments/ /asterisk-admin-guide.pdf?api=v2 281

281 Formularios a partir del modelo de datos de extensiones IAX class iaxform(moderform): class Meta: model = iax class iaxuserformper(modelform): class Meta: #Ponemos el input callerid oculto callerid = forms.charfield(widget=forms.hiddeninput) widgets = { 'callerid' : forms.hiddeninput(), } model = iax fields = ('nombre','apellidos','name','callerid') class iaxuserformaco(modelform): class Meta: secret = forms.charfield(widget=forms.passwordinput) username = forms.charfield(widget=forms.textinput) widgets = { 'secret' : forms.passwordinput(), 'username' : :forms.textinput(attrs={'readonly':'readonly',}), model = iax fields = ('username','secret','context','language') class iaxoptionform(modelform): class Meta: model = iax exclude = ('nombre','apellidos','username','callerid','name','secret','context','language') Figura 119: Formularios a partir del modelo de extensiones IAX: asteriskbee/api_extensiones/models.py 282

282 Sistema de Administración básica de una centralita VoIP Plantillas html para la gestión de extensiones IAX {%extends 'base.html' %} {% block head %} <script type="text/javascript" src="/js/refresca_div.js"> </script> {% endblock %} {% block titulo %} Beeton - Extensiones IAX {% endblock %} {% block encabezado %} <h1>extensiones IAX</h1> {% endblock %} {% block contenido %} <div id="div_extensiones_iax"> <div id="div_extensiones_iax_menu"> <a href='crear_iax/' class="glyphicon glyphicon-plus">nueva extension IAX</a> </div> <div id="div_extensiones_iax_lista"> {% include 'extensiones/iax/lista_ext_iax.html' %} </div> </div> {% endblock %} Figura 120: Plantilla html base para la gestion de extensiones IAX: asteriskbee/templates/extensiones/iax/iax.html <ul> {%for key, value in mapa_extensiones_iax.items %} <li><a href="mod_iax/?id={{key}}">{{value}}</a> <a onclick="borra_iax({{key}},'{{value}}');"> <div id="div_imagen_borra_iax"><img src="images/borrar-icono-linea.png" height="22" width="22" ></div> </a> </li> {%endfor%} </ul> Figura 121: Plantilla html que genera la lista de extensiones IAX: asteriskbee/templates/extensiones/iax/lista_ext_iax.html 283

283 {%extends 'base.html'%} {% block titulo %} Beeton - Extensiones IAX {% endblock %} {% block encabezado %} <h1>modificar extension IAX</h1> {% endblock %} {% block contenido %} <div id="div_form_crea_iax"> <form method="post" action="">{% csrf_token %} <input class="btn btn-default" id="boton_submit_form_crea_iax" type='submit' value='modificar Extension IAX' /> {% include 'extensiones/iax/form_ext_iax.html' %} </form> </div> {% endblock %} Figura 122: Plantilla html que genera el formulario para modificar la extension IAX: asteriskbee/templates/extensiones/iax/mod_ext_iax.html 284

284 Sistema de Administración básica de una centralita VoIP Implementación del servicio de monitorización del sistema Para la implemetación del sistema de monitorización y muestreo de estadísticas básicas del sistema, se ha optado por una estructura de carpetas de la siguiente manera: Dentro de la carpeta de la aplicación api_status tendremos tres carpetas más, a parte de los ficheros views.py con las funciones de vistas y models.py con la definición de los modelos de base de datos de la aplicación; la carpeta archivos que contendrá algunos ficheros temporales que se usaran en las funciones de las vistas; la carpeta bbdd que contiene el archivo de base de datos relacional sqlite utilizado para almacenar los datos de las estadísticas que se van recogiendo. Y por último la carpeta scripts_graficas que contendrá el script en python que se encargará de recoger los datos de las estadísticas, llamado recoge_marcas_graficas.py y que se irá ejecutando cada cierto tiempo mediante una tarea programada definida en el script_crontab.py. 285

285 Mapeo de urls para la monitorización y las estadísticas del sistema Incluimos las siguientes líneas en el fichero urls.py: urlpatterns = {' ', (r'^admin/status/$',server_status), (r'^admin/status/carga_cpu/$',carga_cpu), (r'^admin/status/uso_ram/$',uso_ram), (r'^admin/status/uso_sist_raiz/$',uso_sist_fich_raiz), (r'^admin/status/genera_grafica_uso_cpu_dia/ $',grafica_uso_cpu_dia), (r'^admin/status/lista_ext_reg/$',lista_extensiones_reg), } Figura 123: Fichero de mapeo de urls para la monitorización y estadísticas del sistema: asteriskbee/urls.py Importación de librerías para la monitorización y registro de estadísticas from django.shortcuts import render_to_response from django.http import HttpResponseRedirect from django.conf import settings import matplotlib matplotlib.use('agg') import os Figura 124: Librerias importadas para las vistas de muestreo de estadísticas: beeton/asteriskbee/api_status/views.py 286

286 Sistema de Administración básica de una centralita VoIP Controlador de la vista del muestreo de la carga de la cpu def carga_cpu(request): os.system("top -n 1 > "+settings.static_root+ "api_status/archivos/fich_out_carga_cpu; sed -i '1,7d' "+ settings.static_root+"api_status/archivos/fich_out_carga_cpu; cat "+ settings.static_root+"api_status/archivos/fich_out_carga_cpu tr ' ' '-' tr -s '-' cut -d '-' -f 10 tr ',' '.' > "+ settings.static_root+"api_status/archivos/fich_out_carga_cpu2") total = 0.0 f=open(settings.static_root+"api_status/archivos/fich_out_carga_cpu2",'r') while True: linea = f.readline() if not linea or float(linea)==0.0: break else: total = total + float(linea) f.close() res = total return render_to_response('server_status/carga_cpu.html', {'por_carga_cpu' : res}, context_instance=requestcontext(request) ) Figura 125: Función carga_cpu del fichero beeton/asteriskbee/api_status/views.py 287

287 Controlador de la vista de muestreo del uso de RAM def uso_ram(request): salida = os.system('free -m grep Mem: tr " " "," cut -d "," -f 20 >'+settings.static_root+'api_status/archivos/fich_out_uso_ram') f = open(settings.static_root+'api_status/archivos/fich_out_uso_ram','r') linea = f.readline().strip() salida = os.system('free -m grep Mem: tr " " "," cut -d "," -f 12 >'+settings.static_root+'api_status/archivos/fich_out_ram_total') f2 = open(settings.static_root+'api_status/archivos/fich_out_ram_total','r') linea2 = f2.readline().strip() res = int( ( int(linea)*100 ) / int(linea2) ) f.close() f2.close() return render_to_response('server_status/uso_ram.html', {'por_uso_ram' : res}, context_instance=requestcontext(request) ) Figura 126: Función uso_ram del fichero beeton/asteriskbee/api_status/views.py Controlador de la vista de muestreo del uso del sistema de ficheros def uso_sist_fich_raiz(request): os.system('df -h grep rootfs tr " " "," cut -d "," -f 26 cut -d "%" -f 1 >'+settings.static_root+'api_status/archivos/fich_out_uso_raiz') f = open(settings.static_root+'api_status/archivos/fich_out_uso_raiz','r') linea = f.readline().strip() if linea == "": res = 0 else: res = int(linea) f.close() return render_to_response('server_status/uso_sist_raiz.html', {'por_uso_sist_raiz' : res}, context_instance=requestcontext(request) ) Figura 127: Función uso_sist_fich_raiz del fichero beeton/asteriskbee/api_status/views.py 288

288 Sistema de Administración básica de una centralita VoIP Controlador de la vista de muestreo de las llamadas activas def llamadas_activas(request): os.system("asterisk -x 'core show channels' grep channel cut -d ' ' -f 1 >"+settings.static_root+'api_status/archivos/fich_out_canales_activos') f1 = open(settings.static_root+ 'api_status/archivos/fich_out_canales_activos','r') linea1 = f1.readline() canales = int (linea1) f1.close() os.system("asterisk -x 'core show channels' grep active grep -v channels cut -d ' ' -f 1 >"+ settings.static_root+ 'api_status/archivos/fich_out_llamadas_activas') f2 = open(settings.static_root+ 'api_status/archivos/fich_out_llamadas_activas','r') linea2 = f2.readline() llamadas = int (linea2) f1.close() f2.close() return render_to_response('server_status/llamadas_activas.html', {'num_llamadas_activas' : llamadas, 'num_canales_activos': canales}, context_instance=requestcontext(request) ) Figura 128: Función llamadas_activas del fichero beeton/asteriskbee/api_status/views.py Controlador de la vista de muestreo de las extensiones registradas def lista_extensiones_reg(request): lista_ext_sip_reg = sip.objects.exclude(ipaddr='').exclude(regseconds=0) lista_ext_iax_reg = iax.objects.exclude(ipaddr='').exclude(regseconds=0) return render_to_response('server_status/lista_ext_registradas.html', {'lista_ext_sip_registradas' : lista_ext_sip_reg, 'lista_ext_iax_registradas' : lista_ext_iax_reg }, context_instance=requestcontext(request) ) Figura 129: Función lista_extensiones_reg del fichero beeton/asteriskbee/api_status/views.py 289

289 Controlador de la vista de muestreo de la grafica del uso de la CPU def grafica_uso_cpu_dia(request): datos = {} directorio = settings.static_root+"api_status/" bbdd = dbapi.connect(directorio+"bbdd/estadisticas.db") cursor = bbdd.cursor() sele_valores = "select valor from api_status_marcas_graficas where tipo='cpu_dia' order by fecha_hora ;" cursor.execute(sele_valores) lista_valores = cursor.fetchall() sele_horas = "select strftime('%h:%m',fecha_hora) from api_status_marcas_graficas where tipo='cpu_dia' order by fecha_hora ;" cursor.execute(sele_horas) lista_de_listas_de_horas = cursor.fetchall() lista_horas = [] for hora in lista_de_listas_de_horas: lista_horas.append(hora[0]) cursor.close() bbdd.close() if len(lista_horas) == 20: y= lista_valores x= range(0,20) matplotlib.pyplot.ioff() plt.plot(x,y, color = 'green') plt.xticks( np.arange(20), lista_horas, rotation=45 ) plt.grid(color='b', alpha=0.5, linestyle='dashed', linewidth=0.5) plt.legend() plt.title('carga media de la CPU') plt.ylabel('porcentaje uso de CPU') plt.savefig(settings.static_root+ "templates/images/temp_graficas/grafica_uso_cpu_dia.png") plt.cla() plt.clf() plt.close() return render_to_response('server_status/grafica_uso_cpu_dia.html', {'datos' : datos}, context_instance=requestcontext(request) ) Figura 130: Función grafica_uso_cpu_dia del fichero beeton/asterisk-bee/api_status/views.py 290

290 Sistema de Administración básica de una centralita VoIP Controlador de la vista para la recogida de marcas para las estadísticas Esta función será la encarga da de ir recogiendo las diferentes marcas, y las irá guardando en la base de datos de estadísticas definida en en apartado anterior. Para su posterior uso a la hora de mostrar estadíticas y monitorizar el sistema. directorio = settings.static_root+"api_status/" ##Numero de tuplas maximas por grafica num_cpu_dia = 20 def recoge_marcas(): bbdd = dbapi.connect(directorio+"bbdd/estadisticas.db") cursor = bbdd.cursor() os.system("ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu sed '/^ 0.0 /d' > "+directorio+"scripts_graficas/temp/temp_cpu_dia; cat "+directorio+"scripts_graficas/temp/temp_cpu_dia sed 's/^[ \t]*//;s/[ \t]*$//' grep -v 'recoge_marcas_graficas.py' cut -d ' ' -f 1 > "+directorio+"scripts_graficas/temp/temp_cpu_dia2") total = 0.0 f = open(directorio+'scripts_graficas/temp/temp_cpu_dia2','r') linea = f.readline() while True: linea = f.readline() if not linea: break else: total = total + float(linea) f.close() res = total con_ordenada = """select * from api_status_marcas_graficas where tipo='cpu_dia' order by fecha_hora;""" cursor.execute(con_ordenada) p = cursor.fetchall() if len(p) < num_cpu_dia: insert = "insert into api_status_marcas_graficas (tipo,valor) values ('cpu_dia',?);" cursor.execute(insert,(res,)) bbdd.commit() else: hora_actual = datetime.now() con_update = " update api_status_marcas_graficas set fecha_hora=datetime(?),valor=? where id=?; " cursor.execute(con_update,(hora_actual,res,p[0][0])) bbdd.commit() cursor.close() bbdd.close() if name == " main ": recoge_marcas() 132: Función recoge_marcas del fichero beeton/asteriskfigura 131: bee/api_status/scripts_graficas/recoge_marcas_graficas.py 291

291 Script python para generar la tarea programada de recoger marcas para las gráficas Este script en python se ejecutará la primera vez que se instale Beeton en el sistema, y será el encargado de generar la tarea programada en contrab que se encargará de ejecutar el script recoge_marcas del apartado anterior para ir recogiendo los datos de las diferentes gráficas de monitorización y de las estadísticas. Para ello haremos uso de la librería Crontab de Python. 292

292 Sistema de Administración básica de una centralita VoIP from crontab import CronTab from django.conf import settings directorio = settings.static_root+"api_status/scripts_graficas/" tab = CronTab(user='root') cmd = 'python '+directorio+'recoge_marcas_graficas.py >/dev/null 2>&1' #############INCLUIR UNA TAREA AL CRON ################## cron_job = tab.new(cmd) #### La tarea se realizará cada 2 minutos # cron_job.minute.every(2) #Escribe el contenido al archivo de cron tab.write() ##PARA BORRAR UNA TAREA############# #cron_job = tab.find_command(cmd) #tab.remove_all(cmd) #tab.write() #################################### Figura 133: Script que genera el crontab para la ejecución del script recoge_marcas_graficas.py beeton/asterisk-bee/api_status/scripts_graficas/script_crontab.py Implementación de la gestión de planes de llamada En este apartado se mostrará todo la información relevante a la implementación del plan de llamada de la herramienta web de administración de la centralita. 293

293 Creación de la aplicación en django de los planes de llamada Para crear la aplicación en Django llamada api_dialplan realizaremos los siguientes pasos: 1- En la carpeta del proyecto /home/asteriskbee creamos la nueva aplicación con el script manage.py: $ python manage.py startapp api_dialplan 2- Movemos la carpeta a /home/asterisk-bee/asteriskbee/api_contextos/ por mera organización para tener todas nuestras aplicaciones dentro de la carpeta del proyecto: $ mv /home/asterisk-bee/api_dialplan/ /home/asterisk-bee/asteriskbee/api_dialplan/ 3- Ahora bien, activamos la nueva aplicación creada en /home/asteriskbee/asteriskbee/settings.py, añadiéndola a la lista de de aplicaciones instaladas en nuestro proyecto:... INSTALLED_APPS = (... 'asteriskbee.api_dialplan', )... Figura 134: Linea de api_dialplan en la lista de aplicaciones en settings.py Una vez creada la aplicación que gestionará los planes de llamadas, pasamos a la creación del modelo de datos Modelado de datos de los planes de llamada A la hora de crear el modelo de datos de la aplicación que gestionará los planes de llamadas tenemos que tener en cuenta el tipo de tabla que Asterisk Realtime necesita para funcionar. Para ello sacamos la tabla de la documentación oficial de la wiki de Asterisk: 294

294 Sistema de Administración básica de una centralita VoIP /* *Dialplan Realtime Table */ CREATE TABLE api_dialplan_linea ( id INTEGER, commented TINYINT(1) NOT NULL DEFAULT 0, context VARCHAR(80) NOT NULL DEFAULT '', exten VARCHAR(40) NOT NULL DEFAULT '', priority INT(11) NOT NULL DEFAULT 0, app VARCHAR(128) NOT NULL DEFAULT '', appdata VARCHAR(128) NOT NULL DEFAULT '', PRIMARY KEY (id) ); CREATE INDEX api_dialplan_linea idx commented ON api_dialplan_linea(commented); CREATE INDEX api_dialplan_linea idx context_exten_priority ON api_dialplan_linea(context, exten, priority); Figura 135: Script Tabla Realtime del Dialplan38 38 Tabla sacada de la wikipedia oficial de Asterisk del documento: https://wiki.asterisk.org/wiki/download/attachments/ /asterisk-admin-guide.pdf? api=v2, de la página 545 Hay que resaltar que el nombre de la tabla es api_dialplan_linea, es decir, que a la hora del modelado de datos en Django, hay que crear una clase llamada linea, ya que el código SQL generado por el framework asigna el nombre a la tabla con el siguiente formato: 295

295 [nombre de la aplicación]_[nombre de la clase] Por lo que el modelado de datos quedará de la siguiente manera en models.py: from django.db import models from django.forms import ModelForm from django import forms class linea(models.model): COMMENTED_CHOICES = ( ('yes','1'), ('no','0'), ) commented = models.charfield(max_length=1,choices=commented_choices,default='no') context = models.charfield(max_length=80,blank=true) exten = models.charfield(max_length=40,blank=true) priority = models.integerfield(default=0,blank=true) app = models.charfield(max_length=128,blank=true) appdata = models.charfield(max_length=128,blank=true) Figura 136: Modelo de datos para una línea del dialplan en /home/asteriskbee/asteriskbee/api_dialplan/models.py Archivo de mapeo de urls para planes de llamada 296

296 Sistema de Administración básica de una centralita VoIP urlpatterns = {' ', (r'^admin/dialplan/$',lista_contextos), (r'^admin/dialplan/crear_contexto/$',add_contexto), (r'^admin/dialplan/mod_contexto/$',mod_contexto), (r'^admin/dialplan/mod_contexto/mod_linea_comentada/ $',mod_linea_comentada), (r'^admin/dialplan/mod_contexto/borra_linea/$',borra_linea), (r'^admin/dialplan/mod_contexto/cambia_linea/$',cambia_linea), } Figura 137: Fichero de mapeo de urls para la gestión de los contextos de Asterisk: asteriskbee/urls.py Modelado de datos para los planes de llamadas El modelo de la línea de un contexto quedaría de la siguiente manera: class linea(models.model): COMMENTED_CHOICES = ( ('1','si'), ('0','no'), ) commented = models.charfield(max_length=1, choices=commented_choices,default='0') context = models.charfield(max_length=80,blank=true) exten = models.charfield(max_length=40,blank=true) priority = models.integerfield(default=0,blank=true) app = models.charfield(max_length=128,blank=true,default='agi') appdata = models.charfield(max_length=128,blank=true) Figura 138: Modela para la gestión de los contextos de Asterisk: beeton/asteriskbee/api_dialplan/models.py 297

297 class parametros(models.model): #Relacion con la tabla linea id_linea = models.foreignkey('linea', db_column='id_linea') #Relacion con la tabla aplicaciones id_api = models.foreignkey('aplicaciones', db_column='id_api') ###Un máximo de 10 parametros por línea param1 = models.charfield(max_length=200,blank=true) param2 = models.charfield(max_length=200,blank=true) param3 = models.charfield(max_length=200,blank=true) param4 = models.charfield(max_length=200,blank=true) param5 = models.charfield(max_length=200,blank=true) param6 = models.charfield(max_length=200,blank=true) param7 = models.charfield(max_length=200,blank=true) param8 = models.charfield(max_length=200,blank=true) param9 = models.charfield(max_length=200,blank=true) param10 = models.charfield(max_length=200,blank=true) Figura 139: Modelo para la gestión de los contextos de Asterisk: beeton/asteriskbee/api_dialplan/models.py 298

298 Sistema de Administración básica de una centralita VoIP class aplicaciones(models.model): nombre = models.charfield(max_length=80,blank=true) descripcion = models.textfield(max_length=300,blank=true) script = models.charfield(max_length=80,blank=true) num_para = models.integerfield(default=0,blank=true) ###Formato color: '#FF0000' ################ color = models.charfield(max_length=9,blank=true) ##Lineas separadas por '/' que se incluiran en el archivo /etc/asterisk/extensions.conf lineas_extensions_conf = models.charfield(max_length=500,null=true) ####Bandera para indicar que la aplicacion influye a TODAS las lineas del contexto, y aparecera en las opciones del contexto en vez de en la linea del dialplan, por defecto no lo es '0' es_opcion_contexto = models.charfield(max_length=1, default='0',null=true) texto_opcion_contexto = models.charfield(max_length=200,null=true) ###Nombre del archivo html de la plantilla##### Guardado en templates/dialplan/temp_api_instaladas/ ## nom_arch_temp = models.charfield(max_length=80, blank=true,null=true) #####Nombre,descripción y bit de activacion de template de cada uno de los parámetros###### nom_param1 = models.charfield(max_length=80,blank=true,null=true) des_param1 = models.charfield(max_length=200,blank=true,null=true) temp_param1 = models.charfield(max_length=1,default='0',null=true) nom_param2 = models.charfield(max_length=80,blank=true,null=true)... nom_param10 = models.charfield(max_length=80,blank=true,null=true) des_param10 = models.charfield(max_length=200,blank=true,null=true) temp_param10 = models.charfield(max_length=1,default='0',null=true) Figura 140: Modelo para la gestión de los contextos de Asterisk: beeton/asteriskbee/api_dialplan/models.py 299

299 Controlador de vistas para la gestión del plan de llamadas La función que genera la lista de contextos quedaría de la siguiente def lista_contextos(request): mapa_contextos = {} mapa = linea.objects.values('context').distinct() for contexto in mapa: mapa_contextos[contexto['context']] = contexto['context'] return render_to_response('dialplan/dialplan.html', {'mapa_contextos' : mapa_contextos }, context_instance=requestcontext(request)) Figura 141: Función para mostrar los contextos de Asterisk: beeton/asteriskbee/api_dialplan/views.py La función para crear un nuevo contexto quedaría de la siguiente manera: 300

300 Sistema de Administración básica de una centralita def add_contexto(request): if request.method == 'POST': contexto_form = contextoform(request.post) if contexto_form.is_valid(): fichero_extensions= open('/etc/asterisk/beeton_extensions.conf','a') contexto = request.post.get('context') fichero_extensions.write("["+contexto+"]\nswitch => fichero_extensions.close() ##Ahora solo quedaria crear una primera linea de contexto, por ejemplo para la extension 1 usando la aplicacion espera l = linea(context=contexto,exten=1, priority=1,appdata='esperar.py') l.save() api = aplicaciones.objects.get(script='esperar.py') param = parametros(id_linea=l,id_api=api,param1=1) param.save() return HttpResponseRedirect('/admin/dialplan/') else: contexto_form = contextoform lista = {} return render_to_response('dialplan/crear_contexto.html', {'lista_contextos' : lista, 'formulario_contexto' : contexto_form }, context_instance=requestcontext(request)) Figura 142: Función para añadir un nuevo contexto en Asterisk: beeton/asteriskbee/api_dialplan/views.py La función que permite visualizar las lineas de cada contexto seleccionado y modificar cada una de ellas, es la siguiente: 301

301 @login_required(login_url='/login') def mod_contexto(request): #Lista de posibles errores errores = [] contexto_sele = request.get.get('context') opciones_contexto = [] lista_api_op_cont = aplicacion_opcion_contexto.objects.filter(contexto=contexto_sele) for api in lista_api_op_cont: par = api_opcion_contexto_param.objects.get(id_api_opc_contexto=api.id) opciones_contexto.append (api.id_api.texto_opcion_contexto+par.parametro) lineas_sele = linea.objects.filter(context=contexto_sele) linea_sele = {} linea_form = {} aplicacion_form = {} aplicacion_nom_param_form = {} aplicaciones_des_param_form = {} aplicacion_acti_temp_param_form = {} add_linea = {} lista_api = aplicaciones.objects.all() lista_contextos = linea.objects.values('context').distinct() parametros_form = {} datos_api = {} num_param = 10 id_api = {} nombre_api = {} lista_audios = ficheros_audio.objects.all() mapa_audio = {} for audio in lista_audios: ls1 = str(audio.fichero_audio).split('/') ls2 = ls1[2].split('.') opc = ls2[0] mapa_audio[str(audio.nombre)]= opc lista_opciones = mapa_audio.keys() lista_valor_ast = mapa_audio.values() mohs = moh.objects.all() lista_moh = {} for m in mohs: lista_moh[str(m.name)] = str(m.name) lista_moh = lista_moh.values() 302

302 Sistema de Administración básica de una centralita VoIP ####Si se ha seleccionado MODIFICAR alguna linea### if request.get.get('id_linea'): id_linea_sele = request.get.get('id_linea') linea_sele = linea.objects.filter(id=id_linea_sele) if request.method == 'POST': datos_linea = linea.objects.get(pk=id_linea_sele) linea_form = lineacontextoform(request.post, instance=datos_linea) datos_param = parametros.objects.get(id_linea=id_linea_sele) parametros_form = parametroslineacontextoform(request.post, instance=datos_param) if linea_form.is_valid() and parametros_form.is_valid(): exten = linea_form.cleaned_data['exten'] ###TODOS LOS VALORES DE TODOS LOS PARAMETROS### param1 = parametros_form.cleaned_data['param1'] param2 = parametros_form.cleaned_data['param2'] param3 = parametros_form.cleaned_data['param3'] param4 = parametros_form.cleaned_data['param4'] param5 = parametros_form.cleaned_data['param5'] param6 = parametros_form.cleaned_data['param6'] param7 = parametros_form.cleaned_data['param7'] param8 = parametros_form.cleaned_data['param8'] param9 = parametros_form.cleaned_data['param9'] param10 = parametros_form.cleaned_data['param10'] linea_form.save() parametros_form.save() return HttpResponseRedirect('/admin/dialplan/mod_contexto/? context='+contexto_sele) else: datos_linea = linea.objects.get(pk=request.get.get('id_linea') linea_form = lineacontextoform(instance=datos_linea) datos_param = parametros.objects.get(id_linea=id_linea_sele) parametros_form = parametroslineacontextoform (instance=datos_param) datos_api = datos_param.id_api num_param = datos_api.num_para aplicacion_form = aplicacioncontextoform(instance=datos_api) aplicacion_nom_param_form = aplicacioncontextoparamform (instance=datos_api) aplicaciones_des_param_form = aplicacioncontextodesparamform (instance=datos_api) aplicacion_acti_temp_param_form = aplicacionbitacttemplateparamform (instance=datos_api) #############################FIN MODIFICAR LINEA################################# #############################INCLUIR NUEVA LINEA################################# if request.get.get('add_linea'): add_linea = 1 linea_form = lineacontextoform lista_api = aplicaciones.objects.all() 303

303 lista_contextos = linea.objects.values('context').distinct() ###Sacamos los datos de la aplicacion por defecto seleccionada RESPONDER_LLAMADAS con id 1 datos_api = aplicaciones.objects.get(id=1) id_api = datos_api.id nombre_api = datos_api.nombre num_param = datos_api.num_para aplicacion_form = aplicacioncontextoform(instance=datos_api) parametros_form = parametroslineacontextoform() aplicacion_nom_param_form = aplicacioncontextoparamform (instance=datos_api) aplicaciones_des_param_form = aplicacioncontextodesparamform (instance=datos_api) aplicacion_acti_temp_param_form = aplicacionbitacttemplateparamform (instance=datos_api) if request.method == 'POST': linea_form = lineacontextoform(request.post) values_post = request.post.copy() values_post. setitem ('context',request.get.get('context')) values_post. setitem ('appdata',request.post.get('script')) api_sele = aplicaciones.objects.get (script=request.post.get('script')) ##########Se incluye opcion contexto####### if api_sele.es_opcion_contexto == 1: ##Aqui es donde tendria que incluir las lineas en el fichero del plan de llamadas ##Miramos que dicho contexto no tenga ya la opcion if aplicacion_opcion_contexto.objects.filter (contexto=contexto_sele, id_api=api_sele.id).count() == 0 : api_opc_context = aplicacion_opcion_contexto (id_api=api_sele, contexto=contexto_sele) api_opc_context.save() api_opc_context = aplicacion_opcion_contexto.objects.get(id_api=api_sele,contexto=contexto_sele) parametros_form = parametroslineacontextoform (request.post) if parametros_form.is_valid() : for num in range(1,(api_sele.num_para)+1): api_op_cont_par = api_opcion_contexto_param(id_api_opc_contexto=api_opc_context, parametro=parametros_form.cleaned_data['param'+str(num)]) api_op_cont_par.save() # Y por ultimo incluimos la linea en el archivo /etc/beeton_extensions.conf fichero_extensions_r = open ('/etc/asterisk/beeton_extensions.conf', 'r') fichero_extensions_w = open ('/etc/asterisk/beeton_extensions.conf.b', 'w') for lin in fichero_extensions_r.readlines(): if lin == "["+contexto_sele+"]\n": fichero_extensions_w.write(lin) fichero_extensions_w.write (api_sele.lineas_extensions_conf) else: fichero_extensions_w.write(lin) 304 fichero_extensions_r.close() fichero_extensions_w.close()

304 Sistema de Administración básica de una centralita VoIP fichero_extensions_r = open ('/etc/asterisk/beeton_extensions.conf.b', 'r') fichero_extensions_w = open ('/etc/asterisk/beeton_extensions.conf', 'w') for lin in fichero_extensions_r.readlines(): fichero_extensions_w.write(lin) fichero_extensions_r.close() fichero_extensions_w.close() os.system('rm /etc/asterisk/beeton_extensions.conf.b') os.system('asterisk -x reload') else: ##El contexto ya tiene dicha opcion errores.append('el contexto '+contexto_sele+' ya tiene la opcion: '+api_sele.nombre) return HttpResponseRedirect('/admin/dialplan/mod_contexto/? context='+contexto_sele) ####Si la api no es opcion_contexto###### num_lineas = linea.objects.filter (context=request.get.get('context'), exten=request.post.get('exten')).count() if num_lineas > 0: linea_prioridad_max = linea.objects.filter (context=request.get.get('context'),exten=request.post.get('exten')).order_by('priority')[0] values_post. setitem ('priority',linea_prioridad_max.priority+1) else: values_post. setitem ('priority',1) linea_form = lineacontextoform(values_post) parametros_form = parametroslineacontextoform(request.post) api_form = aplicacioncontextoform(request.post) if linea_form.is_valid() and parametros_form.is_valid(): api_sele = aplicaciones.objects.get (script=request.post.get('script')) linea_form.save() linea_nueva = linea.objects.filter (context=request.get.get('context'),exten=request.post.get('exten')).order_by('priority')[0] para1 = parametros_form.cleaned_data['param1'] para2 = parametros_form.cleaned_data['param2'] para3 = parametros_form.cleaned_data['param3'] para4 = parametros_form.cleaned_data['param4'] para5 = parametros_form.cleaned_data['param5'] para6 = parametros_form.cleaned_data['param6'] 305

305 para7 = parametros_form.cleaned_data['param7'] para8 = parametros_form.cleaned_data['param8'] para9 = parametros_form.cleaned_data['param9'] para10 = parametros_form.cleaned_data['param10'] nuevos_parametros = parametros(id_api=api_sele,id_linea=linea_nueva,param1=para1, param2=para2, param3=para3, param4=para4, param5=para5, param6=para6, param7=para7, param8=para8, param9=para9, param10=para10) nuevos_parametros.save() return HttpResponseRedirect ('/admin/dialplan/mod_contexto/? context='+contexto_sele+'&add_linea=1') return render_to_response('dialplan/mod_contexto.html',{'opciones_contexto': opciones_contexto, 'errores':errores, 'lista_moh':lista_moh, 'lista_valores_audio': lista_valor_ast, 'lista_opciones_audio' : lista_opciones, 'mapa_audios' : mapa_audio, 'id_api': id_api, 'lista_contextos':lista_contextos, 'nombre_api': nombre_api, 'aplicacion_des_param_form':aplicaciones_des_param_form, 'aplicacion_nom_param_form':aplicacion_nom_param_form, 'aplicacion_temp_param_form': aplicacion_acti_temp_param_form, 'num_param':num_param, 'param_form' :parametros_form, 'lista_api': lista_api, 'add_linea': add_linea, 'aplicacion_form': aplicacion_form, 'linea_form': linea_form,'linea': linea_sele, 'lista_lineas' : lineas_sele, 'contexto' : contexto_sele }, context_instance=requestcontext(request)) Figura 143: Función para modificar o añadir una línea a un contexto: beeton/asteriskbee/api_dialplan/views.py 306

306 Sistema de Administración básica de una centralita VoIP La siguiente función se encarga de comentar la línea del plan de llamadas, para que Asterisk determine si la def mod_linea_comentada(request): contexto = request.get.get('context') extension = request.get.get('exten') prioridad = request.get.get('priority') l = linea.objects.get(context=contexto,exten=extension,priority=prioridad) if(l.commented == 1): linea.objects.filter(context=contexto,exten=extension, priority=prioridad).update(commented=0) else: linea.objects.filter(context=contexto,exten=extension, priority=prioridad).update(commented=1) return mod_contexto(request) Figura 144: Función para modificar el comentario de una línea del contexto: beeton/asteriskbee/api_dialplan/views.py La siguiente función elimina una línea de un contexto def borra_linea(request): contexto = request.get.get('context') extension = request.get.get('exten') prioridad = request.get.get('priority') lista_api = aplicaciones.objects.all() lista_lineas = linea.objects.filter(context=contexto) num = linea.objects.filter (context=contexto,exten=extension,priority=prioridad).count() if(num >= 1): l = linea.objects.get (context=contexto,exten=extension,priority=prioridad) l.delete() return render_to_response('dialplan/lista_lineas.html',{ 'lista_api': lista_api,'lista_lineas':lista_lineas }, context_instance=requestcontext(request)) Figura 145: Función para borrar una línea del contexto: beeton/asteriskbee/api_dialplan/views.py 307

307 Esta función permite cambiar la ordenación de las líneas en el plan de llamadas, asociadas a una determinada extensión. Cambia el orden de línea seleccionada incrementándola o decrementándola en def cambia_linea(request): id_linea_sele = request.get.get('id_linea_sele') linea_sele = linea.objects.get(id=id_linea_sele) li = list(linea.objects.filter (context=request.get.get('context')).values_list('id',flat=true)) pos_linea_sele = 0 pos_linea_cam = 0 for elem in li: if int(elem) == int(id_linea_sele): break pos_linea_sele = pos_linea_sele + 1 if request.get.get('bajar')=='1' and (pos_linea_sele)<len(li): pos_linea_cam = pos_linea_sele+1 else: pos_linea_cam = pos_linea_sele if request.get.get('subir')=='1' and (pos_linea_sele)>0: pos_linea_cam = pos_linea_sele-1 elif request.get.get('bajar')=='1' and (pos_linea_sele+1)<len(li): pos_linea_cam = pos_linea_sele+1 else: pos_linea_cam = pos_linea_sele linea_cam = linea.objects.get(id=li[pos_linea_cam]) if linea_sele.exten == linea_cam.exten: aux = linea_sele.priority linea_sele.priority = linea_cam.priority linea_cam.priority = aux linea_sele.save() linea_cam.save() contexto = request.get.get('context') lista_api = aplicaciones.objects.all() lista_lineas = linea.objects.filter(context=contexto) return render_to_response('dialplan/lista_lineas.html',{ 'lista_api': lista_api, 'lista_lineas': lista_lineas }, context_instance=requestcontext(request)) Figura 146: Función para cambiar la posición de una línea por otra en un contexto: beeton/asteriskbee/api_dialplan/views.py 308

308 Sistema de Administración básica de una centralita VoIP Implementación del instalador de funcionalidades del plan de llamadas Para la implementación de las diferentes funcionalidades del plan de llamadas de Beeton, y con vistas a un futuro, opté por implementar un pequeño panel de adminsitración de funcionalidades. De esta manera cubrir unos de los objetivos del proyecto, la modularidad, y de esta forma conseguir la adaptación del panel a los diferentes escenarios en los que podría actuar el sistema Asterisk. Y también conseguir que el panel tenga funcionalidades más específicas en cada caso, facilitando así su uso por parte del usuario inexperto. Para ello tendremos paquetes de funcionalidades tal y como se ilustra en la siguiente figura: Figura 147: Estructura del paquete de funcionalidad Capa de presentación: Tendremos dos ficheros para el maquetado del formulario de cada funcionalidad del plan de llamadas, un fichero html y otro fichero javascript. Además estos dos no son necesarios para crear la funcionalidad, ya que si no se incluyen en el paquete, Beeton creará por defecto un input tipo text por cada uno de los parámetros. Definición de la funcionalidad: Esta capa consta de un fichero JSON dónde se especifican los datos que se incluirán en la base de datos de Beeton en la tabla aplicaciones. Este fichero si es obligatorio que se incluya en el paquete de instalación. Lógica del plan de llamadas: Es un script en python que incluyen las librerías del proyecto de software libre PYST, y en el que se define toda la lógica de la funcionalidad. Es el script que Asterisk ejecutará desde el plan de llamadas de Beeton. 309

309 La implementación del panel de adminsitración de funcionalidades quedaría de la siguiente manera: Mapeamos de la función en el archivo urls.py del proyecto: urlpatterns = {' ', (r'^admin/admin_func/$',add_func), } Figura 148: Fichero de mapeo de urls para la administración de funcionalidades del plan de llamadas: asteriskbee/urls.py El modelo de la base de datos quedaría así: from django.db import models from django.forms import ModelForm class func(models.model): fichero_tar_gz = models.filefield (upload_to='./api_admin_func/pkg_instalados',verbose_name='añadir funcionalidad') #Creamos el formulario asociado a dicho modelo class funcform(modelform): class Meta: model = func Figura 149: Modelado para la gestión de las funcionalidades del plan de llamadas: beeton/asteriskbee/api_admin_func/models.py 310

310 Sistema de Administración básica de una centralita VoIP La función que se encarga de instalar la nueva funcionalidad en el plan de llamadas sería la siguiente: import def add_func(request): lista_app = aplicaciones.objects.values('nombre') if request.method == 'POST': formulario_upload_func = funcform(request.post, request.files)... os.system("tar -xzvf "+settings.static_root+"api_admin_func/pkg_instalados/"+str(request.files.get('fic hero_tar_gz'))+" -C "+settings.static_root+"api_admin_func/pkg_instalados/temp/") ##Una vez descomprimido abrimos el fichero json para insertar los datos en la base de datos os.system("ls "+settings.static_root+'api_admin_func/pkg_instalados/temp/'+" grep -e '.json' >"+settings.static_root+'api_admin_func/pkg_instalados/temp/nombre_fich') f = open(settings.static_root+'api_admin_func/pkg_instalados/temp/nombre_fich','r') nombre_fich_json = f.readline().strip() f.close() with open(settings.static_root+'api_admin_func/pkg_instalados/temp/'+nombre_fich_json) as data_file: data = json.load(data_file) a = aplicaciones(nombre=data["aplicacion"]["nombre"], descripcion=data["aplicacion"]["descripcion"], a.save()... Figura 150: Vista para la instalación de las funcionalidades del plan de llamadas: beeton/asteriskbee/api_admin_func/views.py 311

311 Implementación del servicio de IVR del plan de llamadas Como se vió en el apartado anterior la estructura de una funcionalidad para el plan de llamadas en la aplicación Beeton, consta de 3 capas, la capa de presentación, la capa de definición de la funcionalidad, y la capa de lógica del plan de llamadas. En este apartado nos centraremos en estas dos últimas, recogiendo lo que sería el fichero JSON que define a la funcionalidad del IVR y el fichero script es python que incluye la lógica del plan de llamadas de la operadora automática. { "aplicacion":{ "nombre" : "Operadora automatica", "descripcion" : "Esta aplicacion realiza la funcion de operadora automatica. El usuario que llame a esta extension escuchara un menu de bienvenida con una serie de opciones, entre las cuales, el usuario podra elegir", "script" : "ivr.py", "num_para" : 9, "color" : "#B5C0F8", "nom_arch_temp" : "dialplan/temp_api_instaladas/ivr.html", "lineas_extensions_conf" : "", "es_opcion_contexto" : 0, "texto_opcion_contexto" : "", "temp_param1" : 1, "nom_param1" : "Horario de mañana", "des_param1" : "Intervalo horario de mañana", "temp_param2" : 1, "nom_param2" : "Horario de tarde", "des_param2" : "Intervalo horario de tarde", "temp_param3" : 1, "nom_param3" : "Dias de horario de mañana", "des_param3" : "Intervalo de dias de la semana",... "temp_param10" : 0, "nom_param10" : "nombre del 10 parametro", "des_param10" : "descripcion del 10 parametro" } } Figura 151: Definición de la aplicación IVR del plan de llamadas: ivr.json Como se observa en la figura anterior, aquí se definie cada uno de los parámetros de la aplicación IVR, que se detallan a continuación: nombre: Es el nombre de la aplicación, y que aparecerá en la opción del desplegable, que lista todas las aplicaciones disponibles cuando se vaya a añadir una nueva línea a un contexto. script: es el nombre del script python asociado a la aplicación que contendrá la lógica del plan de llamadas. 312

312 Sistema de Administración básica de una centralita VoIP num_para: es el número de parámetros, es decir, el número de opciones que tendrá nuestra aplicación. color: es el color, es hexadecimal, de la línea que se mostrará cuando se listen la líneas de un determinado contexto. nom_arch_temp: es la ruta de la plantilla que usa la aplicación, para mostrar las opciones con un formato personalizado. lineas_extensions_conf: son las líneas, separadas por comas, que se incluiran en el fichero de configuración de Asterisk extensions.conf, para configuraciones muy específicas que solo se podrían realizar desde los ficheros de configuración de, es este caso no se incluye ninguna. es_opcion_contexto: 0 no y 1 si, indica si dicha aplicación tendrá efecto para todas las líneas definidas en ese contexto determinado, o si solo afectará a una línea en particular. texto_opcion_contexto: es el texto del menjase que aparecerá en el contexto si se ha indicado es_opción_contexto=1. Para cada uno de los 10 parámetros, se le indicarán los siguientes atributos, aquí centramos la explicaión para el parámetro 1: temp_param_1: 0 no y 1 si, se le indica a la aplicación si dicho parámetro, en este caso el primero, usará una plantilla o no, si se indica que no, el panel web creará un input tipo text para dicho parámetro. nom_param1: el nombre del parámetro 1. des_param1: El texto de ayudo que el panel web mostrará para dicho parámetro. 313

313 Los siguientes fragmentos del fichero ivr.py, muestran parte de la lógica del plan de llamadas, para la función del IVR: from pyst.agi import * from funciones_basicas import *... def ivr(): miagi = AGI() miagi.verbose(" sistema DE IVR ") ext_dest = miagi.env['agi_extension'] tipo_ext_dest = miagi.env['agi_type'] callerid = miagi.env['agi_callerid'] id_linea = get_id_linea(miagi.env['agi_context'], miagi.env['agi_extension'], miagi.env['agi_priority'])... lista = get_lista_param(id_linea)... if reproduce_menu == 1: while True: opcion_elegida = miagi.get_option(audio_menu_opciones, [1,2,3,4,5,6,7,8,9,0,'#','*'],10000) if opcion_elegida!= '*': break ##Si el usuario pulsa '0' pedimos al usuario que marque la extension if opcion_elegida == '0': extension_marcada = miagi.get_data('introduce_exten') miagi.goto_on_exit('usuarios',extension_marcada,1) else: miagi.goto_on_exit(dic[int(opcion_elegida)][0], dic[int(opcion_elegida)][1], dic[int(opcion_elegida)][2])... Figura 152: Lógica de la aplicación IVR del plan de llamadas: ivr.py Lo primero que hacemos es importar las librerías PYST cargadas en la carpeta agi del proyecto, y una serie de funciones básicas que permiten en este caso obtener el id de la línea que se está ejecutando con la función get_id_linea, pasándole tres argumentos, el contexto, la extensión destino de la llamada y su prioridad, que son variables de entorno que se inicializan con AGI, y que podemos recuperar facilmente con las librerias PYST. Luego obtenemos get_lista_param. todos los argumentos enviados desde la aplicación Beeton con 314

314 Sistema de Administración básica de una centralita VoIP Luego el script entra en un bucle infinito, hasta que se pulse cualquier tecla que no sea '*', ya que dicha opción es la de repetir el mensaje. Con la función get_option que ofrece la librería PYST, podemos hacer reproducir un fichero de audio, pasándoselo como argumento junto con una lista con las opciones permitidas, y dicha función devolverá el valor de la tecla que el usuario ha pulsado en su teléfono, es decir, la opción elegida. En función de esa opción encaminaremos la llamadas hacia uno u otro sitio, al salir del script, con la función goto_on_exit, al que se le pasa como parámetros, el contexto, la extensión y la prioridad, como destino Implementación del servicio de música en espera del plan de llamadas Con la funcionalida para la música en espera haremos lo mismo que se hizo en el aparttado anterior con la funcionalida del IVR, mostraremos solo los ficheros de ficnición de la funcionalidad (fichero JSON), y la lógica del plan de llamadas (script python). { "aplicacion":{ "nombre" : "Musica en espera", "descripcion" : "Reproduce un archivo de audio determinado mientras se realiza la llamada. NOTA: incluir la linea delante de la funcionalidad de recibir llamadas", "script" : "moh.py", "num_para" : 1, "color" : "#F4BF79", "nom_arch_temp" : "dialplan/temp_api_instaladas/moh.html", "lineas_extensions_conf" : "", "es_opcion_contexto" : 0, "texto_opcion_contexto" : "", "temp_param1" : 1, "nom_param1" : "Archivo de audio mp3", "des_param1" : "selecciona el archivo de audio que se reproducirá mientras se de el tono de llamada a dicha extensión",... } "temp_param10" : 0, "nom_param10" : "nombre del 10 parametro", "des_param10" : "descripcion del 10 parametro" } Figura 153: Definición de la aplicación música en espera del plan de llamadas: moh.json 315

315 El fichero de la lógica para el plan de llamadas de la función de la música en espera sería el siguiente: from pyst.agi import * from funciones_basicas import *... def moh(): miagi = AGI() miagi.verbose(" sistem de música en espera ") id_linea = get_id_linea(miagi.env['agi_context'], miagi.env['agi_extension'], miagi.env['agi_priority']) lista = get_lista_param(id_linea) if str(lista[0])!= "": miagi.appexec('setmusiconhold',str(lista[0]))... Figura 154: Lógica de la aplicación música en espera del plan de llamadas: moh.py Como en el ejemplo anterior de la función del IVR, aquí importamos las librerías del proyecto PYST y las funciones básicas. Sacamos la lista de parámetros de dicha línea con get_lista_param, y luego ejecutamos la aplicación setmusiconhold de Asterisk y le pasamos como único parámetro el fichero de audio seleccionado. Esto hará que cuando se dé el tono de llamada, se reproduzca dicho audio seleccionado. 316

316 Sistema de Administración básica de una centralita VoIP Otras funcionalidades del plan de llamadas Otro de los script que tenemos que mencionar es la aplicación que permite relizar salto incondicionales entre el mismo o diferentes contextos, de esta manera podemos relizar llamadas que se encuentren en un contexto diferente. from pyst.agi import * from funciones_basicas import *... def salto(): miagi = AGI() miagi.verbose(" salto incondicional ") id_linea = get_id_linea(miagi.env['agi_context'], miagi.env['agi_extension'], miagi.env['agi_priority']) lista = get_lista_param(id_linea) opcion_salto = str(lista[0])+","+str(lista[1])+","+str(lista[2]) miagi.appexec('goto', opcion_salto)... Figura 155: Lógica de la aplicación salto incondicional del plan de llamadas: salto.py Para realizar el salto basta con ejecutar la aplicación Goto de Asterisk junto con los tres parámetros requeridos, el contexto, la extension y la prioridad del destino del salto. Otra de la funciones importantes, es la que permite que una extensión reciba llamadas: from pyst.agi import * from funciones_basicas import *... def responder_llamada(): miagi = AGI() miagi.verbose(" responder llamadas ") tipo_dest = get_tipo_exten(miagi.env['agi_extension']) opcion_dial = str(tipo_dest) + '/' + ext_dest + ',90,m,r' miagi.answer() ##Para evitar que el script termine al terminar la llamada a la aplicacion Dial#### miagi.set_variable('agisighup','no') miagi.appexec('dial', opcion_dial) miagi.set_variable('agisighup','yes') siguiente_prio = int(miagi.env['agi_priority'])+1 miagi.goto_on_exit(miagi.env['agi_context'],ext_dest,str(siguiente_prio))... Figura 156: Lógica de la aplicación recibir llamadas del plan de llamadas: responder_llamada.py 317

317 6.3 Instalación del hardware: Placa ALIX3D2 En este apartado se detalla la instalación de la placa ALIX3D2 utilizada para la instalación de Asterisk. A continuación se detalla todo el hardware utilizado en la instalción: Tajeta ALIX3D2/LX80039, con 256 MB de memoria RAM, puerto serie y USB. Compact Flash de 4GB, marca Transcend CF 133FX modelo TS4CF133. Cable convertidor de USB a Serial, de la marca TRENDnet, modelo TU-S9. Cable NULL Modem DB 9 H-H Adaptador USB multilector de tarjetas externo (Para Tarjetas Compact Flash). Carcas de aluminio y adaptador de corriente de 18V de salida. Figura 157: Hardware utilizado 39 Para más información sobre la placa ALIX3D2 puedes visitar la web oficial de pcengines: 318

318 Sistema de Administración básica de una centralita VoIP Figura 158: Placa ALIX3D2 Figura 159: Placa ALIX3D2 con carcasa de aluminio 319

319 6.4 Instalación del Sistema Operativo y Asterisk En este apartado vamos a mostrar los pasos que se han seguido para la instalación de Asterisk 1.8 en la placa ALIX3D2. Lo primero que hay que tener en cuenta es que la placa ALIX es un pequeño sistema integrado, con la potencia y las características de un ordenador real. Por lo tanto hay que evitar reinicias de forma brusca para evitar los posibles fallos de la tarjeta flash. Primero configuramos el acceso a la plca mediante serie. Para ello conectamos el cable USB/Serie al ordenador sin encender la placa ALIX todavía. En este caso y como estamos usando Linux, mas concretamente Debian, instalaremos la consola serie gtkterm desde los repositorios de Debian de la siguiente manera: $ sudo apt-get install gtkterm Si usaramos Windows, podríamos usar el software masilla. Después añadimos nuestro usuario al grupo dialout, para tener permisos para acceder a la consola serie, para ello: $ sudo adduser kike dialout Cerramos la sesión y volvemos a entrar para que los cambios tenga efecto. Luego ejecutamos la terminal serie con el siguiente comando: $ gtkterm -p /dev/ttyusb0 -s Figura 160: Acceso a la consola serie con gtkterm Si encendemos ahora la placa ALIX deberá aparecer en la consola una imagen como esta: 320

320 Sistema de Administración básica de una centralita VoIP Figura 161: Acceso a la placa ALIX desde consola serie con gtkterm Hasta aquí ya tenemos configurado el acceso a la placa ALIX mediante un terminal Serie. Lo siguiente es instalar nuestro sistema operativo, en la tarjeta Compact Flash. Conectamos la tarjeta CF al PC usando el adaptador. En nuestro caso el dispositivo de almacenamiento se ha detectado por el sistema como un disco sata /dev/sdc. Como se puede observar el dispositivo es detectado en el sistema como un disco sata /dev/sdc. A partir de aquí podemos montarlo usando la orden mount si nuestro sistema no lo ha hecho ya automáticamente. Para la instalación del sistema operativo y Asterisk se ha optado por una imagen ya preparada con Debian y Asterisk ya incluido llamado Debian-Voyage-ONE40, y seguimos los pasos definido en su fichero README para su instalación: Una vez preparada la instalación de la distribución en la tarjeta Compact Flash, la montamos en nuestra placa ALIX y conectamos el puerto serie al ordenador. Si todo ha ido bien ya tendremos nuestro sistema Linux Debian-Voyage-ONE con un Asterisk incorporado en nuestra placa ALIX. 40 Para más información sobre la distribución Debian-Voyage-ONE, puede consultar su web oficial: 321

321 7. Pruebas 322

322 Sistema de Administración básica de una centralita VoIP 7.1 Introducción En este capítulo vamos a desarrollar la etapa de pruebas de la aplicación Beeton. Al no existir pruebas automatizadas para las aplicaciones web, se ha optado por realizar dos tipos de pruebas: Algunas de las pruebas propuestas por OWASP, más adelante explicaremos que es OWASP. Una série de pruebas de rendimiento de Asterisk, realizadas con el software SIPp. 7.2 Pruebas de seguridad: OWASP Qué es OWASP? OWASP41 viene de Open Web Application Security Project, y es un espacio abierto de la comunidad dedicada a la búsqueda la lucha contra las causas del software inseguro. Todas las herramientas, documentos, foros y los capítulos de OWASP son gratuitos y están disponibles a cualquier persona interesada en mejorar la seguridad de sus aplicaciones. OWASP es un nuevo tipo de entidad en el mercado de la seguridad. Su libertad de las presiones comerciales les permite blindar información inparcial, práctica y rentable sobre seguridad de aplicaciones. OWASP no está afiliado a ninguna compañía de tecnología, sin embargo apoya la utilización de tecnología de seguridad. Se considera que la seguridad de aplicaciones es un problema de las personas, procesos y tecnología. Por esta razón, los enfoques más efectivos para seguridad de aplicaciones deben incluir mejoras en todas estas áreas. 41 Puedes visitar la web oficial del proyecto OWASP: 323

323 7.2.2 Vulnerabilidades de sesiones y autenticación del usuario adminsitrador Uno de los problemas que se puede producir con las sesiones es que se muestre en la URL el identificador de la sesión del usuario. Si otra persona utiliza esa misma URL que incluye el identificador de la sesión, dicha persona puede utilizar el perfil del usaurio original. En nuestra aplicación nunca se muestran los identificadores de sesión. Las contraseñas no se almacenan en la base de datos como texto plano, antes de almacenarla se le aplica una función Hash. Django se encarga de esto con la función set_password(contraseña), que almacena la contraseña cifrada. Dicha función utiliza el algoritmo SHA2, un algoritmo criptográfico, para evitar ataques de diccionario por fuerza bruta, se añade a cada contraseña una sal, es decir, una serie de valores iniciales aleatorios, lo que dificulta la extracción de la contraseña cifrada. La comprobación de si la contraseña es correcta se realiza con la función check_password(contraseña); de esta forma, la contraseña nunca se envía en texto plano por la red. Para comprobar esto, entramos en la base de datos de la aplicación, y vemos que el campo correspondiente a las contraseñas está cifrado. Además, en los parámetros de configuración de la aplicación (el archivos settings.py) se pone a True la siguiente variable: SESSION_EXPIRE_AT_BROWSER_CLOSE = True Con esto se consigue que cuando el usuario adminsitrador cierra en navegador, si sesión también se cierre automaticamente. Así se evita que cuando el usuario administrador apague el ordenador, si posteriormente lo usa otro usuario, no se encuentre la sesión del administrador abierta. 324

324 Sistema de Administración básica de una centralita VoIP Para ver si esto es cierto, se ha iniciado sesión en la aplicación, y sin cerrar explícitamente dicha sesión, se ha cerrado el navegador. A continuación hemos vuelto a conectarnos y no se ha encontrado ninguna sesión abierta (cosa que si ocurría antes de añadir la variable anterior) Cross-Site Request Forgery (CSRF) Crass-Site Request Forgery trata de forzar a un usuario final a ejecutar acciones no deseadas en una aplicación web en la cuál ya está autenticado. Con un poco de ayudo de ingeniería social (por ejemplo enviando un enlace vía /chat), un atacante puede forzar a los usuarios de una plicación web a ejecutar acciones a su antojo. Un exploit CSRF que tenga éxito, puede comprometer los datos de un usuario final y sus operaciones en el caso de un usuario normal. Si el usuario objetivo del ataque es la cuenta administrador, como podría ser nuestro caso, se podría comprometer la aplicación web por completo. El primer paso que hemos llevado a cabo para protegernos ante este problema es hacer que todas las peticiones GET que hay en la aplicación no produzcan efectos colaterales. El segundo paso es dotar a cada <form> que se envía por POST un campo oculto cuyo valor sea secreto y sea generado en base al identificador de sesión del usuario. Y cuando se esté realizando el procesamiento del formulario en el servidor, comprobar dicho campo secreto y generar un error si dicha comprobación no es exitosa. Esto ya está implementado en Django, y de ello se encarga la capa de prevención de CSRF de Django. El paquete django.contrib.csrf contiene solo un módulo: middleware.py. Este módulo contiene sólo una clase middleware Django: CsrfMiddleware la cual implementa la protección contra CSRF. Para activar esta protección hemos agregado a la variable de configuración MIDDLEWARE_CLASSES en nuestro archivo de configuración la siguiente línea: 'django.middleware.csrf.csrfviewmiddleware' Esto asegura que solamente se puedan usar formularios que se hayan generado en nuestra aplicación Web para enviar datos vía POST al mismo. La prueba consiste en este caso en añadir un formulario en otra aplicación web que recoja unos datos e intentar almacenarlos en la base de datos correspondiente. Y se observa que no es posible. 325

325 Fallo en la restricción de acceso a URLs. La mejor forma para comprobar si una aplicación web es susceptible a este riesgo es comprobar todas las páginas de la aplicación y considerar si la página es pública o privada. En nuestro caso todas las página seran privadas al requerir las credenciales del usuario administrador, y al trtarse de un panel de administración. Este problema ya está solventado, ya que usamos las funciones que trae el framework djngo por defecto para la autenticación del usuario, y además, añadimos a cada vista el siguiente decorador Con lo que obligamos al usuario administrador autentificarse antes de poder acceder a cada una de las páginas de la aplicación, en caso contrario, se le redirigirá a la pantalla de login Protección insuficiente en la capa de transporte. Secure Sockets Layer (SSL; protocolo de capa de conexión segura) y su sucesor Transport Layer Security (TLS; seguridad de la capa de trsnaporte) son protocolos criptográficos que proporcionan comunicaciones seguras por una red, comunmente Internet. Para que nuestra aplicación sea segura, debemos utilizar el protocolo SSL. En Django es tan fácil como añadir a nuestro archivo de configuración (settings.py), la siguiente línea: SESSION_COOKIE_SECURE = True Esto hará que Django envíe las cookies de sesión vía HTTPS, es decir, de forma segura. Además, instalaremos mediate pip, el paquete de python para django 'django-sslserver': $ pip install django-sslserver Esto nos permitirá arrancar una instancia del servidor django usando una conexión segura mediante certificado (HTTPS), usando el protocolo SSL. Para arrancar el servidor web de django utilizaremos el siguiente script (runserver.sh) escrito en bash, para automatizarlo: 326

326 Sistema de Administración básica de una centralita VoIP #!/bin/bash if [ $# -eq 0 ] [ $# -gt 1 ]; then echo "USO:" echo "Arrancar Beeton:./runserver.sh start" echo "Detener Beeton:./runserver.sh stop" else if [ $1 == "start" ]; then screen -S runserver_beeton -d -m python manage.py runserver :8000 sleep 2 HTTPS=1 screen -S runserver_beeton_ssl -d -m python manage.py runsslserver :8001 echo "Beeton se ha iniciado" elif [ $1 == "stop" ]; then pid=`netstat -lpn grep 8000 tr -s ' ' '-' cut -d '-' -f7 cut -d '/' -f1` kill -9 $pid pid=`netstat -lpn grep 8001 tr -s ' ' '-' cut -d '-' -f7 cut -d '/' -f1` kill -9 $pid echo "Beeton se ha parado" else echo "Opcion incorrecta" fi fi 327

327 7.3 Pruebas de rendimiento Dado que se ha optado por instalar Asterisk en un sistema hardware con recursos reducidos, es recomendable realizar una serie de pruebas para ver que limitaciones ofrece dicho hardware y que recursos usa Asterisk, como son el uso de la cpu, la memoria RAM y el uso de la red, cuando se realizan una serie de llamadas de forma simultánea. Para poder hacer dichas pruebas de rendiemiento de Asterisk, es necesario una herramienta que sea capaz de de generar tráfico SIP, enviar audio y proporcionar información que resulte valiosa a la hora de evaluar el funcionamiento del ordenador con Asterisk. Entre las diferentes opciones, sólo hay una aplicación que cumple estos requisitos bastantes excluyentes: SIPp. A continuación se proporciona más información sobre esta herramienta que será la base para realizar las pruebas de rendimiento sobre Asterisk Qué es SIPp? SIPp es una aplicación gratuita y libre de análisis de rendimiento para el protocolo SIP. Ésta se ha convertido en la plincipal herramienta para estudiar el comportamiento de equipamiento SIP real, como proxies SIP, B2BUAs y PBXs SIP, ya que es capaz de realizar múltiples llamadas simultáneas utilizando dicho protocolo. SIPp incluye unos cuantos escenarios prediseñados que pueden ser utilizados para analizar el redimiento en varios contextos y además permite leer configuraciones de escenarios creados de forma personalizada desde archivos XML. SIPp puede mostrar directamente en pantalla de forma dinámica los resultados estadísticos de las pruebas que se estén ejecutando (ratio de llamadas por segundo, retrase de llegada de paquetes y estadísticas sobre cada uno de los mensajes del protocolo SIP), extraer estadísticas CSV periódicas, mostrar datos sobre el tráfico UDP y TCP sobre múltiples sockets, mostrar los valores de extresiones regulares y variables que se encuentren en archivos de escenario y ajustar el ratio de llamadas por segundo dinámicamente. Otras características avanzadas que soporta SIPp son IPv6, TLS, autenticación SIP, escenarios condicionales, retransmisiones UDP, tolerancia a fallos o realización de acciones aleatorias a la recepción de un determinado mensaje. SIPp también puede enviar tráfico RTP (audio o audio con vídeo) a través del reenvío de tráfico RTP capturado en un archivo PCAP o a través de rtp_echo. Por último, pero no menos importante, SIPp es una aplicación con una documentación bastante buena que se encuentra disponible tanto en formato HTML como PDF, algo que ha sido de gran ayuda para realizar los siguientes apartados de este proyecto. 328

328 Sistema de Administración básica de una centralita VoIP Configuración del entorno de pruebas de rendimiento con SIPp A continuación se muestran los recursos y características de la placa ALIX3D2, usada para la instalación de Asterisk: Figura 162: Placa ALIX 3D2 con carcasa de aluminio - Microprocesador de 500 Mhz AMD Geode LX Memoria RAM de 256 MB DDR. - Un puerto de LAN Ethernet RJ Un puerto Serie DB9 y dos puertos USB. - Unidad de almacenamiento: Una tarjeta CompactFlash de 4 GB. Ahora bien, una vez visto los recursos de los que dispone la placa ALIX3D2, vamos a instalar y configurar el entorno de pruebas SIPp en otro ordenador de la misma red para generar las llamadas. Los passo que se muestran a continuación son para la instalación de SIPp en una máquina con Debian. Lo primero que haremos será instalar los paquetes requeridos por SIPp desde los repositorios de Debian: $ sudo apt-get install build-essential libncurses5-dev Luego descargamos y compilamos SIPp: $ wget "http://sourceforge.net/projects/sipp/files/sipp/3.3/sipp-3.3.tar.gz/download" -O sipp.svn.tar.gz $ tar -xzf sipp.svn.tar.gz $ cd sipp.svn $ make 329

329 Ahora vamos a configurar Asterisk para que acepte las llamadas generadas con SIPp, para ello usaremos nuestro panel web de admisnitración, para crear una extensión con una serie de líneas en el plan de llamadas. Para ello, desde nuestro panel web pulsamos sobre el menú, Plan de llamadas, y creamos un nuevo contexto llamado sipp : Luego nos aparecerá, en la lista de contextos, el nuevo contexto creado, si pulsamos sobre el, nos mostrará las líneas del plan de llamadas asociadas a dicho contexto, por defecto, el panel web Beeton crea una línea asociada a la extensión 1, y que realiza una espera, así que veremos algo como esto: Vamos a crear una serie de línean que acepten la llamada para la extensión 1001 en dicho contexto, y que tengan además configurada un sistema de música en espera, para ello, pulsamos sobre la opción Añadir línea : Y creamos una línea, de tipo músicoa en espera para la extensión 1001: 330

330 Sistema de Administración básica de una centralita VoIP Luego creamos otra línea para que acepte las llamadas que se realizan a la extensión 1001, para ello: Generando un plan de llamadas como la que se muestra a continuación: La configuración generada por el panel web de Beeton, es equivalente a la que propone el manual de SIPp para el testeo, editando a mano en el fichero sde configuración de Asterisk extensions.conf, que serían las siguientes: 331

331 Ya solo nos faltaría crear la extensión desde la cual SIPp realizará las llamadas, para ello pulsamos sobre el menú del panel web la opción Extensiones SIP, y creamos una nueva: Seleccionamos el contexto anteriormente creado sipp para que dicha extensión llamada sipp pueda realizar llamadas al número 1001 del contexto. Las ĺineas equivalentes en una extensión creada a mano desde el fichero de configuración de Asterisk sip.conf serían las siguientes: 332

332 Sistema de Administración básica de una centralita VoIP Resultados de las pruebas SIPp Una vez instalado y configurado SIPp, vamos a utilizar el comando htop para medir el uso de los recursos de la placa, y la herrameinta IPTraf para medir el tráfico de red generado, en cada uno de los casos. La ejecución de la herramienta SIPp en se detalla a continuación: $./sipp -s sn uac -d m 200 -r 10 -l <numero_llamadas_simultaneas> -i <IP_host_con_SIPp> <IP_Host_Asterisk> -rtp_echo Dónde: -s es al número al que vamos a llamar -d es la duración de la llamada en milisegundos -sn es el escanario SipStone que vamos a usar. Por defecto es User Agent Client. -m es el número máximo de llamadas a realizarse en la prueba. -r es el número de intentos de llamada por segundo (en inglés CAPS Call Per Second) -l es el número máximo de llamadas concurrentes que vamos a establescer en cada caso -i Estable la ip local y remota para las cabeceras 'Contact'; 'Vía'; y 'From' -rtp_echo Lanza paquete rtp de tipo echo Luego usaremos IPTraff para monitorear red, y el comando top para ver la utilización de recursos de la máquina en cada uno de los casos. 333

333 Con 5 llamadas simultáneas Los resultados de la prueba de rendimiento, generando la simulación de cinco llamadas simultánes con SIPp, y realizando además una llamada real entre dos extensiones, para comprobar la calidad del servicio son los siguientes: Parámetros del comando SIPp: $./sipp -s sn uac -d m 200 -r 10 -l 5 -i rtp_echo La ejecución del comando anterior genera la siguiente salida: Figura 163: Salida comando sipp con 5 llamadas simultaneas 334

334 Sistema de Administración básica de una centralita VoIP Comprobamos que se están realizando las llamadas en la consola cliente de asterisk, ejecutando en el host dónde está instalado el Asterisk, el siguiente comando: $ asterisk -rvvvvv Figura 164: Salida consola de Asterisk, después de ejecutar sipp 335

335 Monitorzación del uso de la red detallado con iptraf, con 5 llamadas simultáneas: Figura 165: IPtraf: Uso de red con 5 llamadas simultáneas La salida del comando htop, con 5 llamadas simultáneas es la siquiente: Figura 166: Uso de recursos con 5 llamadas simultáneas 336

336 Sistema de Administración básica de una centralita VoIP Con 10 llamadas simultáneas Los resultados de la prueba de rendimiento, generando la simulación de diez llamadas simultánes con SIPp, y realizando además una llamada real entre dos extensiones, para comprobar la calidad del servicio son los siguientes: Parámetros del comando SIPp: $./sipp -s sn uac -d m 200 -r 10 -l 10 -i rtp_echo La ejecución del comando anterior genera la siguiente salida: Figura 167: Salida comando sipp con 10 llamadas simultaneas 337

337 Monitorzación del uso de la red detallado con iptraf, con 10 llamadas simultáneas: Figura 168: IPtraf: Uso de red con 10 llamadas simultáneas La salida del comando htop, con 10 llamadas simultáneas es la siquiente: Figura 169: Uso de recursos con 10 llamadas simultáneas 338

338 Sistema de Administración básica de una centralita VoIP Con 15 llamadas simultáneas Los resultados de la prueba de rendimiento, generando la simulación de quince llamadas simultánes con SIPp, y realizando además una llamada real entre dos extensiones, para comprobar la calidad del servicio son los siguientes: Parámetros del comando SIPp: $./sipp -s sn uac -d m 200 -r 10 -l 15 -i rtp_echo La ejecución del comando anterior genera la siguiente salida: Figura 170: Salida comando sipp con 15 llamadas simultaneas 339

339 Monitorzación del uso de la red detallado con iptraf, con 15 llamadas simultáneas: Figura 171: IPtraf: Uso de red con 15 llamadas simultáneas La salida del comando htop, con 15 llamadas simultáneas es la siquiente: Figura 172: Uso de recursos con 15 llamadas simultáneas 340

340 Sistema de Administración básica de una centralita VoIP Con 20 llamadas simultáneas Los resultados de la prueba de rendimiento, generando la simulación de veinte llamadas simultánes con SIPp, y realizando además una llamada real entre dos extensiones, para comprobar la calidad del servicio son los siguientes: Parámetros del comando SIPp: $./sipp -s sn uac -d m 200 -r 10 -l 20 -i rtp_echo La ejecución del comando anterior genera la siguiente salida: Figura 173: Salida comando sipp con 20 llamadas simultaneas 341

341 Monitorzación del uso de la red detallado con iptraf, con 20 llamadas simultáneas: Figura 174: IPtraf: Uso de red con 20 llamadas simultáneas La salida del comando htop, con 20 llamadas simultáneas es la siquiente: Figura 175: Uso de recursos con 20 llamadas simultáneas 342

342 Sistema de Administración básica de una centralita VoIP Con 25 llamadas simultáneas Los resultados de la prueba de rendimiento, generando la simulación de veinte llamadas simultánes con SIPp, y realizando además una llamada real entre dos extensiones, para comprobar la calidad del servicio son los siguientes: Parámetros del comando SIPp: $./sipp -s sn uac -d m 200 -r 10 -l 25 -i rtp_echo La ejecución del comando anterior genera la siguiente salida: Figura 176: Salida comando sipp con 25 llamadas simultaneas 343

343 Monitorzación del uso de la red detallado con iptraf, con 25 llamadas simultáneas: Figura 177: IPtraf: Uso de red con 25 llamadas simultáneas Figura 178: Uso de recursos con 25 llamadas simultáneas 344

344 Sistema de Administración básica de una centralita VoIP Conclusiones de las pruebas de llamadas con SIPp En la siguiente tabla se recopilan los datos de las pruebas anteriores: Llamadas %CPU Libre 0 87,6 6 72, , , , %CPU Ocupada 12,4 27,7 46,1 68,6 82,5 100 Memoria usada (MB) Tráfico de red (kbits/s) (kbits/s) por llamada 142,3 155,5 182,3 152,9 164,8 Figura 179: Tabla de resultados de las pruebas de rendimiento Como se puede observar, el punto más crítico del aumento de las llamadas de forma simultánea es el uso de la CPU, en un ordenador con recursos reducidos. Además, en cada una de las pruebas se realizó una llamada real entre dos extensiones, para comprobar la calidad de las llamadas en cada uno de los casos, y hasta 16 llamadas simultáneas, la calidad de la llamada era aceptable, a partir de ahí, fué dificil mantener la conversación por los numerosos cortes. También puntualizar que al tener como disco duro una tarjeta compact flsh de 4 Gb, Asterisk se llegó a colgar al generar una gran cantidad de logs, por lo que hubo que borrar dichos ficheros, y volver a arrancar el sistema Asterisk. Así que podríamos asegurar un funcionamiento normal, hasta unas 15 o 16 llamadas simultáneas, a partir de ahí el sistema podría volverse inestable, y la calidad de las llamadas no sería óptima. 345

345 8. Conclusiones y futuros desarrollos del panel web Beeton Finalizado el desarrollo del panel y de haber hecho las pruebas de rendimiento se pueden sacar las siguientes conclusiones: El panel web cumple con la mayoria de los objetivos previstos al inicio del proyecto. No se termina el desarrollo de la administración de los buzones de voz de los usuarios, y queda en construcción el desarrollo de la herramienta para gestionar las colas de llamadas. El panel web Beeton permite llevar de forma simultanea la configuración avanzada de los ficheros de configuración de Asterisk, además de la configuarión del propio panel. Esto es un plus a tener en cuenta, con respecto a otros paneles web de configuración de dicho software, ya que estos recomiendan que no se modifiquen a mano los ficheros de configuración de Asterisk. Permitiendo un uso del panel desde un punto de vista docente, muy interesante y que no limita futuras configuraciones avanzadas. Con respecto al hardware utilizado, junto con las pruebas de rendimiento realizadas, la placa ALIX3D2 permite la utilización del software de Asterisk para un grupo reducido de usuarios, y la realización de unas 15 llamadas concurrentes. Teniendo siempre en cuenta el uso de la CPU, y el aumento de los ficheros de logs. Por lo que sería conveniente el amacenamiento de los logs del sistema Asterisk en un disco externo. A continuación haremos un listado de las posibles ampliaciones de las funcionalidades del panel de administración: Una funcionalidad del plan de llamadas que permita a un contexto determinado hacer llamadas a traveś de una pasarela o gateway. Una opción que permita relizar copias de seguridad de la configuración del panel, y que genere un fichero JSON o XML para una posible exportación de la configuración. Una función que genere saltos condicionales entre contextos, para encaminar las llamadas entrantes. Generar más gráficas que muestren la cantidad de llamadas diarias y mensuales, para su posterior generación de informes. Permitir el acceso a los usuarios no administradores del panel para la administración de opciones más personales, como podría ser el buzón de voz. Esto conllevaría a la realización de un panel personalizado para usuarios con permisos más restrictivos. Una funcionalidad para el panel, que permita la integración de GTalk con Asterisk. Otra funcionalidad para el panel, que permita la configuración del servicio de fax. 346

346 Sistema de Administración básica de una centralita VoIP ANEXO 1: MANUAL DE USUARIO 347

347 MANUAL DE USUARIO PROYECTO BEETON Panel de administración web de Asterisk Realizado por ENRIQUE MORÓN AYUSO 348

348 Sistema de Administración básica de una centralita VoIP 1.Introducción Este manual pretende ser una ayuda para el uso de la interfaz web de administración Beeton. 2. Instalación de BeeTon En el siguiente apartado se mostraran los pasos para la instalación de Asterisk y el panel web Beeton, sobre un sistema Linux. Lo primero será descargarnos la aplicación desde github: $ wget https://github.com/emoronayuso/beeton/archive/master.zip Una vez descargado lo descomprimimos y le damos permisos de ejecución al script install.sh: $ unzip master.zip $ cd beeton-master $ chmod +x install.sh Ejecutamos el script install.sh, el script instalará los siguientes paquetes: $./install.sh La versión de Asterisk , con las librerías (dependencias) libpri y libss Django Panel web de administración Beeton El proceso de compilación y de instalación tarda aproximadamente unos 15 minutos. A continuación se muestran algunas de las capturas de pantallas que se mostraran en el proceso: 349

349 350

350 Sistema de Administración básica de una centralita VoIP Nos aseguramos de que están todas las aplicaciones del núcleo de Asterisk seleccionadas: 351

351 Aceptamos la instalación de dependencias de django: 352

352 Sistema de Administración básica de una centralita VoIP Cuando el preoceso de instalación haya terminado, tenemos que reiniciar asterisk para que Beeton genere la base de datos: $ service asterisk restart Para iniciar o parar el panel web Beeton solo tenemos que arrancarlo desde el script runserver.sh: $./runserver start stop Para acceder al panel de adminsitración desde un navegador: El usuario y la contraseña por defecto es admin y asteriskbee respectivamente, para cambiar la contraseña del usuario admisnitrador, basta con ejecutar las siguientes líneas: $ cd /var/www $ python manage.py changepassword admin 353

353 3. Usando el panel de administración web de Beeton En el siguiente apartado entraremos en detalle en cada una de las herramientas que ofrece el panel de administración web Beeton. 3.1 El estado del sistema El estado del sistema ofrece una interfaz al usuario administrador de la centralita el uso de los recursos básicos de la máquina, además de el número de llamadas actuales y las extensiones registradas, ofrece la posibilidad de apagar la máquina. Figura 180: Estado del sistema 354

354 Sistema de Administración básica de una centralita VoIP 3.2 Registro de llamadas e informes La interfaz para la consulta del registro de llamadas es sencilla pero muy útil. Ya que ofrece la posibilidad de buscar los registros por contexto, extensión llamante y la duración de la llamada. También tiene la opción para generar un informe en formato pdf de la consulta del registro. Por defecto la consulta que se realiza es la que muestra todos los registros correspondientes a las llamadas del día, tal y como se muestra en la siguiente figura: Figura 181: Consulta del registro de llamadas por defecto Como se observa en la figura anterior, se muestran las dos únicas llamadas realizadas del día de hoy, mostrando la información relevante de cada una, como por ejemplo el estado de la misma, indicando, en este caso, que las dos llamadas han sido respondidas. Si pulsamos sobre el botón buscar, sin haber introducido ningún dato, nos mostrará el siguiente mensaje, indicándonos que debemos introducir una fecha de búsqueda inicial: Figura 182: Consulta del registro de llamadas sin datos 355

355 Si establecemos una fecha inicial de la búsqueda en el registro, nos mostrará todas las llamadas realizadas desde esa fecha hasta la fecha actual: Figura 183: Consulta registro de llamadas con fecha de inicio 356

356 Sistema de Administración básica de una centralita VoIP Una consulta al registro de llamadas con un intervalo de fecha definido, y que muestren todas las llamadas que dura más de 1 minuto quedaría de la siguiente manera: Figura 184: Consulta del registro de llamadas con varios parámetros 357

357 Generamos el informe en pdf de la siguiente consulta anterior, pulsando sobre la opción Generar informa en pdf : Figura 185: Informe del registro de llamadas en pdf 358

358 Sistema de Administración básica de una centralita VoIP 3.3 Gestión de extensiones En este apartado entraremos en detalle en la gestión de extensiones de la centralita Extensiones SIP Este apartado muestra todo lo referente a la gestión de extensiones tipo SIP Creación y modificación de extensiones SIP Para crear una extensión de tipo SIP, seleccionamos en el menú principal la opción de Extensiones SIP. Esto nos mostrará un listado con todas las extensiones SIP creadas y la opción para crear una nueva. Por defecto Beeton tiene dos extensiones SIP creadas, foo SIP <123> y bar SIP <125>, como se muestra en la siguiente figura: Figura 186: Lista de extensiones SIP Si pulsamos sobre el nombre de la extensiones podremos modificar dicha extensión: Figura 187: Extensión SIP Como se observa en la ilustración anterior, la extensión SIP cuenta de 3 partes: La información referente a la persona que tendrá asociada dicha extensión, es decir, el nombre, el apellido y el número de extensión, que este último debe ser único. Segundo la información de la cuenta, en la que el usuario para autenticarse en la centralita es la misma extensión, con la clave y el contexto asociado. 359

359 La elección del contexto es importante ya que dos extensiones no pueden establecer una comunicación entre si, si no pertenecen a un mismo contexto, aunque existen formas de hacer llamadas entre extensiones de varios contextos como veremos en el apartado de la gestión del plan de llamadas de este manual. Por defecto Beeton tiene creado un contexto denominado usuarios, con la idea de recoger todas las extensiones creadas en un mismo contexto para que puedan realizar llamadas entre ellas. Y la tercera parte de la gestión de extensiones SIP, son las opciones avanzadas, por si se requiere una configuración mas específica y mas detallada, para usuarios más avanzados. Tal y como se muestra en la siguiente figura: 360

360 Sistema de Administración básica de una centralita VoIP Figura 188: Opciones avanzadas extensiones SIP 361

361 Eliminación de extensiones SIP Para eliminar una extensión SIP, basta con pulsar el icono de la papelera asociado a cada extensión del listado: Figura 189: Eliminar extensión SIP Una vez pulsado nos pedirá la confirmación Extensiones IAX Este apartado muestra todo lo referente a la gestión de extensiones tipo IAX Creación y modificación de extensiones IAX Para crear una extensión de tipo IAX, seleccionamos en el menú principal la opción de Extensiones IAX. Esto nos mostrará un listado con todas las extensiones de tipo IAX creadas y la opción para crear una nueva. Por defecto Beeton tiene dos extensiones IAX creadas, foo IAX <223> y bar IAX <225>, como se muestra en la siguiente figura: Figura 190: Lista de extensiones IAX 362

362 Sistema de Administración básica de una centralita VoIP Si pulsamos sobre el nombre de la extensiones podremos modificar dicha extensión: Figura 191: Extensión IAX Como se observa en la ilustración anterior, la extensión IAX cuenta de 3 partes: La información referente a la persona que tendrá asociada dicha extensión, es decir, el nombre, el apellido y el número de extensión, que este último debe ser único. Segundo la información de la cuenta, en la que el usuario para autenticarse en la centralita es la misma extensión, con la clave y el contexto asociado. La elección del contexto es importante ya que dos extensiones no pueden establecer una comunicación entre si, si no pertenecen a un mismo contexto, aunque existen formas de hacer llamadas entre extensiones de varios contextos como veremos en el apartado de la gestión del plan de llamadas de este manual. Por defecto Beeton tiene creado un contexto denominado usuarios, con la idea de recoger todas las extensiones creadas en un mismo contexto para que puedan realizar llamadas entre ellas. Y la tercera parte de la gestión de extensiones IAX, son las opciones avanzadas, por si se requiere una configuración mas específica y mas detallada, para usuarios más avanzados. Tal y como se muestra en la siguiente figura: 363

363 Figura 192: Opciones avanzadas extensión IAX 364

364 Sistema de Administración básica de una centralita VoIP Eliminación de extensiones IAX Para eliminar una extensión SIP, basta con pulsar el icono de la papelera asociado a cada extensión del listado: Figura 193: Eliminación de extensión IAX Una vez pulsado nos pedirá la confirmación. 365

365 3.4 Plan de llamadas El plan de llamadas (o dialplan en inglés) es el corazón de Asterisk. En el se define que hacer con cada una de las llamadas entrantes y salientes Llamadas entre extensiones del mismo contexto Si tomamos como ejemplo las extensiones creadas anteriormente (ya sean SIP o IAX), y queremos que dos de las extensiones puedan realizar llamadas entre sí definiríamos un plan de llamadas de la siguiente manera: Pulsamos sobre la opción Plan de llamadas del menú principal, y nos mostrará una lista con los contextos creados, si usamos la configuración por defecto de Beeton veremos que existe un contexto llamado usuarios. Las extensiones solo pueden realizar llamadas entre sí si existen en el mismo contexto, mas adelante veremos como realizar llamadas entre varias extensiones que este definidas en diferentes contextos. Figura 194: Lista de contextos Ahora bien, usaremos el contexto usuarios para este ejemplo, pero es igualmente valido para otro contexto. Pulsamos sobre el nombre del contexto usuarios y nos aparecerán las líneas del plan de llamadas definidas para dicho contexto: 366

366 Sistema de Administración básica de una centralita VoIP Figura 195: Lista de lineas del contexto usuarios Vemos que existen líneas definidas para las diferentes extensiones. Centrémonos en las líneas definidas para la extensión 125: Figura 196: Lineas de espera y responder llamadas de la extensión 125 Tenemos dos líneas, la primera es una línea con prioridad 1 que hace la llamada a la función (o script) esperar. Si pulsamos sobre el icono de modificar línea nos aparecerán los parámetros de dicha línea para la función Espera en este caso y con una breve descripción: 367

367 Figura 197: Añadir línea de espera de 2 segundos a la extensión 125 Dicha línea introduce una espera de 2 segundos a cualquier extensión que llama a la extensión 125. Podemos cambiar el valor de los 2 segundos de espera por otro, y luego pulsaríamos sobre el botón Modificar línea para que los cambios surtan efecto. Las líneas se irán ejecutando siempre por orden de prioridad y siempre y cuando estén activadas. Podemos activar y desactivar una línea chequeando el checkbox asociado. 368

368 Sistema de Administración básica de una centralita VoIP Después de los dos segundos de espera, se ejecutará la siguiente línea con prioridad 2, responder_llamadas. Esta función es la que se encarga de abrir el canal ente la extensión llamante y la extensión 125, es decir, se encarga de enviar el tono de llamada a la extensión 125, y si el usuario acepta la llamada (descuelga el teléfono), se establece la comunicación. Si pulsamos sobre el icono de modificar la línea de responder_llamadas, vemos que esta solo tiene como parámetro la extensión asociada: Figura 198: Línea responder llamadas extesión 125 Entonces, hace falta generar líneas en el plan de llamadas para que dos extensiones puedan realizar llamadas entre sí? - No hace falta, ya que Beeton por defecto al crear una nueva extensión, crea las dos líneas anteriormente descritas asociadas a la nueva extensión. 369

369 3.4.2 Llamadas entre extensiones de diferentes contextos Para poder realizar llamadas entre los diferentes contextos, usaremos una función de beeton que se encargará de saltar de un contexto a otro. Esta función se llama salto incondicional. Vamos a ver un ejemplo: Lo primero que haremos será crear otro contexto nuevo, ya que tomamos como ejemplo la configuración de Beeton por defecto, y esta tiene solo creado el contexto usuarios. Seleccionamos del menú principal la opción de Plan de llamadas, nos mostrará una lista con los contextos creados y la opción de añadir nuevo contexto, seleccionamos dicha opción: Figura 199: Lista de contextos Y nos mostrará un formulario para introducir los detalles del contexto, en principio solo nos pide el nombre, pero suponemos que en versiones posteriores de beeton podremos indicarle más detalles como por ejemplo un descripción, creamos el nuevo contexto llamado Dpto. Tecnico : Figura 200: Crear nuevo contexto: "Dpto. técnico" Nos mostrará de nuevo la lista con el nuevo contexto añadido: Figura 201: Lista de contextos Ahora vamos a crear una nueva extensión tipo SIP con dicho contexto asociado, para ello seleccionamos del menú principal la opción Extensiones SIP, pulsamos sobre la opción Nueva extensión SIP : Figura 202: Lista de extensiones SIP 370

370 Sistema de Administración básica de una centralita VoIP Nos mostrará el formulario para introducir los datos de la nueva extensión. Creamos por ejemplo la extensión 300, con los datos que se muestran en la siguiente figura: Pulsamos sobre Crear Extensión SIP, y nos mostrará el listado de extensiones SIP con la nueva extensión creada: Ahora bien, por defecto Beeton crea dos líneas en el contexto usuarios, para que esta extensión que acabamos de crear. Así que tendremos que eliminar las líneas creadas del contexto usuarios para la nueva extensión. Ya que esta extensión esta asociada al contexto dpto. tecnico y aunque tenga líneas asociadas para recibir llamadas en el contexto usuarios, esta no podrá recibirlas por que no pertenece a ese contexto. 371

371 Esta forma de proceder al crear una nueva extensión (de cualquier tipo) en otro contexto que no sea el de usuarios, genera líneas al dialplan que no sirven, pero de esta manera, se recuerda al usuario administrador que tiene que cambiar dichas líneas generadas por otra que describimos a continuación. Así que para permitir que la extensión 300 del contexto dpto tecnico pueda recibir llamadas de las extensiones del contexto usuarios, eliminamos la función responder_llamadas de la extensión 300 del contexto usuarios: 372

372 Sistema de Administración básica de una centralita VoIP Nos pedirá confirmación: Ahora pulsamos sobre la opción Añadir línea en el contexto usuarios: Nos mostrará el formulario asociado para crear una nueva línea en el plan de llamadas del contexto usuarios, seleccionamos la función Salto incondicional : 373

373 Le indicamos que dé un salto hacia otro contexto con una extensión y una prioridad determinada: 374

374 Sistema de Administración básica de una centralita VoIP Hasta aquí el funcionamiento es el siguiente: Cuando una llamada del contexto usuarios quiera realizar una llamada a la extensión 300, la extensión llamante buscará en su contexto asociado, en este caso el de usuarios, la línea correspondiente a la extensión 300 que a la que está llamando. Encontrará la línea de salto y la ejecución saltará a la nueva línea indicada en la función salta del contexto dpto. tecnico. Ahoira solo quedaría aceptar las llamadas para la extensión 300 en el contexto dpto. tecnico, para ello creamos las siguiente líneas : Y con esto ya podríamos encaminar las llamadas de cualquiera de las extensiones definidas en el contexto usuarios hacia el contexto dpto. tecnico, pero no al revés. Es decir, las llamadas desde la extensión 300 hacia cualquiera de las extensiones del contexto usuarios no se podrían realizar. Peor si llegamos a este punto, en que queremos que la extensión 300 del dpto. Técnico pueda establecer comunicación con el resto de usuarios, que sentido tiene asignarle otro contexto que no sea el de usuarios? Menú de bienvenida con opciones (IVR) Esta funcionalidad del plan de llamadas permite crear de una forma sencilla un sistema de respuesta de voz interactiva, o también llamada operadora automática. Es decir, el usuario que llama podrá interaccionar con la centralita introduciéndole una serie de opciones. Para crear está funcionalidad, crearemos primero un nuevo contexto llamado operadora siguiendo los pasos descritos en los apartados anteriores: 375

375 Crearemos también un salto en el contexto usuarios para que todas las extensiones definidas en este contexto puedan realizar llamadas hacia la operadora, asignándole a esta la extensión 100, por ejemplo. NOTA: La operadora en sí no es ningún usuario con extensión de tipo SIP o IAX, simplemente es una línea del dialplan. La operadora no puede realizar llamadas, solo las recibe. La línea de salto la creamos con las siguientes opciones Añadimos la nueva línea al contexto usuarios: 376

376 Sistema de Administración básica de una centralita VoIP Ahora vamos al contexto operadora y creamos una línea de tipo Operadora automática : 377

377 Esta funcionalidad tiene varios parámetros que si vamos desplegando, nos dará un pequeño detalle de lo que significa cada uno, por ejemplo centrémonos en los 4 primeros parámetros: Es simplemente definir el horario de trabajo que tiene la empresa, para que la operadora pueda dar una respuesta o otra en función de la hora de la llamada. En este caso, si un usuario llama a la extensión 100 un Lunes a las 10:00 de la mañana, la operadora reproducirá el audio asociado al menú de opciones seleccionado. En caso de que el usuario llame un viernes a las 17:00, la operadora reproducirá el audio asociado de fuera de horario. Los ficheros de audio se gestionan en la opción del menú principal Ficheros de audio, que se detalla en los siguientes apartados de este manual. Ahora bien hasta aquí, ya tenemos definido, el horario y la respuesta (los ficheros de audio) que dará la operadora cunado reciba una llamada en caso de que el usuario realice la llamada dentro o fuera de dicho horario. Ya solo nos quedaría añadir las diferentes opciones en el caso de que el usuario llame en horario de oficina y pueda elegir una opción pulsando una tecla desde su teléfono o softpone. 378

378 Sistema de Administración básica de una centralita VoIP Por ejemplo, queremos que la operadora automática nos dirija a la extensión 123 si pulsamos el 1, y que nos dirija a la extensión 125 si pulsamos el 2. La lista de opciones quedaría de lasiguiente manera: Lo que hace la operadora es pegar un salto a la extensión del contexto indicado con dicha prioridad, al pulsar la opción indicada. NOTA: Si pulsas una opción no disponible la operadora no hará nada, y si pulsas *, la operadora repetirá la lista de opciones. Añadimos la nueva línea y el contexto operador quedaría de la siguiente manera: Con esto permitimos a las extensiones del contexto usuarios llamar a la operadora, si llaman a la extensión

379 3.4.4 Añadir música en espera a una extensión Para añadir una música en espera personalizada a una extensión, para que es sistema reproduzca cuando cuando se realice una llamada a dicha extensión, usaremos la funcionalidad Música en espera. Por ejemplo, si queremos incluir una música en espera personalizada para la extensión 123 procederíamos de la siguiente manera: Seleccionamos el contexto usuarios al cual pertenece la extensión 123 y añadimos la siguiente línea: El único parámetro que debemos indicarle a la función Música en espera es el fichero de audio en formato mp3 que queremos que reproduzca. NOTA: La administración de ficheros de audio para la música en espera se puede hacer desde el menú principal desde la opción Música en espera, que veremos en el apartado de gestión de ficheros de audio de este manual. Añadiendo la nueva línea tendríamos el plan de llamadas del contexto usuarios con las siguientes líneas asociadas a la extensión 123: 380

380 Sistema de Administración básica de una centralita VoIP La única peculiaridad de esta funcionalidad, es que hay que poner la línea encima de la linea de responder_llamadas. Para poder mover las líneas del plan de llamadas usamos los controles de subir y bajar línea, seleccionando la línea que queremos mover previamente: 381

Monta tu centralita de telefonía VoIP con Asterisk (2º parte): Interfaz web BEETON

Monta tu centralita de telefonía VoIP con Asterisk (2º parte): Interfaz web BEETON Monta tu centralita de telefonía VoIP con Asterisk (2º parte): Interfaz web BEETON Enrique Morón Ayuso http://about.me/emoronayuso ASTERISK: Una caja de herramientas Registro de extensiones Plan de llamadas

Más detalles

Asterisk - NIVEL 2. Este seminario lo entrenara para configurar aplicaciones Avanzadas en Asterisk.

Asterisk - NIVEL 2. Este seminario lo entrenara para configurar aplicaciones Avanzadas en Asterisk. Asterisk - NIVEL 2 Descripción General del Seminario Este seminario lo entrenara para configurar aplicaciones Avanzadas en Asterisk. Le brindara el conocimiento para implementar soluciones hibridas utilizando

Más detalles

Soluciones Voz IP con software libre

Soluciones Voz IP con software libre Soluciones Voz IP con software libre 1 Índice Índice de Contenidos Presentación de Asterisk Funcionalidades de Asterisk Casos Prácticos y Posibilidades de Integración 2 Presentación de Asterisk Que es

Más detalles

Asterisk - Central Telefónica PBX

Asterisk - Central Telefónica PBX Asterisk - Central Telefónica PBX Asterisk es una aplicación software libre de una central telefónica (PBX). Como cualquier PBX, se puede conectar un número determinado de teléfonos para hacer llamadas

Más detalles

Centralita Virtual y Operador IP

Centralita Virtual y Operador IP Centralita Virtual y Operador IP Barcelona, 10 de Noviembre de 2015 Fax: 93.198.06.09 http://www.innovatalk.com - 1 - Qué es Asterisk? Asterisk es una solución de centralita IP por software que proporciona

Más detalles

Telefonía IP. Diseño e Implementación del Sistema RENZO TACO COAYLA. e-mail: renzo@itsperu.com url: http://www.itsperu.com blog: http://www.oxaseis.

Telefonía IP. Diseño e Implementación del Sistema RENZO TACO COAYLA. e-mail: renzo@itsperu.com url: http://www.itsperu.com blog: http://www.oxaseis. Telefonía IP Diseño e Implementación del Sistema RENZO TACO COAYLA e-mail: renzo@itsperu.com url: http://www.itsperu.com blog: http://www.oxaseis.tk CONSULTORIA EMPRESARIAL EN TI Evolución 1995 Israel.-

Más detalles

Asterisk - NIVEL 1. Descripción General del Seminario

Asterisk - NIVEL 1. Descripción General del Seminario Asterisk - NIVEL 1 Descripción General del Seminario Este seminario completamente virtualizado, lo entrenara para administrar sistemas Linux orientado a uso en instalaciones Asterisk, aprenderá a compilar

Más detalles

Juan Antonio Gil Martínez-Abarca (gil@eps.ua.es)

Juan Antonio Gil Martínez-Abarca (gil@eps.ua.es) Datos del Curso Título Especialista en Redes y Telefonía VoIP Duración 100 horas (13,3 créditos ECTS) Responsables Dr. Julio Gómez López Dra. Consolación Gil Montoya Profesorado Adolfo Albaladejo Blázquez

Más detalles

Practica 1 Introducción de Asterisk

Practica 1 Introducción de Asterisk Universidad de San Carlos de Guatemala Facultad de Ingeniería Escuela de Mecánica Eléctrica Laboratorio de Electrónica Comunicaciones 3 Segundo Semestre 2015 Auxiliar: Estuardo Toledo Practica 1 Introducción

Más detalles

EL FUTURO DE LAS COMUNICACIONES HA LLEGADO. Gracias a nuestras centralitas IP ahorre un 40% en su factura telefónica e interconecte todas sus sedes.

EL FUTURO DE LAS COMUNICACIONES HA LLEGADO. Gracias a nuestras centralitas IP ahorre un 40% en su factura telefónica e interconecte todas sus sedes. EL FUTURO DE LAS COMUNICACIONES HA LLEGADO Gracias a nuestras centralitas IP ahorre un 40% en su factura telefónica e interconecte todas sus sedes. Incorporación de enlaces para llamar a móviles a precio

Más detalles

Cultura empresarial MISIÓN VISIÓN VALORES

Cultura empresarial MISIÓN VISIÓN VALORES 1 Quiénes somos? ITECOS (IT Communications School) es un Instituto de Formación Tecnológica y de Comunicación dedicada a diseñar, desarrollar y gestionar acciones formativas. 2 MISIÓN Cultura empresarial

Más detalles

Sección Telefonía IP www.ingeniatic.com

Sección Telefonía IP www.ingeniatic.com Sección Telefonía IP www.ingeniatic.com El futuro: La telefonía IP Qué es la telefonía IP? Qué es la voz sobre IP? La voz sobre IP (VoIP, Voice over Internet Protocol, Voz sobre el Protocolo de Internet

Más detalles

WWW.ITFORENSIC-LA.COM

WWW.ITFORENSIC-LA.COM Introducción Sin duda la invención de lo que hoy conocemos como telefonía debió ser un acto asombroso en su tiempo, casi mágico. El oír la voz de alguien remoto en tiempo real saliendo de una misteriosa

Más detalles

Introducción a VoIP, Asterisk y DialOne*

Introducción a VoIP, Asterisk y DialOne* Introducción a VoIP, Asterisk y DialOne* T e c n o lo g ía a m e d id a p a r a e m p r e s a s in n o v a d o r a s Qué es VoIP? Es una forma de comunicarse utilizando redes de datos Ejemplos: Internet,

Más detalles

Tarificador de llamadas VoIP Open Source

Tarificador de llamadas VoIP Open Source Tarificador de llamadas VoIP Open Source 1 Area de conocimiento: Sistemas de Información Fabiola Castillo Portilla 1, Gerardo Contreras Vega 2 y Carlos Alberto Ochoa Rivera 3 Facultad de Informática, Universidad

Más detalles

NUESTROS SERVICIOS CENTRAL TELEFÓNICA IP PYME

NUESTROS SERVICIOS CENTRAL TELEFÓNICA IP PYME PORTAFOLIO 2013 GRUPO EMPRESARIAL INTEL S.A.S es una empresa colombiana legalmente constituida, con más de cuatro años de experiencia en el mercado de las comunicaciones y tecnologías de la información,

Más detalles

SOLUCIÓN INTEGRADA CRM - CONTACT CENTER

SOLUCIÓN INTEGRADA CRM - CONTACT CENTER CS SOLUCIÓN INTEGRADA CRM - CONTACT CENTER LINK CS Solución Integrada CRM-Contact Center LINK C.S. Es la solución de telefonía ideal para reducir costos y obtener el máximo de beneficios de su plataforma

Más detalles

1 QUÉ ES ASTERISK? Asterisk es una centralita digital diseñada en software libre sobre el sistema operativo GNU/Linux

1 QUÉ ES ASTERISK? Asterisk es una centralita digital diseñada en software libre sobre el sistema operativo GNU/Linux The software PBX ÍNDICE 1 QUÉ ES ASTERISK?...1 2 CARACTERÍSTICAS DE ASTERISK...3 2.1 FUNCIONALIDADES DE LLAMADA...3 2.2 PROTOCOLOS...4 2.2.1 Protocolos VoIP...4 2.2.2 Protocolos telefonía clásica...5 2.3

Más detalles

Voz sobre IP y Asterisk

Voz sobre IP y Asterisk IRONTEC - http://www.irontec.com Voz sobre IP y Asterisk 1 Softphones Que son? Se trata de software que se ejecuta en estaciones o servidores de trabajo. Permiten establecer llamadas de Voz sobre IP. El

Más detalles

INICIACIÓN EN TELEFONÍA IP DE ASTERISK

INICIACIÓN EN TELEFONÍA IP DE ASTERISK OBJETIVO DEL CURSO Curso teórico/práctico donde se emplean los conocimientos y habilidades necesarias para implementar una central de telefonía IP basada en Asterisk. Este curso se centra la ejecución

Más detalles

Descripción y Contenido del Curso VoIP basado en Asterisk PBX

Descripción y Contenido del Curso VoIP basado en Asterisk PBX Descripción y Contenido del Curso VoIP basado en Asterisk PBX Capacity Academy Educación en Tecnología de la Información Online, Efectiva y Garantizada Qué aprenderá si toma este Curso? En este curso aprenderás

Más detalles

Solución Integrada CRM - Contact Center

Solución Integrada CRM - Contact Center C.S. Solución Integrada CRM - Contact Center LINK CS Solución Integrada CRM-Contact Center LINK CS Solución Integrada CRM-Contact Center LINK C.S. Es la solución de telefonía ideal para reducir costos

Más detalles

EVALUACION DEL DESEMPEÑO DE UNA PBX SOPORTADA EN SOFTWARE LIBRE

EVALUACION DEL DESEMPEÑO DE UNA PBX SOPORTADA EN SOFTWARE LIBRE TEL031 EVALUACION DEL DESEMPEÑO DE UNA PBX SOPORTADA EN SOFTWARE LIBRE Temática: Próxima Generación de Redes (NGN) Telefonía IP. AUTOR: MsC. Carlos Alberto Rodríguez López. Email: crodrigz@uclv.edu.cu

Más detalles

Introducción a VoIP, Asterisk y DialOne* Tecnología a medida para empresas innovadoras

Introducción a VoIP, Asterisk y DialOne* Tecnología a medida para empresas innovadoras Introducción a VoIP, Asterisk y DialOne* Tecnología a medida para empresas innovadoras Qué es VoIP? Es una forma de comunicarse utilizando redes de datos Ejemplos: Internet, redes corporativas, conexiones

Más detalles

Presentación de la Empresa

Presentación de la Empresa Presentación de la Empresa Presentación de la Empresa ServiTux Servicios Informáticos S.L. se constituyó como empresa en mayo de 2004 con un objetivo muy claro: implementar soluciones de software libre

Más detalles

CENTRALITAS DE VOZ IP ASTERISK SOBRE MAQUINAS VIRTUALES XEN

CENTRALITAS DE VOZ IP ASTERISK SOBRE MAQUINAS VIRTUALES XEN CENTRALITAS DE VOZ IP ASTERISK SOBRE MAQUINAS VIRTUALES XEN QUE ES LA VOZ SOBRE IP? Es un método de enviar paquetes de voz mediante redes de datos de área local o extensa. Podemos acceder a esas redes

Más detalles

Sistema de telefonía IP de emergencia para Banca

Sistema de telefonía IP de emergencia para Banca Sistema de telefonía IP de emergencia para Banca Descripción El sistema de telefonía IP de emergencia orientado a Banca se basa en el uso de un teléfono o interfono exclusivo denominado IPefono Handset,

Más detalles

Para STP, (voz IPBogota) es un placer dar a conocer a fondo las funciones y servicios a los que accede a la hora de trabajar con nosotros.

Para STP, (voz IPBogota) es un placer dar a conocer a fondo las funciones y servicios a los que accede a la hora de trabajar con nosotros. Para STP, (voz IPBogota) es un placer dar a conocer a fondo las funciones y servicios a los que accede a la hora de trabajar con nosotros. QUE UN PBX CON STP? Asterisk es una central telefónica completamente

Más detalles

Voice System One MicroPyme IP PBX v2.0. Servidor de Comunicaciones VoIP Agosto 2009

Voice System One MicroPyme IP PBX v2.0. Servidor de Comunicaciones VoIP Agosto 2009 Voice System One MicroPyme IP PBX v2.0 Servidor de Comunicaciones VoIP Agosto 2009 Libérese de su central telefónica propietaria y adopte una PBX IP de estándar abierto, que incrementa la productividad

Más detalles

Unidad CPE/VPN cpe@redescomm.com www.redescomm.com. RedesComm, c.a.

Unidad CPE/VPN cpe@redescomm.com www.redescomm.com. RedesComm, c.a. Unidad CPE/VPN cpe@redescomm.com www.redescomm.com RedesComm, c.a. Qué es ASTC*MM? Es un Sistema Integral de Telefonía IP de fácil uso y totalmente e Código Abierto (software libre) capaz de cubrir en

Más detalles

NUEVOS TIEMPOS PARA LA COMUNICACIÓN SOLUCIONES DE VOZ SOBRE IP

NUEVOS TIEMPOS PARA LA COMUNICACIÓN SOLUCIONES DE VOZ SOBRE IP Ctrl Crm NUEVOS TIEMPOS PARA LA COMUNICACIÓN SOLUCIONES DE VOZ SOBRE IP VoIP PHONORED. UNA NUEVA DIMENSIÓN PARA LA COMUNICACIÓN DE SU EMPRESA La telefonía por Internet es la comunicación inteligente que

Más detalles

UNIVERSIDAD DE LAS FUERZAS ARMADAS ESPE EXTENSIÓN LATACUNGA

UNIVERSIDAD DE LAS FUERZAS ARMADAS ESPE EXTENSIÓN LATACUNGA UNIVERSIDAD DE LAS FUERZAS ARMADAS ESPE EXTENSIÓN LATACUNGA TESIS PRESENTADA COMO REQUISITO PREVIO A LA OBTENCIÓN DEL GRADO DE INGENIERO EN ELECTRÓNICA E INSTRUMENTACIÓN CAICEDO ROMERO IRMA YOLANDA CHANGO

Más detalles

Laboratorio de Conmutación Curso 2009-2010

Laboratorio de Conmutación Curso 2009-2010 Laboratorio de Conmutación Curso 2009-2010 Conmutación VoIP por software Contexto...................................................................... 2 Las tecnologías VoIP.............................................................

Más detalles

ASTERISK AGI: DESARROLLO PARA VOZ IP V JORNADA DE SOFTWARE LIBRE

ASTERISK AGI: DESARROLLO PARA VOZ IP V JORNADA DE SOFTWARE LIBRE ASTERISK AGI: DESARROLLO PARA VOZ IP V JORNADA DE SOFTWARE LIBRE Contenido Porque VoIP Conceptos Asterisk Soluciones VoIP Asterisk AGI Que se puede hacer con AGI Ejemplos Conclusiones Referencias y preguntas

Más detalles

INSTALACIÓN, OPERACIÓN Y PROGRAMACIÓN DE EQUIPOS Y SISTEMAS TELEFÓNICOS

INSTALACIÓN, OPERACIÓN Y PROGRAMACIÓN DE EQUIPOS Y SISTEMAS TELEFÓNICOS 09-06-2015 1 Descripción y funcionamiento de una central PABX 09-06-2015 2 Un PBX o PABX (siglas en inglés de Private Branch Exchange y Private Automatic Branch Exchange para PABX), la cual es la red telefónica

Más detalles

Tema: Asterisk. Universidad Católica Nuestra Señora de la Asunción. Teoría y Aplicaciones de la Informática II. Profesor: Ing.

Tema: Asterisk. Universidad Católica Nuestra Señora de la Asunción. Teoría y Aplicaciones de la Informática II. Profesor: Ing. Universidad Católica Nuestra Señora de la Asunción Teoría y Aplicaciones de la Informática II Profesor: Ing. Juan de Urraza Alumno: Javier Martínez Tema: Asterisk Septiembre, 2007 Que es Asterisk? Asterisk

Más detalles

Asterisk. Introducción

Asterisk. Introducción Asterisk Introducción 1 Qué es Asterisk Es un sistema de comunicaciones inteligentes con base en software libre. En él convergen aplicaciones de voz, datos y video. Es liberado con la licencia GPL2. Es

Más detalles

OIGAA ENTERPRISE Manual de instalación

OIGAA ENTERPRISE Manual de instalación OIGAA ENTERPRISE Manual de instalación Versión 14.0 Ingeniería de clientes 27/04/2011 ÍNDICE 1. ACCESO ADMINISTRACIÓN CENTRALITA... 3 2. USUARIOS... 5 3. DISPOSITIVOS... 7 3.1. CISCO IP PHONE (7905, 7906,

Más detalles

Escuela Técnica Superior de Ingenieros de Telecomunicación

Escuela Técnica Superior de Ingenieros de Telecomunicación Escuela Técnica Superior de Ingenieros de Telecomunicación Resumen del Proyecto Fin de Carrera Diseño y Desarrollo de un Teléfono Inalámbrico WiFi para VoIP Autor: Jorge Muñoz Castañer Tutor: Felipe Gil

Más detalles

Centrales Telefónicas IP. Oportunidad de crecimiento al acance de todos

Centrales Telefónicas IP. Oportunidad de crecimiento al acance de todos Centrales Telefónicas IP Oportunidad de crecimiento al acance de todos Conmutadores Asterisk Los conmutadores Asterisk forma parte de los líderes mundiales en plataformas de telefonía IP, Es un software

Más detalles

PARA PEQUEÑAS Y MEDIANAS EMPRESAS. Central Telefónica IP de alto rendimiento a bajo coste LA VOZ DEL FUTURO

PARA PEQUEÑAS Y MEDIANAS EMPRESAS. Central Telefónica IP de alto rendimiento a bajo coste LA VOZ DEL FUTURO 000101010100100101000101110100010100111010101001010101 000111010101011010101000101000101110101011101100101010 010101110101011110100010001010101001001010001011101000 010101010110111111010100001110101010110101010001010001

Más detalles

Diseño e Implementación de un Sistema de Gestión Telefónica Automática para Negocios Hoteleros.

Diseño e Implementación de un Sistema de Gestión Telefónica Automática para Negocios Hoteleros. Diseño e Implementación de un Sistema de Gestión Telefónica Automática para Negocios Hoteleros. Escobar Lenin, Garnica Freddy, Astudillo Gabriel Ing. Facultad de Ingeniería Eléctrica y Computación. Escuela

Más detalles

Asterisk. Introducción. Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch 1

Asterisk. Introducción. Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch 1 Asterisk Introducción Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch 1 Qué es Asterisk Es un sistema de comunicaciones inteligentes con base en software libre. En él convergen aplicaciones

Más detalles

VoIP + GNU/Linux. runsolutions. Telefonía avanzada, software libre. El mejor retorno de inversión en sistemas de telefonía OPEN SOURCE IT

VoIP + GNU/Linux. runsolutions. Telefonía avanzada, software libre. El mejor retorno de inversión en sistemas de telefonía OPEN SOURCE IT VoIP + GNU/Linux Telefonía avanzada, software libre. El mejor retorno de inversión en sistemas de telefonía runsolutions OPEN SOURCE IT C O N S U L T I N G En RunSolutions desarrollamos e implementamos

Más detalles

RENZO TACO COAYLA. renzo@itsperu.com - http://itsperu.com Movistar : 990949624 - RPM: #990949624 Claro: 952665666 - RPC: 952665666

RENZO TACO COAYLA. renzo@itsperu.com - http://itsperu.com Movistar : 990949624 - RPM: #990949624 Claro: 952665666 - RPC: 952665666 RENZO TACO COAYLA renzo@itsperu.com - http://itsperu.com Movistar : 990949624 - RPM: #990949624 Claro: 952665666 - RPC: 952665666 La telefonía IP también llamada Voz sobre IP se puede definir como la

Más detalles

CAPITULO V RESULTADOS ALCANZADOS. 1.- Funcionamiento del servidor TrixBox (Asterisk).

CAPITULO V RESULTADOS ALCANZADOS. 1.- Funcionamiento del servidor TrixBox (Asterisk). CAPITULO V RESULTADOS ALCANZADOS. Para la implementación de la propuesta, es necesario realizar la evaluación del funcionamiento del servicio de voz sobre IP para Interconectar a un usuario remoto a través

Más detalles

avancem grup AvanVoip

avancem grup AvanVoip Avancem Grup, le ofrece la solución Asterisk basada en software libre, licencias ip sin coste y con todas las funcionalidades de una centralita telefónica sin restricciones y pudiendo convertir un ordenador

Más detalles

www.m3d.es teofilo@m3d.es VoIP Asterisk

www.m3d.es teofilo@m3d.es VoIP Asterisk Introducción Conceptos fundamentales de telefonía Arquitectura de la Voz IP VoIP frente a telefonía tradicional Las centralitas OpenSource: Asterisk Casos de éxito Conceptos fundamentales Conmutación de

Más detalles

Voz sobre IP con GNU/Linux

Voz sobre IP con GNU/Linux Voz sobre IP con GNU/Linux René Mayorga rmayorga@debian.org.sv Comunidad de usuarios Debian de El Salvador 13 de junio de 2008 rmayorga (Comunidad de usuarios Debian de El Salvador) Voz sobre IP con GNU/Linux

Más detalles

CAPITULO III PROPUESTA DE SOLUCION.

CAPITULO III PROPUESTA DE SOLUCION. CAPITULO III PROPUESTA DE SOLUCION. 1.- Definición de la Propuesta. La propuesta de solución esta orientada a la implementación de una alternativa comunicación de bajo costo para el personal de la Fuerza

Más detalles

Asterisk. The Open Source PBX. Pau Oliva Fora http://pof.eslack.org

Asterisk. The Open Source PBX. Pau Oliva Fora <pof@eslack.org> http://pof.eslack.org Asterisk * The Open Source PBX ESILUX 2005 Pau Oliva Fora http://pof.eslack.org Qué es Asterisk? (I) Sustituto de PBX basado en *NIX Características comparables (e incluso mejores) a la

Más detalles

Implementación de tecnología para la optimización del servicio de Telefonía Corporativa Casos de éxito en el sector publico

Implementación de tecnología para la optimización del servicio de Telefonía Corporativa Casos de éxito en el sector publico Implementación de tecnología para la optimización del servicio de Telefonía Corporativa Casos de éxito en el sector publico Miguel Rabi Gerente Operaciones y Soporte mrabi@sumtecperu.com SUMTEC QUIENES

Más detalles

MX250 Características Técnicas del Sistema MX 250 de Zultys Technologies.

MX250 Características Técnicas del Sistema MX 250 de Zultys Technologies. MX250 Características Técnicas del Sistema MX 250 de Zultys Technologies. Total funcionalidad como Central Telefónica con correo de voz integrado Basado en estándares abiertos: SIP, Linux, Voice XML, TAPI,

Más detalles

Primeros pasos con una PBX Asterisk utilizando el livecd de XORCOM (Elastix)

Primeros pasos con una PBX Asterisk utilizando el livecd de XORCOM (Elastix) Primeros pasos con una PBX Asterisk utilizando el livecd de XORCOM (Elastix) 1. Introducción Xorcom Rapid Live es un Sistema Operativo derivado de Debian basado en una distribución de Asterisk llamada

Más detalles

Introducción. Protocolos Asterisk. VoIP. Asterisk. Esteban De La Fuente Rubio esteban@delaf.cl L A TEX. Universidad Andrés Bello.

Introducción. Protocolos Asterisk. VoIP. Asterisk. Esteban De La Fuente Rubio esteban@delaf.cl L A TEX. Universidad Andrés Bello. esteban@delaf.cl L A TEX Universidad Andrés Bello 8 jun 2011 Tabla de contenidos 1 2 3 4 Voice over IP / Voice over Internet Protocol. Conjunto de tecnologías que permiten transportar voz sobre una red

Más detalles

Callcenter Bajo Software libre

Callcenter Bajo Software libre Callcenter Bajo Software libre Redes y Comunicación Cristian Barahona G. Encuentro Linux Valparaiso, Chile 23 de octubre de 2009 Contenido 1 Presentación Nuestra Empresa: XGroup Powered by Lo que es y

Más detalles

Manual Centralita Virtual y Audioconferencia

Manual Centralita Virtual y Audioconferencia Manual Centralita Virtual y Audioconferencia Índice Introducción Centralita virtual Características del servicio Gestión de usuarios Estadísticas e informes Gestión de locuciones Configuración de servicio

Más detalles

CÓMO FUNCIONA LA VOZ SOBRE IP

CÓMO FUNCIONA LA VOZ SOBRE IP CÓMO FUNCIONA LA VOZ SOBRE IP La voz sobre IP convierte las señales de voz estándar en paquetes de datos comprimidos que son transportados a través de redes de datos en lugar de líneas telefónicas tradicionales.

Más detalles

Fonoplus Global Communications - Telefonia IP www.fonoplus.com Página 1

Fonoplus Global Communications - Telefonia IP www.fonoplus.com Página 1 EQUIPO CARACTERISTICAS PRECIO USD Teléfonos USB y Diademas Se conectan como un periférico a través de la tarjeta de sonido del computador o bien con el puerto USB. Funciona con acceso a internet vía telefónica

Más detalles

VoIP (Asterix) Escuela de Ingeniería de Sistemas y Computación Administración de Redes y Servidores Febrero Junio 2008

VoIP (Asterix) Escuela de Ingeniería de Sistemas y Computación Administración de Redes y Servidores Febrero Junio 2008 VoIP (Asterix) VoIP VoIP se le conoce a un conjunto de protocolos y tecnologias que hace posible que la voz viaje a traves de la red, empleando el protocolo IP. Este conjunto de tecnologias permite poder

Más detalles

Contenido y programación del Entrenamiento Oficial Avanzado de Asterisk

Contenido y programación del Entrenamiento Oficial Avanzado de Asterisk Contenido y programación del Entrenamiento Oficial Avanzado de Asterisk Día 1: - Conceptos Fundamentales Sintaxis del archivo de configuración sip.conf extensions.conf Consola Linux vs CLI de Asterisk

Más detalles

La telefonía tradicional

La telefonía tradicional VoIP y Asterisk La telefonía tradicional Red telefónica básica RTB: Cada línea RTB tiene asignada una numeración específica. Físicamente está constituida por dos hilos metálicos (par de cobre), que se

Más detalles

Grupo EI TLF: 902 22 60 22 FAX: 952 650 460

Grupo EI TLF: 902 22 60 22 FAX: 952 650 460 SUTIL: Plataforma para Operador de Telefonía Tlf: 902 226 022 Fax: 952 910 461 comercial@grupoei.com SutilCARRIER es la plataforma y la herramienta del operador, que va a permitir dar servicios profesionales

Más detalles

SUTIL: la solución ideal para centros de negocios

SUTIL: la solución ideal para centros de negocios SUTIL: la solución ideal para centros de negocios Grupo Estudio Informática http://www.grupoei.com http://www.grupoei.com/sutil tlf: 902 226 022 comercial@grupoei.com SUTIL: La Plataforma telefónica ideal

Más detalles

Centrales Privadas - PBX

Centrales Privadas - PBX Centrales Privadas - PBX Cecilia Alberto :: 82652 Lucas Chiesa :: 83417 Margarita Manterola :: 77091 1er cuatrimestre - 2007 Resumen En este documento se tratarán las centrales PBX. La historia de su desarrollo,

Más detalles

Voz sobre IP El futuro es hoy. Rafael Loscos Sanz

Voz sobre IP El futuro es hoy. Rafael Loscos Sanz Voz sobre IP El futuro es hoy Rafael Loscos Sanz 1.- Qué es la tecnología VoIP. Consiste en aprovechar la infraestructura desplegada para la transmisión de datos para transmitir voz, utilizando el protocolo

Más detalles

MÓDULO: SERVICIOS E RED. Nombre: Curso: 2º SMR (9-6-2011) [Examen Final Junio]

MÓDULO: SERVICIOS E RED. Nombre: Curso: 2º SMR (9-6-2011) [Examen Final Junio] MÓDULO: SERVICIOS E RED Nombre: Curso: 2º SMR (9-6-2011) [Examen Final Junio] PARTE 1: Responde las siguientes preguntas tipo TEST. Solo hay una respuesta correcta. Dos respuestas incorrectas anulan una

Más detalles

Introducción RTB RTB. Soft Switch. Terminal IP. Pasarela RTB Terminal IP. Terminal Trad. Terminal Trad. Servidor de MultiConferencia.

Introducción RTB RTB. Soft Switch. Terminal IP. Pasarela RTB Terminal IP. Terminal Trad. Terminal Trad. Servidor de MultiConferencia. Asterisk TEL-242 Introducción Telefonía Tradicional: Redes Analógicas (FXO, FXS) Redes RDSI (BRI, PRI / NT, TE) Redes de conmutación de circuitos Voz IP: Protocolos de señalización SIP, H.323, MGCP, IAX

Más detalles

CAPITULO 5: INTEGRACION DEL ASTERISK - AVAYA

CAPITULO 5: INTEGRACION DEL ASTERISK - AVAYA CAPITULO 5: INTEGRACION DEL ASTERISK - AVAYA 5.1 INTRODUCCIÓN El Asterisk es una completa solución de una central telefónica IP por software. Se instala sobre cualquier plataforma de servidor con sistema

Más detalles

Servicio de tecnología de voz IP VoIP. - Telefonía tradicional - Funcionamiento de VoIP - Protocolos VoIP - Elementos VoIP

Servicio de tecnología de voz IP VoIP. - Telefonía tradicional - Funcionamiento de VoIP - Protocolos VoIP - Elementos VoIP Servicio de tecnología de voz IP VoIP - Telefonía tradicional - Funcionamiento de VoIP - Protocolos VoIP - Elementos VoIP Servicio de tecnología de voz IP Voz sobre Protocolo de Internet, también llamado

Más detalles

Asterisk. Distribuciones Asterisk más usadas:

Asterisk. Distribuciones Asterisk más usadas: Asterisk Asterisk es un programa de software libre (bajo licencia GPL) que proporciona funcionalidades de una central telefónica (PBX). Como cualquier PBX, se puede conectar un número determinado de teléfonos

Más detalles

Sistema de Interfonía IP

Sistema de Interfonía IP Sistema de Interfonía IP Descripción El Sistema de Interfonía IP de ConectaIP es una solución basada en distintos modelos de dispositivos denominados s, que permiten la comunicación directa de audio entre

Más detalles

PRACTICA NO.25: HOW TO INSTALL AND CONFIGURE ELASTIX CENTRAL IP

PRACTICA NO.25: HOW TO INSTALL AND CONFIGURE ELASTIX CENTRAL IP PRACTICA NO.25: HOW TO INSTALL AND CONFIGURE ELASTIX CENTRAL IP Jose Arturo Beltre Castro 2013-1734 ING. JOSE DOÑE Sistemas Operativos III Elastix Elastix es una distribución libre de Servidor de Comunicaciones

Más detalles

1. Capítulo 1: Herramientas de Software para el sistema

1. Capítulo 1: Herramientas de Software para el sistema 1. Capítulo 1: Herramientas de Software para el sistema 1.1 Conceptos Generales 1.1.1 Joomla.- Es un sistema dinámico que gestiona y administra contenidos de código abierto, y permite desarrollar sitios

Más detalles

EDUARDO HERNÁNDEZ NARANJO [ASTERISK PBX] PROYECTO FINAL DE ADMINISTRACIÓN DE SISTEMAS INFORMÁTICOS

EDUARDO HERNÁNDEZ NARANJO [ASTERISK PBX] PROYECTO FINAL DE ADMINISTRACIÓN DE SISTEMAS INFORMÁTICOS EDUARDO HERNÁNDEZ NARANJO [ASTERISK PBX] PROYECTO FINAL DE ADMINISTRACIÓN DE SISTEMAS INFORMÁTICOS CONTENIDOS 1. Introducción Por qué? Que es? Historia. 2. Asterisk. Funciones Funciones Básicas. Funciones

Más detalles

INDICE Libro Asterisk PBX 1.8.X Versión 1.2

INDICE Libro Asterisk PBX 1.8.X Versión 1.2 INDICE Libro Asterisk PBX 1.8.X Versión 1.2 Capitulo I - Instalación de Asterisk... 1 1.1 Preparación del VPS Linode 1 1.2 SSH y clave RSA 7 1.2.1 Clave RSA en Windows 7 1.2.2 Clave RSA en Linux 10 1.2.3

Más detalles

Caso: Call Center bajo Software Libre

Caso: Call Center bajo Software Libre Caso: FLISOL Santiago Chile 25 de Abril de 2009 Nuestra Empresa: XGroup XGroup Powered by Es / No es STEL Una Empresa creada por Jóvenes. Entregamos soluciones basadas en software libre. Contamos con desarrollos

Más detalles

ELASTIX CERTIFIED ENGINEER Pensum del curso

ELASTIX CERTIFIED ENGINEER Pensum del curso ELASTIX CERTIFIED ENGINEER Pensum del curso Capítulos teóricos Introducción Laboratorio Elastix Telefonía Aprovisionamiento Qué es un Endpoint? Tipos de Endpoints Teléfonos IP Codecs en Endpoints Configuración

Más detalles

Sistemas Integrados y Hogar Digital

Sistemas Integrados y Hogar Digital MEMORIA Sistemas Integrados y Hogar Digital SISTEMAS DE TELECOMUNICACIÓN E INFORMÁTICOS Grado Superior Curso 2º Título: VozIP Nombre de los alumnos: Jonathan Torres Borja González 1 MEMORIA 1. INFORMACIÓN

Más detalles

UNIVERSIDAD LUTERANA SALVADOREÑA FACULTAD DE CIENCIAS DEL HOMBRE Y LA NATURALEZA LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN CÁTEDRA: REDES II

UNIVERSIDAD LUTERANA SALVADOREÑA FACULTAD DE CIENCIAS DEL HOMBRE Y LA NATURALEZA LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN CÁTEDRA: REDES II UNIVERSIDAD LUTERANA SALVADOREÑA FACULTAD DE CIENCIAS DEL HOMBRE Y LA NATURALEZA LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN CÁTEDRA: REDES II CATEDRÁTICO: ING. MANUEL VILLATORO. PROYECTO: PLANTA TELEFONICA

Más detalles

UNIVERSIDAD LUTERANA SALVADOREÑA

UNIVERSIDAD LUTERANA SALVADOREÑA UNIVERSIDAD LUTERANA SALVADOREÑA Facultad: Ciencias del Hombre y la Naturaleza Carrera: Licenciatura en Ciencias de la Computación Materia: REDES II Tarea: Segundo Avance de Proyecto Redes II Docente:

Más detalles

TESIS DE GRADO Previo a la obtención del título de INGENIERAS EN SISTEMAS PRESENTADA POR BABAHOYO 2011

TESIS DE GRADO Previo a la obtención del título de INGENIERAS EN SISTEMAS PRESENTADA POR BABAHOYO 2011 TESIS DE GRADO Previo a la obtención del título de INGENIERAS EN SISTEMAS PRESENTADA POR MaríaCarpio S BABAHOYO 2011 Anabell Maridueña C PLANTEAMIENTO DEL PROBLEMA La Universidad no tiene un sistema de

Más detalles

Telemedicina por VoIP

Telemedicina por VoIP Telemedicina por VoIP Autor1 Afiliacion1 Afiliacion2 Resumen: Este informe trata sobre la implementación de una PBX (Phone Box Exchange) que se utilizara como medio de comunicación de voz entre principalmente

Más detalles

Manual de Administración Draft - Noviembre 17 de 2010

Manual de Administración Draft - Noviembre 17 de 2010 Manual de Administración Draft - Noviembre 17 de 2010 DreamPBX, Manual de Administración 1 de 51 DreamPBX, Manual de Administración 2 de 51 Para Comenzar Bienvenido a DreamPBX, este documento describe

Más detalles

Presentación. Nombre. Matricula. Materia. Tema. Profesor. Marcos Rodríguez Javier 2013-1902. Sistemas Operativos III. Central IP Elastix.

Presentación. Nombre. Matricula. Materia. Tema. Profesor. Marcos Rodríguez Javier 2013-1902. Sistemas Operativos III. Central IP Elastix. Presentación Nombre Marcos Rodríguez Javier Matricula 2013-1902 Materia Sistemas Operativos III Tema Central IP Elastix Profesor José Doñé Elastix Elastix es una distribución libre de Servidor de Comunicaciones

Más detalles

Prácticas con Elastix Asterisk - Lab. 2

Prácticas con Elastix Asterisk - Lab. 2 1-1-2015 Prácticas telefonía IP Prácticas con Elastix Asterisk - Lab. 2 Jesse Padilla Agudelo Adaptado por Ing. Pedro Alberto Arias Quintero SENA - CIMI INTRODUCCIÓN La revolución tecnológica actual, la

Más detalles

TEMARIO Asterisk Básico-Intermedio-Avanzado

TEMARIO Asterisk Básico-Intermedio-Avanzado 2012 TEMARIO Asterisk Básico- Intermedio- Avanzado México, D.F. 27 de enero del 2012 A quien corresponda Presente. Por medio de la presente nos permitimos hacerte llegar nuestra agenda para el curso que

Más detalles

TFC J2EE. Aplicación Web para la gestión de facturación de una empresa de cerrajería. Sara Gutiérrez Melero ITIG Junio de 2012

TFC J2EE. Aplicación Web para la gestión de facturación de una empresa de cerrajería. Sara Gutiérrez Melero ITIG Junio de 2012 TFC J2EE Aplicación Web para la gestión de facturación de una empresa de cerrajería Sara Gutiérrez Melero ITIG Junio de 2012 Consultor: Jose Juan Rodriguez Índice 1. Introducción Objetivos Planificación

Más detalles

Manual de Extensión. Portal de Usuario, Códigos de marcación & correo de voz para Central Telefónica 3CX Versión 6.0

Manual de Extensión. Portal de Usuario, Códigos de marcación & correo de voz para Central Telefónica 3CX Versión 6.0 Manual de Extensión Portal de Usuario, Códigos de marcación & correo de voz para Central Telefónica 3CX Versión 6.0 Derechos Reservados 2006-2008, 3CX ltd. http:// E-mail: info@3cx.com La información de

Más detalles

VOIP LA NUEVA REVOLUCION

VOIP LA NUEVA REVOLUCION VOIP LA NUEVA REVOLUCION Con la aparición de redes IP, se revolucionó la forma como nos comunicamos, ahora podemos enviar imágenes, textos, archivos de audio y video; a partir de la década de los 90, se

Más detalles

Centralita Virtual V-PBX

Centralita Virtual V-PBX Centralita Virtual V-PBX Qué es y que ofrece la VOIP? VoIP es el acrónimo de "Voice over internet protocol" o "voz sobre protocolo de internet". VoIP es la tecnología y Telefonía IP es el servicio. La

Más detalles

Asterisk. Trixbox. Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch 1

Asterisk. Trixbox. Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch 1 Asterisk Trixbox Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch 1 Qué es Asterisk Es una PBX híbrida. Cumple con todos los requerimientos de una PBX tradicional a los que se suman los

Más detalles

Jorge De Nova Segundo

Jorge De Nova Segundo UD9: Instalación y administración de otros servicios de red e Internet Servicio de tecnología de voz IP VoIP. Jorge De Nova Segundo Telefonía tradicional. El teléfono es un dispositivo de telecomunicación

Más detalles

Laboratorio de Redes 2

Laboratorio de Redes 2 INSTITUTO TECNOLÓGICO Y DE ESTUDIOS SUPERIORES DE MONTERREY Laboratorio de Redes 2 Configuración básica de VoIP utilizando código abierto Duración aproximada: Hora y media (1:30 hrs). Objetivo: Enseñar

Más detalles

Funcionalidades mas vulnerables Como minimizar los riesgo de ser defraudados

Funcionalidades mas vulnerables Como minimizar los riesgo de ser defraudados Funcionalidades mas vulnerables Como minimizar los riesgo de ser defraudados Como disminuir el riesgo de fraudes El uso continuo de telefonía nos expone a diversos tipos de fraudes que pueden afectar nuestra

Más detalles

ANEXO INFORMATICO PLATAFORMA DE TELEFONÍA IP. 1. Esquema de solución Telefonía IP y Comunicaciones Unificadas ICBF.

ANEXO INFORMATICO PLATAFORMA DE TELEFONÍA IP. 1. Esquema de solución Telefonía IP y Comunicaciones Unificadas ICBF. ANEXO INFORMATICO PLATAFORMA DE TELEFONÍA IP 1. Esquema de solución Telefonía IP y Comunicaciones Unificadas ICBF. La solución de telefonía IP y Comunicaciones Unificadas del Instituto Colombiano de Bienestar

Más detalles

Telefonía IP Universidad Nacional Autónoma de Honduras. César Eduardo Pavón Gómez

Telefonía IP Universidad Nacional Autónoma de Honduras. César Eduardo Pavón Gómez Telefonía IP Universidad Nacional Autónoma de Honduras César Eduardo Pavón Gómez Telefonía Telefonía Tradicional Consiste en un sistema denominado conmutación de circuito. Esta conmutación es aquella comunicación

Más detalles

GUÍA DE PREVENCIÓN FRAUDES TELEFÓNICOS EN SU EMPRESA

GUÍA DE PREVENCIÓN FRAUDES TELEFÓNICOS EN SU EMPRESA GUÍA DE PREVENCIÓN FRAUDES TELEFÓNICOS EN SU EMPRESA DE Guía de prevención de fraudes teléfonicos en su empresa Contenido Contenido 1. Definiciones y generalidades sobre fraudes telefónicos 1.1. Qué es

Más detalles

Asterisk. Qué es Asterisk. Qué es Asterisk. Historia de Asterisk. Introducción 07/03/2013

Asterisk. Qué es Asterisk. Qué es Asterisk. Historia de Asterisk. Introducción 07/03/2013 Qué es Asterisk Asterisk Introducción Es un sistema de comunicaciones inteligentes con base en software libre. En él convergen aplicaciones de voz, datos y video. Es liberado con la licencia GPL2. Es un

Más detalles