Manual de operación VIVAit 5.1
| Producto: | VIVAit Call
VIVAit Suite |
|---|
Sumario
- 1 Introducción a la plataforma VIVAit
- 2 Arquitectura de la plataforma VIVAit
- 3 Descripción de los elementos software
- 3.1 Niveles funcionales del software
- 3.2 Versiones de módulos
- 3.3 Sistema Operativo
- 3.4 Matriz de conmutación
- 3.5 Bases de datos (BBDD)
- 3.6 Procesos propios VIVAit
- 3.6.1 bdCentral
- 3.6.2 bdNodo
- 3.6.3 Intz-Nimitz
- 3.6.4 motorSal
- 3.6.5 MyACDSuperv
- 3.6.6 Proceso escoba
- 3.6.7 recordCentral
- 3.6.8 recordNodo
- 3.6.9 Sercen
- 3.6.10 Aplicación PQCTI
- 3.6.11 Vivait-CTI
- 3.6.12 Introducción al aprovisionamiento
- 3.6.13 Watchdog
- 3.6.14 Proceso de Backup
- 3.6.15 CHAT
- 3.6.16 MEET
- 3.6.17 Gran Hermano (GH)
- 3.6.18 GeneraConf
- 3.6.19 Nodo WebRTC
- 3.7 Portales web corporativos
- 3.8 Monitorización en VIVAit
- 3.8.1 Generalidades de Zabbix
- 3.8.2 Zabbix
- 3.8.3 Zabbix en MDtel
- 3.8.3.1 Configuraciones de Zabbix
- 3.8.3.2 Scripts del Servidor Zabbix
- 3.8.3.2.1 zabbixSenderACDBD.pl
- 3.8.3.2.2 zabbixSenderACD.pl
- 3.8.3.2.3 zabbixSenderCTI.pl
- 3.8.3.2.4 zabbixSender-intz-nimitz.pl
- 3.8.3.2.5 zabbixSenderMotorSal.pl
- 3.8.3.2.6 zabbixSenderMyACDSuperv.pl
- 3.8.3.2.7 zabbixSenderRecordNodo.pl
- 3.8.3.2.8 zabbixSenderRecordCentral.pl
- 3.8.3.2.9 Dimensionamiento del servidor (Startpollers)
- 3.8.3.2.10 Templates
- 3.8.3.2.11 Resumen
- 3.8.3.2.12 Importar templates
- 3.8.4 Configuración para un primer funcionamiento de Zabbix
- 3.8.5 Indicar que plantilla (template) tendrá el host
- 4 Funcionalidades específicas en VIVAit
- 4.1 Mecanismo de prioridad adaptativa
- 4.2 Marcación saliente
- 4.3 Movilidad
- 4.4 Desvío por calendario
- 4.5 Grabación
- 4.6 Enrutamiento
- 4.7 Control de ancho de banda
- 4.8 MDflow
- 4.8.1 Proceso de instalación de mdflow en una instalación existente; → como se "añade" mdflow en un VIVAit existente
- 4.8.2 Parámetros de configuración
- 4.8.3 Fichero de configuración
- 4.8.4 Ejemplo claro de invocación de mdflow desde dialplan y posterior tratamiento en función de las etiquetas de salida
- 4.8.5 Comandos básicos de diagnóstico
- 4.8.6 Comandos básicos de diagnóstico
- 4.8.7 Asignación de flujos
- 4.8.8 Configuración de cola única
- 4.8.9 MDflow y las trazas
- 4.9 Estadísticas en VIVAit Call
- 5 Diagnósticos y operaciones básicas en VIVAit
- 5.1 Arranque y apagado de la plataforma
- 5.2 Cluster VIVAit
- 5.2.1 Introducción a cluster
- 5.2.2 Funcionamiento en cluster
- 5.2.2.1 Píldoras
- 5.2.2.2 Ejemplo de cluster con mysql y asterisk
- 5.2.2.2.1 Requisitos previos
- 5.2.2.2.2 Particionado (En los 2 nodos)
- 5.2.2.2.3 Gestión de particiones con LVM (En los 2 nodos)
- 5.2.2.2.4 Instalación y configuración del drbd (En los 2 nodos)
- 5.2.2.2.5 Configuración de /etc/hosts (En los 2 nodos)
- 5.2.2.2.6 Creación de los recursos en drbd. (En los 2 nodos)
- 5.2.2.2.7 Sincronización del drbd. (En 1 nodo)
- 5.2.2.3 Pacemaker, corosync y pcs
- 5.2.2.3.1 Parar y deshabilitar los servicios. (en los 2 nodos)
- 5.2.2.3.2 Instalación de los paquetes necesarios. (En los 2 nodos)
- 5.2.2.3.3 Configuramos la clave del usuario hacluster. (En los 2 nodos)
- 5.2.2.3.4 Autentificación del pcs. (En 1 nodo)
- 5.2.2.3.5 Creación y configuración del cluster. (En 1 nodo)
- 5.2.2.3.6 Creación de las IP flotantes (En 1 nodo)
- 5.2.2.3.7 Configuración del drdb. (En 1 nodo)
- 5.2.2.3.8 Montar las particiones del drbd. (En 1 nodo)
- 5.2.2.3.9 Copiar datos de Asterisk a partición drbd. (En nodo 1)
- 5.2.2.3.10 Borrar los directorios de asterisk y crear enlaces simbólicos. (En los 2 nodos)
- 5.2.2.3.11 Copiar datos de mysql a partición drbd. (En 1 nodo)
- 5.2.2.3.12 Borrar los directorios de mysql y crear enlaces simbólicos. (En los 2 nodos)
- 5.2.2.3.13 Modificar configuración de apparmor para mysql. (En los 2 nodos)
- 5.2.2.3.14 Modificar archivos de configuración de mysql. (En 1 nodo)
- 5.2.2.3.15 Configuración del arranque de mysql. (En 1 nodo)
- 5.2.2.3.16 Configuración del arranque de Asterisk. (En 1 nodo)
- 5.2.2.3.17 Mover los recursos a otra máquina. (En 1 nodo)
- 5.2.2.4 Instalación y configuración del Cluster hasta la versión VIVAit 3.3
- 5.3 Gateways
- 5.4 Grabación
- 5.4.1 Configuración de la grabación en la plataforma corporativa
- 5.4.2 Como configurar la grabación bajo demanda
- 5.4.3 Comprobar que el servidor de grabación está activo
- 5.4.4 Comprobar que los nodos están conectados al servidor de grabación
- 5.4.5 Comprobar que un nodo tiene activo el agente de grabación
- 5.4.6 Comprobar que un nodo está subiendo archivos de grabación al servidor
- 5.4.7 Comprobación de grabaciones que se hayan quedado enganchadas en un nodo
- 5.4.8 Comprobación del estado de ocupación del almacenamiento temporal de grabaciones en un nodo.
- 5.5 Escuchas e intrusiones en asterisk
- 5.6 Calendarios
- 5.7 Syslog de agentes
- 5.8 Generación de un Core
- 6 puntos a reasignar
- 6.1 Servidor de grabación
- 6.2 Reporting
- 6.3 TBC (Translation by Chat)
- 6.4 Puesto de trabajo
- 6.5 Integraciones con servicios externos
- 6.6 Marcador Predictivo
- 6.7 Canales digitales en VIVAit Suite
- 6.8 Principales elementos funcionales
- 6.9 Funcionamiento típico
- 6.10 Bots
- 6.11 Canal
- 6.12 Desk
- 6.13 Configuraciones de procesos internos
- 6.14 Comprobaciones
1 Introducción a la plataforma VIVAit
En este documento se describe la plataforma VIVAit de MDTel, cuyo objetivo principal es proporcionar servicios de comunicaciones con tecnología VoIP.
La plataforma VIVAit tiene dos proyecciones en el plano comercial, cuya denominación ser utilizará recurrentemente a lo largo de este documento:
- • VIVAit Call, producto VIVAit para el entorno corporativo
- • VIVAit Suite, producto VIVAit para el entorno call center
Se documentan los procesos principales de cada elemento del sistema, así como sus componentes clave para el diagnóstico.
Por ello el presente documento se divide en cuatro grandes grupos:
- • Arquitectura de la plataforma VIVAit
- • Descripción de los elementos software
- • Funcionalidades específicas en VIVAit
- • Diagnósticos y operaciones básicas en VIVAit
Quedan fuera del ámbito de este documento:
- * Uso de aplicación de agente (VIVAit Desk)
- * Uso de aplicación de supervisor (VIVAit Supervisor), incluyendo sus módulos autónomos (VIVAit reporting, VIVAit Tracker)
- * Uso de portal de administración
- * Uso de portal de traceo de llamadas y agentes (VIVAit Tracker web)
- * Uso de portal de monitorización zabbix
2 Arquitectura de la plataforma VIVAit
La plataforma VIVAit de MDTel se compone de nodos de distinto tipo:
- Nodo tipo operativo
- Realiza funciones de encaminamiento de tráfico telefónico. Estarán dados de alta en el portal de gestión. Entre ellos están:
- Nodo Corporativo, para entornos corporativos de telefonía IP y diferentes aplicaciones. Nodo de procesamiento de telefonía corporativa. Tiene la aplicación Asterisk.
- Nodo Call Center, para los servicios típicos de call center. Nodo de procesamiento de call center. Tiene la aplicación Asterisk.
- Nodo Gateway, auxiliar del nodo corporativo para funciones de telefonía tradicional. Tiene la aplicación Asterisk.
- Nodo STG, para gestionar tráfico telefónico a/desde internet. Este nodo asume la funcionalidad WebRTC que da soporte a terminales webfon e incorpora flexisip para terminales VCB.
- Nodo MCAM, para proporcionar servicios de multicanalidad.
- Nodo Presencia, para proporcionar servicios de presencia.
- Nodo Varios, utilizado normalmente para identificar un nodo tipo auxiliar.
- Nodo Corporativo, para entornos corporativos de telefonía IP y diferentes aplicaciones. Nodo de procesamiento de telefonía corporativa. Tiene la aplicación Asterisk.
- Nodo tipo auxiliar
- Realiza funciones auxiliares. Aunque conveniente no es necesario darlos de alta en el portal de gestión. Entre otros podemos encontrar:
- Nodo BBDD, soporta la base de datos del sistema, bien sea la de tiempo real o la de histórico. En entornos especialmente grandes, suele estar implementado en máquinas dedicadas (bien un servidor o de un clúster de dos servidores).
- Nodo de Gestión, contiene el portal de administración y opcionalmente otros procesos auxiliares no relacionados directamente con la conmutación telefónica de llamadas como: otros portales tracker, GH (Gran Hermano).
- Nodo BBDD, soporta la base de datos del sistema, bien sea la de tiempo real o la de histórico. En entornos especialmente grandes, suele estar implementado en máquinas dedicadas (bien un servidor o de un clúster de dos servidores).
Esta sería la arquitectura funcional, en un proyecto determinado pueden coexistir varios de estos nodos en un solo servidor físico o virtual.
Los despliegues pueden ser múltiples pudiendo abarcar desde:
- Instalación sencilla, un solo servidor que contiene nodo corporativo + nodo de gestión + nodo BBDD.
- Instalación con máximo despliegue, cada nodo en un servidor, pudiendo existir varios nodos con la misma funcionalidad: varios nodos corporativos, varios nodos GW, etc.
En la versión actual los módulos software en los que se implementan los nodos que proporcionan servicios de VoIP son:
- • Sistema Operativo, sobre servidor en máquina física o virtualizada
- • Asterisk: gestiona llamadas telefónicas VoIP, integrando funciones de una central telefónica en un servidor
- • DBTR: gestor de la base de datos
- • Tomcat/Apache: servidor web para los diferentes portales: gestión, supervisor, usuario, traker, ...
- • Webrtc: gestionar llamadas telefónicas desde un navegador web
| Tipo de nodo | Función | Sistema Operativo | Asterisk |
|---|---|---|---|
| Corporativo / GW | Telefonía corporativa | Linux 6.12.63+deb13-amd64 | Asterisk certified/18.9-cert4 |
| Call Center | Telefonía ACD | Ubuntu 22.04.4 LTS | Asterisk 1.4.24-RSP |
| Webrtc | Nodo STG | Linux 6.12.43+deb13-amd64 | - |
Para una información más detallada consultar Versiones de los módulos software
2.1 Arquitectura nodo Corporativo
Un nodo Corporativo / GW se puede instalar en máquinas físicas (directamente sobre el hardware disponible) o sobre máquinas virtuales.
El entorno virtualizado será el procedimiento preferido por MDTel siempre que no existan necesidades especiales que aconsejen el uso de máquinas físicas.
Estas necesidades especiales suelen ser sistemas que tengan un alto volumen de llamadas y sea preferible la instalación en máquinas físicas.
2.1.1 Arquitectura nodo Corporativo / GW sobre máquinas físicas
Este despliegue puede realizarse, según especificaciones del proyecto, sobre una solo máquina o sobre varias máquinas:
Todo en una sola máquina
Sobre la plataforma del sistema operativo se despliegan los distintos servicios necesarios. A continuación se muestran, una configuración mínima:
Despliegue en varias máquinas
Sobre el sistema operativo de cada máquina se despliegan los distintos servicios, distribuyéndolos según los procesos de instalación correspondiente.
El ejemplo anterior en dos máquinas físicas podría ser el siguiente:
En este caso se ha añadido DBTHIST, una base de datos que almacena información histórica para distintos propósitos, como seguridad, postproceso o copias de respaldo.
2.1.2 Arquitectura nodo Corporativo sobre máquinas virtuales
El despliegue virtualizado puede realizarse, según especificaciones del proyecto, sobre una solo máquina física o sobre varias.
El entorno de virutalización es sobre el programa QEMU, que permite ejecutar un sistema operativo dentro de otro (host), como si fuera una “máquina dentro de otra máquina”
Todo en una sola máquina
El mínimo número de máquinas virtuales en una instalación son 2, un VIVAit-corporativo y una máquina de BD/Gestión.
En el caso de necesitar instalar tarjetas físicas para conectar líneas al sistema, se instalará Asterisk en la maquina física, pero este no será un nodo VIVAit.
se comportará como un conversor de líneas físicas a SIP y dentro de 'VIVAit se configurarán las líneas como Trunk SIP.
Despliegue en varias máquinas
El sistema estará compuesto de tantas máquinas virtuales como sean necesarias y el número de máquinas físicas necesarias para asumir la carga de la instalación.
El ejemplo virtualizado anterior, en dos máquinas físicas, podría ser el siguiente:
2.2 Arquitectura nodo Call Center
La arquitectura de este tipo de nodo se hereda de versiones anteriores.
2.2.1 Arquitectura del puesto de agente
Como complemento a la arquitectura Call Center se muestra la arquitectura asociada a los actores principales del ACD: agentes y supervisores.
2.3 Arquitectura del nodo STG
Este nodo está formado por los componentes que permiten conectar, a través de Internet, servicios de VoIP para terminales del sistema que acceden a los nodos corporativos.
Para minimizar la exposición de VIVAit a redes abiertas, como internet, este nodo concentra las funciones que requieren conectividad con dichas redes.
Con esta filosofía de diseño conexiones de VIVAit Web Call, app como VCB, hardphone en internet, etc. serán controladas por este nodo.
2.4 Servicios de networking
Al integrar el sistema VIVAit en la infraestructura del cliente, destinado a prestar servicios de VoIP, es fundamental considerar los servicios necesarios para su correcto funcionamiento.
Aunque los servidores pueden ser proporcionados por el sistema de MDTel, lo más habitual es que el cliente los aporte dentro de su propia infraestructura:
- * NTP: el sistema en global ha de estar sincronizado; todos los servidores y puestos de trabajo (en el caso de VIVAit Suite) han de estar perfectamente sincronizados.
- Los servidores de la plataforma se sincronizarán con el NTP del cliente; si el cliente no tiene NTP será necesario que un servidor de la plataforma se sincronice con un NTP externo y este sea el servidor para el resto de la plataforma
- Los servidores de la plataforma se sincronizarán con el NTP del cliente; si el cliente no tiene NTP será necesario que un servidor de la plataforma se sincronice con un NTP externo y este sea el servidor para el resto de la plataforma
- * DNS: la configuración de DNS de la plataforma será coherente con el resto de la plataforma IT del cliente
- * DHCP: Es necesario coordinar con el cliente la asignación de direcciones para los diferentes elementos de la plataforma VIVAit, fundamentalmente para terminales telefónicos.
- En este caso será necesario activar la opción 66 del DHCP que permitirá definir el servidor TFTP del que los terminales descargaran sus ficheros de aprovisionamiento
2.5 Conectividad en VIVAit
2.5.1 Esquema VIVAit Call
El esquema siguiente muestra todos los flujos de información existentes en un entorno típico de telefonía corporativa (sin presencia)
La descripción de los flujos se puede consultar en Tabla de flujos VIVAit
2.5.2 Esquema VIVAit Suite
En el entorno de Contact Center se encuentran los siguientes flujos entre servicios (comunicaciones entre servidores).
La descripción de los flujos se puede consultar en Tabla de flujos VIVAit
2.5.3 Esquema usuario-servidor
Entre usuarios y servicios se documentan los siguientes flujos:
La descripción de los flujos se puede consultar en Tabla de flujos VIVAit
2.5.4 Tabla de flujos VIVAit
La sisguiente tabla muestra los flujos de datos que se establecen entre los distintos componentes del sistema VIVAit.
| Lado A | Lado B | Puertos | Sentido | Observaciones |
|---|---|---|---|---|
| Terminal telefónico | Servidor | TCP 5060 | A -> B | Señalización SIP |
| Terminal telefónico | Servidor | UDP 5060 | A -> B | Señalización SIP |
| Terminal telefónico | Servidor | 10000 a 20000 | A -> B B -> A |
RTP |
| Terminal telefónico | Servidor TFTP | UDP 69 | A -> B B -> A |
Para actualización de terminales por TFTP |
| Terminal telefónico | Servidor NTP | UDP 123 | A -> B | |
| VIVAit Desk | Servidor | TCP 4500 | A -> B | Comunicación CTI |
| VIVAit Desk | Servidor | TCP 3306 | A -> B | Acceso a Mysql Base de datos |
| VIVAit Desk | Servidor | UDP 514 | A -> B | Para envío de logs de agente |
| VIVAit Supervisor aplicación de supervisor |
Servidor | TCP 4500 | A -> B | Comunicación CTI |
| VIVAit Supervisor portal de supervisión |
Servidor | TCP 3306 | A -> B | Acceso a Mysql Base de datos |
| VIVAit Tracker | Servidor | TCP 3306 | A -> B | Acceso a Mysql Base de datos |
| Tracker WEB | Servidor | TCP 3306 | A -> B | Acceso a Mysql Base de datos |
| Actualizador | Servidor | TCP 80 | A -> B | Necesario para actualizaciones de versiones de aplicaciones de agente y supervisores |
| Portales | Servidor | TCP 443 | A -> B | Acceso a los diferentes portales de VIVAit |
| Monitor | Servidor | TCP 8180 | A -> B | Wallboard |
| Monitorización | Servidor | TCP 80 | A -> B | Acceso a portal monitorización (Zabbix) |
2.6 Gateways VIVAit
El concepto de gateway no existe como entidad funcional dentro de la plataforma VIVAit. En su arquitectura únicamente se definen nodos ACD (Automatic Call Distribution) y nodos corporativos.
Desde el punto de vista operativo, el nodo corporativo es el encargado de asumir las funcionalidades típicamente asociadas a un gateway. En particular, gestiona la interconexión con sistemas externos, incluyendo interfaces analógicas, digitales e IP, así como la conexión con la Red Telefónica Conmutada.
Por tanto, el término gateway queda limitado a un uso comercial o conceptual, sin correspondencia directa con elementos funcionales dentro de la plataforma.
En consecuencia, los procedimientos de diagnóstico y operación relativos a la conectividad con sistemas externos o con la RTC deben realizarse conforme a los mecanismos definidos para el nodo corporativo.
3 Descripción de los elementos software
3.1 Niveles funcionales del software
Los niveles funcionales o capas del software en el sistema VIVAit cumplen una función específica y se apoyan en el nivel inferior.
La lista de los mismos es la siguiente:
- • Nivel de sistema operativo
- • Nivel de conmutación de voz
- • Nivel de base de datos
- • Nivel de procesos VIVAit
- • Nivel de Administración
- • Nivel de Monitorización
3.1.1 Nivel de sistema operativo
| Elemento | Instancias | Propósito | Producto | Observaciones |
|---|---|---|---|---|
| Ubuntu Server LTS 64 bits |
Uno por servidor | VIVAit Call / VIVAit Suite | Actualmente (may-2026) 22.04. Bajo proyecto puede cambiarse | |
| Debian LTS | Uno por servidor | VIVAit Call | Actualmente (may-2026) 13 (Trixie). Bajo proyecto puede cambiarse | |
| Almacenamiento de grabaciones | Uno por sistema | Almacenamiento de las grabaciones, ya sean de entorno corporativo o de Contact Center | VIVAit Call / VIVAit Suite | Típicamente un espacio grande de almacenamiento proporcionado por el cliente y que se monta como un sistema de archivos local en los servidores de la plataforma
Pueden existir sistemas secundarios de almacenamiento de grabaciones |
Para más detalles, consultar el apartado Sistema Operativo
3.1.2 Nivel de conmutación de voz
| Elemento | Instancias | Propósito | Producto | Observaciones |
|---|---|---|---|---|
| Asterisk 1.4.24 by MDtel |
Uno por servidor ACD | Núcleo de conmutación de voz basado en Asterisk 1.4 y modificado por MDtel | VIVAit Suite | Fuertemente modificado por MDtel. En el futuro migrará a Asterisk 18.9 Certified |
| Dialplan ACD by MDtel |
Uno por servidor ACD | Configuración de voz | VIVAit Suite | En el futuro se unificará con corporativa |
| Asterisk 18.9 Certified by MDtel |
Uno por servidor corporativo / gateway | Núcleo de conmutación de voz basado en Asterisk 18.9 y modificado por MDtel | VIVAit Call | Actualmente Asterisk estándar (05/26). La instalación contempla descargar de la red la versión 18 más actualizada, siempre "CERTIFIED" |
| Dialplan corporativo | Uno por servidor corporativo/gateway | Configuración de voz| | VIVAit Call | En el futuro se unificará con ACD |
Para más detalles, consultar el apartado Matriz de conmutación
3.1.3 Nivel de base de datos
| Elemento | Instancias | Propósito | Producto | Observaciones |
|---|---|---|---|---|
| MySQL 8.0.45 | Donde haya BBDD de cualquier tipo (incluso zabbix) | Motor de Base de Datos para Ubuntu 22.04 | VIVAit Call / VIVAit Suite | A efectos prácticos se pretende que sea la BBDD de todos los servicios |
| MariaDB 11.8.3 | Donde haya BBDD de cualquier tipo | Motor de Base de Datos para Debian 13 | VIVAit Call / VIVAit Suite | A efectos prácticos se pretende que sea la BBDD de todos los servicios |
| DBTR | Una por sistema | Base de Datos sobre la que trabaja todo el entorno de tiempo real | VIVAit Call / VIVAit Suite | |
| DBHIST | Una por sistema multinodo | Base de Datos para postproceso, como reporting, traker, supervisor, ... Subconjunto de tablas de DBTR con la que está sincronizada | VIVAit Call / VIVAit Suite | Bajo proyecto puede existir más de una. En el nodo en el que exista réplica existirá además copia (excepto nodo ACD) |
| DB copia | Uno por servidor corporativo / gateway | Copia de tablas de configuración de DBTR para respaldo de la misma | VIVAit Call | Local en cada nodo. Los nodos de ACD actualmente no trabajan con copia; en caso de fallo de BBDD TR se usa el modo emergencia |
Para más detalles, consultar el apartado Bases de Datos
3.1.4 Nivel de procesos VIVAit
La mayoría de los elementos aparecen como servicios en los nodos correspondientes.
| Elemento | Instancias | Propósito | Producto | Observaciones |
|---|---|---|---|---|
| intz-nimitz | Donde haya una BBDD de tiempo real o copia | Interfaz entre el dialplan y la base de datos | VIVAit Call / VIVAit Suite | No donde haya BBDD de réplica. En sistemas grandes pueden contemplar más de un intz-nimitz |
| intz-gh | En el nodo con menos carga | Conocer el estado de las extensiones de diferentes nodos | VIVAit Call | Solo va en un nodo. Si desconocemos cual es el nodo con menos carga, instalarlo en la maquina con BDHIST |
| intz-tap | En los nodos corporativos | Encargado de la grabación SIPREC y TBC | VIVAit Call | Junto al modulo chan_mdtap de asterisk para enviar los flujos RTP a un elemento externo |
| serCen | En nodo STG y nodo de gestión | Encargado de la autenticidad y doble factor de los usuarios | VIVAit Call / VIVAit Suite | Proporciona servicios a los diferentes portales (front-end) del sistema |
| vivait-direct | En nodo STG y nodo de gestión | Centraliza y gestiona la consulta de agendas y contactos desde distintas fuentes de datos. Alternativa a Vivait-FonBO que sigue gestionando el histórico de llamadas |
VIVAit Call / VIVAit Suite | Servicio invocado por los portales vivait-user y webfon2 |
| vivait-cti | Uno por servidor ACD | Interfaz entre VIVAit Desk, supervisor y el manager de asterisk | VIVAit Suite | |
| motorSal | Uno por servidor ACD | Motor de marcador saliente automático | VIVAit Suite | Solo si hay marcación saliente. Junto a DBTR |
| myAcdSuperv | Uno por servidor ACD | Recopilador de datos de asterisk y actualiza en la BBDD. Genera llamadas en el marcador | VIVAit Suite | |
| recordCentral | Uno por sistema | Servidor de grabaciones, los agentes (recorNodo) se conectan a él | VIVAit Call | Se arrancan varias instancias en función del número de nodos. Debe instalarse en un servidor que tenga el almacenamiento de grabaciones en su sistema de archivos |
| recordNodo | Uno por servidor corporativo / gateway | Agente de grabación | VIVAit Call | |
| bdCentral | Uno, en el nodo con la BBDD de tiempo real | Genera la base de datos que se copiará para respaldo a otros nodos | VIVAit Call / VIVAit Suite | |
| bdNodo | En cada nodo con BBDD de copia | Recoge la base de datos del servidor central con el objeto de tener el respaldo | VIVAit Call / VIVAit Suite | |
| Actualizador | Uno por sistema con ACD | Se encarga de proporcionar las versiones actualizadas de las aplicaciones de puesto de trabajo | VIVAit Suite | En el mismo servidor que el portal de administración |
| phoneProv-tftp | Uno por sistema | Se encarga del aprovisionamiento masivo de terminales | VIVAit Call / VIVAit Suite | En instalaciones grandes habrá más de uno, quizás uno por sede grande; depende de la infraestructura de DHCP |
| borraregistrosnimitz | Uno por sistema | Se encarga de la gestión de las bases de datos, aplicando políticas de retención que limitan la persistencia de los registros hasta una fecha máxima establecida. | VIVAit Call / VIVAit Suite | En la BDTR es típico dejar 6 meses y en BDHIST 5 anos. |
| movergrabacionesanube | Uno por sistema | Guardar las grabaciones un un NAS del cliente | VIVAit Suite | Utiliza el módulo RecordCentral |
Para más detalles, consultar el apartado Procesos propios VIVAit
3.1.5 Nivel de Administración
Este nivel software proporciona servicios para administrar el sistema y servicios al usuario final. Se estructura en dos capas:
- • Front-end: capa de presentación que interactúa con el usuario (portales web, interfaces gráficas o paneles de control), encargada de mostrar la información y recoger las acciones del usuario.
- • Back-end: capa de lógica y procesamiento donde se gestionan los servicios, la ejecución de aplicaciones y el acceso a datos, apoyándose en servidores como Apache HTTP Server y Apache Tomcat.
Para obtener más información del tipo administración consultar el apartado Portales de Administración.
Para ver los diferentes portales de usuario ver Portales web corporativos.
3.1.5.1 Nivel de Administración - Front-end
Se compone de dos entidades:
- • Servidores: donde se ejecutan las aplicaciones y servicios web, como Apache HTTP Server.
- • Clientes: interfaces de acceso para los usuarios, como portales web.
| Elemento | Instancias | Propósito | Producto | Observaciones | |
|---|---|---|---|---|
| Apache2 | Uno por servidor con portales | Servidor de páginas web. Servidor de portales. No usa JAVA | VIVAit Call / VIVAit Suite | |
| Vivait-Call | Uno por sistema | Portal de administración del sistema | VIVAit Call / VIVAit Suite | Bajo proyecto puede existir más de uno |
| vivait-user | Uno por sistema en nodo STG | Portal de usuario, para acceso a buzones, configuración, etc. | VIVAit Call | Bajo proyecto puede existir más de uno |
| webfon2 | Uno por sistema en nodo STG | Portal de VIVAit Call Web | VIVAit Call | Bajo proyecto puede existir más de uno |
| webfon2-solo | Uno por sistema en nodo STG | Dialpad de VIVAit Call Web. webfon2 = vivait-user + webfon2-solo |
VIVAit Call | Bajo proyecto puede existir más de uno |
| Vivait-Tracker | Uno por sistema | Portal de seguimiento de llamadas Denominado Tracker web. | VIVAit Call / VIVAit Suite | Debe instalarse en un servidor que tenga los ficheros de grabación montados en su sistema de archivos. Ligado a recordCentral |
| Tracker-Corp | Uno por sistema | Portal de seguimiento de llamadas del entorno corporativo. Denominado Tracker corporativo. | VIVAit Call | Debe instalarse en un servidor que tenga los ficheros de grabación montados en su sistema de archivos. Ligado a recordCentral |
| Monitor | Uno por sistema | Portal de monitores de pared de Call Center | VIVAit Suite | Bajo proyecto puede existir más de uno |
| Vivait-Supervisor | Uno por sistema | Portal de monitorización de llamadas del entorno corporativo | VIVAit Call | Bajo proyecto puede existir más de uno |
| Baikal | Uno por sistema | Servidor de calendarios para su uso en diferentes entornos de nimitz | VIVAit Call / VIVAit Suite |
3.1.5.2 Nivel de Administración - Back-end
Se compone principalmente de los siguientes elementos:
- • Servidor: infraestructura donde se alojan las aplicaciones y servicios que exponen APIs (por ejemplo, aplicaciones Java desplegadas en servidores como Apache Tomcat).
- Recibe peticiones web (HTTP), ejecuta el código Java de la aplicación y devuelve la respuesta al cliente (navegador, app, etc.).
- Recibe peticiones web (HTTP), ejecuta el código Java de la aplicación y devuelve la respuesta al cliente (navegador, app, etc.).
- • Clientes: aplicaciones externas (front-end, apps móviles, otros sistemas) que consumen las APIs del back-end.
| Elemento | Instancias | Propósito | Producto | Observaciones |
|---|---|---|---|---|
| Tomcat11 | Uno por sistema | Servidor de aplicaciones web Apache Tomcat especializado en ejecutar aplicaciones desarrolladas en Java. | VIVAit Call / VIVAit Suite | Para proyectos especiales puede existir uno por contexto JAVA |
| cargaClickToCall | Uno por sistema | Inserción en BBDD de la tabla ACD_LISTAS_LLAMAME a través de los parámetros proporcionados | VIVAit Suite | Se invoca desde el portal Vivait-Call |
| cargaContactos | Uno por sistema | Inserción en BBDD de las tablas ACD_CONTACTOS y ACD_CONTACTOS_CAMPANNA a través de los parámetros proporcionados | VIVAit Suite | Se invoca desde el portal Vivait-Call |
| ChatWebService | Uno por sistema | Interface entre el formulario de chat del VivaDesk y el servicio de chansip | VIVAit Suite | Servicio de multicanal texto |
| GeneraConf | Uno por sistema | Sincroniza cambios en algunas tablas de la BBDD con ficheros Asterisk | VIVAit Call / VIVAit Suite | Se invoca desde el portal Vivait-Call |
| generaLlamada | Uno por sistema | Generación de una llamada telefónica a partir de la invocación al servicio | VIVAit Call / VIVAit Suite | Creación de un archivo de llamada Asterisk y puesta en la carpeta outgoing |
| InfoWS | Uno por sistema | Proporciona información de llamadas de la BBDD y gestiona grabaciones | VIVAit Suite | La información de las llamadas puede ser de DBTR o DBHIST. Inicia/finaliza grabaciones y mediante un script se trasladan los archivos de grabación a un directorio de ficheros específico |
| Vivait-FonBO | Uno por sistema | Proporciona información de la agenda e histórico de llamadas | VIVAit Call | Invocado por los portales vivait-user y webfon2 |
| Vivait-Supervisor | Uno por sistema | Obtiene información de la BBDD y ejecuta acciones en el entorno corporativo. | VIVAit Call | Se invoca desde el portal Vivait-Supervisor |
| Tracker-Rest | Uno por sistema | Proporciona información de las llamadas corporativas y los ficheros de audio de las posibles grabaciones asociadas | VIVAit Call | Se invoca desde el portal Tracker-Corp |
| Vivait-Tracker | Uno por sistema | Proporciona información de las llamadas y los ficheros de audio de las posibles grabaciones asociadas. Permite valorar las llamadas |
VIVAit Call / VIVAit Suite | Se invoca desde el portal Vivait-Tracker |
| Vivait-Call | Uno por sistema | Gestiona DBTR. Lee, crea, borra y actualiza los registros en las tablas de nimitz | VIVAit Call / VIVAit Suite | Se invoca desde el portal Vivait-Call |
3.1.6 Nivel de Monitorización
| Elemento | Instancias | Propósito | Producto | Observaciones |
|---|---|---|---|---|
| Servidor Zabbix | Uno por sistema | Monitoriza el estado y el rendimiento del sistema en tiempo real | VIVAit Call / VIVAit Suite | Bajo proyecto puede existir más de uno. Típicamente irá o en BBDD replica o en nodo de gestión en instalaciones grandes |
| Template Zabbix | Uno por sistema | Define qué se va a monitorizar y cómo hacerlo de forma reutilizable | VIVAit Suite | |
| Agente Zabbix | Uno por sistema a monitorizar | Componente que se instala en los equipos que se quieres monitorizar para recoger información directamente del sistema | VIVAit Suite | |
| Script monitorización Zabbix | Uno por sistema | Amplia lo que el sistema puede vigilar, especialmente cuando algo no se puede medir con las opciones estándar | VIVAit Call / VIVAit Suite |
Para más detalles, consultar el apartado Monitorización en VIVAit
3.2 Versiones de módulos
| Módulo | VSuite V.3.1 | VSuite V.3.2 | VSuite V.3.3 | VIVAit V.3.0 (VSuite 3.4 + VCall 3.0) | VIVAit V.3.1 (VSuite 3.5 + VCall 3.1) | VIVAit V.3.2 (VSuite 3.6 + VCall 3.2) | VIVAit V.3.4 (VSuite 3.8 + VCall 3.4) | VIVAit V.3.5 (VSuite 3.9 + VCall 3.5) | VIVAit V.3.6 (VSuite 3.9 + VCall 3.6) | VIVAit V.4.0 (VSuite 3.9 + VCall 4.0) | VIVAit V.5.0 (VSuite 3.9 + VCall 5.0) | VIVAit V.5.1 (VSuite 3.9 + VCall 5.1) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Año de lanzamiento | ---- | ---- | ---- | 2015 | 2016 | 2018 | 2020 | 2021 | 2022 | 2023 | 2025 | 2026 |
| Sistema Operativo | ---- | ---- | ---- | Ubuntu 14.0 LTS | Ubuntu 14.0 LTS | Ubuntu 16.0 LTS | Ubuntu 18.4 LTS | Ubuntu 20.4 LTS | Ubuntu 20.4 LTS | Ubuntu 20.4 LTS | Ubuntu 22.4 LTS nodos ACD y Cisco Debian 12 resto de nodos |
Ubuntu 22.4 LTS nodos ACD y Cisco Debian 13 resto de nodos |
| MySQL (C) | ---- | ---- | ---- | 5.5 | 5.5 | 5.7 | 5.7 | 8.0 | 8.0 | 8.0 | ---- | ---- |
| Mariadb (C) | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | 10.11 | 11.4 |
| Apache Tomcat (C) | ---- | ---- | ---- | ---- | 7 | 8 | 8 | 9 | 9 | 9 | 9 | 11 |
| PHP (C) | ---- | ---- | ---- | 5.6 | 5.6 | 7.0 | 7.0 | 7.4 | 7.4 | 8.2 | 8.4 | 8.4 |
| OpenJDK (C) | ---- | ---- | ---- | ---- | 7.0 | 8.0 | 8.0 | 11.0 | 11.0 | 11.0 | 11.0 | 21.0 |
| Asterisk LTS (*) | 1.4 nodo ACD | 1.4 nodo ACD | 1.4 nodo ACD | 1.4 nodo ACD, 13 resto nodos |
1.4 nodo ACD, 13 resto nodos |
1.4 nodo ACD, 13 resto nodos |
1.4 nodo ACD, 13 resto nodos |
1.4 nodo ACD, 13 resto nodos |
1.4 nodo ACD, 13 resto nodos |
1.4 nodo ACD, 18 resto nodos |
1.4 nodo ACD, 18 resto nodos |
1.4 nodo ACD, 18 resto nodos |
| Asterisk MDTel nodo ACD (VS) |
---- | ---- | ---- | 3.3.1 | 3.4.1 | 3,5,0 | 3.5.3 | 3.5.4 | 3.5.5 | 3.5.5 | 3.5.5 | 3.5.5 |
| Asterisk MDTel nodo Corp Cisco (VC) |
---- | ---- | ---- | 3.3.4 | 3.4.4 | 3.5.1 | 3.5.4 | 3.5.4 | 3.5.4 | 3.5.4 | 3.5.4 | 3.5.4 |
| Asterisk MDTel nodo Corp / GW (VC) |
---- | ---- | ---- | 3.3.4 | 3.4.4 | 3.5.1 | 3.5.4 | 3.5.5 | 3.5.6 | 3.5.6 | 3.6.0 | 3.7.0 |
| BD (C) | 3.2.0 | 3.4.0 | 3.5.0 | 3.6.0 | 3.8.0 | 3.9.0 | 3.11.0 | 3.11.1 | 3.11.2 | 3.11.3 | 3.20.0 | 3.30 |
| CargaContactos (VS) | 3.8.0 | 3.8.0 | 3.8.0 | 3.8.0 | 3.8.0 | 3.8.0 | ||||||
| Dialplan ACD (VS) | 3.5.0 | 3.6.0 | 3.8.1 | 3.8.2 | 3.8.3 | 3.8.4 | 3.9.0 | 3.10.0 | ||||
| Dialplan Corp (C) | 3.3.1 | 3.5.0 | 3.6.0 | 3.8.1 | 3.8.2 | 3.8.3 | 3.8.4 | 3.9.0 | 3.10.0 | |||
| Generaconf (C) | 3.0.0 | 3.0.0 | 3.2.0 | 3.4.0 | 3.5.0 | 3.6.0 | 3.8.0 | 3.8.1 | 3.8.2 | 3.8.3 | 3.9.0 | 3.9.3 |
| Instalador (C) | 3.1.0 | 3.2.0 | 3.3.0 | 3.4.0 | 3.5.0 | 3.6.0 | 3.8.0 | 3.9.0 | 3.10.0 | 3.11.0 | 3.20 | 3.20 |
| Intz-gh (VC) | 0.1.0 | 0.1.1 | 0.1.2 | 0.1.3 | 0.1.4 | 0.1.5 | 0.1.7 | |||||
| Intz-nimitz (C) | 2.6.0 | 3.0.1 | 3.0.3 | 3.4.1 | 3.4.2 | 3.4.4 | 3.5.0 | 3.7.1 | 3.08 | 4.0.0 | 4.0.1 | 4.0.3 |
| Intz-tap (C) | 0.1.0 | |||||||||||
| Janus WebRTC Server (VC) | --- | --- | --- | --- | --- | --- | --- | 0.8.0 | 0.8.0 | 0.8.0 | 0.10.10 | 0.10.10 |
| LazarusComún (VS) | 3.1.0 | 3.2.0 | 3.3.0 | 3.4.0 | 3.5.0 | 3.6.0 | 3.6.1 | 3.6.2 | 3.6.3 | 3.6.4 | ||
| Mcan (VS) | --- | --- | --- | --- | --- | --- | --- | 0.1.5 | 0.1.5 | --- | --- | --- |
| MotorPredi (VS) | --- | --- | --- | --- | --- | --- | 0.1.1 | 0.1.1 | 0.1.1 | ---- | ---- | ---- |
| Motorsal (VS) | 1.4.0 | 3.1.0 | 3.2.0 | 3.3.0 | 3.4.0 | 3.5.3 | 3.6.1 | 3.6.1 | 3.6.3 | 3.6.4 | ||
| Multimonitorweb (VS) | 3.0.1 | 3.0.2 | 3.1.0 | 3.1.0 | 3.2.0 | 3.2.0 | 3.4.1 | 3.4.1 | 3.4.3 | 3.4.4 | ||
| MyACDSuperv (VS) | 5.2.0 | 5.3.0 | 5.3.0 | 5.3.2 | 5.3.2 | 5.3.3 | 6.0.1 | 6.0.3 | 6.0.4 | 6.0.5 | ||
| Phone_prov (C) | ------ | ------ | 3.0.1 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.4 | 3.0.4 | 3.0.4 | 3.0.4 | 3.0.5 | 3.0.5 |
| Portal de administración (C) | 3.1.0 | 3.2.0 | 3.3.0 | 3.4.0 | 3.5.0 | 3.6.0 | 3.8.0 | 3.8.3 | 3.8.5 | 3.8.6 | 4.1.2 | 4.1.3 |
| Portal usuario (VC) | --- | --- | --- | 3.0.0 | 3.1.0 | 4.0.0 | 4.1.0 | 4.1.0 | 4.1.1 | 4.1.2 | ---- | ---- |
| Nuevo portal usuario (VC) | --- | --- | --- | --- | --- | --- | --- | 1.0.0 | 1.0.1 | 1.0.2 | 2.0.10 | 2.3.1 |
| Portal webfon (VC) | --- | --- | --- | --- | --- | --- | --- | 1.0.0 | 1.0.1 | 1.0.2 | 2.0.10 | 2.3.1 |
| FonBo (VC) | ------ | ------ | ------ | ----- | ----- | ----- | ----- | 1.0.0 | 1.0.1 | 1.0.1 | 1.0.1 | 2.0.5 |
| Preview (VS) | 1.0.18 | 3.2.0 | 3.3.0 | 3.4.0 | 3.5.0 | 3.5.0 | --- | --- | --- | --- | ---- | ---- |
| recordCentral (C) | ----- | ----- | ----- | 4.0.0 | 4.0.1 | 4.0.2 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.4 | 4.0.4 | 4.0.4 |
| recordgwd (C) | 1.3.0 | 1.3.0 | 3.1.0 | ----- | ----- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| recordNodo (C) | ----- | ----- | ----- | 4.0.0 | 4.0.0 | 4.0.0 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.3 | 4.0.3 | |
| recordprocesad (C) | 1.2.0 | 1.2.0 | 3.0.0 | ----- | ----- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| Sercen (C) | 0.03.01 | 0.03. | 0.03.05 | 0.4.2 | ||||||||
| Supervisor Web (VS) | 1.0.0 | 1.0.0 | 1.1.0 | 1.1.1 | 1.2.0 | 2.0.2 | ||||||
| Tracker Web (C) | 3.0.2 | 3.1.0 | 3.2.0 | 3.3.0 | 3.4.0 | 3.5.0 | 3.7.0 | 3.7.1 | 3.7.3 | 3.7.8 | 3.8.0 | |
| Tracker Corporativo (C) | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | 0.1.0 |
| Tracker windows (C) | 3.0.0 | 3.1.0 | 3.2.0 | 3.3.0 | 3.4.0 | 3.4.0 | ---- | ---- | ---- | ---- | ---- | ---- |
| VIVA designer (VS) | 1.0.23 | 3.0.1 | 3.1.0 | 3.1.0 | 3.2.0 | 3.2.0 | ---- | ---- | ---- | ---- | ---- | ---- |
| VIVA desk (VS) | 3.0.2 | 3.2.0 | 3.3.0 | 3.4.0 | 3.5.0 | 3.5.2 | 3.5.3 | 3.6.1 | 3.6.6 | 3.6.6 | 3.6.6 | |
| VIVAit Call Business IOS (VC) | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 2.1.6 | 3.17.3 |
| VIVAit Call Business Androit (VC) | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 2.1.6 | 3.0.17 |
| VIVAit Call Celullar | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 1.0.1 | |
| VIVAit Call Cloud (VC) | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---- |
| VIVA report (VS) | 1.2.0 | 3.1.0 | 3.2.0 | 3.2.2 | 3.3.0 | 3.4.1 | 3.5.1 | 3.5.2 | 3.5.3 | 3.5.4 | ||
| VIVA supervisor (VS) | 3.0.0 | 3.1.0 | 3.2.0 | 3.3.0 | 3.4.0 | 3.6.1 | 3.8.0 | 3.8.1 | 3.8.2 | 3.8.3 | ||
| vivait-cti (VS) | 3.0.0 | 3.0.1 | 3.0.1 | 3.0.1 | 3.0.2 | 3.0.2 | 4.0.1 | 4.0.1 | 4.0.1 | 4.0.1 | 4.0.1 | 4.0.1 |
| WebRTC (VC) | ----- | ----- | ----- | ----- | ----- | ----- | ----- | 0.0.1 | 0.0.6 | 0.0.7 | 0.0.9 | 0.0.10 |
| Vivait-direc (VC) | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | 0.0.8 |
La distribución de los módulos software por tipo de nodo se documentan en los procesos de instalación.
Se puede consultar un ejemplo de un entrorno virualizado en el siguiente enlace Instalación VIVAit 3.5
(C): Módulo común
(VC): Módulo de VIVAit Call
(VS): Módulo de VIVAit Suite
(*) La información sobre las versiones disponibles de Asterisk se puede encontrar en Versiones de Asterisk
3.3 Sistema Operativo
En la plataforma VIVAit se utiliza el sistema operativo Linux, con dos distribuciones según la versión del proyecto:
- • Hasta la versión 4.0 y para proyectos especiales de VIVAit, se emplea Ubuntu Server LTS.
- • A partir de la versión 5.0 de VIVAit, se utiliza por defecto Debian LTS.
3.3.1 Sistema Operativo Ubuntu
El sistema operativo de la plataforma VIVAit, hasta la versión 4.0, se basa en Ubuntu Server LTS.
Estas versiones cuentan con soporte a largo plazo (LTS), lo que las hace más estables y con actualizaciones controladas desde Ubuntu 14.04.1.
En concreto, el sistema operativo utilizado enVIVAit es Ubuntu Server 22.04 LTS.
Para más información visitar Ubuntu Server.
3.3.2 Sistema Operativo Debian
El sistema operativo de la plataforma VIVAit, desde la versión 4.0, se basa en Debain LTS.
En concreto, el sistema operativo utilizado en VIVAit es la versión número Debian 13, de nombre Trixie con soporte a largo plazo LTS.
Estas versiones cuentan con soporte a largo plazo (LTS), lo que las hace más estables y con actualizaciones controladas.
Para más información Debian “trixie”.
3.4 Matriz de conmutación
La matriz de conmutación en la plataforma VIVAit se plantea con tres núcleos de conmutación diferentes:
- * Nodos ACD: el núcleo de conmutación es Asterisk 1.4 RSP
- * Nodos corporativo Cisco: el núcleo de conmutación es Asterisk 18 versión certified
- * Nodos corporativos / GW: el núcleo de conmutación es Asterisk 18 versión certified
Sobre este núcleo constituido por Asterisk LTS se realizan las modificaciones necesarias para implementar la plataforma VIVAit conformando Asterisk MDTel.
Estas modificaciones se estructuran en dos apartados:
- • Asterisk MDTel, añadiendo y modificando ficheros en la instalación realizada.
- • Dialplan VIVAit, ficheros que modulan el comportamiento de Asterisk antes eventos externos.
3.4.1 Asterisk MDTel
Sobre el software Asterisk LTS instalado se realizan modificaciones para implementar las funcionalidades de conmutación de VIVAit.
Estas modificaciones se llevan a cabo mediante dos acciones complementarias, dando lugar al Asterisk MDTel.
Los ficheros copiados son el código fuente que es necesario compilar e instalar.
3.4.1.1 Flujo de compilación e instalación de app en Asterisk
Dentro del flujo habitual:
se seguirá el siguiente proceso operativo:
Paso 1: Edición del código fuente, colocado en el entorno de desarrollo. Por ejemplo para la app: app_mdintz.c, se podría usar:
#cat /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/apps/app_mdintz.c
- o
#nano /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/apps/app_mdintz.c
Paso 2: Compilación del código fuente generando el binario utilizable por Asterisk
app_mdintz.c → app_mdintz.o → app_mdintz.so
Para ello se utiliza el comando del sistema operativo
#make
dentro de su contexto (directorio adecuado, controlado por el fichero Makefile, ...)
- solo se compilan los ficheros .c, el restos de ficheros son auxiares y se utilizan en la compilación:
- .h (headers) apoyan a los .c (definiciones, funciones, macros, estructuras)
- .in plantillas usadas en compilación
Paso 3: instalación en Asterisk
#cp app_mdintz.so /usr/lib/asterisk/modules/
o más completo
#make install
dentro de su contexto (directorio adecuado, controlado por el fichero Makefile, ...)
Paso 4: Recargar en Asterisk. Se puede utilizar:
#module reload app_mdintz.so
pero es más efectivo:
#systemctl stop asterisk
#systemctl start asterisk
Este es el archivo activo que Asterisk carga en tiempo de ejecución.
3.4.1.2 Archivos añadidos por MDtel
Se copia el código fuente en el entorno de desarrollo y se sigue el procedimiento visto más arriba
/usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4
y en diferentes subdirectorios, los archivos añadidos son los siguientes:
/apps/app_ucid.c /apps/app_cli.c /apps/app_crash.c /apps/app_crash.exports.in /apps/app_mdintz.c /apps/app_mdintz.exports.in /apps/pqcti /apps/app_md_pqcti.c
/channels/chan_mdtap.c
/configs/samples/MDcrash.conf
/include/asterisk/mdintz.h /include/asterisk/ucid.h /include/asterisk/mdcrash.h /include/asterisk/mdgh.h
/res/res_mdcal.c /res/res_mdgh.exports.in /res/res_mdgh.c
La funcionalidad que aporta cada uno de ellos se puede consultar visualizando la cabecera de los mismos.
Ejemplo:
root@srv-vivaitcall-01:/usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/apps# cat app_ucid.c /* * Asterisk -- An open source telephony toolkit. * * Copyright (C) 2011 MDtel * * See http://www.asterisk.org for more information about * the Asterisk project. Please do not directly contact * any of the maintainers of this project for assistance; * the project provides a web site, mailing lists and IRC * channels for your use. * * This program is free software, distributed under the terms of * the GNU General Public License Version 2. See the LICENSE file * at the top of the source tree. */ /*! \file * * \brief Aplicacion para generar UCID * * \author MDtel * * \ingroup applications */ #include "asterisk.h"
3.4.1.3 Archivos modificados por MDTel
Se copia el código fuente en el entorno de desarrollo y se sigue el procedimiento visto más arriba
/usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4
y en diferentes subdirectorios, los archivos modificados son los siguientes:
/apps/app_mixmonitor.c /apps/app_chanspy.c /apps/app_setoptions.c /apps/app_confbridge.c
/cdr/cdr-csv.c
/channels/sig_pri.c /channels/chan_sip.c /channels/chan_dahdi.c /channels/sip/dialplan_functions.c
/contrib/scripts/safe_asterisk /contrib/init.d/rc.debian.asterisk /contrib/init.d/etc_default_asterisk
/include/asterisk/audiohook.h
/main/audiohook.c /main/asterisk.c /main/pbx.c /main/manager.c /res/res_mdcal.c /res/res_calendar_caldav.c
3.4.1.4 Ficheros significativos de Asterisk MDTel
A continuación se documentan algunos de los ficheros gestionados en los puntos anteriores.
/main/audiohook.c
Modificado para solucionar un crash de asterisk al utilizar en el mixmonitor las opciónes r y t
/apps/app_crash.c
Esta nueva aplicación es sólo compatible a partir de Asterisk 13.
La documentación de la misma se encuentra en el comando CLI de Asterisk:
>core show application Crash
Esta nueva aplicación permite añadir al plan de pruebas:
- * Generación de una parada de asterisk. (Crash(IwantToGetAnAccessViolation) ó Crash(IwantToGetADoubleFreeMem))
- * Verificación de su impacto. Por ejemplo, no deben cortarse las llamadas en curso, si así está previsto por la topología.
- * Correcta generación de los "core", comprobando que funciona "backtrace" (bt).
| Herramienta de laboratorio. No debería estar presente en una instalación en producción. |
/apps/app_mdintz.c - /include/asterisk/mdintz.h
Esta aplicación sirve como interfaz a entornos (funcionalidades) creados por MDTel.
Está orientada al proceso de enrutamiento a implementar en intz-nimitz.
Para mas información consultar la página de MDintz.
El archivo es casi igual para toda las versiones de Asterisk utilizadas (1.4, 13, 18, ...).
Cuando se compila a partir de Asterisk 13, es necesario comentar la línea #define ASTERISK_OLD//#define ASTERISK_OLD. |
Los cambios implementados son:
- * Unificación de código entre las versiones de asterisk
- * Nuevo comando "qry"
- * Posible resolución de "Mal write" en intz-nimitz (a verificar)
El formato del nuevo comando es:
mdintz qry <nHostFijo> <entorno> <servicio> <par1>...<parN>
Permite interrogar a un servidor de igual modo que hace el dialplan para fines de diagnóstico.
La única diferencia es que se ha añadido el parámetro "nHostFijo" que puede tomar como valor: "*" (invoca interrogación secuencial a todos los servidores definidos,
igual a la funcionalidad del dialplan) ó de "0" a "3" (invoca un interrogación dirigida el host indicado como hostN, y sólo a él, en archivo de configuración).
/contrib/init.d/rc.debian.asterisk
Cambiado por el modificado por MDtel.
El fichero:
/usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/contrib/init.d/rc.debian.asterisk
es un script de inicio de Asterisk para sistemas Debian antiguos basados en SysVinit.
Sirve para:
- - Arrancar Asterisk automáticamente,
- - Detenerlo,
- - Reiniciarlo,
- - Comprobar estado.
Usos típicos
root@srv-vivaitcall-01:~#service asterisk start/status/stop/restart
/contrib/scripts/safe_asterisk
Cambiado por el modificado por MDtel
Del directorio de desarrollo:
/usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/contrib/scripts/
es un script diseñado para monitorizar Asterisk y levantarlo automáticamente si se cae. La lógica del scrips funciona así:
- - Lanza Asterisk en primer plano ejecuta el comando real (el binario que sí está compilado) usando la ruta
/usr/sbin/asterisk -f.
- - Se queda escuchando por si Asterisk se llega a colgar o se cierra inesperadamente con un error (EXITSTATUS diferente a 0), el script lo detecta.
- - Guarda un reporte del fallo generando un archivo de volcado de memoria en la carpeta /tmp con la fecha y hora exacta del fallo para que puedas investigar qué pasó.
- - Reinica el servicio, levantando la centralita automáticamente sin que la necesidad de que un técnico intervenga.
Después de la instalación aparece en:
/usr/sbin/safe_asterisk
En este archivo se ha modificado MAXFILES=32768
Archivos de audio mp3
Añadiir la capeta mp3/ al directorio addons/
/usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/addons/
Esta permite la reproducción desde el diaplan de los mensajes en mp3.
Es necesario que Asterisk descargue el soporte de MP3 y se ejecuta el menú make menuselect.
El procedimiento sería:
Paso 1: entrar a la carpeta de fuentes:
#cd /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/
Paso 2: descargar el soporte MP3:
#./contrib/scripts/get_mp3_source.sh
Paso 3: lanzar el menú:
#make menuselect
donde se modifican la opción:
- - en la sección Add-ons marcar [*] format_mp3.
- - guardar y salir.
Paso 4: compilar e instalar los nuevos módulos:
#make #make insstall
Paso 5: gestionar la app el reproductor externo mpg123 para música en espera:
- comprobar si está instalado:
#mpg123 --version
- si no está instalado, instalar:
#apt install mpg123
Paso 6: reinciar Asterisk para que asuma las modificaciones
#systemctl stop asterisk #systemctl start asterisk #systemctl status asterisk
Paso 7: comprobar resultados, en la consola Asterisk:
>core show file formats
sig_pri.c
Modificado para enviar/recibir el ucid en un E1 conectado a una tarjeta DAHDI con señalización PRI y QSIG.
Para que se envié el ucid es necesario habilitar el envío de facilidades en
/etc/asterisk/chan_dahdi.conf
/usr/src/MDtel/DialPlan/chan_dahdi.conf
modificando
facilityenable = yes
| El concepto UCID solo tiene sentido dentro del entorno VIVAit. Por ello, esta modificación se aplica cuando dos sistemas VIVAit están conectados mediante un enlace QSIG, |
/etc/init.d/asterisk
La modificación realizada en este fichero ha sido la siguiente:
|
SAFE_ASTEISK=/usr/sbin/safe_asterisk |
/etc/default/asterisk
La finalidad de la modificación de este fichero es poder correr como usuario Asterisk, grupo asterisk y generar cores (descomentar línea).
Las modificaciones realizadas han sido:
|
#//!! jac |
/apps/app_cli.c
La función CLI de Asterisk permite ejecutar desde el dialplan un comando de línea de consola.
Sus principales uso en la actualidad son:
- Lanzar los mensajes notify que los teléfonos necesitan para el reaprovisionamiento desde el portal de administración
- Ejecutar los mensajes notify de reincio invocados desde la facilidad de movilidad de usuario.
Básicamente ejecuta un comando y devuelve su salida. Utiliza un archivo intermedio que puede ser:
- * /dev/null si el campo se deja vacío, por tanto, no se puede recuperar la salida.
- * TEMP, en cuyo caso se crea un archivo temporal que se borra antes de finalizar la ejecución de la función.
- * Un nombre de fichero que es responsabilidad del dialplan el borrarlo cuando proceda.
Para instalarlo basta copiar app_cli.c en el directorio "apps" de los fuentes
/usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/apps/
luego compilar e instalar:
#make #make install
La información de la función CLI se puede obtenr desde la consola de Asterisk:
3.4.2 Dialplan VIVAit
El Dialplan podría considerarse la columna vertebral del sistema Asterisk.
Es una colección ordenada de acciones que se llevan a cabo cuando un usuario marca una serie de números. Hace la función de una tabla de enrutamiento de llamadas.
Todas las configuraciones generales de Asterisk están accesibles en la ruta /etc/asterisk
CONCEPTOS BÁSICOS
♦ EXTENSIONES
Una extensión es una marcación en el teclado de un teléfono. Dicha configuración podemos encontrarla en el archivo extensions.conf
Por ejemplo, un usuario podría marcar “3001” en su teléfono, y eso sería una extensión. También podría marcar un número de teléfono nacional, como por ejemplo “915881000”, y también sería una extensión.
En Asterisk pueden definirse también extensiones como texto, por tanto no debemos relacionar las extensiones únicamente con números.
Algunas reglas que sería interesante conocer serían las siguientes:
| Regla | Descripción |
|---|---|
| X | Cualquier cifra de 0 a 9 |
| Z | Cualquier cifra de 1 a 9 |
| N | Cualquier cifra de 2 a 9 |
| [x-y] | Cualquier cifra de "x" a "y" |
| [xyz] | Las cifras "x", "y" o "z" |
| . | Una o más repeticiones del símbolo anterior |
| ! | Cero o más repeticiones del símbolo anterior |
Estas reglas son necesarias a la hora de definir por ejemplo todos los números de teléfono posibles en España
♦ PRIORIDADES
En lenguaje scripting, las acciones se van ejecutando de arriba a abajo en orden. En cambio, en Asterisk, el orden en el que se ejecutan las acciones es el indicado mediante números. Primero se ejecutará la acción 1, luego la 2...así sucesivamente.
Es decir no basta con definir las acciones que se llevarán a cabo, también debemos indicar el orden en el que se llevarán a cabo.
♦ CONTEXTOS
Es mecanismo que nos permite variar el comportamiento del sistema en función del número que se marque. Su misión es aumentar la seguridad del sistema ofreciendo servicios diferenciados en función del usuario.
La sintaxis típica es el nombre del contexto englobado entre corchetes [nombre_contexto]. Si un dispositivo no tiene un contexto definido se redirige directamente al contexto por defecto.
Los ficheros que conforman el Dialplan se clasifican en:
- Generales
- Particulares
- Web
| Fichero | Función |
|---|---|
| Generales | Se encuentran los ficheros de propios de MDtel y Asterisk. Es importante remarcar que estos ficheros NO pueden ser modificados por el usuario. |
| Particular | Estos ficheros son los únicos que puede modificar el usuario |
| Web | Se encierran aquí los archivos generados automáticamente por la plataforma, a través del portal |
En función del nodo en el que estemos trabajando, encontraremos dos tipos de dialplan:
* Dialplan ACD --> Dialplan que aplica a nodos ACD
* Dialplan corporativa --> Dialplan que aplica a nodos de corporativa o gateways (ya sean de corporativa o ACD)
A continuación se muestran las tablas con los ficheros correspondientes a cada Dialplan.
| GENERALES | PARTICULARES | WEB |
| ext_Grabaciones.conf ext_InicioLlamada.conf ext_InicioLlamada_Dahdi.conf ext_InicioLlamada_ExtSIP.conf ext_InicioLlamada_TrunkSIP.conf ext_MARCAR_ColaCentralita.conf ext_MARCAR_ColaCentralita_Dial.conf ext_MARCAR_Cola.conf ext_MARCAR_Cola_Dial.conf ext_MARCAR.conf ext_MARCAR_DejarMensaje.conf ext_MARCAR_DejarMensaje_Dial.conf ext_MARCAR_Extension.conf ext_MARCAR_Extension_Dial.conf ext_MARCAR_Externo.conf ext_MARCAR_Externo_Dial.conf ext_MARCAR_Facilidad.conf ext_MARCAR_Facilidad_Dial.conf ext_MARCAR_Facilidad_nimitz.conf ext_MARCAR_Interno.conf ext_MARCAR_LeerMensaje.conf ext_MARCAR_LeerMensaje_Dial.conf ext_MARCAR_Nodo.conf ext_MARCAR_Nodo_Dial.conf ext_MARCAR_SalasConf.conf ext_MARCAR_SalasConf_Dial.conf ext_MARCAR_Servicios.conf ext_MARCAR_VDN.conf MARCAR_VDN_Dial.conf ext_MDtel.conf ext_MDtel_Var.conf ext_Subrutinas_AnchoBanda.conf ext_Subrutinas_BD.conf ext_Subrutinas_BD_Facilidad.conf ext_Subrutinas_BD_Facilidad.conf ext_Subrutinas_Colas.conf ext_Subrutinas.conf ext_Subrutinas_Enrutamiento.conf ext_Subrutinas_finLlamada.conf ext_Subrutinas_Grabacion.conf ext_Subrutinas_nimitz.conf ext_Subrutinas_Varias.conf ext_Subscribe.conf ext_Transfer.conf ext_Transfer_ExtSIP.conf ext_Transfer_TrunkInternos.conf ext_TrunkInternos.conf ext_TrunkInternos_Dial.conf sip_Estatico.conf sip_GENCUST.conf sip_notify.conf queues.conf queues_GENERAL.conf queues_PLANTILLACOLAS.conf |
ext_Enrutador_Particular.conf ext_InicioLlamada_Dahdi_Particular.conf ext_InicioLlamada_ExtSIP_Particular.conf ext_InicioLlamada_Particular.conf ext_InicioLlamada_TrunkSIP_Particular.conf ext_MARCAR_Extension_Particular.conf ext_MARCAR_Externo_Particular.conf ext_MARCAR_Facilidad_Particular.conf ext_MARCAR_VDN_Particular.conf ext_MDtel_Particular.conf ext_TrunkInternos_Particular.conf |
asterisk_WEB.conf ext_MDtel_WEB.conf sip_trunkExt_WEB.conf sip_trunkInt_WEB.conf sip_trunk_WEB.conf sip_WEB.conf queues_WEB.conf |
| GENERALES | PARTICULARES | WEB | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ext_Enrutador.conf ext_Grabaciones.conf ext_InicioLlamada.conf ext_InicioLlamada_CTI.conf ext_InicioLlamada_Dahdi.conf ext_InicioLlamada_ExtSIP.conf ext_InicioLlamada_Marcador.conf ext_InicioLlamada_TrunkSIP.conf ext_MARCAR_ColaCentralita.conf ext_MARCAR_ColaCentralita_Dial.conf ext_MARCAR_Cola.conf ext_MARCAR_Cola_Dial.conf ext_MARCAR.conf ext_MARCAR_DejarMensaje.conf ext_MARCAR_DejarMensaje_Dial.conf ext_MARCAR_Extension.conf ext_MARCAR_Extension_Dial.conf ext_MARCAR_Externo.conf ext_MARCAR_Externo_Dial.conf ext_MARCAR_Facilidad.conf ext_MARCAR_Facilidad_Dial.conf ext_MARCAR_Facilidad_nimitz.conf ext_MARCAR_LeerMensaje.conf ext_MARCAR_LeerMensaje_Dial.conf ext_MARCAR_Nodo.conf ext_MARCAR_Nodo_Dial.conf ext_MARCAR_SalasConf.conf ext_MARCAR_SalasConf_Dial.conf ext_MARCAR_Servicios.conf ext_MARCAR_VDN.conf ext_MARCAR_VDN_Dial.conf ext_MDtel.conf ext_MDtel_Var.conf ext_Subrutinas_AnchoBanda.conf ext_Subrutinas_BD.conf ext_Subrutinas_BD_Facilidad.conf ext_Subrutinas_Colas.conf ext_Subrutinas.conf ext_Subrutinas_Enrutamiento.conf ext_Subrutinas_finLlamada.conf ext_Subrutinas_Grabacion.conf ext_Subrutinas_nimitz.conf ext_Subrutinas_Varias.conf ext_Subscribe.conf ext_Transfer.conf ext_Transfer_ExtSIP.conf ext_Transfer_TrunkInternos.conf ext_TrunkInternos.conf ext_TrunkInternos_Dial.conf queues_GENERAL.conf queues_PLANTILLACOLAS.conf sip_GENCUST.conf sip_GENERAL.conf sip_notify.conf sip_PLANTILLAEXT.conf sip_supervision.conf
|
ext_Enrutador_Particular.conf ext_InicioLlamada_CTI_Particular.conf ext_InicioLlamada_Dahdi_Particular.conf ext_InicioLlamada_ExtSIP_Particular.conf ext_InicioLlamada_Marcador_Particular.conf ext_InicioLlamada_Particular.conf. ext_InicioLlamada_TrunkSIP_Particular.conf ext_MARCAR_Externo_Particular.conf ext_MARCAR_Facilidad_Particular.conf ext_MARCAR_VDN_Particular.conf ext_MDtel_Particular.conf ext_TrunkInternos_Particular.conf |
asterisk_WEB.conf ext_MARCAR_VDN_WEB_9000.conf
3.5 Bases de datos (BBDD)
3.5.1 BBDD Tiempo RealEn la base de datos de tiempo real insertan información todos los procesos del sistema, y se realizan los cambios en configuración utilizando como herramienta el portal de administración y VIVAit Supervisor De la base de datos de tiempo real leen los procesos que requieren información, y las aplicaciones:
El portal de administración se encarga de escribir las configuraciones añadidas o modificadas en la base de datos Para cuando la BDTR contienen un número masivo de datos, existe un script que borra el contenido de ciertas tablas de la BD (tablas DAT_) dejando solamente datos de un cierto número de días configurable. Este script se llama borraRegistrosNimitz.pl; para más información consultar el apartado de Howto's. Por defecto, a partir de la versión 3.2.0 de la plataforma, los registros se mantedrán 2 meses. 3.5.2 BBDD RéplicaA efectos de asegurar las prestaciones del sistema, se establece una réplica de la base de datos, sincronizada con la de tiempo real; los procesos y aplicaciones pesados, que realicen consultas a las base de datos que puedan comprometer las prestaciones del sistema atacan a la réplica y nunca a la base de datos de tiempo real Es posible que en instalaciones pequeñas no exista réplica, en cuyo caso se establece una base de datos unificada sobre la de tiempo real, en la que se añaden índices y procedimientos almacenados que típicamente residen en la de réplica. Es posible establecer tantas réplicas como sean necesarias si diferentes procesos pesados se penalizan en exceso, si bien una implantación tipo contemplará una sola Algunos procesos que utilizan la base de datos de réplica son:
3.5.3 BBDD de copiaA efectos de asegurar el funcionamiento y como medida de contingencia ante un problema puntual de comunicación con la BD de tiempo real, en cada nodo disponemos de una BD de copia local. Posiblemente de un tamaño menor que la BD de tiempo real, dependiendo de cuanto tiempo pase hasta la próxima sincronización con la base de tiempo real.Esta base de datos llamada nimitzCopia. Solo entrara en funcionamiento,cuando se produzca el problema mencionado, dejando acceder a los datos y poder dar servicio a la empresa mientras se soluciona el problema. 3.5.3.1 Backup y restoreSe utilizan dos script, para realizar la copia de seguridad y restaurar en la base de datos de copia local que son:
En caso de producirse algún error en alguno de los procesos, marcarán dicho error en el log con una línea que comienza con la cadena "*ERROR". 3.5.4 Diagnósticos y operaciones sobre bases de datos3.5.4.1 Comprobación que una base de datos está arrancadaPara comprobar si la base de datos está arrancada debemos poner en el terminal : ps aux | grep mysql Si la base de datos está arrancada y funcionando correctamente se nos mostrará en el terminal: Por el contrario, si la base de datos presenta algun problema el mensaje mostrado será: 3.5.4.2 Comprobación que la base de datos de réplica está sincronizada con la base de datos de tiempo real.Si se necesita verificar que la base de réplica está sincronizada con la base de datos en tiempo real basta con acudir al comando : show slave status\G. Una vez introducido veremos: Comandos importantes, desde dentro consola de Mysql: show master status: Realizado desde el master show slave status: Realizado desde el esclavo; el valor "seconds behind master" nos indica cuanto está retrasada la réplica con respecto a la base de datos de tiempo real. Si el valor de este campo es elevado nos indicará que la base de datos real con la réplica no estará sincronizada, por tanto, nos interesa que este valor sea lo más pequeño posible. 3.6 Procesos propios VIVAit
3.6.1 bdCentralEl proceso bdCentral.sh es el encargado de realizar la copia de seguridad. Tiene un archivo de configuración bdCentral.conf el cual puede encontrarse en la ruta /etc/MDtel/bdCentral.conf. En este archivo hay un parámetro (IGNORE_TABLAS) que indica las tablas de las que NO se realizará copia de seguridad. Toda tabla que no se indique formará parte de la copia de seguridad. Vuelca los resultados en /var/log/bdCentral.log En caso de producirse algún error, se marcará dicho error en el log con una línea que comienza con la cadena "*ERROR". Para ejecutar bdCentral: bdCentral.sh /etc/MDtel/bdCentral.conf Estos procesos se ejecutan automáticamente. Para ello está copiado el fichero bdCentral a /etc/cron.d. Por defecto la programación vienen comentada por lo que será necesario activarlo. Para que se roten los logs hay que copiar el fichero bdCentral.logrotate a /etc/logrotate.d (como bdCentral) La ruta donde se encuentran los logs es la siguiente: /var/log/myAcdSuperv.log Fichero de configuación: ARCH_LOG=/var/log/bdCentral.log BDHOST=localhost BDUSU=adminNimitz BDCLAVE=imdtelnimitz BDRUTA=/var/lib/MDtel/backupBDnimitz IGNORE_TABLAS=(nimitz.DAT_ACD_RASTREO nimitz.DAT_ACUMULADOS_AGENTES nimitz.DAT_ACUMULADOS_AGENTES_COLAS nimitz.DAT_ACUMULADOS_AGENTES_PAUSAS nimitz.DAT_ACUMULADOS_AGENTES_VDN nimitz.DAT_ACUMULADOS_COLAS nimitz.DAT_ACUMULADOS_VDN nimitz.DAT_ACUMULADOS_VDN_COLAS nimitz.DAT_CONTACTOS_PREPARADOS nimitz.DAT_IVR_INTERACCIONES nimitz.DAT_IVR_NODOS nimitz.DAT_IVR_PAGOS_TARJETA nimitz.DAT_IVR_RESULT_ENCUESTAS nimitz.DAT_LLAMADAS nimitz.DAT_LOG nimitz.DAT_MUESTRAS_COLAS nimitz.DAT_SEGMENTOS nimitz.DAT_SESIONES_AGENTES nimitz.DAT_SESIONES_AGENTES_COLAS nimitz.DAT_SESIONES_AGENTES_PAUSAS nimitz.DAT_SESIONES_AGENTES_VDN nimitz.DAT_SINCRONIZA nimitz.DAT_TR_ACD_EXTENSIONES nimitz.DAT_TR_ACD_EXTEN_COLA nimitz.DAT_TR_COLAS nimitz.DAT_VALORACIONES nimitz.DAT_ACD_RASTREO nimitz.DAT_ACUMULADOS_AGENTES_COLAS nimitz.DAT_ACUMULADOS_AGENTES_PAUSAS nimitz.DAT_ACUMULADOS_AGENTES_VDN nimitz.DAT_ACUMULADOS_COLAS nimitz.DAT_ACUMULADOS_VDN nimitz.DAT_LLAMADAS nimitz.DAT_MUESTRAS_COLAS nimitz.DAT_SEGMENTOS nimitz.DAT_SESIONES_AGENTES nimitz.DAT_SESIONES_AGENTES_COLAS nimitz.DAT_SESIONES_AGENTES_PAUSAS nimitz.DAT_SESIONES_AGENTES_VDN nimitz.DAT_TR_ACD_EXTENSIONES nimitz.DAT_TR_ACD_EXTEN_COLA nimitz.DAT_TR_COLAS nimitz.DAT_VALORACIONES)
3.6.2 bdNodoEl proceso bdNodo.sh es el encargado de descargar la copia de seguridad y restaurarla en local. Tiene un archivo de configuración bdNodo.conf, este archivo puede encontrarse en la ruta /etc/MDtel/bdNodo.conf. Vuelca los resultados en /var/log/bdNodo.log. El fichero de backup se copia mediante el usuario sincroniza, que deberá poder acceder sin contraseña al servidor donde reside la copia. En caso de producirse algún error, se marcará dicho error en el log con una línea que comienza con la cadena "*ERROR". Para ejecutar bdNodo: bdNodo.sh /etc/MDtel/bdNodo.conf Estos procesos se ejecutan automáticamente. Para ello está copiado el fichero bdNodo a /etc/cron.d. Por defecto la programación vienen comentada por lo que será necesario activarlo. Para que se roten los logs hay que copiar el fichero bdNodo.logrotate a /etc/logrotate.d (como bdNodo) 3.6.3 Intz-NimitzPermite integrar procesos de asterisk (del dialplan) con la base de datos; por ejemplo es el que graba segmentos, inspecciona donde está registrado un agente…etc. La estabilidad de este proceso es importante para el funcionamiento del sistema, si bien las llamadas entran en caso de no estar disponible.
Desde un SSH ejecuta el comando “nc ip_maquina 1115” root@vivait-acd:~# nc localhost 1115 intz-nimitz sis ver='V02.6' inic='20140401 110116' alarmas=21 ultAlar='20140414 171244' intz-nimitz gmp msj=942/1024 buf=1024/1024 tarea=16/102 intz-nimitz tmp uptime=1816550 (21d 0h 35m 50s) intz-nimitz vic identif='cms1' entorno='nimitz' conx=0/128 numConx=1018(0) intz-nimitz mys curro=80/0/0/0 soli=1012(0) soliErr=6(0) soliEncol=0(0/0) intz-nimitz cache colas=128/10/0/0 vdn=128/8/0/0 usuExten=10/0/0/0
Como complemento a los diagnósticos:
Fichero de configuración: #
# Los nombres no pueden tener numeros
# Si el valor de una cadena contiene espacios, se pondra entre comillas dobles
# Los valores comentados indican valores por defecto
base
{
cfg
{
soy_demonio = 1
hay_syslog = 0
# Archivo con identificador de proceso: (-: /var/run/intz-nimitz.pid)
archivo_pid = -
# Archivo_traza: (-: stdout o /var/log/intz-nimitz.log si soy_demonio)
# No se usa si se activa hay_syslog
archivo_traza = -
}
cfg_recarga
{
# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
nivel_traza = 3
pruebas = 1
hay_flush_traza = 1
}
sis
{
# No se usa. No modificar
subsistema = 0
}
gmp
{
# Numero de mensajes. No modificar
num_msj = 1024
# Numero de buffer. No modificar
num_buf = 1024
}
}
supervision
{
puerto_escucha = 1115
}
supervision_recarga
{
to_periodo = 60
}
cache
{
hay_cache = 1
}
cache_recarga
{
# to_vida = 0, no se almacenan entradas. to_vida > 0 en segundos
colas_to_vida = 300
colas_num_entrada = 128
vdn_to_vida = 300
vdn_num_entrada = 128
}
regexp
{
hay_regexp = 1
}
regexp_recarga
{
num_entradas = 32
inc_entradas = 128
max_entradas = 1024
}
vivaitcall
{
hay_vic = 1
puerto_escucha = 5555
identif = cms1
entorno = nimitz
max_conx = 128
}
vivaitcall_recarga
{
to_solicitud = 3
to_desconexion = 3
ip_valida
{
# Hasta 32 bloques de direcciones validas
todas
{
ip = 0.0.0.0
msk = 0.0.0.0
}
localhost
{
ip = 127.0.0.1
msk = 255.255.255.255
}
}
}
enrutamiento
{
hay_enrutamiento = 1
max_pre_ruta_regs = 4
max_ruta = 4
max_ruta_desvios = 2
# Filtro de informacion de ancho de banda
# MYSDanchoBandaPasoNinguno 0
# MYSDanchoBandaPasoSoloDirectos 1
# MYSDanchoBandaPasoSoloEnPaso 2
# MYSDanchoBandaPasoTodos 3
filtro_ancho_banda = 1
}
mysql
{
hay_mysql = 1
host = BDTR
usuario = nimitz
clave = phikau3iwCe4O0PP5b09ng==
base_datos = nimitz
bd_supervivencia = 0
num_curro = 10
}
mysql_recarga
{
to_resp = 5
}
3.6.3.1 Nuevo servicio en intz-nimitz 04.00.00Para las colas con extensiones multiterminal, se ha creado un ha creado un nuevo servicio en intz-nimitz 04.00.00. La descripción de nuevo servicio es: multiTermGrupoSaltoRing
. Devuelve la mascara con los terminales que tienen que sonar (ring) al estar la extension en una cola (queue, ringall).
. par1 (extension)
. Retornos posibles (ademas del los genericos) en ${MDintzRes}:
.. OK: Todo correcto.
.. KO: Ha habido un problema.
. Retorno en MTERM (solo si OK): mascara con los terminales y su orden (ej: '33245289').
. Retorno en MTERM_MENOR (solo si OK): mascara con los terminales y su orden, filtrando las de orden menor (ej: '00200200').
3.6.4 motorSalParte fundamental del proceso de marcación saliente, gestiona como hay que llamar a los diferentes contactos asignados a las campañas. Transforma los contactos en intentos de marcación. A efectos de diagnósticos, desde un SSH ejecuta el comando “nc ip_maquina 1120” root@vivait-acd:~# nc localhost 1120 motorSal sis ver='V01.4' inic='20140725 140832' alarmas=1 ultAlar='20140725 140832' motorSal gmp msj=253/256 buf=256/256 tarea=99/102 motorSal tmp uptime=600165 (6d 22h 42m 45s) motorSal mtr mys=1 ocup=0% planif=28(0) intento=26(0) Donde cada parámetro monitorizado indica:
#
# Los nombres no pueden tener numeros
# Si el valor de una cadena contiene espacios, se pondra entre comillas dobles
# Los valores comentados indican valores por defecto
base
{
cfg
{
soy_demonio = 1
hay_syslog = 0
# Archivo con identificador de proceso: (-: /var/run/motorSal.pid)
archivo_pid = -
# Archivo_traza: (-: stdout o /var/log/motorSal.log si soy_demonio)
# No se usa si se activa hay_syslog
archivo_traza = -
}
cfg_recarga
{
# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
nivel_traza = 2
pruebas = 0
hay_flush_traza = 1
# traza_milisegundos = 1
}
sis
{
# No se usa. No modificar
subsistema = 0
}
gmp
{
# Numero de mensajes. No modificar
num_msj = 256
# Numero de buffer. No modificar
num_buf = 256
}
}
supervision
{
puerto_escucha = 1120
}
supervision_recarga
{
to_periodo = 60
}
mysql
{
hay_mysql = 1
host = localhost
usuario = nimitz
clave = phikau3iwCe4O0PP5b09ng==
base_datos = nimitz
}
motor
{
hay_motor = 1
ciclos_campanna_activa = 30
# Directorio donde se almacenan las librerias dinamicas con las estrategias
# Por defecto = '/usr/lib/motorSal/estrategias'
dir_estrategias = /usr/lib/motorSal/estrategias
}
motor_recarga
{
# Periodo de ejecucion del ciclo del motor
to_ciclo = 10
}
muestreo
{
hay_muestreo = 1
}
3.6.5 MyACDSupervRefleja el estado de las colas de asterisk en la base de datos; tiene sentido a efectos de estadísticas e informes, pero no a efectos de funcionamiento de la conmutación de voz. Es el responsable de mostrar información en las ventanes de tiempo real del supervisor. Es también el proceso que genera las llamadas en el marcador automático de VIVAit Suite. A efectos de diagnósticos, desde un SSH se ejecuta el comando “nc ip_maquina 1112”. root@vivait-acd:~# nc localhost 1112 myAcdSuperv SIS ver='04.6' inic='20140416 081613' alarmas=6 ultAlar='20140416 121652' myAcdSuperv AMI cnx=1 ocup=28% exten=2/2/511 asig=0/11/4095 myAcdSuperv MYSQL cnx=1 ms=316 Donde cada parámetro monitorizado indica:
Como complemento a los diagnósticos:
3.6.6 Proceso escobaEl proceso escoba se encarga de resolver y consolidar todos aquellos segmentos de grabación que han quedado almacenados en los gateways por falta de información o incoherencias. Existen dos tipos de procesos escobas:
3.6.6.1 escobaGW.plProceso que se ejecuta en los nodos busca en el disco RAM , las grabaciones de segmentos cuya antigüedad sea superior a mas de un día, es decir, si el proceso por ejemplo se ejecuta a la 01:00 a.m. del día 24/03/2016 buscara todas aquellas grabacionesn de segmentos realizadas antes de la 01:00 a.m del día 22/03/2016. Una vez realizada la busqueda, obtendra el UCID a traves del nombre del fichero, y comprobara su correspondencia con la tabla DAT_LLAMADAS. Si existe una llamada con ese UCID, cambiara el estado de la llamada para que sea procesada correctamente. En caso contrario, es movida a la carpeta /var/lib/recordNodo/grabError. 3.6.6.2 escobaGrabsBd.plSe ejecuta sobre la base de datos de histórico, normalmente se ejecuta en un servidor de grabación (recordCentral). El proceso hace una búsqueda en dos tablas:
Después hace una búsqueda en el sistema, usando como ruta el campo D_HORA_INICIO de cada llamada, que indica la ruta entera donde se encuentra el archivo. Una vez encontrado el archivo cambia el estado del segmento que tenia un error a estado de grabación disponible , que tendrá valor 100. Si no encontramos el segmento, no realizara nada. 3.6.7 recordCentralSe considera como un servidor de grabaciones. Todas las grabaciones de llamadas son un activo importante y una empresa con Contact Center pueda recibir millones de llamadas que necesitan estar registradas y almacenadas en discos duros con gran capacidad, las máquinas donde suelen alojarse estos servidores poseen discos duros limitados, lo que hace necesario en algunos casos incorporar dispositivos NAS. Los dispositivos NAS son dispositivos de almacenamiento conectados a una red que permite el almacenamiento y la recuperación de datos desde una ubicación centralizada, flexibles y escalables, lo que significa que a medida que necesite almacenamiento adicional, puede añadirlo al que tiene. Esto no significa que sea necesario tener dispositivos NAS para funcionar, sino que puede tomar datos de diferentes sitios. En recordCentral pueden existir tres tipos de dispositivos NAS:
A efectos de diagnósticos, desde un SSH se ejecuta el comando nc ip_maquina 1114 en la maquina donde creamos que debe estar ejecutando el proceso recordCentral. Ejemplo: root@smadavacdrecord1:~# nc localhost 1114 recordCentral SIS ver='01.2' inic='20140423 094058' alarmas=11041 ultAlar='20140423 160112' recordCentral MYSQL cnx=1 recordCentral NAS llamadas=1 segmentos=1 recordCentral REC llamNum=24901 llamErr=0 segmNum=38906 segmErr=0 retraso=305 recordCentral NODO fase=0 cuarentena= descarga='8,6,4,7,10,9' gestion='4,6,7,8,9,10' La explicación de los campos se muestra en la tabla siguiente:
Como complemento a los diagnósticos:
El fichero es el siguiente: # # Configuracion de recordCentral.pl # # 0: Solo alarmas en archivo log - 1: alarmas y trazas $depurar = 1; # 0: Arranca como proceso - 1: arranca como demonio $soyDemonio = 1; # Archivo de log (: salida estandar) $logArch = '/var/log/record/recordCentral.log'; # Archivo para el pid (eliminando el .pid final) $pidArch = '/var/run/record/recordCentral'; # 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion) $unaVezSolo = 0; # Tiempo de espera en segundos cuando no hay conexion o cuando no hay llamadas $toBucle = 10; # Bytes por segundo en archivos de grabaciones $bytesPorSegundo = 16000; # Bytes a leer en cada accceso a disco $bytesLeerBuf = 1048576; # Conexion de base de datos $db='nimitz'; $dbHost = 'BDTR'; $dbPort = '3306'; $dbUsuario = 'nimitz'; $dbClave = 'ivivanimitz'; # Configuracion de la supervision $supPort = '1114'; # Configuracion de archivos con grabaciones (Orig en nodo) $grabHay = 0; $grabAudioCalidad = 32; $grabAudioFormato = 'mp3'; $grabAudioExten = 'mp3'; $grabAudioCifrado = 0; $grabRutaUsaTimestamp = 1; $grabRutaOrig = '/var/lib/recordNodo/grabaciones'; $grabRutaTmp = '/var/lib/recordProcesad/grabTmp'; $grabRutaDest = '/var/lib/recordProcesad/grabRecord'; $grabRutaError = '/var/lib/recordProcesad/grabError'; $segmHay = 1; $segmUmbralTiempo = 10; $segmMargenTiempo = 5; $segmAudioCalidad = 32; $segmAudioFormato = 'mp3'; $segmAudioExten = 'mp3'; $segmAudioCifrado = 0; $segmRutaUsaTimestamp = 1; $segmRutaTmp = '/var/lib/recordProcesad/segmTmp'; $segmRutaDest = '/var/lib/recordProcesad/segmRecord'; $segmRutaError = '/var/lib/recordProcesad/segmError'; # Seleccion de tipos de segmento a grabar separados por comas ( = todos) $tiposSegmentoGrabar = ; # Indica si se graba ring $grabarRing = 0; # Minino numero de segundos para generar segmento externo $segmExternoMinSegs = 10;
3.6.8 recordNodoSe considera como proceso con función de agente de grabación para un nodo. Solo debe existir uno por maquina o por nodo (configurado como grabador) en el portal de administración de VIVAit. Para su funcionamiento utiliza un disco RAM por que su tiempo de acceso mejora drásticamente, debido a que la memoria RAM es varios órdenes de magnitud más rápida que las unidades de disco reales, haciendo que la velocidad de procesamiento de las grabaciones sea mucho mas rápida. Este disco RAM normalmente ocupa la mitad de la memoria RAM de una maquina pero no es obligatorio pues dependerá de la memoria disponible en cada maquina, y además, se configura con un tamaño no superior a 2GB de memoria RAM. Hay que tener especial cuidado en que no se llene en espacio ni tampoco los i-nodos. Se puede monitorizar a través de la aplicación zabbix. El recordNodo se encarga de recoger todas las grabaciones de segmentos que tienen de estado proceso(2), es decir, aquellos segmentos de llamadas que han sido grabadas pero no están siendo procesadas, moviéndolas del disco RAM a su carpeta correspondiente. La forma de obtener la carpeta correspondiente es obteniendo el dato del campo D_HORA_INICIO en la tabla DAT_LLAMADAS para cada segmento,tras un tratamiento del campo creara la subruta correspondientes: /año/mes/dia/hora/min. Entonces, la ruta correcta seria /var/lib/recordNodo/grabaciones/año/mes/dia/hora/min, donde año, mes, dia , hora y min son los valores numéricos obtenidos del campo D_HORA_INICIO. A efectos de diagnósticos, desde un SSH se ejecuta el comando nc ip_maquina 1113 en la maquina donde creamos que debe estar ejecutando el proceso recordNodo: root@smadavgw5:~#nc localhost 1113 recordNodo SIS ver='04.00.00' inic='20160326 105137' alarmas=2 ultAlar='20160326 105542' recordNodo MYSQL cnx=1 recordNodo REC grabNum=0 grabErr=0
Como complemento a los diagnósticos:
# # Configuracion de recordNodo.pl # # 0: Solo alarmas en archivo log - 1: alarmas y trazas $depurar = 1; # 0: Arranca como proceso - 1: arranca como demonio $soyDemonio = 1; # Archivo de log (: salida estandar) $logArch = '/var/log/record/recordNodo.log'; # Archivo para el pid (eliminando el .pid final) $pidArch = '/var/run/record/recordNodo'; # 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion) $unaVezSolo = 0; # Tiempo de espera en segundos cuando no hay conexion o cuando no hay llamadas $toBucle = 5; # Tiempo de guarda en segundos desde D_HORA_FIN hasta que se procesa llamada $toProcesar = 30; # Bytes por segundo en archivos de grabaciones $bytesPorSegundo = 16000; # Bytes a leer en cada accceso a disco $bytesLeerBuf = 1048576; # Conexion de base de datos $db='nimitz'; $dbHost = 'BDTR'; $dbPort = '3306'; $dbUsuario = 'nimitz'; $dbClave = 'ivivanimitz'; # Configuracion de la supervision $supPort = '1113'; # Quien es mi nodo para filtrar grabaciones $miNodo = 2; # Directorio donde se localizan las grabaciones $grabRutaOrig = '/var/spool/asterisk/monitor'; $grabRutaDest = '/var/lib/recordNodo/grabaciones'; $grabRutaError = '/var/lib/recordNodo/grabError'; $grabRutaUsaTimestamp = 1; # Tiempo en segundos limite a truncar en las grabaciones (0=sin limite) $grabLimiteSegs = 0; # Indica si se procesan segmentos de tipo tipoSegmEliminarGrabacion y patron eliminacion $segmEliminarGrabacionTrato = 1; $patronEliminarGrabacion = '/etc/MDtel/null.bin';
3.6.9 SercenSercen (Servicios Centrales) es un demonio de VIVAit que provee servicios centralizados a muchos elementos de la arquitectura. Sirve para identificar a los usuarios y garantizar que los mismos sean quienes dicen ser. Puede haber varias instancias en el, y diferentes servicios pueden estar en diferentes Sercen
- Autenticación, de factor simple o doble factor - Integración con proveedores de autenticación - Click2talk (Demonio dentro de Vivait)
SerCen se relaciona con :
- Asterisk (para el click2talk) - VIVAit Meet (para por ejemplo las funciones “botón colaborar” y ”Recursos compartidos”. - Con los portales a los que proporciona los servicios vía webservice
3.6.9.1 Interfaz para autenticación (app-webfon / serCen)Este interfaz permite autenticar un usuario (simple factor o doble factor), utilizando para ello la base de datos de vivait y/u otro mecanismo externo, como puede ser el directorio activo de Microsoft. El objetivo es que app-webfon obtenga un token que debe incluirse en las comunicaciones con el resto de elementos para que estos conozcan que las solicitudes proceden de un usuario autenticado. Este token también puede utilizarse para que otras aplicaciones puedan se iniciadas desde app-webfon y no se requiera de un proceso específico de autenticación para cada aplicación. De modo recíproco, app- webfon debe soportar el ser invocado con un token y, en tal caso, considerar que el usuario ya está autenticado.
3.6.9.2 Comandos de SerCenLos diferentes comandos de SerCen son:
3.6.9.2.1 Comandos autenticar1Comandos autenticar1 y respuestas posibles: autenticar1. Autenticación primer factor. url (POST): https://<servidor_webfon>/sercen/postautenticar1 datos de entrada: {"cuenta": "fulano","clave$1aA": "dificil","aplicacion": "webfon","expira": 7200,"clvCambiar": "masdificil$1aA"}
El campo "expira" en la respuesta informa sobre el token devuelto. Dicho token es válido durante un periodo que se expresa en segundos a transcurrir desde el momento en que se informa. El campo "clvExpira" en la respuesta informa en segs. sobre cuando va a expirar la clave introducida y validada (errorNum=0). Si devuelve cero o no devuelve nada, quiere decir que no va a expirar por estar configurado de esa manera o porque es un autenticación ldap. Al invocar este comando, app-webfon solicita, opcionalmente (campo "expira"), un periodo (en segundos) cuyo valor debe formar parte de su configuración. El valor finalmente válido es el que aparece con el mismo nombre en la respuesta (si finalmente es positiva) y si no hay doble factor. Es responsabilidad de app-webfon el efectuar una solicitud para revalidar el token, mediante un procedimiento que se describirá posteriormente, tantas veces como considere necesario.
En lo que se refiere a las posibles respuestas a autenticar1, pueden darse varios casos: Se produce un error: ejRes1 y ejRes2. La clave ha expirado y no hay doble factor (ejRes3). Se invita a cambiar la clave invocando de nuevo a autenticar1 con "clvCambiar", para lo cuál se aportan datos de la complejidad requerida. La clave es válida y hay doble factor en ejRes4. La clave es válida y hay doble factor "totp" con usuario no enrolado en ejRes6. Se incluye un código QR que permite enrolar al usuario
3.6.9.2.2 Comandos autenticar2Comandos autenticar2 y respuestas posibles: autenticar2. Autenticación doble factor. url (POST): https://<servidor_webfon>/sercen/postautenticar2 datos de entrada: {"token": "1234567890","pin": "1234","expira": 7200,"clvCambiar": "masdificil$1aA"}
El campo "expira" en la respuesta informa sobre el token enviado y token2 devuelto. Dichos token son válidos durante un periodo que se expresa en segundos a transcurrir desde el momento en que se informa.
3.6.9.2.3 Comando autenticartokenaadAutenticar empleando un token de "Azure active directory"
url (POST): https://<servidor_webfon>/sercen/postautenticartokenaad
3.6.9.2.4 Comando validartokenEs un comando muy simple, que permite conocer si un token es válido y su periodo de expiración.
url (POST): https://<servidor_webfon>/sercen/postvalidartoken
3.6.9.2.5 Comando revalidartokenPermite ampliar el periodo de expiración de un token. El periodo ampliado es el que se indica en la respuesta.
url (POST): https://<servidor_webfon>/sercen/revalidartoken
3.6.9.2.6 Comando revocartokenPermite revocar un token.
url (POST): https://<servidor_webfon>/sercen/postrevocartoken
3.6.9.2.7 Comando cambiarClavePermite que un usuario autenticado cambie su clave y amplíe el periodo de expiración y de caducidad.
url (POST): https://<servidor_webfon>/sercen/postcambiarclave
3.6.9.3 Posibles errores
3.6.9.4 Logs y comandosEn serCen podemos monitorizar el funcionamiento del proceso de login de los usuarios. systemctl status serCen.service Resultado esperado: serCen.service - LSB: Start/stop serCen Loaded: loaded (/etc/init.d/serCen; generated) Active: active (exited) since Thu 2022-02-10 15:16:46 CET; 2h 38min ago Docs: man:systemd-sysv-generator(8) Process: 942 ExecStart=/etc/init.d/serCen start (code=exited, status=0/SUCCESS) feb 10 15:16:45 VC-WebP-AytoArganda-MAD-02 systemd[1]: Starting LSB: Start/stop serCen... feb 10 15:16:45 VC-WebP-AytoArganda-MAD-02 serCen[942]: Starting serCen feb 10 15:16:46 VC-WebP-AytoArganda-MAD-02 systemd[1]: Started LSB: Start/stop serCen.
nc localhost 1125
serCen sis ver='00.01.04.1' inic='20220210 173436' alarmas=0 ultAlar='00000000 000000' serCen gmp msj=254/256 buf=256/256 tarea=97/102 serCen tmp uptime=1009 (0d 0h 16m 49s) serCen wws mysql=1 conxNum=0 conxMaxPeriodo=0 serCen wwc numCacheLibre=3 numColaPend=0 serCen wwc numReq=0/0 numGet=0/0 numPost=0/0 numPut=0/0 numDelete=0/0 serCen smt numCacheLibre=5 numColaPend=0 enPeriodo=0/0 numMsj=2/0
Acceso: Clave errónea: 3.6.10 Aplicación PQCTIPqcti es una nueva aplicacion de asterisk 13 que sirve para establecer llamadas , cada asterisk tendrá su modulo pqcti instalado y configurado. No hay una arquitectura como tal , sino una base para empezar a desarrollar cosas por encima.
- Las conexiones desatendidas - Para el click2talk - La funcionalidad de llamar desde agenda o historial en el portal de usuario VIVAit
3.6.10.1 Servicios webLos servicios web que proporciona la aplicación son de dos tipos:
2. Informativos
3.6.10.2 Archivos relevantes y procedimientos de despliegueLos archivos relevantes para construir la aplicación son:
Añadir al final de "clean:" "pqcti/*.o" ------
La compilación y despliegue se hace del modo habitual: "make" y "make install".
3.6.10.2.1 Configuración de archivos relevantes:
A continuación se ofrece un dialplan de inicio de llamada. Conviene analizar si los contextos de transferencia son distintos a los habituales.
Debe configurarse el acl que limita el acceso al servicio desde direcciones ip conocidas. Un ejemplo en que se permite una red de servidores y un equipo:
Descripción de campos del archivo pqcti.conf: • general
no hay registro y, por tanto, no se soportan los comandos "cmd_liberar" y los comandos informativos.
http://<IP_NODO>:8089/vcall-nodo/pqcti/v1/comandos
¡¡¡CUIDADO !!! si se usase un canal local, se perdería la función de "setvar" en el "peer": se pierde ID_DISPOSITIVO.
3.6.10.3 Aplicaciones para el dialplan de asterisk
3.6.10.4 Comandos de asteriskA continuación se muestran varios comandos de pqcti para asterisk.
3.6.10.5 Tabla en base de datosCon el fin de que otra aplicación pueda seguir las llamadas registradas en pqcti, se ha previsto una nueva tabla en base de datos: DAT_CONX_DESATEN. Dicha tabla integra todos los registros de todos los nodos vivait y será mantenida por el dialplan.
3.6.10.6 Interfaz para los serviciosTodos los servicios están implementados en base a un POST con un json en el cuerpo de la solicitud, que contiene los parámetros de invocación, y otro json en el cuerpo de la respuesta. En ambos casos, el json es un objeto con campos. Está implementada, como opción, el uso de un GET con parámetros, pero no se recomienda su uso, excepto para pruebas, porque puede haber problemas con el conjunto de caracteres no ascii. Si no hay problemas a nivel de red, de transporte o en las reglas básicas del comando, el estado de la respuesta es siempre "200 OK", indicándose los posibles errores en el json de respuesta. Todas las respuestas contienen un campo denominado "resultado" (de la ejecución) que puede tomar los siguientes valores:
Si El "resultado" no es "OK", se devuelve un campo "diagnóstico" con una cadena que describe el problema detectado. Siempre es texto en español, por lo que su uso previsto es para logs.
3.6.10.7 Descipción de comandos y respuestas de jsonA partir de aquí se describen los comandos y respuestas en base a json de ejemplo, ya que los campos son triviales y autoexplicativos:
Resultado esperado :
En el comando, sólo son obligatorios: comando, extension y dnis_num. El resto son opcionales. Los campos "ani" no deben usarse, salvo por una buena razón. El campo "dnis_num" sólo sirve para presentar el dato en el display de la extensión que inicia la llamada.
(Este comando sólo puede invocarse si se ha configurado "llamadas_registrar=true").
(Este comando sólo puede invocarse si se ha configurado "llamadas_registrar=true").
(Este comando sólo puede invocarse si se ha configurado "llamadas_registrar=true").
(Este comando sólo puede invocarse si se ha configurado "llamadas_registrar=true").
3.6.11 Vivait-CTIPermite la comunicación entre la aplicación VIVAit Desk de agente y el asterisk, sincronizando; convierte el protocolo “asterisk manager” a CSTA (VIVAit Desk “habla” CSTA). Es un proceso importante para el uso de VIVAit Desk, y para que los agentes puedan realizar su operativa normal con la entrada y salida de llamadas… si bien el cursado telefónico de llamadas es factible, no disponer de las facilidades de VIVAit Desk y formularios hace el sistema difícilmente manejable A efectos de diagnósticos, desde un SSH se ejecuta el comando “nc ip_maquina 1111” root@vivait-acd:~# nc localhost 1111 vivait-cti sis ver='V01.5' inic='20140414 104312' alarmas=13 ultAlar='20140415 173152' vivait-cti gmp msj=1018/1024 buf=1023/1024 tarea=97/102 vivait-cti tmp uptime=694748 (8d 0h 59m 8s) vivait-cti cti numConx=(0/511) numPend=(0/127) numMakeCallPend=0 numCall=(0/2047) numChan=(0/4095) numAuxStr=(0/511) numMoniColas=(0/511) numMoniDevice=0 numMoniCall=0 numMoniCallAuto=0 numMoniCallByDevice=0 numMoni=(0/511) auditCallErr=0 auditAuxStrErr=0 auditMsjReqErr=0 araChanID=0 araUniqueID=0 araMoni=0 vivait-cti ami esta=conx resp=652(0) evs=1397(0) descar=556(0) err=16 errConx=16 numAct(0/0/127) auditErrAct=0 Donde cada parámetro monitorizado indica:
Como complemento a los diagnósticos: Podremos examinar el fichero de configuración del proceso en /etc/MDtel/vivait-cti.conf
#
# Los nombres no pueden tener numeros
# Si el valor de una cadena contiene espacios, se pondra entre comillas dobles
# Los valores comentados indican valores por defecto
base
{
cfg
{
soy_demonio = 1
hay_syslog = 0
# Archivo con identificador de proceso: (-: /var/run/vivait-cti.pid)
archivo_pid = -
# Archivo_traza: (-: stdout o /var/log/vivait-cti.log si soy_demonio)
# No se usa si se activa hay_syslog
archivo_traza = -
}
cfg_recarga
{
# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
nivel_traza = 3
pruebas = 1
hay_flush_traza = 1
}
sis
{
# No se usa. No modificar
subsistema = 0
}
gmp
{
# Numero de mensajes. No modificar
num_msj = 1024
# Numero de buffer. No modificar
num_buf = 1024
}
}
supercolas
{
en_comandos = 0
en_eventos = 0
# archivo_conf = supercolas.conf
}
supervision
{
puerto_escucha = 1111
}
cti
{
hay_cti = 1
# Dimensionamiento de recursos. Uno menos, ya que cero no vale
max_conx = 512
max_call = 2048
max_channel = 4096
max_monitor = 512
max_str_aux = 512
puerto_escucha = 4500
link_id = 1
#
hay_vdn = 1
hay_usuarios = 1
usuarios
{
vivait
{
clave = 3RSMbPlTi61rG5pySx9hhUokz8Fyy3Nql2w8Jairfl8=
ip = 0.0.0.0
msk = 0.0.0.0
}
}
}
cti_recarga
{
makeCall_primero_dentro = 1
makeCall_primero_fuera_agente_descuelga = 1
temporizador_makeCall = 30
fmt_canal_exten = SIP/%s
# contextos para llamadas salientes makeCall y makePredictiveCal
contexto_makeCall_primeroFuera = Cen_MakeCallPrimeroFuera
contexto_makeCall_primeroFueraDentro = Cen_MakeCallPrimeroFueraDentro
contexto_makeCall_primeroDentro = Cen_MakeCallPrimeroDentro
# contextos para llamadas salientes desde myAcdSuperv
contexto_myAcdSuperv_ProgreFuera = Cen_myAcdSuperv_ProgreFuera
contexto_myAcdSuperv_ProgreDentro = Cen_myAcdSuperv_ProgreDentro
contexto_myAcdSuperv_PredicFuera = Cen_myAcdSuperv_PredicFuera
contexto_myAcdSuperv_PredicDentro = Cen_myAcdSuperv_PredicDentro
# contexto para transferencias
contexto_redirect = Cen_Redirect
# expresiones regulares. se evaluan en el orden indicado
expr_esExtenLocal = ^(4)[0-9]{4}$
expr_esExtenInterna = -
expr_esCola = ^(8)[0-9]{4}$
expr_esPuntoDistribucion = ^(9)[0-9]{4}$
expr_esPuntoEnrutamiento = -
expr_esNumPrivateLocal = ^[369][0-9][0-9][0-9][0-9]$
expr_esNumPrivateUnknown = ^[369]
expr_esNumPublicNational = ^0?[69][0-9]{8}$
expr_esNumPublicInternational = ^000[0-9]*
# resto siempre esNumPublicUnknown
#
audit_hay_Call = 1
audit_call_minutContestada = 60
audit_call_minutNoContestada = 5
audit_hay_AuxStr = 1
audit_AuxStr_minut = 2
audit_hay_MsjReq = 1
audit_MsjReq_minut = 2
#
}
ami
{
max_action = 128
ip_asterisk = localhost
puerto_ami = 5038
usuario_ami = vivait
clave_ami = vivactisecret
to_inac = 30
to_audit = 600
audit_max_resp = 3
}
3.6.12 Introducción al aprovisionamientoEn cada Centralita Telefónica existente, se puede configurar sus teléfonos IP y asignarles extensiones a cada teléfono. Para hacer un aprovisionamiento de los teléfonos es necesario que el técnico configure uno a uno manualmente utilizando su interfaz web, esto no es práctico, ya que genera muchos errores y el tiempo de implementación se incrementa drásticamente. Además, es casi imposible la administración cotidiana de los teléfonos IP. Desde MDtel se utiliza una herramienta que permite que los teléfonos IP soportados y homologados por MDtel ([ver Terminales telefónicos]) se puedan aprovisionar automáticamente, brindando una fácil implementación y administración cotidiana.
3.6.12.1 ¿Qué es aprovisionar?Aprovisionar un teléfono es el proceso de configuración automático de teléfonos IP para su uso con una Centralita Telefónica de forma remota. Una vez que aprovisione un teléfono, el teléfono automáticamente se configurará correctamente y podrá administrar los teléfonos de forma centralizada y remota, sin tener que iniciar sesión en la interfaz web de cada uno de los teléfonos. El aprovisionamiento de teléfono facilita enormemente la administración cotidiana de los teléfonos IP. Esto hace que sea fácil de cambiar las contraseñas de extensión,realizar desvíos de llamadas, nombre a mostrar, mensajería y demás configuraciones, ya que puede hacerlo de forma centralizada para todos los teléfonos desde el portal de administración y luego transferir los cambios al teléfono. 3.6.12.2 TFTPTFTP son las siglas de Trivial File Transfer Protocol (Protocolo de transferencia de archivos trivial). Es un protocolo de transferencia muy simple semejante a una versión básica de FTP. TFTP a menudo se utiliza para transferir pequeños archivos entre terminales en una red. Algunos detalles del TFTP:
puertos 20 y 21 TCP).
3.6.12.3 Funcionamiento del servidor phoneprove-TFTPA continuación se muestra un esquema que facilita el entendimiento del funcionamiento del servidor phoneprove-TFTP: El servidor Phoneprove-TFTP se encarga del aprovisionamiento masivo de terminales, es de gran utilidad porque cualquier cambio en los teléfonos pueden ser realizados a nivel DHCP y todos los teléfonos tomarán la nueva configuración luego de reiniciarlos. Desde phoneprove-TFTP se generara los archivos necesarios para cada teléfono y que sirven para ser aprovisionados automáticamente. El servidor phoneprove-TFTP tiene alojados los ficheros de configuración están ordenados según las direcciones MAC de los teléfonos. El teléfono “preguntará” al servidor cual es su fichero de configuración utilizando su dirección MAC. Este a través de su MAC , consulta en la base de datos para ofrecer al terminal los datos de configuración según su plantilla, cual sera su extensión , cual sera el usuario propietario, entre otras cosas.
3.6.12.4 Parámetros necesarios de Aprovisionamiento de TeléfonosNotas: el aprovisionamiento desarrollado por MDtel, no emplea un fichero por cada teléfono, sino que emplea una plantilla por cada modelo de teléfono. Debe haber una configuración previa del servidor DHCP es necesario coordinar con el cliente la asignación de direcciones para los diferentes elementos de la plataforma VIVAit, fundamentalmente para terminales telefónicos; en este caso además será necesario activar la opción 66 que permitirá definir el servidor TFTP del que los terminales cogerán sus ficheros de aprovisionamiento. El aprovisionamiento desde el portal de administración solo es posible para aquellos teléfonos IP homologados y probados desde MDtel [ver Terminales telefónicos]
La configuración de un teléfono SIP es muy sencilla y en no es necesario tener conocimientos avanzados de informática o de telefonía. Cada una de estas plantillas que sirven para aprovisionar un teléfono IP homologado, algunos de los parámetros predeterminados se explicarán a continuación .
3.6.12.4.1 Parámetros de Aprovisionamiento globales
3.6.12.4.2 Parámetros de Aprovisionamiento PersonalesAdemás de los parámetros de aprovisionamiento globales, el teléfono también obtendrá información de configuración individual, tales como:
3.6.12.5 Aprovisionamiento de teléfonos nivel usuario
Los pasos a seguir son los siguientes: 1) Dar de alta el teléfono en el portal de administración, se debe seleccionar el modelo del teléfono, e indicar la dirección MAC del teléfono a aprovisionar, todo ello desde el portal de administración VIVAit. Para mas información ver [del portal de administracion| aprovisionamiento del portal de administración VIVAit]. 2) En el mismo portal de administración se deberá crear una extensión , asignar a la extensión el teléfono que se quiera aprovisionar, elegir la plantilla adecuada del teléfono y el usuario propietario (solo si sera un puesto fijo) desde [| extensiones del portal de administración]. 3) Conectar el teléfono a la red LAN informática (conectarlo al router o switch) para que tenga acceso a Internet:
4) Como la mayoría de teléfonos IP del mercado al arrancar una vez sabiendo la URL de aprovisionamiento piden una serie de archivos de configuración para aprovisionarse vía TFTP. EL servidor phoneprove-TFTP, detectara la petición y a través de la MAC y datos del usuario, consultará en la base de datos los datos necesarios para aprovisionar al teléfono y si todo funciona correctamente mandara al teléfono IP los datos de configuración necesarios para funcionar. 5) Asegúrese de que el teléfono encuentren el servidor TFTP, para ello esperar un tiempo adecuado para que termine el aprovisionamiento.
3.6.12.6 Aprovisionamiento de teléfonos nivel técnico3.6.12.6.1 Plantilla de configuraciónLa plantilla de configuración empleadas en el apartado [| plantilla del portal de administración VIVAit] de cada modelo está formada por una serie de variables. Los valores se obtienen de la tabla de la base de datos CEN_TELEFONOS, CEN_USUARIOS, ACD_EXTENSIONES, ACD_NODOS, COM_NODOS... correspondientes a la extensión del teléfono, usuario, nodo, etc. variable ${NODO1_C_NOMBRE}='corp-ast13'
variable ${EXTEN_C_CLAVE_REGISTRO}='Tel21002'
variable ${USU_C_CODIGO_POSTAL}=28034'
variable ${SEDE_C_CODIGO_POSTAL}='28034'
variable ${USU_C_NOMBRE}='Juan Antonio'
variable ${USU_C_APELLIDO2}='Ramirez'
variable ${SEDE_C_NOMBRE}='RED_LAB'
variable ${NODO2_C_NOMBRE}= NULL
variable ${EXTEN_C_NOMBRE}= 21002
variable ${USU_C_LOCALIDAD}=
variable ${USU_C_NOMBRE_MOSTRAR}='Juan'
variable ${NODO1_C_IP}='175.25.129.70'
variable ${MODEL_C_PREFIJO_PLANTILLA_MAC}='T28P'
variable ${SEDE_C_LOCALIDAD}='Madrid'
variable ${USU_C_APELLIDO1}='Casas'
variable ${NODO2_C_IP}= NULL
variable ${TF_ID_EXTENSION}='5'
cargando campos idExten=5
3.6.12.6.2 Ficheros y paquetes necesariosPaquetes previos: libnet-tftpd-perl, tftp-hpa, libnet-address-ip-local-perl Usuario de funcionamiento: root
Archivos necesarios: /usr/local/sbin/phoneprov-tftp.pl /usr/local/sbin/phoneprov-tftp.pm /etc/MDtel/phoneprov-tftp.pconf /etc/init/phoneprov-tftp.conf /etc/logrotate.d/phoneprov-tftp
/var/lib/phoneprov-tftp/plt /var/lib/phoneprov-tftp/bin
# # Configuracion de phoneprov-tftp.pl # # 0: Solo alarmas en archivo log - 1: alarmas y trazas $depurar = 1; # 0: Arranca como proceso - 1: arranca como demonio $soyDemonio = 1; # Archivo de log (: salida estandar) $logArch = '/var/log/phoneprov-tftp.log'; # Archivo para el pid $pidArch = '/var/run/phoneprov-tftp'; # 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion) $unaVezSolo = 0; # Conexion de base de datos $db='nimitz'; $dbHost = 'BDTR'; $dbPort = 3306; $dbUsuario = 'nimitz'; $dbClave = 'ivivanimitz'; # Configuracion de la supervision $supPort = 1123; # Configuracion de servidor TFTP # # Los archivos estaticos no tienen variables. Se sirven sin modificar. # Estan en el arbol de directorios a partir del indicado por '$dirEstatico' # # Los archivos dinamicos soportan sustitucion de varibles. # Las plantillas con variables a sustituir estan en el arbol de directorios # a partir del indicado por '$dirPlantilla'. # Los archivos temporales con variables sustituidas estan en el arbol # de directorios a partir del indicado por '$dirDinamico'. # Los archivos dinamicos se identifican porque contienen una mac. # Tambien se identifican en base a las lineas que comienzan con '@'. # En este ultimo caso, no se refieren a un telefono y puede tener pocas vars. # $miDir = ; $bindDir = ; $bindPuerto = 69; $dirPlantilla = '/var/lib/phoneprov-tftp/plt'; $dirEstatico = '/var/lib/phoneprov-tftp/bin'; $dirDinamico = '/tmp'; $toRRQ = 10; $toACK = 5; $errACK = 3; $tamBlq = 512; # Valores de E_TIPO_CAMPO en tabla COM_CAMPOS que enganchan ID_TABLA con CEN_EXTENSIONES $clasesCamposExtension = '50'; # Valores de E_TIPO_CAMPO en tabla COM_CAMPOS que enganchan ID_TABLA con CEN_USUARIOS $clasesCamposUsuario = '70'; # Expresiones regulares de archivos con mac estaticos (separados por '>') $nomArchMacEstaticos = '^SEP.*\.tlv$>^SEP.*\.bin$>^SP.*\.xml$'; # Traducciones previas de nombres de archivo estaticos #%archivo = 'trad'; # Traducciones previas de nombres de archivo dinamicos sin mac @y000000000044.cfg = 'Yealink-T23G-comun.cfg'; @y000000000034.cfg = 'Yealink-T21P-comun.cfg'; @y000000000000.cfg = 'Yealink-T28P-comun.cfg'; @y000000000004.cfg = 'Yealink-T26P-comun.cfg'; @y000000000036.cfg = 'Yealink-T41P-comun.cfg'; @y000000000058.cfg = 'Yealink-T58V-comun.cfg'; @y000000000069.cfg = 'Yealink-T27G-comun.cfg'; @snom710.htm = 'Snom-710-comun.cfg'; @snom710-firmware.xml = 'Snom-710-firmware.xml'; @spa514G.cfg = 'cisco-spa514G.cfg'; @spa512G.cfg = 'cisco-spa512G.cfg';
3.6.13 WatchdogSe trata de una aplicación del asterisk que monitoriza el SIP y en caso de fallo, pasado un cierto tiempo, reinicia el asterisk y genera un core. Si escribimos en CLI de asterisk perro tenemos los siguientes comandos:
El dato "hace" informa de cuanto tiempo ha transcurrido desde el último tick. Facilita la calibración del parámetro de configuración "segs_guarda", normalmente es 30 Tiene un fichero de configuración ubicado en /etc/asterisk/MDcrash.conf
3.6.14 Proceso de BackupLas plataformas VIVAit Call y VIVAit Suite incluyen un script para realizar un proceso de backup. Se utilizará el script backup.sh, que se encuentra en el directorio etc/MDTel. Se ejecuta automaticamente mediante el uso de un cron texto del cron: SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 0 2 * * * root /etc/MDtel/backup.sh /etc/MDtel/backup.cfg Para activar el script hay que descomentar la línea # m h dom mon dow user command Los directorios de los que se hace copia son:
Por defecto se realiza un backup cada dos horas en la carpeta /var/spool/MDtel/backup. Para cambiar la ruta de destino del backup habrá que modificar el fichero backup.sh, en concreto modificar la variable MDTEL. El fichero backup.cfg que se genera incluye copia de la siguiente información:
Se guardarán 10 copias del fichero backup.cfg Los campos disponibles en el fichero son los siguientes:
Para recuperar una plataforma utilizando el backup, habrá que instalar una máquina nueva y cargar los ficheros de configuración, Base de Datos y Dialplan guardados en el proceso de backup. 3.6.14.1 Información adicional: como funciona un cronLa información sobre el fucnionamiento de un cron puede encontrarse en: Información sobre el comando cron 3.6.15 CHATLa información para configurar el CHAT y su funcionamiento puede encontrarse en: [enlace] 3.6.16 MEETEl esquema de conexión para el Meet es el siguiente:
/etc/janus/janus.cfg /etc/janus/janus.plugin.echotest.cfg /etc/janus/janus.transport.http.cfg /etc/janus/janus.transport.websockets.cfg /etc/janus/vivait.plugin.meet.cfg /etc/janus/vivait.plugin.move.cfg En los archivos de configuracion, es obligatorio revisar:
interface = IP_NODO server_name = IP_NODO ice_enforce_list = IP_NODO (e ip publicas, si las hay)
meet_url = https://IP_NODO/meet# local_nodo_id = ID_NODO local_ip = IP_NODO (escucha [sip]) email_from_default_invitation = vivait-meet-18-04@mdtel.local smart_host = mdsmtp.mdtel.net
local_nodo_id = ID_NODO local_ip = IP_NODO (escucha [sip]) Fichero de logs: /var/log/janus.log
Los posibles problemas de conexión de los usuarios al portal habrá que analizarlos en la consola para analistas del navegador. La configuración necesaria en el portal de administración de VIVAit Call se puede consultar en este enlace. 3.6.17 Gran Hermano (GH)Gran Hermano (GH) controla el estado de las extensiones de diferentes nodos. Esto permite gestionar servicios como la movilidad avanzada, la retrollamada entre extensiones de diferentes nodos, el uso de BLF's por parte de los usuarios en movilidad,… Esquema de instalación:
GH solo se instala en un nodo. Recomendamos instalarlo en el nodo con menos carga. Si desconocemos cual es, lo instalaremos en la maquina con BDHIST.
3.6.17.1 Intz-ghEl demonio que gestiona el Gran Hermano es Intz-gh, que se encuentra en versión V0.1.0. El demonio tiene un fichero de configuración: /etc/Mdtel/intz-gh.conf con el siguiente aspecto: #
# Los nombres no pueden tener numeros
# Si el valor de una cadena contiene espacios, se pondra entre comillas dobles
# Los valores comentados indican valores por defecto
base
{
cfg
{
soy_demonio = 1
hay_syslog = 0
# Archivo con identificador de proceso: (-: /var/run/intz-nimitz.pid)
archivo_pid = -
# Archivo_traza: (-: stdout o /var/log/intz-nimitz.log si soy_demonio)
# No se usa si se activa hay_syslog
archivo_traza = -
}
cfg_recarga
{
# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
nivel_traza = 3
pruebas = 1
hay_flush_traza = 1
# traza_milisegundos = 1
}
sis
{
# No se usa. No modificar
subsistema = 0
}
gmp
{
# Numero de mensajes. No modificar
num_msj = 256# Numero de buffer. No modificar
num_buf = 256
}
}
supervision
{
puerto_escucha = 1116
}
supervision_recarga
{
to_periodo = 60
}
regexp
{
hay_regexp = 1
}
regexp_recarga
{
num_entradas = 32
inc_entradas = 128
max_entradas = 1024
}
vivaitcall
{
hay_vic = 1
puerto_escucha = 5556
identif = gh_000
entorno = gh
max_conx = 4
}
vivaitcall_recarga
{
to_solicitud = 10
to_desconexion = 10
ip_valida
{
# Hasta 32 bloques de direcciones validas
todas
{
ip = 0.0.0.0
msk = 0.0.0.0
}
localhost
{
ip = 127.0.0.1
msk = 255.255.255.255}
}
}
mysql
{
hay_mysql = 1
host = BDTR
usuario = nimitz
clave = phikau3iwCe4O0PP5b09ng==
base_datos = nimitz
}
mysql_recarga
{
to_resp = 5
}
gh1
{
hay_gh1 = 1
# umbrales para el numero de digitos de una extension
# sirve para saber si un peer es una extension o un enlace
exten_min_digi = 3
exten_max_digi = 8
# numero maximo de extensiones soportadas
exten_max = 500
# numero maximo de enlaces soportados
enla_max = 20
# numero maximo de retrollamadas activas concurrentes
retro_max = 50
# numero maximo de retrollamadas activas concurrentes para una extension como destino (max 31)
retro_max_b = 4
}
gh1_recarga
{
# tiempo maximo en segs. para activar una retrollamada tras finalizar llamada
to_retro_candidato = 60
# tiempo maximo en segs. que una retrollamada espera a que las extensiones esten libres
to_retro_activo = 300
# temporizador de limpieza de tablas en segs.
to_limpiar = 10
}
ias
{
hay_ias = 1
url = mdgh_rest
puerto = 8090
}ias_recarga
{
# tiempo maximo en segs. para conectar con asterisk para comandos
to_conx_cmd = 10
# periodo en horas para actualizar lista de id de nodos y sus direcciones ip
to_lista_nodos = 1
}
Los campos del fichero de configuración y su significado son los siguientes:
Para saber si GH funciona correctamente usaremos el comando nc localhost 1116, obteniendo resultados similares a los siguientes:
Los log's que genera el sistema se encuentran en: /var/log/intz-gh.log 3.6.17.2 mdgh.conf y Mdintz.confAdemás existen dos ficheros de configuración de Asterisk: /etc/asterisk/mdgh.conf: [servicios] retro_hay=yes subscripcion_hay=yes [rest] rest_red_ip=172.25.126.21 rest_red_msk=255.255.255.255 rest_puerto_escucha=8090 retro_exten_tech=SIP retro_contexto=Cen_InicioLlamada_GHRetro retro_to_descolgar=30 retro_A_cartel_fmt=retro: %s Y /etc/asterisk/Mdintz.conf [gh] host0=BDTR port0=5556 toConx=5 toRx=10 Los campos de los ficheros y su significado son los siguientes:
mdgh show Uso: mdgh show [config | exten <exten_num> | enla <peer>]] Por ejemplo: mdgh show exten 6140
mdgh show enla Trunk_MDtel
3.6.17.3 RetrollamadasEl funcionamiento será el siguiente:
Si una llamada va a buzón, salta a un grupo ACD, a una IVR...entonces NO habrá retrollamada (porque se considera contestada)
3.6.17.3.1 Acuerdos de funcionamiento
3.6.17.3.2 Cuestiones
3.6.18 GeneraConfEl GeneraConf es el webservice (war) que se utiliza en la plataforma VIVAit para generar ficheros de configuración a partir de las modificaciones realizadas por el usuario en las tablas de la Base de Datos del sistema à es un intermediario entre los portales y Asterisk. Es importante tener en cuenta que el proceso convierte tablas de Base de Datos en ficheros de configuración, pero NO genera Dialplan ni sincroniza locuciones. El GeneraConf se instala en el mismo servidor que el Tomcat, normalmente con el portal de administración. GeneraConf lee de la tabla Dat_Sincroniza, genera los ficheros de configuración y los coloca en su sitio. 3.6.18.1 Fichero de configuraciónGeneraConf es un proceso que no incorpora fichero de configuración. El proceso es llamado por los portales del entorno VIVAit (portal de administración y portal de alertas) siendo los propios portales los que han de incluir los parámetros necesarios. En el portal de administración de VIVAit Call tenemos que configurar la url para poder sincronizar los cambios realizados utilizando el proceso:
GeneraConf incluye el parámetro AlcanceSincroniza que se utiliza para distinguir el portal que deseamos sincronizar. Los portales (administración y alertas) deberán incluir este parámetro cuando llamen al generaConf:
A tal efecto se ha creado el siguiente enumerado: public enum TAlcanceSincroniza {
ALCANCESSINC_VIVAITCALL("10"),
ALCANCESSINC_ALERTAS("20");
private TAlcanceSincroniza(String text) {
this.text = text;
}
private final String text;
@Override
public String toString() {
return text;
}
}
Nuevo fichero /etc/MDtel/generaConf.properties : root@Homologacion-Corp1:~# cat /etc/MDtel/generaConf.properties simular=0 simDirMDtel=/tmp/MDtel simDirAsterisk=/tmp/Asterisk deshabExten=0 deshabCola=0 deshabBuzones=0 deshabCti=0 deshabRecGwd=1 deshabRecNodo=0 deshabRecProc=1 deshabRecCen=0 deshabMDcal=0 deshabArchAsterisk=0 deshabVoces=0 deshabEnInt=0 deshabEnExt=0 deshabMoh=0 deshabGrupos=0 deshabVdn=0 El valor 1 indica que GeneraConf simula el fichero asociado, cuando el valor es “0” no se genera la simulación. El proceso GeneraConf permite subir tanto locuciones como MOH desde el portal. Cuando subimos las locuciones a través del portal el GeneraConf se encarga de copiar las locuciones a un directorio temporal, posteriormente las colocará en los directorios definitivos correspondientes. 3.6.18.2 Ficheros de logsEl fichero con los log’s generado se encuentra en /var/log/Tomcat.x/generaConf.log.
3.6.19 Nodo WebRTCSe adjunta la documentación del nodo WebRTC:
3.7 Portales web corporativos
El portal de usuario VIVAit Call permite que determinadas funcionalidades del sistema puedan ser accesibles por los usuarios finales desde una interfaz mucho más cómoda y amigable que el telefónico.
3.7.1 Accesos Web
3.7.1.1 Permisos de aplicacionesSe crean a través del portal de administración VIVAit . Debe conocerse como funcionan los ejes [ver sección Portal de administracion - General - Ejes] y que pueden existir hasta seis aplicaciones creadas en la plataforma:
3.7.2 Portal de usuario
3.7.3 Portal Webcall
3.7.4 Portal para integración con Teams
3.7.5 Varios portales en una sola instalación
https://servidor/webs/vivait-user/ → Portal usuario https://servidor/webs/webfon2-solo → DialPad https://servidor/webs/webfon3 → Portal webphone 3.7.6 Portal Vivait Tracker
3.7.6.1 Introducción a Vivait Tracker 0.1
3.7.6.1.1 Arquitectura de Vivait Tracker 0.1
https://172.25.128.252/Tracker_Corp/
https://172.25.128.252/Tracker-Rest/tracker/.
3.7.6.1.2 Flujo completo del ciclo de datos
https://host/Traker_Corp/ El navegador carga la página web servida por Apache.
https://172.25.128.252/Tracker_Corporativo/
{fechaInicio: "", fechaFin: "", horaInicio: "", horaFin: "", listaExtensiones: [], listaGrupos: [],…}
POST https://172.25.128.252/Tracker-Rest/tracker/lista
3.7.6.1.3 Seguridad de Vivait Tracker 0.1
https://172.25.128.252/sercen/postautenticar1
https://172.25.128.252/Tracker-Rest/tracker/verificarToken
https://172.25.128.252/Tracker_Corp/
https://172.25.128.252/Tracker-Rest/tracker/extensiones
3.7.6.2 Descripción de la interfaz de Vivait Tracker 0.1
3.7.7 Portal VIVAit Supervisor
3.7.7.1 Introducción a Vivait Supervisor 2.0
3.7.7.1.1 Definiciones en Vivait Supervisor 2.0
3.7.7.1.2 Arquitectura de Vivait Supervisor 2.0
https://172.25.128.92/Vivait-Supervisor/
https://172.25.128.92/Vivait-Supervisor/.
3.7.7.1.3 Flujo completo del ciclo de datos
https://host/Vivait-Supervisor/ El navegador carga la página web servida por Apache.
https://172.25.128.92/Vivait-Supervisor/tablas/TablaComponenteDinamicoAjax
{idCompoCuadro: "15",…}
filtros : [{tipo: "titulo", valor: "titulo=Detalle"}, {tipo: "fechaDesde", valor: "FechaDesde="},…]
idCompoCuadro: "15"
INFO TablaDinamicosDaoImpl:607 - componerSQL SELECT DATE_FORMAT(DAT_LLAMADAS.D_HORA_INICIO,'%Y-%m-%d'),DATE ...
POST https://172.25.128.92/Vivait-Supervisor/tablas/TablaComponenteDinamicoAjax
3.7.7.1.4 Seguridad de Vivait Supervisor 2.0
https://172.25.128.92/sercen/postautenticar1
https://172.25.128.92/Vivait-Supervisor/
https://172.25.128.92/Vivait-Supervisor/tablas/TablaComponenteDinamicoAjax
3.7.7.1.5 Descripción de la interfaz de Vivait Supervisor 2.0
3.8 Monitorización en VIVAit
3.8.1 Generalidades de Zabbix
Servidores (CPU, RAM, disco…) Redes (routers, switches, tráfico) Bases de datos Aplicaciones Servicios en la nube Básicamente: te dice si algo funciona bien o falla. Qué hace exactamente Monitoriza Recoge datos continuamente: uso de CPU memoria espacio en disco latencia de red Genera alertas Si algo va mal: envía emails manda notificaciones lanza acciones automáticas Muestra gráficos históricos de rendimiento dashboards en tiempo real Cómo funciona Tiene varios componentes: Servidor Zabbix → recoge y analiza datos Agentes Zabbix → instalados en máquinas para enviar info Interfaz web → donde ves todo Ejemplo real Imagina que tienes un servidor: CPU al 95% → Zabbix lo detecta Te manda alerta Puedes actuar antes de que se caiga Por qué se usa Detectar problemas antes de que afecten a usuarios Controlar infraestructuras grandes Automatizar supervisión
3.8.2 Zabbix
Zabbix monitoriza los recursos de un equipo en forma remota, permite centralizar la información en un servidor que permite visualizar el monitoreo, cuenta con una interfaz de administración vía web y utiliza un mecanismo flexible de la notificación que permita que los usuarios configuren las alarmas basadas email para informar virtualmente cualquier acontecimiento. Esto permite una reacción rápida a los problemas del servidor. Para acceder al servidor Zabbix abrimos el navegador y ponemos la dirección de red (IP) de la maquina donde se encuentra instalado el servidor de Zabbix seguido de "/Zabbix.
Zabbix posee documentación tanto en wiki, foros y comunidades.Para ampliar la información se puede visitar: [Sitio oficial de Zabbix] 3.8.2.1 Glosario Zabbix
Se trata de una lista de conceptos básicos de Zabbix, pero para ampliar la información sobre otros términos, visite el [Sitio oficial de Zabbix].
3.8.2.2 Discovery
La funcionalidad discovery(detección) lista los dispositivos que se integran en nuestra red y el tipo de servicios que proporciona. Por ejemplo, si la empresa tuviera cien colas ACDs, y veinticinco VDNS, y en cada cola como veinte medidas, seria muy laborioso registrar una por uno cada uno. Gracias a esta funcionalidad, se descubre todas las interfaces de red que se tiene, automáticamente y tanto para colas nodos o IVR. Para utilizar esta funcionalidad , se hace el uso de dos script, que se instalan en el momento de instalación de Zabbix en el directorio "/usr/local/sbin", que son:
La explicación de como configurarla se encuentra en el manual oficial [| Zabbix detección de redes]. 3.8.2.3 NotificacionesNecesariamente, debe darse de alta al usuario y darse de alta el servidor de correo electrónico para poder ser capaz de enviar correos. Por otro lado, el formato del correo electrónico y las condiciones de envío de correo al usuario se configura en las acciones. Véase el [| manual oficial de Zabbix 2.2] 3.8.2.4 Usuarios
Cada usuario Zabbix se le asigna un nombre de usuario único , una contraseña y podemos indicarle que tipo de comunicación que posee, normalmente es vía email, pero puede ser vía a otro tipo de medios. Para mas información ver el [|| manual oficial ]. 3.8.2.5 Visualización
Con Zabbix es posible visualizar los datos como gráficos, pantallas, mapas y hasta presentaciones cambiantes, entre otros. En este apartado solo nombraremos características esenciales que se tendra que completar con el [| manual oficial] 3.8.2.5.1 Graphs
En Zabbix una gráfica sirve para representar gráficamente los resultados obtenidos de uno item o varios items. Los valores min / avg / max que Zabbix obtiene y representa son de un registro de datos de la tabla tendencias. 3.8.2.5.2 Screens
3.8.2.5.3 Maps
En Zabbix, un map (mapa) es una representación gráfica de la situacion de nuestros dispositivos en red. Es un escenario que muestra nuestra red, aplicaciones y servicios a través de figuras o iconos. Dichas figuras toman vida en respuesta a los eventos que se dan en nuestro entorno.
3.8.2.5.4 Monitorizar el estado de los raid
>hpacucli "ctrl slot=1 logicaldrive 1 show status" nos proporciona el estado de un raid (p.e. logicaldrive 1 (931.5 GB, 1): Interim Recovery Mode). La orden: >hpacucli "ctrl slot=1 logicaldrive all show status" nos proporciona el estado de todos los raid. p.e.: logicaldrive 1 (931.5 GB, 1): Interim Recovery Mode logicaldrive 2 (1.8 TB, 1): OK. Para conseguir información genérica el comando ctrl all show config detail nos muestra mucha información y podemos saber el modelo de disco físico que lleva instalado para poder comprar el modelo antes de "operar".
3.8.3 Zabbix en MDtel
3.8.3.1 Configuraciones de Zabbix
3.8.3.1.1 Agentes Zabbix
El agente de Zabbix puede recoger datos:
3.8.3.1.2 Configurar agente de forma pasiva
Tras la configuración del fichero, debemos reiniciar el servicio de los agentes.
3.8.3.1.3 Configurar agente de forma activa
Para configurar el agente de Zabbix necesitamos acceder a la máquina que actuará como agente, y en el directorio /etc/zabbix modificar el fichero zabbix_agentd.conf e indicar cual es la dirección de red (IP) del servidor Zabbix.
El parámetro User_parameters tiene un formato de este estilo:
El nombre de la medida se refiere al nombre que demos a la aplicación , no hace falta que exista una aplicación con ese nombre en Zabbix, y el comando , es el comando remoto que tiene que ejecutar el servidor Zabbix. Posiblemente necesita darse permisos para ejecutar el comando y siempre debe devolver un valor (un numero o un tiempo) que el servidor Zabbix puede manejar. Tras la configuración del fichero, debemos reiniciar el servicio de los agentes.
3.8.3.2 Scripts del Servidor Zabbix
Después de realizar la Instalación de Zabbix correctamente. Se han creado otros ficheros scripts (scripts propios de mdtel) que facilitarán la petición del servidor a los agentes activos, para poder parametrizar todos los elementos del negocio que suelen monitorizarse. Dependiendo de lo que vaya a monitorizarse necesitaremos algún script o todos. Algunos nos informan sobre elementos de negocio, saber si asterisk funciona , monitorizar el CTI (lanzara nc localhost 1111) , controlar el Intz-Nimitz, comprobar si funciona motalsal, ect. Cada script se exportara a los host, para que pueda facilitar los datos que pide el servidor Zabbix y configurarse. Por ejemplo,para monitorizar las llamadas en curso del ACD, agentes conectados, agentes desconectados, etc. Todos los scripts se deben colocar en el directorio /usr/local/sbin con permisos 755, su nombre es parecido a "zabbixSenderXXXXX.pl"
Se crea una tarea programada en linux para poder ejecutarse los scripts, programando el tiempo en que debe ejecutarse. Si visualizo que "............" aparece:
3.8.3.2.1 zabbixSenderACDBD.pl
Uso: Obtiene diversos valores por cada cola, estados de agente por cola y estados de agente generales. Ubicación: Servidor BDTR. Parámetros: Ruta al archivo de configuración (Por ejemplo: /etc/MDtel/zabbixSenderACDBD.pconf) Archivo de configuración: zabbixSenderACDBD.pconf
3.8.3.2.2 zabbixSenderACD.pl
Uso: Obtener el PID de Asterisk para revisar si se ha reiniciado en caso de que cambie. Ubicación: Servidor ACD. Parámetros: Ruta al archivo de configuración (Por ejemplo: /etc/MDtel/zabbixSenderACD.pconf). Archivo de configuración: zabbixSenderACDBD.pconf.
3.8.3.2.3 zabbixSenderCTI.pl
Uso: Obtener estado y los distintos valores de vivait-cti. Ubicación: Servidor donde se ejecute vivait-cti. Normalmente el servidor ACD. Parámetros:
3.8.3.2.4 zabbixSender-intz-nimitz.pl
Uso: Obtener estado y los distintos valores de intz-nimitz. Ubicación: Servidor donde se ejecute intz-nimitz. Parámetros:
3.8.3.2.5 zabbixSenderMotorSal.pl
Uso: Obtener estado y los distintos valores de motorSal. Ubicación: Servidor donde se ejecute motorSal. Parámetros:
3.8.3.2.6 zabbixSenderMyACDSuperv.pl
Uso: Obtener estado y los distintos valores de myAcdSuperv. Ubicación: Servidor donde se ejecute myAcdSuperv. Parámetros:
3.8.3.2.7 zabbixSenderRecordNodo.pl
Uso: Obtener estado y los distintos valores de recordNodo. Ubicación: Servidor donde se ejecute recordNodo. Parámetros:
3.8.3.2.8 zabbixSenderRecordCentral.pl
Uso: Obtener estado y los distintos valores de recordCentral. Ubicación: Servidor donde se ejecute recordCentral. Parámetros:
3.8.3.2.9 Dimensionamiento del servidor (Startpollers)
El servidor Zabbix puede hacer peticiones a los agentes de las medidas que necesita o quiere. O en caso contrario los agentes envian en un tiempo determinado la información al servidor. Para recibir todas estas peticiones necesitamos los pollers. Los poller son los procesos encargados de recibir todas las peticiones de medidas. Aumentaremos su cantidad dependiendo de la necesitad que tengamos. Para ello podemos observar la queue , que es la encargada de almacenar un listado de todas las cosas que están pedidas para medirse y recibirse. SI por ejemplo esta cola (queue) muestra mas de mil medidas seguramente estos pollers sean un cuello de botella y habrá que aumentar su numero. 3.8.3.2.10 Templates
Zabbix cuenta con templates (plantillas) que facilitan la tarea de "Registrar Equipos y Dispositivos" y agregarles métricas; acelerar el despliegue de las tareas de supervisión en un host; aplicar cambios masivos a tareas de supervisión. En mdtel hemos creado plantillas propias que facilitan estos procesos, los cuales necesitaremos importar templates. Las plantillas están vinculados directamente a los hosts individuales, por tanto se necesitaran utilizar en cada host. Automáticamente, cada template rellena por item las aplicaciones, trigers, alarmas,gráficos,... etc. A continuación, se muestran los distintos bloques de funciones de la instalación en función de cada template:
3.8.3.2.11 Resumen
* El template OS Linux tiene asociado el Template App Zabbix Agent. Una base de datos unificada es una base de datos de tiempo real junto a una base de datos de replica 3.8.3.2.12 Importar templates
Las plantillas propias de mdtel se encuentran en la ruta "/usr/src/nimitz/archivos" y empiezan con el nombre de "TemplateXXX.xml".
Hay opciones varias opciones a elegir para importación de templates, pero podemos dejar por defecto las señaladas y pulsar el botón "import".
3.8.4 Configuración para un primer funcionamiento de Zabbix
Se describe una básica configuracion de Zabbix para cualquier equipo que utilice Windows o linux. Pues mediante la definición de hosts, items, triggers y acciones, Zabbix permite efectuar un monitoreo efectivo de plataformas IT heterogéneas. 3.8.4.1 Configuración de los equipost (host) para la monitorización
Existen dos tipos de host:
Las opciones basicas para configurar un host son las siguientes:
Cuando termine, haga clic en nel boton "Save". Su nuevo "Host" debe ser visible en la lista de "Host registrados".Despues el zabbix, intentara configurarse el zabbix para conectarse a la IP.... cada x tiempo hace un barrido.
3.8.4.1.1 Comprobación de disponibilidad del host
Para saber si todo esta bien debemos ver la Z de disponibilidad.
3.8.5 Indicar que plantilla (template) tendrá el host
3.8.5.1 Asignar items al host
Todos lo ITEMS se agrupan por HOST, esto significa que cada HOST tiene sus propios "Módulos que recogen datos del Host". Para agregar un nuevo módulo vamos a "Configuration → Hosts" y localizamos el "Host" al cual queremos agregarle un nuevo "Item". Parametros o campos a rellenar para una configuración básica :
Cuando termine, haga clic en Guardar. El nuevo elemento debe aparecer en la ITEMLIST. Para mas informacion [ver documentación Zabbix]
3.8.5.1.1 Ver la información recolectada por el item
Después de definir el "Item" vamos a revisar la información que esta recolectando. . La información comenzará a ser recolectada según el tiempo que le indicamos en el "Item". La espera para recibir la información varía dependiendo del tiempo de recolección del item, la mayoría suele ser aproximadamente al minuto de generar el "Item". Zabbix le ofrece la opción de visualizar la información en forma gráfica (sencilla). En el "Item" en lista haga clic en la columna "History - Graph". Si en un caso usted no observa información le recomendamos:
3.8.5.2 Configurar los Triggers para los host
A partir de la información que captura los agentes , el servidor de Zabbix comienza a efectuar la recolección de estos items en la base de datos. Con esto se tiene un registro histórico de tales mediciones, que pueden ser tan simples como un simple ping hasta datos de uso de disco, memoria, cpu, etc. A partir de los datos que se reciben de los agentes lo que sigue es definir y configurar Triggers, que son evaluaciones que hace Zabix de estos datos para determinar la existencia de un Problema en un dispositivo.
Para configurar un "Trigger o Disparador" seleccionamos "Configuration → Hosts" localizamos el "Host" de ejemplo que creamos y luego hacemos clic en "Trigger", después haga clic en "Create Trigger". Parametros o campos a rellenar para una configuración básica :
3.8.5.2.1 Comprobar el estado del trigger
Podemos ver el estado del "Trigger" en "Monitoring → Triggers".El color en caso de que se active depende de la severidad definida. Por ejemplo, si el "Trigger" esta en color verde indica que el resultado de la métrica se mantiene por debajo de la condición que indicamos. Por el contrario si el resultado esta "sobre lo indicado" su color sera rojo. 3.8.5.3 Asociar un Action al trigger
Una action(acción) sirve para configurar un mensaje de alerta o una accion para Zabbix, ante un problema. Hay varias formas de gestionar un problema a través de una acción:
Para crear una configuración en "Configuration-Actions". La explicación esta en la [[ https://www.zabbix.com/documentation/2.0/manual/config/notifications/action documentación de Zabbix]]. -->
4 Funcionalidades específicas en VIVAit
4.1 Mecanismo de prioridad adaptativaEl mecanismo de prioridad adaptativa permite en una plataforma VIVAit Suite establecer prioridades en las que se tenga en cuenta el tiempo de espera de las llamadas en cola, proporcionando una alternativa al mecanismo de prioridad absoluta que existe por defecto 4.1.1 IntroducciónEste documento presenta una propuesta de mecanismo de asignación de llamadas en colas a agentes basado no solo en las prioridades de agente a cola, sino en un factor de corrección de prioridad derivado del tiempo de espera de una llamada 4.1.2 Terminología
Nota.- En terminología Asterisk el aumento de prioridad corresponde con números descendentes, es decir, 4.1.3 Mecanismo de asignación de llamadasEn el momento en que exista un agente disponible para recibir llamada, el agente recepcionará la llamada con mejor prioridad de llamada (menor número). La prioridad de llamada para cada llamada se establecerá de la siguiente manera: - Agentes con prioridad de grupo ACD de 1 a 99 utilizarán el mecanismo convencional de asterisk de prioridad absoluta; será útil para grupos ACD críticos o en Call Centers muy convencionales Si un agente tiene prioridad menor de 100 en grupos ACD y hay llamadas en dichos grupos, estas llamadas serán atendidas por el agente con prioridad absoluta. - Agentes con prioridad de colas de 100 en adelante; se utilizará el siguiente mecanismo de prioridad ponderada:
En una configuración de igualdad de prioridad de agente y objetivo de servicio, el tiempo de espera influiría de manera determinante (más o menos en función del peso) en la asignación de la siguiente llamada El peso podrá adquirir tres posibles valores: 0, 1 y 10 - Calculo prioridad de llamada: se calcula por llamada cada vez que un agente queda libre - Agente atiende llamada con mejor prioridad de llamada
4.2 Marcación salienteDentro del ACD hay un comportamiento especial que es la marcación saliente. Esta puede ser de tres tipos:
4.2.1 Esquema de funcionamientoLos contactos se agrupan en listas para su facilidad de asignación a campañas, aunque finalmente lo que se asigna a una campaña es un contacto. Las campañas tienen estrategias. Las estrategias definen como se ha de llamar (del primero al último, sólo los pares, etc.). Tienen una serie de parámetros que dependiendo de la estrategia pueden tener distinta utilidad. Desde el punto de vista de la base de datos, las estrategias se definirían en la tabla ACD_CLASES_ESTRATEGIAS y se les da valor en la tabla ACD_ESTRATEGIAS_MARCADOR. Una vez establecida la campaña y asignados sus contactos y dependiendo del modo de marcación (que se define en las colas) el proceso motorSal crea los intentos de marcación (siempre y cuando no estén en las listas Robinson), que serán leídos por el proceso myAcdSuperv que los convierte en llamadas para el Asterisk. 4.2.2 Flujo de estadosEl flujo de estados es el reflejado en la figura siguiente: Los diferentes estados de un contacto son:
4.2.3 Carga de contactos4.2.3.1 DescripciónA continuación se explica la configuración y funcionamiento de la utilidad encargada de asignar contactos a campañas. 4.2.3.2 ConfiguraciónEl archivo de configuración recibe el nombre de cargaContactos.pconf. Este archivo reside en /etc/MDtel. El formato se describe en la tabla siguiente. Hay que tener en cuenta que las columnas empiezan a numerarse en 0.
4.2.3.3 FuncionamientoPara ejecutar la utilidad se debe teclear la siguiente orden en la línea de comandos: cmd# cargaContactos.pl /<ruta hasta el conf>/cargaContactos.pconf <archivo CSV> El archivo con los contactos deberá ser un CSV con los campos separados por ';'. La utilidad parsea el archivo conforme a la distribución indicada en la configuración y crea las correspondientes entradas en las tablas ACD_CONTACTOS y ACD_CONTACTOS_CAMPANNAS. La utilidad crea un log en /var/log/cargaContactos.log en el que vuelca toda la operativa. Por pantalla se va mostrando un lista con el ID asignado al contacto y el ID de campaña al que se le ha asignado. Un ejemplo de fichero de carga de contactos sería el siguiente: # # Configuracion de cargaContactos.pconf # # Conexion de base de datos $db='nimitz'; $dbHost = 'localhost'; $dbPort = '3306'; $dbUsuario = 'nimitz'; $dbClave = 'LA QUE SEA'; $diasCaducidad='300'; $rutaGrab = '/var/spool/MDtel/contactos'; $idCampanna = '31'; $idLista = '32'; $obsoletos = 0; $codCli = '1'; $nombreCon = '2'; $apellido1 = '3'; $apellido2 = '4'; $empresa = '5'; $direccion1 = '6'; $direccion2 = '7'; $codPostal = '8'; $localidad = '9'; $provin = '10'; $email = '11'; $valFijo_1 = '12'; $valFijo_2 = '13'; $valFijo_3 = '14'; $valFijo_4 = '15'; $valMovil_1 = '16'; $valMovil_2 = '17'; $valMovil_3 = '18'; $valMovil_4 = '19'; $edad = '20'; $nOpc1 = '21'; $nOpc2 = '22'; $nOpc3 = '23'; $nOpc4 = '24'; $cOpc1 = '25'; $cOpc2 = '26'; $cOpc3 = '27'; $cOpc4 = '28'; $prioridad = '29'; $tipoTarea = '30'; 4.2.4 Comportamiento de reprogramaciones de llamadas en función del estado del agenteSe ha preparado la siguiente maqueta: Campaña saliente. Cola saliente progresiva. Dos agentes logados en VIVAit Suite. En el formulario de la llamada se indica: llamada redirigida Se selecciona el "check dirigida" Las posibilidades de prueba son dos: "Cualquier agente" y "Solo agente" Resultados son los siguientes:
4.3 MovilidadLa movilidad es una función integral de las comunicaciones en la empresa. Cualquier empleado (usuario) es móvil en cierto grado, ya sea dentro o fuera de la organización. La solución óptima debe proporcionar continuidad de servicios y acceso a nuestros servicios, sin importar donde estemos. 4.3.1 Ofrecer movilidad a un usuarioPara permitir la movilidad a un usuario, puede ser en el momento de crear o editar un usuario en el apartado Administración de usuario en General del portal de administración VIVAit. Asignándole un numero login (numero personal corporativo para el usuario) y una clave login ( se debe asignar una clave por defecto, pero puede cambiarla en el [|portal de usuario]). Además, de crear un permiso de la aplicación Centralita a cualquier nivel, desde el apartado Permisos de usuarios en General del portal de administración VIVAit.
4.3.2 ¿Cómo funcionan las extensiones?Primeramente el usuario debe tener los ejes apropiados en la tabla COM_USUARIOS_APLICACION (aplicación centralita). La extensión debe de tener un teléfono y por tanto un modelo de teléfono asociado. Es tan simple como especificar la extensión, el usuario y la clave de este. Para corroborar el funcionamiento de esta hay dos métodos: * CLI asterisk: mdintz qry * nimitz bd extenEntraUsuarioMovil 25001 20001 1234 Y como resultado obtenemos lo siguiente: mdintz Variables: El usuario con el login numérico 20001 se ha "movido" a la extensión 25001 Ahora nos quitamos de esa extensión mediante el siguiente comando: mdintz qry * nimitz bd extenSaleUsuarioMovil 25001 Resultado del comando: mdintz Variables: Las pruebas anteriores han sido con extensiones con movilidad y con usuario con/sin propietario. Ahora las realizamos con extensiones sin movilidad mdintz qry * nimitz bd extenEntraUsuarioMovil 25002 20001 1234 Obteniendo: mdintz Variables: Como era lo previsible no nos deja "movernos" a esa extensión ya que no tiene movilidad. Si un usuario ya se ha movido a una extensión y se mueve a otra, el sistema lo deslogará de la primera para logarlo en la segunda. mdintz qry * nimitz bd extenEntraUsuarioMovil 21000 20001 1234 Con salida: mdintz Variables: * Dialplan Para llamar a la función de movilidad hay que marcar el 9992. Nota.- Para comprobar que se realiza todo correctamente habría que mirar las trazas de Asterisk
4.4 Desvío por calendarioSe ha desarrollado una nueva funcionalidad para VIVAit Call que permite establecer desvíos de extensiones y usuarios en base a una programación horaria. Una vez puesta en marcha esta funcionalidad , el orden de desvíos de usuarios o extensión en VIVAit Call será:
mensajería.
encuentra en una franja horaria con desvío activo.
incondicional.
conectado, por ocupado o por no contesta).
- Portal de usuario: Cada usuario podrá definir desvíos programados en el mismo entorno en el que define el resto de desvíos. - Portal de administración de VIVAit: Desde dicho portal se podrán gestionar por un administrador los desvíos programados de usuarios y extensiones de todo el sistema. - Portal de administración de Baikal: Desde dicho portal se podrán gestionar el servidor de calendarios. - Entorno estándar de gestión de calendarios: desde un entorno estándar de gestión de calendarios (p. ej Thunderbird), y con protocolo CalDav, se podrán realizar gestiones de todos los calendarios de un entorno VIVAit. Este entorno sería una alternativa al portal de administración (no de usuario), debido a que: 1. Se deberá configurar dicho entorno para acceder con el usuario de administración de calendarios. 2. Se podrán ver todos los calendarios del sistema (de todas las extensiones y usuarios).
Baikal se ubicará por defecto en el mismo nodo en el que se encuentre el portal de administración de VIVAit.
4.4.1 BaikalComo se ha indicado en el apartado de arquitectura, VIVAit Call utilizará un servidor de calendarios Baikal para almacenar la información referente a desvíos programados de usuarios y extensiones. Baikal es un servidor CalDAV ligero. Los datos se almacenan en una base de datos Mysql (diferente a la base de datos de VIVAit). En el caso de su uso en VIVAit Call:
Configuración de Mysql
Baikal usa su propia base de datos (diferente a la de VIVAit)
Acceder a Mysql y cambiar clave de root ------------------------- mysql_secure_installation mysql -u root -p mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘ LACLAVEDEVIVAITPARAMYSQL ’; -------------------------
Crear base de datos de baikal ------------------------- mysql> create database baikal; ------------------------- 2. Crear usuario baikal ------------------------- create user 'baikal'@'localhost' identified by 'ivivabaikal'; ------------------------- 3. Asignar privilegios a usuario baikal ------------------------- grant all on baikal.* to ‘baikal'@'localhost’; -------------------------
http://<IPServer>/baikal/html/
Tener correctamente configurado en la tabla WEB_CONFIGURACION el usuario y clave de la base de datos de Baikal; esto permitirá configurar Baikal (usuario, calendarios…) sin tener que acceder a su interfaz de administración. Se configura:
A nivel de base de datos
En ajuste de sistema
Donde:
La administración desde Baikal solo será necesaria en caso de no poder utilizar los frontales desarrollados para la gestión de la funcionalidad.
- calendarios (existirá uno por extensión o usuario).
2. En caso de no existir programación de desvío, devolverá vacío:
4.5 GrabaciónLa grabación en VIVAit Call está diseñada para ser lo mas flexible posible. 4.5.1 ConfiguraciónSi deseamos grabar, debemos activar que alguno de los dispositivos/elementos que intervienen en la llamada se grabe. Estos dispositivos/elementos son:
Por otro lado necesitaremos que la llamada pase por un nodo que sea grabador, es decir, que si la llamada esta configurada para que se grabe pero no pasa por ningún nodo grabador, la llamada no se grabará. Al configurar un nodo existen cuatro campos que intervienen en la grabación. 'Grabador' Se configura en el portal en la sección general/nodos. Este campo corresponde con el campo B_ES_GRABADOR de la tabla COM_NODOS , este campo define si el nodo va a grabar las llamas que pasen por el que necesiten ser grabadas y no se estén grabando ya. Es un campo booleano los posibles valores en el portal son si/no y en la base de datos 1/0.
'Modo grabación infraestructura' Modo grabación de infraestructura-Graba por petición
Se configura en el portal en la sección general/nodos. Este campo define si van a grabar las llamadas que se enruten en este nodo. Campo E_ENRU_GRABAR de la tabla COM_NODOS que usa los valores del enumerado TTipoEnruGrabar.
Se configura en el portal en la sección general/nodos. Define que instancia del recordCentral es la encargada de tratar las grabaciones de este nodo. Para aumentar el rendimiento a la hora de traerse las grabaciones, se pueden definir varias instancias de proceso recordCentral, este campo define cual de estas instancias se encargara de este nodo. 4.5.2 Vivait TrackerDesde VIVAit Supervisor, que es la aplicación dirigida a Supervisores, ofrece la posibilidad de supervisar y gestionar grupos ACD, agentes, asignaciones, prioridades,etc. Se puede obtener acceso directo a las aplicaciones de grabación (VIVAit tracker) Esquematico actual del proyecto tracker
2º Si la ubicación de la grabación es local, mira la ruta de esta y se procede a la escucha o descarga de esta. 3º Si la ubicación de la grabación es remota, entra en escena el proxy. Es el que realiza la petición. 4º Si utilizamos el tracker windows, este, como el tracker web, llama primero al web service remote login para la autenticación y tema de Permisos. 5º Para descargar o escuchar una grabación desde el tracker windows, se llama al web service servidor de grabaciones pasándole simplemente el ID de segmento.mp3. Este web service, con el ID de segmento, se encarga de determinar la ubicación de la grabación. Esquematico actual del proyecto tracker
2º Si la ubicación de la grabación es local, mira la ruta de esta y se procede a la escucha o descarga de esta. 3º Si la ubicación de la grabación es remota, se realiza una petición al host remoto. El tipo de petición vendrá fijada por base de datos (http, https, ftp,ftps) 4º Si utilizamos el tracker windows, este, como el tracker web, llama primero al web service remote login para la autenticación y tema de permisos (comunicación https extremo a extremo). 5º Para descargar o escuchar una grabación desde el tracker windows, se llama al web service servidor de grabaciones pasándole simplemente el ID de segmento.mp3. Este web service, con el ID de segmento, se encarga de determinar la ubicación de la grabación. Volver arriba
4.6 Enrutamiento
4.6.1 Enfoque inicial4.6.2 FuncionamientoEl proceso de enrutamiento, como vimos en el esquemático, se compone de dos fases:
Se asume que existen rutas directas entre todos los nodos de la red. Se asume que están directamente enrutadas todas las direcciones IP involucradas, tanto nodos, como terminales. Se asume que todas las facilidades están disponibles en todos los nodos, aunque es posible que la implementación sea diferente entre ellos. Los datos de entrada básicos al proceso de enrutamiento (pdEntr) son:
4.6.2.1 Fase preenrutamientoLa fase de preenrutamiento (basada en la tabla CEN_PRE_RUTA) se usa en todas las llamadas entrantes, tanto internas, como externas. Permite desarrollar un “prerouting” estándar para ACD y para telefonía corporativa. Los datos de entrada al proceso de enrutamiento son iguales a los del proceso global de enrutamiento, excepto en que este proceso no usa el nodo de entrada ya que es independiente de éste. Los datos de salida de la fase de preenrutamiento:
El proceso de preenrutamiento consiste en seleccionar un único registro de la tabla CEN_PRE_RUTA y, con sus valores y con los valores de entrada al proceso, generar los datos de salida. Un posible tipo de salida es "Volver a preenrutar". Esto permite realimentar el proceso un máximo de "max_pre_ruta_regs" veces (en archivo .conf) para simplificar configuración. Sólo tiene sentido realimentar si se ha hecho alguna modificación en los datos de selección de registro, ya que en caso contrario se produciría un bucle que el proceso de preenrutamiento es capaz de detectar y evitar. Para elegir el registro de CEN_PRE_RUTA, se tienen en cuenta los datos de entrada de la llamada, de modo que se cumpla con todos los puntos siguientes:
Si no se encuentra ninguna entrada adecuada, quiere decir que es una llamada prohibida y se devuelve el tipo de destino "No existe". Puede conseguirse un destino "por defecto" diferente, creando una entrada que encaje siempre para cada categoría: C_ORIGEN_ENT, C_ORIGEN_ENT_MIN_DIGITOS, C_ORIGEN_ENT_MAX_DIGITOS, C_ORIGEN_ENT_EXPR, C_DESTINO_ENT_PREF, N_DESTINO_ENT_MIN_DIGITOS, N_DESTINO_ENT_MAX_DIGITOS y C_DESTINO_ENT_EXPR a valor NULL. Una vez elegida una entrada, ésta puede transformar o sustituir el valor de ID_CATEGORIA, CALLER_NAME, CALLER_NUM, DESTINO, COD_CLIENTE y/o EJE1_MSK a la salida del proceso. Si ID_CATEGORIA_SAL es cero, se propaga a la salida el valor de la entrada. En caso contrario, se sustituye. Si C_CALLER_NAME está vacío, se mantiene el valor hubiese a la entrada. En caso contrario, se sustituye. C_CALLER_NUM puede contener una cadena que identifica el nuevo CALLER_NUM. Además, si la cadena comienza por los caracteres que se indican, el significado es especial:
Cada vez que se utilice una preruta, se incrementará el valor de N_CONTA si el valor de N_UMBRAL es mayor que cero. Un valor N_UMBRAL mayor que cero permite modificar el destino de salida cuando el valor de actual de N_CONTA (antes de incrementarse) supere o sea igual el valor de N_UMBRAL. Si se cumple la condición indicada, se usa como destino tras el preenrutamiento, los valores de los campos E_TIPO_DESTINO_SAL_2 y C_DESTINO_SAL_2. Si el valor de N_UMBRAL es menor o igual a cero o si N_CONTA es inferior a N_UMBRAL, se usa como destino tras el preenrutamiento, los valores de los campos E_TIPO_DESTINO_SAL_1 y C_DESTINO_SAL_1. Con este mecanismo de N_CONTA y N_UMBRAL, se pretende facilitar el discriminar a los llamantes reincidentes, cuando sea necesario. Un proceso periódico externo debe encargarse de poner a cero o decrementar el valor de N_CONTA. Como resultado de los procesos de filtrado y de verificación anteriores, se habrá obtenido un TIPO_DESTINO_SAL y un C_DESTINO_SAL a partir de los campos con sufijo "_1" o "_2", con una metodología similar al caso C_CALLER_NUM. C_DESTINO_SAL_x puede contener cadena que permite obtener el nuevo destino. Además, si la cadena comienza por los caracteres que se indican, el significado es especial:
Información de salida del proceso de preenrutamiento: Cuando TIPO_DESTINO_SAL_x toma los valores que se indican, el proceso global de enrutamiento sólo requiere de preenrutamiento y la información a devolver se obtiene dependiendo de TIPO_DESTINO_SAL_x:
El campo B_GENERAR_SEGMENTO de la tabla CEN_PRE_RUTA indica al proceso de preenrutamiento que es preciso generar un segmento de tipo "preenrutamiento". En el segmento generado, se rellena el campo C_ETIQUETA1 del nuevo segmento con el valor que contiene el campo homónimo del registro asociado en la tabla CEN_LISTA_PRE_RUTAS. 4.6.2.2 Fase de enrutamiento en casos en que el destino no es externoDatos de entrada al proceso de enrutamiento externo: iguales a los de salida del proceso de preenrutamiento (pdPreSale), uniéndose a éstos los datos globales de entrada al proceso (pdEntr). Datos de salida de la fase de enrutamiento: iguales que los del proceso global de enrutamiento (pdSale). Específicamente y sólo para los casos en que el destino es una extensión (tipo de destino extensión, usuario de telefonía corporativa o agente) es cuando son válidos los datos correspondientes al buzón asociado y los datos de los posibles desvíos previstos. También en este caso, se prevén dos posibles rutas, una se corresponde con el acceso a la extensión en el nodo principal de ésta y la otra en el nodo secundario. En el resto de tipos de destino, sólo se prevé una ruta que puede incluir o no un enlace internodal.
4.6.2.3 Fase de enrutamiento en el caso de destino externoDatos de entrada al proceso de enrutamiento externo: iguales a los de salida del proceso de preenrutamiento (pdPreSale), uniéndose a éstos los datos globales de entrada al proceso (pdEntr). Datos de salida de la fase de enrutamiento: iguales que los del proceso global de enrutamiento (pdSale). Se elige los primeros "max_ruta" registros (configurado en archivo .conf) en CEN_DESTINOS_EXTERNOS unido con CEN_RELACION_DESTINOS_ENLACES_EXTERNOS que, teniendo en cuenta los datos de entrada al proceso de enrutamiento, cumpla con todos los puntos siguientes:
Aparte de la longitud del campo C_DESTINO_ENT_PREF, se usa N_PRIORIDAD como campo para ordenar los registros y seleccionar lo "max_ruta" primeros. Una vez que un registro es válido, se descartan todos los registros cuyo C_DESTINO_ENT_PREF es diferente del primero seleccionado. Como resultado de los procesos de filtrado y de verificación anteriores, se habrá obtenido hasta un máximo de "max_rutas" valores para posibles rutas. Las posibles propagaciones y transformaciones en los datos de cada ruta son función de los datos de cada registro seleccionado: CALLER_NAME_nn: Si C_CALLER_NAME está vacío, se propaga el valor de entrada. En caso contrario, se sustituye. CALLER_NUM_nn: Sale de C_CALLER_NUM que puede contener una cadena que identifica el nuevo CALLER_NUM_n. Además, si C_CALLER_NUM comienza por los caracteres que se indican, el significado es especial:
C_DESTINO_SAL_nn: Se obtiene a partir de C_DESTINO_SAL que puede contener una cadena que identifica el nuevo destino. Además, si la cadena comienza por los caracteres que se indican, el significado es especial:
RUTA_NODO_nn: Sólo se usa si el nodo de salida es diferente del nodo de entrada. Contiene la cadena de marcación para ir la nodo que soporta DESTINO_SAL_nn. Sale del campo C_FORMATO_DIAL (sustituyendo variables) correspondiente al tipo de dispositivo del enlace exterior. RUTA_SAL_nn: Es el campo C_DATO_ASTERISK obtenido a partir del registro en la tabla CEN_ENLACE_EXTERIOR que se corresponde con ID_ENLACE_EXTERIOR de la tabla CEN_RELACION_DESTINOS_ENLACES_EXTERNOS.
4.7 Control de ancho de bandaPara el control de ancho de banda, primero hemos de tener en consideración que una llamada puede tener asociadas hasta cuatro sedes
Además hemos de tener en cuenta que el audio de la conversación podrá ir:
Cuando se va a cursar una llamada de terminal A a terminal B, el proceso de enrutamiento del nodo A devuelve 4 variables de canal al dialplan:
El valor de cada variable es una cadena del tipo AB.wwww.xxxx.y.z donde cada valor es:
Por otro lado tenemos que tener en cuenta que el dialplan tiene control de las llamadas que cada sede puede cursar De esta forma, cuando existe una nueva llamada el dialplan aplica la fórmula, suma el resultado al número de llamadas en curso y lo compara con el máximo...si el resultado es mayor que le máximo la llamada no se cursará por congestión Configuraremos el ancho de banda por sede en el portal de administración y el consumo que hace cada llamada en la variable AB_CONSUMO_LLAMADA del fichero ext_MDtel_particular.conf de cada nodo de conmutación; el valor por defecto es 32
4.8 MDflowMDflow es una aplicación Asterisk que se basa en la unidad de medida TIC (un TIC, por defecto, corresponde a 500ms, pero es configurable). Los términos que usaremos para la explicación de la funcionalidad y que son relevantes para comprender, implantar, mantener e interpretar la misma son:
como tal, que contiene un proceso de conmutación de voz Asterisk incorporado. Un cluster activo/pasivo son dos ordenadores, pero un solo nodo. Típicamente existen nodos de tres tipos (si bien los dos primeros pueden combinarse en uno solo): - Nodo de registro para telefonía corporativa - Nodo Gateway - Nodo de registro ACD
500ms; nótese que los valores devueltos por el sistema siempre estarán medidos en segundos, aunque internamente use el TIC como base de tiempos.
establecerse por nodo VIVAit.
segundo que se están estableciendo en un determinado flujo. Nótese que no se hace referencia a duración de las mismas o medición de llamadas previamente establecidas
que se están estableciendo en un determinado flujo
estableciendo por segundo en un nodo VIVAit. Nótese que no se hace referencia a duración de las mismas o llamadas previamente establecidas
de llamadas por segundo; el mecanismo md flow entrará en funcionamiento cuando el sistema entre en estado de congestión.
considera apta para ser descartada (si bien el tratamiento se definirá en dialplan, el funcionamiento lógico previsto es descartarla).
ha de progresar por no quedar colas de DNIS disponibles (se explicará y justificará el funcionamiento más adelante).
- Solo medir . En este caso md flow se encontrará en paso. - Medir y realizar control de flujo.
El módulo permite difinir distintas cajas de medida y control (FLUJO). Se pueden definir n cajas y ubicarlas en Asterisk (por ejemplo en un enlace externo, una caja que agrupe todos los enlaces, en los enlaces interiores y en extensiones). Cada una de las cajas, o flujos, mide y controla la tasa de llamadas en cada TIC → Se mostrará en llamadas/segundo. El FLUJOmide lo que está pasando en un determinado punto del dialplan; un ejemplo claro será la primera línea de éste, cuando se crea una llamada de un enlace externo. El FLUJOpermite controlar y medir, y está pensado para enviar información a Zbbix. Desde el punto de vista del Dialplan, se trata de una aplicación con dos parámetros:
Para encolar internamente cada FLUJO tiene un número de colas definidas y cada DNIS está en una cola. Cuando entra una llamada y se invoca a la caja con el DNIS de esa llamada, o se crea nueva cola, o se encola en una existente para ese DNIS si la hubiera. El número de colas deberá ser el numero de DNIS masivo. Una cola de un DNIS se libera de ese DNIS cuando queda vacia (por eso los ocasionales no tendrán cola habitualmente y los masivos si). Cuando entra una llamada si el DNIS tiene cola se encola, si no tiene y hay libres se crea una nueva y si no hay colas libres (maximo configurable), la llamada pasa. (se asume que las masivas quedarán en colas y que las ocasionales pasarán). Para sacar llamadas (desencolar), saco una de cada cola (fair queues). No podemos configurar que de unas colas se atiendan mas llamadas que de otras. En control de flujo se indica para cada caja la tasa de entrada en llamadas/s. El mecanismo de control de flujo entra en funcionamiento cuando el sistema entra en congestión. Las llamadas que se encolan tienen un retardo adicional tipico de un TIC. Cuando una llamada entra en cola se define un tiempo máximo en cola (por defecto 5 segundo); si se alcanza ese tiempo se considera llamada desbordada, la aplicación la saca con una etiqueta y sigue con el dialplan que podrá tirarla, podrá derivarla...
Como se puede apreciar en el diagrama de flujo:
Y existe otra encolada para el DNIS se encola en dicha cola. Y no existe cola para el DNIS se crea la cola y encola SI quedan colas disponibles. Si no quedan colas disponibles la llamada sale con etiqueta “agujero”.
Una cola se crea cuando hay una llamada con un DNIS no encolado y si existen aún colas disponibles. Una cola se libera de un DNIS cuando no quedan llamadas en cola para ese DNIS. Las colas no tienen una profundidad máxima. Las colas tienen un tiempo de permanencia. Las llamadas se van atendiendo equitativamente en cada cola, todas tienen el mismo peso, saliendo con etiqueta “Ok”
Una llamada se saca de la cola con etiqueta “desborda” si pasa el máximo tiempo configurado en cola
Al respecto de las llamadas que salen con etiqueta “agujero”, cabría pensar que si no quedan colas disponibles las llamadas con etiqueta agujero serian llamadas candidatas a ser descartadas a DNIS ocasionales y se les dará prioridad. Téngase en cuenta que en circunstancias de congestión, las colas estarán típicamente ocupadas por DNIS masivos, y no por DNIS ocasionales, de manera que es altamente probable que cualquier DNIS masivo ya tenga cola asignada y que al agujero vayan DNIS ocasionales; todo esto pasa por realizar un buen dimensionamiento del máximo de colas (que debiera ser muy parecido al número de DNIS masivos)
4.8.1 Proceso de instalación de mdflow en una instalación existente; → como se "añade" mdflow en un VIVAit existenteEl proceso de instalación depende de dos ficheros:
Tras poner ambos ficheros en sus respectivos lugares, nos iremos a /usr/src/MDtel/asterisk/ y compilaremos el asterisk make && make install Para que el asterisk cargue el nuevo módulo entrarems en la consola de asterisk (asterisk -r) y ejecutaremos module load app_mdflow.so
4.8.2 Parámetros de configuración
- estad_interv_seg: define intervalo de medida, si bien las informaciones siempre las proporcionará en tasa de llamadas/s.
-En_paso: (0 o 1); si está a 1 solo mide, siempre devuelve OK; si “en_paso” es 0 hay control de flujo. -Tasa_sal_seg: tasa máxima de salida de llamadas/s configuradas para ese flujo; saldrán ese valor de llamadas por segundo con etiqueta “Ok”. -Dnis_max: número de colas máximo en ese flujo. Si se configura 1 cola, se comporta como cola única, no se hace caso al DNIS. -Dnis_umbral_masivo: no vale para control, pero sí para medida; nos define que un DNIS es masivo si hay tantas o más llamadas encoladas que las indicadas en este parámetro; si está solo en paso no se mide porque no hay colas. -to_desborda_seg: Tiempo máximo en cola de una llamada; pasado el tiempo sale con "desborda"
4.8.3 Fichero de configuraciónEl fichero de configuración se ubica en /etc/Asterisk/MDflow.conf ; su contenido por defecto es el siguiente:
[general] ; Periodo de tiempo para medidas de tasa de llamadas tick_ms=500 ; Periodo de tiempo para calculos estadísticos estad_interv_seg=10 ; Máximo 9 flujos ([flujo_1] a [flujo_9]) ; Tiene que empezar en [flujo_1] y ser correlativos [flujo_1] ; Nombre asignado al flujo. Se usa en las salidas de los comandos flujo=Cen_Inicio_SIP ; "En paso" ; 1: No se controla el flujo (siempre etiqueta OK), sólo se mide ; 0: Se controla la tasa de llamadas y se hacen medidas en_paso=0 ; Tasa máxima de llamadas (expresada en llamadas/seg) que etiquetadas OK ; Para un tick de 500 ms, este valor debe ser par tasa_sal_seg=4 ; Número máximo de dnis a encolar. Resto se etiquetan como AGUJERO dnis_max=2 ; Umbral para el número de llamadas encoladas en un dnis, que hace que ; éste sea calificado como "masivo" ; El valor mínimo es 2 dnis_umbral_masivo=8 ; Límite de tiempo en segundos, transcurrido el cuál se etiqueta DESBORDA to_desborda_seg=5 [flujo_2] flujo=Cen_Inicio_TrunkSip en_paso=1 tasa_sal_seg=20 dnis_max=100 dnis_umbral_masivo=10 to_desborda_seg=5 [flujo_3] flujo=Cen_TrunkInternos en_paso=1 tasa_sal_seg=20 dnis_max=100 dnis_umbral_masivo=10 to_desborda_seg=5 4.8.4 Ejemplo claro de invocación de mdflow desde dialplan y posterior tratamiento en función de las etiquetas de salidaPor defecto el MDflow se pondrá en los siguientes ficheros de Asterisk:
ya que son los diferentes contextos de entrada de llamadas. ;--------------------------------------------------------------------------------
[Cen_TrunkInternos]
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
exten => _[*#%0-9a-zA-Z].,1,NoOp(MDENTTR_X****EXTEN=${EXTEN}**CID=${CALLERID(NUM)}*)
same => n,Set(__ENR_PEER_ORIGEN=${CHANNEL(peername)})
;-------------------------
; Control de flujo
;-------------------------
same => n,Set(HORAINI=${EPOCH})
same => n,MDflow(3,${EXTEN})
same => n,Log(NOTICE,MDFLOWTRUNKINT**RES=${MDflowRes}**SEG=$[${EPOCH}-${HORAINI}]**PEER=${ENR_PEER_ORIGEN}**CID=${CALLERID(NUM)}*)
same => n,ExecIf($["${MDflowRes}"="DESBORDA"]?HangUp(1))
same => n,Set(GROUP()=TrunkInternos)
same => n,Set(valor=)
same => n,ExecIf($["${LlamTrunkInternos}" = ""]?Set(valor=300):Set(valor=${LlamTrunkInternos}))
same => n,ExecIf($[${GROUP_COUNT(TrunkInternos)} > ${valor}]?HangUp(1))
same => n,Log(NOTICE,MDGROUPTRUNKINT**GROUPCOUNT=${GROUP_COUNT(TrunkInternos)}**PEER=${ENR_PEER_ORIGEN}**CID=${CALLERID(NUM)}*)
[Cen_Inicio_TrunkSip]
;exten => _[*#%0-9a-zA-Z].,1,NoOp(MDINITRUNKSIP**EXTEN=${EXTEN}**CID=${CALLERID(NUM)}*)
exten => _[*#%0-9].,1,NoOp(MDINITRUNKSIP**EXTEN=${EXTEN}**CID=${CALLERID(NUM)}*)
; TTipoIdEnrutamiento = (
; tipoIdEnrutamiento_ninguno=0, // quitar no sabemos
; tipoIdEnrutamiento_dispositivo=10,
; tipoIdEnrutamiento_cola=20
; );
same => n,Set(ENR_PEER_ORIGEN=)
same => n,Set(__ENR_TIPO_ORIGEN=10)
same => n,Set(__ENR_ORIGEN=${ID_DISPOSITIVO})
;same => n,Set(__SPAN_IN=)
;same => n,Set(__CANAL_IN=)
;same => n,Set(__TIPO_LLAMADA=${TIPOLLAMADAENT})
same => n,NoOp(ENR_TIPO_ORIGEN=${ENR_TIPO_ORIGEN}***ENR_ORIGEN=${ENR_ORIGEN})
;-------------------------
; Control de flujo
;-------------------------
same => n,Set(HORAINI=${EPOCH})
same => n,MDflow(1,${EXTEN})
same => n,Log(NOTICE,MDFLOWTRUNKSIP**RES=${MDflowRes}**SEG=$[${EPOCH}-${HORAINI}]**CID=${CALLERID(NUM)}*)
same => n,ExecIf($["${MDflowRes}"="DESBORDA"]?HangUp(1))
same => n,Set(GROUP()=${CHANNEL(peername)})
same => n,Set(valor=)
same => n,ExecIf($["${maxLlam}" = ""]?Set(valor=300):Set(valor=${maxLlam}))
same => n,ExecIf($[${GROUP_COUNT(${CHANNEL(peername)})} > ${valor}]?HangUp(1))
same => n,Log(NOTICE,MDFLOWTRUNKSIP**GROUPCOUNT=${GROUP_COUNT(${CHANNEL(peername)})}**PEER=${CHANNEL(peername)}**CID=${CALLERID(NUM)}*)
Esto desaparecera cuando el dialplan sea unificado ahora es necesartio para que pase el ucid del acd
[Cen_Inicio_SIP]
exten => _[*#%0-9].,1,NoOp(MDINIEXTENSIP**EXTEN=${EXTEN}**CID=${CALLERID(NUM)}*)
same => n,Set(ENR_PEER_ORIGEN=)
same => n,Set(__ENR_TIPO_ORIGEN=10)
same => n,Set(__ENR_ORIGEN=${ID_DISPOSITIVO})
same => n,Set(__SPAN_IN=)
same => n,Set(__CANAL_IN=)
;same => n,Set(__TIPO_LLAMADA=${TIPOLLAMADASAL})
;-------------------------
; Control de flujo
;-------------------------
same => n,Set(HORAINI=${EPOCH})
same => n,MDflow(2,${EXTEN})
same => n,Log(NOTICE,MDFLOWEXTSIP**RES=${MDflowRes}**SEG=$[${EPOCH}-${HORAINI}]**CID=${CALLERID(NUM)}*)
same => n,ExecIf($["${MDflowRes}"="DESBORDA"]?HangUp(1))
same => n,NoOp(ENR_TIPO_ORIGEN=${ENR_TIPO_ORIGEN}***ENR_ORIGEN=${ENR_ORIGEN})
Para recibir el UCID de otros vivait (move,meet)
4.8.5 Comandos básicos de diagnósticoComandos básicos (dentro de la consola asterisk)
Preproduccion-Corp0*CLI> mdflow show stats mdflow Estadística global: activo=1 supervEjecutando=1 tickMs=500 estadIntervSeg=10 flowNum=3 mdflow flujo=[flujo_1]/Cen_Inicio_TrunkSip: flowInd=1 enPaso=0 flowInd=1 tasaUltIntervMs=10003 flowInd=1 tasaUltEntra=0 flowInd=1 tasaUltSaleOk=0 flowInd=1 tasaUltSaleDesborda=0 flowInd=1 tasaUltSaleAgujero=0 flowInd=1 tasaUltSaleError=0 flowInd=1 llamUltColaMax=0 flowInd=1 dnisUltColasUsoMax=0 flowInd=1 dnisUltMasivoMax=0 flowInd=1 retardoUltMedioMs=0 mdflow flujo=[flujo_2]/Cen_Inicio_SIP: flowInd=2 enPaso=1 flowInd=2 tasaUltIntervMs=10003 flowInd=2 tasaUltEntra=0 flowInd=2 tasaUltSaleOk=0 flowInd=2 tasaUltSaleDesborda=0 flowInd=2 tasaUltSaleAgujero=0 flowInd=2 tasaUltSaleError=0 flowInd=2 llamUltColaMax=0 flowInd=2 dnisUltColasUsoMax=0 flowInd=2 dnisUltMasivoMax=0 flowInd=2 retardoUltMedioMs=0 mdflow flujo=[flujo_3]/Cen_TrunkInternos: flowInd=3 enPaso=0 flowInd=3 tasaUltIntervMs=10003 flowInd=3 tasaUltEntra=0 flowInd=3 tasaUltSaleOk=0 flowInd=3 tasaUltSaleDesborda=0 flowInd=3 tasaUltSaleAgujero=0 flowInd=3 tasaUltSaleError=0 flowInd=3 llamUltColaMax=0 flowInd=3 dnisUltColasUsoMax=0 flowInd=3 dnisUltMasivoMax=0 flowInd=3 retardoUltMedioMs=0
Preproduccion-Corp0*CLI> mdflow show dnis mdflow Estado global: activo=1 supervEjecutando=1 tickMs=500 estadIntervSeg=10 flowNum=3 mdflow flujo=[flujo_1]/Cen_Inicio_TrunkSip: flowInd=1 enPaso=0 flowInd=1 dnisColaNum=1 no se controlan dnis mdflow flujo=[flujo_2]/Cen_Inicio_SIP: flowInd=2 enPaso=1 flowInd=2 dnisColaNum=2 flowInd=2 dnisUltMasivoMax=0 mdflow flujo=[flujo_3]/Cen_TrunkInternos: flowInd=3 enPaso=0 flowInd=3 dnisColaNum=1 no se controlan dnis
Preproduccion-Corp0*CLI> mdflow show config mdflow Configuración global: activo=1 supervEjecutando=1 tickMs=500 estadIntervSeg=10 estadFases=20 flowNum=3 mdflow flujo=[flujo_1]/Cen_Inicio_TrunkSip: flowInd=1 enPaso=0 flowInd=1 llamSalTick=1 flowInd=1 llamSalSeg=2 flowInd=1 dnisColaNum=1 flowInd=1 dnisUmbralMasivo=8 flowInd=1 llamDesbordaToSeg=5 mdflow flujo=[flujo_2]/Cen_Inicio_SIP: flowInd=2 enPaso=1 flowInd=2 llamSalTick=1 flowInd=2 llamSalSeg=2 flowInd=2 dnisColaNum=2 flowInd=2 dnisUmbralMasivo=10 flowInd=2 llamDesbordaToSeg=5 mdflow flujo=[flujo_3]/Cen_TrunkInternos: flowInd=3 enPaso=0 flowInd=3 llamSalTick=1 flowInd=3 llamSalSeg=2 flowInd=3 dnisColaNum=1 flowInd=3 dnisUmbralMasivo=8 flowInd=3 llamDesbordaToSeg=5
MDlow.conf; se puede realizar con la plataforma en funcionamiento normal pero no se recomienda realizarlo en momentos de alto tráfico; los cambios de configuración se aplican tras un comando “mdflow reload” Preproduccion-Corp0*CLI> mdflow reload
recomienda su uso sistemático. Preproduccion-Corp0*CLI> mdflow debug 4.8.6 Comandos básicos de diagnósticoEl MDflow está activo si los comandos anteriormente mencionados devuleven datos, si no devuelven nada es que ha ocurrido un error al cargar el módulo en asterisk. Los comandos de diagnostico empleados son los mismos que hemos mencionado anteriormente más el mdflow debug on, que muestra lo mismo que el mdflow show stats pero lo hace para cada llamada que pase por la parte del dialplan que hemos mencionado antes.
4.8.7 Asignación de flujosPor defecto, en la instalación irán definidos los siguientes flujos:
Típicamente son las llamadas que provienen de los operadores en los Gatewais. Está configurado en el contexto Cen_InicioLlamada_TrunkSip.
registradas en el nodo. Está configurado en el contexto Cen_InicioLlamada_SIP.
Está configurado en el contexto Cen_TrunkInternos
Estos son flujos genéricos que irán definidos en la instalación, se podrán generar mas si la instalación lo requiere, por ejemplo, si la instalación tiene primarios se podrá definir un flujo para las llamadas que vienen por el contexto Cen_InicioLlamada_Dahdi.
4.8.8 Configuración de cola únicaLa configuración de colas es útil cuando el número de DNIS es finito y queremos priorizar los números llamados menos frecuentemente sobre los masivos. Cuando el número de DNIS es muy grande la configuración mediante colas no ofrece un funcionamiento óptimo, las colas serán ocupadas cada una con un DNIS diferente y todos los DNIS que no tengan cola libre saldrán por la salida “agujero”. Para tener un control del flujo en estas situaciones se ha creado el concepto de cola única, su comportamiento es que todas las llamadas van a la misma cola y no hay llamadas que obtengan la salida “agujero” y por tanto todas tienen la misma prioridad. Este comportamiento se obtiene poniendo el parámetro de configuración del flujo dnis_max con el valor 1 (dnis_max=1). Un ejemplo típico de utilización de este tipo de configuración sería en el flujo 3 de los nodos gateways. Este flujo tendrá las llamadas que el resto de los nodos envían al exterior y los DNIS no coincidirían en su mayoría. 4.8.9 MDflow y las trazasEl diaplan devulelve trazas del MDflow mdiante mensajes NOTICE, por lo que filtrando en el full de asterisk por la cadena MDFLOW irán apareciendo los diferentes retornos de ejecucion del MDFLOW (cuanto tiempo ha tardado en ejecutarse, qué devuelve el MDflow para esa llamada (agujero, desbordada, ok o error))
4.9 Estadísticas en VIVAit CallComo configurar estadísticas para VIVAit Call
5 Diagnósticos y operaciones básicas en VIVAit
5.1 Arranque y apagado de la plataforma
En general el arranque y apagado de cada nodo de una plataforma VIVAit es el estándar de un procedimiento ordenado de apagado en una máquina linux: "Shutdown -h now" o comando de apagado inmediato o programado equivalente
5.2 Cluster VIVAit
5.2.1 Introducción a cluster
5.2.2 Funcionamiento en cluster
Por lo que las máquinas balancean en los casos siguientes: Tal y como esta definido el cluster de MDtel, este comprueba conectividad con la otra máquina que lo forma y con un punto de confianza. Si la máquina no tiene conectividad con la otra y si con el punto de confianza es que el servidor está vivo, mientas que si no tengo conectividad ni con la otra máquina ni con el punto de confianza es que el muerto soy yo, por lo que balanceo. Por lo que las máquinas balancean en los casos siguientes:
Y no balancea en los siguientes:
5.2.2.1 Píldoras5.2.2.1.1 Prevenir que un nodo vuelva a tomar el control tras volver a estar operativoCuando queremos evitar que un recurso vuelva al nodo en el que estaba originalmente tras la recuperación del nodo, ejecutaremos la siguiente orden. pcs resource defaults resource-stickiness=100 5.2.2.1.2 Borrar un recursopcs resource delete DRBDFs 5.2.2.1.3 Sincronización del drbdPara sincronizar el drdb tras un fallo tenemos que determinar cuál es el nodo que tiene los datos buenos y cuál es el que vamos a sobrescribir sus datos En el nodo que vamos a sobrescribir los datos ejecutaremos los siguientes comandos. drbdadm secondary all drbdadm disconnect all drbdadm invalidate all drbdadm connect all
drbdadm connect all
5.2.2.1.4 Mover un recurso de nodoPara mover un recurso de nodo utilizaremos el siguiente comando. pcs resource move IP-ASTER pcs resource clear IP-ASTER Esto crea restricciones locales para evitar que el recurso vuelva a este nodo (Puede tener prioridad de ejecución en este nodo y haría que volviera a este nodo automáticamente al estar online). La restricción que crea banea el nodo para este recurso, si queremos quitar esta restricción creada. pcs resource clear DRBDfsASTER Mirar si existe alguna manera de mover un recurso sin que se creen estas restricciones locales
5.2.2.1.5 Habilitar/deshabilitar recursosLos comandos para habilitar y deshabilitar recursos en un nodo son Si especificamos un tiempo, pcs esperara este tiempo y retornara 0 si el recurso a parado o 1 si el recurso no ha parado en el tiempo especificado. pcs resource disable resource_id [--wait[=n]] Si especificamos un tiempo, pcs esperara este tiempo y retornara 0 si el recurso a arrancado o 1 si el recurso no ha arrancado en el tiempo especificado. pcs resource enable resource_id [--wait[=n]] pcs config show pcs resource cleanup resource_id pcs resource clear pcs resource refresh Borra los Failed Actions de un recurso: pcs resource cleanup [recurso] 5.2.2.1.6 Notas sincronismoSi tenemos este fallo: root@VC-PROC-SUMA-ALC-02:/tmp# cat /proc/drbd version: 8.4.10 (api:1/proto:86-101) srcversion: 7922D81D3881494EB149253 0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r----- root@VC-PROC-SUMA-ALC-01:~# cat /proc/drbd version: 8.4.10 (api:1/proto:86-101) srcversion: 7922D81D3881494EB149253 0: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown r-----
drbdadm connect all En el nodo secundario drbdadm -- --discard-my-data connect all ********* En secundario: ************** drbdadm secondary drbdASTER drbdadm disconnect drbdASTER drbdadm -- --discard-my-data connect drbdASTER ********* En primario: **************** drbdadm primary drbdASTER drbdadm disconnect drbdASTER drbdadm connect drbdASTER
5.2.2.1.7 Configuración para KVMvi /etc/multipath.conf
-----------------------------
defaults {
user_friendly_names yes
}
blacklist {
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]"
devnode "^vd[b-z]?[0-9]"
devnode "vda"
devnode "vda1"
devnode "^drbd[0-9]*"
}
systemctl restart multipathd.service vi /etc/corosync/corosync.conf
------------------------------------
totem {
version: 2
cluster_name: CLmdtel
transport: knet
crypto_cipher: aes256
crypto_hash: sha256
token: 12000
}
nodelist {
node {
ring0_addr: nodo-vc-01
name: nodo-vc-01
nodeid: 1
}
node {
ring0_addr: nodo-vc-02
name: nodo-vc-02
nodeid: 2
}
}
quorum {
provider: corosync_votequorum
two_node: 1
}
logging {
to_logfile: yes
logfile: /var/log/corosync/corosync.log
to_syslog: yes
timestamp: on
}
systemctl restart corosync Revisar que están arrancados después de reinicar: Corosync Pacemaker multipath
5.2.2.2 Ejemplo de cluster con mysql y asteriskEn este ejemplo vamos a crear un cluster que maneje mysql y Asterisk como servicios separados. Para lograr esto vamos a necesitar que el drbd maneje dos particiones separadas y tener dos ip flotantes, una para cada servicio. 5.2.2.2.1 Requisitos previosLos requisitos previos antes de comenzar la instalación del cluster son: • Nodos correctamente actualizados (update/upgrade). • Conexión a internet. • NTP configurado.
5.2.2.2.2 Particionado (En los 2 nodos)Para la instalación de los dos recursos drbd necesitamos tener dos particiones que vamos a crear añadiendo un disco duro en cada una de las máquinas. Lo añadimos mediante el Gestor de Máquinas Virtuales de la máquina 999-sgestion. Los tamaños serán los siguientes: • Corporativo -> 50Gb • BDTR -> 100Gb Lo siguiente es crear la partición en cada servidor: Vamos a utilizar la herramienta parted seguido del dispositivo que queremos particionar. En este caso el espacio que vamos a particionar está en el dispositivo /dev/vdc. parted /dev/vdc Una vez ejecutado el comando entraremos en una consola de la aplicación. Ejecutando el comando (parted) print free Obtenemos las particiones que tiene el dispositivo actualmente y el espacio libre que disponemos. En este ejemplo disponemos de 50Gb de espacio libre que es el que vamos a utilizar para las 2 particiones necesarias. Lanzamos el comando mkpart para realizar la primera partición que será para mysql. (parted) mkpart El nombre que le vamos a dar a la partición es DRBD-MYSQL. El Tipo de sistema de ficheros ext4. Luego nos pedirá el principio de la partición, en el ejemplo vamos a comenzar en 198Gb y vamos a finalizar en 550Gb. Realizaremos la segunda partición volviendo a ejecutar el mismo comando (parted) mkpart
lsblk Realizamos este mismo proceso en el otro nodo del cluster.
5.2.2.2.3 Gestión de particiones con LVM (En los 2 nodos)Crearemos las 2 particiones lvm en los 2 servidores con los siguientes comandos. En este ejemplo las particiones que queremos utilizar son /dev/sda5 para mysql y /dev/sda6 para Asterisk, esto podrá cambiar en las instalaciones. Realizamos este mismo proceso en el otro nodo del cluster.
5.2.2.2.4 Instalación y configuración del drbd (En los 2 nodos)Instalaremos el paquete drbd8-utils. En Ubuntu 20.04 drbd-utils apt-get install drbd-utils Ahora tenemos que editar los archivos de configuración del drbd, estos archivos están en el directorio /etc/drbd.d Primero editaremos la configuración general, el archivo global_common.conf y le añadiremos en la sección net lo siguiente. vi /etc/drbd.d/global_common.conf Si tenemos problemas con los backup que realiza Vodafone en las máquinas virtuales añadir: net {
# protocol timeout max-epoch-size max-buffers
# connect-int ping-int sndbuf-size rcvbuf-size ko-count
# allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri
# after-sb-1pri after-sb-2pri always-asbp rr-conflict
# ping-timeout data-integrity-alg tcp-cork on-congestion
# congestion-fill congestion-extents csums-alg verify-alg
# use-rle
protocol C;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
}
Ó (nota Centro de Servicios) net {
ping-int 30;
timeout 20;
connect-int 30;
protocol C;
after-sb-0pri discard-older-primary;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
}
Creamos el archivo para el recurso mysql con el nombre drbd-mysql.res. vi drbd-mysql.res El contenido del archivo es: resource drbdMYSQL {
on VC-CORP-Cetelem-Mad-cl1 {
device /dev/drbd0;
disk /dev/mapper/vg_DRBD--MYSQL-lv_DRBD--MYSQL;
address 10.10.10.10:7788;
meta-disk internal;
}
on VC-CORP-Cetelem-Mad-cl2 {
device /dev/drbd0;
disk /dev/mapper/vg_DRBD--MYSQL-lv_DRBD--MYSQL;
address 10.10.10.11:7788;
meta-disk internal;
}
}
vi drbd-aster.res
resource drbdASTER {
on VC-CORP-Cetelem-Mad-cl1 {
device /dev/drbd1;
disk /dev/mapper/vg_DRBD--ASTER-lv_DRBD--ASTER;
address 10.10.10.10:7789;
meta-disk internal;
}
on VC-CORP-Cetelem-Mad-cl2 {
device /dev/drbd1;
disk /dev/mapper/vg_DRBD--ASTER-lv_DRBD--ASTER;
address 10.10.10.11:7789;
meta-disk internal;
}
}
Realizamos este mismo proceso en el otro nodo del cluster. Los ficheros de configuración los podemos copiar de un nodo a otro.
5.2.2.2.5 Configuración de /etc/hosts (En los 2 nodos)Tenemos que configurar correctamente los nombres de las máquinas en el archivo /etc/hosts. vi /etc/hosts El contenido de este archivo variará según la configuración, para este ejemplo.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||




























