389
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

ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA … · ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA INGENIERÍA TÉCNICA EN INFORMÁTICA DE SISTEMAS Panel de administración web

  • Upload
    vudan

  • View
    219

  • Download
    0

Embed Size (px)

Citation preview

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

Lista de cambios

2

Lista de cambiosNum. Fecha Descripción Autor

0 01/09/2014 Versión 1.0 del documento Enrique Morón

Enrique Morón Ayuso

Índice de contenido1. Introducción......................................................................................................................20

Prefacio..........................................................................................................................................21Problema: Complejidad de la administración de una centralita de teléfono VoIP.........................23Objetivos........................................................................................................................................241.1. Asterisk...................................................................................................................................25

1.1.1. ¿Qué es un PBX?............................................................................................................251.1.2. ¿Qué es Asterisk?............................................................................................................26

1.2. Asterisk en diferentes escenarios............................................................................................271.2.1 Llamadas internas en la oficina........................................................................................271.2.2 Conectar la oficina con Internet.......................................................................................281.2.3 Conectar la oficina con la RTB........................................................................................29

1.3. Interfaces Web de administración de Asterisk .......................................................................301.3.1. FreePBX..........................................................................................................................301.3.2. AsteriskGUI....................................................................................................................331.3.3. Voiceone ........................................................................................................................35

1.4. Proyecto Beeton VS Principales paneles web de Asterisk existentes.....................................371.4.1 Características principales de las interfaces de administración de Asterisk....................371.4.2 Tabla comparativa de características de las interfaces de Asterisk..................................39

1.5. Tipos de terminales VoIP usados con Asterisk........................................................................401.5.1 Softphones........................................................................................................................401.5.2 Teléfonos IP......................................................................................................................411.5.3 Otros terminales VoIP para usar con Asterisk..................................................................42

1.6 Tarjetas de comunicaciones para Asterisk...............................................................................431.6.1 Conexión mediante una línea de teléfono básica (analógica)..........................................431.6.2 Conexión mediante una línea RDSI.................................................................................451.6.3 Tarjetas híbridas...............................................................................................................46

1.7 Gateways..................................................................................................................................471.7.1 Gateways analógicos, digitales y otros............................................................................471.7.2 Otras tecnologías para integrar Asterisk mediante gateways...........................................49

1.8 Recorrido por el mercado actual de la telefonía de código abierto.........................................501.8.1 Nivel 1: Plataformas de telefonía.....................................................................................501.8.2 Nivel 2: Soluciones gratuitas configurables.....................................................................511.8.3 Nivel 3: Soluciones de pago llave en mano.....................................................................53

1.9 Asterisk VS Centralitas convencionales..................................................................................541.10. Caso práctico.........................................................................................................................55

1.10.1 Requisitos de la empresa para el nuevo sistema de telefonía.........................................56Requisito 1: Extensiones y buzones de voz..........................................................................56Requisito 2: Mensajería unificada........................................................................................56Requisito 3: Reutilización de las líneas analógicas..............................................................57Requisito 4: Menú de bienvenida con opciones...................................................................57Requisito 5: Gestión de llamadas del Departamento Técnico..............................................58Requisito 6: Gestión de llamadas para los Departamentos Comercial y de Desarrollo ......58Requisito 7: Servicios comunes de telefonía........................................................................58Requisito 8: Bajo consumo eléctrico y bajo coste................................................................58

4

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

Requisito 9: Administración básica y sencilla de la centralita.............................................581.10.2 Soluciones a los requisitos deseados para el nuevo sistema de telefonía......................59

Solución al requisito 1: Extensiones y buzón de voz...........................................................59Solución al requisito 2: Mensajería unificada......................................................................59Solución al requisito 3: Reutilización de las líneas analógicas ...........................................60Solución al requisito 4: Menú de bienvenida con opciones.................................................61Solución al requisito 5: Gestión de llamadas del Departamento Técnico............................61Solución al requisito 6: Gestión de las llamadas para los Departamentos Comercial y Desarrollo.............................................................................................................................61Solución al requisito 7: Servicios comunes de telefonía......................................................61Solución al requisito 8: Bajo consumo eléctrico y bajo coste..............................................62Solución al requisito 9: Administración básica y sencilla de la centralita...........................63

1.10.3 Ejemplo de arquitectura hardware del nuevo sistema de telefonía................................632. Planificación.....................................................................................................................64

2.1. Planificación...........................................................................................................................652.1.1. Planificación temporal....................................................................................................652.1.2. Planificación de costes, modelo COCOMO....................................................................662.1.3. Aplicación del modelo ..................................................................................................672.1.4. Conclusiones de la aplicación del modelo......................................................................69

3. Elicitación de requisitos....................................................................................................703.1 Visión general del sistema.......................................................................................................71

3.1.1 Participantes en el proyecto.............................................................................................713.1.2 Objetivos del sistema.......................................................................................................733.1.3 Descripción de los objetivos prioritarios del sistema.......................................................77

3.2 Catálogo de requisitos del sistema...........................................................................................783.2.1 Requisitos de información...............................................................................................783.2.2 Requisitos funcionales.....................................................................................................88

3.2.2.1 Diagramas de casos de uso.......................................................................................883.2.2.2 Definición de actores................................................................................................953.2.2.3 Casos de uso del sistema..........................................................................................95

3.2.2.3.1 Subsistema de registro de llamadas..................................................................973.2.2.3.2 Subsistema de gestión de extensiones SIP........................................................983.2.2.3.3 Subsistema de gestión de extensiones IAX....................................................1023.2.2.3.4 Subsistema de acceso a consola cliente de Asterisk.......................................1063.2.2.3.5 Subsistema de gestión de planes de llamadas.................................................1083.2.2.3.6 Subsistema de gestión de buzones de voz......................................................1163.2.2.3.7 Subsistema de gestión del IVR.......................................................................1203.2.2.3.8 Subsistema de gestión de colas de llamadas...................................................1243.2.2.3.9 Subsistema de gestión de sistemas de música en espera................................1283.2.2.3.10 Subsistema de monitorización de servicios de la centralita..........................132

3.2.3 Reglas de negocio......................................................................................................1333.2.4 Requisitos no funcionales..........................................................................................134

3.3 Matrices de rastreabilidad......................................................................................................1354. Análisis de requisitos......................................................................................................137

4.1 Modelo estático......................................................................................................................1384.1.1 Diagrama estático...........................................................................................................1384.1.2 Tipos y valores...............................................................................................................139

5

Enrique Morón Ayuso

4.1.3 Asociaciones...................................................................................................................1534.2 Modelo dinámico, funcional y prototipos de interfaz de usuario..........................................166

4.2.1 Validación de usuario.....................................................................................................1664.2.2 Subsistema gestión de extensiones SIP .........................................................................169

4.2.2.1 Creación de extensiones SIP..................................................................................1694.2.2.2 Modificación de extensiones SIP...........................................................................1724.2.2.3 Eliminación de extensiones SIP.............................................................................174

4.2.3 Subsistema gestión de extensiones IAX .......................................................................1764.2.3.1 Creación de extensiones IAX.................................................................................1764.2.3.2 Modificación de extensiones IAX..........................................................................1794.2.3.3 Eliminación de extensiones IAX............................................................................182

4.2.4 Subsistema gestión del registro de llamadas..................................................................1844.2.5 Subsistema de acceso a consola.....................................................................................1864.2.6 Subsistema de monitorización y estadísticas del sistema..............................................1884.2.7 Subsistema de gestión del plan de llamadas..................................................................189

4.2.7.1 Creación de contextos............................................................................................1894.2.7.2 Modificación de contextos.....................................................................................191

4.2.7.2.1 Crear nueva línea en un contexto....................................................................1914.2.7.2.2 Modificación de una línea de un contexto......................................................1934.2.7.2.3 Eliminación de una línea de un contexto........................................................195

4.2.8 Funcionalidades del plan de llamadas............................................................................1974.2.8.1 Subsistema gestión de buzones de voz...................................................................197

4.2.8.1.1 Creación de buzón de voz...............................................................................1974.2.8.1.2 Modificación de un buzón de voz...................................................................1994.2.8.1.3 Eliminación de un buzón de voz.....................................................................201

4.2.8.2 Subsistema gestión de IVR.....................................................................................2024.2.8.2.1 Creación de un IVR........................................................................................2024.2.8.2.2 Modificación de un IVR.................................................................................2044.2.8.2.3 Eliminación de un IVR...................................................................................205

4.2.8.3 Subsistema gestión de colas de llamadas...............................................................2064.2.8.3.1 Creación de cola de llamada...........................................................................2064.2.8.3.2 Modificación de una cola de llamada.............................................................2084.2.8.3.3 Eliminación de una cola de llamada...............................................................209

4.2.8.4 Subsistema gestión de música en espera................................................................2104.2.8.4.1 Creación de música en espera.........................................................................2104.2.8.4.2 Modificación de música en espera..................................................................2124.2.8.4.3 Eliminación de música en espera....................................................................213

5. Diseño del sistema..........................................................................................................2155.1 Introducción...........................................................................................................................2165.2 Diagrama conceptual.............................................................................................................2175.3 El patrón de diseño: MVC.....................................................................................................2185.4 El lenguaje de programación: Python....................................................................................220

5.4.1 Introducción a Python....................................................................................................2205.4.1 Algunas particularidades de Python...............................................................................221

5.5 Framework Web : Django......................................................................................................2245.5.1 Patrón de diseño: MVC Django.....................................................................................226

5.6 Asterisk Realtime (ARA).......................................................................................................228

6

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

5.7 Asterisk Gateway Interface (AGI)30.....................................................................................2295.8 Proyecto PYST......................................................................................................................2315.9 Diseño de datos......................................................................................................................232

5.9.1 Diagrama de la base de datos.........................................................................................2325.9.2 Descripción de tablas.....................................................................................................2335.9.3 Sistema gestor para la base de datos: SQLite.................................................................2385.9.4 Normalización de la base de datos.................................................................................239

6. Implementación del sistema............................................................................................2406.1 Aspectos relevantes de la implementación............................................................................2416.2 Solución al problema de la complejidad de administrar Asterisk: Proyecto Beeton.............241

6.2.1 Configurando Asterisk Realtime....................................................................................2426.2.2 Estructura de directorios del proyecto Beeton...............................................................2456.2.3 Diseño navegacional con plantillas html........................................................................2476.2.4 Implementación de los diferentes servicios...................................................................248

6.2.4.1 Implementación del sistema de logueo del usuario administrador.........................2486.2.4.1.1 Controlador login............................................................................................2486.2.4.1.2 Plantillas para el login....................................................................................252

6.2.4.2 Implementación de la gestión del registro de llamadas..........................................2536.2.4.2.1 Configuración del módulo cdr_sqlite de Asterisk..........................................2536.2.4.2.2 Controlador de vistas del cdr..........................................................................2566.2.4.2.3 Controlador de vistas para generar el informe de llamadas en pdf.................2606.2.4.2.4 Plantillas para el registro de llamadas (cdr)....................................................2616.2.4.2.5 Capturas de pantalla del registro de llamadas.................................................264

6.2.4.3 Implementación del sistema de acceso a consola de Asterisk................................2656.2.4.3.1 Modelo y formulario para la consola..............................................................2656.2.4.3.2 Controlador de vistas para el acceso a la consola...........................................2666.2.4.3.3 Plantillas html para el acceso a la consola cliente de Asterisk.......................2686.2.4.3.4 Capturas de pantalla de la consola de Asterisk...............................................271

6.2.4.4 Implementación de la gestión de extensiones SIP..................................................2726.2.4.4.1 Mapeo de urls para la gestión de extensiones de tipo SIP .............................2726.2.4.4.2 Importación de librerías para el modelado de la gestión de extensiones SIP.2726.2.4.4.3 Modelado de datos para las extensiones SIP..................................................2736.2.4.4.4 Formularios a partir del modelo de datos de extensiones SIP........................2766.2.4.4.5 Plantillas html para la gestión de extensiones SIP..........................................277

6.2.4.5 Implementación de la gestión de extensiones IAX................................................2796.2.4.5.1 Mapeo de urls para la gestión de extensiones de tipo IAX ............................2796.2.4.5.2 Importación de librerías para el modelado de la gestión de extensiones IAX2796.2.4.5.3 Modelado de datos para las extensiones IAX.................................................2806.2.4.5.4 Formularios a partir del modelo de datos de extensiones IAX.......................2826.2.4.5.5 Plantillas html para la gestión de extensiones IAX........................................283

6.2.4.6 Implementación del servicio de monitorización del sistema..................................2856.2.4.6.1 Mapeo de urls para la monitorización y las estadísticas del sistema..............2866.2.4.6.2 Importación de librerías para la monitorización y registro de estadísticas.....2866.2.4.6.3 Controlador de la vista del muestreo de la carga de la cpu............................2876.2.4.6.4 Controlador de la vista de muestreo del uso de RAM....................................2886.2.4.6.5 Controlador de la vista de muestreo del uso del sistema de ficheros.............2886.2.4.6.6 Controlador de la vista de muestreo de las llamadas activas..........................289

7

Enrique Morón Ayuso

6.2.4.6.7 Controlador de la vista de muestreo de las extensiones registradas...............2896.2.4.6.8 Controlador de la vista de muestreo de la grafica del uso de la CPU.............2906.2.4.6.10 Controlador de la vista para la recogida de marcas para las estadísticas......2916.2.4.6.11 Script python para generar la tarea programada de recoger marcas para las gráficas...........................................................................................................................293

6.2.4.7 Implementación de la gestión de planes de llamada..............................................2946.2.4.7.1 Creación de la aplicación en django de los planes de llamada.......................2946.2.4.7.2 Modelado de datos de los planes de llamada..................................................2956.2.4.7.2 Archivo de mapeo de urls para planes de llamada..........................................2976.2.4.7.3 Modelado de datos para los planes de llamadas.............................................2976.2.4.7.4 Controlador de vistas para la gestión del plan de llamadas............................300

6.2.4.8 Implementación del instalador de funcionalidades del plan de llamadas..............3096.2.4.9 Implementación del servicio de IVR del plan de llamadas...................................3126.2.4.10 Implementación del servicio de música en espera del plan de llamadas..............3156.2.4.11 Otras funcionalidades del plan de llamadas.........................................................317

6.3 Instalación del hardware: Placa ALIX3D2............................................................................3186.4 Instalación del Sistema Operativo y Asterisk........................................................................320

7. Pruebas...........................................................................................................................3227.1 Introducción...........................................................................................................................3237.2 Pruebas de seguridad: OWASP..............................................................................................323

7.2.1 ¿Qué es OWASP?...........................................................................................................3237.2.2 Vulnerabilidades de sesiones y autenticación del usuario adminsitrador .....................3247.2.3. Cross-Site Request Forgery (CSRF).............................................................................3257.2.4. Fallo en la restricción de acceso a URLs......................................................................3267.2.5 Protección insuficiente en la capa de transporte............................................................326

7.3 Pruebas de rendimiento..........................................................................................................3287.3.1 ¿Qué es SIPp?................................................................................................................3287.3.2 Configuración del entorno de pruebas de rendimiento con SIPp...................................3297.3.3 Resultados de las pruebas SIPp......................................................................................333

7.3.3.1 Con 5 llamadas simultáneas...................................................................................3347.3.3.2 Con 10 llamadas simultáneas.................................................................................3377.3.3.3 Con 15 llamadas simultáneas.................................................................................3397.3.3.4 Con 20 llamadas simultáneas.................................................................................3417.3.3.5 Con 25 llamadas simultáneas.................................................................................343

7.3.4 Conclusiones de las pruebas de llamadas con SIPp.......................................................3458. Conclusiones y futuros desarrollos del panel web Beeton..............................................346ANEXO 1: MANUAL DE USUARIO...............................................................................3471.Introducción.....................................................................................................................3492.Instalación de BeeTon......................................................................................................3493. Usando el panel de administración web de Beeton.........................................................354

3.1 El estado del sistema..............................................................................................................3543.2 Registro de llamadas e informes............................................................................................3553.3 Gestión de extensiones ..........................................................................................................359

3.3.1 Extensiones SIP..............................................................................................................3593.3.1.1 Creación y modificación de extensiones SIP.........................................................3593.3.1.2 Eliminación de extensiones SIP.............................................................................362

3.3.2 Extensiones IAX............................................................................................................362

8

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

3.3.2.1 Creación y modificación de extensiones IAX........................................................3623.3.2.2 Eliminación de extensiones IAX............................................................................365

3.4 Plan de llamadas....................................................................................................................3663.4.1 Llamadas entre extensiones del mismo contexto...........................................................3663.4.2 Llamadas entre extensiones de diferentes contextos......................................................3703.4.3 Menú de bienvenida con opciones (IVR).......................................................................3753.4.4 Añadir música en espera a una extensión.......................................................................380

3.5 Gestión de módulos: funcionalidades del plan de llamadas..................................................3823.6 Acceso a la consola cliente de Asterisk.................................................................................3833.7 Gestión de ficheros de audio..................................................................................................383

ANEXO 2...........................................................................................................................384Conceptos básicos sobre los ficheros de configuración de Asterisk............................................384

1. Directorios de Asterisk........................................................................................................3842. Gestión del plan de marcación de Asterisk.........................................................................385

2.1. Contextos.....................................................................................................................3852.2. Extensiones..................................................................................................................3862.3. Prioridades...................................................................................................................3882.4. Aplicaciones................................................................................................................388

9

Enrique Morón Ayuso

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

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.......................93Figura 43: Diagrama de casos de uso del subsistema de gestión del IVR..........................................94Figura 44: Diagrama de casos de uso del subsistema de monitorización de la centralita..................94Figura 45: Esquema dinámico: login de usuario administrador.......................................................167Figura 46: Prototipo login de usuario administrador........................................................................168Figura 47: Esquema dinámico: Alta de extensión SIP.....................................................................171Figura 48: Esquema dinámico: Modificar extensión SIP.................................................................173Figura 49: Esquema dinámico: Eliminar extensión SIP...................................................................175Figura 50: Esquema dinámico: Crear extensión IAX.......................................................................178Figura 51: Esquema dinámico: Modificar extensión IAX...............................................................181Figura 52: Esquema dinámico: Eliminar extensión IAX.................................................................183Figura 53: Esquema dinámico: Consulta del registro de llamadas...................................................185Figura 54: Esquema dinámico: Ejecución de ordenes en consola....................................................187Figura 55: Esquema dinámico: Consulta estadísticas del sistema....................................................188Figura 56: Esquema dinámico: Crear nuevo contexto.....................................................................190Figura 57: Esquema dinámico: Crear nueva línea en un contexto...................................................192Figura 58: Esquema dinámico: Modificar línea de un contexto.......................................................194Figura 59: Esquema dinámico: Borrar linea de un contexto............................................................196Figura 60: Esquema dinámico: Crear un buzón de voz....................................................................198Figura 61: Esquema dinámico: Modificar un buzón de voz.............................................................200Figura 62: Esquema dinámico: Borrar buzón de voz.......................................................................201Figura 63: Esquema dinámico: Crear sistema IVR..........................................................................203Figura 64: Esquema dinámico: Modificar IVR................................................................................204Figura 65: Esquema dinámico: Eliminar IVR..................................................................................205Figura 66: Esquema dinámico: Crear cola de llamadas...................................................................207Figura 67: Esquema dinámico: Modificar cola de llamada..............................................................208Figura 68: Esquema dinámico: Borrar cola de llamada...................................................................209Figura 69: Esquema dinámico: Crea sistema de música en espera..................................................211Figura 70: Esquema dinámico: Modificar sistema de música en espera..........................................213Ilustración 71: Esquema dinámico: Borrar sistema de música en espera.........................................214Figura 72: Diagrama conceptual......................................................................................................217Figura 73: Modelo-Vista-Controlador..............................................................................................218Figura 74: Tipos de datos en Python................................................................................................222Figura 75: Configuración de Asterisk Realtime usando un driver ODBC.......................................243Figura 76: Listado de directorios......................................................................................................245Figura 77: Diseño navegacional con plantillas HTML....................................................................247Figura 78: Fichero de mapeo de url del proyecto: asteriskbee/urls.py.............................................248Figura 79: Fichero de vistas del proyecto: asteriskbee/views.py.....................................................249Figura 80: Fichero de vistas del proyecto: asteriskbee/views.py.....................................................249Figura 81: Función ingresar del fichero asteriskbee/views.py.........................................................249Figura 82: Función admin del fichero asteriskbee/views.py............................................................250Figura 83: Función cerrar del fichero asteriskbee/views.py.............................................................250Figura 84: Plantilla html para el login: asteriskbee/templates/login_base.html...............................252Figura 85: Configuración del módulo cdr_sqlite de Asterisk...........................................................253Figura 86: Fichero de configuración /etc/asterisk/cdr_sqlite3_cumston.conf..................................254Figura 87: Fichero de mapeo de url del proyecto: asteriskbee/urls.py.............................................256Figura 88: Función cdr del fichero: /asteriskbee/api_cdr/views.py..................................................258

11

Enrique Morón Ayuso

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

12

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

asteriskbee/urls.py............................................................................................................................286Figura 124: Librerias importadas para las vistas de muestreo de estadísticas: beeton/asteriskbee/api_status/views.py............................................................................................286Figura 125: Función carga_cpu del fichero beeton/asteriskbee/api_status/views.py.......................287Figura 126: Función uso_ram del fichero beeton/asteriskbee/api_status/views.py.........................288Figura 127: Función uso_sist_fich_raiz del fichero beeton/asteriskbee/api_status/views.py..........289Figura 128: Función llamadas_activas del fichero beeton/asteriskbee/api_status/views.py............290Figura 129: Función lista_extensiones_reg del fichero beeton/asteriskbee/api_status/views.py.....290Figura 130: Función grafica_uso_cpu_dia del fichero beeton/asterisk-bee/api_status/views.py.....291Figura 131: Función recoge_marcas del fichero beeton/asterisk-bee/api_status/scripts_graficas/recoge_marcas_graficas.py.............................................................292Figura 132: Función recoge_marcas del fichero beeton/asterisk-bee/api_status/scripts_graficas/recoge_marcas_graficas.py.............................................................293Figura 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...................................................294Figura 134: Linea de api_dialplan en la lista de aplicaciones en settings.py...................................295Figura 135: Script Tabla Realtime del DialplanX............................................................................296Figura 136: Modelo de datos para una línea del dialplan en /home/asterisk-bee/asteriskbee/api_dialplan/models.py...........................................................................................297Figura 137: Fichero de mapeo de urls para la gestión de los contextos de Asterisk: asteriskbee/urls.py............................................................................................................................298Figura 138: Modela para la gestión de los contextos de Asterisk: beeton/asteriskbee/api_dialplan/models.py......................................................................................298Figura 139: Modelo para la gestión de los contextos de Asterisk: beeton/asteriskbee/api_dialplan/models.py......................................................................................299Figura 140: Modelo para la gestión de los contextos de Asterisk: beeton/asteriskbee/api_dialplan/models.py......................................................................................300Figura 141: Función para mostrar los contextos de Asterisk: beeton/asteriskbee/api_dialplan/views.py........................................................................................301Figura 142: Función para añadir un nuevo contexto en Asterisk: beeton/asteriskbee/api_dialplan/views.py........................................................................................302 Figura 143: Función para modificar o añadir una línea a un contexto: beeton/asteriskbee/api_dialplan/views.py........................................................................................307Figura 144: Función para modificar el comentario de una línea del contexto: beeton/asteriskbee/api_dialplan/views.py........................................................................................308Figura 145: Función para borrar una línea del contexto: beeton/asteriskbee/api_dialplan/views.py..........................................................................................................................................................308 Figura 146: Función para cambiar la posición de una línea por otra en un contexto: beeton/asteriskbee/api_dialplan/views.py........................................................................................309Figura 147: Estructura del paquete de funcionalidad.......................................................................310Figura 148: Fichero de mapeo de urls para la administración de funcionalidades del plan de llamadas: asteriskbee/urls.py............................................................................................................311Figura 149: Modelado para la gestión de las funcionalidades del plan de llamadas: beeton/asteriskbee/api_admin_func/models.py................................................................................311Figura 150: Vista para la instalación de las funcionalidades del plan de llamadas: beeton/asteriskbee/api_admin_func/views.py ...............................................................312Figura 151: Definición de la aplicación IVR del plan de llamadas: ivr.json....................................313

13

Enrique Morón Ayuso

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

14

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

Figura 198: Línea responder llamadas extesión 125........................................................................369Figura 199: Lista de contextos.........................................................................................................370Figura 200: Crear nuevo contexto: "Dpto. técnico".........................................................................370Figura 201: Lista de contextos.........................................................................................................370Figura 202: Lista de extensiones SIP...............................................................................................370

Índice de tablasTabla:Universidad_de_Sevilla............................................................................................................71Tabla:Dpto_Lenguajes_y_Sistemas_Informáticos.............................................................................71Tabla:Participante_Enrique_Morón_Ayuso.......................................................................................71Tabla:Tutor_Pablo_Neira...................................................................................................................72Tabla:Objetivo_Gestión_autenticación_usuario.................................................................................73Tabla:Objetivo_gestión_registro_de_extensiones..............................................................................73Tabla:Objetivo_gestión_planes_de_llamada......................................................................................74Tabla:Objetivo_gestión_de_estadísticas.............................................................................................75Tabla:Objetivo_acceso_consola_de_Asterisk....................................................................................76Tabla:IRQ-0001-Credenciales_usuario_administrador......................................................................78Tabla:IRQ-0002-Información_extensiones_SIP................................................................................79Tabla:IRQ-0003-Información_extensiones_IAX...............................................................................80Tabla:IRQ-0004-Infomación_línea_del_dialplan...............................................................................81Tabla:IRQ-0005-Infomación_registro_de_llamadas..........................................................................82Tabla:IRQ-0006-Información_sobre_buzón_de_voz.........................................................................83Tabla:IRQ-0007-Información_de_las_colas_de_llamadas................................................................84Tabla:IRQ-0008-Infoamción_sobre_música_en_espera....................................................................85Tabla:IRQ-0009-Infomación_sobre_la_monitorización_del_sistema................................................85Tabla:IRQ-0010-Información_sobre_el_IVR....................................................................................86Tabla:IRQ-0011-Información_del_historial_de_la_consola..............................................................87Tabla:ACT-001-Actor_Administrador...............................................................................................95Tabla:UC-0001-Identificación_del_usuario_Administrador..............................................................95Tabla:UC-0002-Cerrar_sesión_usuario_Administrador.....................................................................96Tabla:UC-0003-Consulta_registro_de_llamadas................................................................................97Tabla:UC-004-Consulta_extensiones_SIP.........................................................................................98Tabla:UC-005-Crear_nueva_extensión_SIP......................................................................................99Tabla:UC-0006-Modificar_extensión_SIP.......................................................................................100Tabla:UC-0007-Eliminar_extensión_SIP.........................................................................................101Tabla:UC-0008-Consulta_extensiones_IAX....................................................................................102Tabla:UC-0009-Crear_nueva_extensión_IAX.................................................................................103Tabla:UC-0010-Modificación_extensión_IAX................................................................................104Tabla:UC-0011-Eliminar_extensión_IAX........................................................................................105Tabla:UC-0012-Acceso_a_consola_Asterisk...................................................................................106Tabla:UC-0013-Envío_orden_consola_Asterisk..............................................................................107Tabla:UC-0014-Consulta_lista_contextos_del_dialplan..................................................................108Tabla:UC-0015-Crear_nuevo_contexto_del_dialplan......................................................................109Tabla:UC-0016-Modificar_contexto_del_dialplan...........................................................................110Tabla:UC-0017-Eliminar_contexto...................................................................................................111

15

Enrique Morón Ayuso

Tabla:UC-0018-Lista_líneas_de_un_contexto.................................................................................112Tabla:UC-0019-Crear_nueva_línea_en_un_contexto......................................................................113Tabla:UC-0020-Modificar_línea_de_un_contexto...........................................................................114Tabla:UC-0021-Eliminar_línea_de_un_contexto.............................................................................115Tabla:UC-0022-Consulta_buzones_de_voz.....................................................................................116Tabla:UC-0023-Crear_nuevo_buzón_de_voz..................................................................................117Tabla:UC-0024-Modificar_buzón_de_voz.......................................................................................118Tabla:UC-0025-Eliminar_buzón_de_voz.........................................................................................119Tabla:UC-0026-Consulta_líneas_dialplan_con_IVR.......................................................................120Tabla:UC-0027-Crear_nueva_línea_con_IVR.................................................................................121Tabla:UC-0028-Modificar_línea_con_IVR......................................................................................122Tabla:UC-0029-Eliminar_línea_con_IVR........................................................................................123Tabla:UC-0030-Consulta_colas_de_llamadas..................................................................................124Tabla:UC-0031-Crear_cola_de_llamadas........................................................................................125Tabla:UC-0032-Modificar_cola_de_llamadas.................................................................................126Tabla:UC-0033-Eliminar_cola_de_llamadas...................................................................................127Tabla:UC-0034-Consulta_listado_de_sistemas_de_música_en_espera...........................................128Tabla:UC-0035-Crear_nuevo_sistema_de_música_en_espera........................................................129Tabla:UC-0036-Modificar_sistema_de_música_en_espera.............................................................130Tabla:UC-0037-Eliminar_sistema_de_música_en_espera...............................................................131Tabla:UC-0038-Monitorización_de_servicios_básicos_de_la_centralita........................................132Tabla:FRQ-0001-Unicidad_registro_extensiones_SIP....................................................................133Tabla:FRQ-002-Unicidad_de_registro_de_extensiones_IAX..........................................................133Tabla:NFR-0001-Usabilidad............................................................................................................134Tabla:NFR-0002-Rendimiento.........................................................................................................134Tabla67.............................................................................................................................................135Tabla68.............................................................................................................................................135Tabla:TYP-0001-Usuario.................................................................................................................139Tabla:Atributo-Usuario::Nombre.....................................................................................................139Tabla:Atributo_usuario::Contraseña.................................................................................................139Tabla:TYP-0002-Extensión_SIP......................................................................................................140Tabla:Atributo_Extensión_SIP::Nombre..........................................................................................140Tabla:Atributo_Extensión_SIP::Apellidos.......................................................................................140Tabla:Atributo_Extensión_SIP::Número_de_la_extensión..............................................................140Tabla:Atributo_Extensión_SIP::Usuario..........................................................................................141Tabla:Atributo_Extensión_SIP::Contraseña.....................................................................................141Tabla:Atributo_Extensión_SIP::Contexto........................................................................................141Tabla:Atributo_Extensión_SIP::Callerid..........................................................................................141Tabla:TYP-0003-Extensión_IAX.....................................................................................................142Tabla:Atributo_Extensión_IAX::Nombre........................................................................................142Tabla:Atributo_Extensión_IAX::Apellidos......................................................................................142Tabla:Atributo_Extensión_IAX::Número_de_la_extensión............................................................142Tabla:Atributo_Extensión_IAX::Usuario.........................................................................................143Tabla:Atributo_Extensión_IAX::Contraseña...................................................................................143Tabla:Atributo_Extensión_IAX::Contexto.......................................................................................143Tabla:Atributo_Extensión_IAX::Callerid........................................................................................143Tabla:TYP-0004-Línea_del_dialplan...............................................................................................144

16

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

Tabla:Atributo_Línea_del_dialplan::Contexto.................................................................................144Tabla:Atributo_Línea_del_dialplan::Extensión................................................................................144Tabla:Atributo_Línea_del_dialplan::Prioridad.................................................................................144Tabla:Atributo_Línea_del_dialplan::Aplicación..............................................................................145Tabla:Atributo_Línea_del_dialplan::Parámetros..............................................................................145Tabla:TYP-0005-Registro_de_llamada............................................................................................145Tabla:Atributo_Registro_de_llamada::Fecha...................................................................................145Tabla:Atributo_Registro_de_llamada::Hora....................................................................................146Tabla:Atributo_Registro_de_llamada::Identificador........................................................................146Tabla:Atributo_Registro_de_llamada::Emisor.................................................................................146Tabla:Atributo_Registro_de_llamada::Receptor..............................................................................146Tabla:Atributo_Registro_de_llamada::Contexto..............................................................................146Tabla:Atributo_Registro_de_llamada::Duración..............................................................................147Tabla:Atributo_Registro_de_llamada::Estado..................................................................................147Tabla:TYP-0006-Buzón_de_voz......................................................................................................147Tabla:Atributo_Buzón_de_voz::Número_de_buzón_de_voz..........................................................147Tabla:TYP-0007-Cola_de_llamada..................................................................................................148Tabla:Atributo_Cola_de_llamada::Nombre.....................................................................................148Tabla:Atributo_Cola_de_llamada::Lista_de_extensiones................................................................148Tabla:Atributo_Cola_de_llamada::Prioridades................................................................................148Tabla:Atributo_Cola_de_llamada::Fichero_de_audio......................................................................149Tabla:TYP-0008-Música_en_espera................................................................................................149Tabla:Atributo_Mśica_en_espera::Fichero_de_audio......................................................................149Tabla:TYP-0009-IVR.......................................................................................................................149Tabla:Atributo_IVR::Extensión........................................................................................................150Tabla:Atributo_IVR::Audio_dentro_de_horario..............................................................................150Tabla:Atributo_IVR::Audio_fuera_de_horario................................................................................150Tabla:Atributo_IVR::Intervalo_horario............................................................................................150Tabla:TYP-0010-Estadística.............................................................................................................150Tabla:Atributo_Estadística::Porcentaje_uso_CPU...........................................................................151Tabla:Atributo_Estadística::Hora.....................................................................................................151Tabla:Atributo_Estadística::Fecha....................................................................................................151Tabla:Atributo_Estadística::Cantidad_de_llamadas.........................................................................151Tabla:TYP-0012-Comando..............................................................................................................152Tabla:Atributo_Comando::Nombre..................................................................................................152Tabla:ASO-0001-Crea(Usuario,Extensón_SIP)...............................................................................153Tabla:Rol_Crea(Usuario,Extensión_SIP)::Usuario..........................................................................153Tabla:Rol_Crea(Usuario,Extensión_SIP)::Extensión_SIP...............................................................153Tabla:ASO-0002-Crea(Usuario,Extensión_IAX).............................................................................154Tabla:Rol_Crea(Usuario,Extensión_IAX)::Usuario.........................................................................154Tabla:Rol_Crea(Usuario,Extensión_IAX)::Extensión_IAX............................................................154Tabla:ASO-0003-Genera(Usuario,Comando)..................................................................................155Tabla:Rol_Genera(Usuario,Comando)::Usuario..............................................................................155Tabla:Rol_Genera(Usuario,Comando)::Historial.............................................................................155Tabla:ASO-0004-Produce(Registro_de_llamada,Estadística).........................................................156Tabla:Rol_Produce(Registro_de_llamada,Estadística)::Registro_de_llamada................................156Tabla:Rol_Produce(Registro_de_llamada,Estadística)::Estadística.................................................156

17

Enrique Morón Ayuso

Tabla:ASO-0005-esta_asociada(Extensión_SIP,Línea_del_dialplan)..............................................157Tabla:Rol_esta_asociada(Extensión_SIP,Línea_del_dialplan)::Extensión_SIP...............................157Tabla:Rol_esta_asociada(Extensión_SIP,Línea_del_dialplan)::Línea.............................................157Tabla:ASO-0006-esta_asociada(Extensión_IAX,Línea_del_dialplan)............................................158Tabla:Rol_esta_asociada(Extensión_IAX,Línea_del_dialplan)::Extensión_IAX...........................158Tabla:Rol_esta_asociada(Extensión_IAX,Línea_del_dialplan)::Línea_del_dialplan......................158Tabla:ASO-0007-define(Usuario,Línea_del_dialplan)....................................................................159Tabla:Rol_define(Usuario,Línea_del_dialplan)::Usuario................................................................159Tabla:Rol_define(Usuario,Línea_del_dialplan)::Línea_del_dialplan..............................................159Tabla:ASO-0008-funcionalidad_de(Línea_del_dialplan,Buzón_de_voz).......................................160Tabla:Rol_funcionalidad_de(Línea_del_dialplan,Buzón_de_voz)::Línea.......................................160Tabla:Rol_funcionalidad_de(Línea_del_dialplan,Buzón_de_voz)::Buzón_de_voz........................160Tabla:ASO-0009-funcionalidad_de(Línea_del_dialplan,Música_en_espera).................................161Tabla:Rol_funcionalidad_de(Línea_del_dialplan,Música_en_espera)::Línea.................................161Tabla:Rol_funcionalidad_de(Línea_del_dialplan,Música_en_espera)::Música_en_espera............161Tabla:ASO-0010-funcionalidad_de(Línea_del_dialplan,Cola_de_llamada)...................................162Tabla:Rol_funcionalidad_de(Línea_del_dialplan,Cola_de_llamada)::Línea...................................162Tabla:Rol_funcionalidad_de(Línea_del_dialplan,Cola_de_llamada)::Cola_de_llamadas..............162Tabla:ASO-0011-funcionalidad_de(Línea_del_dialplan,IVR)........................................................163Tabla:Rol_funcionalidad_de(Línea_del_dialplan,IVR)::Línea........................................................163Tabla:Rol_funcionalidad_de(Línea_del_dialplan,IVR)::IVR..........................................................163Tabla:ASO-0012-Consulta(Usuario,Registro_de_llamada).............................................................164Tabla:Rol_Consulta(Usuario,Registro_de_llamada)::Usuario.........................................................164Tabla:Rol_Consulta(Usuario,Registro_de_llamada)::Registro_de_llamadas..................................164Tabla:ASO-0013-Consulta(Usuario,Estadística)..............................................................................165Tabla:Rol_Consulta(Usuario,Estadística)::Usuario..........................................................................165Tabla:Rol_Consulta(Usuario,Estadística)::Estadística.....................................................................165Tabla:SOP-0001-Identificación_del_usuario_administrador...........................................................166Tabla:Excepción_Identificación_del_usuario_administrador::no_pre1...........................................166Tabla:Excepción_Identificación_del_usuario_administrador::Usuario_no_registrado...................167Tabla:Excepción_Identificación_del_usuario_administrador::Contraseña_errónea........................167Tabla:SOP-0002-Crear_nueva_extensión_SIP.................................................................................169Tabla:Excepción_Crear_nueva_extensión_SIP::no_pre2................................................................170Tabla:Excepción_Crear_nueva_extensión_SIP::Algún_campo_vacío............................................170Tabla:Excepción_Crear_nueva_extensión_SIP::Verificación_contraseña_incorrecta.....................170Tabla:SOP-0004-Modificar_extensión_SIP.....................................................................................172Tabla:Excepción_Modificar_extensión_SIP::Algún_campo_vacío.................................................172Tabla:Excepción_Modificar_extensión_SIP::Contraseña_incorrecta..............................................173Tabla:SOP-0006-Borrar_extensión_SIP...........................................................................................174Tabla:Excepción_Borrar_extensión_SIP::pre2................................................................................174Tabla:SOP-0003-Crear_nueva_extensión_IAX...............................................................................176Tabla:Excepción_Crear_extensión_IAX::no_pre2...........................................................................177Tabla:Excepción_Crear_extensión_IAX::Algún_campo_vacío......................................................177Tabla:Excepción_Crear_extensión_IAX::Verificación_contraseña_incorrecta...............................177Tabla-SOP-0005-Modificar_extensión_IAX....................................................................................179Tabla:Excepción_Modificar_extensión_IAX::Algún_campo_vacío...............................................180Tabla:Excepción_Modificar_extensión_IAX::Verificación_contraseña_incorrecta........................180

18

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

Tabla:SOP-0007-Borrar_extensión_IAX.........................................................................................182Tabla:Excepción_Borrar_extensión_IAX::pre2...............................................................................182Tabla:SOP-0026-Consulta_registr_de_llamadas..............................................................................184Tabla:SOP-0008-Acceso_a_consola................................................................................................186Tabla:SOP-0027-Consulta_estadísticas............................................................................................188Tabla:SOP-0009-Crear_nuevo_contexto..........................................................................................189Tabla:Excepción_Crear_nuevo_contexto::no_pre2..........................................................................189Tabla:Excepción_Crear_nuevo_contexto::campo_nombre_contexto_vacío...................................190Tabla:SOP-0011-Crear_nueva_línea_en_un_contexto.....................................................................191Tabla:Excepción_Crear_nueva_línea_en_un_contexto::no_pre3....................................................192Tabla:SOP-0012-Modificar_línea_en_un_contexto.........................................................................193Tabla:SOP-0013-Borrar_línea_en_un_contexto..............................................................................195Tabla:SOP-0014-Crear_nuevo_buzón_de_voz................................................................................197Tabla:Excepción_Crear_nuevo_buzón_de_voz::no_pre2................................................................198Tabla:SOP-0015-Modificar_buzón_de_voz.....................................................................................199Tabla:SOP-0016-Borrar_buzón_de_voz..........................................................................................201Tabla:SOP-0017-Crear_nuevo_sistema_IVR...................................................................................202Tabla:Excepción_Crear_nuevo_sistema_IVR::no_pre2..................................................................202Tabla:SOP-0018-Modificar_un_sistema_IVR.................................................................................204Tabla:SOP-0019-Borrar_un_sistema_IVR.......................................................................................205Tabla:SOP-0020-Crear_nuevo_sistema_de_colas_de_llamadas......................................................206Tabla198...........................................................................................................................................206Tabla:SOP-0021-Modificar_sistema_colas_de_llamadas................................................................208Tabla:SOP-0022-Borrar_cola_de_llamadas.....................................................................................209Tabla:SOP-0023-Crear_sistema_de_música_en_espera..................................................................210Tabla:Excepción_Crear_sistema_de_música_en_espera::no_pre2..................................................210Tabla203...........................................................................................................................................212Tabla:SOP-0025-Borrar_sistema_de_música_en_espera.................................................................213

19

Enrique Morón Ayuso

1. Introducción

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:

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: http://www.telegeography.com/research-services/telegeography-report-database/

21

Figura 1: Crecimiento en billones de minutos del tráfico de la telefonía tradicional y VoIP de 1993 a 2013.

Enrique Morón Ayuso

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

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: http://es.wikipedia.org/wiki/PBX; o el libro: VoIP y Asterisk, Redescubriendo la telefonía, (AlfaOmega-RA MA), pág:12.

23

Enrique Morón Ayuso

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

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.

1.1.1. ¿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

Enrique Morón Ayuso

1.1.2. ¿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 Spencer2, 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.

2Introducció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

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.

1.2.1 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.

27

Figura 2: Asterisk en una red interna

Enrique Morón Ayuso

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.

28

Figura 3: Asterisk conectado a Internet

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

1.2.3 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.

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

Figura 4: Asterisk conectado a la RTB

Enrique Morón Ayuso

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:

1.3.1. 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.

3Web oficial del proyecto FreePBX: http://www.freepbx.org/4Más información acerca del módulo FOP de Asterisk en: www.asternic.org

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.

4Imágenes de la wiki oficial de la web de freePBX: http://wiki.freepbx.org/display/F2/Screen+Shots#ScreenShots-FreePBXScreenShots

31

Figura 5: Panel de estado freePBX

Enrique Morón Ayuso

32

Figura 6: Creación de extensión SIP en FreePBX

Figura 7: Consola cliente de Asterisk desde FreePBX

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

1.3.2. 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:

5AsteriskGUI 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, (AlfaOmega-RA MA) pág: 130.6Mas información acerca de AMI en: http://www.voip-info.org/wiki/view/Asterisk+manager+API

33

Enrique Morón Ayuso

34

Figura 8: Estado del sistema de AsteriskGUI 2.0

Figura 9: Creación de extensiones en AsteriskGUI 2.0

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

1.3.3. 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.

7Se puede probar al demo online de la interfaz de administración voiceone en el siguiente enlace: http://demo.voiceone.it

35

Enrique Morón Ayuso

- Capturas de pantalla: Algunas de las imágenes de la interfaz web Voiceone se muestran a continuación:

36

Figura 11: Panel de administración web Voiceone - Reglas de llamadas

Figura 10: Panel de administración Voiceone – Gestión de extensiones

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.

1.4.1 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 e-mail 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

Enrique Morón Ayuso

- 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

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

1.4.2 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:

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

Figura 12: Tabla de algunas de las características y funcionalidades de AsteriskGUI, FreePBX, Voiceone y el proyecto Beeton

AsteriskGUI FreePBX Voiceone

Documentación

Grupos de llamada

Música en espera

Soporte

Complejidad de uso

Mi proyecto: Beeton

Monitorización básica del sistemaGestión de usuarios y extensionesMonitorización básica de llamadas actualesSistema de gestión de IVR (Interactive Voice Response)Gestión del buzón de voz de los usuariosReglas de llamada entrantes y salientes (Incoming/Outbound Calling roules)

Gestión de colas de llamadas

Consola de Asterisk CLI

Enrique Morón Ayuso

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.

1.5.1 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-Lite8 de CounterPath Corporation o el Zoiper9. Existen además softphones para smartphones con Android, iOS y Symbian entre otros.

8Para más información visita la web oficial de CounterPath: http://www.counterpath.com/x-lite.html9Para más información visita la web oficial de Zoiper: http://www.zoiper.com/

40

Figura 13: Interfaz del softphone X-Lite 3

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

1.5.2 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.

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.

41

Figura 14: Modelos de teléfonos IP Cisco

Figura 15: Videoteléfono Grandstream GXV3140

Enrique Morón Ayuso

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.

10Para más información sobre los tonos de marción DTMF: http://en.wikipedia.org/wiki/DTMF

42

Figura 16: Altavoz IP para techo (Cyberdata)

Figura 17: Portero electrónico IP (Alphatech Fermax IP DP)

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.

1.6.1 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 POTS11 (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.

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.

11Para más información sobre el término POTS consulta la wikipedia: http://es.wikipedia.org/wiki/POTS

43

Figura 18: Modelo AEX800 de Digium con ocho puertos analógicos

Enrique Morón Ayuso

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.

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

Figura 19: Interfaces FXS y FXO

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

1.6.2 Conexión mediante una línea RDSI

Otra forma muy común de conexión a la RTB12 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.

12Para más información sobre el término RTB (Red de Telefonía Conmutada) consulta la wikipedia: http://es.wikipedia.org/wiki/Red_Telef%C3%B3nica_B%C3%A1sica

45

Figura 20: Tarjeta Sangoma A500 BRI

Enrique Morón Ayuso

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 GSM13

mediante una tarjeta SIM.

13Para más información sobre el término GSM consulta la wikipedia: http://es.wikipedia.org/wiki/Sistema_global_para_las_comunicaciones_m%C3%B3viles

46

Figura 21: Tarjeta híbrida: Digium HB8

Figura 22: Tarjeta híbrida: Beronet BF6400

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.

1.7.1 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.

47

Figura 23: Gateway Linksys SPA3102

Enrique Morón Ayuso

También hay disponibles gateways para líneas RDSI básicas y RDSI primarias. Como por ejemplo:

48

Figura 24: Quadro ISDN Gateway de 4 puertos BRI

Figura 25: Grandstream ATA - 503 con un puerto FXS y un

puerto FXO

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

1.7.2 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.

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.

49

Figura 26: Topex Mobilink 2 GSM a VoIP

Figura 27: Gateway Topex Tetra-SIP

Enrique Morón Ayuso

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.

1.8.1 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.

14Web oficial del proyecto sipXecs: http://www.sipfoundry.org/ 15Web oficial del proyecto Yate: http://yate.null.ro/

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.

1.8.2 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.

16Web oficial del proyecto Freeswitch: http://www.freeswitch.org/ 17Web oficial del proyecto FreePBX: http://www.freepbx.org/ 18Web oficial del proyecto PBX in a Flash: http://pbxinaflash.org/

51

Enrique Morón Ayuso

- 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

19Web oficial del proyecto AsteriskNOW: http://www.asterisk.org/downloads/asterisknow 20Web oficial del proyecto VoyageONE: http://linux.voyage.hk/voyage-one 21Web oficial del proyecto Elastix: http://www.elastix.org/index.php/es/

52

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

1.8.3 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.

22Web oficial del proyecto TrixBoxPro: http://www.fonality.com/trixbox 23Web oficial del proyecto Asterisk Business: http://www.digium.com/en/solutions/company-size/medium-business

53

Enrique Morón Ayuso

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).

24Una de las soluciones hardware de una centralia que ofrece Alcatel para una empresa mediana :

http://enterprise.alcatel-lucent.com/?product=OmniPCXOfficeRichCommunicationEdition&page=overview

54

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

1.10. 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 tele-asistencias 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

Enrique Morón Ayuso

1.10.1 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

Figura 28: Líneas analógicas de cada departamento

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:

- 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

Figura 29: Menú de bienvenida de respuesta de voz interactiva

Enrique Morón Ayuso

-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

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.

1.10.2 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

Enrique Morón Ayuso

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 Beronet25 con el módulo integrado “BF4FXO”26, con un precio alrededor de unos 400 Euros.

Se ha optado por esta opción por ser una solución modular, ya que se puede adaptar a las necesidades de cada caso.

25Para más información se puede consultar la documentación web oficial de Beronet:

http://www.beronet.com/product/beronet-gateways/ 26Para más información se puede consultar la documentación técnica de la wiki oficial de Beronet:

http://wiki.beronet.com/index.php/BerofixDocuV2#Bf4FXO_4_port_analog_module

60

Figura 30: Carcasa del gateway Beronet con el módulo BF4FXO

Figura 31: Módulo Beronet BF4FXO

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

Enrique Morón Ayuso

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/LX80027 , se trata de un sistema empotrado con las siguientes características:

- Microprocesador de 500 Mhz AMD Geode LX800.- Memoria RAM de 256 MB DDR.- Un puerto de LAN Ethernet RJ-45.- Un puerto Serie DB9 y dos puertos USB.- Unidad de almacenamiento: Una tarjeta CompactFlash de 4 GB.- Precio aproximado 90 Euros.

27Para más información acerca de la placa ALIX3D2/LX800 se puede ver la documentación oficial de la

página oficial de PCEngines: http://www.pcengines.ch/alix3d2.htm

62

Figura 32: Placa ALIX 3D2 con carcasa de aluminio

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.

1.10.3 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.

63

Figura 33: Ejemplo de arquitectura hardware utilizada para el caso práctico presentado

Enrique Morón Ayuso

2. Planificación

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.

2.1.1. 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:

65

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%

Enrique Morón Ayuso

2.1.2. 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

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:

2.1.3. 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

Modo a

Orgánico 2,40 1,05 2,50 0,38

3,00 1,12 2,50 0,35

Rígido 3,60 1,20 2,50 0,32

b c d

Semilibre

Enrique Morón Ayuso

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 = 8400 €

68

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

2.1.4. 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 siempre28.

28Más detalles acerca del modelo cocomo: http://www.sc.ehu.es/jiwdocoj/mmis/cocomo.htm

69

Enrique Morón Ayuso

3. Elicitación de requisitos

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.

3.1.1 Participantes en el proyecto

Organización Universidad de Sevilla

Dirección C/ San Fernando,4 41004 - Sevilla

Teléfono 954551000

Comentarios Web: www.us.es

Organización Departamento de Lenguajes y Sistemas Informáticos

Dirección Avda. Reina Mercedes s/n. 41012 Sevilla

Teléfono 954557139

Fax 954557139

Comentarios Web: www.lsi.us.es E-mail: [email protected]

Participante Enrique Morón Ayuso

Organización Universidad de Sevilla

Rol Miembro del proyecto

Es desarrollador Sí

Es cliente No

Es usuario No

Comentarios E-mail: [email protected]

71

Enrique Morón Ayuso

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

Comentarios Web: http://1984.lsi.us.es/~pablo/ E-mail: [email protected]

72

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

3.1.2 Objetivos del sistema

OBJ-0001 Gestión de autenticación del usuario Administrador

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios Ninguno

OBJ-0002 Gestionar registro de extensiones

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios Los tipos de extensiones que se gestionarán son de tipo IAX y SIP.

73

Enrique Morón Ayuso

OBJ-0003 Gestionar planes de llamada (DialPlan)

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios Ninguno

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 • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Enrique Morón Ayuso

OBJ-0005 Acceso a la consola cliente de la centralita

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios 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

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

3.1.3 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-000 4 ] Gestión de estadísticas [OBJ-000 5 ] Acceso a la consola cliente de Asterisk

77

Enrique Morón Ayuso

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.

3.2.1 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 • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [OBJ-0001] Autenticación del usuario Administrador

Descripción 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:

Datos específicos • Nombre de usuario • Contraseña

Importancia vital

Urgencia inmediatamente

Estado pendiente de verificación

Estabilidad media

Comentarios 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

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 • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [OBJ-0002] Gestionar registro de extensiones

Descripción El sistema deberá almacenar la información básica correspondiente a el registro de extensiones SIP de la centralita. En concreto:

Datos específicos • 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

Comentarios En el registro de la extensión SIP se especifica si dicha extensión usa o no buzón de voz

79

Enrique Morón Ayuso

IRQ-0003 Información sobre extensiones IAX

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [OBJ-0002] Gestionar registro de extensiones

Descripción El sistema deberá almacenar la información correspondiente a el registro de extensiones IAX de la centralita. En concreto:

Datos específicos • 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

Comentarios En el registro de la extensión SIP se especifica si dicha extensión usa o no buzón de voz

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 • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [OBJ-0003] Gestionar planes de llamada (DialPlan)

Descripción El sistema deberá almacenar la información correspondiente a la línea del Plan de llamada (Dialplan) de la centralita. En concreto:

Datos específicos

• 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

Comentarios 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

Enrique Morón Ayuso

IRQ-0005 Información sobre el registro de llamadas

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [OBJ-000 4 ] Gestión de estadísticas

Descripción El sistema deberá almacenar la información correspondiente a el registro de todas las llamadas tanto entrantes como salientes. En concreto:

Datos específicos • 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

Comentarios Se recogerán los datos especificados para poder generar informes de llamadas según un criterio de búsqueda

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 • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [OBJ-0003] Gestionar planes de llamada (DialPlan)

Descripción El sistema deberá almacenar la información correspondiente de cada uno de los buzones de voz dados de alta en la centralita. En concreto:

Datos específicos • La extensión asociada al buzón de voz

Importancia quedaría bien

Urgencia puede esperar

Estado en construcción

Estabilidad media

Comentarios Ninguno

83

Enrique Morón Ayuso

IRQ-0007 Información sobre las colas de llamadas

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [OBJ-0003] Gestionar planes de llamada (DialPlan)

Descripción El sistema deberá almacenar la información correspondiente a cada uno de los sistemas de colas de llamadas configurados en la centralita. En concreto:

Datos específicos • 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

Comentarios Ninguno

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 • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios Ninguno

IRQ-0009 Información sobre la monitorización del sistema

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [OBJ-000 4 ] Gestión de estadísticas

Descripción 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:

Datos específicos

• 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

Comentarios Ninguno

85

Enrique Morón Ayuso

IRQ-0010 Información sobre el IVR

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [OBJ-0003] Gestionar planes de llamada (DialPlan)

Descripción El sistema deberá almacenar la información correspondiente al sistema de respuesta de voz interactiva, o también llamado operadora automática. En concreto:

Datos específicos • 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

Comentarios Ninguno

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 • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [OBJ-000 5 ] Acceso a la consola cliente de Asterisk

Descripción El sistema deberá almacenar la información correspondiente al historial de los comandos que se ejecutarán en la consola. En concreto:

Datos específicos • El comando ejecutado en la consola.

Importancia quedaría bien

Urgencia puede esperar

Estado en construcción

Estabilidad media

Comentarios Ninguno

87

Enrique Morón Ayuso

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.

3.2.2.1 Diagramas de casos de uso

88

Figura 34: Diagrama de subsistemas

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

89

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

Enrique Morón Ayuso

90

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

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

91

Figura 39: Diagrama de casos de uso del subsistema de gestión de extensiones SIP

Enrique Morón Ayuso

92

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

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

93

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

Enrique Morón Ayuso

94

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

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

3.2.2.2 Definición de actores

ACT-0001 Administrador

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Descripción Este actor representa el usuario administrador de la centralita de teléfono

Comentarios Ninguno

3.2.2.3 Casos de uso del sistema

UC-0001 Identificación del Administrador (login)

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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 Acción

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 El sistema valida las credenciales del administrador y lo redirige al panel de administración de la centralita

Excepciones Paso Acción

4 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

Comentarios Ninguno

95

Enrique Morón Ayuso

UC-0002 Cerrar sesión del usuario Administrador (logout)

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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 usuario administrador desee salir del sistema

Secuencia normal

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

Comentarios Ninguno

96

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

3.2.2.3.1 Subsistema de registro de llamadas

UC-0003 Consulta de registros de llamada

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [OBJ-000 4 ] Gestión de estadísticas

Descripción 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 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

Excepciones Paso Acción

2 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

Comentarios Ninguno

97

Enrique Morón Ayuso

3.2.2.3.2 Subsistema de gestión de extensiones SIP

UC-0004 Consulta de extensiones SIP dadas de alta en la centralita

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios Ninguno

98

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

UC-0005 Crear nueva extensión SIP

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios Ninguno

99

Enrique Morón Ayuso

UC-0006 Modificación de extensión SIP

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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"

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 los ficheros de configuración (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 extensiones SIP dadas de alta en la centralita (UC-0004)

Importancia vital

Urgencia inmediatamente

Estado en construcción

Estabilidad media

Comentarios Ninguno

100

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

UC-0007 Eliminar extensión SIP

Versión 1.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios Ninguno

101

Enrique Morón Ayuso

3.2.2.3.3 Subsistema de gestión de extensiones IAX

UC-0008 Consulta de extensiones IAX dadas de alta en la centralita

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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, [UC-0011] 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

Comentarios Ninguno

102

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

UC-0009 Crear nueva extensión IAX

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios Ninguno

103

Enrique Morón Ayuso

UC-0010 Modificación de extensión IAX

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios Ninguno

104

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

UC-0011 Eliminar extensión IAX

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios Ninguno

105

Enrique Morón Ayuso

3.2.2.3.4 Subsistema de acceso a consola cliente de Asterisk

UC-0012 Acceso a la consola cliente de Asterisk

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [OBJ-000 5 ] Acceso a la consola cliente de Asterisk

Descripción 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

Comentarios Ninguno

106

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

UC-0013 Envío de ordenes a la consola cliente de Asterisk

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [OBJ-000 5 ] Acceso a la consola cliente de Asterisk

Descripción 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

Comentarios Ninguno

107

Enrique Morón Ayuso

3.2.2.3.5 Subsistema de gestión de planes de llamadas

UC-0014 Consulta lista de contextos del plan de llamada (Dialplan)

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios Ninguno

108

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

UC-0015 Crear nuevo Contexto en el plan de llamada (Dialplan)

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios Ninguno

109

Enrique Morón Ayuso

UC-0016 Modificar un contexto

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios Ninguno

110

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

UC-0017 Eliminar un contexto

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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) (UC-0014)

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

Comentarios Ninguno

111

Enrique Morón Ayuso

UC-0018 Lista de lineas de un contexto

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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: [UC-0019] 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 Acción

1 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.

Importancia vital

Urgencia inmediatamente

Estado en construcción

Estabilidad media

Comentarios Ninguno

112

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

UC-0019 Crear nueva línea de un contexto

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios Ninguno

113

Enrique Morón Ayuso

UC-0020 Modificar línea de un contexto

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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 Acción

1 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

Comentarios Ninguno

114

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

UC-0021 Eliminar línea de un contexto

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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 Acción

1 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

Comentarios Ninguno

115

Enrique Morón Ayuso

3.2.2.3.6 Subsistema de gestión de buzones de voz

UC-0022 Consulta de buzones de voz

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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 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

Comentarios Ninguno

116

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

UC-0023 Crear nuevo buzón de voz

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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 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

1 Se realiza el caso de uso Consulta de buzones de voz (UC-0022)

2 El actor Administrador (ACT-0001) seleccionará la opción "Crear nuevo buzón"

3 El sistema mostrá las diferentes opciones para crear el buzón de voz

4 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

Comentarios Ninguno

117

Enrique Morón Ayuso

UC-0024 Modificar buzón de voz

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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 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 Acción

1 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

Comentarios Ninguno

118

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

UC-0025 Eliminar buzón de voz

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [OBJ-0003] Gestionar planes de llamada (DialPlan)

• [IRQ-0006] Información sobre el buzón de voz

Descripción 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 Acción

1 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

Comentarios Ninguno

119

Enrique Morón Ayuso

3.2.2.3.7 Subsistema de gestión del IVR

UC-0026 Consulta de IVR (Respuesta de voz interactiva)

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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 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

Comentarios Ninguno

120

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

UC-0027 Crear un nuevo IVR (Respuesta de voz interactiva)

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios El sistema de respuesta de voz interactiva estará asociado siempre a un contexto

121

Enrique Morón Ayuso

UC-0028 Modificar IVR (Respuesta de voz interactiva)

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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 el usuario Administrador quiera modificar alguna de las opciones del sistema de respuesta de voz interactiva

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á 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

Comentarios Ninguno

122

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

UC-0029 Eliminar IVR (Respuesta de voz interactiva)

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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 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

Comentarios Ninguno

123

Enrique Morón Ayuso

3.2.2.3.8 Subsistema de gestión de colas de llamadas

UC-0030 Consulta de colas de llamada

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios Ninguno

124

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

UC-0031 Crear cola de llamada

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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 Acción

1 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

Comentarios Ninguno

125

Enrique Morón Ayuso

UC-0032 Modificar cola de llamada

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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 Acción

1 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

Comentarios Ninguno

126

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

UC-0033 Eliminar cola de llamada

Versión 1.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios Ninguno

127

Enrique Morón Ayuso

3.2.2.3.9 Subsistema de gestión de sistemas de música en espera

UC-0034 Consulta listado de sistemas de música en espera

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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

Comentarios Ninguno

128

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

UC-0035 Crear nuevo sistema de música en espera

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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 El sistema guardará en la base de datos la nueva configuración

6 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

Comentarios Ninguno

129

Enrique Morón Ayuso

UC-0036 Modificar sistema de música en espera

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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 El sistema guardará los cambios realizados en la base de datos

6 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

Comentarios Ninguno

130

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

UC-0037 Eliminar sistema de música en espera

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

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 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

Comentarios Ninguno

131

Enrique Morón Ayuso

3.2.2.3.10 Subsistema de monitorización de servicios de la centralita

UC-0038 Consulta de la monitorización de servicos básicos de la centralilta

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [OBJ-000 4 ] Gestión de estadísticas

Descripción 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

Comentarios Ninguno

132

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

3.2.3 Reglas de negocio

FRQ-0001 Unicidad de registro de extensiones SIP

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [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

Descripción 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

Comentarios Ninguno

FRQ-0002 Unicidad de registro de extensiones IAX

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [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

Descripción 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

Comentarios Ninguno

133

Enrique Morón Ayuso

3.2.4 Requisitos no funcionales

NFR-0001 Usabilidad

Versión 2.0 ( 06/11/2013 )

Autores • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [OBJ-0002] Gestionar registro de extensiones • [OBJ-0003] Gestionar planes de llamada (DialPlan) • [OBJ-000 4 ] Gestión de estadísticas • [OBJ-000 5 ] Acceso a la consola cliente de Asterisk

Descripción 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 • Enrique Morón Ayuso

Fuentes • Enrique Morón Ayuso

Dependencias • [OBJ-0002] Gestionar registro de extensiones • [OBJ-0003] Gestionar planes de llamada (DialPlan) • [OBJ-000 4 ] Gestión de estadísticas • [OBJ-000 5 ] Acceso a la consola cliente de Asterisk

Descripción 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

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

3.3 Matrices de rastreabilidad

TRM-0001 OBJ-0001 OBJ-0002 OBJ-0003 OBJ-0004 OBJ-0005

IRQ-0001 - - - -

IRQ-0002 - - - -

IRQ- 0003 - - - -

IRQ-0004 - - - -

IRQ-0005 - - - -

IRQ-0006 - - - -

IRQ-0007 - - - -

IRQ-0008 - - - -

IRQ-0009 - - - -

IRQ-00 10 - - - -

I RQ-00 1 1 - - - -

Matriz de rastreabilidad: Requisitos de información

TRM-0002 OBJ-0001 OBJ-0002 OBJ-0003 OBJ-0004 OBJ-0005

UC-0001 - - - -

UC-0002 - - - -

UC-0003 - - - -

UC- 0004 - - - -

UC-0005 - - - -

UC- 0006 - - - -

UC-0007 - - - -

UC-0008 - - - -

135

Enrique Morón Ayuso

UC-0009 - - - -

UC-0010 - - - -

UC-0011 - - - -

UC-0012 - - - -

UC-0013 - - - -

UC-001 4 - - - -

UC-0015 - - - -

UC-0016 - - - -

UC-0017 - - - -

UC-0018 - - - -

UC-0019 - - - -

UC-0020 - - - -

UC-0021 - - - -

UC-0022 - - - -

UC-0023 - - - -

UC-0024 - - - -

UC-0025 - - - -

UC-0026 - - - -

UC-0027 - - - -

UC-0028 - - - -

UC-0029 - - - -

UC-0030 - - - -

UC-0031 - - - -

UC-0032 - - - -

UC- 0033 - - - -

UC-0034 - - - -

UC-0035 - - - -

UC-0036 - - - -

UC-0037 - - - -

UC-0038 - - - -

Matriz de rastreabilidad: Requisitos funcionales

136

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

4. Análisis de requisitos

137

Enrique Morón Ayuso

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.

4.1.1 Diagrama estático

138

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

4.1.2 Tipos y valores

TYP-0001 Usuario

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

Comentarios Ninguno

Atributo variable Usuario:: Nombre

Descripción Este atributo representa el nombre de usuario del sistema

Tipo String

Comentarios Ninguno

Atributo variable Usuario:: Contraseña

Descripción Este atributo representa la contraseña del usuario del sistema

Tipo String

Comentarios Ninguno

139

Enrique Morón Ayuso

TYP-0002 Extensión SIP

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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.

Comentarios Ninguno

Atributo variable Extensión SIP:: Nombre

Descripción Este atributo representa el nombre de la persona que tendrá asociada dicha extensión

Tipo String

Comentarios 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

Comentarios 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

Comentarios Ninguno

140

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

Atributo variable Extensión SIP:: Usuario

Descripción 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

Comentarios El usuario será el mismo que el número de extensión. Para verificar así su unicidad

Atributo variable Extensión SIP:: Contraseña

Descripción Este atributo representa la contraseña del registro del usuario/extensión en la centralita

Tipo String

Comentarios Ninguno

Atributo variable Extensión SIP:: Contexto

Descripción Este atributo representa el contexto al cual pertenece dicha extensión

Tipo String

Comentarios 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

Comentarios Formato: "Nombre, Apellidos <número_extensión>"

141

Enrique Morón Ayuso

TYP-0003 Extensión IAX

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

Comentarios Ninguno

Atributo variable Extensión IAX:: Nombre

Descripción Este atributo representa el nombre de la persona que tendrá asociada dicha extensión

Tipo String

Comentarios 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

Comentarios 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

Comentarios Ninguno

142

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

Atributo variable Extensión IAX:: Usuario

Descripción 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

Comentarios 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

Comentarios Ninguno

Atributo variable Extensión IAX:: Contexto

Descripción Este atributo representa el contexto al cual pertenece dicha extensión

Tipo String

Comentarios 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

Comentarios Formato: "Nombre, Apellidos <número_extensión>"

143

Enrique Morón Ayuso

TYP-0004 Línea del dialplan

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

Comentarios Ninguno

Atributo variable Línea del dialplan:: Contexto

Descripción Este atributo representa el contexto al que pertenece la linea del plan de llamadas

Tipo String

Comentarios 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

Comentarios 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

Comentarios La centralita irá ejecutando linea a linea según su prioridad. (el número más bajo indica mayor prioridad)

144

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

Atributo variable Línea del dialplan:: Aplicación

Descripción Este atributo representa nombre de la aplicación que se ejecutará en dicha línea

Tipo String

Comentarios 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

Comentarios Ninguno

TYP-0005 Registro de llamada

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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.

Comentarios Ninguno

Atributo variable Registro de llamada:: Fecha

Descripción Este atributo representa la fecha de la llamada registrada

Tipo Date

Comentarios Ninguno

145

Enrique Morón Ayuso

Atributo variable Registro de llamada:: Hora

Descripción Este atributo representa la hora de la llamada registrada

Tipo Time

Comentarios Ninguno

Atributo variable Registro de llamada:: Identificador

Descripción Este atributo representa el identificador único del registro de la llamada

Tipo Integer

Comentarios Ninguno

Atributo variable Registro de llamada:: Emisor

Descripción Este atributo representa el emisor de la llamada

Tipo String

Valor inicial Emisor = Callerid

Comentarios Ninguno

Atributo variable Registro de llamada:: Receptor

Descripción Este atributo representa el receptor de la llamada

Tipo String

Comentarios Ninguno

Atributo variable Registro de llamada:: Contexto

Descripción Este atributo representa el contexto en el que se realiza la llamada

Tipo String

Comentarios Ninguno

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

Comentarios Ninguno

Atributo variable Registro de llamada:: Estado

Descripción Este atributo representa el estado de la finalización de la llamada

Tipo String

Comentarios RESPONDIDA / NO CONTESTA / FALLIDA

TYP-0006 Buzón de voz

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

Comentarios 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

Comentarios Ninguno

147

Enrique Morón Ayuso

TYP-0007 Cola de llamada

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

Comentarios Ninguno

Atributo variable Cola de llamada:: Nombre

Descripción Este atributo representa el nombre de la cola de llamadas

Tipo String

Comentarios 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

Comentarios Ninguno

Atributo variable Cola de llamada:: Prioridades

Descripción Este atributo representa Lista de las prioridades de cada una de las extensiones

Tipo Integer

Comentarios Ninguno

148

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

Atributo variable Cola de llamada:: Fichero de audio

Descripción 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

Comentarios Ninguno

TYP-0008 Música en espera

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

Comentarios Ninguno

Atributo variable Música en espera:: Fichero de audio

Descripción Este atributo representa el nombre del fichero de audio

Tipo String

Comentarios Ninguno

TYP-0009 IVR

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

Comentarios Ninguno

149

Enrique Morón Ayuso

Atributo variable IVR:: Extensión

Descripción Este atributo representa número de la extensión asociada al IVR

Tipo Integer

Comentarios 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

Comentarios 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

Comentarios Ninguno

Atributo variable IVR:: Intervalo horario

Descripción Este atributo representa el horario

Tipo Date

Comentarios Ninguno

TYP-0010 Estadística

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

Dependencias • [IRQ-0009] Información sobre la monitorización del sistema

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

Comentarios Ninguno

Atributo variable Estadística:: Porcentaje de CPU

Descripción Este atributo representa Valor del porcentaje del uso de la CPU

Tipo Real

Comentarios Ninguno

Atributo variable Estadística:: Hora

Descripción Este atributo representa la hora en que se recogió el dato estadístico

Tipo Date

Comentarios Ninguno

Atributo variable Estadística:: Fecha

Descripción Este atributo representa la fecha en que se recogió el dato estadístico

Tipo Date

Comentarios 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

Comentarios Ninguno

151

Enrique Morón Ayuso

TYP-0012 Comando

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

Comentarios Ninguno

Atributo variable Comando:: nombre

Descripción Este atributo representa el nombre del comando completo con los parametros, que se ejecutó

Tipo String

Comentarios Ninguno

152

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

4.1.3 Asociaciones

ASO-0001 Crea( Usuario, Extensión SIP )

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

Comentarios Ninguno

Rol variable Crea( Usuario, Extensión SIP ):: Usuario

Descripción Este rol representa El usuario administrador

Tipo Usuario

Multiplicidad 1

Comentarios 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

Comentarios Ninguno

153

Enrique Morón Ayuso

ASO-0002 Crea( Usuario, Extensión IAX )

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

Comentarios Ninguno

Rol variable Crea( Usuario, Extensión IAX ):: Usuario

Descripción Este rol representa el usuario Administrador

Tipo Usuario

Multiplicidad 1

Comentarios 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

Comentarios Ninguno

154

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

ASO-0003 Genera( Usuario, Comando )

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

Comentarios Ninguno

Rol variable Genera( Usuario, Comando ):: Usuario

Descripción Este rol representa el usuario administrador

Tipo Usuario

Multiplicidad 1

Comentarios 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

Comentarios Ninguno

155

Enrique Morón Ayuso

ASO-0004 Produce( Registro de llamada, Estadística )

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

Comentarios 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

Comentarios 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

Comentarios Ninguno

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 • Enrique Morón Ayuso

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

Comentarios 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

Comentarios 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

Comentarios Ninguno

157

Enrique Morón Ayuso

ASO-0006 esta asociada( Extensión IAX, Línea del dialplan )

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

Comentarios 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

Comentarios 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

Comentarios Ninguno

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 • Enrique Morón Ayuso

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

Comentarios 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

Comentarios 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

Comentarios Ninguno

159

Enrique Morón Ayuso

ASO-0008 funcionalidad de( Línea del dialplan, Buzón de voz )

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

Comentarios 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

Comentarios 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

Comentarios Ninguno

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 • Enrique Morón Ayuso

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

Comentarios 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

Comentarios 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

Comentarios Ninguno

161

Enrique Morón Ayuso

ASO-0010 funcionalidad de( Línea del dialplan, Cola de llamada )

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

Comentarios 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

Comentarios 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

Comentarios Ninguno

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 • Enrique Morón Ayuso

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)

Comentarios 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

Comentarios 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

Comentarios Ninguno

163

Enrique Morón Ayuso

ASO-0012 Consulta( Usuario, Registro de llamada )

Versión 1.0 ( 23/01/2014 )

Autores • Enrique Morón Ayuso

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

Comentarios Ninguno

Rol variable Consulta( Usuario, Registro de llamada ):: Usuario

Descripción Este rol representa el usuario administrador de la centralita

Tipo Usuario

Multiplicidad 1

Comentarios 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

Comentarios Ninguno

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 • Enrique Morón Ayuso

Dependencias • [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

Descripción 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

Comentarios Ninguno

Rol variable Consulta( Usuario, Estadística ):: Usuario

Descripción Este rol representa el usuario administrador de la centralita

Tipo Usuario

Multiplicidad 1

Comentarios Ninguno

Rol variable Consulta( Usuario, Estadística ):: Estadística

Descripción Este rol representa las estadísticas del sistema

Tipo Estadística

Multiplicidad 1

Comentarios Ninguno

165

Enrique Morón Ayuso

4.2 Modelo dinámico, funcional y prototipos de interfaz de usuario

4.2.1 Validación de usuario

SOP-0001 Identificación del usuario Administrador

Tipo del resultado

Usuario identificado en el sistema

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

Comentarios Ninguno

Excepción Identificación del usuario Administrador::no pre1

Condición algún campo está vacío

Condición (OCL)

false

Expresión El sistema informará del error al usuario y se redirigirá a la pantalla de autenticación

Expresión OCL

true

Comentarios Ninguno

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)

false

Expresión se informará al usuario y se redigirá a la pantalla de identificación

Expresión OCL

true

Comentarios 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)

false

Expresión se informará del error y se redirigirá a la pantalla de identificación

Expresión OCL

true

Comentarios Ninguno

167

Figura 45: Esquema dinámico: login de usuario administrador

Enrique Morón Ayuso

168

Figura 46: Prototipo login de usuario administrador

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

4.2.2 Subsistema gestión de extensiones SIP

4.2.2.1 Creación de extensiones SIP

SOP-0002 Crear nueva extensión SIP

Tipo del resultado

Una nueva extensión SIP creada en el sistema

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

pre1: el usuario administrador deberá estar logueado en el sistemapre2: la extensión SIP no puede existir ya en el sistema

Expresiones de precondición (OCL)

pre1: truepre2: true

Expresiones de postcondición

post1: se ha añadido una nueva extensión SIP al sistema

Expresiones de postcondición (OCL)

post1: true

Comentarios Ninguno

169

Enrique Morón Ayuso

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)

false

Expresión el sistema informará al usuario de que la nueva extensión SIP ya esta dada de alta

Expresión OCL

true

Comentarios Ninguno

Excepción Crear nueva extension SIP::Algún campo está vacío

Condición Algún campo obligatorio del formulario de creción de extensiones SIP está vacío

Condición (OCL)

false

Expresión el sistema mostrará al usuario el mensaje de error indicando que campo es erróneo

Expresión OCL

true

Comentarios Ninguno

Excepción Crear nueva extension SIP::Verificación de contraseña incorrecta

Condición La verificación de la contraseña para el registro de la nueva extensión SIP es incorrecta

Condición (OCL)

false

Expresión el sistema informará al usuario que la verificación de la contraseña es incorrecta

Expresión OCL

true

Comentarios Ninguno

170

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

171

Figura 47: Esquema dinámico: Alta de extensión SIP

Enrique Morón Ayuso

4.2.2.2 Modificación de extensiones SIP

SOP-0004 Modificar extensión SIP

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

pre1: el usuario administrador deberá estar logueado en el sistema pre2: la extensión SIP debe existir ya en el sistema

Expresiones de precondición (OCL)

pre1: true pre2: true

Expresiones de postcondición

Ninguno

Expresiones de postcondición (OCL)

true

Comentarios Ninguno

Excepción Modificar extensión SIP::Algún campo está vacío

Condición Algún campo obligatorio del formulario de modificación de extensiones SIP está vacío

Condición (OCL)

false

Expresión el sistema mostrará al usuario el mensaje de error indicando que campo es erróneo

Expresión OCL true

Comentarios Ninguno

172

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

Excepción Modificar extensión SIP::Verificación de contraseña incorrecta

Condición La verificación de la contraseña para el registro de la nueva extensión SIP es incorrecta

Condición (OCL)

false

Expresión el sistema informará al usuario que la verificación de la contraseña es incorrecta

Expresión OCL

true

Comentarios Ninguno

173

Figura 48: Esquema dinámico: Modificar extensión SIP

Enrique Morón Ayuso

4.2.2.3 Eliminación de extensiones SIP

SOP-0006 Borrar extensión SIP

Tipo del resultado

una extensión SIP borrada del sistema

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

pre1: el usuario debe estar logueado en el sistemapre2: la extensión SIP debe existir ya en el sistema

Expresiones de precondición (OCL)

pre1: truepre2: true

Expresiones de postcondición

post1: el sistema informará la eliminación de la extensión SIP

Expresiones de postcondición (OCL)

post1: true

Comentarios Ninguno

Excepción Borrar extensión SIP::pre2

Condición la extensión a borrar debe existir en el sistema

Condición (OCL)

false

Expresión el sistema informará al usuario de que la extensión no existe en el sistema

Expresión OCL

true

Comentarios Ninguno

174

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

175

Figura 49: Esquema dinámico: Eliminar extensión SIP

Enrique Morón Ayuso

4.2.3 Subsistema gestión de extensiones IAX

4.2.3.1 Creación de extensiones IAX

SOP-0003 Crear nueva extensión IAX

Tipo del resultado

Una nueva extensión IAX creada en el sistema

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

pre1: el usuario administrador deberá estar logueado en el sistemapre2: la extensión IAX no puede existir ya en el sistema

Expresiones de precondición (OCL)

pre1: truepre2: true

Expresiones de postcondición

post1: se ha añadido una nueva extensión IAX al sistema

Expresiones de postcondición (OCL)

post1: true

Comentarios Ninguno

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)

false

Expresión el sistema informará al usuario de que la nueva extensión IAX ya esta dada de alta

Expresión OCL

true

Comentarios 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)

false

Expresión el sistema mostrará un mensaje de error indicando que campo es obligatorio

Expresión OCL

true

Comentarios Ninguno

Excepción Crear nueva extensión IAX::Verificación de contraseña incorrecta

Condición el campo que verifica la contraseña pa el registro de la nueva extensión IAX en la centralita es erróneo

Condición (OCL)

false

Expresión el sistema mostrará un mensaje de error indicando que la verificación de contraseña es incorrecta

Expresión OCL

true

Comentarios Ninguno

177

Enrique Morón Ayuso

178

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

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

4.2.3.2 Modificación de extensiones IAX

SOP-0005 Modificar extensión IAX

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

pre1: el usuario administrador deberá estar logueado en el sistemapre2: la extensión IAX debe existir ya en el sistema

Expresiones de precondición (OCL)

pre1: truepre2: true

Expresiones de postcondición

Ninguno

Expresiones de postcondición (OCL)

true

Comentarios Ninguno

179

Enrique Morón Ayuso

Excepción Modificar extensión IAX::Algún campo está vacío

Condición Algún campo obligatorio del formulario de modificación de extensiones IAX está vacío

Condición (OCL)

false

Expresión el sistema mostrará al usuario el mensaje de error indicando que campo es erróneo

Expresión OCL

true

Comentarios Ninguno

Excepción Modificar extensión IAX::Verificación de contraseña incorrecta

Condición La verificación de la contraseña para el registro de la nueva extensión IAX es incorrecta

Condición (OCL)

false

Expresión el sistema informará al usuario que la verificación de la contraseña es incorrecta

Expresión OCL

true

Comentarios Ninguno

180

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

181

Figura 51: Esquema dinámico: Modificar extensión IAX

Enrique Morón Ayuso

4.2.3.3 Eliminación de extensiones IAX

SOP-0007 Borrar extensión IAX

Tipo del resultado

una extensión IAX borrada del sistema

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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

pre1: el usuario debe estar logueado en el sistemapre2: la extensión IAX debe existir ya en el sistema

Expresiones de precondición (OCL)

pre1: truepre2: true

Expresiones de postcondición

post1: el sistema informará la eliminación de la extensión SIP

Expresiones de postcondición (OCL)

post1: true

Comentarios Ninguno

Excepción Borrar extensión IAX::pre2

Condición la extensión a borrar debe existir en el sistema

Condición (OCL)

false

Expresión el sistema informará al usuario de que la extensión no existe en el sistema

Expresión OCL

true

Comentarios Ninguno

182

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

183

Figura 52: Esquema dinámico: Eliminar extensión IAX

Enrique Morón Ayuso

4.2.4 Subsistema gestión del registro de llamadas

SOP-0026 Consulta registro de llamadas

Versión 1.0 ( 23/01/2014 )

Autores • Enrique Morón Ayuso

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 llamadasFecha fin : Date -- La fecha límite de la búsqueda en el registro de llamadasDuració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 registroEmisor : 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

post1: el sistema mostrará todos los registros de las llamadas que cumplan el patrón de búsqueda

Expresiones de postcondición (OCL)

post1: true

Comentarios Ninguno

184

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

185

Figura 53: Esquema dinámico: Consulta del registro de llamadas

Enrique Morón Ayuso

4.2.5 Subsistema de acceso a consola

SOP-0008 Acceso a consola

Tipo del resultado

Acceso y envío de ordena de la consola cliente de Asterisk

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

Dependencias • [UC-0012] Acceso a la consola cliente de Asterisk • [UC-0013] Envio de ordenes a la consola cliente de Asterisk

Descripción 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

Parámetros 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

Comentarios Ninguno

186

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

187

Figura 54: Esquema dinámico: Ejecución de ordenes en consola

Enrique Morón Ayuso

4.2.6 Subsistema de monitorización y estadísticas del sistema

SOP-0027 Consulta estadísticas

Tipo del resultado

información de la centralita

Versión 1.0 ( 23/01/2014 )

Autores • Enrique Morón Ayuso

Dependencias • [UC-0038] Consulta de la monitorización de servicos básicos de la centralilta

Descripción El sistema mostrará información de la centralita, como es el consumo de recursos, o la cantidad de llamadas diarias y mensuales.

Parámetros 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

Comentarios Ninguno

188

Figura 55: Esquema dinámico: Consulta estadísticas del sistema

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

4.2.7 Subsistema de gestión del plan de llamadas

4.2.7.1 Creación de contextos

SOP-0009 Crear nuevo contexto

Tipo del resultado

Un nuevo contexto creado en el sistema

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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 El usuario administrador seleccionará el apartado de contextos, el sistema mostrará todos los contextos creados. El usuario seleccionará la opción "Crear nuevo contexto"

Parámetros Nombre : String -- el nombre del contexto

Expresiones de precondición

pre1: el usuario administrador deberá estar logueado en el sistema pre2: el contexto no puede existir ya en el sistema

Expresiones de precondición (OCL)

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

Comentarios Ninguno

Excepción Crear nuevo contexto::no pre2

Condición el contexto con ese nombre ya existe en el sistema

Condición (OCL)

false

Expresión El sistema informará al usuario de que el nuevo contexto ya existe en el sistema

Expresión OCL

true

Comentarios Ninguno

189

Enrique Morón Ayuso

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)

false

Expresión el sistema mostrará al usuario el mensaje de error indicando que el campo nombre del contexto no puede ser nulo

Expresión OCL

true

Comentarios Ninguno

190

Figura 56: Esquema dinámico: Crear nuevo contexto

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

4.2.7.2 Modificación de contextos

4.2.7.2.1 Crear nueva línea en un contexto

SOP-0011 Crear nueva linea en un contexto

Tipo del resultado

Una nueva linea creada para el contexto seleccionado

Versión 1.0 ( 22/01/2014 )

Autores • Enrique Morón Ayuso

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 seleccionadoLinea : Línea del dialplan -- los parámetros de una línea del plan de llamadas

Expresiones de precondición

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

Expresiones de precondición (OCL)

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

Comentarios Ninguno

191

Enrique Morón Ayuso

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)

false

Expresión El sistema informará el usuario de que dicha línea ya existe en el contexto

Expresión OCL

true

Comentarios 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.

192

Figura 57: Esquema dinámico: Crear nueva línea en un contexto

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

4.2.7.2.2 Modificación de una línea de un contexto

SOP-0012 Modificar linea en un contexto

Tipo del resultado

Una nueva linea de un contexto modificada

Versión 1.0 ( 23/01/2014 )

Autores • Enrique Morón Ayuso

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 seleccionadoLinea : Línea del dialplan -- Los parámetros de una línea del plan de llamadas

Expresiones de precondición

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

Expresiones de precondición (OCL)

pre1: truepre2: truepre3: true

Expresiones de postcondición

post1: se ha modificado una linea del contexto seleccionado

Expresiones de postcondición (OCL)

post1: true

Comentarios Ninguno

193

Enrique Morón Ayuso

194

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

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

4.2.7.2.3 Eliminación de una línea de un contexto

SOP-0013 Borrar linea en un contexto

Tipo del resultado

Una nueva linea de un contexto borrada

Versión 1.0 ( 23/01/2014 )

Autores • Enrique Morón Ayuso

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 seleccionadoLinea : Línea del dialplan -- Los parámetros de una línea del plan de llamadas

Expresiones de precondición

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

Expresiones de precondición (OCL)

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

Comentarios Ninguno

195

Enrique Morón Ayuso

196

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

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

4.2.8 Funcionalidades del plan de llamadas

En este apartado se definen las funcionalidades más relevantes de la centralita, que gestionará el sistema.

4.2.8.1 Subsistema gestión de buzones de voz

4.2.8.1.1 Creación de buzón de voz

SOP-0014 Crear nuevo buzón de voz

Tipo del resultado

Un nuevo buzón de voz creado en el sistema

Versión 1.0 ( 23/01/2014 )

Autores • Enrique Morón Ayuso

Dependencias • [UC-0022] Consulta de buzones de voz • [UC-0023] Crear nuevo buzón de voz

Descripción 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"

Parámetros Buzón : Buzón de voz -- los parámetros de un buzón de voz

Expresiones de precondición

pre1: el usuario administrador deberá estar logueado en el sistema pre2: el buzón de voz no puede existir ya en el sistema

Expresiones de precondición (OCL)

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

Comentarios Ninguno

197

Enrique Morón Ayuso

Excepción Crear nuevo buzón de voz::no pre2

Condición El nuevo buzón de voz ya existe en el sistema

Condición (OCL)

false

Expresión El sistema informará al usuario de que el nuevo buzón de voz ya existe en el sistema

Expresión OCL

true

Comentarios Ninguno

198

Figura 60: Esquema dinámico: Crear un buzón de voz

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

4.2.8.1.2 Modificación de un buzón de voz

SOP-0015 Modificar un buzón de voz

Tipo del resultado

Un buzón de voz se modifica en el sistema

Versión 1.0 ( 23/01/2014 )

Autores • Enrique Morón Ayuso

Dependencias • [UC-0022] Consulta de buzones de voz • [UC-0024] Modificar buzón de voz

Descripción 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"

Parámetros Buzón : Buzón de voz -- los parámetros de un buzón de voz

Expresiones de precondición

pre1: el usuario administrador deberá estar logueado en el sistema pre2: el buzón de voz debe existir ya en el sistema

Expresiones de precondición (OCL)

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

Comentarios Ninguno

199

Enrique Morón Ayuso

200

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

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

4.2.8.1.3 Eliminación de un buzón de voz

SOP-0016 Borrar un buzón de voz

Tipo del resultado

Un buzón de voz se borra de el sistema

Versión 1.0 ( 23/01/2014 )

Autores • Enrique Morón Ayuso

Dependencias • [UC-0022] Consulta de buzones de voz • [UC-0025] Eliminar buzón de voz

Descripción 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"

Parámetros Buzón : Buzón de voz -- los parámetros de un buzón de voz

Expresiones de precondición

pre1: el usuario administrador deberá estar logueado en el sistema pre2: el buzón de voz debe existir ya en el sistema

Expresiones de precondición (OCL)

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

Comentarios Ninguno

201

Figura 62: Esquema dinámico: Borrar buzón de voz

Enrique Morón Ayuso

4.2.8.2 Subsistema gestión de IVR

4.2.8.2.1 Creación de un IVR

SOP-0017 Crear nuevo sistema IVR

Tipo del resultado

Un nuevo sistema de respuesta de voz interactica (IVR) creado en el sistema

Versión 1.0 ( 23/01/2014 )

Autores • Enrique Morón Ayuso

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

pre1: el usuario administrador deberá estar logueado en el sistema pre2: el nuevo sistema IVR no puede existir ya en el sistema

Expresiones de precondición (OCL)

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

Comentarios Ninguno

Excepción Crear nuevo sistema IVR::no pre2

Condición el nuevo IVR ya existe en el sistema

Condición (OCL)

false

Expresión el sistema informará al usuario de que el nuevo IVR ya existe en el sistema

Expresión OCL

true

Comentarios Ninguno

202

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

203

Figura 63: Esquema dinámico: Crear sistema IVR

Enrique Morón Ayuso

4.2.8.2.2 Modificación de un IVR

SOP-0018 Modificar un sistema IVR

Tipo del resultado

Un sistema IVR se modifica en el sistema

Versión 1.0 ( 23/01/2014 )

Autores • Enrique Morón Ayuso

Dependencias • [UC-0026] Consulta de IVR (Respuesta de voz interactiva) • [UC-0028] Modificar IVR (Respuesta de voz interactiva)

Descripción El usuario adminsitrador seleccionará el apartado desistemas IVR, el sistema mostrará todos los sistemas IVR creados. El usuario seleccionará la opción "Modificar IVR"

Parámetros Sistema IVR : IVR -- los parámetros de un sistema IVR

Expresiones de precondición

pre1: el usuario administrador deberá estar logueado en el sistema pre2: el sistema IVR debe existir ya en el sistema

Expresiones de precondición (OCL)

pre1: true pre2: true

Expresiones de postcondición

post1: se ha modificado un IVR del sistema

Expresiones de postcondición (OCL)

post1: true

Comentarios Ninguno

204

Figura 64: Esquema dinámico: Modificar IVR

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

4.2.8.2.3 Eliminación de un IVR

SOP-0019 Borrar un IVR

Tipo del resultado

Un IVR se borra de el sistema

Versión 1.0 ( 23/01/2014 )

Autores • Enrique Morón Ayuso

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

pre1: el usuario administrador deberá estar logueado en el sistemapre2: el IVR debe existir ya en el sistema

Expresiones de precondición (OCL)

pre1: truepre2: true

Expresiones de postcondición

post1: se ha borrado un IVR del sistema

Expresiones de postcondición (OCL)

post1: true

Comentarios Ninguno

205

Figura 65: Esquema dinámico: Eliminar IVR

Enrique Morón Ayuso

4.2.8.3 Subsistema gestión de colas de llamadas

4.2.8.3.1 Creación de cola de llamada

SOP-0020 Crear nuevo sistema de colas de llamadas

Tipo del resultado

Un nuevo sistema de colas de llamadas definido en el sistema

Versión 1.0 ( 23/01/2014 )

Autores • Enrique Morón Ayuso

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

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

Expresiones de precondición (OCL)

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

Comentarios 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)

false

Expresión 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

Comentarios Ninguno

206

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

207

Figura 66: Esquema dinámico: Crear cola de llamadas

Enrique Morón Ayuso

4.2.8.3.2 Modificación de una cola de llamada

SOP-0021 Modificar un sistema colas de llamadas

Tipo del resultado

Un sistema de cola de llamadas se modifica en el sistema

Versión 1.0 ( 23/01/2014 )

Autores • Enrique Morón Ayuso

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

pre1: el usuario administrador deberá estar logueado en el sistema pre2: el sistema de cola de llamadas seleccionada debe existir ya en el sistema

Expresiones de precondición (OCL)

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

Comentarios Ninguno

208

Figura 67: Esquema dinámico: Modificar cola de llamada

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

4.2.8.3.3 Eliminación de una cola de llamada

SOP-0022 Borrar una cola de llamadas

Tipo del resultado

Una cola de llamadas se borra de el sistema

Versión 1.0 ( 23/01/2014 )

Autores • Enrique Morón Ayuso

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

pre1: el usuario administrador deberá estar logueado en el sistema pre2: la cola de llamadas debe existir ya en el sistema

Expresiones de precondición (OCL)

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

Comentarios Ninguno

209

Figura 68: Esquema dinámico: Borrar cola de llamada

Enrique Morón Ayuso

4.2.8.4 Subsistema gestión de música en espera

4.2.8.4.1 Creación de música en espera

SOP-0023 Crear nuevo sistema de música en espera

Tipo del resultado

Un nuevo sistema de música en espera definido en el sistema

Versión 1.0 ( 23/01/2014 )

Autores • Enrique Morón Ayuso

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

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

Expresiones de precondición (OCL)

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

Comentarios Ninguno

Excepción Crear nuevo sistema de música en espera::no pre2

Condición El nuevo sistema de música en espera ya existe en el sistema

Condición (OCL)

false

Expresión 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

Comentarios Ninguno

210

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

211

Figura 69: Esquema dinámico: Crea sistema de música en espera

Enrique Morón Ayuso

4.2.8.4.2 Modificación de música en espera

SOP-0024 Modificar un sistema de música en espera

Tipo del resultado

Un sistema de música en espera se modifica en el sistema

Versión 1.0 ( 23/01/2014 )

Autores • Enrique Morón Ayuso

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

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

Expresiones de precondición (OCL)

pre1: true pre2: true

Expresiones de postcondición

post1: se han modificado parámetros de un sistema de música en espera de la centralita

Expresiones de postcondición (OCL)

post1: true

Comentarios Ninguno

212

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

4.2.8.4.3 Eliminación de música en espera

SOP-0025 Borrar un sistema de música en espera

Tipo del resultado

Un sistema de música en espera se borra de el sistema

Versión 1.0 ( 23/01/2014 )

Autores • Enrique Morón Ayuso

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

pre1: el usuario administrador deberá estar logueado en el sistema pre2: el sistema de música en espera debe existir ya en el sistema

Expresiones de precondición (OCL)

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

Comentarios Ninguno

213

Figura 70: Esquema dinámico: Modificar sistema de música en espera

Enrique Morón Ayuso

214

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

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

5. Diseño del sistema

215

Enrique Morón Ayuso

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

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

5.2 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

Figura 72: Diagrama conceptual

Enrique Morón Ayuso

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.

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

Figura 73: Modelo-Vista-Controlador

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

Enrique Morón Ayuso

5.4 El lenguaje de programación: PythonEn los siguientes apartados haremos una introdución al lenguje de programación Python y

resaltaremos algunas de suspeculiaridades

5.4.1 Introducción a Python

Python es un lenguaje de programación interpretado creado por Guido van Rossum en el año 1991. 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 TIOBE29, 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.

29http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

220

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

5.4.1 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

Enrique Morón Ayuso

- 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

Figura 74: Tipos de datos en Python

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

Enrique Morón Ayuso

5.5 Framework Web : DjangoLos 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 2005. 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

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

Enrique Morón Ayuso

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.

5.5.1 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

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

Enrique Morón Ayuso

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

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.

30Para más información acerca de la aruitectura AGI se puede consultar la wikipedia oficial de Asterisk: http://www.wikiasterisk.com/index.php/AGI

229

Enrique Morón Ayuso

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

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

Enrique Morón Ayuso

5.9 Diseño de datos

5.9.1 Diagrama de la base de datosA 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

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

5.9.2 Descripción de tablasA continuación se muestran la tablas de la base de datos con todos sus atributos y sus tipos.

233

Enrique Morón Ayuso

234

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

235

Enrique Morón Ayuso

236

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

237

Enrique Morón Ayuso

5.9.3 Sistema gestor para la base de datos: SQLiteSQLite 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

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

5.9.4 Normalización de la base de datosLa 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

Enrique Morón Ayuso

6. Implementación del sistema

240

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

6.1 Aspectos relevantes de la implementaciónAntes 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.

31Para más información acerca de las librerías CSS de bootstrap, puedes consultar la web oficial:

http://getbootstrap.com/css/

241

Enrique Morón Ayuso

6.2.1 Configurando Asterisk RealtimeEste 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:

http://www.ch-werner.de/sqliteodbc/sqliteodbc-0.995.tar.gz

- 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:

32Para 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/19005471/Asterisk-Admin-Guide.pdf?api=v2

33Para más información acerca del driver universal ODBC puedes consultar la sección de la wikipedia: http://es.wikipedia.org/wiki/Open_Database_Connectivity

242

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

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

Figura 75: Configuración de Asterisk Realtime usando un driver ODBC

Enrique Morón Ayuso

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

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

6.2.2 Estructura de directorios del proyecto Beeton

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

Figura 76: Listado de directorios

Enrique Morón Ayuso

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

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

6.2.3 Diseño navegacional con plantillas htmlA 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:

247

Figura 77: Diseño navegacional con plantillas HTML

Enrique Morón Ayuso

6.2.4 Implementación de los diferentes serviciosEn este apartado se irá entrando en detalle en cada una de los servicios (subdirectorios)

mostrados anteriormente.

6.2.4.1 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.

6.2.4.1.1 Controlador login

Lo primero que haremos será mapear la url en el fichero 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

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

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:

Creamos la siguiente función para redirigir la url sin parámetros la vista de login:

La función ingresar quedaría de la siguiente manera:

249

from django.shortcuts import render_to_responsefrom django.contrib.auth.forms import UserCreationFormfrom django.contrib.auth.forms import AuthenticationForm from django.contrib.auth import login, authenticate, logout from django.contrib.auth.decorators import login_required from django.template import RequestContext

Figura 79: Fichero de vistas del proyecto: asteriskbee/views.py

def home(request): return HttpResponseRedirect('/login')

Figura 80: Fichero de vistas del proyecto: asteriskbee/views.py

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

Enrique Morón Ayuso

Las funciones admin y cerrar quedarian así:

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

@login_required(login_url='/login') def admin(request):

usuario = request.userreturn render_to_response('admin.html',{'usuario':usuario},

context_instance=RequestContext(request))

Figura 82: Función admin del fichero asteriskbee/views.py

@login_required(login_url='/login') def cerrar(request):

logout(request)return HttpResponseRedirect('/')

Figura 83: Función cerrar del fichero asteriskbee/views.py

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

34La 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

Enrique Morón Ayuso

6.2.4.1.2 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:

252

<!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

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

6.2.4.2 Implementación de la gestión del registro de llamadasPara 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.

6.2.4.2.1 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:

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

Figura 85: Configuración del módulo cdr_sqlite de Asterisk

Enrique Morón Ayuso

La estructura de este fichero cdr_sqlite3_custom.conf es muy básica:

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

[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

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:

35Sistema de almacenamiento personalizado de los registros de llamada de Asterisk en una base de datos

SQLite: http://www.wikiasterisk.com/index.php/Funciones#CDR

255

Enrique Morón Ayuso

6.2.4.2.2 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:

256

urlpatterns = {' ',

(r'^admin/cdr/$',cdr), (r'^admin/cdr/generar_pdf/$',generar_pdf),

}

Figura 87: Fichero de mapeo de url del proyecto: asteriskbee/urls.py

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

La función cdr del fichero views.py sería el siguiente:

257

@login_required(login_url='/login/')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 = 0genera_pdf = 0if 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 = 1if 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)*60msg_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 diaduracion_menosde=int(86400)*2*60

else:duracion_menosde = int(duracion_menos_de)*60if 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; """

Enrique Morón Ayuso

258

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

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:

259

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

Enrique Morón Ayuso

6.2.4.2.3 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:

Las funciones para generar el informe de las llamadas en formato pdf vienen definidas de la siguiente manera:

260

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

def generar_pdf(html):result = StringIO.StringIO()pdf = pisa.pisaDocument (StringIO.StringIO( html.encode("utf-

8")), 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

import ho.pisa as pisaimport cStringIO as StringIOimport cgifrom django.template.loader import render_to_stringfrom django.http import HttpResponse import codecs

Figura 92: librerias para generar informa de llamadas en pdf: asteriskbee/api_cdr/views.py

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

6.2.4.2.4 Plantillas para el registro de llamadas (cdr)

Para las plantillas del registro de llamadas usaremos tres, cdr.html como base:

261

{% 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

Enrique Morón Ayuso

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:

262

<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

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

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

263

<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

Enrique Morón Ayuso

6.2.4.2.5 Capturas de pantalla del registro de llamadas

Algunas de las capturas de pantalla del sistema de búsqueda del registro de llamadas:

264

Figura 99: Formulario del cdr

Figura 100: Formulario con resultados del registro de llamadas

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

6.2.4.3 Implementación del sistema de acceso a consola de Asterisk

6.2.4.3.1 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:

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:

265

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

from django.db import modelsfrom django.forms import ModelForm

class historial_comandos(models.Model):comando = models.CharField(max_length=500,null=True)

##Creamos el formulario a partir del modeloclass historialComandosForm(ModelForm): class Meta:

model = historial_comandos

Figura 102: Función generar_pdf: asteriskbee/api_cdr/views.py

Enrique Morón Ayuso

6.2.4.3.2 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):

266

from django.shortcuts import render_to_responsefrom django.conf import settingsimport subprocessfrom asteriskbee.api_consola.forms import consola_formfrom models import *

@login_required(login_url='/login/')def consola(request):

usuario=request.userco_aux=''co_aux2='' tam_max_historial = 50tam_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 = comandoh.save()

elif tam_his == 1:h.comando = comandoh.save()c = historial_comandos.objects.get(id=1)co_aux = c.comandoc.comando = comandoc.save()c = historial_comandos.objects.get(id=2) c.comando = co_auxc.save()

else:for c in historial:

if c.id==1:co_aux = c.comando c.comando = comando

else:co_aux2 = c.comandoc.comando = co_auxco_aux = co_aux2

c.save()if tam_his < tam_max_historial:

h.comando = co_aux2h.save()

outfd = open(settings.STATIC_ROOT+'api_consola/archivos/archivo_out', 'w+')

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

267

errfd = open(settings.STATIC_ROOT+'api_consola/archivos/archivo_err', 'w+')

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

Enrique Morón Ayuso

6.2.4.3.3 Plantillas html para el acceso a la consola cliente de Asterisk

La plantilla para la consola quedaría de la siguiente manera:

268

{%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

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:

269

<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

Enrique Morón Ayuso

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:

270

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

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

6.2.4.3.4 Capturas de pantalla de la consola de Asterisk

271

Figura 108: Ejecución del comando help en consola

Enrique Morón Ayuso

6.2.4.4 Implementación de la gestión de extensiones SIP

6.2.4.4.1 Mapeo de urls para la gestión de extensiones de tipo SIP

Incluimos las siguientes líneas en el archivo urls.py:

6.2.4.4.2 Importación de librerías para el modelado de la gestión de extensiones SIP

272

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

from django.db import models from django.forms import ModelFormfrom 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

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

6.2.4.4.3 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.

36Para 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/19005471/Asterisk-Admin-Guide.pdf?api=v2

273

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)

Enrique Morón Ayuso

274

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=True)

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)

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

275

##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

Enrique Morón Ayuso

6.2.4.4.4 Formularios a partir del modelo de datos de extensiones SIP

276

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 = sipfields = ('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

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

6.2.4.4.5 Plantillas html para la gestión de extensiones SIP

277

{%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

Enrique Morón Ayuso

278

{%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

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

6.2.4.5 Implementación de la gestión de extensiones IAX

6.2.4.5.1 Mapeo de urls para la gestión de extensiones de tipo IAX

Incluimos las siguientes líneas en el archivo urls.py:

6.2.4.5.2 Importación de librerías para el modelado de la gestión de extensiones IAX

279

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

from django.db import models from django.forms import ModelFormfrom 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

Enrique Morón Ayuso

6.2.4.5.3 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.

280

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)

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

37Para 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/19005471/Asterisk-Admin-Guide.pdf?api=v2

281

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

Enrique Morón Ayuso

6.2.4.5.4 Formularios a partir del modelo de datos de extensiones IAX

282

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

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

6.2.4.5.5 Plantillas html para la gestión de extensiones IAX

283

{%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

Enrique Morón Ayuso

284

{%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

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

6.2.4.6 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

Enrique Morón Ayuso

6.2.4.6.1 Mapeo de urls para la monitorización y las estadísticas del sistema

Incluimos las siguientes líneas en el fichero urls.py:

6.2.4.6.2 Importación de librerías para la monitorización y registro de estadísticas

286

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

from django.shortcuts import render_to_response from django.http import HttpResponseRedirectfrom django.conf import settingsimport matplotlib matplotlib.use('Agg')import os

Figura 124: Librerias importadas para las vistas de muestreo de estadísticas: beeton/asteriskbee/api_status/views.py

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

6.2.4.6.3 Controlador de la vista del muestreo de la carga de la cpu

287

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.0f=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:

breakelse:

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

Enrique Morón Ayuso

6.2.4.6.4 Controlador de la vista de muestreo del uso de RAM

6.2.4.6.5 Controlador de la vista de muestreo del uso del sistema de ficheros

288

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

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 = 0else:

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

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

6.2.4.6.6 Controlador de la vista de muestreo de las llamadas activas

6.2.4.6.7 Controlador de la vista de muestreo de las extensiones registradas

289

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

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

Enrique Morón Ayuso

6.2.4.6.8 Controlador de la vista de muestreo de la grafica del uso de la CPU

290

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

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

6.2.4.6.10 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.

291

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()

Figura 132: Función recoge_marcas del fichero beeton/asterisk-

bee/api_status/scripts_graficas/recoge_marcas_graficas.py

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()

Figura 131: Función recoge_marcas del fichero beeton/asterisk-

bee/api_status/scripts_graficas/recoge_marcas_graficas.py

Enrique Morón Ayuso

6.2.4.6.11 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

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

6.2.4.7 Implementación de la gestión de planes de llamadaEn 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

from crontab import CronTabfrom 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

Enrique Morón Ayuso

6.2.4.7.1 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/asterisk-bee/asteriskbee/settings.py, añadiéndola a la lista de de aplicaciones instaladas en nuestro proyecto:

Una vez creada la aplicación que gestionará los planes de llamadas, pasamos a la creación del modelo de datos.

6.2.4.7.2 Modelado de datos de los planes de llamadaA 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

...INSTALLED_APPS = (...'asteriskbee.api_dialplan', )...

Figura 134: Linea de api_dialplan en la lista de aplicaciones en settings.py

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

38Tabla sacada de la wikipedia oficial de Asterisk del documento:

https://wiki.asterisk.org/wiki/download/attachments/19005471/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

/**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

Enrique Morón Ayuso

[nombre de la aplicación]_[nombre de la clase]

Por lo que el modelado de datos quedará de la siguiente manera en models.py:

6.2.4.7.2 Archivo de mapeo de urls para planes de llamada

296

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/asterisk-bee/asteriskbee/api_dialplan/models.py

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

6.2.4.7.3 Modelado de datos para los planes de llamadas

El modelo de la línea de un contexto quedaría de la siguiente manera:

297

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

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

Enrique Morón Ayuso

298

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íneaparam1 = 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

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

299

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

Enrique Morón Ayuso

6.2.4.7.4 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 manera:

La función para crear un nuevo contexto quedaría de la siguiente manera:

300

@login_required(login_url='/login')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

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

La función que permite visualizar las lineas de cada contexto seleccionado y modificar cada una de ellas, es la siguiente:

301

@login_required(login_url='/login')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 =>

Realtime/@\n") 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

Enrique Morón Ayuso

302

@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()

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

303

####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_apinum_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()

Enrique Morón Ayuso

304

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) fichero_extensions_r.close() fichero_extensions_w.close()

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

305

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']

Enrique Morón Ayuso

306

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

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 ejecutará.

La siguiente función elimina una línea de un contexto determinado:

307

@login_required(login_url='/login')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

@login_required(login_url='/login')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

Enrique Morón Ayuso

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 1:

308

@login_required(login_url='/login')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):

breakpos_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-1elif request.GET.get('bajar')=='1' and (pos_linea_sele+1)<len(li):

pos_linea_cam = pos_linea_sele+1else:

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

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

6.2.4.8 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:

• 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

Figura 147: Estructura del paquete de funcionalidad

Enrique Morón Ayuso

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:

El modelo de la base de datos quedaría así:

310

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

from django.db import modelsfrom 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

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:

311

import json. . .

@login_required(login_url='/login') 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('fichero_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

Enrique Morón Ayuso

6.2.4.9 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.

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

{ "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

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

Enrique Morón Ayuso

Los siguientes fragmentos del fichero ivr.py, muestran parte de la lógica del plan de llamadas, para la función del IVR:

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 todos los argumentos enviados desde la aplicación Beeton con get_lista_param.

314

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

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.

6.2.4.10 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).

315

{ "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

Enrique Morón Ayuso

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:

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

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

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

6.2.4.11 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.

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:

317

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

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'])+1miagi.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

Enrique Morón Ayuso

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.

39Para más información sobre la placa ALIX3D2 puedes visitar la web oficial de pcengines: http://www.pcengines.ch/alix3d2.htm

318

Figura 157: Hardware utilizado

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

319

Figura 158: Placa ALIX3D2

Figura 159: Placa ALIX3D2 con carcasa de aluminio

Enrique Morón Ayuso

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 38400

Si encendemos ahora la placa ALIX deberá aparecer en la consola una imagen como esta:

320

Figura 160: Acceso a la consola serie con gtkterm

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

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:

http://svn.voyage.hk/repos/voyage/branches/voyage-live/0.8.5/config/chroot_local-includes/README

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.

40Para más información sobre la distribución Debian-Voyage-ONE, puede consultar su web oficial: http://linux.voyage.hk/voyage-one

321

Figura 161: Acceso a la placa ALIX desde consola serie con gtkterm

Enrique Morón Ayuso

7. Pruebas

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

7.2.1 ¿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.

41Puedes visitar la web oficial del proyecto OWASP: http://www.owasp.org

323

Enrique Morón Ayuso

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

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).

7.2.3. 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 email/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

Enrique Morón Ayuso

7.2.4. 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”:

@login_required(login_url='/login')

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.

7.2.5 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

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

327

#!/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 0.0.0.0:8000 sleep 2 HTTPS=1 screen -S runserver_beeton_ssl -d -m python manage.py runsslserver 0.0.0.0: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

Enrique Morón Ayuso

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.

7.3.1 ¿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

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

7.3.2 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:

- Microprocesador de 500 Mhz AMD Geode LX800.- Memoria RAM de 256 MB DDR.- Un puerto de LAN Ethernet RJ-45.- 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

Figura 162: Placa ALIX 3D2 con carcasa de aluminio

Enrique Morón Ayuso

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

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

Enrique Morón Ayuso

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

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

7.3.3 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 1001 -sn uac -d 30000 -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

Enrique Morón Ayuso

7.3.3.1 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 1001 -sn uac -d 30000 -m 200 -r 10 -l 5 -i 192.168.1.105 192.168.1.101 -rtp_echo

La ejecución del comando anterior genera la siguiente salida:

334

Figura 163: Salida comando sipp con 5 llamadas simultaneas

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

335

Figura 164: Salida consola de Asterisk, después de ejecutar sipp

Enrique Morón Ayuso

Monitorzación del uso de la red detallado con iptraf, con 5 llamadas simultáneas:

La salida del comando htop, con 5 llamadas simultáneas es la siquiente:

336

Figura 165: IPtraf: Uso de red con 5 llamadas simultáneas

Figura 166: Uso de recursos con 5 llamadas simultáneas

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

7.3.3.2 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 1001 -sn uac -d 30000 -m 200 -r 10 -l 10 -i 192.168.1.105 192.168.1.101 -rtp_echo

La ejecución del comando anterior genera la siguiente salida:

337

Figura 167: Salida comando sipp con 10 llamadas simultaneas

Enrique Morón Ayuso

Monitorzación del uso de la red detallado con iptraf, con 10 llamadas simultáneas:

La salida del comando htop, con 10 llamadas simultáneas es la siquiente:

338

Figura 168: IPtraf: Uso de red con 10 llamadas simultáneas

Figura 169: Uso de recursos con 10 llamadas simultáneas

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

7.3.3.3 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 1001 -sn uac -d 30000 -m 200 -r 10 -l 15 -i 192.168.1.105 192.168.1.101 -rtp_echo

La ejecución del comando anterior genera la siguiente salida:

339

Figura 170: Salida comando sipp con 15 llamadas simultaneas

Enrique Morón Ayuso

Monitorzación del uso de la red detallado con iptraf, con 15 llamadas simultáneas:

La salida del comando htop, con 15 llamadas simultáneas es la siquiente:

340

Figura 171: IPtraf: Uso de red con 15 llamadas simultáneas

Figura 172: Uso de recursos con 15 llamadas simultáneas

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

7.3.3.4 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 1001 -sn uac -d 30000 -m 200 -r 10 -l 20 -i 192.168.1.105 192.168.1.101 -rtp_echo

La ejecución del comando anterior genera la siguiente salida:

341

Figura 173: Salida comando sipp con 20 llamadas simultaneas

Enrique Morón Ayuso

Monitorzación del uso de la red detallado con iptraf, con 20 llamadas simultáneas:

La salida del comando htop, con 20 llamadas simultáneas es la siquiente:

342

Figura 174: IPtraf: Uso de red con 20 llamadas simultáneas

Figura 175: Uso de recursos con 20 llamadas simultáneas

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

7.3.3.5 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 1001 -sn uac -d 30000 -m 200 -r 10 -l 25 -i 192.168.1.105 192.168.1.101 -rtp_echo

La ejecución del comando anterior genera la siguiente salida:

343

Figura 176: Salida comando sipp con 25 llamadas simultaneas

Enrique Morón Ayuso

Monitorzación del uso de la red detallado con iptraf, con 25 llamadas simultáneas:

344

Figura 177: IPtraf: Uso de red con 25 llamadas simultáneas

Figura 178: Uso de recursos con 25 llamadas simultáneas

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

7.3.4 Conclusiones de las pruebas de llamadas con SIPp

En la siguiente tabla se recopilan los datos de las pruebas anteriores:

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

Figura 179: Tabla de resultados de las pruebas de rendimiento

Llamadas %CPU Libre %CPU Ocupada Memoria usada (MB) Tráfico de red (kbits/s) (kbits/s) por llamada0 87,6 12,4 236 656 72,3 27,7 236 919 142,311 53,9 46,1 236 1776 155,516 31,4 68,6 236 2983 182,321 17,5 82,5 239 3276 152,926 0 100 240 4351 164,8

Enrique Morón Ayuso

8. Conclusiones y futuros desarrollos del panel web BeetonFinalizado 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

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

ANEXO 1: MANUAL DE USUARIO

347

Enrique Morón Ayuso

MANUAL DE USUARIO

PROYECTO BEETON

Panel de administración web de Asterisk

Realizado por

ENRIQUE MORÓN AYUSO

348

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

1.IntroducciónEste manual pretende ser una ayuda para el uso de la interfaz web de administración Beeton.

2. Instalación de BeeTonEn 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 1.8.24.1, con las librerías (dependencias) libpri-1.4.14 y libss7-1.0.2

• Django 1.5.5

• 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

Enrique Morón Ayuso

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

Enrique Morón Ayuso

Aceptamos la instalación de dependencias de django:

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:

http://<Ip_servidor_asterisk>:8000

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

Enrique Morón Ayuso

3. Usando el panel de administración web de BeetonEn 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.

354

Figura 180: Estado del sistema

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:

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:

355

Figura 181: Consulta del registro de llamadas por defecto

Figura 182: Consulta del registro de llamadas sin datos

Enrique Morón Ayuso

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:

356

Figura 183: Consulta registro de llamadas con fecha de inicio

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:

357

Figura 184: Consulta del registro de llamadas con varios parámetros

Enrique Morón Ayuso

Generamos el informe en pdf de la siguiente consulta anterior, pulsando sobre la opción “Generar informa en pdf”:

358

Figura 185: Informe del registro de llamadas en pdf

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.

3.3.1 Extensiones SIP

Este apartado muestra todo lo referente a la gestión de extensiones tipo SIP.

3.3.1.1 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:

Si pulsamos sobre el nombre de la extensiones podremos modificar dicha extensión:

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

Figura 186: Lista de extensiones SIP

Figura 187: Extensión SIP

Enrique Morón Ayuso

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

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

361

Figura 188: Opciones avanzadas extensiones SIP

Enrique Morón Ayuso

3.3.1.2 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:

Una vez pulsado nos pedirá la confirmación.

3.3.2 Extensiones IAX

Este apartado muestra todo lo referente a la gestión de extensiones tipo IAX.

3.3.2.1 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:

362

Figura 189: Eliminar extensión SIP

Figura 190: Lista de extensiones IAX

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

Si pulsamos sobre el nombre de la extensiones podremos modificar dicha extensión:

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

Figura 191: Extensión IAX

Enrique Morón Ayuso

364

Figura 192: Opciones avanzadas extensión IAX

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

3.3.2.2 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:

Una vez pulsado nos pedirá la confirmación.

365

Figura 193: Eliminación de extensión IAX

Enrique Morón Ayuso

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.

3.4.1 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.

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

Figura 194: Lista de contextos

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

Vemos que existen líneas definidas para las diferentes extensiones. Centrémonos en las líneas definidas para 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

Figura 195: Lista de lineas del contexto usuarios

Figura 196: Lineas de espera y responder llamadas de la extensión 125

Enrique Morón Ayuso

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

Figura 197: Añadir línea de espera de 2 segundos a la extensión 125

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:

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

Figura 198: Línea responder llamadas extesión 125

Enrique Morón Ayuso

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:

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”:

Nos mostrará de nuevo la lista con el nuevo contexto añadido:

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”:

370

Figura 199: Lista de contextos

Figura 200: Crear nuevo contexto: "Dpto. técnico"

Figura 201: Lista de contextos

Figura 202: Lista de extensiones SIP

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

Enrique Morón Ayuso

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

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

Enrique Morón Ayuso

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

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?

3.4.3 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

Enrique Morón Ayuso

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

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

Enrique Morón Ayuso

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

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 100.

379

Enrique Morón Ayuso

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

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

Enrique Morón Ayuso

3.5 Gestión de módulos: funcionalidades del plan de llamadas

Beeton provee de un sistema de administración de funcionalidades del plan de llamadas llamados módulos. Este sistema permite la instalación de diferentes funcionalidades acorde con los requisitos de la centralita. Consiguiendo con esto que la herramienta Beeton tenga solo las funcionalidades necesarias, facilitando así el uso por parte del administrador de la misma.

Para instalar una funcionalidad basta con acceder desde el menú principal a la opción de “Admin. de funcionalidades” y nos mostrará lo siguiente:

En la que aparece la lista con las funcionalidades ya instaladas, pudiendo desinstalar las funciones pulsando sobre el icono de la papelera asociado a cada una. Y a la derecha aparece el formulario para poder instalar nuevas funcionalidades añadiendo el fichero tar.gz apropiado.

382

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

3.6 Acceso a la consola cliente de Asterisk

Para acceder a la consola cliente de Asterisk solo hay que pulsar en el menú principal, y nos aparecera la consola con una entrada para ejecutar ordenes.

Además, dispone de un historial de los últimos 50 comandos ejecutados. Accedemos al historial pulsando la flecha arriba o fleja abajo desde nuestro teclado.

3.7 Gestión de ficheros de audio

Asterisk hace uso de los ficheros de audio para funcionalidades del plan de llamadas como puede ser la oeradora automática, o el buzón de voz. Para administrar dichos ficheros de audio, el panel Beeton dispone de un formulario para subir los ficheros al servidor, y para mostrar los ficheros que ya están disponibles. El listado de ficheros de audio ofrece un texto de ayuda en la que muestra lo que la operadora dirá cuando se reproduzca dicho audio.

383

Enrique Morón Ayuso

ANEXO 2

Conceptos básicos sobre los ficheros de configuración de AsteriskEn este anexo describiremos brevemente algunos de los aspectos de la configuración del dialplan

de Asterisk.

1. Directorios de Asterisk

A continuación detallaremos los directorios de trabajo por defecto de Asterisk en un sistema Linux. Además, proporcionaremos una descripción del uso y/o contenido de cada uno de ellos:

• /etc/asterisk/ : Es el directorio de configuración por defecto de Asterisk. Aunque se quiera tener otro directorio para la configuración de Asterisk, éste siempre tendrá que existir con el fichero “asterisk.conf” para establecer el resto de directorios de Asterisk. Si se quiere prescindir del “asterisk.conf” en “/etc/asterisk/”, se puede acudir al fichero “/etc/default/asterisk” para definirlo. Entre otros muchos ficheros de configuración, por defecto, aquí se encuentran los ficheros para el dialplan (“extensions.conf”), SIP (“sip.conf”), IAX2 (“iax2.conf”), buzones de voz (“voicemail.conf”), etc.

• /usr/lib/asterisk/modules/ : Directorio donde se encuentran los módulos de Asterisk (funciones, programas del dialplan, codecs, etc.) compilados en extensión “.so”.

• /var/lib/asterisk/ : Directorio donde se guardan las claves, la base de datos interna, los scripts AGI, la música en espera y los sonidos del sistema en una instalación desde las fuentes.

• /var/spool/asterisk/ : Directorio donde se guardan las conferencias salvadas por Meetme(), los call-files, los textos que son leidos por Dictated() y los mensajes de voz si no se utiliza una base de datos.

• /var/run/asterisk/ : Donde se encuentra el archivo PID del Asterisk que se está ejecutando.

• /var/log/asterisk/ : Los logs (registros) y notificaciones realizadas. Todos estos comportamientos se pueden cambiar modificando la configuración en Asterisk (“logger.conf”) y en rsyslog.

384

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

2. Gestión del plan de marcación de AsteriskEl plan de marcación es sin duda el corazón del sistema Asterisk. En el se especifica que hacer

con cada una de las llamadas que llegan y a dónde dirigir las que salen.

De forma muy general podemos decir que consiste en una serie de pasos que Asterisk debe seguir cuando llega una llamada.

Para configurar el plan de marcación es necesario editar el archivo de configuración “extensions.conf” utilizando para ello una sintaxis apropiada. El plan de marcación es sin duda el corazón del sistema Asterisk. En el se especifica que hacer con cada una de las llamadas que llegan y a dónde dirigir las que salen.

De forma muy general podemos decir que consiste en una serie de pasos que Asterisk debe seguir cuando llega una llamada.

Para configurar el plan de marcación es necesario editar el archivo de configuración extensions.conf utilizando para ello una sintaxis apropiada.

Por tanto antes de configurar el plan de marcación de nuestro sistema, hay que entender una serie de conceptos clave como son:

- Contextos- Extensiones- Prioridades- Aplicaciones

2.1. ContextosEl plan de marcación está dividido en contextos (contexts en inglés), los cuales agrupan un grupo

de extensiones. Los contextos definen bloques independientes dentro de un plan de marcación aunque pude haber interacción entre ellos.

Imaginemos por ejemplo que queremos que cuando se reciban llamadas los fines de semana, salte el buzón de voz y que cuando se reciban entre semana, las reciba la secretaría. Pues bien, esto se puede hacer empleando dos contextos, uno para los sábados y domingos y otro para los días entre semana.

Además, nos permite por ejemplo tener definido para un mismo número diferentes comportamientos según el contexto dónde estén definidos. Si una compañía A tiene definido un contexto “a” y otra compañía B tiene un “b”, cuando se marque un número definido en ambos, si llamamos desde la compañía A se seguirán las instrucciones definida en “a” y si llamamos desde B se seguirán las definidas en “b”.

385

Enrique Morón Ayuso

Un contexto se define escribiendo el nombre del contexto entre corchetes de la siguiente manera:

[nombre contexto] El nombre del contexto puede formarse con cualquier combinación de teclas (tanto mayúsculas

como minúsculas), números, guión y guión bajo.

Decir también que todas las instrucciones situadas a continuación de una definición de contexto pertenecerán a ese contexto hasta que haya una nueva definición de contexto.

El plan de marcación tiene dos contextos especiales llamados “general” y “globals”. En el primero se definen varios parámetros generales y el segundo se utiliza para definir variables globales. Pero no nos preocupemos de estas secciones por el momento, basta con que no nombremos ninguno de nuestros contextos con esos nombres.

2.2. ExtensionesLa palabra extensión en el mundo de las comunicaciones hace referencia a un número de

teléfono. En Asterisk es algo más ya que más bien define una serie de pasos que hay que seguir cuando se marca un determinado número.

Para definir una extensión se escribe la palabra “exten” seguida del símbolo “=>”, y a continuación el nombre de la extensión, la prioridad y la aplicación que se quiere ejecutar separados entre comas. Es decir:

exten => nombre,prioridad,aplicación

El nombre puede estar formado por una combinación de letras, números y los caracteres ”*” y “#”. El nombre es lo que se extrapolaría al número de teléfono en la telefonía clásica, pero teniendo en Asterisk un significado mucho más amplio, ya que podríamos definir extensiones formadas por letras.

Un ejemplo real de un extensión sería el siguiente:

exten => 105,1,Answer()

Para definir una extensión, se pueden utilizar también unos caracteres especiales que nos permiten definir patrones. Estos caracteres son los siguientes:

- _: para definir un patrón, el nombre de la extensión debe comenzar por el carácter subrayado.

- X: el símbolo “X” significa cualquier número entre 0 y 9.

- Z: se utiliza para designar cualquier número entre 1 y 9.

386

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

- N: significa cualquier número entre 2 y 9.

- [N1N2-NK]: con esto indicamos que son válidos el número N1 y los número que van desde el N2 a NK. Por ejemplo, si ponemos [13-7], esto significaría cualquier número entre el grupo: {1,3,4,5,6,7}.

- . (punto): un punto significa uno o más caracteres.

- ! : el signo de exclamación hace referencia a cero o mas caracteres.

Veamos a continuación algunos ejemplos de patrones:

Por ejemplo si queremos definir una extensión para los números móviles pondríamos algo así:

exten => _6XXXXXXXX, prioridad, aplicación

Esto quiere decir que esa extensión se disparará si marcamos cualquier número que empiece por 6 seguido de 8 cifras las cuales pueden ser cualquiera entre 0 y 9.

Si sabemos que los usuarios dentro de la empresa tendrán números de extensión que van entre 2100 y 2500, pondremos:

exten => _2[1-5]00, prioridad, aplicación

Si queremos tener una extensión para los números geográficos dentro de España, los cuales empiezan por 8 o por 9 y la segunda cifra no puede ser 0 teniendo una longitud total de 9 cifras, pondríamos:

exten => _[89]ZXXXXXX, prioridad, aplicación

Por último imaginemos que queremos tener un extensión para los números que empiecen por

0034 y después tengan una o mas cifras:

exten => _0034.

Los patrones que siguen los números de teléfonos están regulados normalmente por el gobierno de cada país mediante un documento (http://www.minetur.gob.es/telecomunicaciones/es-ES/Servicios/Numeracion/Documents/Descripcion_plan_20101216.pdf). Tomaremos dicho documento para realizar la parte del plan de marcación referente a las llamadas salientes.

387

Enrique Morón Ayuso

2.3. PrioridadesUna extensión puede tener varias instrucciones o pasos. La prioridad indica el orden que se va a

seguir Asterisk al ejecutar todos los pasos. Las instrucciones se numeran secuencialmente empezando por 1.

En el siguiente ejemplo:

exten => 105, 1 , Answer()exten => 105, 2, Handup()

Asterisk ejecutará la aplicación “Answer()” y a continuación “Handup()”.

Existe la incomodidad de que si tenemos una extensión con muchos pasos y queremos introducir uno nuevo al principio habría que volver a numerar todos los pasos por debajo de la línea de inserción del nuevo paso. Para evitar esto, se utilizan las prioridades no numeradas.

En vez de utilizar una secuencia de números empezando por el 1, utilizamos la letra “n” (que invoca next). Por ejemplo:

exten => 104, 1, “Aplicación 1”exten => 104, n, “Aplicación 2”exten => 104, n, “Aplicación 3”

Asterisk empezará por la prioridad 1 (la cual si es necesaria ponerla), y cuando llegue al paso 2 y se encuentre una “n”, sumará uno a la prioridad anterior. Esto hace mucho más fácil el introducir cambios en las extensiones.

2.4. AplicacionesUna aplicación es una determinada acción que se realiza en un canal de comunicación. Por

ejemplo, marcar una determinada extensión, hacer sonar una música de espera, colgar la llamada, son todas tipos de aplicaciones.

Algunas aplicaciones como “Answer()” o “Handup()” no necesitan argumentos para funcionar, otras sin embargo si lo necesitan. La manera de pasar argumentos a una aplicación, es hacerlo entre paréntesis y separados por comas “,” o por el símbolo “|”. Un ejemplo sería Playback(nombre_del_archivo). Algunas de las aplicaciones más básicas de Asterisk se describen a continuación:

388

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

- Answer() : si un canal está sonando, esta aplicación nos sirve para responder. En la telefonía tradicional, es la acción de descolgar el teléfono cuando este está sonando.

- Handup() : con esta aplicación, hacemos terminar la conversación. En la telefonía tradicional correspondería con la acción de colgar el teléfono.

- Playback() : sirvve para reproducir por el canal de comunicación un fichero de audio que se encuentra almacenado en el sistema. Recibe como argumento el nombre del fichero que queremos reproducir sin extensión (si el fichero es ejemplo.gsm, solo escribimos ejemplo). Si solo ponemos el nombre, Asterisk da por hecho que se encuentra en el directorio /var/lib/asterisk/sounds . Para indicar otro, debemos poner la ruta del archivo en el sistema. Mientras se reproduce el fichero cualquier pulsación de teclas por parte del usaurio es ignorada.

- Wait() : nos sirve para esperar un determinado tiempo en segundos, que recibe como argumento, antes de realizar la siguiente acción. Así en el siguiente ejemplo:

exten => 103, 1, Wait(30)exten => 103, n, Answer()

Esperamos 30 segundos (equivalente a 6 tonos) antes de responder a la llamada.

389

Enrique Morón Ayuso

Todo este material de este trabajo está licenciado bajo:

Creative Commons Attribution NonCommercial-ShareAlike 4.0

http://creativecommons.org/licenses/by-nc-sa/4.0/

390