Diferencia entre revisiones de «Manual de operación plataforma VIVAit»
Línea 28: | Línea 28: | ||
[[File:Arquitectura-Puesto-Agente.jpg|900px]] | [[File:Arquitectura-Puesto-Agente.jpg|900px]] | ||
+ | |||
+ | |||
+ | |||
+ | === Arquitectura del nodo WebRTC === | ||
+ | |||
+ | [[File:Arquitectura nodo WebRTC.png |900px]] | ||
+ | |||
+ | |||
+ | |||
Revisión del 13:38 22 feb 2022
Producto: | VIVAit Call
VIVAit Suite |
---|
Sumario
- 1 Introducción
- 2 Arquitectura
- 3 Descripción de los elementos, diagnósticos y operaciones
- 3.1 Versiones de módulos
- 3.2 Sistema Operativo
- 3.3 Matriz de conmutación
- 3.4 Servicios networking
- 3.5 Bases de datos (BBDD)
- 3.6 Tabla Dat_Log
- 3.7 Procesos propios
- 3.7.1 bdCentral
- 3.7.2 bdNodo
- 3.7.3 Intz-Nimitz
- 3.7.4 motorSal
- 3.7.5 MyACDSuperv
- 3.7.6 Proceso escoba
- 3.7.7 recordCentral
- 3.7.8 recordNodo
- 3.7.9 Vivait-CTI
- 3.7.10 Phoneprov-TFTP
- 3.7.11 Introducción al aprovisionamiento
- 3.7.12 Watchdog
- 3.7.13 Proceso de Backup
- 3.7.14 CHAT
- 3.7.15 MEET
- 3.7.16 Gran Hermano (GH)
- 3.7.17 GeneraConf
- 3.8 Requerimientos de conectividad
- 3.9 Gateways
- 3.10 Servidor de grabación
- 3.11 Reporting
- 4 Otros Diagnósticos y operaciones básicas
- 4.1 Arranque y apagado de la plataforma
- 4.2 Grabación
- 4.2.1 Configuración de la grabación en la plataforma corporativa
- 4.2.2 Como configurar la grabación bajo demanda
- 4.2.3 Comprobar que el servidor de grabación está activo
- 4.2.4 Comprobar que los nodos están conectados al servidor de grabación
- 4.2.5 Comprobar que un nodo tiene activo el agente de grabación
- 4.2.6 Comprobar que un nodo está subiendo archivos de grabación al servidor
- 4.2.7 Comprobación de grabaciones que se hayan quedado enganchadas en un nodo
- 4.2.8 Comprobación del estado de ocupación del almacenamiento temporal de grabaciones en un nodo.
- 4.3 Escuchas e intrusiones en asterisk
- 4.4 Calendarios
- 4.5 Syslog de agentes
- 4.6 Generación de un Core
- 5 Funcionalidades específicas
- 5.1 Mecanismo de prioridad adaptativa
- 5.2 Marcación saliente
- 5.3 Movilidad
- 5.4 Grabación
- 5.5 Enrutamiento
- 5.6 Control de ancho de banda
- 5.7 MDflow
- 5.7.1 Proceso de instalación de mdflow en una instalación existente; → como se "añade" mdflow en un VIVAit existente
- 5.7.2 Ejemplo claro de invocación de mdflow desde dialplan y posterior tratamiento en función de las etiquetas de salida
- 5.7.3 Comandos básicos de diagnóstico
- 5.7.4 Comandos básicos de diagnóstico
- 5.7.5 MDflow y las trazas
- 5.8 Estadísticas en VIVAit Call
- 6 Puesto de trabajo
- 7 Funcionamiento de la plataforma en modo emergencia
- 8 Accesos Web
- 9 Elementos monitorizados del sistema
- 9.1 Generalidades de Zabbix
- 9.2 Zabbix en MDtel
- 9.2.1 Configuraciones de Zabbix
- 9.2.1.1 Agentes Zabbix
- 9.2.1.2 Scripts del Servidor Zabbix
- 9.2.1.2.1 zabbixSenderACDBD.pl
- 9.2.1.2.2 zabbixSenderACD.pl
- 9.2.1.2.3 zabbixSenderCTI.pl
- 9.2.1.2.4 zabbixSender-intz-nimitz.pl
- 9.2.1.2.5 zabbixSenderMotorSal.pl
- 9.2.1.2.6 zabbixSenderMyACDSuperv.pl
- 9.2.1.2.7 zabbixSenderRecordNodo.pl
- 9.2.1.2.8 zabbixSenderRecordCentral.pl
- 9.2.1.2.9 Dimensionamiento del servidor (Startpollers)
- 9.2.1.3 Templates
- 9.2.1 Configuraciones de Zabbix
- 9.3 Configuración para un primer funcionamiento de Zabbix
- 10 Integraciones con servicios externos
- 11 Marcador Predictivo
- 12 Canales digitales en VIVAit Suite
1 Introducción
En este documento se describe la arquitectura general de la plataforma VIVAit, detallando aquellos procesos principales que componen cada uno de los elementos del sistema, y sus principales elementos de diagnóstico 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
2.1 Arquitectura del puesto de agente
2.2 Arquitectura del nodo WebRTC
3 Descripción de los elementos, diagnósticos y operaciones
Las siguientes tablas definen los principales elementos software de la plataforma VIVAit, que son detallados en apartados siguientes:
Elemento | Instancias | Propósito | Producto | Observaciones |
---|---|---|---|---|
Ubuntu Server LTS 64 bits | Uno por servidor | VIVAit Call
VIVAit Suite |
Actualmente (Jul-2021) 20.04
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 |
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 13 Certified |
Dialplan ACD by MDtel | Uno por servidor ACD | Configuración de voz | VIVAit Suite | En el futuro se unificará con corporativa |
Asterisk 13 Certified by MDtel | Uno por servidor corporativo/gateway | Núcleo de conmutación de voz basado en Asterisk 13 y modificado por MDtel | VIVAit Call
VIVAit Suite |
Actualmente asterisk estándar (10/15)
La instalación contempla descargar de la red el más actualizado, siempre CERTIFIED" |
Dialplan corporativo | Uno por servidor corporativo/gateway | Configuración de voz | VIVAit Call
VIVAit Suite |
En el futuro se unificará con ACD |
Elemento | Instancias | Propósito | Producto | Observaciones |
---|---|---|---|---|
MySQL 5.5 | Donde haya BBDD de cualquier tipo (incluso zabbix) | Motor de Base de Datos | VIVAit Call
VIVAit Suite |
A efectos prácticos va a ser en todos los servidores con casi total seguridad |
BBDD tiempo real | Una por sistema | Base de Datos sobre la que trabaja todo el entorno de tiempo real | VIVAit Call
VIVAit Suite | |
BBDD réplica | Una por sistema multinodo | Base de Datos para acceso a información de reporting…y similar | 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) |
BBDD copia | Uno por servidor corporativo/gateway | Copias de tablas de configuración para respaldo de la misma | VIVAit Call
VIVAit Suite |
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 |
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
Sistemas grandes pueden contemplar mas de un intz-nimitz central" |
Intz-gh | En el nodo con menos carga | Conocer el estado de las extensiones de diferentes nodos | VIVAit Call | Solo va en un nodo. Recomendamos instalarlo en el nodo con menos carga. Si desconocemos cual
es, instalarlo en la maquina con BDHIST. |
vivait-cti | Uno por servidor ACD | Interfaz entre VIVAit Desk, supervisor y el manager de asterisk | VIVAit Suite | |
myAcdSuperv | Uno por servidor ACD | Recopilador de datos de asterisk y actualiza en la BBDD
Genera llamadas en el marcador |
VIVAit Suite | |
motorSal | Uno por sistema con ACD | Motor de marcador saliente automático | VIVAit Suite | Solo si hay marcación saliente
Junto a la BBDD de tiempo real |
recordCentral | Uno por sistema | Servidor de grabaciones, se conectan los agentes a el | VIVAit Call
VIVAit Suite |
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
VIVAit Suite |
|
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 | ||||
Mover grabaciones a nube |
Elemento | Instancias | Propósito | Producto | Observaciones |
---|---|---|---|---|
Tomcat 7 | Uno por servidor con portales | Servidor de aplicaciones JAVA | VIVAit Call
VIVAit Suite | |
Portal de administración | Uno por sistema | Portal de administración del sistema | VIVAit Call
VIVAit Suite |
Bajo proyecto puede existir más de uno |
Portal usuario | Uno por sistema | Portal de usuario, para acceso a buzones, su configuración | VIVAit Call | Bajo proyecto puede existir más de uno |
Tracker web | Uno por sistema | Portal de seguimiento de llamadas | 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 Bajo proyecto puede existir más de uno |
Monitor | Uno por sistema | Portal de monitores de pared de Call Center | VIVAit Suite | Bajo proyecto puede existir más de uno |
Apache | Uno por servidor de calendarios | Servidor de portales WEB | VIVAit Call
VIVAit Suite |
|
Servidor de calendarios | Uno por sistema | Aloja calendarios para su uso en diferentes entornos de NIMITZ | VIVAit Call
VIVAit Suite |
Bajo proyecto puede existir más de uno |
Elemento | Instancias | Propósito | Producto | Observaciones |
---|---|---|---|---|
Servidor zabbix | Uno por instalación | Monitorización técnica y de negocio | VIVAit Call
VIVAit Suite |
Bajo proyecto puede existir más de uno
Tipicamente irá o en BBDD replica o en nodo de gestión en instalaciones grandes |
Templates zabbix | Uno por instalación | Adaptaciones específicas | VIVAit Call
VIVAit Suite |
|
Agente Zabbix | Uno por servidor | Agente de monitorización | VIVAit Call
VIVAit Suite |
|
Scripts monitorización zabbix | Uno por servidor | Agente de monitorización | VIVAit Call
VIVAit Suite |
3.1 Versiones de módulos
Módulo | VSuite
V.3.10 |
VSuite
V.3.2.0 |
VSuite
V.3.3.0 |
VIVAit V.3.0.0
(VSuite 3.4+VCall3.0) |
VIVAit V.3.1.0
(VSuite 3.5+VCall3.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) |
---|---|---|---|---|---|---|---|---|
Sistema Operativo | Ubuntu 14.0.4 Server 64 Kb | Ubuntu 16.0.4 | Ubuntu 16.0.4 y Ubuntu 18.04 | Ubuntu 20 | ||||
MySQL | 5.5 | 5.7 | 5.7 | 8.0 | ||||
Tomcat | 7 | 8 | 8 | 9 | ||||
PHP | 5 | 7 | 7 | 7.4 | ||||
OpenJDK | 7 | 8 | 8 | 11 | ||||
Asterisk (*) | 1.4 | 1.4 | 1.4 | 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 |
Asterisk ACD (VS) | 3.3.1 | 3.4.1 | 3.5.0 | 3.5.3 | 3.5.4 | |||
Asterisk Cisco (VC) | 3.3.4 | 3.4.4 | 3.5.1 | 3.5.4 | 3.5.5 | |||
Asterisk Corp (C) | 3.3.4 | 3.4.4 | 3.5.1 | 3.5.4 | 3.5.5 | |||
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 |
CargaContactos (VS) | 3.8.0 | 3.8.0 | ||||||
Dialplan ACD (VS) | 3.5.0 | 3.6.0 | 3.8.1 | 3.8.2 | ||||
Dialplan Corp (C) | 3.3.1 | 3.5.0 | 3.6.0 | 3.8.1 | 3.8.2 | |||
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 |
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 |
Intz-gh (VC) | 0.1.0 | 0.1.1 | 0.1.2 | |||||
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 |
Lazarus comú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 |
Mcan (VS) | --- | --- | --- | --- | --- | --- | --- | 0.1.5 |
MotorPredi (VS) | --- | --- | --- | --- | --- | --- | 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 |
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 |
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 |
Phone_prov (C) | ------ | ------ | 3.0.1 | 3.0.3 | 3.0.3 | 3.0.3 | 3.0.4 | 3.0.4 |
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 |
Portal usuario (VC) | ------ | ------ | ------ | 3.0.0 | 3.1.0 | 4.0.0 | 4.1.0 | 4.1.0 |
Portal webfon (VC) | ------ | ------ | ------ | ----- | ----- | ----- | ----- | 1.0.0 |
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 |
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 |
recordprocesad (C) | 1.2.0 | 1.2.0 | 3.0.0 | ----- | ----- | ---- | ---- | ---- |
Supervisor Web (VS) | 1.0.0 | 1.0.0 | ||||||
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 |
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 |
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 |
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 |
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.3 |
WebRTC (VC)) | ----- | ----- | ----- | ----- | ----- | ----- | ----- | 1.0.0 |
(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: https://wiki.asterisk.org/wiki/display/AST/Asterisk+Versions.
3.2 Sistema Operativo
Los sistemas operativos de nuestra plataforma se corresponden a las versiones de Ubuntu Server LTS , ya que son las versiones estables, con un soporte continuado y mas estables a actualizaciones desde la salida Ubuntu 14.04.1 .En concreto el sistema operativo utilizado para la plataforma VIVAit es Ubuntu Server 20.04. LTS. Para más información https://wiki.ubuntu.com/Kernel/LTSEnablementStack.
3.2.1 Funcionamiento en cluster
Un clúster es un grupo de múltiples ordenadores unidos mediante una red de alta velocidad, de tal forma que el conjunto es visto como un único ordenador.
De un clúster se espera que presente combinaciones de los siguientes servicios:
- Alto rendimiento
- Alta disponibilidad
- Balanceo de carga
- Escalabilidad
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:
- Todo lo que tenga que ver con la red, es decir, caída de la tarjeta de red, apagado de la máquina, corte en la red..
Y no balancea en los siguientes:
- No balancea en los demás casos, es decir, todo lo que tenga que ver con procesos de una máquina (caída asterisk, base de datos, intz-nimitz)
* Hasta la versión 3.3 de VIVAit la instalación y configuración del cluster se hace Así
* A partir de la versión 3.3 de VIVAit la instalación y configuración del cluster se hace utilizado el Pacemaker. Puedes descargar la instalción de la solución en el siguiente enlace Cluster para VIVAit
3.2.1.1 HEARTBEAT
El funcionamiento en cluster se basa en:
- Heartbeat: IP flotante entre las dos máquinas que componen el cluster; típicamente este "latido" entre máquinas se realizará mediante conexión directa con cable cruzado para asegurar que no existan problemas de comunicaciones tales como retardo, pérdida de paquetes, etc en este latido y pueda ser causa de un balanceo inadecuado.
Nota 17-11-2015: Se ha realizado en un cliente un cluster distribuido, con dos servidores en diferentes sedes, realizando el heartbeat mediante enlace Gigabit. Si bien la solución no está validada por desarrollo, se está observando el funcionamiento. |
- DRBD se encargar de mantener una serie de carpetas totalmente replicadas entre los dos nodos; dichas carpetas son:
El cluster es activo/pasivo; la máquina activa posee la IP flotante y tiene arrancados los servicios.
3.2.1.1.1 Configuración del cluster
Para montar un cluster de asterisk partimos de la siguiente situación inicial:
- Dos maquinas con VIVAit Call 3.0 instalado.
- El driver bonding de Interfaces de Red en Ubuntu Server.
Los pasos a seguir para la configuración en el Ubuntu Server son los siguientes:
- Instalar ifenslave:
aptitude install ifenslave.
- Finalizada la instalación, comprobamos que la instalación de Bonding se ha configurado para empezar desde el arranque del sistema operativo desde el fichero /etc/modules:
vi /etc/modules # /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored. # Parameters can be specified after the module name. lp rtc bonding
- Crear o editar el archivo llamado /etc/modprobe.d/bonding.conf y añadir la siguiente linea en negrita:
echo "alias bond0 bonding"> /etc/modprobe.d/bonding.conf
- Editar el fichero /etc/network/interfaces y añadir lo que esta en negrita:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # Bonding #em1 ip manual y esclavo en el "bond0" NIC auto em1 iface em1 inet manual bond-master bond0 bond-primary em0 #em2 ídem, creando así un vínculo de enlace 2. auto em2 iface em2 inet manual bond-master bond0 auto bond0 iface bond0 inet static address 10.255.255.11 netmask 255.255.255.0 gateway 10.255.255.254 bond-mode active-backup bond-miimon 100 bond-slaves none # em3 replica entre servidores auto em3 iface em3 inet static address 10.255.254.10 netmask 255.255.255.0 # em4 gestion auto em4 iface em4 inet static address 172.17.47.255 netmask 255.255.0.0
- Reiniciamos el sistema para que el kernel tome los cambios.
- Comprobación que en las dos maquinas el archivo /etc/host contenga el los nombre de las dos maquinas a vincular. En el ejemplo el archivo en ambas maquinas es:
127.0.0.1 localhost 10.255.255.11 vivaitcall-CL-UAH-1 10.255.255.12 vivaitcall-CL-UAH-2 10.255.255.10 vivaitcall-CL-UAH 10.255.255.10 BDTR 10.255.254.10 vivaitcall-CL-UAH-1-em3 10.255.254.11 vivaitcall-CL-UAH-2-em3
- Creamos dos particiones iguales en ambos ordenadores , usando el comando parted.
root@vivaitcall-CL-UAH-1:~# parted /dev/sda GNU Parted 2.3 Using /dev/sda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) p free Model: HP LOGICAL VOLUME (scsi) Disk /dev/sda: 1000GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 17,4kB 262kB 245kB Free Space 1 262kB 1000MB 1000MB fat32 boot 2 1000MB 201GB 200GB ext4 3 201GB 217GB 16,0GB linux-swap(v1) 4 217GB 237GB 20,0GB ext4 237GB 1000GB 763GB Free Space (parted) mkpart primary 237GB 1000GB (parted) p free Model: HP LOGICAL VOLUME (scsi) Disk /dev/sda: 1000GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 17,4kB 262kB 245kB Free Space 1 262kB 1000MB 1000MB fat32 boot 2 1000MB 201GB 200GB ext4 3 201GB 217GB 16,0GB linux-swap(v1) 4 217GB 237GB 20,0GB ext4 5 237GB 1000GB 763GB primary No File System como ext4 1000GB 1000GB 204kB Free Space (parted)quit mkfs.ext4 /dev/sda5 root@vivaitcall-CL-UAH-1:~# parted /dev/sda GNU Parted 2.3 Using /dev/sda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) p free Model: HP LOGICAL VOLUME (scsi) Disk /dev/sda: 1000GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 17,4kB 262kB 245kB Free Space 1 262kB 1000MB 1000MB fat32 boot 2 1000MB 201GB 200GB ext4 3 201GB 217GB 16,0GB linux-swap(v1) 4 217GB 237GB 20,0GB ext4 5 237GB 1000GB 763GB primary 1000GB 1000GB 204kB Free Space (parted) rm 5 (parted) mkpart primary 237GB 1000GB (parted) p free Model: HP LOGICAL VOLUME (scsi) Disk /dev/sda: 1000GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 17,4kB 262kB 245kB Free Space 1 262kB 1000MB 1000MB fat32 boot 2 1000MB 201GB 200GB ext4 3 201GB 217GB 16,0GB linux-swap(v1) 4 217GB 237GB 20,0GB ext4 5 237GB 1000GB 763GB ext4 primary Si File Sytem ext4 1000GB 1000GB 204kB Free Space (parted)quit
- Instalar los paquetes necesarios para el drbd. En Ubuntu server 14.04 ya está instalado.
aptitude install drbd8-utils aptitude update (si no instala el drbd8-utils actualizar) aptitude install drbd8-utils (volver a lanzar)
- Creamos el archivo /etc/drbd.conf en ambas maquinas:
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example include "drbd.d/global_common.conf"; include "drbd.d/*.res"; resource MDcluster { protocol C; on vivaitcall-CL-UAH-1 { device /dev/drbd0; disk /dev/sda5; address 10.255.254.10:7788; meta-disk internal; } on vivaitcall-CL-UAH-2 { device /dev/drbd0; disk /dev/sda5; address 10.255.254.11:7788; meta-disk internal; } disk { on-io-error detach; } net { max-buffers 2048; ko-count 4; } syncer { rate 100M; al-extents 257; } startup { wfc-timeout 0; degr-wfc-timeout 120; } }
- Reiniciamos el sistema para que el kernel tome los cambios.
- Inicializamos el recurso, para ello primero deberemos crear los recursos DRBD teclearemos en ambas maquinas. Desde /etc.
drbdadm create-md MDcluster (no y yes )
- Si tenemos algún problema porque ya exista sistema de ficheros.
dd if=/dev/zero of=/dev/sda5 bs=1M count=128 drbdadm create-md MDcluster (no y yes )
- Reiniciamos ambas maquinas para que su kernel tome los cambios.
- Levantamos el servicio del DRBD en ambos servidores (nos preguntara que si queremos enviar los datos a los desarrolladores de drbd) tecleando no, no se envían.
service drbd start /etc/init.d/drbd start
- Ahora ambas maquinas son secundarias.
- Indicar cual de las dos maquinas usaremos como primaria, por tanto en la maquina elegida habra que ejecutar:
drbdadm -- --overwrite-data-of-peer primary all (en una máquina)
- Nota: La ip virtual que va a estar asignada a la maquina activa es 172.25.129.70.
- Podemos teclear el comando cat para ver si esta sincronizando y su progreso:
cat /proc/drbd Nota: El servicio DRBD aparecera como Primary/Secondary si ejecutamos en el primario ; y aparecerá 'Secondary/Primary' si lo ejecutamos en el secundario.
- Instalación de los script de arranque:
update-rc.d -f drbd remove (en las dos maquinas) update-rc.d drbd start 13 2 3 4 5 . stop 87 0 1 6 . (en las dos máquinas)
- Seleccionar la fuente de sincronización.
- Formateamos un disco de la maquina que queramos que funcione como fuente del servicio DRBD, para evitar conflictos:
mkfs.ext4 /dev/drbd0
- Creamos el directorio sobre el que vamos a montar el disco, en ambas maquinas.
mkdir /HDcluster
- Creamos un archivo dentro /HDcluster de que se verá solo cuando el disco no está montado en ambas maquinas.
touch sinMontar Nota: Este archivo nos puede servir para monitorizar mediante zabbix, nagios, ... que el disco no está montado.
- En una de las maquinas montamos el disco (desde fuera del directorio HDcluster)
mount /dev/drbd0 /HDcluster
- Procedemos a mover todos los datos que necesitemos en este disco y a crear accesos directos, los directorios que vamos a mover son los siguientes:
/etc/asterisk /var/lib/asterisk /usr/lib/asterisk /usr/spool/asterisk /var/lib/mysql /var/tftp/
- El procedimiento que vamos a seguir es el siguiente, en el primer ordenador:
Cd /HDcluster tar -zcvf etc-asterisk.tgz /etc/asterisk tar -zxvf etc-asterisk.tgz rm -rf /etc/asterisk ln -s /HDcluster/etc/asterisk /etc/asterisk tar -zcvf var-lib-asterisk.tgz /var/lib/asterisk tar -zxvf var-lib-asterisk.tgz rm -rf /var/lib/asterisk ln -s /HDcluster/var/lib/asterisk /var/lib/asterisk tar -zcvf usr-lib-asterisk.tgz /usr/lib/asterisk tar -zxvf usr-lib-asterisk.tgz rm -rf /usr/lib/asterisk ln -s /HDcluster/usr/lib/asterisk /usr/lib/asterisk tar -zcvf var-spool-asterisk.tgz /var/spool/asterisk tar -zxvf var-spool-asterisk.tgz rm -rf /var/spool/asterisk ln -s /HDcluster/var/spool/asterisk /var/spool/asterisk tar -zcvf var-lib-mysql.tgz /var/lib/mysql tar -zxvf var-lib-mysql.tgz rm -rf /var/lib/mysql ln -s /HDcluster/var/lib/mysql /var/lib/mysql tar -zcvf var-lib-phoneprov-tftp.tgz /var/lib/phoneprov-tftp/ tar -zxvf var-lib-phoneprov-tftp.tgz rm -rf /var/lib/phoneprov-tftp/ ln -s /HDcluster/var/lib/phoneprov-tftp /var/lib/phoneprov-tftp
- En la segunda maquina debemos borrar los directorios y crear los accesos directos.
rm -rf /etc/asterisk ln -s /HDcluster/etc/asterisk /etc/asterisk rm -rf /var/lib/asterisk ln -s /HDcluster/var/lib/asterisk /var/lib/asterisk rm -rf /usr/lib/asterisk ln -s /HDcluster/usr/lib/asterisk /usr/lib/asterisk rm -rf /var/spool/asterisk ln -s /HDcluster/var/spool/asterisk /var/spool/asterisk rm -rf /var/lib/mysql ln -s /HDcluster/var/lib/mysql /var/lib/mysql rm -rf /var/lib/phoneprov-tftp ln -s /HDcluster/var/lib/phoneprov-tftp /var/lib/phoneprov-tftp
- Configurar heartbeat para las dos maquinas.
- Instalamos heartbeat en las dos maquinas. En UBUNTU Server 14.04 ya está instalado.
aptitude install heartbeat
- Debemos modificar 3 ficheros en cada una de las maquinas, estos se encuentran en /etc/ha.d. El primer fichero a modificar es ha.cf.:
- En la maquina vivaitcall-CL-UAH-1 es:
root@vivaitcall-CL-UAH-1:~# cat /etc/ha.d/ha.cf # Explicacion en /usr/share/doc/heartbeat/ha.cf.gz udpport 694 baud 19200 auto_failback off use_logd yes crm no # Temporizaciones en segs logfacility local0 keepalive 2 deadtime 8 warntime 16 initdead 64 deadping 6 #ucast bond0 vivaitcall-CL-UAH-1 ucast bond0 vivaitcall-CL-UAH-2 #ucast em3 vivaitcall-CL-UAH-1-em3 ucast em3 vivaitcall-CL-UAH-2-em3 #Ping a puerta de enlace,gw1,gw2,gw3,gw4 ping_group red_local 10.255.255.12 respawn hacluster /usr/lib/heartbeat/ipfail apiauth ipfail gid=haclient uid=hacluster node vivaitcall-CL-UAH-1 node vivaitcall-CL-UAH-2
- Y en la maquina vivaitcall-CL-palacio-2 es:
root@vivaitcall-CL-UAH-1:~# cat /etc/ha.d/ha.cf # Explicacion en /usr/share/doc/heartbeat/ha.cf.gz udpport 694 baud 19200 auto_failback off use_logd yes crm no # Temporizaciones en segs logfacility local0 keepalive 2 deadtime 8 warntime 16 initdead 64 deadping 6 ucast bond0 vivaitcall-CL-UAH-1 #ucast bond0 vivaitcall-CL-UAH-2 ucast em3 vivaitcall-CL-UAH-1-em3 #ucast em3 vivaitcall-CL-UAH-2-em3 #Ping a puerta de enlace gw1 gw2 gw3 gw4 ping_group red_local 10.255.255.12 respawn hacluster /usr/lib/heartbeat/ipfail apiauth ipfail gid=haclient uid=hacluster node vivaitcall-CL-UAH-1 node vivaitcall-CL-UAH-2
- Nota: El parámetro auto_failback se utiliza para indicar si queremos que al recuperarse una maquina adquiera los recursos sobre los que tiene prioridad.
- El segundo fichero es authkeys,, este fichero es el mismo en ambas maquinas:
chmod 600 authkeys (importante) auth 1 1 sha1 claveSecretaATope
- El tercer fichero haresources, donde especificaremos en las dos maquinas que deben apuntar a la maquina que queremos que tenga prioridad en la adquisición de los recursos, este fichero es el mismo en las dos maquinas:
MÁQUINA 1 -> vivaitcall-CL-palacio-1 hb_mdtel MÁQUINA 2-> vivaitcall-CL-palacio-1 hb_mdtel
- Copiaremos en el directorio /etc/ha.d/resource.d/ los scripts de arranque con permisos 755 (lo podemos hacer mediante WINSCP). Los scripts se encuentran en C:\Documents and Settings\javier.gutierrez.MDTEL\Mis documentos\Centrales\Asterisk\Cluster\scripts.
chmod 755 hb_catalina chmod 755 hb_mdtel chmod 755 hb_mdtel_firewall
- Deberemos editar el archivo hb_mdtel
(IP flotante a.b.c.d./mask) 10.255.255.10 CAD_IP_FLOTA=10.255.255.10/24/bond0
- Paramos el proceso myAcdSuperv.
mv /etc/rc2.d/S02myAcdSuperv s02myAcdSuperv
- Reiniciamos ambas maquinas para que su kernel tome los cambios.
3.2.1.1.2 Comprobación de buen funcionamiento del cluster
- La maquina activa tiene que tener en HDcluster montado el disco con todos sus directorios y la maquina inactiva no (tenemos que ver el archivo que hemos creado "sinMontar").
- La ip virtual tiene que estar en la maquina activa (ifconfig) y no tiene que estar en la inactiva.
- El asterisk tiene que estar arrancado en la maquina activa y parado en la inactiva.
- Tecleando la ip de la maquina activa en un navegador debemos acceder al portal de vivait-call y en la inactiva no debe de estar activo.
- Para cambiar el cluster manualmente podemos utilizar los siguientes comandos:
/usr/share/heartbeat/hb_takeover
- La maquina desde la que se ejecuta se convierte en la maquina activa
/usr/share/heartbeat/hb_standby
- La maquina desde la que se ejecuta deja de ser la maquina activa
3.2.1.1.3 Notas para MySQL
Si mysql es parte del cluster tenemos que tener en cuenta dos cosas:
- El archivo /etc/mysql/debían.cnf contiene una clave que debe ser igual en ambas maquinas y debe ser la clave de la máquina de donde cojamos la base de datos.
# Automatically generated for Debian scripts. DO NOT TOUCH! [client] host = localhost user = debian-sys-maint password = AI6AdPtnhLUrNm1S socket = /var/run/mysqld/mysqld.sock [mysql_upgrade] user = debian-sys-maint password = AI6AdPtnhLUrNm1S socket = /var/run/mysqld/mysqld.sock basedir = /usr
- El archivo /etc/apparmor.d/usr.sbin.mysqld contiene donde pueden estar ubicados los archivos de mysql, al cambiar su ubicación y poner un enlace directo en /var/lib/mysql si no modificamos este archivo mysql no arrancara al no tener la nueva ubicación entre sus localizaciones permitidas. Este es un ejemplo de las líneas que debemos añadir.
/var/run/mysqld/mysqld.sock w, (copiar después de esta linea) #//!! /HDcluster/var/lib/mysql/ r, /HDcluster/var/lib/mysql/** rwk, #//!!
3.2.1.1.4 Notas de desincronización
EL servicio del DRBD esta iniciado pero al teclear el comando cat /proc/drbd para ver si esta sincronizando se presenta "primary/unknown" y/o secondary/unknown ".
- En el nodo primary
drbdadm connect all
- En el nodo secondary
drbdadm disconnect all drbdadm -- --discard-my-data connect all
3.2.1.1.5 Adaptar red a cliente
Para adaptar la red de los equipos al entorno del cliente hay que editar los siguientes ficheros:
/etc/network/interfaces /etc/resolv.conf /etc/hosts /etc/ha.d/resource.d/hb_mdtel /etc/ha.d/ha.cf - TFTP: /etc/inetd.conf (IP del cluster) |
Tras la modificaciones oportunas, se debe reiniciar las dos máquinas para cargar las nuevas configuraciones.
3.3 Matriz de conmutación
Encontramos dos diferentes núcleos de conmutación en la plataforma VIVAit:
- Para los nodos de procesamiento ACD el núcleo de conmutación es asterisk 1.4 RSP con fuertes modificaciones realizadas por MDtel en determinados módulos (queues, chan_spy entre otros)
- Para los nodos que realizan funcionalidad de gateway y/o procesamiento de telefonía corporativa, se utiliza como núcleo de conmutación asterisk 13, versión certified
https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Documentation
3.3.1 Modificaciones realizadas sobre Asterisk 13 certified 2
3.3.1.1 Archivos añadidos por MDtel
Los archivos añadidos son los siguientes:
- apps/app_ucid.c
- apps/app_cli.c
- apps/app_crash.c
- apps/app_mdintz.c
- apps/app_mdintz.exports.in
- include/asterisk/mdintz.h
- include/asterisk/ucid.h
- res/res_mdcal.c
→ apps/app_mdintz.exports.in
Este archivo sirve para la exportación de funciones del mdintz para el uso por aplicaciones externas
3.3.1.2 Modificaciones de archivos
Los archivos modificados por MDtel son los mostrados a continuación:
- apps/app_mixmonitor.c
- res/res_calendar_caldav.c
- contrib/scripts/safe_asterisk
- contrib/init.d/rc.debian.asterisk
- channels/sig_pri.c
- channels/chan_sip.c
→ main/audiohook.c
audiohook.c ha sido modificado para solucionar un crash de asterisk al utilizar en el mixmonitor las opciónes r y t
→ app_crash.c
Esta nueva aplicación es sólo compatible con Asterisk 13.
La documentación de la misma se encuentra en el comando: "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).
Nota.- Esta aplicación no debería estar presente en una instalación de Asterisk 13
→ app_mdintz.c y mdintz.h
Esta aplicación sirve como interfaz a entornos (funcionalidades) creados por MDtel
Para mas información consultar la página de MDintz.
Las rutas de estos archivos son las siguientes:
apps/app_mdintz.c
include/asterisk/mdintz.h
app_mdintz.c :
app_mdintz.c orientada al proceso de enrutamiento a implementar en intz-nimitz.
El archivo .c es casi igual para asterisk 1.4.24 y asterisk 13.
Nota.- Cuando se compila para asterisk 13, es necesario comentar la línea que pone
"#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)
En cuanto al nuevo comando, el formato es:
mdintz qry <nHostFijo> <entorno> <servicio> <par1>...<parN>
Permite interrogar a un servidor de igual modo que hace el dialplan con fines de diagnóstico. La única diferencia es que se ha añadido el parámetro "nHostFijo" que puede tomar como valor "*" (lo que solicita una interrogación secuencial a todos los servidores definidos, igual a la funcionalidad del dialplan) ó "0" a "3" (que solicita un interrogación dirigida el host indicado como hostN, y sólo a él, en archivo de configuración).
Para instalarlo, es necesario copiar:
- asterisk/apps/app_mdintz.c
- asterisk/include/asterisk/mdintz.h
- En asterisk 1.4.24 conviene asegurar que se ha actualizado "asterisk/apps/app_queue.o" y "asterisk/apps/app_queue.so"
- Luego "make", "make install" y module "unload/load" (mejor "stop now" y start)
→ scripts y rc.debian.asterisk
cambiado contrib/scripts por el modificado por MDtel
cambiado contrib/init.d/rc.debian.asterisk por el modificado por MDtel
→ Carpeta mp3 añadida al directorio addons
La carpeta mp3 en addons permite la reproducción desde el diaplan de los mensajes en mp3. En make menuselect hay que marcar el format_mp3 y app_mp3 e instalar el paquete mpg123 de ubuntu
→ sig_pri.c
Modificado para enviar/recibir el ucid en un primario qsig
Para que se envie el ucis tenemos que habilitar el envio de facilidades en el chan_dahdi.conf
facilityenable = yes
→ init.d
- Uno de los archivos modificados ha sido init.d, se encuentra en la ruta: /etc/init.d/asterisk. La modificación realizada es la siguiente:
SAFE_ASTEISK=/usr/sbin/safe_asterisk if [ -x $SAFE_ASTERISK ] ; then
fi |
→ safe-asterisk
- Se encuentra en la siguiente ruta:/usr/sbin/safe-asterisk .En este archivo se ha modificado MAXFILES=32768
→ default
- Este fichero podemos encontrarlo en: /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:
AST_USER="asterisk"
AST_GROUP="asterisk" COREDUMP=yes |
3.3.1.3 Nueva función de asterisk: app_cli.so
Esta función permite ejecutar desde el dialplan un comando de línea de consola de asterisk (CLI). Su primer uso (y esperamos que no último) será para lanzar los notify que los teléfonos necesitan para el reaprovisionamiento desde el portal o 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 apps/app_cli.c en el directorio "apps" de los fuentes y luego ejecutar "make" y "make install".
A continuación se pasa el resultado de "core show function CLI"
[Synopsis]
Lanza un comando CLI desde dialplan
[Description]
- CLI(nomArchSal,cmd)
- Si 'nomArchSal' está vacio, se usa '/dev/null' y no se recupera resultado
- Si 'nomArchSal'=TEMP, Se crea un archivo temporal que se borra al final
- En otro caso, se crea el archivo y no se borra
[Syntax]
CLI(nomArchSal,cmd)
[Arguments]
nomArchSal
Archivo de salida (si se omite, /dev/null)
cmd
Comando a ejecutar via CLI
3.3.2 Dialplan
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_MDtel_WEB.conf queues_WEB.conf sip_trunkInt_WEB.conf sip_WEB.conf |
3.4 Servicios networking
Son muy importantes las configuraciones adecuadas de los servicios de:
- 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
- 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 además será necesario activa la opción 66 que permitirá definir el servidor TFTP del que los terminales cogerán sus ficheros de aprovisionamiento
3.5 Bases de datos (BBDD)
La base de datos del sistema se basa en el motor de base de datos MySQL, es un elemento crítico del sistema, en el que insertan y del que obtiene mucha información múltiples procesos. Muchas comunicaciones entre procesos se realizan vía Base de Datos (tabla COM_COMUNICADOS). Pueden existir distintas instancias de base de datos que explicadas en las siguientes secciones, nuestra base de datos tiene la siguiente estructura: Información completa de la BD. Podéis ampliar más información en https://dev.mysql.com/doc/
3.5.1 BBDD Tiempo Real
En 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:
- VIVAit Supervisor (para reporting de tiempo real)
- PanelWeb
- Datos de sesión de VIVAit Desk
- Monitorización Zabbix
- Otros
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éplica
A 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:
- VIVAit Reporting
- VIVAit Tracker
- Histórico en tiempo real de VIVAit Supervisor
IMPORTANTE: Ningún proceso, programa, aplicación, etc. escribe en la base de datos de réplica; tan solo se extrae información
3.5.3 BBDD de copia
A 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 restore
Se utilizan dos script, para realizar la copia de seguridad y restaurar en la base de datos de copia local que son:
- El proceso bdCentral.sh que es el encargado de realizar la copia de seguridad. Tiene un archivo de configuración 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
- El proceso bdNodo.sh que es el encargado de descargar la copia de seguridad y restaurarla en local. Tiene un archivo de configuración 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 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 datos
3.5.4.1 Comprobación que una base de datos está arrancada
Para 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 Tabla Dat_Log
En la tabla Dat_log podemos encontrar el histórico de las operaciones realizadas por las aplicaciones contra la Base de Datos; se registran todos los cambios que realizan los usuarios a través de las diferentes aplicaciones (Portal de administración, Supervisor, Meet y Alertas).
La tabla está formada por los siguientes campos:
En la siguiente tabla se especifican algunos de los posibles valores de los campos, en función del valor de E_ACCION.
E_ACCION Nº | E_ACCION TAccionLog | Descripción de la acción | `C_TABLA` | `ID_REGISTRO` | `N_PAR1` | `N_PAR2` | `C_PAR3` | `C_PAR4` |
---|---|---|---|---|---|---|---|---|
10 | accionLog_escuchar_seg | Escuchar segmento | ||||||
20 | accionLog_escuchar_lla | Escuchar llamada | ||||||
30 | accionLog_descargar_seg | Descargar segmento | ||||||
40 | accionLog_descargar_lla | Descargar llamada | ||||||
50 | accionLog_generar_config | Generar configuración | ||||||
60 | accionLog_cambiar_clave_propia | Cambiar clave propia | ||||||
65 | accionLog_login_correcto | Login correcto | idUsuario | nivelSupervisor | ||||
70 | accionLog_login_erroneo | Login erroneo | ||||||
80 | accionLog_login_multiple | Login multiple | ||||||
90 | accionLog_escuchar_ext | Escuchar Extensión | ||||||
100 | accionLog_chg_objetivo_peso | Modificar nivel servicio | idCola | objetivo | peso | |||
105 | accionLog_add_agente_cola_bd | Añadir agente a grupo BD | idCola | agente | prioridad | obligatorio | ||
115 | accionLog_del_agente_cola_bd | Quitar agente de grupo BD | idCola | agente | ||||
125 | accionLog_prio_agente_cola_bd | Modificar prioridad agente en grupo BD | idCola | agente | prioridad | obligatorio | ||
135 | accionLog_perfil_agente_bd | Asignar perfil a agente BD | idAgente | perfil | ||||
140 | accionLog_add_agente | Añadrid agente | ||||||
145 | accionLog_del_agente | Borrar agente | ||||||
150 | accionLog_chg_agente | Modificar agente | idAgente | nombre | cuenta | |||
155 | accionLog_add_agenda_perfil | Añadir agenda a perfil | idPerfil | idAgenda | ||||
160 | accionLog_del_agenda_perfil | Borrar agenda de perfil | idPerfil | idAgenda | ||||
165 | accionLog_add_entrada_agenda | Añadir entrada a agenda | idAgenda | nombre | numero | |||
170 | accionLog_del_entrada_agenda | Borrar entrada de agenda | idEntrada | idAgenda | nombre | numero | ||
175 | accionLog_chg_entrada_agenda | Modificar entrada de agenda | idEntradaAgenda | nombre | numero | |||
180 | accionLog_add_agenda | Añadir agenda | nombre | descripción | ||||
185 | accionLog_del_agenda | Borrar agenda | ||||||
190 | accionLog_chg_agenda | Modificar agenda | idAgenda | nombre | descripción | |||
195 | accionLog_add_etiqueta_agente | Añadir etiqueta agente | nombre | descripción | ||||
200 | accionLog_del_etiqueta_agente | Borrar etiqueta agente | idEtiqueta | |||||
205 | accionLog_chg_etiqueta_agente | Modificar etiqueta agente | idEtiqueta | nombre | descripción | |||
210 | accionLog_add_rel_etiqueta_agente | Añadir relación etiqueta agente | idEtiqueta | idUsuario | ||||
215 | accionLog_del_rel_etiqueta_agente | Borrar relación etiqueta agente | idEtiqueta | idUsuario | ||||
220 | accionLog_chg_rel_etiqueta_agente | Modificar relación etiqueta agente | idEtiqueta | idUsuario | ||||
225 | accionLog_add_perfil | Añadir perfil | nombre | descripción | ||||
230 | accionLog_del_perfil | Borrar perfil | idPerfil | |||||
235 | accionLog_chg_perfil | Modificar perfil | idPerfil | nombre | descripción | |||
240 | accionLog_add_rel_cola_perfil_bd | Añadir relación grupo ACD/perfil BD | idCola | idPerfil | prioridad | obligatorio | ||
250 | accionLog_del_rel_cola_perfil_bd | Borrar relación grupo ACD/perfil BD | idCola | idPerfil | prioridad | obligatorio | ||
260 | accionLog_chg_rel_cola_perfil_bd | Modificar relación grupo ACD/perfil BD | idCola | idPerfil | prioridad | obligatorio | ||
265 | accionLog_add_cola | Añadir grupo ACD | nombre | descripción | ||||
270 | accionLog_del_cola | Borrar grupo ACD | ||||||
275 | accionLog_chg_cola | Modificar grupo ACD | idAgente | nombre | descripción | |||
280 | accionLog_add_campanna_cola_bd | Añadir campaña a grupo ACD BD | idCola | idCampanna | ||||
285 | accionLog_del_campanna_cola_bd | Borrar campaña de grupo ACD BD | ||||||
290 | accionLog_chg_cola_algor_predic | Cambiar algoritmo predictivo de grupo ACD | ||||||
300 | accionLog_enviar_msj | Enviar mensaje | tipo_msj | ambito | id_ambito | N_VAR1 | N_VAR2 | C_VAR3 |
305 | accionLog_cerrar_sesion | Cerrar sesión | idUsuario | forzado | segundos | fecha | motivo | |
310 | accionLog_activa_campanna_bd | Activar campaña | idCampanna | activa | ||||
320 | accionLog_grabacion_sombra | Grabación en la sombra | ||||||
330 | accionLog_add_filtro_contactos | |||||||
335 | accionLog_del_filtro_contactos | |||||||
340 | accionLog_chg_filtro_contactos | |||||||
350 | accionLog_add_val_filtro_contactos | |||||||
355 | accionLog_del_val_filtro_contactos | |||||||
400 | accionLog_activar_contactos | idCampanna | ||||||
405 | accionLog_cancelar_contactos | idCampanna | ||||||
410 | accionLog_orden_contactos | idCampanna | ||||||
415 | accionLog_prioridad_contactos | idCampanna | ||||||
ACCIÓN LOGS PORTAL: Faltan añadir en la BD (Datos versión) y Revisar si ya existen. Poner los parámetros | ||||||||
5310 | accionLog_chg_acd_configuracion | |||||||
5315 | accionLog_add_acd_finales | |||||||
5320 | accionLog_chg_acd_finales | |||||||
5325 | accionLog_del_acd_finales | |||||||
5330 | accionLog_add_acd_formularios | |||||||
5335 | accionLog_chg_acd_formularios | |||||||
5340 | accionLog_del_acd_formularios | |||||||
5345 | accionLog_add_acd_pausas | |||||||
5350 | accionLog_chg_acd_pausas | |||||||
5355 | accionLog_del_acd_pausas | |||||||
5359 | accionLog_add_cen_molticanal_texto_entrada | |||||||
5360 | accionLog_add_acd_supercolas | |||||||
5361 | accionLog_del_cen_molticanal_texto_entrada | |||||||
5362 | accionLog_udel_cen_molticanal_texto_entrada | |||||||
5363 | accionLog_add_cen_molticanal_texto_salida | |||||||
5364 | accionccionLog_chg_cen_molticanal_texto_salida | |||||||
5365 | accionLog_chg_acd_supercolas | |||||||
5366 | accionLog_udel_cen_molticanal_texto_salida | |||||||
5367 | accionLog_chg_cen_molticanal_texto_entrada | |||||||
5368 | accionLog_del_cen_molticanal_texto_salida | |||||||
5370 | accionLog_del_acd_supercolas | |||||||
5375 | accionLog_udel_acd_supercolas | |||||||
5380 | accionLog_add_acd_vdn | |||||||
5385 | accionLog_chg_acd_vdn | |||||||
5390 | accionLog_del_acd_vdn | |||||||
5395 | accionLog_udel_acd_vdn | |||||||
5396 | accionLog_add_cen_vdn | |||||||
5397 | accionLog_chg_cen_vdn | |||||||
5398 | accionLog_del_cen_vdn | |||||||
5399 | accionLog_udel_cen_vdn | |||||||
5400 | accionLog_add_campos | |||||||
5405 | accionLog_chg_campos | |||||||
5410 | accionLog_del_campos | |||||||
5415 | accionLog_add_categorias | |||||||
5420 | accionLog_chg_categorias | |||||||
5425 | accionLog_del_categorias | |||||||
5430 | accionLog_chg_com_configuracion | |||||||
5435 | accionLog_add_nodos | |||||||
5440 | accionLog_chg_nodos | |||||||
5445 | accionLog_del_nodos | |||||||
5450 | accionLog_udel_nodos | |||||||
5455 | accionLog_add_sedes | |||||||
5460 | accionLog_chg_sedes | |||||||
5465 | accionLog_del_sedes | |||||||
5470 | accionLog_udel_sedes | |||||||
5475 | accionLog_add_dat_sincroniza | |||||||
5480 | accionLog_chg_dat_sincroniza | |||||||
5485 | accionLog_add_extensiones | |||||||
5490 | accionLog_chg_extensiones | |||||||
5495 | accionLog_del_extensiones | |||||||
5500 | accionLog_udel_extensiones | |||||||
5505 | accionLog_add_facilidades | |||||||
5510 | accionLog_chg_facilidades | |||||||
5515 | accionLog_del_facilidades | |||||||
5520 | accionLog_add_locuciones | |||||||
5525 | accionLog_chg_locuciones | |||||||
5530 | accionLog_del_locuciones | |||||||
5535 | accionLog_add_musica | |||||||
5540 | accionLog_chg_musica | |||||||
5545 | accionLog_del_musica | |||||||
5550 | accionLog_add_permisos | |||||||
5555 | accionLog_chg_permisos | |||||||
5560 | accionLog_del_permisos | |||||||
5565 | accionLog_add_plantillas | |||||||
5570 | accionLog_chg_plantillas | |||||||
5575 | accionLog_del_plantillas | |||||||
5580 | accionLog_add_puestos_extensiones | |||||||
5585 | accionLog_chg_puestos_extensiones | |||||||
5590 | accionLog_del_puestos_extensiones | |||||||
5595 | accionLog_des_puestos_extensiones | |||||||
5600 | accionLog_add_usuarios | |||||||
5605 | accionLog_chg_usuarios | |||||||
5610 | accionLog_del_usuarios | |||||||
5615 | accionLog_udel_usuarios | |||||||
5620 | accionLog_chg_licencias | |||||||
ACCIONES DE LOS EJES | ||||||||
5705 | accionLog_chg_Eje | |||||||
5710 | accionLog_out_Eje_Padre | |||||||
5715 | accionLog_del_Eje | |||||||
5720 | accionLog_add_Eje | |||||||
5725 | accionLog_set_Eje_Padre | |||||||
5730 | accionLog_add_acd_pausas_usuarios | |||||||
5735 | accionLog_del_acd_pausas_usuarios | |||||||
5740 | accionLog_add_centros_dispositivos | |||||||
5745 | accionLog_chg_centros_dispositivos | |||||||
5750 | accionLog_del_centros_dispositivos | |||||||
5755 | accionLog_add_centros_extensiones | |||||||
5760 | accionLog_chg_centros_extensiones | |||||||
5765 | accionLog_del_centros_extensiones | |||||||
5770 | accionLog_add_acd_usuarios | |||||||
5775 | accionLog_chg_acd_usuarios | |||||||
5780 | accionLog_add_relacion_campos | |||||||
5785 | accionLog_del_relacion_campos | |||||||
5786 | accionLog_chg_grabacion_configuracion | |||||||
5787 | accionLog_add_campannas | |||||||
5788 | accionLog_chg_campannas | |||||||
5789 | accionLog_del_campannas | |||||||
5790 | accionLog_udel_campannas | |||||||
5791 | accionLog_add_lista_contactos | |||||||
5792 | accionLog_chg_lista_contactos | |||||||
5793 | accionLog_del_lista_contactos | |||||||
5794 | accionLog_udel_lista_contactos | |||||||
5795 | accionLog_add_lista_llamames | |||||||
5796 | accionLog_chg_lista_llamames | |||||||
5797 | accionLog_del_lista_llamames | |||||||
5798 | accionLog_udel_lista_llamames | |||||||
5799 | accionLog_add_lista_robinson | |||||||
5800 | accionLog_chg_lista_robinson | |||||||
5801 | accionLog_del_lista_robinson | |||||||
5802 | accionLog_udel_lista_robinson | |||||||
5803 | accionLog_add_contacto | |||||||
5804 | accionLog_chg_contacto | |||||||
5805 | accionLog_del_contacto | |||||||
5806 | accionLog_udel_contacto | |||||||
5807 | accionLog_import_contactos | |||||||
5808(*) | accionLog_add_contacto_campanna | |||||||
5818 | accionLog_chg_contacto_campanna | |||||||
5809 | accionLog_chk_exist_contacto_campanna | |||||||
5810 | accionLog_add_contacto_lista | |||||||
5811 | accionLog_chk_exist_contacto_lista | |||||||
5812 | accionLog_del_contacto_lista | |||||||
5813 | accionLog_add_estrategia | |||||||
5814 | accionLog_chg_estrategia | |||||||
5815 | accionLog_del_estrategia | |||||||
5816 | accionLog_udel_estrategia | |||||||
5817(*) | accionLog_chk_exist_contacto | |||||||
5818 | accionLog_add_telefono_robinson | |||||||
5819 | accionLog_chg_telefono_robinson | |||||||
5820 | accionLog_del_telefono_robinson | |||||||
5821 | accionLog_chk_exist_robinson_lista | |||||||
5822 | accionLog_add_dat_click2call | |||||||
5823 | accionLog_chg_dat_click2call | |||||||
5824 | accionLog_del_dat_click2call | |||||||
5825 | accionLog_chk_exist_dat_click2call | |||||||
5826 | accionLog_add_aplicaciones | |||||||
5827 | accionLog_chg_aplicaciones | |||||||
5828 | accionLog_del_aplicaciones | |||||||
5829 | accionLog_add_cen_destinos | |||||||
5830 | accionLog_chg_cen_destinos | |||||||
5831 | accionLog_del_cen_destinos | |||||||
5832 | accionLog_add_acd_monitores | |||||||
5833 | accionLog_chg_acd_monitores | |||||||
5834 | accionLog_del_acd_monitores | |||||||
5835 | accionLog_add_campos_monitor_8 | |||||||
5836 | accionLog_chg_campos_monitor_8 | |||||||
5837 | accionLog_del_campos_monitor_8 | |||||||
5838 | accionLog_add_agendas | |||||||
5839 | accionLog_chg_agendas | |||||||
5840 | accionLog_del_agendas | |||||||
5841 | accionLog_add_agendas_telefonos | |||||||
5842 | accionLog_chg_agendas_telefonos | |||||||
5843 | accionLog_del_agendas_telefonos | |||||||
5844 | accionLog_add_agendas_campos_cliente | |||||||
5845 | accionLog_chg_agendas_campos_cliente | |||||||
5846 | accionLog_del_agendas_campos_cliente | |||||||
GRUPOS DE SALTO | ||||||||
5847 | accionLog_add_grupos_salto | |||||||
5848 | accionLog_chg_grupos_salto | |||||||
5849 | accionLog_del_grupos_salto | |||||||
5850 | accionLog_udel_grupos_salto | |||||||
GRUPOS DE CAPTURA | ||||||||
5851 | accionLog_add_grupos_captura | |||||||
5852 | accionLog_chg_grupos_captura | |||||||
5853 | accionLog_del_grupos_captura | |||||||
5854 | accionLog_udel_grupos_captura | |||||||
5855 | accionLog_add_grupos_locuciones | |||||||
5856 | accionLog_chg_grupos_locuciones | |||||||
5857 | accionLog_del_grupos_locuciones | |||||||
5858 | accionLog_udel_grupos_locuciones | |||||||
INFORMES DE CALIDAD | ||||||||
5859 | accionLog_add_informes_calidad | |||||||
5860 | accionLog_chg_informes_calidad | |||||||
5861 | accionLog_del_informes_calidad | |||||||
5862 | accionLog_udel_informes_calidad | |||||||
En todas se inserta el idUsuario, TAplicacion.CALL_CENTER, TComponentes.PORTAL_DE_ADMINISTRADOR, Código de la acción, "ACD_INFORME_CALIDAD", el id del informe | ||||||||
PREGUNTAS DE CALIDAD | ||||||||
5863 | accionLog_add_preguntas_calidad | |||||||
5864 | accionLog_chg_preguntas_calidad | |||||||
5865 | accionLog_del_preguntas_calidad | |||||||
5866 | accionLog_udel_preguntas_calidad | |||||||
En todas se inserta el idUsuario, TAplicacion.CALL_CENTER, TComponentes.PORTAL_DE_ADMINISTRADOR, Código de la acción, "ACD_PREGUNTAS_CALIDAD", el id de la pregunta | ||||||||
SALAS MEET | ||||||||
5867 | accionLog_add_sala_meet | |||||||
5868 | accionLog_add_perfil_sala_meet | |||||||
5869 | accionLog_add_grupo_sala_meet | |||||||
5870 | accionLog_chg_sala_meet | |||||||
5871 | accionLog_chg_perfil_sala_meet | |||||||
5872 | accionLog_chg_grupo_sala_meet | |||||||
5873 | accionLog_del_sala_meet | |||||||
5874 | accionLog_del_perfil_sala_meet | |||||||
5875 | accionLog_del_grupo_sala_meet | |||||||
5876 | accionLog_udel_sala_meet | |||||||
5877 | accionLog_udel_perfil_sala_meet | |||||||
5878 | accionLog_udel_grupo_sala_meet | |||||||
ALERTAS | ||||||||
7000 | accionLog_add_ale_entidades | |||||||
7005 | accionLog_chg_ale_entidades | |||||||
7010 | accionLog_del_ale_entidades | |||||||
7015 | accionLog_udel_ale_entidades | |||||||
7020 | accionLog_add_ale_servicios | |||||||
7025 | accionLog_chg_ale_servicios | |||||||
7030 | accionLog_del_ale_servicios | |||||||
7035 | accionLog_udel_ale_servicios | |||||||
7040 | accionLog_add_ale_destinos | |||||||
7045 | accionLog_chg_ale_destinos | |||||||
7050 | accionLog_del_ale_destinos | |||||||
7055 | accionLog_udel_ale_destinos | |||||||
7060 | accionLog_add_ale_autorizadas | |||||||
7065 | accionLog_chg_ale_autorizadas | |||||||
7070 | accionLog_del_ale_autorizadas | |||||||
7075 | accionLog_udel_ale_autorizadas | |||||||
Acciones comunes válidas para todas las situaciones si utilizamos el campo C_TABLA | ||||||||
50000 | accionLog_add_registro | |||||||
50005 | accionLog_chg_registro | |||||||
50010 | accionLog_del_registro | |||||||
50015 | accionLog_udel_registro |
3.7 Procesos propios
3.7.1 bdCentral
El 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)
- A continuación se explica los campos mas relevantes del fichero de configuración bdCentral.conf.
Campo | Descripción | Posibles valores (si aplica) |
---|---|---|
ARCH_LOG | /RUTA/FICHERO de log del proceso | |
BDHOST | IP o HOST máquina base de datos de tiempo real | |
BDUSU | Usuario acceso Base de datos de tiempo real | |
BDCLAVE | Clave usuario acceso base de datos tiempo real | |
BDRUTA | Ruta donde se depositará el dump de la base de datos | |
IGNORE_TABLAS | Tablas de las que no queramos hacer backup |
3.7.2 bdNodo
El 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.7.3 Intz-Nimitz
Permite 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.
Para mas información consultar la página de intz-nimitz.
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
Donde cada parámetro monitorizado indica:
Parámetro | Descripción |
---|---|
sis/ver | Versión del proceso |
sis/inic | Fecha de de arranque del proceso |
Sis/alarmas | Alarmas desde arranque |
Sis/ultAlar | Fecha de última alarma |
Gmp/msj | |
Gmp/buf | |
Gmp/tarea | |
Tmp/uptime | Tiempo que lleva el servicio activo |
Vic/identif | Etiqueta de identificación del servicio |
Vic/entorno | Entorno de base de datos |
Vic/conx | Conexiones activas/conexiones máximas |
Vic/numConx | Conexiones totales (último minuto) |
Mys/curro | Número de hilos contra la base de datos |
Mys/soli | Conexiones solicitadas (último minuto) |
Mys/soliErr | Conexiones solicitadas con error (último minuto) |
Mys/soliEncol | Conexiones encoladas |
Cache/cola | Colas monitorizadas/ |
Cache/vdn | VDN’s monitorizados |
Cache/usuExten |
Como complemento a los diagnósticos:
- Podremos examinar el fichero de configuración del proceso en /etc/MDtel/intz-nimitz.conf
- Podremos examinar los logs del proceso en /var/log/intz-nimitz.log
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 }
Los siguientes son los campos del fichero de configuración int-nimitz.conf:
Variable a modificar | Comentarios | Posibles valores (si aplica) |
soy_demonio | Si corro como demonio o como proceso | 1 demonio – 0 proceso |
hay_syslog | Si hay servidor de syslog | 1 lo hay – 0 no lo hay |
archivo_pid | # Archivo con identificador de proceso: (-: /var/run/intz-nimitz.pid) | |
archivo_traza | # Archivo_traza: (-: stdout o /var/log/intz-nimitz.log si soy_demonio) | |
nivel_traza | # Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo) | |
pruebas | ||
hay_flush_traza | ||
subsistema | # No se usa. No modificar | |
num_msj | # Numero de mensajes. No modificar | |
num_buf | # Numero de buffer. No modificar | |
puerto_escucha | Puerto de supervisión del demonio | |
to_periodo | Timeout para reconectar | |
hay_cache | si guarda datos o no en cache | 1 hay cache – 0 no hay cache |
colas_to_vida | # to_vida = 0, no se almacenan entradas. to_vida > 0 en segundos | |
colas_num_entrada | Número de entradas correspondiente a las colas | |
vdn_to_vida | # to_vida = 0, no se almacenan entradas. to_vida > 0 en segundos | |
vdn_num_entrada | Número de entradas correspondiente a los VDN | |
hay_regexp | ||
num_entradas | ||
inc_entradas | ||
max_entradas | ||
hay_vic | ||
puerto_escucha | Puerto de escucha a nivel de vivait-call | |
identif | ||
entorno | Nombre base de datos | |
max_conx | Número máximo de conexiones a la base de datos | |
to_solicitud | Timeout de solicitud | |
to_desconexion | Timeout de desconexión | |
ip | Dirección de red de escucha del intz-nimitz | |
msk | Máscara de red de escucha del intz-nimitz | |
ip | IP localhost | |
msk | Máscara localhost | |
hay_enrutamiento | Hay fase de enrutamiento o no | 1 hay enrutamiento – 0 no hay |
max_pre_ruta_regs | Número máximo de prerutas a cargar | |
max_ruta | Número máximo de rutas a cargar | |
max_ruta_desvios | Número máximo de rutas de desvíos a cargar | |
filtro_ancho_banda | Filtrar por ancho de banda | 1 filtrar – 0 no filtrar |
hay_mysql | Hay mysql | 1 hay -0 no hay |
host | IP o HOST máquina base de datos | |
usuario | Usuario acceso Base de datos | |
clave | Clave usuario acceso base de datos | |
base_datos | Nombre de la base de datos | |
bd_supervivencia | Hay o no base de datos de supervivencia | 1 hay base de datos de supervivencia – 0 no hay |
num_curro | Número de conexiones simultáneas a la base de datos | |
to_resp | Timeout de respuesta |
3.7.4 motorSal
Parte 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:
Parámetro | Descripción |
---|---|
SIS/ver | Versión del proceso |
SIS/inic | Fecha de de arranque del proceso |
SIS/alarmas | Alarmas desde arranque |
SIS/ultAlar | Fecha de última alarma |
Gmp/msj | |
Gmp/buf | |
Gmp/tarea | |
Tmp/uptime | Tiempo que lleva corriendo |
mtr/mys | Si está conectado al MySQL |
mtr/ocup | Porcentaje de ocupación |
mtr/planif | Contactos planificados Totales (Último minuto) |
mtr/intento | Intentos totales (Ültimo minuto) |
- Posee un fichero de configuración llamado motorSal.conf en la ruta /etc/MDtel/motorSal.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/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 }
Los campos del fichero de configuración son los siguientes:
Campo | Descripción | Posibles valores (si aplica) |
---|---|---|
soy_demonio | Si corro como demonio o como proceso | 1 demonio – 0 proceso |
hay_syslog | Si hay servidor de syslog | 1 lo hay – 0 no lo hay |
archivo_pid | # Archivo con identificador de proceso: (-: /var/run/motorSal.pid) | |
archivo_traza | # Archivo_traza: (-: stdout o /var/log/motorSal.log si soy_demonio) | |
nivel_traza | # Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo) | |
pruebas | ||
hay_flush_traza | ||
traza_milisegundos | ||
subsistema | # No se usa. No modificar | |
num_msj | # Numero de mensajes. No modificar | |
num_buf | # Numero de buffer. No modificar | |
puerto_escucha | Puerto de supervisión del demonio | |
to_periodo | Timeout para reconectar | |
hay_mysql | Hay mysql | 1 hay -0 no hay |
host | IP o HOST máquina base de datos de tiempo real | |
usuario | Usuario acceso Base de datos de tiempo real | |
clave | Clave usuario acceso base de datos de tiempo real | |
base_datos | Nombre de la base de datos | |
hay_motor | Si hay campañas saliente o no | 1 hay motor saliente – 0 no hay motor saliente |
ciclos_campanna_activa | ||
dir_estrategias | # Directorio donde se almacenan las librerias dinámicas con las estrategias | |
to_ciclo | # Periodo de ejecución del ciclo del motor | |
hay_muestreo | 1 hay muestreo – 0 no hay muestreo |
- Respecto a los logs del motorSal consultar el siguiente apartado: Trazas motorSal. Los logs pueden verse en la ruta /var/log/motorSal.log
3.7.5 MyACDSuperv
Refleja 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:
Parámetro | Descripción |
---|---|
SIS/ver | Versión del proceso |
SIS/inic | Fecha de de arranque del proceso |
SIS/alarmas | Alarmas desde arranque |
SIS/ultAlar | Fecha de última alarma |
AMI/cnx | Conectado (1) a asterisk |
AMI/ocup | Porcentaje de ocupación de MyACDSuperv |
AMI/exten | - |
AMI/asig | |
MYSQL/cnx | Conectado (1) a MySQL |
MYSQL/ms | Tiempo de última operación en ejecutarse |
Como complemento a los diagnósticos:
- Podremos examinar el fichero de configuración del proceso en /etc/MDtel/myAcdSuperv.cnf
- Podremos examinar los logs del proceso en /var/log/myAcdSuperv.log
3.7.6 Proceso escoba
El 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:
- Proceso escoba perteneciente a nodo con agente de grabación (recordNodo) llamado escobaGW.pl.
- Proceso escoba perteneciente o no a un servidor de grabación (recordCentral) llamado escobaGrabsBd.pl.
3.7.6.1 escobaGW.pl
Proceso 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.7.6.2 escobaGrabsBd.pl
Se 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:
- En DAT_SEGMENTOS obtiene todos aquellos segmentos con grabaciones que dieron error, su estado tendrá valor 120.
- En DAT_LLAMADAS obtendremos todos los registros correspondiente al segmentos anteriores.
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.7.7 recordCentral
Se 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:
- Uno dedicado para las llamadas
- Uno dedicado para los segmentos
- Uno mixto para todas las llamadas y segmentos.
El recordCentral se encarga de recoger todas las grabaciones de segmentos que tienen de estado proceso(3) en cada nodo gestionado, es decir, coger aquellos segmentos de llamadas marcados como llamadas disponibles, intenta descargar los segmentos de las llamadas y convertirlas al formato adecuado (MP3).
Como una característica particular cada diez minutos, siempre que no tenga ninguna otra tarea, intenta ver si puede establecer conexión con un nodo en cuarentena, para sacarlos de cuarentena y recoger todas las grabaciones de segmentos disponibles, para intentar convertir y descargar todas las grabaciones.
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:
Parámetro | Descripción |
---|---|
SIS/ver | Versión del proceso |
SIS/inic | Fecha de arranque del proceso |
SIS/alarmas | Alarmas desde arranque |
SIS/ultAlar | Fecha de última alarma |
MYSQL/cnx | Conectado (1) a MySQL |
NAS/llamadas | Alojamiento en NAS de llamadas activo (grabación de llamada completa en un único archivo) |
NAS/segmentos | Alojamiento en NAS de segmentos activo |
REC/llamNum | Llamadas procesadas |
REC/llamErr | Llamadas con error |
REC/segmNum | Segmentos procesados |
REC/segmErr | Segmentos con error |
NODO/fase | Número de proceso de recordCentral |
NODO/cuarentena | Lista de nodos en cuarentena, separada por comas |
NODO/descarga | Lista de nodos en descarga, separada por comas |
NODO/gestion | Lista de nodos gestionados, separada por comas (cuarentena + descarga = gestión) |
Como complemento a los diagnósticos:
- Podremos examinar el fichero de configuración del proceso en /etc/MDtel/recordCentral.pconf
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;
- Los campos del fichero de configuración son los siguientes:
Campo | Descripción | Posibles valores (si aplica) |
---|---|---|
recordCentral.pconf | ||
Variable a modificar | Comentarios | |
$depurar | # 0: Solo alarmas en archivo log - 1: alarmas y trazas | |
$soyDemonio | # 0: Arranca como proceso - 1: arranca como demonio | |
$logArch = | # Archivo de log (: salida estandar) | |
$pidArch | # Archivo para el pid (eliminando el .pid final) | |
$unaVezSolo | # 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion) | |
$toBucle | # Tiempo de espera en segundos cuando no hay conexion o cuando no hay llamadas | |
$bytesPorSegundo | # Bytes por segundo en archivos de grabaciones | |
$bytesLeerBuf | # Bytes a leer en cada accceso a disco | |
$db | Nombre de la base de datos | |
$dbHost | IP o HOST máquina base de datos de tiempo real | |
$dbPort | Puerto de escucha de mysql | |
$dbUsuario | Usuario acceso Base de datos de tiempo real | |
$dbClave | Clave usuario acceso base de datos de tiempo real | |
$supPort | Puerto de supervision del demonio | |
$grabHay | Hay fase de enrutamiento o no | |
$grabAudioCalidad | Calidad del audio | |
$grabAudioFormato | Formato del archivo de grabacion | |
$grabAudioExten | Extensión del archivo de grabacion | |
$grabAudioCifrado | Si el archivo de grabación va cifrado | |
$grabRutaUsaTimestamp | ||
$grabRutaOrig | # Directorio donde se localizan las grabaciones de llamadas | |
$grabRutaTmp | Directorio temporal de las grabaciones de llamadas | |
$grabRutaDest | # Directorio Destino de las grabaciones de llamadas | |
$grabRutaError | # Directorio de las grabaciones de llamadas con error | |
$segmHay | Hay segmentos | 1 hay segmentos – 0 no hay |
$segmUmbralTiempo | ||
$segmMargenTiempo | Tiempo que se coge antes y despues del segmento | |
$segmAudioCalidad | Calidad del audio | |
$segmAudioFormato | Formato del archivo de grabacion | |
$segmAudioExten | Extensión del archivo de grabación | |
$segmAudioCifrado | Si el archivo de grabación va cifrado | 1 se cifra – 0 no se cifra |
$segmRutaUsaTimestamp | ||
$segmRutaTmp | Ruta temporal | |
$segmRutaDest = | Ruta donde se almacenan los archivos de grabación | |
$segmRutaError | Ruta de los archivos de grabación con error | |
$tiposSegmentoGrabar | # Selección de tipos de segmento a grabar separados por comas ( = todos) | |
$grabarRing | # Indica si se graba ring | 1 se graba – 0 no se graba |
$segmExternoMinSegs | # Mínino número de segundos para generar segmento externo |
- Podremos examinar los logs del proceso en /var/log/recordCentral.log
3.7.8 recordNodo
Se 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
La explicación de los campos se muestra en la tabla siguiente:
Parámetro | Descripción |
---|---|
SIS/ver | Versión del proceso |
SIS/inic | Fecha de arranque del proceso |
SIS/amarmas | Alarmas desde arranque |
SIS/ultAlar | Fecha de última alarma |
MYSQL/cnx | Conectado (1) a MySQL |
REC/llamNum | Llamadas procesadas |
REC/llamErr | Llamadas con error |
REC/segmNum | Segmentos procesados |
REC/segmErr | Segmentos con error |
Como complemento a los diagnósticos:
- Podremos examinar el fichero de configuración del proceso en /etc/MDtel/recordNodo.pconf
- Se muestra a continuación el fichero de configuración:
# # 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';
- A continuación se indican los campos del fichero:
Campo | Descripción | Posibles valores (si aplica) |
---|---|---|
$depurar | # 0: Solo alarmas en archivo log - 1: alarmas y trazas | |
$soyDemonio | # 0: Arranca como proceso - 1: arranca como demonio | |
$logArch | # Archivo de log (: salida estandar) | |
$pidArch | # Archivo para el pid (eliminando el .pid final) | |
$unaVezSolo | # 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion) | |
$toBucle | # Tiempo de espera en segundos cuando no hay conexion o cuando no hay llamadas | |
$toProcesar | # Tiempo de guarda en segundos desde D_HORA_FIN hasta que se procesa llamada | |
$bytesPorSegundo | # Bytes por segundo en archivos de grabaciones | |
$bytesLeerBuf | # Bytes a leer en cada accceso a disco | |
$db | Nombre de la base de datos | |
$dbHost | IP o HOST máquina base de datos de tiempo real | |
$dbPort | Puerto de escucha de mysql | |
$dbUsuario | Usuario acceso Base de datos de tiempo real | |
$dbClave | Clave usuario acceso base de datos de tiempo real | |
$supPort | Puerto de supervision del demonio | |
$miNodo | # Quien es mi nodo para filtrar grabaciones | |
$grabRutaOrig | # Directorio donde se localizan las grabaciones | |
$grabRutaDest | Directorio destino de las grabaciones procesadas | |
$grabRutaError | Directorio destino de las grabacionescon error | |
$grabRutaUsaTimestamp | ||
$grabLimiteSegs | # Tiempo en segundos limite a truncar en las grabaciones (0=sin limite) | |
$segmEliminarGrabacionTrato | # Indica si se procesan segmentos de tipo tipoSegmEliminarGrabacion y patron eliminacion | 1 se procesa – 0 no se procesa |
$patronEliminarGrabacion | Patron de eliminacion | '/etc/MDtel/null.bin'--> para utilizar silencio
'/etc/MDtel/pito.slin'--> para utilzar un pitido (va asociado al fichero pito.slin). |
- Podremos examinar los logs del proceso en /var/log/recordNodo.log
3.7.9 Vivait-CTI
Permite 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:
ver | Versión del proceso |
---|---|
sis/inic | Fecha de arranque del proceso |
Sis/alarmas | Alarmas desde arranque |
Sis/ultAlar | Fecha de última alarma |
Gmp/msj | |
Gmp/buf | |
Gmp/tarea | |
Tmp/uptime | |
Cti/numConx | Número de conexiones actuales / Número de conexiones máximo |
Cti/numPend | |
Cti/numMakeCallPend | Llamadas pendientes de realizar |
Cti/numcall | |
Cti/numChan | |
Cti/numAuxStr | |
Cti/numMoniColas | Número de colas monitorizadas |
Cti/numMoniDevice | |
Cti/numMoniCall | |
Cti/numMoniCallAuto | |
Cti/numMoniCallByDevice | |
Cti/numMoni | |
Cti/auditCallErr | |
Cti/auditAuxStrErr | |
Cti/ auditMsjReqErr | |
Cti/ araChanID | |
Cti/ araUniqueID | |
Cti/ araMoni | |
Ami/esta | Estado de conexión contra manarger de asterisk |
Ami/resp | |
Ami/evs | Número de eventos (último minuto) |
Ami/descar | |
Ami/err | Errores |
Ami/errConx | Errores de conexión |
Ami/numAct | |
Ami/auditErrAct |
Como complemento a los diagnósticos:
Podremos examinar el fichero de configuración del proceso en /etc/MDtel/vivait-cti.conf
- El fichero de configuración, vivait-cti.conf, es el siguiente:
# # 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 }
Los siguientes son los campos del fichero de configuración:
Campo | Descripción | Posibles valores (si aplica) |
---|---|---|
soy_demonio | # 0: Arranca como proceso - 1: arranca como demonio | |
hay_syslog | Si hay servidor de syslog | 1 lo hay – 0 no lo hay |
archivo_pid | # Archivo con identificador de proceso: (-: /var/run/vivait-cti.pid) | |
archivo_traza | # Archivo_traza: (-: stdout o /var/log/vivait-cti.log si soy_demonio) | |
nivel_traza | # Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo) | |
pruebas | ||
hay_flush_traza | ||
subsistema | # No se usa. No modificar | |
num_msj | # Numero de mensajes. No modificar | |
num_buf | # Numero de buffer. No modificar | |
en_comandos | ||
en_eventos | ||
archivo_conf | Archivo configuracion de asterisk para las supercolas | |
puerto_escucha | Puerto de supervision del demonio | |
hay_cti | hay cti | 1 hay cti – o no hay |
max_conx | Numero maximo de conexiones | |
max_call | Numero maximo de llamadas | |
max_channel | Numero maximo de canales | |
max_monitor | Numero maximo de grabaciones | |
max_str_aux | ||
puerto_escucha | Puesto escucha del demonio | |
link_id | ||
hay_vdn | Existen vdns | 1 existen – o no existen |
hay_usuarios | Existen usuarios | 1 existen – o no existen |
clave | Clave usuario cti cifrada | |
ip | Direcion de red de escucha del cti | |
msk | Mascara de red de escucha del cti | |
makeCall_primero_dentro | ||
makeCall_primero_fuera_agente_descuelga | ||
temporizador_makeCall | Tiempo maximo para realizar llamada | |
fmt_canal_exten | ||
contexto_makeCall_primeroFuera | # contextos para llamadas salientes makeCall y makePredictiveCal | |
contexto_makeCall_primeroFueraDentro | # contextos para llamadas salientes makeCall y makePredictiveCal | |
contexto_makeCall_primeroDentro | # contextos para llamadas salientes makeCall y makePredictiveCal | |
contexto_myAcdSuperv_ProgreFuera | # contextos para llamadas salientes desde myAcdSuperv | |
contexto_myAcdSuperv_ProgreDentro | # contextos para llamadas salientes desde myAcdSuperv | |
contexto_myAcdSuperv_PredicFuera | # contextos para llamadas salientes desde myAcdSuperv | |
contexto_myAcdSuperv_PredicDentro | # contextos para llamadas salientes desde myAcdSuperv | |
contexto_redirect | # contexto para transferencias | |
expr_esExtenLocal | # expresiones regulares. Se evaluan en el orden indicado | |
expr_esExtenInterna | # expresiones regulares. Se evaluan en el orden indicado | |
expr_esCola | # expresiones regulares. Se evaluan en el orden indicado | |
expr_esPuntoDistribucion | # expresiones regulares. Se evaluan en el orden indicado | |
expr_esPuntoEnrutamiento | # expresiones regulares. Se evaluan en el orden indicado | |
expr_esNumPrivateLocal | # expresiones regulares. Se evaluan en el orden indicado | |
expr_esNumPrivateUnknown | # expresiones regulares. Se evaluan en el orden indicado | |
expr_esNumPublicNational | # expresiones regulares. Se evaluan en el orden indicado | |
expr_esNumPublicInternational | # expresiones regulares. Se evaluan en el orden indicado | |
audit_hay_Call | ||
audit_call_minutContestada | ||
audit_call_minutNoContestada | ||
audit_hay_AuxStr | ||
audit_AuxStr_minut | ||
audit_hay_MsjReq | ||
audit_MsjReq_minut | ||
max_action | Numero maximo de acciones en el manager de asterisk | |
ip_asterisk | Ip del asterisk de ACD | |
puerto_ami | Puerto del manager de asterisk ACD | |
usuario_ami | Usuario del manager de asterisk del ACD | |
clave_ami | Clave del manager de asterisk del ACD | |
to_inac | Timeout de inactividad | |
to_audit | ||
audit_max_resp | Tiempo maximo de respuesta |
- Podremos examinar los logs del proceso en /var/log/vivait-cti.conf
3.7.10 Phoneprov-TFTP
3.7.11 Introducción al aprovisionamiento
En 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.7.11.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.7.11.2 TFTP
TFTP 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:
- Utiliza UDP (puerto 69) como protocolo de transporte (a diferencia de FTP que utiliza los
puertos 20 y 21 TCP).
- No puede listar el contenido de los directorios.
- No existen mecanismos de autenticación o cifrado.
- Se utiliza para leer o escribir archivos de un servidor remoto.
- Soporta tres modos diferentes de transferencia, "netascii", "octet" y "mail”.
3.7.11.3 Funcionamiento del servidor phoneprove-TFTP
A 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.
Nota: En instalaciones grandes habrá más de uno, quizás uno por sede grande; depende de la infraestructura de DHCP. |
3.7.11.4 Parámetros necesarios de Aprovisionamiento de Teléfonos
Notas: 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]
Como existen parámetros comunes de todos los teléfonos de la misma marca de fabricante, muchos de los parámetros necesarios para el aprovisionamiento como comentamos se han generado desde MDtel en forma de plantillas, que estarán disponibles en el portal de administración VIVAit [| ver plantilla del portal de administración VIVAit].
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.7.11.4.1 Parámetros de Aprovisionamiento globales
- Configuración de la red y MAC.
- Zona horaria.
3.7.11.4.2 Parámetros de Aprovisionamiento Personales
Además de los parámetros de aprovisionamiento globales, el teléfono también obtendrá información de configuración individual, tales como:
- Número de Extensión.
- Nombre y Contraseña de usuario SIP.
- Configuración de Teclas BLF.
- Contraseña de la Interfaz Web del Teléfono IP.
- Idioma de la Pantalla.
- Orden de Preferencia de los Codecs.
3.7.11.5 Aprovisionamiento de teléfonos nivel usuario
Notas: La dirección MAC debe estar especificada en letras mayúsculas. La dirección MAC del teléfono se puede encontrar en la etiqueta adhesiva en la parte inferior del teléfono, o de lo contrario se deberá acceder desde el menú del propio terminal. |
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:
- El teléfono enviará un mensaje de multidifusión a través de la LAN.
- Este será captado por la Central Telefónica siempre que esté en la misma LAN.
- Al teléfono se le enviará una URL de aprovisionamiento.
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.
6) Finalmente aparecerá como registrado en la centralita, obtendrá una dirección IP y podra funcionar según la configuración establecida.
Nota: Si no se reaprovisiona tras un periodo largo de tiempo, desenchufe el cable de alimentación eléctrica |
3.7.11.6 Aprovisionamiento de teléfonos nivel técnico
3.7.11.6.1 Plantilla de configuración
La 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.7.11.6.2 Ficheros y paquetes necesarios
Paquetes previos: libnet-tftpd-perl, tftp-hpa, libnet-address-ip-local-perl Usuario de funcionamiento: root
Nota: los archivos y directorios que generemos podrian necesitar que se permitiera el acceso al archivo de lectura |
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
Directorios a crear:
/var/lib/phoneprov-tftp/plt /var/lib/phoneprov-tftp/bin
- El archivo de configuración, phoneprov-tftp, es el siguiente:
# # 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';
- Los campos del fuchero de configuración y su significado se muestran en la su¡iguiente tabla:
Campo | Descripción | Posibles valores (si aplica) |
---|---|---|
$depurar | # 0: Solo alarmas en archivo log - 1: alarmas y trazas | |
$soyDemonio | # 0: Arranca como proceso - 1: arranca como demonio | |
$logArch = | # Archivo de log (: salida estandar) | |
$pidArch | # Archivo para el pid | |
$unaVezSolo | # 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion) | |
$db | Nombre de la base de datos | |
$dbHost | IP o HOST máquina base de datos de tiempo real | |
$dbPort | Puerto de escucha de mysql | |
$dbUsuario | Usuario acceso Base de datos de tiempo real | |
$dbClave | Clave usuario acceso base de datos de tiempo real | |
$supPort | Puerto de supervisión del demonio | |
$miDir | ||
$bindDir | bindAddres | |
$bindPuerto | Puerto de escucha del demonio | |
$dirPlantilla | Directorio de las plantillas de aprovisionamiento | |
$dirEstatico | Directorio archivos estáticos | |
$dirDinamico | # Los archivos temporales con variables sustituidas están en el árbol de directorios a partir del indicado por '$dirDinamico'. | |
$toRRQ | ||
$toACK | Timeout ACK | |
$errACK | Número de errores de ACK | |
$tamBlq | Tamaño del bloque de archivos a transferir | |
$clasesCamposExtension | # Valores de E_TIPO_CAMPO en tabla COM_CAMPOS que enganchan ID_TABLA con CEN_EXTENSIONES | |
$clasesCamposUsuario | # Valores de E_TIPO_CAMPO en tabla COM_CAMPOS que enganchan ID_TABLA con CEN_USUARIOS | |
$nomArchMacEstaticos | # Expresiones regulares de archivos con mac estaticos (separados por '>') | |
%archivo | # Traducciones previas de nombres de archivo estaticos | |
@y000000000044.cfg | # Traducciones previas de nombres de archivo dinámicos sin mac | |
@y000000000034.cfg | # Traducciones previas de nombres de archivo dinámicos sin mac | |
@y000000000000.cfg | # Traducciones previas de nombres de archivo dinámicos sin mac | |
@y000000000004.cfg | # Traducciones previas de nombres de archivo dinámicos sin mac | |
@y000000000036.cfg | # Traducciones previas de nombres de archivo dinámicos sin mac | |
@y000000000058.cfg | # Traducciones previas de nombres de archivo dinámicos sin mac | |
@y000000000069.cfg | # Traducciones previas de nombres de archivo dinámicos sin mac | |
@snom710.htm | # Traducciones previas de nombres de archivo dinámicos sin mac | |
@snom710-firmware.xml | # Traducciones previas de nombres de archivo dinámicos sin mac | |
@spa514G.cfg | # Traducciones previas de nombres de archivo dinámicos sin mac | |
@spa512G.cfg | # Traducciones previas de nombres de archivo dinámicos sin mac |
3.7.12 Watchdog
Se 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:
Activar | Activar el Watchdog |
Desactivar | Desactiva el Watchdog |
Parada IWantToStop | Reinicia el asterisk y genera un core para pruebas |
Reload | Realiza una recarga del Watchdog y aplica cambios en su configuración |
Show | Ver el estado del Watchdog
perro avisado=0 activo=1 segsDormir=1 segsInic=60 segsGuarda=30 maxErr=3 perro nombre=sip_monitor_udp lwp=[15437] segsInic=60 segsGuarda=30 hace=11 err=0/5 |
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
Sección [perro] | activo=yes (Si esta o no activo)
segs_dormir=1 (Un tick por segundo) segs_inic=60 segs_guarda=30 max_errores=3 |
Sección [sip_monitor_udp] | segs_inic=60
segs_guarda=30 (Cada 30 segundos si no reciba trafico SIP genera core) max_errores=5 (Número máximo de errores) |
3.7.13 Proceso de Backup
Las 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:
- DIR=var/lib/asterisk/sounds/Particular
- DIR=var/lib/asterisk/moh
- DIR=etc
- DIR=etc/asterisk
- DIR=etc/cron.d
- DIR=etc/dahdi
- DIR=etc/exim4
- DIR=etc/ha.d
- DIR=etc/logrotate.d
- DIR=etc/MDtel
- DIR=etc/mysql
- DIR=etc/network
- DIR=etc/zabbix
- DIR=usr/local/sbin
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:
- Ficheros de configuración de la aplicación.
- Base de Datos.
- Dialplan.
Se guardarán 10 copias del fichero backup.cfg
Los campos disponibles en el fichero son los siguientes:
Campo | Descripción | Posibles valores (si aplica) |
---|---|---|
IP_BD | IP o HOST máquina base de datos de tiempo real | |
HAY_SMB | Si hay o no servidor SAMBA | 1 si existe servidor SAMBA o 0 si no existe |
HOST_SMB | IP o HOST servidor SAMBA | |
USU_SMB | Usuario acceso servidor SAMBA | |
CLAVE_SMB | Clave usuario acceso servidor SAMBA | |
RUTA_SMB | Ruta donde se guardará el backup en el servidor SAMBA |
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.7.13.1 Información adicional: como funciona un cron
La información sobre el fucnionamiento de un cron puede encontrarse en: Información sobre el comando cron
3.7.14 CHAT
La información para configurar el CHAT y su funcionamiento puede encontrarse en:
[enlace]
3.7.15 MEET
El esquema de conexión para el Meet es el siguiente:
La configuración necesaria en los navegadores, para posibilitar que se puedan compartir pantallas, se encuentra en el siguiente enlace
Ficheros:
- El fichero config.json tiene la configuración necesaria para proporcionar el servicio.
Fichero de configuracion MEET:
/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:
- janus.cfg
interface = IP_NODO server_name = IP_NODO ice_enforce_list = IP_NODO (e ip publicas, si las hay)
- vivait.plugin.meet.cfg
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
- vivait.plugin.move.cfg
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.7.16 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.7.16.1 Intz-gh
El 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:
Campo | Descripción |
---|---|
soy_demonio | # 0: Arranca como proceso - 1: arranca como demonio |
hay_syslog | Si hay servidor de syslog |
archivo_pid | # Archivo con identificador de proceso: (-: /var/run/vivait-cti.pid) |
|# Archivo_traza: (-: stdout o /var/log/vivait-cti.log si soy_demonio) | |
nivel_traza | # Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo) |
pruebas | |
hay_flush_traza | |
traza_milisegundos | |
subsistema | # No se usa. No modificar |
num_msj | # Numero de mensajes. No modificar |
num_buf | # Numero de buffer. No modificar |
puerto_escucha | Puesto escucha del demonio |
to_periodo | Timeout para reconectar |
hay_regexp | |
num_entradas | |
inc_entradas | |
max_entradas | |
hay_vic | |
puerto_escucha | Puerto de escucha a nivel de VIVAit Call |
identif | |
entorno | Nombre base de datos |
max_conx | Número máximo de conexiones a la base de datos |
to_solicitud | Timeout de solicitud |
to_desconexion | Timeout de desconexión |
ip | Dirección de red de escucha del intz-nimitz |
msk | Mascara de red de escucha del intz-nimitz |
ip | IP localhost |
msk | mascara localhost |
hay_mysql | Hay mysql |
host | IP o HOST maquina base de datos |
usuario | Usuario acceso Base de datos |
clave | Clave usuario acceso base de datos |
base_datos | Nombre de la base de datos |
to_resp | Timeout de respuesta |
hay_gh1 | Hay intz-gh |
exten_min_digi | # umbrales para el numero de dígitos de una extensión # sirve para saber si un peer es una extensión o un enlace |
exten_max_digi | |
exten_max | # numero máximo de extensiones soportadas |
enla_max | # numero máximo de enlaces soportados |
retro_max | # numero máximo de retrollamadas activas concurrentes. Valor por defecto --> 50 |
retro_max_b | # numero máximo de retrollamadas activas concurrentes para una extensión como destino (max 31). Valor por defecto --> 4 |
to_retro_candidato | # tiempo máximo en segs. para activar una retrollamada tras finalizar llamada. Valor por defecto --> 60 |
to_retro_activo | # tiempo máximo en segs. que una retrollamada espera a que las extensiones estén libres. Valor por defecto --> 300 |
to_limpiar | # temporizador de limpieza de tablas en segs. |
hay_ias | |
url | |
puerto | |
to_conx_cmd | # tiempo máximo en segs. para conectar con Asterisk para comandos |
to_lista_nodos | # periodo en horas para actualizar lista de id de nodos y sus direcciones ip |
Para saber si GH funciona correctamente usaremos el comando nc localhost 1116, obteniendo resultados similares a los siguientes:
- intz-gh sis ver='00.01.00' inic='20181007 081237' alarmas=0 ultAlar='00000000 000000'
- intz-gh gmp msj=252/256 buf=256/256 tarea=95/102
- intz-gh tmp uptime=86503 (1d 0h 1m 43s)
- intz-gh vic identif='gh_000' entorno='gh' conx=0/4 numConx=2349(7)
- intz-gh regExpr entr=32/32/1024 numRegExpr=0 consul=0(0)
- intz-gh ias nodos=3 cmd=11(0) cmdErr=0 tresp=0
- intz-gh gh1 exten=9/500 enla=1/20 retro=0/0/50
- intz-gh gh1 soli=2349(0) soliErr=0(0) soliEncol=0(0)
Los log's que genera el sistema se encuentran en: /var/log/intz-gh.log
3.7.16.2 mdgh.conf y Mdintz.conf
Ademá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:
Campo | Descripción |
---|---|
retro_hay | Si es YES, empleamos la retrollamada multinodo del GH, si es no, utilizamos la retrollamada de Asterisk |
subscripcion_hay | Si es YES, empleamos los BLFs del GH, si es no, utilizamos los BLFs de Asterisk |
rest_red_ip | IP del servidor donde corre el intz-gh |
rest_red_msk | Máscara de red donde corre el intz-gh |
rest_puerto_escucha | Puerto de escucha a nivel de VIVAit Call |
retro_exten_tech | Tecnología empleada en las extensiones |
retro_contexto | Contexto del GH |
retro_to_descolgar | timeot retrollamada descolgar |
retro_A_cartel_fmt | Información aparece en el display si la llamada es una retrollamada |
Campo | Descripción |
---|---|
host0 | Base de datos de tiempo real |
port0 | Puerto de escucha |
El comando para conocer el estado de los diferentes elementos en Asterisk es:
mdgh show Uso: mdgh show [config | exten <exten_num> | enla <peer>]]
Por ejemplo:
mdgh show exten 6140
- mdgh Datos de la extension 6140:
- Datos en intz-gh:
- ESTADO=NOT_INUSE
- INUSE=0
- RINGING=0
- TS=1538978766
- HACE=362
- SUBS_NODOS_NUM=1
- Estado en cache local: NOT_INUSE
mdgh show enla Trunk_MDtel
- mdgh Datos del enlace Trunk_MDtel:
- Datos en intz-gh:
- INUSE=0
- RINGING=0
- TS=1538978766
- HACE=461
El fichero de logs es el:
/var/log/intz-gh.log
3.7.16.3 Retrollamadas
El funcionamiento será el siguiente:
- La retrollamada queda programada de extensión física "A" a extensión física "B" (no queda programada a numeraciones de usuarios); esto no quiere decir que no podamos programar una retrollamada cuando hemos llamado a una numeración de usuario, pero queda programada en la extensión física en la que está ese usuario en ese momento.
- El número llamado "B" podrá ser derivado de varias causas:
- "A" ha llamado a "B"
- "A" ha llamado a un usuario ubicado en "B"
- "A" ha llamado a un destino desviado a "B"
- "A" ha llamado a un destino y por preruta acaba en "B"
- ...
- Las causas por las que se podrá programar una retrollamada son:
- "B" está ocupada
- "B" no contesta
- "B" está ocupada y no contesta (ha sonado en línea 2--> )
Solo podremos programar la retrollamada si el sistema devuelve: extensión ocupada o no contesta
Estas dos últimas casuísticas son iguales a efectos de usuario, pero no a efectos internos...
Si una llamada va a buzón, salta a un grupo ACD, a una IVR...entonces NO habrá retrollamada (porque se considera contestada)
- Para programar una retrollamada se pulsa el código de facilidad (*43#) una vez colgada la misma; el sistema recordará la última llamada durante un período de tiempo configurable; aunque entre una llamada en "A", este podrá programar retrollamada a la última saliente si sigue dentro del período
- Se podrá abortar una retrollamada ( (*44#), pero esto no borrará la última llamada (podemos arrepentirnos de haber abortado la retrollamada)
- En el gran hermano se guardará Nodo A + Ext_A (numero y name) + Ext_B (numero y name_usuario) + Causa + Timestamp
- Solo se puede programar una retrollamada y que sea la última
- Si la ultima llamada saliente es, por ejemplo exterior --> No hay posibilidad de programar ninguna retrollamada
3.7.16.3.1 Acuerdos de funcionamiento
- Un origen A solo tendrá programa una retrollamada a un destino B; si teniendo una programada decide programar otra, la primera se pierde.
- Un destino B puede serlo de múltiples orígenes "n" (configurable); cuando B esté disponible para retrollamada, se lanzará una llamada a uno de los orígenes y cuando vuelva a quedar disponible a otro de ellos.
- Si se trata de programar una "n+1" retrollamada (desde A5) para un destino B, el sistema le informará de que la retrollamada no ha podido programarse (locución a determinar)
3.7.16.3.2 Cuestiones
- Se prevé que la retrollamada suene en una extensión desviada; si "A" llama a "B" y esta está desviada en "C", si suena "C" la retrollamada que programo.
- Si salta al buzón no puede haber retrollamada.
3.7.17 GeneraConf
El 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.7.17.1 Fichero de configuración
GeneraConf 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:
- Si no se indica o se indica con valor 10 (alcanceSincroniza=10) se sincroniza el entorno VIVAit Call, excluyendo el entorno de alertas.
- Si se indica con valor 20 (alcanceSincroniza=20), se sincroniza solo el entorno de Alertas.
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; } }
Existe un fichero, generaConf.properties, que permite simular la creación de ficheros de configuración con los cambios que hayamos realizado en el portal. Los ficheros de configuración creados en modo simulación se crear en una ruta distinta a la habitual, por lo que no sobrescriben los ficheros de configuración que se están utilizando.
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.7.17.2 Ficheros de logs
El fichero con los log’s generado se encuentra en /var/log/Tomcat.x/generaConf.log.
3.8 Requerimientos de conectividad
El esquema siguiente muestra como ejemplo todos los flujos de información existentes en un entorno típico de telefonía corporativa (sin presencia) (VIVAit Call)
En el entorno de Contact Center, encontramos los siguientes flujos entre servicios (comunicaciones entre servidores, (VIVAit Suite))
y entre usuarios y servicios los reflejados a continuación:
Lado A | Lado B | Puertos | Sentido | Observ. |
---|---|---|---|---|
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 Syslog | UDP 514 | A -> B | Para envio de logs de agente |
VIVAit Supervisor | Servidor | TCP 3306 | A -> B | Acceso a Mysql Base de datos |
VIVAit Tracker | Servidor | TCP 3306 | A -> B | Acceso a Mysql Base de datos |
VIVAit Tracker | Servidor | TCP 8180 | A -> B | |
Actualizador | Servidor | TCP 80 | A -> B | Necesario para actualizaciones de versiones de aplicaciones de agente y supervisores |
Portal de administración | Servidor | TCP 8180 | A -> B | Acceso al portal de administración VIVAit Suite |
VIVAit Tracker Web | Servidor | TCP 8180 | A -> B | |
Monitor | Servidor | TCP 8180 | A -> B | Wallboard |
Monitorización | Servidor | TCP 80 | A -> B | Acceso a portal monitorización (Zabbix) |
3.9 Gateways
El concepto de gateway como tal no existe en la plataforma VIVAit; existen nodos de ACD y nodos de corporativa.
A efectos de operación un nodo de corporativa es el que en cualquier caso asumirá las funcionalidades de gateway, y recibirá las conexiones (analógicas, digitales o IP) a sistemas externos o a la RTC
El concepto gateway queda pues suscrito a entornos meramente comerciales
Incluimos no obstante en este apartado los diagnósticos y operaciones básicos de conexiones a sistemas externos o RTC
Para verificar los enlaces establecidos ejecutamos el siguiente comando en el terminal: sip show peers
Al ejecutar este comando obtenemos la salida:
Las columnas Host y Port nos muestran las conexiones establecidas y nos informa de un posible problema de conexión.
Sabremos que no existe conexión cuando la columna Host tiene el valor Unspecified y en la columna Port aparece un 0 , a continuación se muestra un ejemplo:
3.10 Servidor de grabación
3.10.1 Almacenamiento en la nube
Almacenamiento en la nube. Existe la posibilidad de que tras un determinado periodo de tiempo las grabaciones sean movidas a un almacenamiento externo. De esta operativa se encarga el proceso /usr/local/sbin/mueveGrabaciones.pl que recibe como parámetro la ruta al archivo de configuración. Dicho archivo tiene los siguientes elementos:
- $db: Nombre de la base de datos.
- $dbHost: servidor de MySQL
- $dbPort: Puerto del MySQL.
- $dbUsuario: Usuario de conexión a MySQL.
- $dbClave: Clave del usuario anterior.
- $dirBase: Directorio donde residen las grabaciones
- $diasCaducidad: Dias de antigüedad para mover las grabaciones
- $sftpHost: Servidor SFTP de destino
- $sftpPort: Puerto SFTP.
- $sftpUsuario: Usuario SFTP.
- $sftpClave: Clave del usuario SFTP.
- $simula: Si este campo vale 1, las grabaciones se copian, pero no se borran del directorio original, ni se actualiza su ubicación en la base de datos.
La grabación indica donde se encuentra mediante el campo E_UBICACION_GRABACION, que puede tener los siguientes valores:
- Sin definir (0)
- En línea (10): Las grabaciones se encuentran en el servidor de grabaciones.
- Fuera de línea (20): las grabaciones se encuentran en una ubicación externa.
3.11 Reporting
La aplicación de reporting en general no tiene procesos habituales de operación y mantenimiento. Los informes son obtenidos desde la interfaz gráfica o mediante un procedimiento de scripting, descritos en “Formato de fichero de intercambio para VIVAit Reporting”.
3.11.1 Formato de fichero de intercambio para VIVAit Reporting
Nombre | Descripción | Ejemplo |
---|---|---|
Selección de registros | ||
SQL_selec | Expresión SQL que se añadirá al where a la SQL principal. | C_ORIGEN like '6%' and C_COD_CLIENTE= '023' |
SQL_select_leido | Filtro de selección legible | Skill igual a 60310 |
SQL_orden | Lista de campos por los que se ordenará, después de los que estén ya definidos en la plantilla. | C_ORIGEN, C_COD_CLIENTE |
Salida | ||
FIC_extension | Extensión de fichero de salida: PDF, XLSX, CSV | |
FIC_tipo_entrega | 'P': Pantalla, 'D': Directorio, 'C': Correo | D |
FIC_destino | Si 'C', dirección de correo, si 'D', ruta del directorio | D:\informes\ |
Plantilla | ||
INF_modelo | Ruta del fichero de plantilla | C:\Modelos\llamadas.rep |
INF_descripción | Descripción del informe | Informe detallado de llamadas |
Base de datos | ||
BD_ip | IP o nombre de máquina | |
BD_puerto | Puerto de MySQL | |
BD_base_datos | Nombre de base de datos | |
BD_usuario | Usuario de base de datos | |
BD_clave | Clave de acceso cifrada | |
Parámetros | ||
PAR_desde_vis | Fecha inicial de selección en formato legible (o '-' si no hay) | 01/01/2016 |
PAR_hasta_vis | Fecha final de selección en formato legible (o '-' si no hay) | 31/01/2016 |
PAR_01 | Parámetro opcional | |
.. | .. | |
PAR_20 | Parámetro opcional |
El fichero tendrá un nombre único para permitir la generación simultánea de informes.
El fichero es borrado por la aplicación de forma automática.
Se pasa a la aplicación de generación de informes como parámetro. Por ejemplo:
“C:\Archivos de Programa\MDtel\Nimitz\LanzaInformes\LanzaInformes.exe” “C:\Archivos de Programa\MDtel\Nimitz\LanzaInformes\NIM00001.tmp”
Ejemplo de fichero:
SQL_selec=(DAT_ACUMULADOS_COLAS.ID_COLA in (11))
SQL_select_leido=Skill igual a 60310 SQL_orden= FIC_extension=pdf FIC_tipo_entrega=P FIC_destino=C:\ INF_modelo=skill_setsi.rep INF_descripcion=Skill. SETSI BD_ip=172.25.1.2 BD_puerto=3306 BD_base_datos=nimitz BD_usuario=nimitz BD_clave=UIk5jNY9PVX5ogg= PAR_desde_vis=- PAR_hasta_vis=- PAR_01= |
3.11.2 Resumen de significado de columnas en reporting histórico
Esta información se puede consultar en el siguiente enlace:
3.11.2.1 Consideraciones adicionales
Los tiempos se insertan en el intervalo en el que se deja ese "estado", esto provoca que en un intervalo pueda ser mayor el tiempo ACD que el tiempo conectado.
* Ejemplo:
-Llamada: Duración 15 minutos Hora fin de la llamada 13:01 -Llamada: Duración 20 minutos Hora fin de la llamada 13:24 Suma de las duraciones de las llamadas para el intervalo 35 minutos tiempo conectado del agente en el intervalo 30 minutos. Cuando los periodos consultados sean mas amplios (diario, mensual) los desfases tenderán a desaparecer.
4 Otros Diagnósticos y operaciones básicas
4.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
El orden de arranque de la plataforma deberá ser:
- En primer lugar arrancar el nodo con la base de datos de tiempo real
- Una vez finalizado el arranque del punto 1, arrancar el nodo con la base de datos de réplica
- Una vez finalizado el arranque del punto 2, arrancar el resto de nodos en cualquier orden
Al respecto del orden de apagado de nodos, es el siguiente:
- En primer lugar se apagarán, en cualquier orden, los nodos que NO CONTENGAN bases de datos de tiempo real ni bases de datos de réplica
- Una vez apagados totalmente todos los nodos del punto 1, apagaremos el nodo (o nodos) con bases de datos de réplica
- Una vez apagados totalmente todos los nodos del punto 2, se apagará el nodo con la base de datos de tiempo real
4.2 Grabación
4.2.1 Configuración de la grabación en la plataforma corporativa
Para que una llamada se grabe, lo primero de todo es que alguien tenga la capacidad de grabar. Esto se consigue diciendo al nodo que sea grabador. Esto provoca que el nodo llame al mixmonitor para grabar y se inserte un registro en el DAT_GRABACIONES. Esto no significa que ya las llamadas se vayan a grabar, ya que para eso tiene que ser procesadas por un nodo que sea grabador. Hay tres, llamémosle elementos, que se pueden grabar:
- El nodo, es decir todo lo que el nodo enrute
- Prerutas
- Objetos: que son las extensiones, usuarios, grupos corporativos, etc.
Tenemos tres formas de grabar:
- Grabar con beep periódico
- Grabar sin beep periódico
- Descartar grabación
Si de los tres elementos tenemos que uno grabe, ya sea con o sin beep periódico, esa llamada se va a grabar ya que son OR, en cuanto haya un elemento que diga que grabe se va a grabar.
Al igual pasa si tenemos que un elemento tenga descartar la grabación. La grabación no se inicia.
Referente al campo de Modo de grabación en infraestructura, este no se emplea para la grabación de corporativo, sino que solo tiene validez en ACD. Para grabación en el ACD hay que, como se ha dicho anteriormente poner un nodo que sea grabador y especificar un elemento de los tres que hay cual es el que se va a grabar.
Para que exista una grabación ha de existir un segmento asociado a esta. Los segmentos se tratan en las prerutas. Hay un campo es las prerutas que es Generar segmento al enrutar. Si está se generará el segmento del tipo de la preruta y su correspondiente grabación si esta está configurada. Si le decimos que no genere segmentos al enrutar y el sistema está configurado para que grabe, el recordCentral creará un tipo de segmento llamado externo para esa grabación. Podemos configurar si queremos que se cree o no ese segmento, para eso hay que modificar el fichero de configuración del recordCentral y poner un tiempo muy alto al campo $segmExternoMinSegs. También podemos configurar que segmentos queremos que se graben. Por defecto el recordCentral va configurado para que se graben todos los segmentos. Para decirle que solo grabe cierto tipo de segmentos hay que ponerlos los que queramos que si se graben en la variable $tiposSegmentoGrabar del fichero de configuración del recordCentral.
4.2.2 Como configurar la grabación bajo demanda
Para activar la grabación bajo demanda es necesario activar el MixMonitor.
En el Nodo hay que identificar Grabar por enrutamiento = Sin grabación.
En el Nodo ACD y/o Corporativo es obligatorio que el campo Modo de grabación de infraestructura sea igual a Graba por petición.
En la Campaña (asignar la cola a la campaña; si se pone el modo de grabación en la cola, no funciona **, ha de ir en la campaña o en el VDN) o en VDN el campo “Modo de grabación” debe ser igual a Grabación Bajo demanda inicio sin grabar ó grabando.
El formulario de VIVAit Desk que se abra cuando entre la llamada que queremos grabar ha de tener los botones de grabación.
Trazas VIVAit Desk:
gre evliniciarGrabacion infra=20 modo=10 esta=”6/Demanda sin grabar”
Para que la grabación bajo demanda esté bien configurada en la traza anterior los valores de infra y modo deben ser distintos de 0.
** Hemos visto que la grabación Bajo demanda en los Grupos ACD si funciona.
Para activarla hay que entrar en la configuración del Grupo ACD que queremos grabar y activar la grabación por enrutamiento:
Además indicamos en el modo de grabación: Grabación bajo demanda inicio sin grabar.
En la consola vemos los siguientes datos:
4.2.3 Comprobar que el servidor de grabación está activo
Si al ejecutar el comando nc ip_maquina 1114,si no se recibe ninguna respuesta, significa el servidor de grabación no estaría activo. También usando el comando ps aux | grep recordCentral , donde si no escribe ningún resultado implica que tampoco esta activo.
4.2.4 Comprobar que los nodos están conectados al servidor de grabación
Debemos fijarnos en la linea de respuesta del comando nc ip_maquina 1114, que seria:
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 recordCenral 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' |
Sabiendo que el parámetro "fase=0" es el numero que identifica el recordCentral, los demás parámetros nos indicaran los nodos disponibles , que funcionan o no en el servidor. Entonces "gestión=4,6,7,8,9,10" indica el id de los nodos que maneja el proceso.
4.2.5 Comprobar que un nodo tiene activo el agente de grabación
Si al ejecutar el comando nc ip_maquina 1113, no se recibe ninguna respuesta, significa que el nodo no tiene activo el agente de grabación. También usando el comando ps aux | grep recordNodo, donde si no escribe ningun resultado implica que tampoco esta activo.
4.2.6 Comprobar que un nodo está subiendo archivos de grabación al servidor
Debemos fijarnos en la linea de respuesta del comando nc ip_maquina 1114, que seria:
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 recordCenral 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' |
Fijándonos en "descarga=8,6,4,7,10,9" nos confirma que todos los nodos que maneja el proceso funcionan perfectamente y el servidor puede manejar las grabaciones.
4.2.7 Comprobación de grabaciones que se hayan quedado enganchadas en un nodo
Podemos fijarnos en los dos comandos, para nc ip_maquina 1114:
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 recordCenral 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' |
Fijándonos en el campo "cuarentena=" indica que ninguno de los nodos tiene problemas.
4.2.8 Comprobación del estado de ocupación del almacenamiento temporal de grabaciones en un nodo.
Desde un SSH ejecuta el comando df - h en la maquina donde creamos que debe estar ejecutando el proceso recordNod:
Filesystem | Size | Used | Avail | Use% | Mounted on |
---|---|---|---|---|---|
udev | 486M | 4,0K | 486M | 1,00% | /dev |
tmpfs | 100M | 416K | 99M | 1,00% | /run |
/dev/vda1 | 236M | 68M | 156M | 31,00% | /boot |
tmpfs | 100M | 48K | 100M | 1,00% | /var/spool/asterisk/monitor |
Nos fijaríamos en la línea marcada en negrita, el campo "Use%" indicara el porcentaje de almacenamiento temporal de grabaciones en un nodo.
4.3 Escuchas e intrusiones en asterisk
CallSpy es una aplicación elaborada para asterisk que permite a un usuario realizar escuchas e intrusiones en llamadas. En realidad tenemos dos aplicaciones en asterisk, CallSpy y CallSpyee.
4.3.1 CallSpy
Nota: Como mucho se pueden tener a dieciséis personas al mismo tiempo usando esta aplicación. |
Como hemos mencionado anteriormente, esta aplicación permite la escucha de llamadas y, opcionalmente, realiza la función de intrusión. Tiene tres opciones de configuración obligatorios que mostramos a continuación:
CallSpy(<tipoEspiado>,<expRegEspiado>,<parametrosConf>) |
La opción <tipoEspiado> se refiere a que tipo de objeto que podemos espiar correspondiente, solo debe elegirse un único tipo:
- c: escuchar una cola
- v: escuchar un vdn
- a: escuchar a un agente
- e: escuchar extensión
La opción <expRegEspiado> representa el número de la cola, VDN, agente o extensión que queremos escuchar. Tiene que ser una expresión regular. La opción <parametrosConf> se refiera a los parámetros de configuración para la llamada que podemos espiar, se pueden combinar o juntar :
- q: Desactiva el 'beep' al comienzo de cada nueva llamada.
- v([value]): Ajusta el volumen en el rango -4 a 4 (más alto, mas volumen).
- e: Habilita el que se pueda cambiar a otra llamada de la misma extensión.
- w: Habilita el que se pueda activar la intrusión (whisper).
Una vez iniciada la escucha, solo falta que entre una llamada al objetivo que estemos espiando. Al iniciar la escucha, se puede hacer lo siguiente:
- Pulsando # modifica el volumen de escucha.
- Pulsando * cambia a una nueva llamada.
- Pulsando 1 si esta habilitado, cambia a otra llamada de la misma extensión.
- Pulsando 2 si esta habilitado, inicia la función de intrusión.
- Pulsando 3 desactiva la función de intrusión.
4.3.2 CallSpyee (espiado)
Mediante esta aplicación indicamos los parámetros que permite a una llamada ser seleccionada para escuchar. Las opciones de configuración son:
CallSpyee([CID_NUM],[cola],[vdn],[agen],[exten]) Nota:No son parámetros obligatorios, por lo que no hace falta rellenar todos los campos pero si respetar sus posiciones separadas por comas. |
La explicación de los parámetros es la siguiente:
- CID_NUM: representa el call ID de la llamadas
- cola:representa el número de la cola que se quiere espiar (${QUEUE} ).
- vdn: representa el número del VDN que se quiere espiar (${VDN} ).
- agen: representa el número del agente que se quiere espiar.
- exten: representa el número de la extensión que se quiere espiar (${EXTENSION}) .
Por ejemplo si queremos escuchar todas las llamadas en las que participa una extensión determinada pondremos en la macro de extensiones:
exten => s,n,CallSpyee(,,,${EXTENSION}) |
4.3.3 Cambios para el dialplan de asterisk
El funcionamiento de este tipo de servicio conlleva un cambio en el dialplan de asterisk. En cada macro correspondiente se pondrá los diferentes CallSpyee para VDN, colas , extensiones y agentes. Pasos a seguir:
- Paso 1. Creación de un código de intrusión para cada tipo según necesidad (cola, VDN, agente y
extensión).
Ejemplo MDtel: declaramos como código de intrusión a Agente *44*NUMERO ;========================================== ;======== Intrusion a Agente ;========================================== exten => _*44*X.,1,set(CadMarcar=intrusionEspiado) exten => _*44*X.,n,set(DesL=SERVICIO) exten => _*44*X.,n,set(datoServicio=^${EXTEN:4}) exten => _*44*X.,n,Goto(finMacro,1) Nota: En la tercera línea podemos observar la expresión regular que se le pasara al CallSpy correspondiente con el número marcado por el espia. |
- Paso 2.Llamar a CallSpy con la configuración deseada.
Ejemplo MDtel: llamada a CallSpy especificando que vamos a espiar una cola (la c del primer parámetro, con la extensión introducida en el código de intrusión y con whisper, es decir, función de intrusión habilitada. ;------------------------------------------------------------------------ ; Intrusion a Espiado ;------------------------------------------------------------------------ exten => intrusionEspiado,1,NoOp exten => intrusionEspiado,n,GotoIf($["${datoServicio}"=""]?colgar) exten => intrusionEspiado,n,CallSpy(c,${datoServicio},w) exten => intrusionEspiado,n(colgar),Hangup |
- Paso 3. Llamar a CallSpyee con la configuración de las llamadas candidatas a ser escuchadas.
Ejemplo MDtel: exten => s,n,CallSpyee(,,,,${EXTENSION}) → Para extensiones exten => s,n,CallSpyee(,${QUEUE},,,) → Llamadas espiadas por cola exten => s,n,CallSpyee(,,${VDN},,) → Llamadas espiadas por VDN |
4.4 Calendarios
Nota: En la versión de VIVAit 3.5 , Se tiene que instalar el nuevo servidor de DaviCal. |
Para la configuración de los calendarios en la versión VIVAit 3.5 , se tiene que instalar el nuevo servidor DaviCal en una máquina aparte.
Se adjunta un manual para su instalación:
Manual de instalación de servidor de calendarios para VIVAit 3.5
Para la configuración de los Calendarios se hace uso de CalDAV, estándar de Internet que permite a un cliente acceder a información de planificación en un servidor remoto. Permite que varios clientes accedan a la misma información, facilitando la cooperación. Muchas aplicaciones, tanto clientes como servidores, son compatibles con este protocolo.
Si deseamos crear un calendario en la plataforma VIVAit podemos hacerlo siguiendo el siguiente enlace: Para comprobar que el servidor de calendarios funciona correctamente bastaría con cargar en la barra de direcciones la siguiente url: [|Calendarios]
http://${NODO.HOST}/dav/html/cal.php/calendars/${DAV.CUENTA}/${DAV.CALENDARIO}
donde,
- NODO.HOST: es la ip del servidor calendar
- DAV.CUENTA: hace referencia a la cuenta de usuario
- DAV.CALENDARIO: hace referencia el nombre de la cuenta
Una vez que se carga la url sabremos que el servidor funciona correctamente si visualizamos lo siguiente:
Si el sistema nos pide usuario y clave querrá decir que el servidor de calendarios está operativo en esa maquina
Para comprobar que funciona en la consola de asterisk usaremos los comandos
calendar show calendars calendar show calendar [nombreCalendario]
Nota: Debido bugs detectados, el proceso requerirá: - La realización de una sincronización manual de la sección "mdcal" desde el portal de administración - En la máquina donde esté instalado el servidor de calendarios apuntar a la IP de la BDTR (/var/www/dav/config.php)
4.5 Syslog de agentes
Syslog es un estándar para el envío de mensajes de registro en una red informática IP. Por Syslog se conoce tanto al protocolo de red como a la aplicación o biblioteca que envía los mensajes de registro. Se lanza automáticamente al arrancar un sistema Unix, y es el encargado de guardar informes sobre el funcionamiento de la máquina (eventos, seguridad del sistema, etc) pero puede contener también cualquier información como mensajes de las diferentes partes del sistema (núcleo, programas...) y los envía y/o almacena en diferentes localizaciones transmitiéndose mediante un puerto UDP. Esto permite concentrar los registros de múltiples máquinas en un único punto simplificando la labor de gestión al administrador siendo habitual que múltiples dispositivos lo soporten.
El formato del mensaje se compone de tres campos :
- La cabecera contiene la prioridad, fecha y hora del mensaje, máquina, proceso (nombre e identificador) que lo ha generado y la versión del protocolo utilizado.
- Una serie de pares clave-valor con metadatos.
- El texto del mensaje.
Si es necesario podemos activar el registro de todos los eventos telefónicos que realiza un agente ACD llamado Syslog de agentes. Su activación se realiza mediante el portal de administración VIVAit configurando unos parámetros para un usuario llamado Rastreo BBDD" y Rastreo Syslog. Para más información[| ver sección Portal de administración - General - Usuarios - Pestaña ACD ].
Elemento | Procedimiento |
Operacion | |
---|---|
Ubicación del proceso | Script arranque: /etc/init/ rsyslog.conf
Configuración : /etc/rsyslog.d/30-vivait- desk.conf |
Arranque | service rsyslog start |
Parada | service rsyslog stop |
Reinicio | service rsyslog reload |
Diagnostico | |
Registro de logs | /var/log/MDtel/vivait-desk.log
Fichero del día actual. se guardan los 30 anteriores comprimidos en tar.g |
Ejemplo 30-vivait-desk.conf:
# Default rules for rsyslog. # # For more information see rsyslog.conf(5) and /etc/rsyslog.conf # # First some standard log files. Log by facility. # local4.* -/var/log/MDtel/vivait-desk.log local5.* -/var/log/MDtel/rastreo.log
Es muy importante comprobar que el servidor de syslog escucha por el puerto 514:
################# #### MODULES #### ################# module(load="imuxsock") # provides support for local system logging module(load="imklog") # provides kernel logging support #module(load="immark") # provides --MARK-- message capability # provides UDP syslog reception module(load="imudp") input(type="imudp" port="514") # provides TCP syslog reception module(load="imtcp") input(type="imtcp" port="514") # Enable non-kernel facility klog messages $KLogPermitNonKernelFacility on ########################### #### GLOBAL DIRECTIVES #### ###########################
4.6 Generación de un Core
Un Core es la memoria de un programa.
Para generar un Core rápido con Asterisk hay que hacer lo siguiente:
Ejecutar ps aux | grep asterisk y coger el PID del programa gdb /usr/sbin/asterisk [PID] gcore [file]
5 Funcionalidades específicas
5.1 Mecanismo de prioridad adaptativa
El 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
5.1.1 Introducción
Este 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
5.1.2 Terminología
- Prioridad de llamada: A cada llamada susceptible de ser atendida en el Call Center se le asignará una prioridad de llamada; dicha prioridad será asignada cada vez que un agente quede disponible.
- Prioridad de grupo ACD: Los agentes del Call Center tendrán configurada una prioridad para cada grupo ACD al que pertenecen
- Tiempo de espera: Tiempo que una llamada lleva en espera en un determinado grupo ACD; si la llamada cambia de un grupo ACD a otro el tiempo de espera pasa a cero
- Objetivo de servicio: Tiempo objetivo máximo de espera por cada grupo ACD
Nota.- En terminología Asterisk el aumento de prioridad corresponde con números descendentes, es decir,
prioridad 50 es mejor que prioridad 70
5.1.3 Mecanismo de asignación de llamadas
En 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:
- Si el grupo ACD de la llamada está dentro del objetivo de servicio, la prioridad de llamada será la prioridad de grupo ACD (a efectos prácticos se aplicará el mecanismo convencional de asignación de llamada a agente, equitativo entre grupos ACD con misma prioridad)
- Si el grupo ACD de la llamada está fuera del objetivo de servicio, se aplicará una ponderación que mejorará la prioridad de la llamada a medida que aumente el tiempo de espera:
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
5.2 Marcación saliente
Dentro del ACD hay un comportamiento especial que es la marcación saliente. Esta puede ser de tres tipos:
- Vista previa: El agente demanda la siguiente llamada a realizar.
- Progresivo: Se llama al agente y se lanza la llamada al contacto.
- Predictivo: El sistema calcula cuando va a estar libre el agente y se adelanta lanzando varias llamadas (configurables por parámetros). La llamada que es contestada primero, se pasa a una cola (el resto se cuelgan) a la espera que el agente se quede libre.
5.2.1 Esquema de funcionamiento
Los 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.
5.2.2 Flujo de estados
El flujo de estados es el reflejado en la figura siguiente:
Los diferentes estados de un contacto son:
Estado | ID_Estado | Descripción |
---|---|---|
Planificable | 0 | El contacto está preparado para que lo gestione motorSal y según la estrategia definida se establece el campo ACD_CONTACTOS_CAMPANNAS.D_HORA_PROXIMA |
Planificado | 10 | Cuando ha llegado el tiempo marcado en HORA PROXIMA, motorSal ejecuta la 2ª fase de la estrategia, generando el intento de marcación. |
Intento | 20 | El control pasa a myAcdSuperv, que a su vez genera la llamada en Asterisk. Cuando termina, se pasa a Planificable o Finalizado. |
Finalizado | 100 | Las gestiones con este contacto han terminado. |
Abortado | 110 | |
Obsoleto | 200 | Se ha agotado el tiempo para contactar sin agotar todos los intentos. No se le vuelve a llamar nunca. |
Cancelado | 300 |
5.2.3 Carga de contactos
5.2.3.1 Descripción
A continuación se explica la configuración y funcionamiento de la utilidad encargada de asignar contactos a campañas.
5.2.3.2 Configuración
El 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.
Parámetro | Valor | Obligatorio | Defecto |
---|---|---|---|
db | Nombre de la base de datos | SI | nimitz |
dbHost | Host MySQL | SI | localhost |
dbPort | Puerto MySQL | NO | 3306 |
dbUsuario | Usuario de acceso a la base de datos | SI | |
dbClave | Clave del usuario | SI | |
rutaContactos | Ruta hasta el archivo de contactos | NO | /var/spool/MDtel/contactos |
obsoletos | Si vale 1, marcar como obsoletos los contactos anteriores | NO | 0 |
diasCaducidad | Número de dias a partir de los cuales caducarán los contactos | SI | |
idCampanna | Número de columna que contiene el ID de la campaña | SI | |
idLista | Numero de columna que contiene el ID de la lista | SI | |
prioridad | Número de columna que contiene la prioridad | NO | Nota: El valor es de 0 a 99. A mayor número mayor prioridad (se le llamará ANTES) |
tipoTarea | Número de columna que contiene el tipo de tarea | NO | Nota: los posibles valores de la columna son : *A: Alta *M: Modificación *B: Baja Por defecto el valor es A |
codCli | Número de columna del CSV que contiene el código de cliente | SI | |
nombreCon | Número de columna del CSV que contiene el nombre | NO | |
apellido1 | Número de columna del CSV que contiene el primer apellido | NO | |
apellido2 | Número de columna del CSV que contiene el segundo apellido | NO | |
empresa | Número de columna del CSV que contiene la empresa | NO | |
direccion1 | Número de columna del CSV que contiene la dirección | NO | |
direccion2 | Número de columna del CSV que contiene la dirección 2 | NO | |
codPostal | Número de columna del CSV que contiene el código postal | NO | |
localidad | Número de columna del CSV que contiene la localidad | NO | |
provin | Número de columna del CSV que contiene la provincia | NO | |
Número de columna del CSV que contiene el email | NO | ||
valFijo_1 | Número de columna del CSV que contiene el primer número fijo del contacto | SI | |
valFijo_2 | Número de columna del CSV que contiene el segundo número fijo del contacto | NO | |
valFijo_3 | Número de columna del CSV que contiene el tercer número fijo del contacto | NO | |
valFijo_4 | Número de columna del CSV que contiene el cuarto número fijo del contacto | NO | |
valMovil_1 | Número de columna del CSV que contiene el primer número móvil del contacto | SI | |
valMovil_2 | Número de columna del CSV que contiene el segundo número móvil del contacto | NO | |
valMovil_3 | Número de columna del CSV que contiene el tercer número móvil del contacto | NO | |
valMovil_4 | Número de columna del CSV que contiene el CUARTO número móvil del contacto | NO | |
edad | Número de columna del CSV que contiene la edad | NO | |
nOpc1 | Número de columna del CSV que contiene dato numérico opcional | NO | |
nOpc2 | Número de columna del CSV que contiene dato numérico opcional | NO | |
nOpc3 | Número de columna del CSV que contiene dato numérico opcional | NO | |
nOpc4 | Número de columna del CSV que contiene dato numérico opcional | NO | |
nOpc5 | Número de columna del CSV que contiene dato numérico opcional | NO | |
nOpc6 | Número de columna del CSV que contiene dato numérico opcional | NO | |
nOpc7 | Número de columna del CSV que contiene dato numérico opcional | NO | |
nOpc8 | Número de columna del CSV que contiene dato numérico opcional | NO | |
cOpc1 | Número de columna del CSV que contiene cadena opcional | NO | |
cOpc2 | Número de columna del CSV que contiene cadena opcional | NO | |
cOpc3 | Número de columna del CSV que contiene cadena opcional | NO | |
cOpc4 | Número de columna del CSV que contiene cadena opcional | NO | |
cOpc5 | Número de columna del CSV que contiene cadena opcional | NO | |
cOpc6 | Número de columna del CSV que contiene cadena opcional | NO | |
cOpc7 | Número de columna del CSV que contiene cadena opcional | NO | |
cOpc8 | Número de columna del CSV que contiene cadena opcional | NO | |
Idioma | Idioma del contacto | NO |
5.2.3.3 Funcionamiento
Para 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';
5.2.4 Comportamiento de reprogramaciones de llamadas en función del estado del agente
Se 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:
Estado del agente | Modo Cualquier Agente | Modo Solo Agente |
Agente Preparado | Entra llamada a agente | Entra llamada a agente |
Agente en Pausa | Entra llamada a otro agente disponible | Espera a agente y entra llamada. |
Agente Hablando | Espera a agente y entra llamada | Espera a agente y entra llamada. |
Agente en Tiempo administrativo | Espera a agente y entra llamada | Espera a agente y entra llamada. |
Agente no logado | Entra llamada a otro agenete disponible | Consume intento. |
Agente con una pestaña de chat abierta y el otro agente en pausa | Entra llamada a otro agente disponible | Espera a agente y entra llamada. |
Agente con dos pestañas de chat abiertas | Espera a agente y entra llamada | Espera a agente y entra llamada. |
5.3 Movilidad
La 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.
5.3.1 Ofrecer movilidad a un usuario
Para 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]).
Para más información[| ver sección Portal de administración - General - Usuarios - administración de usuarios - Pestaña Centralita].
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.
Para más información[| ver sección Portal de administración - General - Usuarios - Permisos a usuarios]
La movilidad permite disponer de las extensiones telefónicas empresariales en cualquier lugar. Por
ejemplo, con un ordenador portátil o smartphone en una ubicación remota con conexión a Internet,
podríamos tener registrada nuestra extensión remotamente, y así las llamadas hacia/desde nuestra
oficina serían enrutadas por Internet hasta el equipo en cuestión sin coste alguno.
Todo terminal tiene asociado una extensión y deberá permitir la movilidad de usuarios. La extensión se configura cambiando a SI el campo Hay Movilidad desde el apartado Extensiones de Dispositivos en VIVAit Call del portal de administración VIVAit. Para más información [| ver sección Portal de administración - VIVAit Call - Dispositivos - Extensiones]
5.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:
MdintzIdentif='cms1'
MOVIL_TIPO_RESET='10'
MOVIL_CAD_RESET='notify_yealink'
MdintzRes='OK'
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:
MdintzIdentif='cms1'
MOVIL_TIPO_RESET='10'
MOVIL_CAD_RESET='notify_yealink'
MdintzRes='OK'
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:
MdintzIdentif='cms1'
MdintzRes='movil_error_datos'
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:
MdintzIdentif='cms1'
MOVIL_EXTEN='25001'
MDintzRes='movil_ya_login'
* 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
5.4 Grabación
La grabación en VIVAit Call está diseñada para ser lo mas flexible posible.
5.4.1 Configuración
Si deseamos grabar, debemos activar que alguno de los dispositivos/elementos que intervienen en la llamada se grabe.
Estos dispositivos/elementos son:
- Nodo.
- Usuario con Centralita.
- Agente.
- Grupo ACD corporativo y de Contact Center.
- Enlace exterior.
- Extensión.
- Facilidades.
- Grupo: grupo de salto o grupo de operadoras.
- Sala de conferencia.
- VDN corporativo y de Contact Center.
- Pre-rutas.
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
'Grabar enrutamiento'
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.
'RecordCentral'
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.
5.4.2 Vivait Tracker
Desde 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
1º El tracker web llama al web service Remote login para iniciar sesión y determinar si tiene permisos para la escucha y descarga de grabaciones.
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
1º El tracker web llama al web service Remote login para iniciar sesión (comunicación https) y determinar si tiene permisos para la escucha y descarga de grabaciones. Se elimina el proxy
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 [Volver al indice]
5.5 Enrutamiento
5.5.1 Enfoque inicial
5.5.2 Funcionamiento
El proceso de enrutamiento, como vimos en el esquemático, se compone de dos fases:
- Preenrutameinto, que se encarga de tratar todas las llamadas
- Enrutamiento externo, que tiene módulos dedicados al enrutamiento hacia:
- Enlaces externos.
- Extensiones.
- Usuarios de telefonía corporativa.
- Facilidades.
- Salas de conferencia.
- Agentes de grupos ACD.
- Grupos ACD.
- Vdn.
- Buzones para dejar mensaje.
- Buzones para su gestión.
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:
- Dispositivo
- Cola
- Origen
- Nodo entrada
- UCID
- CALLER_ID_NAME
- CALLER_ID_NUM
- DNIS
- Desvío por dialplan
A partir de los datos de entrada básicos anteriores se pueden deducir los siguientes valores:
- Sede del dispositivo de entrada
- Sede del nodo de entrada
- Ancho de banda disponible en la sede del dispositivo
- Ancho de banda disponible en la sede del nodo
- Categoría entrante
- Valor del eje1 asignado a la llamadas
- CALLER_ID_NUM_EXTERNO
Los datos de salida globales del proceso de enrutamiento (pdSale) son:
- Categoría saliente
- Código de cliente (opcional)
- Tipo de destino:
- No existe
- Ruta externa
- Extensión
- Usuario de telefonía corporativa
- Facilidad
- Salas de conferencia
- Agentes de grupos ACD
- Grupos ACD
- VDN
- Buzón para dejar mensaje.
- Buzón para dejar mensaje por ocupado.
- Buzón para dejar mensaje por no contestación.
- Buzón para su gestión.
- Destinatario (cuando se trata de un usuario o de un agente)
- Valor del eje1 asignado a la llamada
- Buzón de las extensiones y usuarios que los tengan asignados
- Si el buzón está en nodo distinto al de entrada
- DESVIO_INCONDICIONAL (sólo extensiones y usuarios) (valor MENSA=desvio_mensajeria en variable)
- DESVIO_NO_CONTESTA (sólo extensiones y usuarios) (valor MENSA=desvio_mensajeria en variable)
- DESVIO_OCUPADO (sólo extensiones y usuarios) (valor MENSA=desvio_mensajeria en variable)
- DESVIO_FUERA_SERV (sólo extensiones y usuarios) (valor MENSA=desvio_mensajeria en variable)
Los datos de salida para cada una de las posibles rutas en orden son (nn va de 01 maxRutas [nn son dos dígitos decimales]):
- CONTADOR_ABDE_nn (contador para control de ancho de banda en sede de dispositivo de entrada).
- CONTADOR_ABNE_nn (contador para control de ancho de banda en sede de nodo de entrada).
- CONTADOR_ABDS_nn (contador para control de ancho de banda en sede de dispositivo de salida).
- CONTADOR_ABNS_nn (contador para control de ancho de banda en sede de nodo de salida).
- CALLER_NAME_SAL_nn , puede salir de una extensión, un usuario o de un agente.
- CALLER_NUM_SAL_nn, puede salir de una extensión, un usuario o de un agente.
- DESTINO_SAL_nn , en general, el valor C_NOMBRE o destino de salida.
- RUTA_NODO_nn , Cadena de marcación para ir la nodo que soporta DESTINO_SAL_nn, si es distinto del nodo de entrada.
- RUTA_SAL_nn
- Extensión: cadena marcación.
- Facilidad: E_CODIGO_FACILIDAD obtenido de la tabla CEN_FACILIDADES.
- Usuario: cadena marcación de la extensión asignada al usuario en movilidad o en propiedad.
- Agente: cadena marcación de la extensión a la que está conectado el agente.
- Ruta externa: contexto que gestiona la llamada saliente.
5.5.2.1 Fase preenrutamiento
La 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:
- D_CATEGORIA_SAL
- COD_CLIENTE (opcional)
- TIPO_DESTINO_SAL
- No existe.
- Volver a preenrutar.
- Ruta externa.
- Extensión.
- Usuario de telefonía corporativa.
- Facilidad.
- Sala de conferencia.
- Agente de grupos ACD.
- Grupos ACD.
- VDN.
- Buzón para dejar mensaje.
- Buzón para dejar mensaje por ocupado.
- Buzón para dejar mensaje por no contestación.
- Buzón para su gestión.
- COD_CLIENTE
- Valor del eje1 asignado a la llamada
- CALLER_NAME
- CALLER_NUM
- DESTINO
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:
- ID_CATEGORIA_ENT igual a la del dispositivo de entrada.
- CALLER_NUM de entrada
- Debe comenzar por la cadena C_ORIGEN_ENT_PREF o C_ORIGEN_ENT_PREF=NULL, con menos prioridad. Es conveniente rellenar este dato del modo más restrictivo que sea posible, independientemente de C_ORIGEN_ENT_EXPR. Ello permite disminuir el uso innecesario de recursos de evaluación de expresiones regulares.
- Debe de tener un número de dígitos igual o superior a N_ORIGEN_ENT_MIN_DIGITOS, si este valor no es NULL o cero.
- Debe de tener un número de dígitos igual o inferior a N_ORIGEN_ENT_MAX_DIGITOS, si este valor no es NULL o cero.
- Debe cumplir la expresión regular C_ORIGEN_ENT_EXPR, si ésta no es NULL.
- DNIS empiece con C_DESTINO_ENT_PREF o C_DESTINO_ENT_PREF=NULL. Es conveniente rellenar este dato del modo más restrictivo que sea posible, independientemente de C_DESTINO_ENT_EXPR. Ello permite disminuir el uso innecesario de recursos de evaluación de expresiones regulares.
- Si varias entradas cumplen la condición anterior, se prueba primero la que el campo C_DESTINO_ENT_PREF tenga una longitud mayor y, de entre éstas, la que C_ORIGEN_ENT_PREF tenga una longitud mayor.
- DNIS tenga un número de dígitos igual o superior a N_DESTINO_ENT_MIN_DIGITOS, si este valor no es NULL o cero.
- DNIS tenga un número de dígitos igual o inferior a N_ORIGEN_ENT_MIN_DIGITOS, si este valor no es NULL o cero.
- DNIS cumpla la expresión regular C_DESTINO_ENT_EXPR, si ésta no es NULL.
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:
- "=" o cadena vacía, el nuevo CALLER_NUM es igual al de entrada al proceso.
- "+" el nuevo CALLER_NUM es igual al de entrada al proceso, con los caracteres a continuación de "+" como prefijo.
- "-" se quita el número de caracteres que se indica a continuación de "-".
- "_" lo que sigue al carácter es una expresión regular que se aplica al CALLER_NUM de entrada. Dicha expresión regular tiene obligatoriamente que contener una subcadena (definida entre paréntesis, según el estándar de expresiones regulares) que nos da el nuevo CALLER_NUM de salida. Si la expresión regular no se cumpliese, se propagará el valor de entrada al proceso.
- cualquier otro valor del primer carácter determina que es una constante que sustituye el valor a la entrada.
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:
- "=" o cadena vacía, el nuevo destino es igual al de entrada al proceso.
- "+" el nuevo destino es igual al de entrada al proceso, con los caracteres a continuación de "+" como prefijo.
- "-" se quita el número de caracteres que se indica a continuación de "-".
- "_" lo que sigue al carácter es una expresión regular que se aplica al destino de entrada. Dicha expresión regular tiene obligatoriamente que contener una subcadena (definida entre paréntesis, según el estándar de expresiones regulares) que nos da el nuevo destino de salida. Si la expresión regular no se cumpliese, quiere decir que es una llamada prohibida y se encaminará hacia una facilidad por defecto.
- cualquier otro valor del primer carácter determina que es una constante que sustituye el valor a la entrada.
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:
- No existe: Se asume que no se conoce un destino para los datos de entrada, por lo que la llamada se encamina hacia una facilidad por defecto que gestiona su tratamiento.
- Extensión: A partir de las tablas CEN_DISPOSITIVOS, CEN_EXTENSIONES y CEN_NODOS, se devolverán los valores que permiten alcanzar la extensión en el nodo principal y en el secundario.
- Facilidad: A partir de las tablas CEN_DISPOSITIVOS, CEN_FACILIDADES y CEN_NODOS.
- Usuario de telefonía corporativa: A partir de las tablas CEN_USUARIOS, CEN_DISPOSITIVOS, CEN_EXTENSIONES y CEN_NODOS, se devolverán los valores que permiten alcanzar al usuario en el nodo principal y en el secundario de la extensión que corresponde en base a movilidad, con prioridad, o en base a propiedad. El caso de movilidad no se tiene en cuenta si el proceso de enrutamiento se realiza en "modo supervivencia".
- Sala conferencia: A partir de las tablas CEN_SALAS_CONFERENCIAS y CEN_NODOS.
- Agente de ACD: A partir de las tablas ACD_USUARIOS, DAT_TR_ACD_EXTENSIONES, CEN_DISPOSITIVOS, CEN_EXTENSIONES y CEN_NODOS, se devolverán los valores que permiten alcanzar al agente en el nodo principal y en el secundario.
- VDN: A partir de las tablas ACD_VDN y CEN_NODOS, se devolverán los valores que permiten alcanzar al VDN en su nodo.
- Grupo ACD: A partir de las tablas ACD_COLAS y CEN_NODOS, se devolverán los valores que permiten alcanzar al grupo ACD en su nodo.
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.
5.5.2.2 Fase de enrutamiento en casos en que el destino no es externo
Datos 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.
5.5.2.3 Fase de enrutamiento en el caso de destino externo
Datos 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:
- ID_CATEGORIA_ENT igual a la de salida del proceso de preenrutamiento.
- C_DESTINO_SAL de proceso de preenrutamiento empiece con C_DESTINO_ENT_PREF.
- Si varias entradas cumplen la condicion anterior, se prueba primero la que el campo C_DESTINO_ENT_PREF tenga una longitud mayor.
- C_DESTINO_SAL tenga un número de dígitos igual o superior a N_DESTINO_ENT_MIN_DIGITOS, si este valor no es NULL o cero.
- C_DESTINO_SAL tenga un número de dígitos igual o inferior a N_DESTINO_ENT_MAX_DIGITOS, si este valor no es NULL o cero.
- C_DESTINO_SAL cumpla la expresión regular C_DESTINO_ENT_EXPR, si ésta no es NULL.
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:
- "=" o cadena vacía, el nuevo CALLER_NUM_nn es igual al de entrada al proceso.
- "+" el nuevo CALLER_NUM_nn es igual al de entrada al proceso, con los caracteres a continuación de "+" como prefijo.
- "-" se quita el número de caracteres que se indica a continuación de "-".
- "_" lo que sigue al carácter es una expresión regular que se aplica al CALLER_NUM de entrada. Dicha expresión regular tiene obligatoriamente que contener una subcadena (definida entre paréntesis, según el estándar de expresiones regulares) que nos da el nuevo CALLER_NUM de salida. Si la expresión regular no se cumpliese, se propaga el valor de entrada al proceso.
- ">" Si existe valor para CALLER_NUM_EXTERNO, se propagará éste a la salida. En caso contrario y si no está vacía la cadena que queda al eliminar el prefijo ">", se susituye en la salida por el valor de la cadena sin prefijo. Si la cadena estuviese únicamente constituida por el valor ">", se propaga el valor de entrada.
- cualquier otro valor del primer carácter determina que es una constante sin ninguna modificación.
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:
- "=" o cadena vacía, el nuevo destino es igual al de entrada al proceso.
- "+" el nuevo destino es igual al de entrada al proceso, con los caracteres a continuación de "+" como prefijo.
- "-" se quita el número de caracteres que se indica a continuación de "-".
- "_" lo que sigue al carácter es una expresión regular que se aplica al destino de entrada. Dicha expresión regular tiene obligatoriamente que contener una subcadena (definida entre paréntesis, según el estándar de expresiones regulares) que nos da el nuevo destino de salida. Si la expresión regular no se cumpliese, se propaga el valor de entrada al proceso.
- cualquier otro valor del primer carácter determina que es una constante sin ninguna modificación.
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.
5.6 Control de ancho de banda
Para el control de ancho de banda, primero hemos de tener en consideración que una llamada puede tener asociadas hasta cuatro sedes
- Sede del terminal origen (terminal A)
- Sede del nodo de registro del terminal origen (nodo A)
- Sede del terminal destino (terminal B)
- Sede del nodo de registro del terminal destino (nodo B)
Además hemos de tener en cuenta que el audio de la conversación podrá ir:
- De manera directa entre terminal A y terminal B
- De manera indirecta, a través de los nodos A y B
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:
Variable | Campos |
---|---|
R_ABDE_xx | R = Variable de rutas --- AB = ancho de banda --- D = dispositivo --- E = Entrante --- xx = de 0 a 3 |
R_ABNE_xx | R = Variable de rutas --- AB = ancho de banda --- N = nodo --- E = Entrante --- xx = de 0 a 3 |
R_ABDS_xx | R = Variable de rutas --- AB = ancho de banda --- D = dispositivo --- S = Saliente --- xx = de 0 a 3 |
R_ABNS_xx | R = Variable de rutas --- AB = ancho de banda --- N = nodo --- S = Saliente --- xx = de 0 a 3 |
El valor de cada variable es una cadena del tipo AB.wwww.xxxx.y.z donde cada valor es:
- wwww --> id de sede
- xxxx --> ancho de banda total de la sede
- y --> número de llamadas a sumar si conversación directa
- z --> número de llamadas a sumar si conversación indirecta
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
5.7 MDflow
MDflow es una aplicación Asterisk que se basa en la unidad de medida TIC (un TIC, por defecto, corresponde a 500ms, pero es configurable).
La aplicación está diseñada para controlar el flujo de llamadas entrantes → El sistema cuenta llamadas en cada periodo TIC.
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:
- Que caja se utiliza (número del 1 al 9).
- DNIS que permite controlar para que destino queremos hacer el control de flujo.
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...
5.7.1 Proceso de instalación de mdflow en una instalación existente; → como se "añade" mdflow en un VIVAit existente
El proceso de instalación depende de dos ficheros:
- app_mdflow.c que se ha de ubicar en el directorio /usr/src/MDtel/asterisk/apps/
- MDflow.conf que ha de ponerse en /etc/asterisk/
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
5.7.2 Ejemplo claro de invocación de mdflow desde dialplan y posterior tratamiento en función de las etiquetas de salida
Por defecto el MDflow se pondrá en los siguientes ficheros de Asterisk:
- ext_InicioLlamada_ExtSIP.conf
- ext_InicioLlamada_TrunkSIP.conf
- ext_TrunkInternos.conf
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)
5.7.3 Comandos básicos de diagnóstico
Comandos básicos (dentro de la consola asterisk)
- mdflow show stats: permite ver las medidas de cada flujo configurando que etsa tomando el mdflow, cuantas colas se estan utilizando, cuanteas llamadas pasan, cuantas desbordan, cuantas son agujero, cuantos dnis masivos hay...
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
- mdflow show dnis: permite saber cuales son los DNIS masivos de la centralita
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
- mdflow show config Permite ver la configuracion de los distintos flujos
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
5.7.4 Comandos básicos de diagnóstico
El 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.
5.7.5 MDflow y las trazas
El 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))
5.8 Estadísticas en VIVAit Call
Como configurar estadísticas para VIVAit Call
6 Puesto de trabajo
El puesto de trabajo del agente en la plataforma VIVAit (para el producto VIVAit Suite) estará compuesto por:
- PC (típicamente windows) en el que reside la aplicación VIVAit Desk
- Terminal telefónico con extensión física asociada.
Para más información [| ver sección Portal de administración-VIVAit Suite ACD+ - Puestos].
6.1 Relación PC/teléfono en puesto de trabajo
Existirá una relación única entre nombre PC y extensión física asociada, si bien los agentes se identificarán por su login que les acompaña al puesto de trabajo en el que se loguen Existe un procedimiento documentado para la operativa de cambio de puesto de trabajo, en caso de ser necesario el cambio de PC o de teléfono de un puesto de trabajo.
6.1.1 Procedimiento para un cambio de puesto de trabajo
Se basa en una asignación de PC a teléfono relaccionando la extensión telefónica del terminal físico con el nombre del puesto de trabajo. La configuración de dicha asociación se realiza en el portal de administración de la plataforma.
Cualquier cambio que se realice en terminal telefónico o PC de agente ha de mantener la asociación en el portal a efectos de permitir el funcionamiento del sistema.
A continuación se reflejan los cambios más habituales:
Cambio | Procedimiento | Punto de acción |
---|---|---|
Cambio de ubicación de un PC | Opción 1.- Renombrar el PC para que conserve el nombre que tenía el anterior en esa ubicación | PC de agente |
Opción 2.- Rehacer la asignación extensión/puesto | Portal de administración | |
Instalación de PC nuevo en puesto existente | Opción 1.- Renombrar el PC para que conserve el nombre que tenía el anterior en esa ubicación | PC de agente |
Opción 2.- Rehacer la asignación extensión/puesto | Portal de administración | |
Cambio de nombre en un PC | Rehacer asignación extensión/puesto | Rehacer asignación extensión/puesto |
Cambio de ubicación de un teléfono | Rehacer la asignación extensión/puesto | Portal de administración |
Instalación de un teléfono nuevo en puesto existente | Rehacer la asignación extensión/puesto | Portal de administración |
Instalación de un nuevo puesto de agente | Hacer asignación extensión/puesto | Portal de administración |
6.2 Estructura de aplicaciones en puesto de trabajo
Las aplicaciones del puesto de trabajo pueden estar ubicadas en cualquier carpeta del sistema. Es importante tener en cuenta que los procesos de actualización, logs… escriben en dichas carpetas, por lo que el usuario de windows deberá tener permisos de lectura/escritura y borrado sobre dichas carpetas La instalación del puesto de trabajo es muy liviana para el sistema; las aplicaciones ocupan poco espacio y no se modifican ficheros del sistema operativo (registry o similares) Los ficheros importantes son
Fichero | Descrición |
---|---|
Vivait-desk.exe | Contiene la aplicación VIVAit Desk de agente |
vivait_desk_dll.dll | Este fichero contiene controles sobre los formularios (controles de
texto, algunas reglas de obligatoriedad…) |
nimitz.ini | Configuración del puesto de agente |
lanzador.exe | Aplicación de actualización de versiones |
lanzador.ini | Configuración del actualizador de aplicaciones |
Carpeta forms | En esta carpeta están ubicados los formularios que se abren ante llamada entrante o saliente |
Carpeta imágenes | Contiene las imágenes izquierda y derecha de la barra de VIVAit Desk |
6.3 Secciones de utilidad en nimitz.ini
6.3.1 Configuración del puesto de agente
El fichero nimitz.ini contiene la configuración del puesto de agente; sus principales parámetros son:
Fichero | Descripción |
Sección [bd1] | host="ip_BBDD_tiempo_real"
puerto="Nº puerto" basedatos="nimitz" usuario="nimitz" clave="UIk5jMY9PVX6ogg=" Contiene información para la conexión a BBDD de tiempo real, en la que VIVAit Desk fundamentalmente inserta información |
Sección [bd2] | host=" ip_BBDD_replica "
puerto="Nº puerto" basedatos="nimitz" usuario="nimitz" clave="UIk5jMY9PVX6ogg=" Contiene información para la conexión a BBDD de réplica, en la que VIVAit Desk solo leerá información |
Sección [telefono] | pruebas=1 (Valores válidos 0 ó 1)
Activación de funcionalidad "servicio técnico" en VIVAit Desk. Cuando usamos el parámetro pruebas=1 permitimos abrir más de una sesión de VIVAit Desk; esto puede provocar que el programa no responda y estemos obligados a resetear la aplicación puesto="Nombre puesto" |
Sección [trazas] | nivel=3 (indica el nivel de trazas suministrado por el sistema)
archivo=1 (indica que se generará un fichero con las trazas del sistema) consola=0 (Si el nivel de trazas es 3 no debemos utilizar el valor consola=1, impedirá que arranque el desk) sobreescribir=1 Se genera un fichero de trazas para la sesión activa. Cuando el desk se cierra se genera un fichero nuevo perdiendo las trazas de la sesión anterior. sobreescribir=0 se genera un fichero de trazas cuando el agente abre el desk y cuando cierra la sesión y abre una nueva se van acumulando las trazas en el mismo fichero. Activación de generación de ficheros de trazas "viva-desk.log" en carpeta de aplicaciones |
6.4 Parámetros en invocación a VIVAit Desk
La aplicación VIVAit Desk puede ser invocada con una serie de parámetros que condicionan su funcionamiento; los parámetros son:
- Primer parámetro: Nombre del archivo .ini; usado como alternativa al fichero por defecto "nimitz.ini"
- Segundo parámetro: Nombre de puesto; usado como alternativa al nombre de puesto del ordenador
- Tercer parámetro: Nombre de login; para forzar un usuario; es de utilidad si el sistema está configurado como "confiar en sistema operativo", en cuyo caso no permite seleccionar un login de agente para acceder a la aplicación
6.5 Instalación y actualización de aplicaciones de puestos de trabajo
La instalación y actualización de las aplicaciones en el puesto de trabajo pasan por disponer de los ficheros “lanzador.exe” y “lanzador.ini” (debidamente configurado) dentro de la carpeta en la que se desee instalar. Lanzando la aplicación “lanzador.exe” se instalará o actualizará el sistema.
El fichero “lanzador.ini” tiene el siguiente aspecto:
URL="http://IP_Servidor:8180/WSActualizaXML/actualizar.xml" BASE_URL_DESCARGAS="http://IP_servidor:8180/XMLFILES/"
6.6 Servicio técnico en VIVAit Desk
La activación de la funcionalidad de servicio técnico en VIVAit Desk nos permite realizar sincronizaciones manuales de la aplicación y activar trazas a nivel de Base de Datos o a nivel de log sobre el propio VIVAit Desk. Pulsando el botón derecho del ratón sobre la barra VIVAit Desk accederemos a las capacidades de soporte técnico [| Volver al índice]
7 Funcionamiento de la plataforma en modo emergencia
8 Accesos Web
Aplicación | Enlace |
---|---|
Portal de administración VIVAit Suite | http://ip_admin:8180/Vivait-Call |
VIVAit Tracker | http://ip_tracker:8180/Vivait-Tracker |
Monitor Web | http://ip_monitor:8180/MonitorWeb |
Monitorización Zabbix | http://ip_zabbix:80/zabbix |
Base de datos tiempo real | http://ip_bbdd_tr:80/phpmyadmin/ |
Base de datos réplica | http://ip_bbdd_replica:80/phpmyadmin |
8.1 Permisos de aplicaciones
Se 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:
La forma como dar permisos de aplicaciones a un usuario está explicada en la [| sección Portal de administracion - General - Usuarios ].
9 Elementos monitorizados del sistema
9.1 Generalidades de Zabbix
9.1.1 Zabbix
Zabbix es una solución de código abierto que ofrece características de monitorización avanzada de forma tecnica y para el negocio, para todo tipo de servidores, aplicaciones y equipos que forman parte de una red. La versión que utilizamos en mdtel es Zabbix 2.2.2.
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.
Direccion.IP.Zabbix.Server/zabbix |
Zabbix posee documentación tanto en wiki, foros y comunidades.Para ampliar la información se puede visitar: [Sitio oficial de Zabbix]
9.1.1.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].
- host
- En Zabbix, un host es una entidad que define el elemento en red que se desea monitorizar/supervisar activamente sus recursos locales y aplicaciones. Este puede ser una impresa, router, switch, sensores de temperatura, un servidor, un ordenador,etc, o también una aplicación. La característica de un host es que debe poseer una dirección de red (IP).
- host group
- En Zabbix, un host group (grupo host) es una agrupación lógica de los host, como una forma de organizar los dispositivos "Host" registrados en Zabbix para su monitorización. Puede contener hosts y templates. Los grupos host se utilizan en la asignación de derechos de acceso a los hosts para diferentes grupos de usuarios.
- item
- En Zabbix, un item (medida) es el parámetro que deseamos obtener del host, básicamente es una medida especifica que el servidor Zabbix recogerá de los agentes de Zabbix instalados en los host.
- trigger
- En Zabbix, un trigger(disparador) es una entidad que define un umbral para detectar la existencia de un problema en un dispositivo. Son valores recolectados por los "items", se usa para "evaluar" los datos recibidos con condiciones definidas. Las condiciones son de tipo aritmético y lógico.
- event
- En Zabbix, un event (evento) es la aparición de un suceso en Zabbix que necesita atención. Por ejemplo, el cambio de estado a raíz de un trigger, el descubrimiento de un nuevo agente (autoregistro),etc.
- action
- En Zabbix, una action(acción) son reglas predefinidas para reaccionar a un evento disparado por los triggers, es decir, define qué hacer ante un evento. Consta de operaciones (por ejemplo, una notificacion, comandos remotos) y condiciones (cuando la operación se lleva a cabo).
- notification
- En Zabbix, una notification (notificacion) es la entidad con que Zabbix nos puede notificar (Correo Electrónico,mensajes vía "SMS" o Jabber).
- template
- En Zabbix, un témplate (plantilla) viene predefinida en la instalación de Zabbix Server, con el fin de ser aplicada en base al tipo de sistema operativo(Linux, Mac, Window, etc) o en elementos que comparten los mismos parámetros de medición, por ejemplo la carga del procesador, uso de memoria y uso de recursos de red. Las plantillas son un conjunto de módulos "ITEM, TRIGGERS y GRÁFICAS", que están preconfigurados y listas para ser aplicadas a uno o varios hosts.
- application
- En Zabbix, una application (aplicación) es una agrupación lógica de los items.
- Zabbix server
- El Zabbix server (servidor de Zabbix) es el proceso central donde están definidas las configuraciones y donde se almacenan todos los datos y estadísticas recogidas de los agentes Zabbix.Consta de una base de datos, una interfaz web y el propio server. Como servidor, se encarga de recoger los datos de los agentes, calcular los triggers, enviar notificaciones, etc.
- Zabbix agent
- El zabbix agent (agente de Zabbix) es un proceso desplegado en los host que son supervisados, que funciona como un servicio y puede funcionar de forma activa y pasiva simultáneamente.
9.1.1.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:
zabbixDiscoveryQueues.pl : script utilizado para buscar colas ACD. zabbixDiscoveryVDN.pl : script utilizado para buscar VDNS. |
La explicación de como configurarla se encuentra en el manual oficial [| Zabbix detección de redes].
9.1.1.3 Notificaciones
Necesariamente, 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]
9.1.1.4 Usuarios
Zabbix permite la organización de usuarios en grupos para establecer los permisos adecuados de acuerdo al tipo de perfil que deseemos crear. Necesariamente un usuario debe permanecer a un grupo o varios grupos.Todos los usuarios acceden a la aplicación de Zabbix a través de la interfaz Web.
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 ].
9.1.1.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]
9.1.1.5.1 Graphs
Nota: Debe crearse algun item dentro del host para poder utilizar una gráfica. |
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.
9.1.1.5.2 Screens
La pantalla refiere a otra característica adaptable de ZABBIX cuál permite que los usuarios creen las pantallas personalizadas dentro de ZABBIX para exhibir la información. Se considera como una colección de gráficas y no depende del host. Una pantalla puede consistir en gráficos simples, gráficos personalizados, integrar mapas, Alertas, gráficos estadísticos o texto llano tal como los 5 valores pasados de un item particular entre otros; y mostrar la información de forma dinámica.
9.1.1.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.
9.1.1.5.4 Monitorizar el estado de los raid
Los siguientes comandos son necesarios para poder monitorizar el estado de los raid. La orden:
>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".
9.2 Zabbix en MDtel
9.2.1 Configuraciones de Zabbix
9.2.1.1 Agentes Zabbix
Nota: Hay que instalar un agente Zabbix en cada maquina que se quiera monitorizar. |
El agente de Zabbix puede recoger datos:
- De forma pasiva: el server contacta al agente pidiéndole un dato (por ejemplo el consumo de CPU en ese instante) y el agente responde al server con ese dato. A esta acción del agente le llamaremos Agente activo.
- De forma activa: en un primer momento, el server le enviará al agente el listado de items a monitorizar. A partir de ese momento, será el agente que de forma periódica recogerá datos sobre esos ítems y se los hará llegar al server. A esta acción del agente le llamaremos 'Agente pasivo'.
9.2.1.1.1 Configurar agente de forma pasiva
Para configurar el agente de Zabbix necesitamos acceder a la maquina 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.
##### Passive checks related ### Option: Server # List of comma delimited IP addresses (or hostnames) of Zabbix servers. # Incoming connections will be accepted only from the hosts listed here. # If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' # are treated equall$ # # Mandatory: no # Default: Server= IP.Server Zabbix. |
Tras la configuración del fichero, debemos reiniciar el servicio de los agentes.
sudo service zabbix-agent restart |
9.2.1.1.2 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.
##### Active checks related ### Option: ServerActive # List of comma delimited IP:port (or hostname:port) pairs of Zabbix serv$ # If port is not specified, default port is used. # IPv6 addresses must be enclosed in square brackets if port for that hos$ # If port is not specified, square brackets for IPv6 addresses are option$ # If this parameter is not specified, active checks are disabled. # Example: ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12$ # # Mandatory: no # Default: ServerActive=127.0.0.1 --------------------------sección separada---------------------------- ### Option: UserParameter # User-defined parameter to monitor. There can be several user-defined pa$ # Format: UserParameter=<key>,<shell command> # See 'zabbix_agentd' directory for examples. # # Mandatory: no # Default: # UserParameter= User_parameters:asterisk.pid, /usr/bin/asterisk -rx 'core show chanels'|grep 'active calls'| cat -d -f 1 |
El parámetro User_parameters tiene un formato de este estilo:
User_parameters: NombreMedida, comando. |
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.
sudo service zabbix-agent restart |
9.2.1.2 Scripts del Servidor Zabbix
Nota: No olvidar que en la misma maquina del server Zabbix, debe configurarse como agente de 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"
ls /usr/local/sbin/ |grep zabbixSender zabbixSenderACDBD.pl zabbixSenderACD.pl zabbixSenderCTI.pl zabbixSender-intz-nimitz.pl zabbixSenderMotorSal.pl zabbixSenderMyACDSuperv.pl zabbixSenderRecordNodo.pl zabbixSenderRecordCentral.pl |
Se crea una tarea programada en linux para poder ejecutarse los scripts, programando el tiempo en que debe ejecutarse.
Si visualizo que "............" aparece:
- root zabbix
9.2.1.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
$db: Nombre de la BBDD (normalmente nimitz) $dbHost: Dirección IP del servidor de BBDD de TR (normalmente BDTR) $dbPort: Puerto MySQL (normalmente 3306) $dbUsuario: Usuario MySQL (normalmente nimitz) $dbClave: Clave del usuario $sZab: Dirección IP del servidor Zabbix $hZab: Nombre del host Zabbix (normalmente el nombre de máquina, tal y como se configura en zabbix_agentd.conf o en el host en la web de Zabbix) |
9.2.1.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.
$db: Nombre de la BBDD (normalmente nimitz) $dbHost: Dirección IP del servidor de BBDD de TR (normalmente BDTR) $dbPort: Puerto MySQL (normalmente 3306) $dbUsuario: Usuario MySQL (normalmente nimitz) $dbClave: Clave del usuario $sZab: Dirección IP del servidor Zabbix $hZab: Nombre del host Zabbix (normalmente el nombre de máquina, tal y como se configura en zabbix_agentd.conf o en el host en la web de Zabbix) |
9.2.1.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:
--sZab: Ip del servidor Zabbix. Si se omite, se asume localhost. --hZab: Nombre del host Zabbix. Si se omite, se asume el nombre de máquina local. |
9.2.1.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:
--sZab: Ip del servidor Zabbix. Si se omite, se asume localhost. --hZab: Nombre del host Zabbix. Si se omite, se asume el nombre de máquina local. |
9.2.1.2.5 zabbixSenderMotorSal.pl
Uso: Obtener estado y los distintos valores de motorSal.
Ubicación: Servidor donde se ejecute motorSal.
Parámetros:
--sZab: Ip del servidor Zabbix. Si se omite, se asume localhost. --hZab: Nombre del host Zabbix. Si se omite, se asume el nombre de máquina local. |
9.2.1.2.6 zabbixSenderMyACDSuperv.pl
Uso: Obtener estado y los distintos valores de myAcdSuperv.
Ubicación: Servidor donde se ejecute myAcdSuperv.
Parámetros:
--sZab: Ip del servidor Zabbix. Si se omite, se asume localhost. --hZab: Nombre del host Zabbix. Si se omite, se asume el nombre de máquina local. |
9.2.1.2.7 zabbixSenderRecordNodo.pl
Uso: Obtener estado y los distintos valores de recordNodo.
Ubicación: Servidor donde se ejecute recordNodo.
Parámetros:
--sZab: Ip del servidor Zabbix. Si se omite, se asume localhost. --hZab: Nombre del host Zabbix. Si se omite, se asume el nombre de máquina local. |
9.2.1.2.8 zabbixSenderRecordCentral.pl
Uso: Obtener estado y los distintos valores de recordCentral.
Ubicación: Servidor donde se ejecute recordCentral.
Parámetros:
--sZab: Ip del servidor Zabbix. Si se omite, se asume localhost. --hZab: Nombre del host Zabbix. Si se omite, se asume el nombre de máquina local. |
A continuación se muestra una tabla resumen de los distintos scripts y sus funcionalidades:
9.2.1.2.9 Dimensionamiento del servidor (Startpollers)
Nota: EL parámetro StartPollers es un parámetro numérico que forma parte del fichero de configuración del servidor Zabbix(zabbix_server.conf). Por defecto el servidor Zabbix está configurado para iniciar con cinco 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.
9.2.1.3 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:
Templates | Se instalan en general |
---|---|
DRBD | SI (si clúster) |
motorSal | - |
Vivait-Suite ACD | - |
Vivait-Suite BBDD | - |
Vivait-Suite Record | - |
Vivait-Suite GW | - |
Vivait-Call Asterisk | - |
Vivait-Call bdCentral | - |
Vivait-Call bdNodo | si |
cambiarPerfil_Cal | - |
Template App Zabbix Server | - |
Template_OS_Linux* | si(si no posee ip virtuales de clúster) |
Template_App_MySQL | si |
Templates | ACD | Corporativo/GW |
---|---|---|
DRBD | - | - |
motorSal | - | - |
Vivait-Suite ACD | Si | - |
Vivait-Suite BBDD | - | - |
Vivait-Suite Record | - | - |
Vivait-Suite GW | - | Si |
Vivait-Call Asterisk | - | Si |
Vivait-Call bdCentral | - | - |
Vivait-Call bdNodo | - | - |
cambiarPerfil_Cal | - | - |
Template App Zabbix Server | - | - |
Template_OS_Linux* | - | - |
Template_App_MySQL | - | - |
Templates | BBDD Tiempo Real |
BBDD Réplica |
BBDD Copia |
---|---|---|---|
DRBD | - | - | - |
motorSal | Si(si ACD) | - | - |
Vivait-Suite ACD | - | - | - |
Vivait-Suite BBDD | si | si | si |
Vivait-Suite Record | - | - | - |
Vivait-Suite GW | - | - | - |
Vivait-Call Asterisk | - | - | - |
Vivait-Call bdCentral | si | - | - |
Vivait-Call bdNodo | - | - | - |
cambiarPerfil_Cal | - | - | - |
Template App Zabbix Server | - | - | - |
Template_OS_Linux* | - | - | - |
Template_App_MySQL | - | - | - |
Templates | Administración |
---|---|
DRBD | - |
motorSal | - |
Vivait-Suite ACD | - |
Vivait-Suite BBDD | - |
Vivait-Suite Record | - |
Vivait-Suite GW | - |
Vivait-Call Asterisk | - |
Vivait-Call bdCentral | - |
Vivait-Call bdNodo | - |
cambiarPerfil_Cal | SI (si posee servidor calendarios) |
Template App Zabbix Server | - |
Template_OS_Linux* | - |
Template_App_MySQL | - |
Templates | Servidor de grabaciones |
---|---|
DRBD | - |
motorSal | - |
Vivait-Suite ACD | - |
Vivait-Suite BBDD | - |
Vivait-Suite Record | Si |
Vivait-Suite GW | - |
Vivait-Call Asterisk | - |
Vivait-Call bdCentral | - |
Vivait-Call bdNodo | - |
cambiarPerfil_Cal | - |
Template App Zabbix Server | - |
Template_OS_Linux* | - |
Template_App_MySQL | - |
Templates | General | Contact Center |
---|---|---|
DRBD | - | - |
motorSal | - | - |
Vivait-Suite ACD | - | - |
Vivait-Suite BBDD | - | - |
Vivait-Suite Record | - | - |
Vivait-Suite GW | - | - |
Vivait-Call Asterisk | - | - |
Vivait-Call bdCentral | - | - |
Vivait-Call bdNodo | - | - |
cambiarPerfil_Cal | - | - |
Template App Zabbix Server | si | - |
Template_OS_Linux* | - | - |
Template_App_MySQL | - | - |
9.2.1.3.1 Resumen
Plantillas MDTEL | Trigger | Descripción | Severidad | Actuación a llevar a cabo |
---|---|---|---|---|
Template DRBD | DRBD balanceado en {HOST.NAME} | El DRBD ha balanceado en Host | Desastre | Revisar ambos nodos del cluster.
Comprobar que el DRBD está sincronizado (cat /proc/drbd). |
Template DRBD | DRBD desconectado en {HOST.NAME} | El DRBD esta desconectado en Host | Desastre | Revisar Host. Comprobar estado del DRBD (cat /proc/drbd) |
Template DRBD | DRBD no actualizado en {HOST.NAME} | Estado de disco invalido en DRBD (cat /proc/drbd no devuelve UpToDate) | Desastre | Forzar sincronización del DRBD |
Template motorSal | motorSal caido | El motorSal esta caido | Desastre | Reiniciar motorSal.
Revisar log (var/log/motorsal.log) para averiguar la causa |
Template Vivait-Call Asterisk | Asterisk reiniciado | El Asterisk se ha reiniciado | Alta | Comprobar que ha arrancado correctamente.
Salvar core (/tmp/core.XXX) y full (/var/log/asterisk/full) a ubicación segura. |
Template Vivait-Call Asterisk | Error en enrutamiento | Error en enrutamiento | Baja | Revisar full de asterisk para comprobar donde está el error.
Corregir (añadir prerutas o lo que sea necesario). |
Template Vivait-Call Asterisk | No hay extensiones registradas | No hay extensiones registradas | Alta | Revisar full de asterisk para comprobar donde está el error.
Revisar sip_WEB.conf |
Template Vivait-Call Asterisk | No hay trunks activos | No hay trunks activos | Baja | Revisar full de asterisk para comprobar donde está el error.
Revisar enlaces en portal. |
Template Vivait-Call bdCentral | Error en bdCentral | Se ha dado un error en el bdCentrlal | Alta | Revisar BBDD central. |
Template Vivait-Call cambiarPerfil_Cal | cambiarPerfil_Cal no ejecutado | No se ha ejecutado cambiarPerfil | Alta | Revisar log (/var/log/cambiarPerfil_Cal.log).
Actuar en consecuencia |
Template Vivait-Call cambiarPerfil_Cal | Error en cambiarPerfil_Cal | Ha dado un error al cambiar el perfil | Alta | Revisar log (/var/log/cambiarPerfil_Cal.log).
Actuar en consecuencia |
Template Vivait-Suite ACD | PID Asterisk cambiado | El PID de Asterisk ha cambiado | Desastre | Comprobar que ha arrancado correctamente.
Salvar core (/tmp/core.XXX) y full (/var/log/asterisk/full) a ubicación segura |
Template Vivait-Suite ACD | VivaitCTI caido | El CTI está caido | Alta | Reiniciar vivait-cti. Comprobar en log (/var/log/vivait-cti.log) la causa |
Template Vivait-Suite ACD | Vivait-CTI desconectado de Asterisk | El CTI está desconetado de Asterisk | Desastre | Comprobar que ha arrancado correctamente.
Salvar core (/tmp/core.XXX) y full (/var/log/asterisk/full) a ubicación segura. |
Template Vivait-Suite BBDD | MyACDSuperV caido | MyACDSuperV esta caido | Alta | Iniciar myAcdSuperv. Comprobar en log /var/log/myAcdSuperv.log) la causa. |
Template Vivait-Suite GW | {HOSTNAME} Asterisk caido | El asterisk en esa maquina se encuentra caido | Alta | Comprobar que ha arrancado correctamente.
Salvar core (/tmp/core.XXX) y full (/var/log/asterisk/full) a ubicación segura. |
Template Vivait-Suite GW | {HOSTNAME} Asterisk PID cambiado | El PID de Asterisk ha cambiado | Alta | Comprobar que ha arrancado correctamente.
Salvar core (/tmp/core.XXX) y full (/var/log/asterisk/full) a ubicación segura. |
Template Vivait-Suite GW | {HOSTNAME} error en numero de enlaces | Existe un error en el numero de enlaces | Baja | Revisar full de asterisk para comprobar donde está el error.
Revisar sip_WEB.conf |
Template Vivait-Suite GW | {HOSTNAME} error en numero procesos asterisk | Existe un error en el numero de procesos de asterisk | Alta | grep aster” cuantos asterisk aparecen.
Solo tiene que aparecer un safe_asterisk y un asterisk. |
Template Vivait-Suite GW | Alarma en recordnodo | Alarma en recordnodo | Media | Revisar log (/var/log/record/recordNodo.log).
Actuar en consecuencia. |
Template Vivait-Suite GW | Espacio libre en /var/spool/asterisk/monitor menor del 15% | Espacio libre en /var/spool/asterisk/monitor menor del 15% | Desastre | Revisar log (/var/log/record/recordNodo.log).
Actuar en consecuencia. |
Template Vivait-Suite GW | Espacio libre en /var/spool/asterisk/monitor menor del 40% | Espacio libre en /var/spool/asterisk/monitor menor del 40% | Desastre | Revisar log (/var/log/record/recordNodo.log).
Actuar en consecuencia. |
Template Vivait-Suite GW | Porcentaje de nodos libres en /var/spool/asterisk/monitor menor al 25% | Porcentaje de nodos libres en /var/spool/asterisk/monitor menor al 25% | N/A | Revisar log (/var/log/record/recordNodo.log).
Actuar en consecuencia. |
Template Vivait-Suite GW | Sin datos de grabaciones movidas | Sin datos de grabaciones movidas | Alta | Revisar log (/var/log/record/recordNodo.log).
Actuar en consecuencia |
Template Vivait-Suite GW | Sin espacio en dispositivo | Sin espacio en dispositivo | N/A | Revisar log (/var/log/record/recordNodo.log).
Liberar espacio moviendo grabaciones |
Template Vivait-Suite Record | recordCentral Gateways en cuarentena | Baja | Revisar log (/var/log/record/recordCentral.log).
Revisar GW afectado (conexión SSH, procesos corriendo, etc.). | |
Template Vivait-Suite Record | recordCentral NAS llamadas desconectado | Media | Revisar estado NAS (normalmente NFS montada en /var/lib/recordProcesad/segmRecord) | |
Template Vivait-Suite Record | recordCentral NAS segmentos desconectado | Media | Revisar estado NAS (normalmente NFS montada en /var/lib/recordProcesad/segmRecord) | |
Template Vivait-Suite Record | recordCentral retrasado en exceso | Media | Comprobar con “nc localhost 1114” desde el propio host de cuanto es el retraso.
Monitorizar que se reduce con el paso del tiempo. |
* 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
9.2.1.3.2 Importar templates
Las plantillas propias de mdtel se encuentran en la ruta "/usr/src/nimitz/archivos" y empiezan con el nombre de "TemplateXXX.xml".
ls /usr/src/nimitz/archivos | grep Template Template DRBD.xml Template motorSal.xml Templates Vivait-Suite_GW.xml Templates Vivait-Suite.xml Template Vivait-Call Asterisk.xml Template Vivait-Call bdCentral.xml Template Vivait-Call bdNodo.xml Template Vivait-Call cambiarPerfil_Cal.xml |
La importación se realizara una vez a través de la web, no hace falta desde el servidor Zabbix, puede ser en cualquier computadora con acceso a la interfaz web de Zabbix.
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".
9.3 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.
9.3.1 Configuración de los equipost (host) para la monitorización
Nota: Tenga en cuenta que debe de estar previamente configurado el agente Zabbix del dispositivo a ser monitorizado apuntando a la IP del "Servidor Zabbix". |
Existen dos tipos de host:
- Host físico: donde la dirección de red que registramos en Zabbix, corresponde al dispositivo que deseamos monitorizar.
- Host virtual: es una dirección IP virtual, que puede relacionarse con un servidor Web, clusters, etc.
Las opciones basicas para configurar un host son las siguientes:
Campos | Explicación | Valores posibles |
---|---|---|
Host Name | Definir un nombre para el host. | Se puede utilizar números, letras, espacios y guiones bajos están permitidos. |
Visible Name | Identificar con un nombre, la maquina a la que se refiere el host. | Si no tiene valor, se mostrara como nombre "Host Name". |
Groups | Seleccionar al grupo de host que pertence.Seleccione uno o varios grupos de la caja derecha. | Los valores que puede seleccionar por defecto:
Discoverd hosts. Switches. Templates. Templates MDtel. Zabbix servers. Linux Servers. Hypervisors. Virtual machines. O crear uno nuevo en New group. |
Agent interfaces | Se recomienda usar una dirección IP, en vez de un nombre de la maquina para resolver por un servidor de DNS que puede fallar. | 10050 por defecto |
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.
9.3.1.1 Comprobación de disponibilidad del host
Para saber si todo esta bien debemos ver la Z de disponibilidad.
Indicacion de los colores del icono Z:
- Si el icono Z en la columna de disponibilidad es de color rojo, indica que hay un error en la comunicación - mueva el cursor del ratón sobre él para ver el mensaje de error.
- Si el icono es gris, significa que esta en proceso de comunicación con el "Agente Zabbix". Compruebe que el servidor Zabbix está en marcha, y pruebe a actualizar la página más tarde. El tiempo estimado para revisar si existe problemas es de 5 minutos.
- Si el icono es verde, esta funcionando correctamente.
9.3.2 Indicar que plantilla (template) tendra el host [opcional]
Tras importar templates nos dirigimos al host ya configurado, y en su pestaña de templates pulsamos "add" y añadimos la plantilla/s adecuadas.
9.3.3 Asignar items al host
Nota:Un host puede tener un ITEM sin necesitad de tener template. |
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 :
Campos | Explicación | Valores posibles | |
---|---|---|---|
Name | Definir un nombre para el item. Este nombre va a ser nuestro identificador para todas la gestiones en donde lo involucremos como el caso de Triggers. | ||
Type | Indicar de que entidad queremos recibir informacion. | Puede ser al "Agente Zabbix" o a el Hardware como impresoras, switch o routers. | |
Key | los "Items" utilizan "Key" que son parámetros de Zabbix. Los "Key" nos permiten indicar específicamente que tipo de información vamos a solicitara a la entidad. Se puede considerar también como el nombre de alguna aplicación. | ||
host interface | Es la direccion de red del servidor zabbix (puede ser uno o mas) | ||
Units | Es la dirección de red del servidor zabbix (puede ser uno o mas) | ||
Type of information | Tipo de unidades con el que mostrar Zabbix el valor segundos, minutos, euros,.... |
Cuando termine, haga clic en Guardar. El nuevo elemento debe aparecer en la ITEMLIST. Para mas informacion [ver documentación Zabbix]
9.3.3.1 Ver la información recolectada por el item
Nota: Normalmente para ver la información lo encontraremos en "Monitoring → Latest data",luego clic en el signo "+" en "other" siempre que no pertenezca a una aplicación. En caso contrario, estará bajo el nombre de la aplicación. |
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:
- Ingrese al "Item" y revise que la información del "Key" este igual al ejemplo "system.cpu.load"
- Verifique que el agente este funcionando en el "Servidor a ser monitoreado" y que "El Servidor recolector Zabbix" este funcionando.
- El icono "Z" en el host debe estar en color verde.
- Asegure que esta monitoreando el servidor que le agregó este "Item"
9.3.4 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.
Nota: Un trigger necesita una accion, que indica que hacer cuando se activa el trigger. |
Un trigger(disparador) es un tipo de reacción ante unas medidas, como un disparador en el que si pasa algo se activa. Los Trigger en Zabbix son módulos que creamos a uno o múltiples "Items" para evaluar o comparar los valores recolectados por los "Items" con condiciones que nosotros definamos. Las condiciones son de tipo aritmético y lógico.
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 :
Campos | Explicación | Valores posibles |
---|---|---|
Name | Definir un nombre para el trigger. Este nombre va a ser nuestro identificador para todas la gestiones en donde lo involucremos como el caso de los eventos. | |
Expression | Hay que indicar para que medida se crea (item) y sus funciones con los parametros adecuados. Recomendación usar expression constructor que pedirá siempre al crearlo, para que item es y sus funciones... | Ejemplo: {New host:system.cpu.load.avg(180)}>2 |
Key | los "Items" utilizan "Key" que son parámetros de Zabbix. Los "Key" nos permiten indicar específicamente que tipo de información vamos a solicitara a la entidad. Se puede considerar tambien como el nombre de alguna aplicacion. | |
Descripción | Una descripción breve sobre el trigger. | |
Severity | everidad distinguida por colores, | No classified
Information Warning Average High Disaster |
9.3.4.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.
9.3.5 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:
- A través de mensajes simples, alertando al instante.
- Escalar los mensajes hacia el jefe y/o otros grupos.
- Ejecución de commandos remotos.
- Notificaciones repetidas hasta que se resuelve el problema.
- Notificaciones y comandos retardados.
- Escenario complejo, la combinación de todo lo anterior.
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]]. -->
10 Integraciones con servicios externos
10.1 Presencia con Openfire
VIVAit se integra con servidor XMPP Openfire en su versión 3.10.2 (última probada)
Además del servidor, es necesario instalar un plugin de integración con asterisk 13, denominado "asterisk IM", versión 1.4.1
La instalación del servidor Openfire es una instalación estándar, realizada de paquete
La instalación del plugin es un "jar" que se carga desde la pagina de plugins de openfire
Con esto conseguiremos comunicar asterisk y OPenfire de manera que:
- Los estados telefónicos de una extensión VIVAit se reflejen en Openfire
- Poder marcar desde los clientes de IM instalados en los puestos
- Ver en el cliente llamadas entrantes al teléfono
Enlaces de interes:
10.2 Reuniones virtuales con Openmeetings
OpenMeetings es un sistema de vídeo web-conferencia en tiempo real. Usando recursos como audio (micrófono), vídeo (cámara web), posibilidad de subir y convertir presentaciones (en PDF , PPT o ODP que se convierten a Flash), compartición de la pantalla de tu ordenador, o pizarra digital compartida, panel de administración, posibilidad de grabar las sesiones… y completo soporte multiplataforma, es decir, que aparte de poder grabar las sesiones, se puede compartir un escritorio también desde una máquina Linux.
Para instalar OpenMettings debe seguir el [| manual de Instalación de Openmeetings]
11 Marcador Predictivo
La marcación, como la conocemos hasta ahora, comienza en la tabla de contactos del portal. MotorSal cambia los contactos del portal en la Base de Datos, para que vayan pasando por distintos estados. El cambio de estado de planificable a planificado se hace por prioridad de antigüedad→ los más antiguos tienen mayor prioridad. En el nuevo marcador predictivo aparece un parámetro nuevo “N_PARAM13", del MotorSal, que indicará el porcentaje de contactos antiguos y el porcentaje de contactos nuevos que cambiarán de planificables a planificados.
- Un marcador predictivo genera llamadas automáticas en entornos de contact center, orientando el modelo a conseguir la mayor productividad posible (agentes en conversaciónla mayor parte del tiempo).
- El objetivo del sistema es conectar a clienetes llamados con agentes disponibles, consiguiendo que los agentes estén el menor tiempo posible disponibles.
- Los marcadores predictivos mejoran su precisión con un volumen alto de llamadas. Se considera que mejoran su eficacia a partir de la existencia de 20 agentes simultáneos.
- La unidad de medida del tráfico utilizada es el ERLANG: Un agente hablando todo el tiempo.
11.1 Arquitectura
En el siguiente equema se muestan los módulos que intervienen en el Marcador Predictivo:
11.2 ¿Como funciona un marcador predictivo?
11.2.1 Conceptos y funcionamiento general
Un marcador predictivo se ocupa del cálculo del volumen de llamadas requeridas para conseguir la mayor productividad. Esto ayuda a que los agentes estén en conversación el mayor tiempo posible. Este tipo de marcación es ideal para campañas que tengan más de 20 agentes simultáneos. Mientras más agentes, el algoritmo de predicción funciona mejor. En campañas pequeñas el riesgo de un algoritmo de predicción agresivo puede ser el de un incremento en los abandonos por parte de los clientes (los clientes contestan, pero del otro lado no hay agentes disponibles, y cuelgan).
La variable más crítica en un marcador predictivo es la qie indica el número de intentos que han de generarse en el siguente periodo.
Conceptualmente un marcador predictivo funciona cuando hay una gran cantidad de agentes.
El marcador predictivo funciona utilizando conceptos estedísticos.
El marcador predictivo saliente tiene en cuenta:
- El número de agentes presentes no pausados → define la capacidad existente de cursar tráfico saliente.
- La duración media de las llamadas incluyendo el tiempo administrativo (AHT), el sistema observa la desviación típica → define el número de ntentos a lanzar.
- Es necesario definir la probabilidad de fallo en la que deseamos trabajar (entenderemos por fallo la situación que se produce cuando un cliente descuelga el teléfono y no encuentra un agente disponible).
Con los tres parámetos anteriores podemos conocer el tráfico que debemos lanzar, teniendo el valor del parámetro "intentos para obtener 100".
El sistema determina cuanto tráfico es capaz de generar, en función del número de agentes disponibles.
11.3 Modelos de marcación predictivos
Básicamente existen cuatro modelos de marcación:
- CONSERVADOR: No predice, cuando un agente se queda libre lanza el número de intentos necesarios para conseguir el número de contactis definidos. Es el más sencillo de todos. Cualquier modelo se convierte en coservador si no se dan las condiciones para cumplir con los objetivos buscados. Se suele activar cuando hay pocos agentes logados. Existen parámetros que definen cuando un modelo diferente se convierte en conservador; por ejemplo, el número de agentes. En el modelo conservdor solo se cargan algunos valores en DAT_MUESTRAS_COLAS_PREDICTIVAS: nº de agentes (no pausados no reservados), intentos 100contactos real y tasa de fallo calculada. → También denominado predictivo básico; usa una configuración fija de llamadas salientes cada vez que un agente queda libre.
- MANUAL: Los parámetros de ACD_COLAS rellenan las variables de la tabla DAT_TR_COLAS. No se tiene en cuenta la evolución del entorno. No se adapta con el paso del tiempo, hay que ir reconfigurándolo constantemente. → El modelo usa como variables solo los parámetros de configuración.
- SOLO SALIENTE: Los agentes están logados en una sola cola de saliente predictivo, todos con la misma prioridad.
- MEZCLA: Los agentes se conectan a más de un grupo ACD y éstos pueden ser de cualquier tipo (entrantes o salientes).
Los modelos "asumen" que los agentes tienen la misma prioridad, que están logados en el mismo número de colas y además que la asignación de los agentes a las colas es uniforme → Las llamadas SALIENTES deben tener mayor prioridad que las entrantes.
El sistema permite cambiar una campaña de un modelo a otro.
A continuación indicamos los cambios en lo módulos / demonios existentes:
MotorSal:
Este demonio mueve contactos a DAT_INTENTOS_MARCADOR para generar intentos. Los intentos los lee MyACDSuperV, que pasa los intentos generados por MotorSal a Asterisk.
La configuración de MotorSal añade escalabilidad permitiendo:
- Divisor planificables → Ratio entre planificables y planificados
- Tener más de un MotorSal (cuando leemos más de una campaña).
MyACDSuperV
Este demonio maneja COLAS.
Se cambia el nombre de dos campos:
- E_TIPO_COLA → E_TIPO_COLA_FORZADA
- ID_COLA → ID_COLA_FORZADA
Además, se introduce un nuevo campo:
- ID_COLA_USADA que informa de la cola usada.
BasedeDatos
En la base de datos se guardan medidas específicas → se trabaja con coma fija.
Nuevos demonios:
Motor_Predi → Motor de predicción (precide el ritmo de llamadas necesario para obtener los “contactos” que hemos definido)
Definirá los intentos que se van a generar, para ello controla el funcionamiento de MyACDSuperV → MARCA EL RITMO AL QUE SE GENERAN LOS INTENTOS.
Lee datos de la tabla ACD_COLAS y, en función de los parámetros configurados, genera variables de salida en la tabla DAT_TR_COLAS para modular el funcionamiento de MyACDsuperV, además rellena los datos de la tabla DAT_MUESTRA_COLAS_PREDICTIVAS que “funcionará” como histórico de lo que ha ido pasando.
11.4 Parámetros
Cada modelo de predictivo utiliza un conjunto de parámetros.
PAR1: Intentos 100 contactos. Cuantos intentos tengo que hacer para obtener 100 contactos. Se utiliza en los modelos conservador y manual.
PAR2: dato booleano. Indica, para cada intento, si se utiliza el anterior (PAR1). Hay algoritmos que pueden calcular esto, pero con el parámetro 2 pondremos el valor manualmente.
PAR3: Indica el umbral del nº de contactos x unidad de tiempo generados, por debajo del cual el modelo de la campaña cambia a conservador. Se utiliza en modelos manuales, solo saliente y mezcla.
PAR4: Nº de agentes presentes (logados no pausados) reservados. Resta capacidad disponible. Se utiliza en modelos solo saliente y manual.
PAR5: Umbral mínimo de agentes presentes (logados no pausados ni reservados). Si no se llega a este umbral mínimo el sistema utilizará el modelo conservador.
PAR6: Probabilidad de fallo que aceptaremos. Se utiliza en solo saliente, manual y automático. Estará entre 0 y 1 (para el cálculo se multiplica por 1.000.000 para tener un valor con 4 decimales).
PAR7: Tiempo de servicio previsto. Se utiliza cuando no existen datos, por ejemplo, en un arranque de servicio. Se utiliza en el modelo manual, y en el resto de modelos cuando hay pocas llamadas. Motor_Predi “decide” cuando utiliza el tiempo de servicio previsto calculado y cuando utiliza el que hemos configurado en PAR7.
PAR8: Tiempo disponible que se les asigna a los agentes, a pare del tiempo administrativo.
Parámetros del modelo MEZCLA:
PAR9: Tiempo de servicio.
PAR10: Nivel de servicio.
11.5 Variables
Cada modelo de predictivo utiliza una variables que se encuentran en la tabla DAT_TR_COLAS:
VAR1: Es una marca de coherencia de uso interno. Se utiliza para saber que las variables las “escribe” “quien” debe. Si la marca no es correcta implica que el sistema funciona en modo conservador.
VAR2: Tiempo de servicio calculado. En modo manual se copia de ACD_COLAS. En modo Solo Saliente y Mezcla es un dato calculado. Con pocas llamadas es copiado.
VAR3: Tiempo de servicio corregido. Sumando el tiempo disponible (PAR8).
VAR4: Nº de agentes que estoy utilizando para calcular la capacidad (presentes, no pausados y no reservados).
VAR5: Tasa de fallo calculada (nº de abandonadas x 1.000.000/nº de contactos).
VAR6: Intentos 100 contactos que he calculado en un periodo de tiempo que se ha configurado. Se calcula en los modos Solo Saliente y Mezcla, en Manual es un dato copiado.
VAR7: Nº de contactos/hora calculados. En el tiempo permite calcular el tráfico medio a generar.
Variables para el modelo Mezcla:
VAR8: Suma de tráficos ofrecidos en las distintas colas no predictivas (en centésimas de Erlang).
VAR9: Tráfico cursado en las colas no predictivas.
VAR10: Llamadas totales por hora, incluye las abandonadas.
VAR11: Llamadas hora en conversación.
VAR12: Nº de agentes necesarios para ofrecer el nivel de servicio.
VAR13: Nº de colas No predictivas compartidas.
VAR14: Nº de colas predictivas compartidas.
11.6 Nuevas tablas
11.6.1 DAT_MUESTRAS_COLAS_PREDICTIVAS
Constituirá el histórico del marcador predictivo.
Los campo y su explicación son los siguientes:
Campo | Tipo de dato | Descripción |
---|---|---|
* D_HORA | datetime | Hora normalizada para muestreo |
* ID_COLA | int(11) | Cola a la que se refieren las medidas |
* ID_ALGORITMO_PREDICTIVO | int(11) | Algoritmo predictivo configurado al obtener la medida |
* N_PREDIC_PARn | int(11) | Valor configurado para PARn al obtener la medida |
* N_PREDIC_VARn | int(11) | Valor de VARn generado por motorPredi |
* N_PREDIC_PERIODO_INTENTOS | int(11) | Periodo en segundos analizado para calcular intentos100Contactos |
* N_PREDIC_INTENTOS | int(11) | Número de intentos generados en el periodo anterior |
* N_PREDIC_CONTACTOS | int(11) | Número de contactos obtenidos en el periodo anterior |
En el siguiente bloque se encuentran contadores de intentos agrupados por estado.
Todos ellos suman N_PREDIC_INTENTOS.
En función del estado el intento se contabiliza como contacto según contenido en /**/
Campo | Tipo de dato | Descripción |
---|---|---|
N_PREDIC_SALIENDO | int(11) | /* no intento, no contacto */ |
N_PREDIC_COLA | int(11) | /* intento, contacto */ |
N_PREDIC_CONVERSACION | int(11) | /* intento, contacto */ |
N_PREDIC_COMPLETADA | int(11) | /* intento, contacto */ |
N_PREDIC_OCUPADO | int(11) | /* intento, no contacto */ |
N_PREDIC_NO_CONTESTA | int(11) | /* intento, no contacto */ |
N_PREDIC_PROBLEMAS_RED | int(11) | /* intento, no contacto */ |
N_PREDIC_NUMERO_MAL | int(11) | /* intento, no contacto */ |
N_PREDIC_RECHAZADA | int(11) | /* intento, no contacto */ |
N_PREDIC_ABANDONADA | int(11) | /* intento, no contacto */ |
N_PREDIC_FAX | int(11) | /* intento, no contacto */ |
N_PREDIC_MAQUINA | int(11) | /* intento, no contacto */ |
N_PREDIC_ROBINSON | int(11) | /* no intento, no contacto */ |
N_PREDIC_CADUCADO | int(11) | /* no intento, no contacto */ |
N_PREDIC_CAMPANNA_CERRADA | int(11) | /* no intento, no contacto */ |
N_PREDIC_DIRIGIDO_NO_AGENTE | int(11) | /* no intento, no contacto */ |
N_PREDIC_REPROGRAMADO | int(11) | /* intento, contacto */ |
N_PREDIC_PERIODO_TRAFICO | int(11) | Periodo en segundos analizado para calcular tiempo medio de servicio |
N_PREDIC_LLAMADAS_NUM | int(11) | Número de llamadas en el periodo analizado
Este valor se refiere a las llamadas sumadas en los tres valores posteriores |
N_PREDIC_TCONVERSACION | int(11) | Suma de los tiempos de conversación para esas llamadas en segundos |
N_PREDIC_TADMINISTRATIVO | int(11) | Suma de los tiempos administrativos para esas llamadas en segundos |
N_PREDIC_TSERVICIO | int(11) | Suma de los tiempos de servicio para esas llamadas (Tconv + Tadmin) en segundos |
N_PREDIC_STD_TSERVICIO | int(11) | Desviación estándar de los tiempos en servicio x10.000 |
N_PREDIC_LLAMADAS_TOTALES | int(11) | Número de llamadas (contactos) totales tramitadas por el grupoAcd. |
N_PREDIC_TSERVICIO_X_LLAMADA | int(11) | Tiempo medio de servicio en segundos |
N_PREDIC_TRAFICO_CURSADO | int(11) | Tráfico (expresado en centésimas de Erlang) cursado en las N_PREDIC_LLAMADAS_TOTALES llamadas |
N_PREDIC_AGENTES | int(11) | Agentes presentes |
N_PREDIC_AGENTES_OCUPACION | int(11) | Grado de ocupación de los agentes presentes (x10.000) |
Los siguientes contadores se utilizan en el modelo MEZCLA. | ||
N_PREDIC_PERIODO_TRAFICO_ENTRADA | int(11) | Sólo se usa en grupos ACD de tipo mezcla. Indica en qué periodo en segundos se ha hecho el análisis de los grupos compartidos. |
N_PREDIC_AGENTES_ENTRADA | int(11) | Número de agentes requeridos en los grupos ACD compartidos para dar servicio según los parámetros de nivel de servicio. |
N_PREDIC_PCT_CONTACTOS_SALIDA | int(11) | Coeficiente (x1.000.000) aplicado al tráfico a generar en un grupo ACD predictivo en base a que los agentes están compartidos en otros grupos ACD predictivos. |
Las nuevas tablas de la Base de DAtos tienen la siguiente estructura:
11.7 Particularidades del modelo mezcla
En el modelo mezcla asumimos que los agentes se conectan a las mismas colas.
Las colas de PREDICTIVO debemos configurarlas de forma que tengan mayor prioridad.
- Fase 1: Observamos cuantoa agentes disponibles tenemos (no reservados).
- Fase 2: Calculamos el tráfico cursado en grupos ACD NO PREDICTIVOS; tenemos que tener en cuenta las llamadas cursadas y las abandonadas. Además observaremos a qué colas ACD están conectados los agentes.
- Fase 3: Se calculan los agentes necesarios para atender el tráfico NO PREDICTIVO.
- Fase 4: El tráfico se reparte entre los agentes sobrantes.
De los datos obtenidos en estas primeras fases el sistema proporcionará el número de agentes necesarios para cada una de la colas de predictivo, este número de agentes constituye el dato de VAR4 (nº de agenetes presentes no reservados y no pausados).
El tráfico de predictivo se reparte equitativamente entre los agentes disponibles, en términos de minutos/hablados.
Si en algú momento el modelo MEZCLA genera un fallo, no cambiará al modelo conservador, simplemente no generará llamadas → aplica el criterio "si hay dudas no llamo".
En el arranque del modelo los datos de tiempo de servicio y de intentos 100contactos se obtienen de los parámetros PAR7 y PAR1.
11.7.1 Escalabilidad
El marcador predictivo necesita conectarse a una base de datos, para obtener datos, lee de una tabla y escribe en otra, pero no necesita muchos datos para poder funcionar.
En entornos grandes se puede tener una réplica de la base de datos, con pocos datos, una para leer y otra para escribir. Además, en estos entornos, se podrían tener varios Motor_Predi.
11.7.2 Límites al sistema
Quizá fuesen necesarios "topes" al número máximo de intentos en base a un porcentaje calculado a partir de la capacidad del sistema.
El parámetro N_Maxal está en la tabla ACD_COLAS e indica el número máximo de llamadas salientes que soporta el sistema.
Quizá se incluya un nuevo parámetro técnico → Tope de intentos 100 contactos.
Documentación Marcador Predictivo
12 Canales digitales en VIVAit Suite
Se incluye enlace a documentación en formato .pdf a canales digitales, actualmente correo electrónico