Diferencia entre revisiones de «Manual de operación VIVAit 5.1»

De VIVAitwiki
Ir a la navegaciónIr a la búsqueda
 
(No se muestran 383 ediciones intermedias del mismo usuario)
Línea 14: Línea 14:
 
:  • <big>'''''VIVA'''''it Suite</big>, producto '''''VIVA'''''it para el entorno call center
 
:  • <big>'''''VIVA'''''it Suite</big>, producto '''''VIVA'''''it para el entorno call center
 
<br><br>
 
<br><br>
Se documentan los procesos principales de cada elemento del sistema, así como sus componentes clave para el diagnóstico.
+
Se documentan los procesos principales de cada elemento del sistema, así como sus componentes clave para el diagnóstico.<br>
 +
Por ello el presente documento se divide en cuatro grandes grupos:
 +
<br><br>
 +
: • [[#Arquitectura de la plataforma VIVAit          | '''Arquitectura de la plataforma ''VIVAit''''']]<br>
 +
: • [[#Descripción de los elementos software          | '''Descripción de los elementos software''']]<br>
 +
: • [[#Funcionalidades específicas en VIVAit          | '''Funcionalidades específicas en ''VIVAit''''']]<br>
 +
: • [[#Diagnósticos y operaciones básicas en VIVAit  | '''Diagnósticos y operaciones básicas en ''VIVAit''''']]
 
<br><br>
 
<br><br>
 
Quedan fuera del ámbito de este documento:
 
Quedan fuera del ámbito de este documento:
Línea 24: Línea 30:
 
: * Uso de portal de monitorización zabbix
 
: * Uso de portal de monitorización zabbix
 
<br><br>
 
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Introducción a la plataforma VIVAit]][[#Introducción a la plataforma VIVAit | Volver arriba]]
 +
</div>
 
<div style="
 
<div style="
 
   text-align:right;
 
   text-align:right;
Línea 378: Línea 395:
 
Con esta filosofía de diseño conexiones de VIVAit Web Call, app como VCB, hardphone en internet, etc. serán controladas por este nodo.  
 
Con esta filosofía de diseño conexiones de VIVAit Web Call, app como VCB, hardphone en internet, etc. serán controladas por este nodo.  
 
<br><br>
 
<br><br>
[[File:Arquitectura nodo STG.png |1500px|center|thumb]]
+
[[File:nodo_stg_V5.1.png|1500px|center|thumb]]
 +
<br><br>
 +
En el nodo STG se dan de alta los servicios necesarios para la funcionalidad multidispositivo, como son:
 +
: - SerCen,
 +
: - Janus,
 +
: - Apache,
 +
: - FonBo,
 +
: - Seguridad
 +
: - Certificados,
 +
: - entre otros.
 +
<br><br>
 +
La documentación del nodo STG (WebRTC) se puede consulta  [[:medio:DOCUMENTO_WEBRTC_v9.pdf | aquí ]].
 +
<br><br>
 +
La arquitectura de WebRTC en VIVAit Call es la  siguiente:
 +
<br><br>
 +
[[File:webrtc.png||1500px|center|thumb]]
 
<br><br>
 
<br><br>
 
<div style="
 
<div style="
Línea 415: Línea 447:
 
<br><br>
 
<br><br>
  
== Descripción de los elementos software ==
+
==== Componentes principales del nodo STG ====
 +
<br><br>
 +
Se muestran a contiuación los módulos principales que constituyen el nodo STG.
 
<br><br>
 
<br><br>
 +
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
 +
! align=center style="background-color:#0099ff;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0cm;color:#ffffff;" | '''''Componentes  '''''
 +
! align=center style="background-color:#0099ff;border:0.05pt solid #000000;padding:0cm;color:#ffffff;" | '''''Explicación'''''
 +
|-
 +
| font-weight: bold;" | '''APACHE'''
 +
|  | Apache es un servidor web HTTP de código abierto.La funcionalidad principal de este servicio web es servir a los usuarios todos los ficheros necesarios para visualizar la web. Las solicitudes de los usuarios se hacen normalmente mediante un navegador (Chrome, Firefox, Safari, etc.).
 +
|-
 +
| font-weight: bold;" | '''SERCEN'''
 +
|  | Sirve para identificar a los usuarios y garantizar que los mismos sean quienes dicen ser.
 +
|-
 +
| font-weight: bold;" | '''JANUS'''
 +
|  | Janus es un servidor WebRTC concebido para ser de propósito general. Como tal, no proporciona ninguna funcionalidad más que implementar los medios para configurar una comunicación de medios WebRTC con un navegador, intercambiar mensajes JSON con él y transmitir RTP / RTCP y mensajes entre navegadores y la lógica de la aplicación del lado del servidor a los que están apegados.
 +
|-
 +
| font-weight: bold;" | '''IPTABLES'''
 +
|  | Es un programa  que se encarga de filtrar los paquetes de red , es decir , es la parte que se encarga de determinar qué paquetes de datos queremos que lleguen hasta el servidor y cuáles no.
 +
|-
 +
| font-weight: bold;" | '''FAIL2BAN'''
 +
|  | Es una aplicación de Linux que permite evitar accesos no autorizados al servidor. Funciona bloqueando o baneando  las IP que realicen varios intentos de acceso incorrectos al servidor.
 +
|-
 +
| font-weight: bold;" | '''CLIENTE'''
 +
|  |      El cliente debe de proporcionar una ip pública , un dns para esa ip y un certificado válido.
  
=== Niveles funcionales del software ===
+
|}
<br><br>
 
Los niveles funcionales o capas del software en el sistema '''''VIVA'''it'' cumplen una función específica y se apoyan en el nivel inferior.
 
<br><br>
 
La lista de los mismos es la siguiente:
 
<br><br>
 
: • [[#Nivel de sistema operativo | '''Nivel de sistema operativo''']]<br>
 
: • [[#Nivel de conmutación de voz | '''Nivel de conmutación de voz''']]<br>
 
: • [[#Nivel de base de datos | '''Nivel de base de datos''']]<br>
 
: • [[#Nivel de procesos VIVAit | '''Nivel de procesos ''VIVAit''''']]<br>
 
: • [[#Nivel de Administración | '''Nivel de Administración''']]<br>
 
: • [[#Nivel de Monitorización | '''Nivel de Monitorización''']]
 
 
<br><br>
 
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Arquitectura de la plataforma VIVAit]][[#Arquitectura de la plataforma VIVAit | Volver arriba]]
 +
</div>
 
<div style="
 
<div style="
 
   text-align:right;
 
   text-align:right;
Línea 455: Línea 510:
 
<br><br>
 
<br><br>
  
==== Nivel de sistema operativo ====
+
=== Servicios de networking ===
 +
<br><br>
 +
Al integrar el sistema '''''VIVA'''it'' en la infraestructura del cliente, destinado a prestar servicios de VoIP, es fundamental considerar los servicios necesarios para su correcto funcionamiento.<br>
 +
Aunque los servidores pueden ser proporcionados por el sistema de '''''<span style="color:#144F9B">MD</span>'''''Tel, lo más habitual es que el cliente los aporte dentro de su propia infraestructura:
 +
<br><br>
 +
: * '''NTP''': el sistema en global ha de estar sincronizado; todos los servidores y puestos de trabajo (en el caso de ''VIVA''it Suite) han de estar perfectamente sincronizados. <br>
 +
::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<br>
 +
: * '''DNS''': la configuración de DNS de la plataforma será coherente con el resto de la plataforma IT del cliente<br>
 +
: * '''DHCP''': Es necesario coordinar con el cliente la asignación de direcciones para los diferentes elementos de la plataforma '''''VIVA'''''it, fundamentalmente para terminales telefónicos. <br>
 +
::En este caso será necesario activar la opción 66 del DHCP que permitirá definir el servidor TFTP del que los terminales descargaran sus ficheros de aprovisionamiento
 
<br><br>
 
<br><br>
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
+
[[File:arquitectura_networking_1_V5.1.png|1000px|center|thumb]]
|-
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Elemento
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Instancias
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Propósito
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Producto
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Observaciones
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | Ubuntu Server LTS <br>
 
64 bits
 
| style="padding:0.5cm;"                  | Uno por servidor
 
| style="padding:0.5cm;"                  |
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | Actualmente (may-2026) 22.04. Bajo proyecto puede cambiarse
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | Debian LTS
 
| style="padding:0.5cm;"                  | Uno por servidor
 
| style="padding:0.5cm;"                  |
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 
| style="padding:0.5cm;"                  | Actualmente (may-2026) 13 (Trixie). Bajo proyecto puede cambiarse
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | Almacenamiento de grabaciones
 
| style="padding:0.5cm;"                  | Uno por sistema
 
| style="padding:0.5cm;"                  | Almacenamiento de las grabaciones, ya sean de entorno corporativo o de Contact Center
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | 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
 
|}
 
 
<br><br>
 
<br><br>
 
<div style="
 
<div style="
Línea 495: Línea 532:
 
   display:inline-block;
 
   display:inline-block;
 
">
 
">
[[File:flecha_verde.png|20px|link=#Niveles funcionales del software]][[#Niveles funcionales del software| Volver arriba]]
+
[[File:flecha_verde.png|20px|link=#Arquitectura de la plataforma VIVAit]][[#Arquitectura de la plataforma VIVAit | Volver arriba]]
 
</div>
 
</div>
 
<div style="
 
<div style="
Línea 521: Línea 558:
 
<br><br>
 
<br><br>
  
==== Nivel de conmutación de voz ====
+
=== Conectividad en '''''VIVA'''it'' ===
 +
<br><br>
 +
 
 +
==== Esquema '''''VIVA'''''it Call ====
 +
<br><br>
 +
El esquema siguiente muestra todos los flujos de información existentes en un entorno típico de '''telefonía corporativa (sin presencia)'''
 +
<br><br>
 +
[[Archivo:Flujos corporativa.png|1000px|center|thumb]]
 +
<br><br>
 +
La descripción de los flujos se puede consultar en [[#Tabla de flujos VIVAit | Tabla de flujos '''''VIVA'''it'' ]]
 +
<br><br>
 +
 
 +
==== Esquema '''''VIVA'''''it Suite ====
 +
<br><br>
 +
En el entorno de Contact Center se encuentran los siguientes flujos entre servicios (comunicaciones entre servidores).
 +
<br><br>
 +
[[Archivo:Flujos Contact servicios.png|1000px|center|thumb]]
 
<br><br>
 
<br><br>
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
+
La descripción de los flujos se puede consultar en [[#Tabla de flujos VIVAit | Tabla de flujos '''''VIVA'''it'' ]]
|-
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Elemento
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Instancias
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Propósito
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Producto
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Observaciones
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | Asterisk 1.4.24 by MDtel
 
| style="padding:0.5cm;"                  | Uno por servidor ACD
 
| style="padding:0.5cm;"                  | Núcleo de conmutación de voz basado en Asterisk 1.4 y modificado por MDtel
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | Fuertemente modificado por MDtel. En el futuro migrará a Asterisk 18.9 Certified
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | Dialplan ACD by MDtel
 
| style="padding:0.5cm;"                  | Uno por servidor ACD
 
| style="padding:0.5cm;"                  | Configuración de voz
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | En el futuro se unificará con corporativa
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | Asterisk 18.9 Certified by MDtel
 
| style="padding:0.5cm;"                  | Uno por servidor corporativo / gateway
 
| style="padding:0.5cm;"                  | Núcleo de conmutación de voz basado en Asterisk 18.9 y modificado por MDtel
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 
| style="padding:0.5cm;"                  | Actualmente Asterisk estándar (05/26). La instalación contempla descargar de la red el más actualizado, siempre CERTIFIED"
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | Dialplan corporativo
 
| style="padding:0.5cm;"                  | Uno por servidor corporativo/gateway
 
| style="padding:0.5cm;"                  | Configuración de voz|
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 
| style="padding:0.5cm;"                  | En el futuro se unificará con ACD
 
|}
 
 
<br><br>
 
<br><br>
 
<div style="
 
<div style="
Línea 565: Línea 587:
 
   display:inline-block;
 
   display:inline-block;
 
">
 
">
[[File:flecha_verde.png|20px|link=#Niveles funcionales del software]][[#Niveles funcionales del software| Volver arriba]]
+
[[File:flecha_verde.png|20px|link=#Conectividad en VIVAit]][[#Conectividad en VIVAit | Volver arriba]]
 
</div>
 
</div>
 
<div style="
 
<div style="
Línea 591: Línea 613:
 
<br><br>
 
<br><br>
  
==== Nivel de base de datos ====
+
==== Esquema usuario-servidor ====
 
<br><br>
 
<br><br>
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
+
Entre usuarios y servicios se documentan los siguientes flujos:
|-
+
<br><br>
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Elemento
+
[[Archivo:Flujos Contact puestos.png|1000px|center|thumb]]
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Instancias
+
<br><br>
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Propósito
+
La descripción de los flujos se puede consultar en [[#Tabla de flujos VIVAit | Tabla de flujos '''''VIVA'''it'' ]]
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Producto
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Observaciones
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | MySQL 8.0.45
 
| style="padding:0.5cm;"                  | Donde haya BBDD de cualquier tipo (incluso zabbix)
 
| style="padding:0.5cm;"                  | Motor de Base de Datos para Ubuntu 22.04
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | A efectos prácticos se pretende que sea la BBDD de todos los servicios
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | MariaDB 11.8.3
 
| style="padding:0.5cm;"                  | Donde haya BBDD de cualquier tipo
 
| style="padding:0.5cm;"                  | Motor de Base de Datos para Debian 13
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | A efectos prácticos se pretende que sea la BBDD de todos los servicios
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | DBTR
 
| style="padding:0.5cm;"                  | Una por sistema
 
| style="padding:0.5cm;"                  | Base de Datos sobre la que trabaja todo el entorno de tiempo real
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  |
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | DBHIST
 
| style="padding:0.5cm;"                  | Una por sistema multinodo
 
| style="padding:0.5cm;"                  | Base de Datos para postproceso, como reporting, traker, supervisor, ... Subconjunto de tablas de DBTR con la que está sincronizada
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | Bajo proyecto puede existir más de una. <br>
 
En el nodo en el que exista réplica existirá además copia (excepto nodo ACD)
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | BBDD copia
 
| style="padding:0.5cm;"                  | Uno por servidor corporativo / gateway
 
| style="padding:0.5cm;"                  | Copia de tablas de configuración de DBTR para respaldo de la misma
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 
| style="padding:0.5cm;"                  | 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
 
|}
 
</div>
 
 
<br><br>
 
<br><br>
 
<div style="
 
<div style="
Línea 643: Línea 630:
 
   display:inline-block;
 
   display:inline-block;
 
">
 
">
[[File:flecha_verde.png|20px|link=#Niveles funcionales del software]][[#Niveles funcionales del software| Volver arriba]]
+
[[File:flecha_verde.png|20px|link=#Conectividad en VIVAit]][[#Conectividad en VIVAit | Volver arriba]]
 
</div>
 
</div>
 
<div style="
 
<div style="
Línea 669: Línea 656:
 
<br><br>
 
<br><br>
  
==== Nivel de procesos '''''VIVA'''it'' ====
+
==== Tabla de flujos '''''VIVA'''it'' ====
 
<br><br>
 
<br><br>
La mayoría de los elementos aparecen como servicios en los nodos correspondientes.
+
La sisguiente tabla muestra los flujos de datos que se establecen entre los distintos componentes del sistema '''''VIVA'''it''.
 
<br><br>
 
<br><br>
 
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
 
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
 
|-
 
|-
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Elemento
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Lado A
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Instancias
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Lado B
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Propósito
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Puertos
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Producto
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Sentido
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Observaciones
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Observaciones
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | intz-nimitz
+
| style="padding:0.5cm; font-weight:bold;" | Terminal telefónico
| style="padding:0.5cm;"                  | Donde haya una BBDD de tiempo real o copia
+
| style="padding:0.5cm;"                  | Servidor
| style="padding:0.5cm;"                  | Interfaz entre el dialplan y la base de datos
+
| style="padding:0.5cm;"                  | TCP 5060
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
+
| style="padding:0.5cm;"                  | A -> B
| style="padding:0.5cm;"                  | No donde haya BBDD de réplica.<br>
+
| style="padding:0.5cm;"                  | Señalización SIP
En sistemas grandes pueden contemplar más de un intz-nimitz
+
|-
 +
| style="padding:0.5cm; font-weight:bold;" | Terminal telefónico
 +
| style="padding:0.5cm;"                  | Servidor
 +
| style="padding:0.5cm;"                  | UDP 5060
 +
| style="padding:0.5cm;"                  | A -> B
 +
| style="padding:0.5cm;"                  | Señalización SIP
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | intz-gh
+
| style="padding:0.5cm; font-weight:bold;" | Terminal telefónico
| style="padding:0.5cm;"                  | En el nodo con menos carga
+
| style="padding:0.5cm;"                  | Servidor
| style="padding:0.5cm;"                  | Conocer el estado de las extensiones de diferentes nodos
+
| style="padding:0.5cm;"                  | 10000 a 20000
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
+
| style="padding:0.5cm;"                  | A -> B<br>
| style="padding:0.5cm;"                  | Solo va en un nodo. Si desconocemos cual es el nodo con menos carga, instalarlo en la maquina con BDHIST
+
B -> A
 +
| style="padding:0.5cm;"                  | RTP
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | intz-tap
+
| style="padding:0.5cm; font-weight:bold;" | Terminal telefónico
| style="padding:0.5cm;"                  | En los nodos corporativos
+
| style="padding:0.5cm;"                  | Servidor TFTP
| style="padding:0.5cm;"                  | Encargado de la grabación SIPREC y TBC
+
| style="padding:0.5cm;"                  | UDP 69
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
+
| style="padding:0.5cm;"                  | A -> B<br>
| style="padding:0.5cm;"                  | Junto al modulo chan_mdtap de asterisk para enviar los flujos RTP a un elemento externo
+
B -> A
 +
| style="padding:0.5cm;"                  | Para actualización de terminales por TFTP
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | serCen
+
| style="padding:0.5cm; font-weight:bold;" | Terminal telefónico
| style="padding:0.5cm;"                  | En nodo STG y nodo de gestión
+
| style="padding:0.5cm;"                  | Servidor NTP
| style="padding:0.5cm;"                  | Encargado de la autenticidad y doble factor de los usuarios
+
| style="padding:0.5cm;"                  | UDP 123
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
+
| style="padding:0.5cm;"                  | A -> B
| style="padding:0.5cm;"                  | Proporciona servicios a los diferentes portales (front-end) del sistema
+
| style="padding:0.5cm;"                  |  
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | vivait-direct
+
| style="padding:0.5cm; font-weight:bold;" | '''''VIVA'''''it Desk
| style="padding:0.5cm;"                  | En nodo STG y nodo de gestión
+
| style="padding:0.5cm;"                  | Servidor
| style="padding:0.5cm;"                  | Centraliza y gestiona la consulta de agendas y contactos desde distintas fuentes de datos. <br>
+
| style="padding:0.5cm;"                  | TCP 4500
Alternativa a Vivait-FonBO que sigue gestionando el histórico de llamadas
+
| style="padding:0.5cm;"                  | A -> B
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
+
| style="padding:0.5cm;"                  | Comunicación CTI
| style="padding:0.5cm;"                  | Servicio invocado por los portales vivait-user y webfon2
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | vivait-cti
 
| style="padding:0.5cm;"                  | Uno por servidor ACD
 
| style="padding:0.5cm;"                  | Interfaz entre '''''VIVA'''''it Desk, supervisor y el manager de asterisk
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  |  
 
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | motorSal
+
| style="padding:0.5cm; font-weight:bold;" | '''''VIVA'''''it Desk
| style="padding:0.5cm;"                  | Uno por servidor ACD
+
| style="padding:0.5cm;"                  | Servidor
| style="padding:0.5cm;"                  | Motor de marcador saliente automático
+
| style="padding:0.5cm;"                  | TCP 3306
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
+
| style="padding:0.5cm;"                  | A -> B
| style="padding:0.5cm;"                  | Solo si hay marcación saliente. Junto a DBTR
+
| style="padding:0.5cm;"                  | Acceso a Mysql Base de datos
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | myAcdSuperv
+
| style="padding:0.5cm; font-weight:bold;" | '''''VIVA'''''it Desk
| style="padding:0.5cm;"                  | Uno por servidor ACD
+
| style="padding:0.5cm;"                  | Servidor
| style="padding:0.5cm;"                  | Recopilador de datos de asterisk y actualiza en la BBDD. Genera llamadas en el marcador
+
| style="padding:0.5cm;"                  | UDP 514
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
+
| style="padding:0.5cm;"                  | A -> B
| style="padding:0.5cm;"                  |  
+
| style="padding:0.5cm;"                  | Para envío de logs de agente
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | recordCentral
+
| style="padding:0.5cm; font-weight:bold;" | '''''VIVA'''''it Supervisor<br>
| style="padding:0.5cm;"                  | Uno por sistema
+
aplicación de supervisor
| style="padding:0.5cm;"                  | Servidor de grabaciones, los agentes (recorNodo) se conectan a él
+
| style="padding:0.5cm;"                  | Servidor
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
+
| style="padding:0.5cm;"                  | TCP 4500
| style="padding:0.5cm;"                  | 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
+
| style="padding:0.5cm;"                  | A -> B
 +
| style="padding:0.5cm;"                  | Comunicación CTI
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | recordNodo
+
| style="padding:0.5cm; font-weight:bold;" | '''''VIVA'''''it Supervisor<br>
| style="padding:0.5cm;"                  | Uno por servidor corporativo / gateway
+
portal de supervisión
| style="padding:0.5cm;"                  | Agente de grabación
+
| style="padding:0.5cm;"                  | Servidor
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
+
| style="padding:0.5cm;"                  | TCP 3306
| style="padding:0.5cm;"                  |  
+
| style="padding:0.5cm;"                  | A -> B
 +
| style="padding:0.5cm;"                  | Acceso a Mysql Base de datos
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | bdCentral
+
| style="padding:0.5cm; font-weight:bold;" | '''''VIVA'''''it Tracker
| style="padding:0.5cm;"                  | Uno, en el nodo con la BBDD de tiempo real
+
| style="padding:0.5cm;"                  | Servidor
| style="padding:0.5cm;"                  | Genera la base de datos que se copiará para respaldo a otros nodos
+
| style="padding:0.5cm;"                  | TCP 3306
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
+
| style="padding:0.5cm;"                  | A -> B
| style="padding:0.5cm;"                  |  
+
| style="padding:0.5cm;"                  | Acceso a Mysql Base de datos
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | bdNodo
+
| style="padding:0.5cm; font-weight:bold;" | Tracker WEB
| style="padding:0.5cm;"                  | En cada nodo con BBDD de copia
+
| style="padding:0.5cm;"                  | Servidor
| style="padding:0.5cm;"                  | Recoge la base de datos del servidor central con el objeto de tener el respaldo
+
| style="padding:0.5cm;"                  | TCP 3306
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
+
| style="padding:0.5cm;"                  | A -> B
| style="padding:0.5cm;"                  |  
+
| style="padding:0.5cm;"                  | Acceso a Mysql Base de datos
 
|-
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | Actualizador
 
| style="padding:0.5cm; font-weight:bold;" | Actualizador
| style="padding:0.5cm;"                  | Uno por sistema con ACD
+
| style="padding:0.5cm;"                  | Servidor
| style="padding:0.5cm;"                  | Se encarga de proporcionar las versiones actualizadas de las aplicaciones de puesto de trabajo
+
| style="padding:0.5cm;"                  | TCP 80
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
+
| style="padding:0.5cm;"                  | A -> B
| style="padding:0.5cm;"                  | En el mismo servidor que el portal de administración
+
| style="padding:0.5cm;"                  | Necesario para actualizaciones de versiones de aplicaciones de agente y supervisores
 +
|-
 +
| style="padding:0.5cm; font-weight:bold;" | Portales
 +
| style="padding:0.5cm;"                  | Servidor
 +
| style="padding:0.5cm;"                  | TCP 443
 +
| style="padding:0.5cm;"                  | A -> B
 +
| style="padding:0.5cm;"                  | Acceso a los diferentes portales de '''''VIVA'''''it
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | phoneProv-tftp
+
| style="padding:0.5cm; font-weight:bold;" | Monitor
| style="padding:0.5cm;"                  | Uno por sistema
+
| style="padding:0.5cm;"                  | Servidor
| style="padding:0.5cm;"                  | Se encarga del aprovisionamiento masivo de terminales
+
| style="padding:0.5cm;"                  | TCP 8180
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
+
| style="padding:0.5cm;"                  | A -> B
| style="padding:0.5cm;"                  | En instalaciones grandes habrá más de uno, quizás uno por sede grande; depende de la infraestructura de DHCP
+
| style="padding:0.5cm;"                  | Wallboard
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | borraregistrosnimitz
+
| style="padding:0.5cm; font-weight:bold;" | Monitorización
| style="padding:0.5cm;"                  | Uno por sistema
+
| style="padding:0.5cm;"                  | Servidor
| style="padding:0.5cm;"                  | Se encarga de la gestión de las bases de datos, aplicando políticas de retención que limitan la persistencia de los registros hasta una fecha máxima establecida.
+
| style="padding:0.5cm;"                  | TCP 80
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
+
| style="padding:0.5cm;"                  | A -> B
| style="padding:0.5cm;"                  | En la BDTR es típico dejar 6 meses y en BDHIST 5 anos.
+
| style="padding:0.5cm;"                  | Acceso a portal monitorización (Zabbix)
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | movergrabacionesanube
 
| style="padding:0.5cm;"                  | Uno por sistema
 
| style="padding:0.5cm;"                  | Guardar las grabaciones un un NAS del cliente
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | Utiliza el módulo RecordCentral
 
 
|}
 
|}
 
</div>
 
</div>
Línea 790: Línea 780:
 
   display:inline-block;
 
   display:inline-block;
 
">
 
">
[[File:flecha_verde.png|20px|link=#Niveles funcionales del software]][[#Niveles funcionales del software| Volver arriba]]
+
[[File:flecha_verde.png|20px|link=#Conectividad en VIVAit]][[#Conectividad en VIVAit | Volver arriba]]
 
</div>
 
</div>
 
<div style="
 
<div style="
Línea 816: Línea 806:
 
<br><br>
 
<br><br>
  
==== Nivel de Administración ====
+
=== Gateways '''''VIVA'''it'' ===
 
<br><br>
 
<br><br>
Se estructura en dos capas:
+
El concepto de gateway no existe como entidad funcional dentro de la plataforma '''''VIVA'''''it. En su arquitectura únicamente se definen nodos ACD (Automatic Call Distribution) y nodos corporativos.<br>
<br><br>
+
Desde el punto de vista operativo, el nodo corporativo es el encargado de asumir las funcionalidades típicamente asociadas a un gateway. En particular, gestiona la interconexión con sistemas externos, incluyendo interfaces analógicas, digitales e IP, así como la conexión con la Red Telefónica Conmutada.<br>
: • [[#Nivel de Administración - Front-end| '''Front-end''']]: capa de presentación que interactúa con el usuario (portales web, interfaces gráficas o paneles de control), encargada de mostrar la información y recoger las acciones del usuario.<br>
+
Por tanto, el término gateway queda limitado a un uso comercial o conceptual, sin correspondencia directa con elementos funcionales dentro de la plataforma.<br>
: • [[#Nivel de Administración - Back-end| '''Back-end''']]: capa de lógica y procesamiento donde se gestionan los servicios, la ejecución de aplicaciones y el acceso a datos, apoyándose en servidores como Apache HTTP Server y Apache Tomcat.
+
En consecuencia, los procedimientos de diagnóstico y operación relativos a la conectividad con sistemas externos o con la RTC deben realizarse conforme a los mecanismos definidos para el nodo corporativo.
</div>
 
 
<br><br>
 
<br><br>
 
<div style="
 
<div style="
Línea 833: Línea 822:
 
   display:inline-block;
 
   display:inline-block;
 
">
 
">
[[File:flecha_verde.png|20px|link=#Niveles funcionales del software]][[#Niveles funcionales del software| Volver arriba]]
+
[[File:flecha_verde.png|20px|link=#Gateways VIVAit]][[#Gateways VIVAit | Volver arriba]]
 
</div>
 
</div>
 
<div style="
 
<div style="
Línea 859: Línea 848:
 
<br><br>
 
<br><br>
  
 +
== Descripción de los elementos software ==
 +
<br><br>
  
 
+
=== Niveles funcionales del software ===
===== Nivel de Administración - Front-end =====
+
<br><br>
 +
Los niveles funcionales o capas del software en el sistema '''''VIVA'''it'' cumplen una función específica y se apoyan en el nivel inferior.
 +
<br><br>
 +
La lista de los mismos es la siguiente:
 +
<br><br>
 +
: • [[#Nivel de sistema operativo | '''Nivel de sistema operativo''']]<br>
 +
: • [[#Nivel de conmutación de voz | '''Nivel de conmutación de voz''']]<br>
 +
: • [[#Nivel de base de datos | '''Nivel de base de datos''']]<br>
 +
: • [[#Nivel de procesos VIVAit | '''Nivel de procesos ''VIVAit''''']]<br>
 +
: • [[#Nivel de Administración | '''Nivel de Administración''']]<br>
 +
: • [[#Nivel de Monitorización | '''Nivel de Monitorización''']]
 
<br><br>
 
<br><br>
Se compone de dos entidades:
+
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 
<br><br>
 
<br><br>
: • '''Servidores''': donde se ejecutan las aplicaciones y servicios web, como Apache HTTP Server.<br>
+
 
: • '''Clientes''': interfaces de acceso para los usuarios, como portales web.
+
==== Nivel de sistema operativo ====
 
<br><br>
 
<br><br>
 
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
 
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
Línea 874: Línea 896:
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Propósito
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Propósito
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Producto
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Producto
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Observaciones                 |
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Observaciones
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | Apache2
+
| style="padding:0.5cm; font-weight:bold;" | Ubuntu Server LTS <br>
| style="padding:0.5cm;"                  | Uno por servidor con portales
+
64 bits
| style="padding:0.5cm;"                  | Servidor de páginas web. Servidor de portales. No usa JAVA
+
| style="padding:0.5cm;"                  | Uno por servidor
 +
| style="padding:0.5cm;"                  |  
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
| style="padding:0.5cm;"                  |
+
| style="padding:0.5cm;"                  | Actualmente (may-2026) 22.04. Bajo proyecto puede cambiarse
 +
|-
 +
| style="padding:0.5cm; font-weight:bold;" | Debian LTS
 +
| style="padding:0.5cm;"                  | Uno por servidor
 +
| style="padding:0.5cm;"                  |
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 +
| style="padding:0.5cm;"                  | Actualmente (may-2026) 13 (Trixie). Bajo proyecto puede cambiarse
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | Vivait-Call
+
| style="padding:0.5cm; font-weight:bold;" | Almacenamiento de grabaciones
 
| style="padding:0.5cm;"                  | Uno por sistema
 
| style="padding:0.5cm;"                  | Uno por sistema
| style="padding:0.5cm;"                  | Portal de administración del sistema
+
| style="padding:0.5cm;"                  | Almacenamiento de las grabaciones, ya sean de entorno corporativo o de Contact Center
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
| style="padding:0.5cm;"                  | Bajo proyecto puede existir más de uno
+
| style="padding:0.5cm;"                  | 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
| style="padding:0.5cm; font-weight:bold;" | vivait-user
 
| style="padding:0.5cm;"                  | Uno por sistema en nodo STG
 
| style="padding:0.5cm;"                  | Portal de usuario, para acceso a buzones, configuración, etc.
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 
| style="padding:0.5cm;"                  | Bajo proyecto puede existir más de uno
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | webfon2
 
| style="padding:0.5cm;"                  | Uno por sistema en nodo STG
 
| style="padding:0.5cm;"                  | Portal de VIVAit Call Web
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 
| style="padding:0.5cm;"                  | Bajo proyecto puede existir más de uno
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | webfon2-solo
 
| style="padding:0.5cm;"                  | Uno por sistema en nodo STG
 
| style="padding:0.5cm;"                  | Dialpad de VIVAit Call Web.<br>
 
webfon2 =  vivait-user + webfon2-solo
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 
| style="padding:0.5cm;"                  | Bajo proyecto puede existir más de uno
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | Vivait-Tracker
 
| style="padding:0.5cm;"                  | Uno por sistema
 
| style="padding:0.5cm;"                  | Portal de seguimiento de llamadas ''Denominado Tracker web''.
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | Debe instalarse en un servidor que tenga los ficheros de grabación montados en su sistema de archivos.<br>
 
Ligado a recordCentral
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | Tracker-Corp
 
| style="padding:0.5cm;"                  | Uno por sistema
 
| style="padding:0.5cm;"                  | Portal de seguimiento de llamadas del entorno corporativo. ''Denominado Tracker corporativo''.
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 
| style="padding:0.5cm;"                  | Debe instalarse en un servidor que tenga los ficheros de grabación montados en su sistema de archivos.<br>
 
Ligado a recordCentral
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | Monitor
 
| style="padding:0.5cm;"                  | Uno por sistema
 
| style="padding:0.5cm;"                  | Portal de monitores de pared de Call Center
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | Bajo proyecto puede existir más de uno
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | Vivait-Supervisor
 
| style="padding:0.5cm;"                  | Uno por sistema
 
| style="padding:0.5cm;"                  | Portal de monitorización de llamadas del entorno corporativo
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 
| style="padding:0.5cm;"                  | Bajo proyecto puede existir más de uno
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | Baikal
 
| style="padding:0.5cm;"                  | Uno por sistema
 
| style="padding:0.5cm;"                  | Servidor de calendarios para su uso en diferentes entornos de nimitz
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  |
 
 
|}
 
|}
</div>
+
<br><br>
 +
Para más detalles, consultar el apartado [[#Sistema Operativo |Sistema Operativo]]
 
<br><br>
 
<br><br>
 
<div style="
 
<div style="
Línea 976: Línea 956:
 
<br><br>
 
<br><br>
  
===== Nivel de Administración - Back-end =====
+
==== Nivel de conmutación de voz ====
<br><br>
 
Se compone principalmente de los siguientes elementos:
 
<br><br>
 
: • '''Servidor''': infraestructura donde se alojan las aplicaciones y servicios que exponen APIs (por ejemplo, aplicaciones Java desplegadas en servidores como Apache Tomcat).<br>
 
::Recibe peticiones web (HTTP), ejecuta el código Java de la aplicación y devuelve la respuesta al cliente (navegador, app, etc.).<br>
 
: • '''Clientes''': aplicaciones externas (front-end, apps móviles, otros sistemas) que consumen las APIs del back-end.
 
 
<br><br>
 
<br><br>
 
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
 
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
Línea 992: Línea 966:
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Observaciones
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Observaciones
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | Tomcat11
+
| style="padding:0.5cm; font-weight:bold;" | Asterisk 1.4.24 <br>
| style="padding:0.5cm;"                  | Uno por sistema
+
by MDtel
| style="padding:0.5cm;"                  | Servidor de aplicaciones web Apache Tomcat especializado en ejecutar aplicaciones desarrolladas en Java.
+
| style="padding:0.5cm;"                  | Uno por servidor ACD
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
+
| style="padding:0.5cm;"                  | Núcleo de conmutación de voz basado en Asterisk 1.4 y modificado por MDtel
| style="padding:0.5cm;"                  | Para proyectos especiales puede existir uno por contexto JAVA
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | cargaClickToCall
 
| style="padding:0.5cm;"                  | Uno por sistema
 
| style="padding:0.5cm;"                  | Inserción en BBDD de la tabla ACD_LISTAS_LLAMAME a través de los parámetros proporcionados
 
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
| style="padding:0.5cm;"                  | Se invoca desde el portal Vivait-Call
+
| style="padding:0.5cm;"                  | Fuertemente modificado por MDtel. En el futuro migrará a Asterisk 18.9 Certified
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | cargaContactos
+
| style="padding:0.5cm; font-weight:bold;" | Dialplan ACD <br>
| style="padding:0.5cm;"                  | Uno por sistema
+
by MDtel
| style="padding:0.5cm;"                  | Inserción en BBDD de las tablas ACD_CONTACTOS y ACD_CONTACTOS_CAMPANNA a través de los parámetros proporcionados
+
| style="padding:0.5cm;"                  | Uno por servidor ACD
 +
| style="padding:0.5cm;"                  | Configuración de voz
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
| style="padding:0.5cm;"                  | Se invoca desde el portal Vivait-Call
+
| style="padding:0.5cm;"                  | En el futuro se unificará con corporativa
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | ChatWebService
+
| style="padding:0.5cm; font-weight:bold;" | Asterisk 18.9 <br>
| style="padding:0.5cm;"                  | Uno por sistema
+
Certified by MDtel
| style="padding:0.5cm;"                  | Interface entre el formulario de chat del VivaDesk y el servicio de chansip
+
| style="padding:0.5cm;"                  | Uno por servidor corporativo / gateway
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
+
| style="padding:0.5cm;"                  | Núcleo de conmutación de voz basado en Asterisk 18.9 y modificado por MDtel
| style="padding:0.5cm;"                  | Servicio de multicanal texto
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | GeneraConf
 
| style="padding:0.5cm;"                  | Uno por sistema
 
| style="padding:0.5cm;"                  | Sincroniza cambios en algunas tablas de la BBDD con ficheros Asterisk
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | Se invoca desde el portal Vivait-Call
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | generaLlamada
 
| style="padding:0.5cm;"                  | Uno por sistema
 
| style="padding:0.5cm;"                  | Generación de una llamada telefónica a partir de la invocación al servicio
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | Creación de un archivo de llamada Asterisk y puesta en la carpeta outgoing
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | InfoWS
 
| style="padding:0.5cm;"                  | Uno por sistema
 
| style="padding:0.5cm;"                  | Proporciona información de llamadas de la BBDD y gestiona  grabaciones
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | La información de las llamadas puede ser de DBTR o DBHIST.<br>
 
Inicia/finaliza grabaciones y mediante un script se trasladan los archivos de grabación a un directorio de ficheros específico
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | Vivait-FonBO
 
| style="padding:0.5cm;"                  | Uno por sistema
 
| style="padding:0.5cm;"                  | Proporciona información de la agenda e histórico de llamadas
 
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
| style="padding:0.5cm;"                  | Invocado por los portales vivait-user y webfon2
+
| style="padding:0.5cm;"                  | Actualmente Asterisk estándar (05/26). <br>
 +
La instalación contempla descargar de la red la versión 18 más actualizada, siempre "CERTIFIED"
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | Vivait-Supervisor
+
| style="padding:0.5cm; font-weight:bold;" | Dialplan corporativo
| style="padding:0.5cm;"                  | Uno por sistema
+
| style="padding:0.5cm;"                  | Uno por servidor corporativo/gateway
| style="padding:0.5cm;"                  | Obtiene información de la BBDD y ejecuta acciones en el entorno corporativo.
+
| style="padding:0.5cm;"                  | Configuración de voz|
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
| style="padding:0.5cm;"                  | Se invoca desde el portal Vivait-Supervisor
+
| style="padding:0.5cm;"                  | En el futuro se unificará con ACD
|-
+
|}
| style="padding:0.5cm; font-weight:bold;" | Tracker-Rest
+
<br><br>
| style="padding:0.5cm;"                  | Uno por sistema
+
Para más detalles, consultar el apartado [[#Matriz de conmutación |Matriz de conmutación]]
| style="padding:0.5cm;"                  | Proporciona información de las llamadas corporativas y los ficheros de audio de las posibles grabaciones asociadas
+
<br><br>
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
+
<div style="
| style="padding:0.5cm;"                  | Se invoca desde el portal Tracker-Corp
+
   text-align:right;
|-
+
   margin-top:20px;
| style="padding:0.5cm; font-weight:bold;" | Vivait-Tracker
 
| style="padding:0.5cm;"                  | Uno por sistema
 
| style="padding:0.5cm;"                  | Proporciona información de las llamadas y los ficheros de audio de las posibles grabaciones asociadas.<br>
 
Permite valorar las llamadas
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | Se invoca desde el portal Vivait-Tracker
 
|-
 
| style="padding:0.5cm; font-weight:bold;" | Vivait-Call
 
| style="padding:0.5cm;"                  | Uno por sistema
 
| style="padding:0.5cm;"                  | Gestiona DBTR. Lee, crea, borra y actualiza los registros en las tablas de nimitz
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | Se invoca desde el portal Vivait-Call
 
|}
 
</div>
 
<br><br>
 
<div style="
 
   text-align:right;
 
   margin-top:20px;
 
 
   padding:8px;
 
   padding:8px;
 
   border:1px solid #ccc;
 
   border:1px solid #ccc;
Línea 1103: Línea 1032:
 
<br><br>
 
<br><br>
  
==== Nivel de Monitorización ====
+
==== Nivel de base de datos ====
 
<br><br>
 
<br><br>
 
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
 
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
Línea 1113: Línea 1042:
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Observaciones
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Observaciones
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | Servidor Zabbix
+
| style="padding:0.5cm; font-weight:bold;" | MySQL 8.0.45
| style="padding:0.5cm;"                  | Uno por sistema
+
| style="padding:0.5cm;"                  | Donde haya BBDD de cualquier tipo (incluso zabbix)
| style="padding:0.5cm;"                  | Monitoriza el estado y el rendimiento del sistema en tiempo real
+
| style="padding:0.5cm;"                  | Motor de Base de Datos para Ubuntu 22.04
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
| style="padding:0.5cm;"                  | Bajo proyecto puede existir más de uno. Típicamente irá o en BBDD replica o en nodo de gestión en instalaciones grandes
+
| style="padding:0.5cm;"                  | A efectos prácticos se pretende que sea la BBDD de todos los servicios
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | Template Zabbix
+
| style="padding:0.5cm; font-weight:bold;" | MariaDB 11.8.3
| style="padding:0.5cm;"                  | Uno por sistema
+
| style="padding:0.5cm;"                  | Donde haya BBDD de cualquier tipo
| style="padding:0.5cm;"                  | Define qué se va a monitorizar y cómo hacerlo de forma reutilizable
+
| style="padding:0.5cm;"                  | Motor de Base de Datos para Debian 13
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
+
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
| style="padding:0.5cm;"                  |  
+
| style="padding:0.5cm;"                  | A efectos prácticos se pretende que sea la BBDD de todos los servicios
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | Agente Zabbix
+
| style="padding:0.5cm; font-weight:bold;" | DBTR
| style="padding:0.5cm;"                  | Uno por sistema a monitorizar
+
| style="padding:0.5cm;"                  | Una por sistema
| style="padding:0.5cm;"                  | Componente que se instala en los equipos que se quieres monitorizar para recoger información directamente del sistema
+
| style="padding:0.5cm;"                  | Base de Datos sobre la que trabaja todo el entorno de tiempo real
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
+
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  |  
 
| style="padding:0.5cm;"                  |  
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | Script monitorización Zabbix
+
| style="padding:0.5cm; font-weight:bold;" | DBHIST
| style="padding:0.5cm;"                  | Uno por sistema
+
| style="padding:0.5cm;"                  | Una por sistema multinodo
| style="padding:0.5cm;"                  | Amplia lo que el sistema puede vigilar, especialmente cuando algo no se puede medir con las opciones estándar
+
| style="padding:0.5cm;"                  | Base de Datos para postproceso, como reporting, traker, supervisor, ... Subconjunto de tablas de DBTR con la que está sincronizada
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
| style="padding:0.5cm;"                  |  
+
| style="padding:0.5cm;"                  | Bajo proyecto puede existir más de una. <br>
 +
En el nodo en el que exista réplica existirá además copia (excepto nodo ACD)
 +
|-
 +
| style="padding:0.5cm; font-weight:bold;" | DBCopia
 +
| style="padding:0.5cm;"                  | Uno por servidor con Asterisk
 +
| style="padding:0.5cm;"                  | Copia de tablas de configuración de DBTR para respaldo de la misma
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite*
 +
| style="padding:0.5cm;"                  | Local en cada nodo con Asterisk. <br>
 +
*Los nodos de ACD actualmente no trabajan con copia; en caso de fallo de DBTR se usa el modo emergencia
 
|}
 
|}
 
</div>
 
</div>
 +
<br><br>
 +
Para más detalles, consultar el apartado [[#Bases de datos (BBDD) |Bases de Datos]]
 
<br><br>
 
<br><br>
 
<div style="
 
<div style="
Línea 1174: Línea 1113:
 
<br><br>
 
<br><br>
  
===Versiones de módulos===
+
==== Nivel de procesos '''''VIVA'''it'' ====
 +
<br><br>
 +
La mayoría de los elementos aparecen como servicios en los nodos correspondientes.
 
<br><br>
 
<br><br>
 
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
 
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
 
|-
 
|-
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Módulo
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Elemento
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VSuite V.3.1
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Instancias
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VSuite V.3.2
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Propósito
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VSuite V.3.3
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Producto
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VIVAit V.3.0 (VSuite 3.4 + VCall 3.0)
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Observaciones
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VIVAit V.3.1 (VSuite 3.5 + VCall 3.1)
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VIVAit V.3.2 (VSuite 3.6 + VCall 3.2)
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VIVAit V.3.4 (VSuite 3.8 + VCall 3.4)
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VIVAit V.3.5 (VSuite 3.9 + VCall 3.5)
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VIVAit V.3.6 (VSuite 3.9 + VCall 3.6)
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VIVAit V.4.0 (VSuite 3.9 + VCall 4.0)
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VIVAit V.5.0 (VSuite 3.9 + VCall 5.0)
 
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VIVAit V.5.1 (VSuite 3.9 + VCall 5.1)
 
 
|-
 
|-
 
+
| style="padding:0.5cm; font-weight:bold;" | intz-nimitz
 +
| style="padding:0.5cm;"                  | Donde haya una BBDD de tiempo real o copia
 +
| style="padding:0.5cm;"                  | Interfaz entre el dialplan y la base de datos
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  | No donde haya BBDD de réplica.<br>
 +
En sistemas grandes pueden contemplar más de un intz-nimitz
 
|-
 
|-
| style="padding:0.5cm; font-weight:bold;" | Año de lanzamiento
+
| style="padding:0.5cm; font-weight:bold;" | intz-gh
| style="padding:0.5cm;"                  | ----  
+
| style="padding:0.5cm;"                  | En el nodo con menos carga
| style="padding:0.5cm;"                  | ----
+
| style="padding:0.5cm;"                  | Conocer el estado de las extensiones de diferentes nodos
| style="padding:0.5cm;"                  | ----
+
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
| style="padding:0.5cm;"                  | 2015
+
| style="padding:0.5cm;"                  | Solo va en un nodo. Si desconocemos cual es el nodo con menos carga, instalarlo en la maquina con BDHIST
| style="padding:0.5cm;"                  | 2016
 
| style="padding:0.5cm;"                  | 2018
 
| style="padding:0.5cm;"                  | 2020
 
| style="padding:0.5cm;"                  | 2021
 
| style="padding:0.5cm;"                  | 2022
 
| style="padding:0.5cm;"                  | 2023
 
| style="padding:0.5cm;"                  | 2025
 
| style="padding:0.5cm;"                  | 2026
 
 
|-
 
|-
| Sistema Operativo || ---- || ----  || ---- || ---- || Ubuntu 14.0.4 || Ubuntu 16.0.4 || Ubuntu 18.04 || Ubuntu 20 || Ubuntu 20 || Ubuntu 22 ||Ubuntu 22 Nodo ACD, Debian 12 resto de modos || Ubuntu 22 Nodo ACD, Debian 13 resto de modos
+
| style="padding:0.5cm; font-weight:bold;" | intz-tap
 +
| style="padding:0.5cm;"                  | En los nodos corporativos
 +
| style="padding:0.5cm;"                  | Encargado de la grabación SIPREC y TBC
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 +
| style="padding:0.5cm;"                  | Junto al modulo chan_mdtap de asterisk para enviar los flujos RTP a un elemento externo
 
|-
 
|-
|MySQL (C) ||  ---- || ----  ||  ----  ||  ----  || 5.5 ||5.7 || 5.7 || 8.0 || 8.0 || 8.0 || 8.0 || ----
+
| style="padding:0.5cm; font-weight:bold;" | serCen
 +
| style="padding:0.5cm;"                  | En nodo STG y nodo de gestión
 +
| style="padding:0.5cm;"                  | Encargado de la autenticidad y doble factor de los usuarios
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  | Proporciona servicios a los diferentes portales (front-end) del sistema
 
|-
 
|-
|Mariadb (C) || ---- || ---- || ---- || ---- || ---- || ---- || ---- || ---- || ---- || ---- || ---- || 11.8
+
| style="padding:0.5cm; font-weight:bold;" | vivait-direct
 +
| style="padding:0.5cm;"                  | En nodo STG y nodo de gestión
 +
| style="padding:0.5cm;"                  | Centraliza y gestiona la consulta de agendas y contactos desde distintas fuentes de datos. <br>
 +
Alternativa a Vivait-FonBO que sigue gestionando el histórico de llamadas
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  | Servicio invocado por los portales vivait-user y webfon2
 
|-
 
|-
|Apache Tomcat (C) || ---- || ---- || ---- || ---- || 7 ||8 || 8 || 9 || 9 || 9 || 9 || 11
+
| style="padding:0.5cm; font-weight:bold;" | vivait-cti
 +
| style="padding:0.5cm;"                  | Uno por servidor ACD
 +
| style="padding:0.5cm;"                  | Interfaz entre '''''VIVA'''''it Desk, supervisor y el manager de asterisk
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  |  
 
|-
 
|-
|PHP (C) || ---- || ---- || ---- || ---- || 5 ||7 || 7 || 7.4 || 7.4 || ---- || ---- || 8.4
+
| style="padding:0.5cm; font-weight:bold;" | motorSal
 +
| style="padding:0.5cm;"                  | Uno por servidor ACD
 +
| style="padding:0.5cm;"                  | Motor de marcador saliente automático
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  | Solo si hay marcación saliente. Junto a DBTR
 
|-
 
|-
|OpenJDK (C) || ---- || ---- || ---- || ---- || 7.0 ||8.0 || 8.0 || 11.0 || 11.0 || 11.0 || 11.0 || 21.0
+
| style="padding:0.5cm; font-weight:bold;" | myAcdSuperv
 +
| style="padding:0.5cm;"                  | Uno por servidor ACD
 +
| style="padding:0.5cm;"                  | Recopilador de datos de asterisk y actualiza en la BBDD. Genera llamadas en el marcador
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  |  
 
|-
 
|-
| Asterisk LTS '''(*)''' || 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 ||1.4 Nodo ACD, 13.21 resto nodos ||1.4 Nodo ACD, 18 resto nodos ||1.4 Nodo ACD, 18 resto nodos  || 1.4 Nodo ACD, 18 resto nodos
+
| style="padding:0.5cm; font-weight:bold;" | recordCentral
 +
| style="padding:0.5cm;"                  | Uno por sistema
 +
| style="padding:0.5cm;"                  | Servidor de grabaciones, los agentes (recorNodo) se conectan a él
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 +
| style="padding:0.5cm;"                  | 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
 
|-
 
|-
|Asterisk MDTel nodo ACD (VS) || ---- || ---- || ---- ||3.3.1||3.4.1||3.5.0||3.5.3 || 3.5.4 || 3.5.5 || 3.5.5 || 3.5.5  || 3.5.5
+
| style="padding:0.5cm; font-weight:bold;" | recordNodo
 +
| style="padding:0.5cm;"                  | Uno por servidor corporativo / gateway
 +
| style="padding:0.5cm;"                  | Agente de grabación
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 +
| style="padding:0.5cm;"                  |  
 
|-
 
|-
|Asterisk MDTel nodo Corp Cisco (VC)|| ---- || ---- || ---- ||3.3.4||3.4.4||3.5.1||3.5.4 || 3.5.5 || 3.5.5 || 3.5.5 || 3.5.5  || 3.7.0
+
| style="padding:0.5cm; font-weight:bold;" | bdCentral
 +
| style="padding:0.5cm;"                  | Uno, en el nodo con la BBDD de tiempo real
 +
| style="padding:0.5cm;"                  | Genera la base de datos que se copiará para respaldo a otros nodos
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  |  
 
|-
 
|-
|Asterisk MDTel nodo Corp / GW (VC)|| ---- || ---- || ---- ||3.3.4||3.4.4||3.5.1||3.5.4 ||3.5.5 || 3.5.6 || 3.5.6 || 3.5.6 || 3.7.0
+
| style="padding:0.5cm; font-weight:bold;" | bdNodo
 +
| style="padding:0.5cm;"                  | En cada nodo con BBDD de copia
 +
| style="padding:0.5cm;"                  | Recoge la base de datos del servidor central con el objeto de tener el respaldo
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  |  
 
|-
 
|-
|BD (C)||3.2.0||3.4.0||3.5.0||3.6.0||3.8.0||3.9.0||3.11.0 || 3.11.1 || 3.11.2 || 3.11.3 || 3.20.0  || 3.30
+
| style="padding:0.5cm; font-weight:bold;" | Actualizador
 +
| style="padding:0.5cm;"                  | Uno por sistema con ACD
 +
| style="padding:0.5cm;"                  | Se encarga de proporcionar las versiones actualizadas de las aplicaciones de puesto de trabajo
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  | En el mismo servidor que el portal de administración
 
|-
 
|-
|CargaContactos (VS)|| || || || || || ||3.8.0 || 3.8.0 || 3.8.0 || 3.8.0 ||  3.8.0  || 3.8.0
+
| style="padding:0.5cm; font-weight:bold;" | phoneProv-tftp
 +
| style="padding:0.5cm;"                  | Uno por sistema
 +
| style="padding:0.5cm;"                  | Se encarga del aprovisionamiento masivo de terminales
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  | En instalaciones grandes habrá más de uno, quizás uno por sede grande; depende de la infraestructura de DHCP
 
|-
 
|-
|Dialplan ACD (VS)|| || || || ||3.5.0||3.6.0||3.8.1 || 3.8.2 || 3.8.3 || 3.8.4 || 3.9.|| 3.10.0
+
| style="padding:0.5cm; font-weight:bold;" | borraregistrosnimitz
 +
| style="padding:0.5cm;"                  | Uno por sistema
 +
| style="padding:0.5cm;"                  | Se encarga de la gestión de las bases de datos, aplicando políticas de retención que limitan la persistencia de los registros hasta una fecha máxima establecida.
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  | En la BDTR es típico dejar 6 meses y en BDHIST 5 anos.
 
|-
 
|-
|Dialplan Corp (C)|| || || ||3.3.1||3.5.0||3.6.0||3.8.1 || 3.8.2 || 3.8.3 || 3.8.4 || 3.9.0  || 3.10.0
+
| style="padding:0.5cm; font-weight:bold;" | movergrabacionesanube
|-
+
| style="padding:0.5cm;"                  | Uno por sistema
|Generaconf (C)||3.0.0||3.0.0||3.2.0||3.4.0||3.5.0||3.6.0||3.8.0 || 3.8.1 || 3.8.2 || 3.8.3 || 3.9.0  || 3.9.3
+
| style="padding:0.5cm;"                  | Guardar las grabaciones un un NAS del cliente
|-
+
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
|Instalador (C)||3.1.0||3.2.0||3.3.0||3.4.0||3.5.0||3.6.0||3.8.0 || 3.9.0 || 3.10.0 || 3.11.0  || 3.20 || 3.20
+
| style="padding:0.5cm;"                  | Utiliza el módulo RecordCentral
|-
 
|Intz-gh (VC)|| || || || || ||0.1.0||0.1.1 || 0.1.2 || 0.1.3 || 0.1.4 || 0.1.5  || 0.1.7
 
|-
 
|Intz-nimitz (C)||2.6.0||3.0.1||3.0.3||3.4.1||3.4.2||3.4.4||3.5.0 || 3.7.1 || 3.08 || 4.0.0 || 4.0.1  || 4.0.3
 
|-
 
|Intz-tap (C)|| || || || || || || || || || || || 0.1.0
 
|-
 
|Janus (VS)|| || || || || || || ||  ||  || 0.0.8  || || 
 
|-
 
|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 || 3.6.3 || 3.6.4 || ||
 
|-
 
|Mcan (VS)||---||---||---||---||---||---||--- || 0.1.5 || 0.1.5 || ---  || ---  || ---
 
|-
 
|MotorPredi (VS)||---||---||---||---||---||---||0.1.1 || 0.1.1 || 0.1.1 || ---- || ----  || ----
 
|-
 
|Motorsal (VS)||1.4.0||3.1.0||3.2.0||3.3.0||3.4.0||3.5.3||3.6.1 || 3.6.1 || 3.6.3 || 3.6.4 || ||
 
|-
 
|Multimonitorweb (VS)||3.0.1||3.0.2||3.1.0||3.1.0||3.2.0||3.2.0||3.4.1 || 3.4.1 || 3.4.3 || 3.4.4 || ||
 
|-
 
|MyACDSuperv (VS)||5.2.0||5.3.0||5.3.0||5.3.2||5.3.2||5.3.3||6.0.1 || 6.0.3 || 6.0.4 || 6.0.5 || ||
 
|-
 
|Phone_prov (C)||------||------||3.0.1||3.0.3||3.0.3||3.0.3||3.0.4 || 3.0.4 || 3.0.4 || 3.0.4  || 3.0.5 || 3.0.5
 
|-
 
|Portal de administración (C)||3.1.0||3.2.0||3.3.0||3.4.0||3.5.0||3.6.0||3.8.0 || 3.8.3 || 3.8.5 || 3.8.6 || 3.8.7  || 4.1.2
 
|-
 
|Portal usuario (VC)||------||------||------||3.0.0||3.1.0||4.0.0||4.1.0 || 4.1.0 || 4.1.1 || 4.1.2 || 4.1.3  || ----
 
|-
 
|Portal webfon (VC)||------||------||------||-----||-----||-----||-----||1.0.0 ||1.0.1 ||1.0.2 ||2.010  || 2.3.0
 
|-
 
|FonBo (VC) ||------||------||------||-----||-----||-----||-----|| 1.0.0 || 1.0.1 || 1.0.1 || 1.0.1 || 2.0.5
 
|-
 
|Preview (VS)||1.0.18||3.2.0||3.3.0||3.4.0||3.5.0||3.5.0||---||--- ||--- ||--- ||----||----
 
|-
 
|recordCentral (C)||-----||-----||-----||4.0.0||4.0.1||4.0.2||4.0.3||4.0.3||4.0.3 ||4.0.4 || 4.0.4 || 4.0.4
 
|-
 
|recordgwd (C)||1.3.0||1.3.0||3.1.0||-----||-----||----||----||---- ||---- ||---- ||----  || ----
 
|-
 
|recordNodo (C)||-----||-----||-----||4.0.0||4.0.0||4.0.0||4.0.3||4.0.3||4.0.3 ||4.0.3 ||4.0.3
 
|-
 
|recordprocesad (C) ||1.2.0||1.2.0||3.0.0||-----||-----||----||----||---- ||---- ||---- ||----  || ----
 
|-
 
|Sercen (C) || || || || || || |||| || 0.03.01 || 0.03.|| 0.03.05  || 0.4.2
 
|-
 
|Supervisor Web (VS)|| || || || || || ||1.0.0||1.0.0 ||1.1.0 ||1.1.1 ||1.2.0  || 2.0.2
 
|-
 
|Tracker Web (C) ||3.0.2||3.1.0||3.2.0||3.3.0||3.4.0||3.5.0||3.7.0||3.7.1||3.7.3 ||3.7.8  ||3.8.0  ||
 
|-
 
|Tracker Corporativo (C) || || || || || || || || || || || || 0.1.0
 
|-
 
|Tracker windows (C) ||3.0.0||3.1.0||3.2.0||3.3.0||3.4.0||3.4.0||----||---- ||---- ||---- ||----  || ----
 
|-
 
|VIVA designer (VS) ||1.0.23||3.0.1||3.1.0||3.1.0||3.2.0||3.2.0||----||---- ||---- ||---- ||----  || ----
 
|-
 
|VIVA desk (VS) ||3.0.2||3.2.0||3.3.0||3.4.0||3.5.0||3.5.2||3.5.3||3.6.1||3.6.6 ||3.6.7
 
|-
 
|VIVAit Call Business IOS (VC) ||---||---||---||---||---||---||--- || --- || --- || --- || 2.1.6  || 3.17.3
 
|-
 
|VIVAit Call Business Androit (VC) ||---||---||---||---||---||---||--- || --- || --- || --- || 2.1.6  || 3.0.17
 
|-
 
|VIVAit Call Celullar ||---||---||---||---||---||---||--- || --- || --- || --- ||  || 1.0.1
 
|-
 
|VIVAit Call Cloud (VC) ||---||---||---||---||---||---||--- || --- || --- || --- || ---  || ----
 
|-
 
|VIVA report (VS)||1.2.0||3.1.0||3.2.0||3.2.2||3.3.0||3.4.1||3.5.1||3.5.2||3.5.3 ||3.5.4 ||  ||
 
|-
 
|VIVA supervisor (VS)||3.0.0||3.1.0||3.2.0||3.3.0||3.4.0||3.6.1||3.8.0||3.8.1 ||3.8.2 ||3.8.3 || ||
 
|-
 
|Vivait-cti (VS)||3.0.0||3.0.1||3.0.1||3.0.1||3.0.2||3.0.2||4.0.1||4.0.3||4.0.3 || -- || --  || --
 
|-
 
|WebRTC (VC)||-----||-----||-----||-----||-----||-----||-----||0.0.1 ||0.0.6 ||0.0.7 ||0.0.9 || 0.0.10
 
|-
 
|Vivait-direc (VC) ||-----||-----||-----||-----||-----||-----||-----|| ----- || ----- || ----- || ----- || 0.0.8
 
 
|}
 
|}
 +
</div>
 
<br><br>
 
<br><br>
'''(C)''': Módulo común
+
Para más detalles, consultar el apartado [[#Procesos propios VIVAit | Procesos propios VIVAit]]
<br><br>
 
'''(VC)''': Módulo de VIVAit Call
 
<br><br>
 
'''(VS)''': Módulo de VIVAit Suite
 
<br><br>
 
'''(*)''' La información sobre las versiones disponibles de Asterisk se puede encontrar en: https://wiki.asterisk.org/wiki/display/AST/Asterisk+Versions.
 
 
<br><br>
 
<br><br>
 
<div style="
 
<div style="
Línea 1330: Línea 1236:
 
   display:inline-block;
 
   display:inline-block;
 
">
 
">
[[File:flecha_verde.png|20px|link=#Versiones de módulos]][[#Versiones de módulos| Volver arriba]]
+
[[File:flecha_verde.png|20px|link=#Niveles funcionales del software]][[#Niveles funcionales del software| Volver arriba]]
 
</div>
 
</div>
 
<div style="
 
<div style="
Línea 1356: Línea 1262:
 
<br><br>
 
<br><br>
  
=== Sistema Operativo ===
+
==== Nivel de Administración ====
 
<br><br>
 
<br><br>
En la plataforma '''''VIVA'''it'' se utiliza el sistema operativo Linux, con dos distribuciones según la versión del proyecto:<br>
+
Este nivel software proporciona servicios para administrar el sistema y servicios al usuario final. Se estructura en dos capas:
: • Hasta la versión 4.0 y para proyectos especiales de '''''VIVA'''it'', se emplea [[#Sistema Operativo Ubuntu| Ubuntu Server LTS]].<br>
 
: • A partir de la versión 5.0 de '''''VIVA'''it'', se utiliza por defecto [[#Sistema Operativo Debian| Debian LTS]].
 
 
<br><br>
 
<br><br>
 
+
: • [[#Nivel de Administración - Front-end| '''Front-end''']]: capa de presentación que interactúa con el usuario (portales web, interfaces gráficas o paneles de control), encargada de mostrar la información y recoger las acciones del usuario.<br>
==== Sistema Operativo Ubuntu ====
+
: • [[#Nivel de Administración - Back-end| '''Back-end''']]: capa de lógica y procesamiento donde se gestionan los servicios, la ejecución de aplicaciones y el acceso a datos, apoyándose en servidores como Apache HTTP Server y Apache Tomcat.
 
<br><br>
 
<br><br>
El sistema operativo de la plataforma '''''VIVA'''it'', hasta la versión 4.0, se basa en Ubuntu Server LTS.<br>
+
Para obtener más información del tipo administración consultar el apartado [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Portales_de_administraci%C3%B3n_VIVAit Portales de Administración].<br>
Estas versiones cuentan con soporte a largo plazo (LTS), lo que las hace más estables y con actualizaciones controladas desde Ubuntu 14.04.1.<br>
+
Para ver los diferentes portales de usuario ver [[#Portales web corporativos | Portales web corporativos]].
En concreto, el sistema operativo utilizado en'''''VIVA'''it'' es Ubuntu Server 22.04 LTS.<br>
 
Para más información https://wiki.ubuntu.com/Kernel/LTSEnablementStack.
 
 
<br><br>
 
<br><br>
[[File:sistema_operativo_ubuntu_V5.1.png|1000px|center|thumb]]
+
</div>
 
<br><br>
 
<br><br>
 
<div style="
 
<div style="
Línea 1381: Línea 1283:
 
   display:inline-block;
 
   display:inline-block;
 
">
 
">
[[File:flecha_verde.png|20px|link=#Sistema Operativo]][[#Sistema Operativo| Volver arriba]]
+
[[File:flecha_verde.png|20px|link=#Niveles funcionales del software]][[#Niveles funcionales del software| Volver arriba]]
 
</div>
 
</div>
 
<div style="
 
<div style="
Línea 1407: Línea 1309:
 
<br><br>
 
<br><br>
  
==== Sistema Operativo Debian ====
+
 
 +
 
 +
===== Nivel de Administración - Front-end =====
 
<br><br>
 
<br><br>
El sistema operativo de la plataforma '''''VIVA'''it'', desde la versión 4.0, se basa en Debain LTS.<br>
+
Se compone de dos entidades:
En concreto, el sistema operativo utilizado en '''''VIVA'''it'' es la versión número Debian 13, de nombre Trixie con soporte a largo plazo LTS.<br>
 
Estas versiones cuentan con soporte a largo plazo (LTS), lo que las hace más estables y con actualizaciones controladas.<br>
 
Para más información https://www.debian.org/releases/trixie/index.es.html.
 
 
<br><br>
 
<br><br>
[[File:sistema_operativo_debian_V5.1.png|1000px|center|thumb]]
+
: • '''Servidores''': donde se ejecutan las aplicaciones y servicios web, como Apache HTTP Server.<br>
 +
: • '''Clientes''': interfaces de acceso para los usuarios, como portales web.
 
<br><br>
 
<br><br>
<div style="
+
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
  text-align:right;
+
|-
  margin-top:20px;
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Elemento
  padding:8px;
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Instancias
  border:1px solid #ccc;
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Propósito
  background-color:#f9f9f9;
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Producto
  border-radius:6px;
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Observaciones                |
  display:inline-block;
+
|-
">
+
| style="padding:0.5cm; font-weight:bold;" | Apache2
[[File:flecha_verde.png|20px|link=#Sistema Operativo]][[#Sistema Operativo| Volver arriba]]
+
| style="padding:0.5cm;"                  | Uno por servidor con portales
</div>
+
| style="padding:0.5cm;"                  | Servidor de páginas web. Servidor de portales. No usa JAVA
<div style="
+
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
   text-align:right;
+
| style="padding:0.5cm;"                  |
   margin-top:20px;
+
|-
   padding:8px;
+
| style="padding:0.5cm; font-weight:bold;" | Vivait-Call
   border:1px solid #ccc;
+
| style="padding:0.5cm;"                  | Uno por sistema
 +
| style="padding:0.5cm;"                  | Portal de administración del sistema
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  | Bajo proyecto puede existir más de uno
 +
|-
 +
| style="padding:0.5cm; font-weight:bold;" | vivait-user
 +
| style="padding:0.5cm;"                  | Uno por sistema en nodo STG
 +
| style="padding:0.5cm;"                  | Portal de usuario, para acceso a buzones, configuración, etc.
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 +
| style="padding:0.5cm;"                  | Bajo proyecto puede existir más de uno
 +
|-
 +
| style="padding:0.5cm; font-weight:bold;" | webfon2
 +
| style="padding:0.5cm;"                  | Uno por sistema en nodo STG
 +
| style="padding:0.5cm;"                  | Portal de VIVAit Call Web
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 +
| style="padding:0.5cm;"                  | Bajo proyecto puede existir más de uno
 +
|-
 +
| style="padding:0.5cm; font-weight:bold;" | webfon2-solo
 +
| style="padding:0.5cm;"                  | Uno por sistema en nodo STG
 +
| style="padding:0.5cm;"                  | Dialpad de VIVAit Call Web.<br>
 +
webfon2 =  vivait-user + webfon2-solo
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 +
| style="padding:0.5cm;"                  | Bajo proyecto puede existir más de uno
 +
|-
 +
| style="padding:0.5cm; font-weight:bold;" | Vivait-Tracker
 +
| style="padding:0.5cm;"                  | Uno por sistema
 +
| style="padding:0.5cm;"                  | Portal de seguimiento de llamadas ''Denominado Tracker web''.
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  | Debe instalarse en un servidor que tenga los ficheros de grabación montados en su sistema de archivos.<br>
 +
Ligado a recordCentral
 +
|-
 +
| style="padding:0.5cm; font-weight:bold;" | Tracker-Corp
 +
| style="padding:0.5cm;"                  | Uno por sistema
 +
| style="padding:0.5cm;"                  | Portal de seguimiento de llamadas del entorno corporativo. ''Denominado Tracker corporativo''.
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 +
| style="padding:0.5cm;"                  | Debe instalarse en un servidor que tenga los ficheros de grabación montados en su sistema de archivos.<br>
 +
Ligado a recordCentral
 +
|-
 +
| style="padding:0.5cm; font-weight:bold;" | Monitor
 +
| style="padding:0.5cm;"                  | Uno por sistema
 +
| style="padding:0.5cm;"                  | Portal de monitores de pared de Call Center
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  | Bajo proyecto puede existir más de uno
 +
|-
 +
| style="padding:0.5cm; font-weight:bold;" | Vivait-Supervisor
 +
| style="padding:0.5cm;"                  | Uno por sistema
 +
| style="padding:0.5cm;"                  | Portal de monitorización de llamadas del entorno corporativo
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 +
| style="padding:0.5cm;"                  | Bajo proyecto puede existir más de uno
 +
|-
 +
| style="padding:0.5cm; font-weight:bold;" | Baikal
 +
| style="padding:0.5cm;"                  | Uno por sistema
 +
| style="padding:0.5cm;"                  | Servidor de calendarios para su uso en diferentes entornos de nimitz
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  |
 +
|}
 +
</div>
 +
<br><br>
 +
<div style="
 +
   text-align:right;
 +
   margin-top:20px;
 +
   padding:8px;
 +
   border:1px solid #ccc;
 
   background-color:#f9f9f9;
 
   background-color:#f9f9f9;
 
   border-radius:6px;
 
   border-radius:6px;
 
   display:inline-block;
 
   display:inline-block;
 
">
 
">
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
+
[[File:flecha_verde.png|20px|link=#Niveles funcionales del software]][[#Niveles funcionales del software| Volver arriba]]
 
</div>
 
</div>
 
<div style="
 
<div style="
Línea 1447: Línea 1411:
 
   display:inline-block;
 
   display:inline-block;
 
">
 
">
[[File:casa.png|20px|link=#]][[# | Página Principal]]
+
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 
</div>
 
</div>
 
<br><br>
 
<br><br>
  
=== Matriz de conmutación ===
+
===== Nivel de Administración - Back-end =====
<br><br>
 
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
 
 
 
==== Modificaciones realizadas sobre Asterisk 13 certified 2 ====
 
 
<br><br>
 
<br><br>
 
+
Se compone principalmente de los siguientes elementos:
===== Archivos añadidos por '''MD'''tel =====
 
 
<br><br>
 
<br><br>
Los archivos añadidos son los siguientes:
+
: '''Servidor''': infraestructura donde se alojan las aplicaciones y servicios que exponen APIs (por ejemplo, aplicaciones Java desplegadas en servidores como Apache Tomcat).<br>
 
+
::Recibe peticiones web (HTTP), ejecuta el código Java de la aplicación y devuelve la respuesta al cliente (navegador, app, etc.).<br>
* '''apps/app_ucid.c'''
+
: • '''Clientes''': aplicaciones externas (front-end, apps móviles, otros sistemas) que consumen las APIs del back-end.
* '''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
 
 
 
===== Modificaciones de archivos =====
 
 
<br><br>
 
<br><br>
Los archivos modificados por '''MD'''tel son los mostrados a continuación:
+
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
 
+
|-
* '''apps/app_mixmonitor.c'''
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Elemento
* '''res/res_calendar_caldav.c'''
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Instancias
* '''contrib/scripts/safe_asterisk'''
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Propósito
* '''contrib/init.d/rc.debian.asterisk'''
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Producto
* '''channels/sig_pri.c'''
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Observaciones
* '''channels/chan_sip.c'''
+
|-
 
+
| style="padding:0.5cm; font-weight:bold;" | Tomcat11
 
+
| style="padding:0.5cm;"                  | Uno por sistema
'''→ main/audiohook.c''' <!--style="color:#0000ff" -->
+
| style="padding:0.5cm;"                  | Servidor de aplicaciones web Apache Tomcat especializado en ejecutar aplicaciones desarrolladas en Java.
 
+
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
'''audiohook.c''' ha sido modificado para solucionar un crash de asterisk al utilizar en el mixmonitor las opciónes r y t
+
| style="padding:0.5cm;"                  | Para proyectos especiales puede existir uno por contexto JAVA
 
+
|-
 
+
| style="padding:0.5cm; font-weight:bold;" | cargaClickToCall
 
+
| style="padding:0.5cm;"                   | Uno por sistema
'''→ app_crash.c '''
+
| style="padding:0.5cm;"                   | Inserción en BBDD de la tabla ACD_LISTAS_LLAMAME a través de los parámetros proporcionados
 
+
| style="padding:0.5cm;"                   | '''''VIVA'''''it Suite
Esta nueva aplicación es sólo compatible con '''Asterisk 13'''.
+
| style="padding:0.5cm;"                   | Se invoca desde el portal Vivait-Call
 
+
|-
La documentación de la misma se encuentra en el comando: '''"core show application Crash"'''
+
| style="padding:0.5cm; font-weight:bold;" | cargaContactos
 
+
| style="padding:0.5cm;"                  | Uno por sistema
Esta nueva aplicación ''permite añadir'' al plan de pruebas:
+
| style="padding:0.5cm;"                   | Inserción en BBDD de las tablas ACD_CONTACTOS y ACD_CONTACTOS_CAMPANNA a través de los parámetros proporcionados
 
+
| style="padding:0.5cm;"                   | '''''VIVA'''''it Suite
* Generación de una parada de asterisk. (Crash(IwantToGetAnAccessViolation) ó Crash(IwantToGetADoubleFreeMem))
+
| style="padding:0.5cm;"                   | Se invoca desde el portal Vivait-Call
* 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).
+
| style="padding:0.5cm; font-weight:bold;" | ChatWebService
 
+
| style="padding:0.5cm;"                  | Uno por sistema
'''Nota.-''' Esta aplicación no debería estar presente en una instalación de '''Asterisk 13'''
+
| style="padding:0.5cm;"                  | Interface entre el formulario de chat del VivaDesk y el servicio de chansip
 
+
| style="padding:0.5cm;"                   | '''''VIVA'''''it Suite
 
+
| style="padding:0.5cm;"                   | Servicio de multicanal texto
'''→ app_mdintz.c y mdintz.h''' <!--style="color:#0000ff" -->
 
 
 
Esta aplicación sirve como interfaz a entornos (funcionalidades) creados por MDtel
 
 
 
Para mas información consultar la página de [[MDintz|MDintz]].
 
 
 
Las rutas de estos archivos son las siguientes:
 
 
 
'''apps/app_mdintz.c''' <br/>
 
'''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<br /> '''"#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<br />
 
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''' <!--style="color:#0000ff" -->
 
 
 
* 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:
 
 
 
{|style="background-color:#ffffcc;" class="wikitable"
 
 
|-
 
|-
 +
| style="padding:0.5cm; font-weight:bold;" | GeneraConf
 +
| style="padding:0.5cm;"                  | Uno por sistema
 +
| style="padding:0.5cm;"                  | Sincroniza cambios en algunas tablas de la BBDD con ficheros Asterisk
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  | Se invoca desde el portal Vivait-Call
 
|-
 
|-
| SAFE_ASTEISK=/usr/sbin/safe_asterisk <br/>
+
| style="padding:0.5cm; font-weight:bold;" | generaLlamada
if [ -x $SAFE_ASTERISK ] ; then<br/>
+
| style="padding:0.5cm;"                  | Uno por sistema
:# //!! wkw<br/>
+
| style="padding:0.5cm;"                  | Generación de una llamada telefónica a partir de la invocación al servicio
:DAEMON=$SAFE_ASTERISK<br/>
+
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
fi
+
| style="padding:0.5cm;"                   | Creación de un archivo de llamada Asterisk y puesta en la carpeta outgoing
|}
 
 
 
 
 
<!--archivo-->
 
 
 
'''→ 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:
 
 
 
{|style="background-color:#ffffcc;" class="wikitable"
 
 
|-
 
|-
 +
| style="padding:0.5cm; font-weight:bold;" | InfoWS
 +
| style="padding:0.5cm;"                  | Uno por sistema
 +
| style="padding:0.5cm;"                  | Proporciona información de llamadas de la BBDD y gestiona  grabaciones
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  | La información de las llamadas puede ser de DBTR o DBHIST.<br>
 +
Inicia/finaliza grabaciones y mediante un script se trasladan los archivos de grabación a un directorio de ficheros específico
 
|-
 
|-
| AST_USER="asterisk"
+
| style="padding:0.5cm; font-weight:bold;" | Vivait-FonBO
AST_GROUP="asterisk"
+
| style="padding:0.5cm;"                   | Uno por sistema
 
+
| style="padding:0.5cm;"                  | Proporciona información de la agenda e histórico de llamadas
COREDUMP=yes
+
| style="padding:0.5cm;"                   | '''''VIVA'''''it Call
|}
+
| style="padding:0.5cm;"                  | Invocado por los portales vivait-user y webfon2
 
 
===== 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]''' <br />
 
- CLI(nomArchSal,cmd)<br />
 
- Si 'nomArchSal' está vacio, se usa '/dev/null' y no se recupera resultado<br />
 
- Si 'nomArchSal'=TEMP, Se crea un archivo temporal que se borra al final<br />
 
- En otro caso, se crea el archivo y no se borra
 
 
 
'''[Syntax]'''<br />
 
CLI(nomArchSal,cmd)
 
 
 
'''[Arguments]'''<br />
 
'''nomArchSal'''
 
    Archivo de salida (si se omite, /dev/null)
 
'''cmd'''
 
    Comando a ejecutar via CLI
 
 
 
==== 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:
 
 
 
{| class="wikitable"
 
 
|-
 
|-
! '''Regla''' !! '''Descripción'''
+
| style="padding:0.5cm; font-weight:bold;" | Vivait-Supervisor
 +
| style="padding:0.5cm;"                  | Uno por sistema
 +
| style="padding:0.5cm;"                  | Obtiene información de la BBDD y ejecuta acciones en el entorno corporativo.
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 +
| style="padding:0.5cm;"                  | Se invoca desde el portal Vivait-Supervisor
 
|-
 
|-
| '''X''' || Cualquier cifra de 0 a 9
+
| style="padding:0.5cm; font-weight:bold;" | Tracker-Rest
 +
| style="padding:0.5cm;"                  | Uno por sistema
 +
| style="padding:0.5cm;"                  | Proporciona información de las llamadas corporativas y los ficheros de audio de las posibles grabaciones asociadas
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call
 +
| style="padding:0.5cm;"                  | Se invoca desde el portal Tracker-Corp
 
|-
 
|-
|'''Z'''||Cualquier cifra de 1 a 9
+
| style="padding:0.5cm; font-weight:bold;" | Vivait-Tracker
 +
| style="padding:0.5cm;"                  | Uno por sistema
 +
| style="padding:0.5cm;"                  | Proporciona información de las llamadas y los ficheros de audio de las posibles grabaciones asociadas.<br>
 +
Permite valorar las llamadas
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  | Se invoca desde el portal Vivait-Tracker
 
|-
 
|-
|'''N'''||Cualquier cifra de 2 a 9
+
| style="padding:0.5cm; font-weight:bold;" | Vivait-Call
|-
+
| style="padding:0.5cm;"                  | Uno por sistema
|'''[x-y]'''||Cualquier cifra de "x" a "y"
+
| style="padding:0.5cm;"                   | Gestiona DBTR. Lee, crea, borra y actualiza los registros en las tablas de nimitz
|-
+
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
|'''[xyz]'''|| Las cifras "x", "y" o "z"
+
| style="padding:0.5cm;"                  | Se invoca desde el portal Vivait-Call
|-
 
|'''.'''||Una o más repeticiones del símbolo anterior
 
|-
 
|'''!'''||Cero o más repeticiones del símbolo anterior
 
 
|}
 
|}
 +
</div>
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Niveles funcionales del software]][[#Niveles funcionales del software| Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
Estas reglas son necesarias a la hora de definir por ejemplo todos los números de teléfono posibles en España
+
==== Nivel de Monitorización ====
 
+
<br><br>
♦ '''PRIORIDADES'''
+
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
 
 
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'''
 
 
 
{| class="wikitable"
 
 
|-
 
|-
! '''Fichero''' !! '''Función'''
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Elemento
 +
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Instancias
 +
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Propósito
 +
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Producto
 +
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Observaciones
 
|-
 
|-
| '''Generales''' || Se encuentran los ficheros de propios de MDtel y Asterisk. Es importante remarcar que estos ficheros NO pueden ser modificados por el usuario.
+
| style="padding:0.5cm; font-weight:bold;" | Servidor Zabbix
 +
| style="padding:0.5cm;"                  | Uno por sistema
 +
| style="padding:0.5cm;"                  | Monitoriza el estado y el rendimiento del sistema en tiempo real
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  | Bajo proyecto puede existir más de uno. Típicamente irá o en BBDD replica o en nodo de gestión en instalaciones grandes
 
|-
 
|-
|'''Particular'''||Estos ficheros son los únicos que puede modificar el usuario
+
| style="padding:0.5cm; font-weight:bold;" | Template Zabbix
 +
| style="padding:0.5cm;"                  | Uno por sistema
 +
| style="padding:0.5cm;"                  | Define qué se va a monitorizar y cómo hacerlo de forma reutilizable
 +
| style="padding:0.5cm;"                  | '''''VIVA'''''it Suite
 +
| style="padding:0.5cm;"                  |  
 
|-
 
|-
|'''Web'''|| Se encierran aquí los archivos generados automáticamente por la plataforma, a través del portal
+
| style="padding:0.5cm; font-weight:bold;" | Agente Zabbix
|}
+
| style="padding:0.5cm;"                  | Uno por sistema a monitorizar
 
+
| style="padding:0.5cm;"                  | Componente que se instala en los equipos que se quieres monitorizar para recoger información directamente del sistema
En función del nodo en el que estemos trabajando, encontraremos dos tipos de dialplan:
+
| style="padding:0.5cm;"                   | '''''VIVA'''''it Suite
 
+
| style="padding:0.5cm;"                  |  
'''* 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.
 
 
 
{| border="1" align="center" bgcolor="FloralWhite"
 
|+ '''Ficheros de configuración Dialplan Corporativo'''
 
| '''GENERALES'''
 
| '''PARTICULARES'''
 
| '''WEB'''
 
 
|-
 
|-
| ext_Grabaciones.conf <br />ext_InicioLlamada.conf <br /> ext_InicioLlamada_Dahdi.conf <br />ext_InicioLlamada_ExtSIP.conf <br/>ext_InicioLlamada_TrunkSIP.conf <br />ext_MARCAR_ColaCentralita.conf <br /> ext_MARCAR_ColaCentralita_Dial.conf<br /> ext_MARCAR_Cola.conf <br />ext_MARCAR_Cola_Dial.conf<br />ext_MARCAR.conf  <br /> ext_MARCAR_DejarMensaje.conf <br /> ext_MARCAR_DejarMensaje_Dial.conf <br />ext_MARCAR_Extension.conf<br />ext_MARCAR_Extension_Dial.conf <br />ext_MARCAR_Externo.conf <br />ext_MARCAR_Externo_Dial.conf <br />ext_MARCAR_Facilidad.conf <br />ext_MARCAR_Facilidad_Dial.conf <br />ext_MARCAR_Facilidad_nimitz.conf<br />ext_MARCAR_Interno.conf <br />ext_MARCAR_LeerMensaje.conf <br />ext_MARCAR_LeerMensaje_Dial.conf<br />ext_MARCAR_Nodo.conf<br />ext_MARCAR_Nodo_Dial.conf <br />ext_MARCAR_SalasConf.conf <br />ext_MARCAR_SalasConf_Dial.conf <br />ext_MARCAR_Servicios.conf <br />ext_MARCAR_VDN.conf <br />MARCAR_VDN_Dial.conf<br />ext_MDtel.conf <br />ext_MDtel_Var.conf <br />ext_Subrutinas_AnchoBanda.conf <br />ext_Subrutinas_BD.conf <br />ext_Subrutinas_BD_Facilidad.conf <br />ext_Subrutinas_BD_Facilidad.conf <br /> ext_Subrutinas_Colas.conf <br />ext_Subrutinas.conf <br />ext_Subrutinas_Enrutamiento.conf <br />ext_Subrutinas_finLlamada.conf<br />ext_Subrutinas_Grabacion.conf<br />ext_Subrutinas_nimitz.conf<br />ext_Subrutinas_Varias.conf<br />ext_Subscribe.conf<br />ext_Transfer.conf <br />ext_Transfer_ExtSIP.conf<br />ext_Transfer_TrunkInternos.conf <br />ext_TrunkInternos.conf<br />ext_TrunkInternos_Dial.conf <br />sip_Estatico.conf<br /> sip_GENCUST.conf <br />sip_notify.conf <br />queues.conf <br /> queues_GENERAL.conf <br />queues_PLANTILLACOLAS.conf<br />
+
| style="padding:0.5cm; font-weight:bold;" | Script monitorización Zabbix
 
+
| style="padding:0.5cm;"                  | Uno por sistema
| ext_Enrutador_Particular.conf<br /> ext_InicioLlamada_Dahdi_Particular.conf<br />ext_InicioLlamada_ExtSIP_Particular.conf<br />ext_InicioLlamada_Particular.conf <br />ext_InicioLlamada_TrunkSIP_Particular.conf<br />ext_MARCAR_Extension_Particular.conf <br />ext_MARCAR_Externo_Particular.conf <br/> ext_MARCAR_Facilidad_Particular.conf<br /> ext_MARCAR_VDN_Particular.conf <br />ext_MDtel_Particular.conf <br/> ext_TrunkInternos_Particular.conf <br/>
+
| style="padding:0.5cm;"                   | Amplia lo que el sistema puede vigilar, especialmente cuando algo no se puede medir con las opciones estándar
 
+
| style="padding:0.5cm;"                   | '''''VIVA'''''it Call / '''''VIVA'''''it Suite
|asterisk_WEB.conf <br /> ext_MDtel_WEB.conf <br /> sip_trunkExt_WEB.conf <br />sip_trunkInt_WEB.conf <br />sip_trunk_WEB.conf <br /> sip_WEB.conf <br /> queues_WEB.conf
+
| style="padding:0.5cm;"                  |  
|}
 
 
 
 
 
{| border="1" align="center" bgcolor="FloralWhite"
 
|+ '''Ficheros de configuración Dialplan ACD'''
 
| '''GENERALES'''
 
| '''PARTICULARES'''
 
| '''WEB'''
 
|-
 
| ext_Enrutador.conf<br />ext_Grabaciones.conf <br /> ext_InicioLlamada.conf <br /> ext_InicioLlamada_CTI.conf <br />ext_InicioLlamada_Dahdi.conf <br />ext_InicioLlamada_ExtSIP.conf <br />ext_InicioLlamada_Marcador.conf <br />ext_InicioLlamada_TrunkSIP.conf <br />ext_MARCAR_ColaCentralita.conf <br />ext_MARCAR_ColaCentralita_Dial.conf<br />ext_MARCAR_Cola.conf <br />ext_MARCAR_Cola_Dial.conf <br />ext_MARCAR.conf <br />ext_MARCAR_DejarMensaje.conf <br />ext_MARCAR_DejarMensaje_Dial.conf <br />ext_MARCAR_Extension.conf <br />ext_MARCAR_Extension_Dial.conf <br />ext_MARCAR_Externo.conf <br />ext_MARCAR_Externo_Dial.conf <br />ext_MARCAR_Facilidad.conf <br />ext_MARCAR_Facilidad_Dial.conf <br />ext_MARCAR_Facilidad_nimitz.conf<br />ext_MARCAR_LeerMensaje.conf <br />ext_MARCAR_LeerMensaje_Dial.conf <br />ext_MARCAR_Nodo.conf <br />ext_MARCAR_Nodo_Dial.conf <br />ext_MARCAR_SalasConf.conf <br />ext_MARCAR_SalasConf_Dial.conf<br />ext_MARCAR_Servicios.conf <br />ext_MARCAR_VDN.conf <br />ext_MARCAR_VDN_Dial.conf<br />ext_MDtel.conf <br />ext_MDtel_Var.conf <br />ext_Subrutinas_AnchoBanda.conf <br />ext_Subrutinas_BD.conf <br />ext_Subrutinas_BD_Facilidad.conf <br /> ext_Subrutinas_Colas.conf <br />ext_Subrutinas.conf <br />ext_Subrutinas_Enrutamiento.conf <br /> ext_Subrutinas_finLlamada.conf<br />ext_Subrutinas_Grabacion.conf <br />ext_Subrutinas_nimitz.conf<br />ext_Subrutinas_Varias.conf <br />ext_Subscribe.conf<br />ext_Transfer.conf <br />ext_Transfer_ExtSIP.conf<br />ext_Transfer_TrunkInternos.conf <br />ext_TrunkInternos.conf <br />ext_TrunkInternos_Dial.conf <br />queues_GENERAL.conf<br />queues_PLANTILLACOLAS.conf <br />sip_GENCUST.conf <br />sip_GENERAL.conf <br />sip_notify.conf <br />sip_PLANTILLAEXT.conf<br />sip_supervision.conf <br />
 
 
 
 
 
 
 
| ext_Enrutador_Particular.conf <br />ext_InicioLlamada_CTI_Particular.conf<br />ext_InicioLlamada_Dahdi_Particular.conf<br />ext_InicioLlamada_ExtSIP_Particular.conf<br />ext_InicioLlamada_Marcador_Particular.conf <br />ext_InicioLlamada_Particular.conf.<br />ext_InicioLlamada_TrunkSIP_Particular.conf<br />ext_MARCAR_Externo_Particular.conf<br />ext_MARCAR_Facilidad_Particular.conf<br />ext_MARCAR_VDN_Particular.conf<br /> ext_MDtel_Particular.conf<br />ext_TrunkInternos_Particular.conf<br />
 
 
 
|asterisk_WEB.conf <br /> ext_MDtel_WEB.conf <br />queues_WEB.conf<br /> sip_trunkInt_WEB.conf <br />sip_WEB.conf <br />
 
 
|}
 
|}
 +
</div>
 +
<br><br>
 +
Para más detalles, consultar el apartado [[#Monitorización en VIVAit | Monitorización en VIVAit]]
 
<br><br>
 
<br><br>
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
+
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Niveles funcionales del software]][[#Niveles funcionales del software| Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 
<br><br>
 
<br><br>
  
=== Servicios networking ===
+
===Versiones de módulos===
Son muy importantes las configuraciones adecuadas de los servicios de:
+
<br><br>
 
+
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
* '''NTP''': El sistema en global ha de estar sincronizado; todos los servidores y puestos de trabajo (en el caso de ''VIVA''it 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
+
|-
 
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Módulo
* '''DNS''': La configuración de DNS de la plataforma será coherente con el resto de la plataforma IT del cliente
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VSuite V.3.1
 
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VSuite V.3.2
* '''DHCP''': Es necesario coordinar con el cliente la asignación de direcciones para los diferentes elementos de la plataforma '''''VIVA'''''it, 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
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VSuite V.3.3
 
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VIVAit V.3.0 (VSuite 3.4 + VCall 3.0)
=== Bases de datos (BBDD)===
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VIVAit V.3.1 (VSuite 3.5 + VCall 3.1)
 
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VIVAit V.3.2 (VSuite 3.6 + VCall 3.2)
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.
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VIVAit V.3.4 (VSuite 3.8 + VCall 3.4)
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: [[Base de datos|Información completa de la BD]]. Podéis ampliar más información en https://dev.mysql.com/doc/
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VIVAit V.3.5 (VSuite 3.9 + VCall 3.5)
 
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VIVAit V.3.6 (VSuite 3.9 + VCall 3.6)
 
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VIVAit V.4.0 (VSuite 3.9 + VCall 4.0)
==== BBDD Tiempo Real ====
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VIVAit V.5.0 (VSuite 3.9 + VCall 5.0)
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 '''''VIVA'''''it Supervisor
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | VIVAit V.5.1 (VSuite 3.9 + VCall 5.1)
 
 
De la base de datos de tiempo real leen los procesos que requieren información, y las aplicaciones:
 
*'''''VIVA'''''it Supervisor (para reporting de tiempo real)
 
*PanelWeb
 
*Datos de sesión de '''''VIVA'''''it 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.'''
 
 
 
==== 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:
 
*'''''VIVA'''''it Reporting
 
*'''''VIVA'''''it Tracker
 
*Histórico en tiempo real de '''''VIVA'''''it Supervisor
 
 
 
 
 
'''IMPORTANTE: Ningún proceso, programa, aplicación, etc. escribe en la base de datos de réplica; tan solo se extrae información'''
 
 
 
==== 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.
 
 
 
===== 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".
 
 
 
==== Diagnósticos y operaciones sobre bases de datos ====
 
 
 
=====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:
 
[[Archivo:Base_Datos_bien.png‎ |500px|center]]
 
 
 
Por el contrario, si la base de datos presenta algun problema el mensaje mostrado será:
 
 
 
[[Archivo:Base_datos_mal.png |center]]
 
 
 
=====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:
 
 
 
[[Archivo:Replica.png |980px|center]]
 
 
 
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.
 
<br><br>
 
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0 Volver al índice]
 
<br><br>
 
 
 
=== 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:
 
 
 
[[BD.DAT_LOG]]
 
 
 
 
En la siguiente tabla se especifican algunos de los posibles valores de los campos, en función del valor de E_ACCION.
 
 
 
 
 
{| class="wikitable"
 
 
|-
 
|-
!E_ACCION Nº!!E_ACCION TAccionLog!!Descripción de la acción!! `C_TABLA` !! `ID_REGISTRO` !! `N_PAR1` !! `N_PAR2` !! `C_PAR3` !! `C_PAR4`
+
| style="padding:0.5cm; font-weight:bold;" | Año de lanzamiento
 +
| align=center style="padding:0.2cm";      | ----
 +
| align=center style="padding:0.2cm";      | ----
 +
| align=center style="padding:0.2cm";      | ----
 +
| align=center style="padding:0.2cm";      | 2015
 +
| align=center style="padding:0.2cm";      | 2016
 +
| align=center style="padding:0.2cm";      | 2018
 +
| align=center style="padding:0.2cm";      | 2020
 +
| align=center style="padding:0.2cm";      | 2021
 +
| align=center style="padding:0.2cm";      | 2022
 +
| align=center style="padding:0.2cm";      | 2023
 +
| align=center style="padding:0.2cm";      | 2025
 +
| align=center style="padding:0.2cm";      | 2026
 
|-
 
|-
|10||accionLog_escuchar_seg||Escuchar segmento|| || || || || ||  
+
| style="padding:0.5cm; font-weight:bold;" | Sistema Operativo
 +
| align=center style="padding:0.2cm;      | ----
 +
| align=center style="padding:0.2cm;      | ---- 
 +
| align=center style="padding:0.2cm;      | ----
 +
| align=center style="padding:0.2cm;      | Ubuntu 14.0 LTS
 +
| align=center style="padding:0.2cm;      | Ubuntu 14.0 LTS
 +
| align=center style="padding:0.2cm;      | Ubuntu 16.0 LTS 
 +
| align=center style="padding:0.2cm;      | Ubuntu 18.4 LTS
 +
| align=center style="padding:0.2cm;      | Ubuntu 20.4 LTS 
 +
| align=center style="padding:0.2cm;      | Ubuntu 20.4 LTS 
 +
| align=center style="padding:0.2cm;      | Ubuntu 20.4 LTS 
 +
| align=center style="padding:0.2cm;      | Ubuntu 22.4 LTS nodos ACD y Cisco<br>
 +
Debian 12 resto de nodos
 +
| align=center style="padding:0.2cm;      | Ubuntu 22.4 LTS nodos ACD y Cisco<br>
 +
Debian 13 resto de nodos
 
|-
 
|-
|20||accionLog_escuchar_lla||Escuchar llamada|| || || || || ||
+
| style="padding:0.5cm; font-weight:bold;" | MySQL (C)
 +
| align=center style="padding:0.2cm;      | ----
 +
| align=center style="padding:0.2cm;      | ---- 
 +
| align=center style="padding:0.2cm;      | ---- 
 +
| align=center style="padding:0.2cm;      | 5.5
 +
| align=center style="padding:0.2cm;      | 5.5 
 +
| align=center style="padding:0.2cm;      | 5.7 
 +
| align=center style="padding:0.2cm;      | 5.7
 +
| align=center style="padding:0.2cm;      | 8.0
 +
| align=center style="padding:0.2cm;      | 8.0
 +
| align=center style="padding:0.2cm;      | 8.0 
 +
| align=center style="padding:0.2cm;      | ----
 +
| align=center style="padding:0.2cm;      | ----
 
|-
 
|-
|30||accionLog_descargar_seg||Descargar segmento|| || || || || ||
+
| style="padding:0.5cm; font-weight:bold;" | Mariadb (C)
 +
| align=center style="padding:0.2cm;      | ----
 +
| align=center style="padding:0.2cm;      | ---- 
 +
| align=center style="padding:0.2cm;      | ---- 
 +
| align=center style="padding:0.2cm;      | ----
 +
| align=center style="padding:0.2cm;      | ---- 
 +
| align=center style="padding:0.2cm;      | ---- 
 +
| align=center style="padding:0.2cm;      | ----
 +
| align=center style="padding:0.2cm;      | ----
 +
| align=center style="padding:0.2cm;      | ----
 +
| align=center style="padding:0.2cm;      | ---- 
 +
| align=center style="padding:0.2cm;      | 10.11
 +
| align=center style="padding:0.2cm;      | 11.4
 
|-
 
|-
|40||accionLog_descargar_lla||Descargar llamada|| || || || || ||
+
| style="padding:0.5cm; font-weight:bold;" | Apache Tomcat (C) || ---- || ---- || ---- || ---- || 7 ||8 || 8 || 9 || 9 || 9 || 9 || 11
 
|-
 
|-
|50||accionLog_generar_config||Generar configuración|| || || || || ||
+
| style="padding:0.5cm; font-weight:bold;" | PHP (C) || ---- || ---- || ---- || 5.6 || 5.6 || 7.0 || 7.0 || 7.4 || 7.4 || 8.2 || 8.4 || 8.4
 
|-
 
|-
|60||accionLog_cambiar_clave_propia||Cambiar clave propia|| || || || || ||
+
| style="padding:0.5cm; font-weight:bold;" | OpenJDK (C) || ---- || ---- || ---- || ---- || 7.0 ||8.0 || 8.0 || 11.0 || 11.0 || 11.0 || 11.0 || 21.0
 
|-
 
|-
|65||accionLog_login_correcto||Login correcto||||idUsuario||nivelSupervisor|| ||
+
| style="padding:0.5cm; font-weight:bold;"  | Asterisk LTS '''(*)'''
 +
| align=center style="padding:0.2cm";        | 1.4  nodo ACD
 +
| align=center style="padding:0.2cm";        | 1.4  nodo ACD
 +
| align=center style="padding:0.2cm";        | 1.4  nodo ACD
 +
| align=center style="padding:0.2cm";        | 1.4  nodo ACD, <br>
 +
13 resto nodos
 +
| align=center style="padding:0.2cm";        | 1.4 nodo ACD, <br>
 +
13 resto nodos
 +
| align=center style="padding:0.2cm";        | 1.4 nodo ACD, <br>
 +
13 resto nodos 
 +
| align=center style="padding:0.2cm";        | 1.4 nodo ACD, <br>
 +
13 resto nodos 
 +
| align=center style="padding:0.2cm";        | 1.4 nodo ACD, <br>
 +
13 resto nodos
 +
| align=center style="padding:0.2cm";        | 1.4 nodo ACD, <br>
 +
13 resto nodos
 +
| align=center style="padding:0.2cm";        | 1.4 nodo ACD, <br>
 +
18 resto nodos
 +
| align=center style="padding:0.2cm";        | 1.4 nodo ACD, <br>
 +
18 resto nodos 
 +
| align=center style="padding:0.2cm";        | 1.4 nodo ACD, <br>
 +
18 resto nodos
 
|-
 
|-
|70||accionLog_login_erroneo||Login erroneo|| || || || || ||
+
| style="padding:0.5cm; font-weight:bold;" | Asterisk MDTel <br>
 +
nodo ACD (VS)
 +
| align=center style="padding:0.2cm";      | ----
 +
| align=center style="padding:0.2cm";      | ---- 
 +
| align=center style="padding:0.2cm";      | ---- 
 +
| align=center style="padding:0.2cm";      | 3.3.1
 +
| align=center style="padding:0.2cm";      | 3.4.1
 +
| align=center style="padding:0.2cm";      | 3,5,0
 +
| align=center style="padding:0.2cm";      | 3.5.3
 +
| align=center style="padding:0.2cm";      | 3.5.4
 +
| align=center style="padding:0.2cm";      | 3.5.5
 +
| align=center style="padding:0.2cm";      | 3.5.5
 +
| align=center style="padding:0.2cm";      | 3.5.5
 +
| align=center style="padding:0.2cm";      | 3.5.5
 
|-
 
|-
|80||accionLog_login_multiple||Login multiple|| || || || || ||
+
| style="padding:0.5cm; font-weight:bold;" | Asterisk MDTel <br>
 +
nodo Corp Cisco (VC)
 +
| align=center style="padding:0.2cm";      | ----
 +
| align=center style="padding:0.2cm";      | ----
 +
| align=center style="padding:0.2cm";      | ---- 
 +
| align=center style="padding:0.2cm";      | 3.3.4
 +
| align=center style="padding:0.2cm";      | 3.4.4
 +
| align=center style="padding:0.2cm";      | 3.5.1
 +
| align=center style="padding:0.2cm";      | 3.5.4
 +
| align=center style="padding:0.2cm";      | 3.5.4
 +
| align=center style="padding:0.2cm";      | 3.5.4
 +
| align=center style="padding:0.2cm";      | 3.5.4
 +
| align=center style="padding:0.2cm";      | 3.5.4
 +
| align=center style="padding:0.2cm";      | 3.5.4
 
|-
 
|-
|90||accionLog_escuchar_ext||Escuchar Extensión|| || || || || ||
+
| style="padding:0.5cm; font-weight:bold;" | Asterisk MDTel <br>
 +
nodo Corp / GW (VC)
 +
| align=center style="padding:0.2cm";      | ----
 +
| align=center style="padding:0.2cm";      | ----
 +
| align=center style="padding:0.2cm";      | ---- 
 +
| align=center style="padding:0.2cm";      | 3.3.4
 +
| align=center style="padding:0.2cm";      | 3.4.4
 +
| align=center style="padding:0.2cm";      | 3.5.1
 +
| align=center style="padding:0.2cm";      | 3.5.4
 +
| align=center style="padding:0.2cm";      | 3.5.5
 +
| align=center style="padding:0.2cm";      | 3.5.6
 +
| align=center style="padding:0.2cm";      | 3.5.6
 +
| align=center style="padding:0.2cm";      | 3.6.0
 +
| align=center style="padding:0.2cm";      | 3.7.0
 
|-
 
|-
|100||accionLog_chg_objetivo_peso||Modificar nivel servicio|| ||idCola||objetivo||peso|| ||
+
| style="padding:0.5cm; font-weight:bold;" | BD (C)||3.2.0||3.4.0||3.5.0||3.6.0||3.8.0||3.9.0||3.11.0 || 3.11.1 || 3.11.2 || 3.11.3 || 3.20.0  || 3.30
 
|-
 
|-
|105||accionLog_add_agente_cola_bd||Añadir agente a grupo BD|| ||idCola||agente||prioridad||obligatorio||  
+
| style="padding:0.5cm; font-weight:bold;" | CargaContactos (VS)|| || || || || || ||3.8.0 || 3.8.0 || 3.8.0 || 3.8.0  ||  3.8.0  || 3.8.0
 
|-
 
|-
|115||accionLog_del_agente_cola_bd||Quitar agente de grupo BD|| ||idCola||agente|| ||
+
| style="padding:0.5cm; font-weight:bold;" | Dialplan ACD (VS)|| || || || ||3.5.0||3.6.0||3.8.1 || 3.8.2 || 3.8.3 || 3.8.4 || 3.9.0  || 3.10.0
 
|-
 
|-
|125||accionLog_prio_agente_cola_bd||Modificar prioridad agente en grupo BD|| ||idCola||agente||prioridad||obligatorio||  
+
| style="padding:0.5cm; font-weight:bold;" | Dialplan Corp (C)|| || || ||3.3.1||3.5.0||3.6.0||3.8.1 || 3.8.2 || 3.8.3 || 3.8.4 || 3.9.0  || 3.10.0
 
|-
 
|-
|135||accionLog_perfil_agente_bd||Asignar perfil a agente BD|| ||idAgente||perfil||   ||||
+
| style="padding:0.5cm; font-weight:bold;" | Generaconf (C)||3.0.0||3.0.0||3.2.0||3.4.0||3.5.0||3.6.0||3.8.0 || 3.8.1 || 3.8.2 || 3.8.3 || 3.9.0  || 3.9.3
 
|-
 
|-
|140||accionLog_add_agente||Añadrid agente|| || ||   || || ||  
+
| style="padding:0.5cm; font-weight:bold;" | Instalador (C)||3.1.0||3.2.0||3.3.0||3.4.0||3.5.0||3.6.0||3.8.0 || 3.9.0 || 3.10.0 || 3.11.0  || 3.20 || 3.20
 
|-
 
|-
|145||accionLog_del_agente||Borrar agente|| || ||   || || ||
+
| style="padding:0.5cm; font-weight:bold;" | Intz-gh (VC)|| || || || || ||0.1.0||0.1.1 || 0.1.2 || 0.1.3 || 0.1.4 || 0.1.5  || 0.1.7
 +
|-
 +
| style="padding:0.5cm; font-weight:bold;" | Intz-nimitz (C)||2.6.0||3.0.1||3.0.3||3.4.1||3.4.2||3.4.4||3.5.0 || 3.7.1 || 3.08 || 4.0.0 || 4.0.1  || 4.0.3
 +
|-
 +
| style="padding:0.5cm; font-weight:bold;" | Intz-tap (C)|| || || || || || || || || || || || 0.1.0
 
|-
 
|-
|150||accionLog_chg_agente||Modificar agente|| ||idAgente|| || ||nombre||cuenta
+
| style="padding:0.5cm; font-weight:bold;" | Janus WebRTC Server (VC) || --- || --- || --- || --- || --- || --- || --- || 0.8.0 || 0.8.0 || 0.8.0  || 0.10.10 || 0.10.10
 
|-
 
|-
|155||accionLog_add_agenda_perfil||Añadir agenda a perfil|| ||idPerfil||idAgenda||  || ||
+
| style="padding:0.5cm; font-weight:bold;" | LazarusComún (VS)||3.1.0||3.2.0||3.3.0||3.4.0||3.5.0||3.6.0||3.6.1 || 3.6.2 || 3.6.3 || 3.6.4 || ||
 +
|-
 +
| style="padding:0.5cm; font-weight:bold;" | Mcan (VS) || --- ||---||---||---||---||---||--- || 0.1.5 || 0.1.5 || ---   || ---  || ---
 
|-
 
|-
|160||accionLog_del_agenda_perfil||Borrar agenda de perfil|| ||idPerfil||idAgenda||   || ||
+
| style="padding:0.5cm; font-weight:bold;" | MotorPredi (VS)||---||---||---||---||---||---||0.1.1 || 0.1.1 || 0.1.1 || ---- || ----  || ----
 
|-
 
|-
|165||accionLog_add_entrada_agenda||Añadir entrada a agenda|| || ||idAgenda|| ||nombre||numero
+
| style="padding:0.5cm; font-weight:bold;" | Motorsal (VS)||1.4.0||3.1.0||3.2.0||3.3.0||3.4.0||3.5.3||3.6.1 || 3.6.1 || 3.6.3 || 3.6.4 || ||
 
|-
 
|-
|170||accionLog_del_entrada_agenda||Borrar entrada de agenda|| ||idEntrada||idAgenda|| ||nombre||numero
+
| style="padding:0.5cm; font-weight:bold;" | Multimonitorweb (VS)||3.0.1||3.0.2||3.1.0||3.1.0||3.2.0||3.2.0||3.4.1 || 3.4.1 || 3.4.3 || 3.4.4 || ||
 
|-
 
|-
|175||accionLog_chg_entrada_agenda||Modificar entrada de agenda|| ||idEntradaAgenda|| || ||nombre||numero
+
| style="padding:0.5cm; font-weight:bold;" | MyACDSuperv (VS)||5.2.0||5.3.0||5.3.0||5.3.2||5.3.2||5.3.3||6.0.1 || 6.0.3 || 6.0.4 || 6.0.5 || ||
 
|-
 
|-
|180||accionLog_add_agenda||Añadir agenda|| || || || ||nombre||descripción
+
| style="padding:0.5cm; font-weight:bold;" | Phone_prov (C)||------||------||3.0.1||3.0.3||3.0.3||3.0.3||3.0.4 || 3.0.4 || 3.0.4 || 3.0.4  || 3.0.5 || 3.0.5
 +
|-
 +
| style="padding:0.5cm; font-weight:bold;" | Portal de administración (C)|| 3.1.0 || 3.2.0 || 3.3.0 || 3.4.0 || 3.5.0 || 3.6.0 || 3.8.0 || 3.8.3 || 3.8.5 || 3.8.6 || 4.1.2 || 4.1.3
 
|-
 
|-
|185||accionLog_del_agenda||Borrar agenda|| || ||   || || ||
+
| style="padding:0.5cm; font-weight:bold;" | Portal usuario (VC) || --- || --- || --- || 3.0.0 || 3.1.0 || 4.0.0 || 4.1.0 || 4.1.0 || 4.1.1 || 4.1.2 || ----  || ----
 
|-
 
|-
|190||accionLog_chg_agenda||Modificar agenda|| ||idAgenda|| || ||nombre||descripción
+
| style="padding:0.5cm; font-weight:bold;" | Nuevo portal usuario (VC) || --- || --- || --- || --- || --- || --- || --- || 1.0.0 || 1.0.1 || 1.0.2 || 2.0.10  || 2.3.1
 
|-
 
|-
|195||accionLog_add_etiqueta_agente||Añadir etiqueta agente|| || || || ||nombre||descripción
+
| style="padding:0.5cm; font-weight:bold;" | Portal webfon (VC) || --- || --- || --- || --- || --- || --- || --- || 1.0.0 || 1.0.1 || 1.0.2 || 2.0.10  || 2.3.1
 
|-
 
|-
|200||accionLog_del_etiqueta_agente||Borrar etiqueta agente|| ||idEtiqueta|| ||   || ||
+
| style="padding:0.5cm; font-weight:bold;" | FonBo (VC) ||------||------||------||-----||-----||-----||-----|| 1.0.0 || 1.0.1 || 1.0.1 || 1.0.1 || 2.0.5
 +
|-
 +
| style="padding:0.5cm; font-weight:bold;" | Preview (VS)||1.0.18||3.2.0||3.3.0||3.4.0||3.5.0||3.5.0||---||--- ||--- ||--- ||----||----
 
|-
 
|-
|205||accionLog_chg_etiqueta_agente||Modificar etiqueta agente|| ||idEtiqueta|| || ||nombre||descripción
+
| style="padding:0.5cm; font-weight:bold;" | recordCentral (C)||-----||-----||-----||4.0.0||4.0.1||4.0.2||4.0.3||4.0.3||4.0.3 ||4.0.4 || 4.0.4 || 4.0.4
 
|-
 
|-
|210||accionLog_add_rel_etiqueta_agente||Añadir relación etiqueta agente|| ||idEtiqueta|| idUsuario||   || ||
+
| style="padding:0.5cm; font-weight:bold;" | recordgwd (C)||1.3.0||1.3.0||3.1.0||-----||-----||----||----||---- ||---- ||---- ||----  || ----
 
|-
 
|-
|215||accionLog_del_rel_etiqueta_agente||Borrar relación etiqueta agente|| ||idEtiqueta|| idUsuario||   || ||
+
| style="padding:0.5cm; font-weight:bold;" | recordNodo (C)||-----||-----||-----||4.0.0||4.0.0||4.0.0||4.0.3||4.0.3||4.0.3 ||4.0.3 ||4.0.3
 
|-
 
|-
|220||accionLog_chg_rel_etiqueta_agente||Modificar relación etiqueta agente|| ||idEtiqueta|| idUsuario||   || ||
+
| style="padding:0.5cm; font-weight:bold;" | recordprocesad (C) ||1.2.0||1.2.0||3.0.0||-----||-----||----||----||---- ||---- ||---- ||----  || ----
 
|-
 
|-
|225||accionLog_add_perfil||Añadir perfil|| || || ||   ||nombre||descripción
+
| style="padding:0.5cm; font-weight:bold;" | Sercen (C) || || || || || || |||| || 0.03.01 || 0.03.|| 0.03.05  || 0.4.2
 +
|-
 +
| style="padding:0.5cm; font-weight:bold;" | Supervisor Web (VS)|| || || || || || ||1.0.0||1.0.0 ||1.1.0 ||1.1.1 ||1.2.0  || 2.0.2
 
|-
 
|-
|230||accionLog_del_perfil||Borrar perfil|| ||idPerfil|| ||   || ||
+
| style="padding:0.5cm; font-weight:bold;" | Tracker Web (C) ||3.0.2||3.1.0||3.2.0||3.3.0||3.4.0||3.5.0||3.7.0||3.7.1||3.7.3 ||3.7.8  ||3.8.0  ||  
 
|-
 
|-
|235||accionLog_chg_perfil||Modificar perfil|| ||idPerfil|| || ||nombre||descripción
+
| style="padding:0.5cm; font-weight:bold;" | Tracker Corporativo (C) || ---- || ---- || ---- || ---- || ---- || ---- || ---- || ---- || ---- || ---- || ---- || 0.1.0
 
|-
 
|-
|240||accionLog_add_rel_cola_perfil_bd||Añadir relación grupo ACD/perfil BD|| ||idCola|| idPerfil||prioridad||obligatorio||  
+
| style="padding:0.5cm; font-weight:bold;" | Tracker windows (C) || 3.0.0 || 3.1.0 || 3.2.0 || 3.3.0 || 3.4.0 || 3.4.0 || ---- || ---- || ---- || ---- || ----  || ----
 
|-
 
|-
|250||accionLog_del_rel_cola_perfil_bd||Borrar relación grupo ACD/perfil BD|| ||idCola|| idPerfil||prioridad||obligatorio||  
+
| style="padding:0.5cm; font-weight:bold;" | VIVA designer (VS) || 1.0.23 || 3.0.1 || 3.1.0 || 3.1.0 || 3.2.0 || 3.2.0 || ----|| ---- || ---- || ---- || ----  || ----
 
|-
 
|-
|260||accionLog_chg_rel_cola_perfil_bd||Modificar relación grupo ACD/perfil BD|| ||idCola|| idPerfil||prioridad||obligatorio||  
+
| style="padding:0.5cm; font-weight:bold;" | VIVA desk (VS) || 3.0.2 || 3.2.0 || 3.3.0 || 3.4.0 || 3.5.0 || 3.5.2 || 3.5.3 || 3.6.1 || 3.6.6 || 3.6.6 || 3.6.6 ||  
 
|-
 
|-
|265||accionLog_add_cola||Añadir grupo ACD|| || || || ||nombre||descripción
+
| style="padding:0.5cm; font-weight:bold;" | VIVAit Call Business IOS (VC) ||---||---||---||---||---||---||--- || --- || --- || --- || 2.1.6  || 3.17.3
 
|-
 
|-
|270||accionLog_del_cola||Borrar grupo ACD|| || || || ||   ||
+
| style="padding:0.5cm; font-weight:bold;" | VIVAit Call Business Androit (VC) ||---||---||---||---||---||---||--- || --- || --- || --- || 2.1.6  || 3.0.17
 
|-
 
|-
|275||accionLog_chg_cola||Modificar grupo ACD|| ||idAgente|| || ||nombre||descripción
+
| style="padding:0.5cm; font-weight:bold;" | VIVAit Call Celullar ||---||---||---||---||---||---||--- || --- || --- || --- ||  || 1.0.1
 
|-
 
|-
|280||accionLog_add_campanna_cola_bd||Añadir campaña a grupo ACD BD|| ||idCola||idCampanna||   || ||
+
| style="padding:0.5cm; font-weight:bold;" | VIVAit Call Cloud (VC) ||---||---||---||---||---||---||--- || --- || --- || --- || ---  || ----
 
|-
 
|-
|285||accionLog_del_campanna_cola_bd||Borrar campaña de grupo ACD BD|| || ||   || || ||
+
| style="padding:0.5cm; font-weight:bold;" | VIVA report (VS)||1.2.0||3.1.0||3.2.0||3.2.2||3.3.0||3.4.1||3.5.1||3.5.2||3.5.3 ||3.5.4 ||  ||
 
|-
 
|-
|290||accionLog_chg_cola_algor_predic||Cambiar algoritmo predictivo de grupo ACD|| || || || || ||
+
| style="padding:0.5cm; font-weight:bold;" | VIVA supervisor (VS)||3.0.0||3.1.0||3.2.0||3.3.0||3.4.0||3.6.1||3.8.0||3.8.1 ||3.8.2 ||3.8.3 || ||
 
|-
 
|-
|300||accionLog_enviar_msj||Enviar mensaje ||tipo_msj||ambito||id_ambito||N_VAR1||N_VAR2||C_VAR3
+
| style="padding:0.5cm; font-weight:bold;" | vivait-cti (VS) || 3.0.0 || 3.0.1 || 3.0.1 || 3.0.1 || 3.0.2 || 3.0.2 || 4.0.1 || 4.0.1 || 4.0.1 || 4.0.1 || 4.0.1 || 4.0.1
 
|-
 
|-
|305||accionLog_cerrar_sesion||Cerrar sesión|| ||idUsuario||forzado||segundos||fecha||motivo
+
| style="padding:0.5cm; font-weight:bold;" | WebRTC (VC)||-----||-----||-----||-----||-----||-----||-----||0.0.1 ||0.0.6 ||0.0.7 ||0.0.9 || 0.0.10
 
|-
 
|-
|310||accionLog_activa_campanna_bd||Activar campaña|| ||idCampanna||activa|| ||   ||
+
| style="padding:0.5cm; font-weight:bold;" | Vivait-direc (VC) ||-----||-----||-----||-----||-----||-----||-----|| ----- || ----- || ----- || ----- || 0.0.8
 
|-
 
|-
|320||accionLog_grabacion_sombra||Grabación en la sombra|| || ||  || || ||
+
|}
|-
+
<br><br>
|330||accionLog_add_filtro_contactos|| || || ||  || || ||
+
La distribución de los módulos software por tipo de nodo se documentan en los procesos de instalación.<br>
|-
+
Se puede consultar un ejemplo de un entrorno virualizado en el siguiente enlace [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manuales_de_instalaci%C3%B3n#Tipos_de_m.C3.A1quinas_virtuales  Instalación VIVAit 3.5]
|335||accionLog_del_filtro_contactos|| || || ||  || || ||
+
<br><br>
|-
+
'''(C)''': Módulo común
|340||accionLog_chg_filtro_contactos|| || || ||  || || ||
+
<br><br>
|-
+
'''(VC)''': Módulo de VIVAit Call
|350||accionLog_add_val_filtro_contactos|| || || ||  || || ||
+
<br><br>
|-
+
'''(VS)''': Módulo de VIVAit Suite
|355||accionLog_del_val_filtro_contactos|| || || ||   || || ||
+
<br><br>
|-
+
'''(*)''' La información sobre las versiones disponibles de Asterisk se puede encontrar en [https://wiki.asterisk.org/wiki/display/AST/Asterisk+Versions Versiones de Asterisk ]
|400||accionLog_activar_contactos|| || ||idCampanna|| ||  || ||
+
<br><br>
|-
+
<div style="
|405||accionLog_cancelar_contactos|| || ||idCampanna|| ||   || ||
+
  text-align:right;
|-
+
  margin-top:20px;
|410||accionLog_orden_contactos|| || ||idCampanna|| ||  || ||
+
  padding:8px;
|-
+
  border:1px solid #ccc;
|415||accionLog_prioridad_contactos|| || ||idCampanna|| || || ||
+
  background-color:#f9f9f9;
|-
+
   border-radius:6px;
!colspan="9"|ACCIÓN LOGS PORTAL: Faltan añadir en la BD (Datos versión) y Revisar si ya existen. Poner los parámetros
+
  display:inline-block;
|-
+
">
|5310||accionLog_chg_acd_configuracion|| || || || || || ||
+
[[File:flecha_verde.png|20px|link=#Versiones de módulos]][[#Versiones de módulos| Volver arriba]]
|-
+
</div>
|5315||accionLog_add_acd_finales|| || || || || || ||
+
<div style="
|-
+
   text-align:right;
|5320||accionLog_chg_acd_finales|| || || || || || ||
+
  margin-top:20px;
|-
+
  padding:8px;
|5325||accionLog_del_acd_finales|| || || || || || ||
+
  border:1px solid #ccc;
|-
+
  background-color:#f9f9f9;
|5330||accionLog_add_acd_formularios|| || || || || || ||
+
   border-radius:6px;
|-
+
  display:inline-block;
|5335||accionLog_chg_acd_formularios|| || || || || || ||
+
">
|-
+
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
|5340||accionLog_del_acd_formularios||||||||||||||
+
</div>
|-
+
<div style="
|5345||accionLog_add_acd_pausas|| || || || || || ||
+
  text-align:right;
|-
+
  margin-top:20px;
|5350||accionLog_chg_acd_pausas|| || || || || || ||
+
  padding:8px;
|-
+
  border:1px solid #ccc;
|5355||accionLog_del_acd_pausas|| || || || || || ||
+
  background-color:#f9f9f9;
|-
+
   border-radius:6px;
|5359||accionLog_add_cen_molticanal_texto_entrada|| || || || || || ||
+
  display:inline-block;
|-
+
">
|5360||accionLog_add_acd_supercolas|| || || || || || ||
+
[[File:casa.png|20px|link=#]][[# | Página Principal]]
|-
+
</div>
|5361||accionLog_del_cen_molticanal_texto_entrada|| || || || || || ||
+
<br><br>
|-
+
 
|5362||accionLog_udel_cen_molticanal_texto_entrada||||||||||||||
+
=== Sistema Operativo ===
|-
+
<br><br>
|5363||accionLog_add_cen_molticanal_texto_salida|| || || || || || ||
+
En la plataforma '''''VIVA'''it'' se utiliza el sistema operativo Linux, con dos distribuciones según la versión del proyecto:<br>
|-
+
: • Hasta la versión 4.0 y para proyectos especiales de '''''VIVA'''it'', se emplea [[#Sistema Operativo Ubuntu| Ubuntu Server LTS]].<br>
|5364||accionccionLog_chg_cen_molticanal_texto_salida|| || || || || || ||
+
: • A partir de la versión 5.0 de '''''VIVA'''it'', se utiliza por defecto [[#Sistema Operativo Debian| Debian LTS]].
|-
+
<br><br>
|5365||accionLog_chg_acd_supercolas|| || || || || || ||
+
 
|-
+
==== Sistema Operativo Ubuntu ====
|5366||accionLog_udel_cen_molticanal_texto_salida|| || || || || || ||
+
<br><br>
|-
+
El sistema operativo de la plataforma '''''VIVA'''it'', hasta la versión 4.0, se basa en Ubuntu Server LTS.<br>
|5367||accionLog_chg_cen_molticanal_texto_entrada|| || || || || || ||
+
Estas versiones cuentan con soporte a largo plazo (LTS), lo que las hace más estables y con actualizaciones controladas desde Ubuntu 14.04.1.<br>
|-
+
En concreto, el sistema operativo utilizado en'''''VIVA'''it'' es Ubuntu Server 22.04 LTS.<br>
|5368||accionLog_del_cen_molticanal_texto_salida|| || || || || || ||
+
Para más información visitar [https://ubuntu.com/server/docs/ Ubuntu Server].
|-
+
<br><br>
|5370||accionLog_del_acd_supercolas|| || || || || || ||
+
[[File:sistema_operativo_ubuntu_V5.1.png|1000px|center|thumb]]
|-
+
<br><br>
|5375||accionLog_udel_acd_supercolas|| || || || || || ||
+
<div style="
|-
+
  text-align:right;
|5380||accionLog_add_acd_vdn|| || || || || || ||
+
  margin-top:20px;
|-
+
  padding:8px;
|5385||accionLog_chg_acd_vdn|| || || || || || ||
+
  border:1px solid #ccc;
|-
+
  background-color:#f9f9f9;
|5390||accionLog_del_acd_vdn|| || || || || || ||
+
  border-radius:6px;
|-
+
  display:inline-block;
|5395||accionLog_udel_acd_vdn|| || || || || || ||
+
">
|-
+
[[File:flecha_verde.png|20px|link=#Sistema Operativo]][[#Sistema Operativo| Volver arriba]]
|5396||accionLog_add_cen_vdn|| || || || || || ||
+
</div>
|-
+
<div style="
|5397||accionLog_chg_cen_vdn|| || || || || || ||
+
  text-align:right;
|-
+
  margin-top:20px;
|5398||accionLog_del_cen_vdn|| || || || || || ||
+
  padding:8px;
|-
+
  border:1px solid #ccc;
|5399||accionLog_udel_cen_vdn|| || || || || || ||
+
  background-color:#f9f9f9;
|-
+
  border-radius:6px;
|5400||accionLog_add_campos|| || || || || || ||
+
  display:inline-block;
|-
+
">
|5405||accionLog_chg_campos|| || || || || || ||
+
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
|-
+
</div>
|5410||accionLog_del_campos|| || || || || || ||
+
<div style="
|-
+
  text-align:right;
|5415||accionLog_add_categorias|| || || || || || ||
+
  margin-top:20px;
|-
+
  padding:8px;
|5420||accionLog_chg_categorias|| || || || || || ||
+
  border:1px solid #ccc;
|-
+
  background-color:#f9f9f9;
|5425||accionLog_del_categorias|| || || || || || ||
+
  border-radius:6px;
|-
+
  display:inline-block;
|5430||accionLog_chg_com_configuracion|| || || || || || ||
+
">
|-
+
[[File:casa.png|20px|link=#]][[# | Página Principal]]
|5435||accionLog_add_nodos|| || || || || || ||
+
</div>
|-
+
<br><br>
|5440||accionLog_chg_nodos|| || || || || || ||
+
 
|-
+
==== Sistema Operativo Debian ====
|5445||accionLog_del_nodos|| || || || || || ||
+
<br><br>
|-
+
El sistema operativo de la plataforma '''''VIVA'''it'', desde la versión 4.0, se basa en Debain LTS.<br>
|5450||accionLog_udel_nodos|| || || || || || ||
+
En concreto, el sistema operativo utilizado en '''''VIVA'''it'' es la versión número Debian 13, de nombre Trixie con soporte a largo plazo LTS.<br>
|-
+
Estas versiones cuentan con soporte a largo plazo (LTS), lo que las hace más estables y con actualizaciones controladas.<br>
|5455||accionLog_add_sedes|| || || || || || ||
+
Para más información [https://www.debian.org/releases/trixie/index.es.html Debian “trixie”].
|-
+
<br><br>
|5460||accionLog_chg_sedes|| || || || || || ||
+
[[File:sistema_operativo_debian_V5.1.png|1000px|center|thumb]]
|-
+
<br><br>
|5465||accionLog_del_sedes|| || || || || || ||
+
<div style="
|-
+
  text-align:right;
|5470||accionLog_udel_sedes|| || || || || || ||
+
  margin-top:20px;
|-
+
  padding:8px;
|5475||accionLog_add_dat_sincroniza|| || || || || || ||
+
  border:1px solid #ccc;
|-
+
  background-color:#f9f9f9;
|5480||accionLog_chg_dat_sincroniza|| || || || || || ||
+
  border-radius:6px;
|-
+
  display:inline-block;
|5485||accionLog_add_extensiones|| || || || || || ||
+
">
|-
+
[[File:flecha_verde.png|20px|link=#Sistema Operativo]][[#Sistema Operativo| Volver arriba]]
|5490||accionLog_chg_extensiones|| || || || || || ||
+
</div>
|-
+
<div style="
|5495||accionLog_del_extensiones|| || || || || || ||
+
  text-align:right;
|-
+
  margin-top:20px;
|5500||accionLog_udel_extensiones|| || || || || || ||
+
  padding:8px;
|-
+
  border:1px solid #ccc;
|5505||accionLog_add_facilidades|| || || || || || ||
+
  background-color:#f9f9f9;
|-
+
  border-radius:6px;
|5510||accionLog_chg_facilidades|| || || || || || ||
+
  display:inline-block;
|-
+
">
|5515||accionLog_del_facilidades|| || || || || || ||
+
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
|-
+
</div>
|5520||accionLog_add_locuciones|| || || || || || ||
+
<div style="
|-
+
  text-align:right;
|5525||accionLog_chg_locuciones|| || || || || || ||
+
  margin-top:20px;
|-
+
  padding:8px;
|5530||accionLog_del_locuciones|| || || || || || ||
+
  border:1px solid #ccc;
|-
+
  background-color:#f9f9f9;
|5535||accionLog_add_musica|| || || || || || ||
+
  border-radius:6px;
|-
+
  display:inline-block;
|5540||accionLog_chg_musica|| || || || || || ||
+
">
|-
+
[[File:casa.png|20px|link=#]][[# | Página Principal]]
|5545||accionLog_del_musica|| || || || || || ||
+
</div>
|-
+
<br><br>
|5550||accionLog_add_permisos|| || || || || || ||
+
 
|-
+
=== Matriz de conmutación ===
|5555||accionLog_chg_permisos|| || || || || || ||
+
<br><br>
|-
+
La matriz de conmutación en la plataforma '''''VIVA'''it'' se plantea con tres núcleos de conmutación diferentes:<br>
|5560||accionLog_del_permisos|| || || || || || ||
+
: * '''Nodos ACD''': el núcleo de conmutación es Asterisk 1.4 RSP <br>
|-
+
: * '''Nodos corporativo Cisco''': el núcleo de conmutación es Asterisk 18 versión certified <br>
|5565||accionLog_add_plantillas|| || || || || || ||
+
: * '''Nodos corporativos / GW''': el núcleo de conmutación es Asterisk 18 versión certified <br>
|-
+
Sobre este núcleo constituido por Asterisk LTS se realizan las modificaciones necesarias para implementar la plataforma '''''VIVA'''it'' conformando Asterisk '''MDT'''el.<br>
|5570||accionLog_chg_plantillas|| || || || || || ||
+
Estas modificaciones se estructuran en dos apartados:
|-
+
<br><br>
|5575||accionLog_del_plantillas|| || || || || || ||
+
: • [[#Asterisk MDTel |'''Asterisk ''MDTel'']], añadiendo y modificando ficheros en la instalación realizada.<br>
|-
+
: • [[#Dialplan VIVAit|'''Dialplan ''VIVAit'']], ficheros que modulan el comportamiento de Asterisk antes eventos externos.
|5580||accionLog_add_puestos_extensiones|| || || || || || ||
+
<br><br>
|-
+
<div style="
|5585||accionLog_chg_puestos_extensiones|| || || || || || ||
+
  text-align:right;
|-
+
  margin-top:20px;
|5590||accionLog_del_puestos_extensiones|| || || || || || ||
+
  padding:8px;
|-
+
  border:1px solid #ccc;
|5595||accionLog_des_puestos_extensiones|| || || || || || ||
+
  background-color:#f9f9f9;
|-
+
  border-radius:6px;
|5600||accionLog_add_usuarios|| || || || || || ||
+
  display:inline-block;
|-
+
">
|5605||accionLog_chg_usuarios|| || || || || || ||
+
[[File:flecha_verde.png|20px|link=#Matriz de conmutación]][[#Matriz de conmutación | Volver arriba]]
|-
+
</div>
|5610||accionLog_del_usuarios|| || || || || || ||
+
<div style="
|-
+
  text-align:right;
|5615||accionLog_udel_usuarios|| || || || || || ||
+
  margin-top:20px;
|-
+
  padding:8px;
|5620||accionLog_chg_licencias|| || || || || || ||
+
  border:1px solid #ccc;
|-
+
  background-color:#f9f9f9;
!colspan="9"|ACCIONES DE LOS EJES
+
  border-radius:6px;
|-
+
  display:inline-block;
|5705||accionLog_chg_Eje|| || || || || || ||
+
">
|-
+
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
|5710||accionLog_out_Eje_Padre|| || || || || || ||
+
</div>
|-
+
<div style="
|5715||accionLog_del_Eje|| || || || || || ||
+
  text-align:right;
|-
+
  margin-top:20px;
|5720||accionLog_add_Eje||  ||  ||  || || || ||
+
  padding:8px;
|-
+
  border:1px solid #ccc;
|5725||accionLog_set_Eje_Padre|| || || || || || ||
+
  background-color:#f9f9f9;
|-
+
  border-radius:6px;
|5730||accionLog_add_acd_pausas_usuarios|| || || || || || ||
+
  display:inline-block;
|-
+
">
|5735||accionLog_del_acd_pausas_usuarios|| || || || || || ||
+
[[File:casa.png|20px|link=#]][[# | Página Principal]]
|-
+
</div>
|5740||accionLog_add_centros_dispositivos|| || || || || || ||
+
<br><br>
|-
+
 
|5745||accionLog_chg_centros_dispositivos|| || || || || || ||
+
==== Asterisk '''''MDT'''el'' ====
|-
+
<br><br>
|5750||accionLog_del_centros_dispositivos|| || || || || || ||
+
Sobre el software Asterisk LTS instalado se realizan modificaciones para implementar las funcionalidades de conmutación de '''''VIVA'''it''.<br>
|-
+
Estas modificaciones se llevan a cabo mediante dos acciones complementarias, dando lugar al Asterisk '''MDT'''el.
|5755||accionLog_add_centros_extensiones|| || || || || || ||
+
<br><br>
|-
+
: * [[#Archivos añadidos por MDtel | '''Añadiendo archivos nuevos''']]
|5760||accionLog_chg_centros_extensiones|| || || || || || ||
+
: * [[#Archivos modificados por MDTel | '''Modificando archivos ya existentes''']]
|-
+
<br><br>
|5765||accionLog_del_centros_extensiones|| || || || || || ||
+
Los ficheros copiados son el código fuente que es necesario compilar e instalar.
|-
+
<br><br>
|5770||accionLog_add_acd_usuarios|| || || || || || ||
+
 
|-
+
===== Flujo de compilación e instalación de app en Asterisk =====
|5775||accionLog_chg_acd_usuarios||||||||||||||
+
<br><br>
|-
+
Dentro del flujo habitual:
|5780||accionLog_add_relacion_campos|| || || || || || ||
+
<br><br>
|-
+
[[File:flujo_compilación_para_asterisk_V5.1.png|1500px|center|thumb]]
|5785||accionLog_del_relacion_campos|| || || || || || ||
+
<br><br>
|-
+
se seguirá el siguiente proceso operativo:
|5786||accionLog_chg_grabacion_configuracion|| || || || || || ||
+
<br><br>
|-
+
'''Paso 1''': Edición del código fuente, colocado en el entorno de desarrollo. Por ejemplo para la app: '''app_mdintz.c''', se podría usar:
|5787||accionLog_add_campannas|| || || || || || ||
+
    #cat /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/apps/app_mdintz.c
|-
+
::: o
|5788||accionLog_chg_campannas|| || || || || || ||
+
    #nano /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/apps/app_mdintz.c
|-
+
<br><br>
|5789||accionLog_del_campannas|| || || || || || ||
+
'''Paso 2''': Compilación del código fuente generando el binario utilizable por Asterisk
|-
+
    app_mdintz.c → app_mdintz.o → app_mdintz.so
|5790||accionLog_udel_campannas|| || || || || || ||
+
Para ello se utiliza el comando del sistema operativo
|-
+
    #make
|5791||accionLog_add_lista_contactos|| || || || || || ||
+
dentro de su contexto (directorio adecuado, controlado por el fichero Makefile, ...)
|-
+
<br><br>
|5792||accionLog_chg_lista_contactos|| || || || || || ||
+
: solo se compilan los ficheros .c, el restos de ficheros son auxiares y se utilizan en la compilación:
|-
+
:: .h  (headers) apoyan a los .c (definiciones, funciones, macros, estructuras)
|5793||accionLog_del_lista_contactos|| || || || || || ||
+
:: .in plantillas usadas en compilación
|-
+
<br><br>
|5794||accionLog_udel_lista_contactos|| || || || || || ||
+
'''Paso 3''': instalación en Asterisk
|-
+
    #cp app_mdintz.so /usr/lib/asterisk/modules/
|5795||accionLog_add_lista_llamames|| || || || || || ||
+
o más completo
|-
+
    #make install
|5796||accionLog_chg_lista_llamames|| || || || || || ||
+
dentro de su contexto (directorio adecuado, controlado por el fichero Makefile, ...)
|-
+
<br><br>
|5797||accionLog_del_lista_llamames|| || || || || || ||
+
'''Paso 4''': Recargar en Asterisk. Se puede utilizar:
|-
+
    #module reload app_mdintz.so
|5798||accionLog_udel_lista_llamames|| || || || || || ||
+
pero es más efectivo:
|-
+
    #systemctl stop asterisk
|5799||accionLog_add_lista_robinson|| || || || || || ||
+
    #systemctl start asterisk
|-
+
Este es el archivo activo que Asterisk carga en tiempo de ejecución.
|5800||accionLog_chg_lista_robinson|| || || || || || ||
+
<br><br>
|-
+
<div style="
|5801||accionLog_del_lista_robinson|| || || || || || ||
+
  text-align:right;
|-
+
  margin-top:20px;
|5802||accionLog_udel_lista_robinson|| || || || || || ||
+
  padding:8px;
|-
+
  border:1px solid #ccc;
|5803||accionLog_add_contacto|| || || || || || ||
+
  background-color:#f9f9f9;
|-
+
  border-radius:6px;
|5804||accionLog_chg_contacto|| || || || || || ||
+
  display:inline-block;
|-
+
">
|5805||accionLog_del_contacto|| || || || || || ||
+
[[File:flecha_verde.png|20px|link=#Matriz de conmutación]][[#Matriz de conmutación | Volver arriba]]
|-
+
</div>
|5806||accionLog_udel_contacto|| || || || || || ||
+
<div style="
|-
+
  text-align:right;
|5807||accionLog_import_contactos|| || || || || || ||
+
  margin-top:20px;
|-
+
  padding:8px;
|5808'''(*)'''||accionLog_add_contacto_campanna|| || || || || || ||
+
  border:1px solid #ccc;
|-
+
  background-color:#f9f9f9;
|'''''5818'''''||accionLog_chg_contacto_campanna|| || || || || || ||
+
  border-radius:6px;
|-
+
  display:inline-block;
|5809||accionLog_chk_exist_contacto_campanna|| || || || || || ||
+
">
|-
+
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
|5810||accionLog_add_contacto_lista|| || || || || || ||
+
</div>
|-
+
<div style="
|5811||accionLog_chk_exist_contacto_lista|| || || || || || ||
+
  text-align:right;
|-
+
  margin-top:20px;
|5812||accionLog_del_contacto_lista|| || || || || || ||
+
  padding:8px;
|-
+
  border:1px solid #ccc;
|5813||accionLog_add_estrategia|| || || || || || ||
+
  background-color:#f9f9f9;
|-
+
  border-radius:6px;
|5814||accionLog_chg_estrategia|| || || || || || ||
+
  display:inline-block;
|-
+
">
|5815||accionLog_del_estrategia|| || || || || || ||
+
[[File:casa.png|20px|link=#]][[# | Página Principal]]
|-
+
</div>
|5816||accionLog_udel_estrategia|| || || || || || ||
+
<br><br>
|-
 
|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|| || || || || || ||
 
|-
 
!colspan="9"|GRUPOS DE SALTO
 
|-
 
|5847||accionLog_add_grupos_salto|| || || || || || ||
 
|-
 
|5848||accionLog_chg_grupos_salto|| || || || || || ||
 
|-
 
|5849||accionLog_del_grupos_salto|| || || || || || ||
 
|-
 
|5850||accionLog_udel_grupos_salto|| || || || || || ||
 
|-
 
!colspan="9"|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|| || || || || || ||
 
|-
 
!colspan="9"|INFORMES DE CALIDAD
 
|-
 
|5859||accionLog_add_informes_calidad|| || || || || || ||
 
|-
 
|5860||accionLog_chg_informes_calidad|| || || || || || ||
 
|-
 
|5861||accionLog_del_informes_calidad|| || || || || || ||
 
|-
 
|5862||accionLog_udel_informes_calidad|| || || || || || ||
 
|-
 
!colspan="9"|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
 
|-
 
!colspan="9"|PREGUNTAS DE CALIDAD
 
|-
 
|5863||accionLog_add_preguntas_calidad|| || || || || || ||
 
|-
 
|5864||accionLog_chg_preguntas_calidad|| || || || || || ||
 
|-
 
|5865||accionLog_del_preguntas_calidad|| || || || || || ||
 
|-
 
|5866||accionLog_udel_preguntas_calidad|| || || || || || ||
 
|-
 
!colspan="9"|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
 
|-
 
!colspan="9"|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|| || || || || || ||
 
|-
 
!colspan="9"|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|| || || || || || ||
 
|-
 
!colspan="9"|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|| || || || || || ||
 
|}
 
  
=== Procesos propios ===
+
===== Archivos añadidos por '''''MD'''tel'' =====
 +
<br><br>
 +
Se copia el código fuente en el entorno de desarrollo y se sigue el procedimiento visto [[#Asterisk MDTel |más arriba]]
 +
    /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4
 +
y en diferentes subdirectorios, los archivos añadidos son los siguientes:
 +
<br><br>
 +
  /apps/app_ucid.c
 +
  /apps/app_cli.c
 +
  /apps/app_crash.c
 +
  /apps/app_crash.exports.in
 +
  /apps/app_mdintz.c
 +
  /apps/app_mdintz.exports.in
 +
  /apps/pqcti
 +
  /apps/app_md_pqcti.c
  
==== bdCentral ====
+
  /channels/chan_mdtap.c
  
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
+
  /configs/samples/MDcrash.conf
  
En caso de producirse algún error, se marcará dicho error en el log con una línea que comienza con la cadena "*ERROR".
+
  /include/asterisk/mdintz.h
 +
  /include/asterisk/ucid.h
 +
  /include/asterisk/mdcrash.h
 +
  /include/asterisk/mdgh.h
  
Para ejecutar bdCentral:
+
  /res/res_mdcal.c
  bdCentral.sh /etc/MDtel/bdCentral.conf
+
  /res/res_mdgh.exports.in
 +
  /res/res_mdgh.c
 +
<br><br>
 +
La funcionalidad que aporta cada uno de ellos se puede consultar visualizando la cabecera de los mismos.
 +
<br><br>
 +
'''Ejemplo:'''
 +
<br><br>
 +
  root@srv-vivaitcall-01:/usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/apps# '''cat app_ucid.c'''
 +
/*
 +
  * Asterisk -- An open source telephony toolkit.
 +
  *
 +
  * Copyright (C) 2011 MDtel
 +
  *
 +
  * See http://www.asterisk.org for more information about
 +
  * the Asterisk project. Please do not directly contact
 +
  * any of the maintainers of this project for assistance;
 +
  * the project provides a web site, mailing lists and IRC
 +
  * channels for your use.
 +
  *
 +
  * This program is free software, distributed under the terms of
 +
  * the GNU General Public License Version 2. See the LICENSE file
 +
  * at the top of the source tree.
 +
  */
 +
/*! \file
 +
  *
 +
  * \brief '''Aplicacion para generar UCID'''
 +
  *
 +
  * \'''author MDtel'''
 +
  *
 +
  * \ingroup applications
 +
  */
 +
#include "asterisk.h"
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Matriz de conmutación]][[#Matriz de conmutación | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
Estos procesos se ejecutan automáticamente. Para ello está copiado el fichero bdCentral a /etc/cron.d.
+
===== Archivos modificados por '''''MDT'''el'' =====
 +
<br><br>
 +
Se copia el código fuente en el entorno de desarrollo y se sigue el procedimiento visto [[#Asterisk MDTel |más arriba]]
 +
    /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4
 +
y en diferentes subdirectorios, los archivos modificados son los siguientes:
 +
<br><br>
 +
  /apps/app_mixmonitor.c
 +
  /apps/app_chanspy.c
 +
  /apps/app_setoptions.c
 +
  /apps/app_confbridge.c
  
Por defecto la programación vienen comentada por lo que será necesario activarlo.
+
  /cdr/cdr-csv.c
 +
 
 +
  /channels/sig_pri.c
 +
  /channels/chan_sip.c
 +
  /channels/chan_dahdi.c
 +
  /channels/sip/dialplan_functions.c
  
Para que se roten los logs hay que copiar el fichero bdCentral.logrotate a /etc/logrotate.d (como bdCentral)
+
  /contrib/scripts/safe_asterisk
La ruta donde se encuentran los logs es la siguiente: '''/var/log/myAcdSuperv.log'''
+
  /contrib/init.d/rc.debian.asterisk
 +
  /contrib/init.d/etc_default_asterisk
  
Fichero de configuación:
+
  /include/asterisk/audiohook.h
  
  ARCH_LOG=/var/log/bdCentral.log
+
  /main/audiohook.c
 +
  /main/asterisk.c  
 +
  /main/pbx.c
 +
  /main/manager.c
 
   
 
   
BDHOST=localhost
+
  /res/res_mdcal.c
BDUSU=adminNimitz
+
  /res/res_calendar_caldav.c
BDCLAVE=imdtelnimitz
+
<br><br>
BDRUTA=/var/lib/MDtel/backupBDnimitz
+
<div style="
+
  text-align:right;
+
  margin-top:20px;
IGNORE_TABLAS=(nimitz.DAT_ACD_RASTREO  nimitz.DAT_ACUMULADOS_AGENTES  nimitz.DAT_ACUMULADOS_AGENTES_COLAS
+
  padding:8px;
nimitz.DAT_ACUMULADOS_AGENTES_PAUSAS  nimitz.DAT_ACUMULADOS_AGENTES_VDN  nimitz.DAT_ACUMULADOS_COLAS 
+
  border:1px solid #ccc;
nimitz.DAT_ACUMULADOS_VDN  nimitz.DAT_ACUMULADOS_VDN_COLAS  nimitz.DAT_CONTACTOS_PREPARADOS 
+
  background-color:#f9f9f9;
nimitz.DAT_IVR_INTERACCIONES  nimitz.DAT_IVR_NODOS  nimitz.DAT_IVR_PAGOS_TARJETA  nimitz.DAT_IVR_RESULT_ENCUESTAS
+
  border-radius:6px;
nimitz.DAT_LLAMADAS  nimitz.DAT_LOG  nimitz.DAT_MUESTRAS_COLAS  nimitz.DAT_SEGMENTOS  nimitz.DAT_SESIONES_AGENTES 
+
   display:inline-block;
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 
+
[[File:flecha_verde.png|20px|link=#Matriz de conmutación]][[#Matriz de conmutación | Volver arriba]]
nimitz.DAT_VALORACIONES  nimitz.DAT_ACD_RASTREO  nimitz.DAT_ACUMULADOS_AGENTES_COLAS    
+
</div>
nimitz.DAT_ACUMULADOS_AGENTES_PAUSAS  nimitz.DAT_ACUMULADOS_AGENTES_VDN  nimitz.DAT_ACUMULADOS_COLAS 
+
<div style="
nimitz.DAT_ACUMULADOS_VDN  nimitz.DAT_LLAMADAS  nimitz.DAT_MUESTRAS_COLAS  nimitz.DAT_SEGMENTOS 
+
  text-align:right;
nimitz.DAT_SESIONES_AGENTES  nimitz.DAT_SESIONES_AGENTES_COLAS  nimitz.DAT_SESIONES_AGENTES_PAUSAS 
+
  margin-top:20px;
nimitz.DAT_SESIONES_AGENTES_VDN  nimitz.DAT_TR_ACD_EXTENSIONES  nimitz.DAT_TR_ACD_EXTEN_COLA  nimitz.DAT_TR_COLAS 
+
  padding:8px;
nimitz.DAT_VALORACIONES)
+
  border:1px solid #ccc;
 
+
  background-color:#f9f9f9;
*A continuación se explica los campos mas relevantes del fichero de configuración bdCentral.conf.
+
  border-radius:6px;
{| class="wikitable"
+
  display:inline-block;
|-
+
">
!Campo !!Descripción !!Posibles valores (si aplica)
+
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
|-
+
</div>
|ARCH_LOG|| /RUTA/FICHERO de log del proceso||
+
<div style="
|-
+
  text-align:right;
|BDHOST||IP o HOST máquina base de datos de tiempo real||
+
  margin-top:20px;
|-
+
  padding:8px;
|BDUSU||Usuario acceso Base de datos de tiempo real||
+
  border:1px solid #ccc;
|-
+
  background-color:#f9f9f9;
|BDCLAVE||Clave usuario acceso base de datos tiempo real||
+
  border-radius:6px;
|-
+
  display:inline-block;
|BDRUTA||Ruta donde se depositará el dump de la base de datos||
+
">
|-
+
[[File:casa.png|20px|link=#]][[# | Página Principal]]
|IGNORE_TABLAS||Tablas de las que no queramos hacer backup||
+
</div>
|-
 
|}
 
 
 
 
 
 
<br><br>
 
<br><br>
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
 
==== 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)
 
  
 +
===== Ficheros significativos de Asterisk '''''MDT'''el'' =====
 +
<br><br>
 +
A continuación se documentan algunos de los ficheros gestionados en los puntos anteriores.
 +
<br><br>
 +
<div style="
 +
  text-align:center;
 +
  margin-top:20px;
 +
  padding:6px 12px;
 +
  border:1px solid #ccc;
 +
  background-color:#f5f5f5;
 +
  border-radius:8px;
 +
  display:inline-block;
 +
  font-family:monospace;
 +
  font-size:14px;
 +
  color:#333;
 +
  box-shadow:0 1px 2px rgba(0,0,0,0.1);
 +
">
 +
<big>'''/main/audiohook.c'''</big>
 +
</div>
 +
<br><br>
 +
Modificado para solucionar un crash de asterisk al utilizar en el mixmonitor las opciónes r y t
 +
<br><br>
 +
<div style="
 +
  text-align:center;
 +
  margin-top:20px;
 +
  padding:6px 12px;
 +
  border:1px solid #ccc;
 +
  background-color:#f5f5f5;
 +
  border-radius:8px;
 +
  display:inline-block;
 +
  font-family:monospace;
 +
  font-size:14px;
 +
  color:#333;
 +
  box-shadow:0 1px 2px rgba(0,0,0,0.1);
 +
">
 +
<big>'''/apps/app_crash.c'''</big>
 +
</div>
 +
<br><br>
 +
Esta nueva aplicación es sólo compatible a partir de Asterisk 13. <br>
 +
La documentación de la misma se encuentra en el comando CLI de Asterisk:
 +
    >core show application Crash
 +
<br><br>
 +
[[File:CLI_app_crash_V5.1.png|1500px|center|thumb]]
 
<br><br>
 
<br><br>
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
+
Esta nueva aplicación ''permite añadir'' al plan de pruebas:<br>
 +
: * 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).
 
<br><br>
 
<br><br>
 
+
<div style="text-align: center;">
==== Intz-Nimitz ====
+
{| class="wikitable" style="margin: 0 auto; padding: 0.3cm; "
 
+
! style = "background-color:#0099ff; color:#ffffff" |<center>'''''Nota'''''</center>
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|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:
 
{| class="wikitable"
 
 
|-
 
|-
!Parámetro!!Descripción
+
|style="margin: 0 auto; padding: 0.3cm;" |Herramienta de laboratorio. No debería estar presente en una instalación en producción.
 +
|}
 +
</div>
 +
<br><br>
 +
<div style="
 +
  text-align:center;
 +
  margin-top:20px;
 +
  padding:6px 12px;
 +
  border:1px solid #ccc;
 +
  background-color:#f5f5f5;
 +
  border-radius:8px;
 +
  display:inline-block;
 +
  font-family:monospace;
 +
  font-size:14px;
 +
  color:#333;
 +
  box-shadow:0 1px 2px rgba(0,0,0,0.1);
 +
">
 +
<big>'''/apps/app_mdintz.c - /include/asterisk/mdintz.h'''</big>
 +
</div>
 +
<br><br>
 +
Esta aplicación sirve como interfaz a entornos (funcionalidades) creados por '''''MDT'''el''.<br>
 +
Está orientada al proceso de enrutamiento a implementar en ''intz-nimitz.''<br>
 +
Para mas información consultar la página de [[MDintz|MDintz]].<br>
 +
El archivo es casi igual para toda las versiones de Asterisk utilizadas (1.4, 13, 18, ...).
 +
<br><br>
 +
<div style="text-align: center;">
 +
{| class="wikitable" style="margin: 0 auto; padding: 0.3cm; "
 +
! style = "background-color:#0099ff; color:#ffffff" |<center>'''''Nota'''''</center>
 
|-
 
|-
|sis/ver||Versión del proceso
+
|style="margin: 0 auto; padding: 0.3cm;" |Cuando se compila a partir de Asterisk 13, es necesario comentar la línea '''#define ASTERISK_OLD'''<br>
 +
//#define ASTERISK_OLD.
 +
|}
 +
</div>
 +
<br><br>
 +
Los cambios implementados son:<br>
 +
: * Unificación de código entre las versiones de asterisk<br>
 +
: * Nuevo comando "qry"<br>
 +
: * Posible resolución de "Mal write" en intz-nimitz (a verificar)<br>
 +
<br><br>
 +
El formato del nuevo comando es:<br>
 +
    mdintz qry <nHostFijo> <entorno> <servicio> <par1>...<parN>
 +
<br><br>
 +
Permite interrogar a un servidor de igual modo que hace el dialplan para '''fines de diagnóstico'''.<br>
 +
La única diferencia es que se ha añadido el parámetro '''"nHostFijo"''' que puede tomar como valor: '''"*"''' (invoca interrogación secuencial a todos los servidores definidos, <br>
 +
igual a la funcionalidad del dialplan) ó de '''"0"''' a '''"3"''' (invoca un interrogación dirigida el host indicado como hostN, y sólo a él, en archivo de configuración).
 +
<br><br>
 +
<div style="
 +
  text-align:center;
 +
  margin-top:20px;
 +
  padding:6px 12px;
 +
  border:1px solid #ccc;
 +
  background-color:#f5f5f5;
 +
  border-radius:8px;
 +
  display:inline-block;
 +
  font-family:monospace;
 +
  font-size:14px;
 +
  color:#333;
 +
  box-shadow:0 1px 2px rgba(0,0,0,0.1);
 +
">
 +
<big>'''/contrib/init.d/rc.debian.asterisk'''</big>
 +
</div>
 +
<br><br>
 +
Cambiado por el modificado por MDtel.<br>
 +
El fichero:<br>
 +
      /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/contrib/init.d/rc.debian.asterisk
 +
es un script de inicio de Asterisk para sistemas Debian antiguos basados en SysVinit.
 +
<br><br>
 +
Sirve para:<br>
 +
: - Arrancar Asterisk automáticamente,<br>
 +
: - Detenerlo, <br>
 +
: - Reiniciarlo,<br>
 +
: - Comprobar estado.
 +
<br><br>
 +
Usos típicos<br>
 +
    root@srv-vivaitcall-01:~#service asterisk start/status/stop/restart
 +
<br><br>
 +
<div style="
 +
  text-align:center;
 +
  margin-top:20px;
 +
  padding:6px 12px;
 +
  border:1px solid #ccc;
 +
  background-color:#f5f5f5;
 +
  border-radius:8px;
 +
  display:inline-block;
 +
  font-family:monospace;
 +
  font-size:14px;
 +
  color:#333;
 +
  box-shadow:0 1px 2px rgba(0,0,0,0.1);
 +
">
 +
<big>'''/contrib/scripts/safe_asterisk'''</big>
 +
</div>
 +
<br><br>
 +
Cambiado por el modificado por MDtel<br>
 +
Del directorio de desarrollo:<br>
 +
    /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/contrib/scripts/
 +
es un script diseñado para monitorizar Asterisk y levantarlo automáticamente si se cae.
 +
La lógica del scrips funciona así:
 +
: - Lanza Asterisk en primer plano ejecuta el comando real (el binario que sí está compilado) usando la ruta
 +
        /usr/sbin/asterisk -f.
 +
: - Se queda escuchando por si Asterisk se llega a colgar o se cierra inesperadamente con un error (EXITSTATUS diferente a 0), el script lo detecta.<br>
 +
: - Guarda un reporte del fallo generando un archivo de volcado de memoria en la carpeta /tmp con la fecha y hora exacta del fallo para que puedas investigar qué pasó.<br>
 +
: - Reinica el servicio, levantando la centralita automáticamente sin que la necesidad de que un técnico intervenga.<br>
 +
Después de la instalación aparece en:
 +
    /usr/sbin/safe_asterisk
 +
En este archivo se ha modificado MAXFILES=32768
 +
<br><br>
 +
<div style="
 +
  text-align:center;
 +
  margin-top:20px;
 +
  padding:6px 12px;
 +
  border:1px solid #ccc;
 +
  background-color:#f5f5f5;
 +
  border-radius:8px;
 +
  display:inline-block;
 +
  font-family:monospace;
 +
  font-size:14px;
 +
  color:#333;
 +
  box-shadow:0 1px 2px rgba(0,0,0,0.1);
 +
">
 +
<big>'''Archivos de audio mp3'''</big>
 +
</div>
 +
<br><br>
 +
Añadiir la capeta mp3/ al directorio addons/
 +
  /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/addons/
 +
Esta permite la reproducción desde el diaplan de los mensajes en mp3.<br>
 +
Es necesario que Asterisk descargue el soporte de MP3 y se ejecuta el menú make menuselect.
 +
<br><br>
 +
El procedimiento sería:<br>
 +
'''Paso 1''': entrar a la carpeta de fuentes:
 +
    #cd /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/
 +
'''Paso 2''': descargar el soporte MP3:
 +
    #./contrib/scripts/get_mp3_source.sh
 +
'''Paso 3''': lanzar el menú:
 +
    #make menuselect
 +
donde se modifican la opción:<br>
 +
:: - en la sección Add-ons marcar [*] format_mp3.
 +
:: - guardar y salir.
 +
[[File:menuselect_V5.1.png|1500px|center|thumb]]
 +
'''Paso 4''': compilar e instalar los nuevos módulos:
 +
    #make
 +
    #make insstall
 +
'''Paso 5''': gestionar la app el reproductor externo mpg123 para música en espera:<br>
 +
: comprobar si está instalado:
 +
    #mpg123 --version
 +
: si no está instalado, instalar:
 +
    #apt install mpg123
 +
'''Paso 6''': reinciar Asterisk para que asuma las modificaciones
 +
    #systemctl stop asterisk
 +
    #systemctl start asterisk
 +
    #systemctl status asterisk
 +
'''Paso 7''': comprobar resultados, en la consola Asterisk:
 +
  >core show file formats
 +
<br><br>
 +
<div style="
 +
  text-align:center;
 +
  margin-top:20px;
 +
  padding:6px 12px;
 +
  border:1px solid #ccc;
 +
  background-color:#f5f5f5;
 +
  border-radius:8px;
 +
  display:inline-block;
 +
  font-family:monospace;
 +
  font-size:14px;
 +
  color:#333;
 +
  box-shadow:0 1px 2px rgba(0,0,0,0.1);
 +
">
 +
<big>'''sig_pri.c'''</big>
 +
</div>
 +
<br><br>
 +
Modificado para enviar/recibir el ucid en un E1 conectado a una tarjeta DAHDI con señalización PRI y QSIG.<br>
 +
Para que se envié el ucid es necesario habilitar el envío de facilidades en
 +
        /etc/asterisk/chan_dahdi.conf
 +
        /usr/src/MDtel/DialPlan/chan_dahdi.conf
 +
modificando
 +
        facilityenable = yes
 +
<br><br>
 +
<div style="text-align: center;">
 +
{| class="wikitable" style="margin: 0 auto; padding: 0.3cm; "
 +
! style = "background-color:#0099ff; color:#ffffff" |<center>'''''Nota'''''</center>
 
|-
 
|-
|sis/inic||Fecha de de arranque del proceso
+
|style="margin: 0 auto; padding: 0.3cm;" |El concepto UCID solo tiene sentido dentro del entorno VIVAit. <br>
 +
Por ello, esta modificación se aplica cuando dos sistemas VIVAit están conectados mediante un enlace QSIG, <br>
 +
permitiendo que este parámetro se envíe y reciba entre los sistemas partner.
 +
|}
 +
</div>
 +
<br><br>
 +
<div style="
 +
  text-align:center;
 +
  margin-top:20px;
 +
  padding:6px 12px;
 +
  border:1px solid #ccc;
 +
  background-color:#f5f5f5;
 +
  border-radius:8px;
 +
  display:inline-block;
 +
  font-family:monospace;
 +
  font-size:14px;
 +
  color:#333;
 +
  box-shadow:0 1px 2px rgba(0,0,0,0.1);
 +
">
 +
<big>'''/etc/init.d/asterisk'''</big>
 +
</div>
 +
<br><br>
 +
La modificación realizada en este fichero ha sido la siguiente:
 +
<br><br>
 +
{| style="background-color: #ffffcc !important; text-align: left; border-collapse: collapse; border: 1px solid #dcdcdc;"
 
|-
 
|-
|Sis/alarmas||Alarmas desde arranque
+
| style="background-color: #ffffcc !important; border: none !important; padding: 15px;" |
|-
+
SAFE_ASTEISK=/usr/sbin/safe_asterisk<br>
|Sis/ultAlar||Fecha de última alarma
+
....<br>
|-
+
<nowiki>#</nowiki>//!!@RM<br>
|Gmp/msj||
+
&nbsp;&nbsp;&nbsp;&nbsp;if [ -f $SAFE_ASTERISK ]; then<br>
|-
+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DAEMON=$SAFE_ASTERISK<br>
|Gmp/buf||
+
&nbsp;&nbsp;&nbsp;&nbsp;fi
|-
+
|}
|Gmp/tarea||
+
<br><br>
|-
+
<div style="
|Tmp/uptime||Tiempo que lleva el servicio activo
+
  text-align:center;
|-
+
  margin-top:20px;
|Vic/identif||Etiqueta de identificación del servicio
+
  padding:6px 12px;
|-
+
  border:1px solid #ccc;
|Vic/entorno||Entorno de base de datos
+
  background-color:#f5f5f5;
|-
+
  border-radius:8px;
|Vic/conx||Conexiones activas/conexiones máximas
+
  display:inline-block;
|-
+
  font-family:monospace;
|Vic/numConx||Conexiones totales (último minuto)
+
  font-size:14px;
|-
+
  color:#333;
|Mys/curro||Número de hilos contra la base de datos
+
  box-shadow:0 1px 2px rgba(0,0,0,0.1);
|-
+
">
|Mys/soli||Conexiones solicitadas (último minuto)
+
<big>'''/etc/default/asterisk'''</big>
|-
+
</div>
|Mys/soliErr||Conexiones solicitadas con error (último minuto)
+
<br><br>
|-
+
La finalidad de la modificación de este fichero es poder correr como usuario Asterisk, grupo asterisk y generar cores (descomentar línea).<br>
|Mys/soliEncol||Conexiones encoladas
+
Las modificaciones realizadas han sido:<br>
|-
+
<br><br>
|Cache/cola|| Colas monitorizadas/
+
{| style="background-color: #ffffcc !important; text-align: left; border-collapse: collapse; border: 1px solid #dcdcdc;"
|-
 
|Cache/vdn||VDN’s monitorizados
 
|-
 
|Cache/usuExten||
 
 
|-
 
|-
 +
| style="background-color: #ffffcc !important; border: none !important; padding: 15px;" |
 +
<nowiki>#</nowiki>//!! jac<br>
 +
&nbsp;&nbsp;AST_USER="asterisk"<br>
 +
&nbsp;&nbsp;AST_GROUP="asterisk"<br>
 +
&nbsp;&nbsp;...<br>
 +
&nbsp;&nbsp;COREDUMP=yes
 
|}
 
|}
 
+
<br><br>
Como complemento a los diagnósticos:
+
<div style="
 
+
  text-align:center;
* Podremos examinar el fichero de configuración del proceso en  '''/etc/MDtel/intz-nimitz.conf'''
+
  margin-top:20px;
* Podremos examinar los logs del proceso en '''/var/log/intz-nimitz.log'''
+
  padding:6px 12px;
 
+
  border:1px solid #ccc;
'''Fichero de configuración:'''
+
  background-color:#f5f5f5;
 
+
  border-radius:8px;
#
+
  display:inline-block;
# Los nombres no pueden tener numeros
+
  font-family:monospace;
# Si el valor de una cadena contiene espacios, se pondra entre comillas dobles
+
  font-size:14px;
# Los valores comentados indican valores por defecto
+
  color:#333;
+
  box-shadow:0 1px 2px rgba(0,0,0,0.1);
base
+
">
{
+
<big>'''/apps/app_cli.c'''</big>
cfg
+
</div>
{
+
<br><br>
soy_demonio = 1
+
La función '''CLI''' de Asterisk permite ejecutar desde el dialplan un comando de línea de consola.<br>
hay_syslog = 0
+
Sus principales uso en la actualidad son:<br>
# Archivo con identificador de proceso: (-: /var/run/intz-nimitz.pid)
+
: Lanzar los mensajes ''notify'' que los teléfonos necesitan para el ''reaprovisionamiento'' desde el portal de administración<br>
archivo_pid = -
+
: Ejecutar los mensajes ''notify'' de reincio invocados desde la facilidad de movilidad de usuario.
# Archivo_traza: (-: stdout o /var/log/intz-nimitz.log si soy_demonio)
+
<br><br>
# No se usa si se activa hay_syslog
+
Básicamente ejecuta un comando y devuelve su salida. Utiliza un archivo intermedio que puede ser:<br>
archivo_traza = -
+
: * '''/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.
cfg_recarga
+
: * Un nombre de fichero que es responsabilidad del dialplan el borrarlo cuando proceda.
{
+
<br><br>
# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
+
Para instalarlo basta copiar '''app_cli.c''' en el directorio ''' "apps" ''' de los fuentes
nivel_traza = 3
+
  /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/apps/
pruebas = 1
+
luego compilar e instalar:
hay_flush_traza = 1
+
    #make
}
+
    #make install
sis
+
<br><br>
{
+
La información de la función CLI se puede obtenr desde la consola de Asterisk:
# No se usa. No modificar
+
<br><br>
subsistema = 0
+
[[File:CLI_app_cli_V5.1.png|1500px|center|thumb]]
}
+
<br><br>
gmp
+
<div style="
{
+
  text-align:right;
# Numero de mensajes. No modificar
+
  margin-top:20px;
num_msj = 1024
+
  padding:8px;
# Numero de buffer. No modificar
+
  border:1px solid #ccc;
num_buf = 1024
+
  background-color:#f9f9f9;
}
+
  border-radius:6px;
}
+
  display:inline-block;
+
">
supervision
+
[[File:flecha_verde.png|20px|link=#Matriz de conmutación]][[#Matriz de conmutación | Volver arriba]]
{
+
</div>
puerto_escucha = 1115
+
<div style="
}
+
  text-align:right;
+
  margin-top:20px;
supervision_recarga
+
  padding:8px;
{
+
  border:1px solid #ccc;
to_periodo = 60
+
  background-color:#f9f9f9;
}
+
  border-radius:6px;
+
  display:inline-block;
cache
+
">
{
+
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
        hay_cache = 1
+
</div>
}
+
<div style="
+
  text-align:right;
  cache_recarga
+
  margin-top:20px;
  {
+
  padding:8px;
  # to_vida = 0, no se almacenan entradas. to_vida > 0 en segundos
+
  border:1px solid #ccc;
        colas_to_vida = 300
+
  background-color:#f9f9f9;
        colas_num_entrada = 128
+
  border-radius:6px;
        vdn_to_vida = 300
+
  display:inline-block;
        vdn_num_entrada = 128
+
">
}
+
[[File:casa.png|20px|link=#]][[# | Página Principal]]
+
</div>
regexp
+
<br><br>
{
+
 
hay_regexp = 1
+
==== Dialplan  '''''VIVA'''it'' ====
}
+
<br><br>
+
El Dialplan podría considerarse el cerebro del sistema ''Asterisk'', decide qué hacer cuando un usuario marca un número o cuando entra una llamada.<br>
regexp_recarga
+
Es el conjunto de reglas o acciones que determina cómo se procesan y enrutan las llamadas dentro del sistema '''''VIVA'''it''.<br>
{
+
Sus funciones principales incluyen:
num_entradas = 32
+
<br><br>
inc_entradas = 128
+
: - Analizar los números marcados.<br>
max_entradas = 1024
+
: - Enrutar llamadas a extensiones internas o externas.<br>
}
+
: - Ejecutar aplicaciones (buzón de voz, colas, conferencias, IVR, grabación, etc.).<br>
+
: - Aplicar horarios, permisos y restricciones.<br>
vivaitcall
+
: - Manipular números antes de enviarlos a otro destino.
{
+
<br><br>
hay_vic = 1
+
Las configuraciones generales del Dialplan de Asterisk están accesibles en la ruta
puerto_escucha = 5555
+
    /etc/asterisk
identif = cms1
+
y se materializan en ficheros editables, la mayoría de extensión .''conf''.
entorno = nimitz
+
<br><br>
max_conx = 128
+
 
}
+
===== Conceptos básicos del Dialplan =====
+
<br><br>
vivaitcall_recarga
+
El Dialplan de Asterisk es el mecanismo de programación basado en contextos, extensiones y prioridades que controla el tratamiento, enrutamiento y ejecución de servicios sobre las llamadas telefónicas.<br>
{
+
Es la lógica de negocio de la centralita Asterisk, encargada de decidir qué acciones se realizan para cada llamada en función de su origen, destino y condiciones definidas por el administrador.
to_solicitud = 3
+
<br><br>
to_desconexion = 3
+
Normalmente el Dialplan se configura en archivos ''.conf'' (o mediante configuraciones equivalentes en tiempo real) y está organizado en:
ip_valida
+
: - '''Contextos''': definen el comportamiento del sistema ([interno], [externo], etc.).
{
+
: - '''Extensiones''': realmente son patrones de caracteres, normalmente números.
# Hasta 32 bloques de direcciones validas
+
: - '''Prioridades''': pasos que se ejecutan secuencialmente.
todas
+
<br><br>
{
+
Ejemplo básico:
ip = 0.0.0.0
+
  [interno]
msk = 0.0.0.0
+
  exten => 100,1,Answer()
}
+
    same => n,Playback(hello-world)
localhost
+
    same => n,Hangup()
{
+
Cuando alguien llama a la extensión 100, Asterisk:<br>
ip = 127.0.0.1
+
: 1. Contesta la llamada.
msk = 255.255.255.255
+
: 2. Reproduce el mensaje ''hello-world'', normalmente es un fichero de audio ''wav'' o ''mp3'' según configuración.
}
+
: 3. Cuelga.
}
+
<br><br>
}
+
♦ '''EXTENSIONES'''
+
<br><br>
enrutamiento
+
Una extensión es una marcación en el teclado de un teléfono. Dicha configuración se encuentra en el archivo ''extensions.conf''.<br>
{
+
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.<br>
hay_enrutamiento = 1
+
En Asterisk pueden definirse también extensiones como texto, por tanto no debemos relacionar las extensiones únicamente con números.<br>
max_pre_ruta_regs = 4
+
Algunas reglas que sería interesante conocer serían las siguientes:
max_ruta = 4
+
<br><br>
max_ruta_desvios = 2
+
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
# Filtro de informacion de ancho de banda
+
|-
# MYSDanchoBandaPasoNinguno      0
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Regla
# MYSDanchoBandaPasoSoloDirectos 1
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Descripción
# MYSDanchoBandaPasoSoloEnPaso   2
+
|-
# MYSDanchoBandaPasoTodos        3
+
| align=center style="padding:0.5cm; font-weight:bold;" | X
filtro_ancho_banda = 1
+
| style="padding:0.5cm;"                              | Cualquier cifra de 0 a 9
}
+
|-
+
| align=center style="padding:0.5cm; font-weight:bold;" | Z
mysql
+
| style="padding:0.5cm;"                                | Cualquier cifra de 1 a 9
{
+
|-
hay_mysql = 1
+
| align=center style="padding:0.5cm; font-weight:bold;" | N
host = BDTR
+
| style="padding:0.5cm;"                                | Cualquier cifra de 2 a 9
usuario = nimitz
+
|-
clave = phikau3iwCe4O0PP5b09ng==
+
| align=center style="padding:0.5cm; font-weight:bold;" | [x-y]
base_datos = nimitz
+
| style="padding:0.5cm;"                                | Cualquier cifra de "x" a "y"
bd_supervivencia = 0
+
|-
num_curro = 10
+
| align=center style="padding:0.5cm; font-weight:bold;" | [xyz]
}
+
| style="padding:0.5cm;"                                | Las cifras "x", "y" o "z"
+
|-
mysql_recarga
+
| align=center style="padding:0.5cm; font-weight:bold;" | .
{
+
| style="padding:0.5cm;"                                | Una o más repeticiones del símbolo anterior
to_resp = 5
+
|-
}
+
| align=center style="padding:0.5cm; font-weight:bold;" | !
 
+
| style="padding:0.5cm;"                                | Cero o más repeticiones del símbolo anterior
+
|-
Los siguientes son los campos del fichero de configuración '''int-nimitz.conf''':
+
|}
 
+
<br><br>
{| class="wikitable"
+
Estas reglas son necesarias a la hora de definir por ejemplo todos los números de teléfono posibles en España
 +
<br><br>
 +
♦ '''PRIORIDADES'''
 +
<br><br>
 +
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.<br>
 +
Primero se ejecutará la acción 1, luego la 2...así sucesivamente.<br>
 +
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
 +
<br><br>
 +
♦ '''CONTEXTOS'''
 +
<br><br>
 +
Es un mecanismo que nos permite variar el comportamiento del sistema en función del número que se marque.<br>
 +
Su misión es aumentar la seguridad del sistema ofreciendo servicios diferenciados en función del usuario.<br>
 +
La sintaxis típica es el nombre del contexto englobado entre corchetes [nombre_contexto]. <br>
 +
Si un dispositivo no tiene un contexto definido se redirige directamente al contexto por defecto.
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
   display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Dialplan VIVAit]][[#Dialplan VIVAit | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
 +
 
 +
===== Ficheros de configuración del Dialplan =====
 +
<br><br>
 +
En Asterisk, los archivos ''.conf'' son los ficheros de configuración donde se define el comportamiento de los distintos módulos del sistema. <br>
 +
El Dialplan es solo una parte de esa configuración. Los más importantes relacionados con este son:
 +
<br><br>
 +
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
 
|-
 
|-
|Variable a modificar||Comentarios||Posibles valores (si aplica)
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Archivo
|-
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Propósito
|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
+
| style="padding:0.5cm; font-weight:bold;" | extensions.conf
 +
| style="padding:0.5cm;"                  | Define el Dialplan: contextos, extensiones y lógica de llamadas.
 
|-
 
|-
|archivo_pid||# Archivo con identificador de proceso: (-: /var/run/intz-nimitz.pid)||
+
| style="padding:0.5cm; font-weight:bold;" | features.conf
 +
| style="padding:0.5cm;"                  | Configura funciones que pueden invocarse desde el Dialplan (transferencias, parking, etc.).
 +
|}
 +
<br><br>
 +
De los ficheros de configuración de Asterisk, ''extensions.conf'' contiene el dialplan, mientras que otros archivos proporcionan la configuración de los recursos, dispositivos y servicios que el Dialplan utiliza para procesar las llamadas.<br>
 +
Entre los que configuran canales y servicios están:
 +
<br><br>
 +
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
 
|-
 
|-
|archivo_traza||# Archivo_traza: (-: stdout o /var/log/intz-nimitz.log si soy_demonio)||
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Archivo
 +
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Propósito
 
|-
 
|-
|nivel_traza||# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)||
+
| style="padding:0.5cm; font-weight:bold;" | pjsip.conf
 +
| style="padding:0.5cm;"                  | Configuración de terminales, troncales y transporte SIP (tecnología PJSIP).
 
|-
 
|-
|pruebas||||
+
| style="padding:0.5cm; font-weight:bold;" | sip.conf
 +
| style="padding:0.5cm;"                  | Configuración SIP clásica.
 
|-
 
|-
|hay_flush_traza||||
+
| style="padding:0.5cm; font-weight:bold;" | voicemail.conf
 +
| style="padding:0.5cm;"                  | Configuración del buzón de voz.
 
|-
 
|-
|subsistema||# No se usa. No modificar||
+
| style="padding:0.5cm; font-weight:bold;" | queues.conf
 +
| style="padding:0.5cm;"                  | Configuración de colas de llamadas.
 
|-
 
|-
|num_msj||# Numero de mensajes. No modificar||
+
| style="padding:0.5cm; font-weight:bold;" | agents.conf
 +
| style="padding:0.5cm;"                  | Configuración de agentes.
 
|-
 
|-
|num_buf||# Numero de buffer. No modificar||
+
| style="padding:0.5cm; font-weight:bold;" | meetme.conf
 +
| style="padding:0.5cm;"                  | Salas de conferencia.
 
|-
 
|-
|puerto_escucha||Puerto de supervisión del demonio||
+
| style="padding:0.5cm; font-weight:bold;" | musiconhold.conf
 +
| style="padding:0.5cm;"                  | Música en espera.
 +
|}
 +
<br><br>
 +
En el sistema '''''VIVA'''it'' estos se clasifican en:
 +
<br><br>
 +
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
 
|-
 
|-
|to_periodo||Timeout para reconectar||
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Tipo de fichero
 +
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Función
 
|-
 
|-
|hay_cache||si guarda datos o no en cache||1 hay cache – 0 no hay cache
+
| style="padding:0.5cm; font-weight:bold;" | Generales
 +
| style="padding:0.5cm;"                  | Se encuentran los ficheros de propios de MDtel y Asterisk. Es importante remarcar que estos ficheros NO pueden ser modificados por el usuario.
 
|-
 
|-
|colas_to_vida||# to_vida = 0, no se almacenan entradas. to_vida > 0 en segundos||
+
| style="padding:0.5cm; font-weight:bold;" | Particulares
 +
| style="padding:0.5cm;"                  | Estos ficheros son los únicos que puede modificar el usuario
 
|-
 
|-
|colas_num_entrada||Número de entradas correspondiente a las colas||
+
| style="padding:0.5cm; font-weight:bold;" | Web
|-
+
| style="padding:0.5cm;"                  | Se encierran aquí los archivos generados automáticamente por la plataforma, a través del portal
|vdn_to_vida||# to_vida = 0, no se almacenan entradas. to_vida > 0 en segundos||
+
|}
|-
+
<br><br>
|vdn_num_entrada||Número de entradas correspondiente a los VDN||
+
En función del tipo de nodo donde corre Asterisk, encontraremos dos tipos de dialplan:
 +
<br><br>
 +
[[#Dialplan VIVAit CALL | Dialplan que aplica a nodos ''Corporativo'' o nodos ''GW']]<br>
 +
[[#Dialplan VIVAit Suite | Dialplan que aplica a nodos ''Call center'']]
 +
<br><br>
 +
Para más información ver el apartado [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit_5.1#Nodos nodos].
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Dialplan VIVAit]][[#Dialplan VIVAit | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
 +
 
 +
===== Dialplan  '''''VIVA'''it CALL'' =====
 +
<br><br>
 +
A continuación se muestran las tablas con los ficheros de configuración correspondientes al '''''Dialplan Corporativo'''''.
 +
<br><br>
 +
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
 
|-
 
|-
|hay_regexp||||
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | '''GENERALES'''
 +
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | '''PARTICULARES'''
 +
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | '''WEB'''
 
|-
 
|-
|num_entradas||||
+
|  
|-
+
acl.conf<br>
|inc_entradas||||
+
adsi.conf<br>
|-
+
agents.conf<br>
|max_entradas||||
+
alarmreceiver.conf<br>
|-
+
alsa.conf<br>
|hay_vic||||
+
amd.conf<br>
|-
+
app_mysql.conf<br>
|puerto_escucha||Puerto de escucha a nivel de vivait-call||
+
app_skel.conf<br>
|-
+
ari.conf<br>
|identif ||||
+
ast_debug_tools.conf<br>
|-
+
asterisk.conf<br>
|entorno||Nombre base de datos||
+
calendar.conf<br>
|-
+
ccss.conf<br>
|max_conx||Número máximo de conexiones a la base de datos||
+
cdr_adaptive_odbc.conf<br>
 +
cdr_beanstalkd.conf<br>
 +
cdr.conf<br>
 +
cdr_custom.conf<br>
 +
cdr_manager.conf<br>
 +
cdr_mysql.conf<br>
 +
cdr_odbc.conf<br>
 +
cdr_pgsql.conf<br>
 +
cdr_sqlite3_custom.conf<br>
 +
cdr_syslog.conf<br>
 +
cdr_tds.conf<br>
 +
cel_beanstalkd.conf<br>
 +
cel.conf<br>
 +
cel_custom.conf<br>
 +
cel_odbc.conf<br>
 +
cel_pgsql.conf<br>
 +
cel_sqlite3_custom.conf<br>
 +
cel_tds.conf<br>
 +
chan_dahdi.conf<br>
 +
chan_mobile.conf<br>
 +
check-sync<br>
 +
cli_aliases.conf<br>
 +
cli.conf<br>
 +
cli_permissions.conf<br>
 +
codecs.conf<br>
 +
confbridge.conf<br>
 +
config_test.conf<br>
 +
console.conf<br>
 +
dbsep.conf<br>
 +
dnsmgr.conf<br>
 +
dsp.conf<br>
 +
dundi.conf<br>
 +
enum.conf<br>
 +
extconfig.conf<br>
 +
ext_Enrutador.conf<br>
 +
extensions.conf<br>
 +
extensions_minivm.conf<br>
 +
ext_FAX.conf<br>
 +
ext_Grabaciones.conf<br>
 +
ext_IA.conf<br>
 +
ext_InicioLlamada_CHAR.conf<br>
 +
ext_InicioLlamada_Chrome.conf<br>
 +
ext_InicioLlamada_Cisco.conf<br>
 +
ext_InicioLlamada.conf<br>
 +
ext_InicioLlamada_Dahdi.conf<br>
 +
ext_InicioLlamada_Emer.conf<br>
 +
ext_InicioLlamada_ExtSIP.conf<br>
 +
ext_InicioLlamada_ExtSIP_MDTAPREC.conf<br>
 +
ext_InicioLlamada_GH.conf<br>
 +
ext_InicioLlamada_Pqcti.conf<br>
 +
ext_InicioLlamada_Teams.conf<br>
 +
ext_InicioLlamada_TrunkSIP.conf<br>
 +
ext_InicioLlamada_WS.conf<br>
 +
ext_MARCAR_ColaCentralita.conf<br>
 +
ext_MARCAR_ColaCentralita_Dial.conf<br>
 +
ext_MARCAR_Cola.conf<br>
 +
ext_MARCAR_Cola_Dial.conf<br>
 +
ext_MARCAR.conf<br>
 +
ext_MARCAR_DejarMensaje.conf<br>
 +
ext_MARCAR_DejarMensaje_Dial.conf<br>
 +
ext_MARCAR_Extension.conf<br>
 +
ext_MARCAR_Extension_Dial.conf<br>
 +
ext_MARCAR_Externo.conf<br>
 +
ext_MARCAR_Externo_Dial.conf<br>
 +
ext_MARCAR_Facilidad.conf<br>
 +
ext_MARCAR_Facilidad_Dial.conf<br>
 +
ext_MARCAR_Facilidad_nimitz.conf<br>
 +
ext_MARCAR_LeerMensaje.conf<br>
 +
ext_MARCAR_LeerMensaje_Dial.conf<br>
 +
ext_MARCAR_Nodo.conf<br>
 +
ext_MARCAR_Nodo_Dial.conf<br>
 +
ext_MARCAR_SalasConfAvan.conf<br>
 +
ext_MARCAR_SalasConfAvan_Dial.conf<br>
 +
ext_MARCAR_SalasConf.conf<br>
 +
ext_MARCAR_SalasConf_Dial.conf<br>
 +
ext_MARCAR_Servicios.conf<br>
 +
ext_MARCAR_Servicios.conf.save<br>
 +
ext_MARCAR_VDN_Alertas.conf<br>
 +
ext_MARCAR_VDN.conf<br>
 +
ext_MARCAR_VDN_Dial.conf<br>
 +
ext_MDtel.conf<br>
 +
ext_MDtel_Var.conf<br>
 +
ext_Multidispositivo.conf<br>
 +
ext_Subrutinas_Alertas.conf<br>
 +
ext_Subrutinas_AnchoBanda.conf<br>
 +
ext_Subrutinas_BD_Alertas.conf<br>
 +
ext_Subrutinas_BD.conf<br>
 +
ext_Subrutinas_BD_Facilidad.conf<br>
 +
ext_Subrutinas_Codec.conf<br>
 +
ext_Subrutinas_Colas.conf<br>
 +
ext_Subrutinas.conf<br>
 +
ext_Subrutinas_Enrutamiento.conf<br>
 +
ext_Subrutinas_Estadisticas.conf<br>
 +
ext_Subrutinas_finLlamada.conf<br>
 +
ext_Subrutinas_Grabacion.conf<br>
 +
ext_Subrutinas_Multidispositivos.conf<br>
 +
ext_Subrutinas_nimitz.conf<br>
 +
ext_Subrutinas_Varias.conf<br>
 +
ext_Subscribe.conf<br>
 +
ext_Transfer.conf<br>
 +
ext_Transfer_ExtSIP.conf<br>
 +
ext_Transfer_TrunkInternos.conf<br>
 +
ext_TrunkInternos.conf<br>
 +
ext_TrunkInternos_Dial.conf<br>
 +
features.conf<br>
 +
festival.conf<br>
 +
followme.conf<br>
 +
func_odbc.conf<br>
 +
geolocation.conf<br>
 +
hep.conf<br>
 +
http.conf<br>
 +
iax.conf<br>
 +
iaxprov.conf<br>
 +
indications.conf<br>
 +
logger.conf<br>
 +
manager.conf<br>
 +
MDalertas.conf<br>
 +
MDcrash.conf<br>
 +
MDflow.conf<br>
 +
mdGen.conf<br>
 +
mdgh.conf<br>
 +
MDintz.conf<br>
 +
mdtap.conf<br>
 +
meetme.conf<br>
 +
mgcp.conf<br>
 +
minivm.conf<br>
 +
misdn.conf<br>
 +
modules.conf<br>
 +
motif.conf<br>
 +
musiconhold.conf<br>
 +
muted.conf<br>
 +
ooh323.conf<br>
 +
osp.conf<br>
 +
oss.conf<br>
 +
phone.conf<br>
 +
phoneprov.conf<br>
 +
pjproject.conf<br>
 +
pjsip.conf<br>
 +
pjsip_notify.conf<br>
 +
pjsip_wizard.conf<br>
 +
pqcti.conf<br>
 +
prometheus.conf<br>
 +
queuerules.conf<br>
 +
queues.conf<br>
 +
res_config_mysql.conf<br>
 +
res_config_sqlite3.conf<br>
 +
res_config_sqlite.conf<br>
 +
res_corosync.conf<br>
 +
res_curl.conf<br>
 +
res_fax.conf<br>
 +
res_ldap.conf<br>
 +
res_odbc.conf<br>
 +
resolver_unbound.conf<br>
 +
res_parking.conf<br>
 +
res_pgsql.conf<br>
 +
res_pktccops.conf<br>
 +
res_snmp.conf<br>
 +
res_stun_monitor.conf<br>
 +
rtp.conf<br>
 +
say.conf<br>
 +
sip.conf<br>
 +
sip.conf.orig<br>
 +
sip_Estatico.conf<br>
 +
sip_GENCUST.conf<br>
 +
sip_notify.conf<br>
 +
sip_notify.conf.orig<br>
 +
skinny.conf<br>
 +
sla.conf<br>
 +
smdi.conf<br>
 +
sorcery.conf<br>
 +
stasis.conf<br>
 +
statsd.conf<br>
 +
stir_shaken.conf<br>
 +
test_sorcery.conf<br>
 +
udptl.conf<br>
 +
unistim.conf<br>
 +
users.conf<br>
 +
voicemail.conf<br>
 +
voicemail.conf.orig<br>
 +
voximal.conf<br>
 +
vpb.conf<br>
 +
xmpp.conf<br>
 +
|  
 +
ext_Enrutador_Particular.conf<br>
 +
ext_FAX_Particular.conf<br>
 +
ext_Grabaciones_Particular.conf<br>
 +
ext_IA_Particular.conf<br>
 +
ext_InicioLlamada_CHAR_Particular.conf<br>
 +
ext_InicioLlamada_Chrome_Particular.conf<br>
 +
ext_InicioLlamada_Cisco_Particular.conf<br>
 +
ext_InicioLlamada_Dahdi_Particular.conf<br>
 +
ext_InicioLlamada_Emer_Particular.conf<br>
 +
ext_InicioLlamada_ExtSIP_Particular.conf<br>
 +
ext_InicioLlamada_GH_Particular.conf<br>
 +
ext_InicioLlamada_Particular.conf<br>
 +
ext_InicioLlamada_Pqcti_Particular.conf<br>
 +
ext_InicioLlamada_Teams_Particular.conf<br>
 +
ext_InicioLlamada_TrunkSIP_Particular.conf<br>
 +
ext_InicioLlamada_WS_Particular.conf<br>
 +
ext_MARCAR_DejarMensaje_Particular.conf<br>
 +
ext_MARCAR_Extension_Particular.conf<br>
 +
ext_MARCAR_Externo_Particular.conf<br>
 +
ext_MARCAR_Facilidad_Particular.conf<br>
 +
ext_MARCAR_SalasConfAvan_Particular.conf<br>
 +
ext_MARCAR_SalasConf_Particular.conf<br>
 +
ext_MARCAR_VDN_Alertas_Particular.conf<br>
 +
ext_MARCAR_VDN_Particular.conf<br>
 +
ext_mdGen_Particular.conf<br>
 +
ext_MDtel_Particular.conf<br>
 +
ext_Multidispositivo_Particular.conf<br>
 +
ext_Subrutinas_Particular.conf<br>
 +
ext_TrunkInternos_Particular.conf
 +
|
 +
asterisk_WEB.conf<br>
 +
ext_MARCAR_VDN_WEB_9000.conf<br>
 +
ext_MARCAR_VDN_WEB_9001.conf<br>
 +
ext_MARCAR_VDN_WEB_9002.conf<br>
 +
ext_MARCAR_VDN_WEB.conf<br>
 +
ext_MDtel_WEB.conf<br>
 +
MDalertas_WEB.conf<br>
 +
musiconhold_WEB.conf<br>
 +
queues_WEB.conf<br>
 +
sip_trunkExt_WEB.conf<br>
 +
sip_trunkInt_WEB.conf
 +
|}
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Dialplan VIVAit]][[#Dialplan VIVAit | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
 +
 
 +
===== Dialplan  '''''VIVA'''it Suite'' =====
 +
<br><br>
 +
A continuación se muestran las tablas con los ficheros de configuración correspondientes al '''''Dialplan ACD'''''.
 +
<br><br>
 +
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
 
|-
 
|-
|to_solicitud||Timeout de solicitud||
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | '''GENERALES'''
|-
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | '''PARTICULARES'''
|to_desconexion||Timeout de desconexión||
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | '''WEB'''
|-
 
|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||
 
 
|-
 
|-
 +
|
 +
acl.conf<br>
 +
adsi.conf<br>
 +
agents.conf<br>
 +
alarmreceiver.conf<br>
 +
alsa.conf<br>
 +
amd.conf<br>
 +
app_mysql.conf<br>
 +
app_skel.conf<br>
 +
ari.conf<br>
 +
ast_debug_tools.conf<br>
 +
asterisk.conf<br>
 +
calendar.conf<br>
 +
ccss.conf<br>
 +
cdr_adaptive_odbc.conf<br>
 +
cdr_beanstalkd.conf<br>
 +
cdr.conf<br>
 +
cdr_custom.conf<br>
 +
cdr_manager.conf<br>
 +
cdr_mysql.conf<br>
 +
cdr_odbc.conf<br>
 +
cdr_pgsql.conf<br>
 +
cdr_sqlite3_custom.conf<br>
 +
cdr_syslog.conf<br>
 +
cdr_tds.conf<br>
 +
cel_beanstalkd.conf<br>
 +
cel.conf<br>
 +
cel_custom.conf<br>
 +
cel_odbc.conf<br>
 +
cel_pgsql.conf<br>
 +
cel_sqlite3_custom.conf<br>
 +
cel_tds.conf<br>
 +
chan_dahdi.conf<br>
 +
chan_mobile.conf<br>
 +
cli_aliases.conf<br>
 +
cli.conf<br>
 +
cli_permissions.conf<br>
 +
codecs.conf<br>
 +
confbridge.conf<br>
 +
config_test.conf<br>
 +
console.conf<br>
 +
dbsep.conf<br>
 +
dnsmgr.conf<br>
 +
dsp.conf<br>
 +
dundi.conf<br>
 +
enum.conf<br>
 +
extconfig.conf<br>
 +
ext_Enrutador.conf<br>
 +
extensions.conf<br>
 +
extensions.conf.orig<br>
 +
extensions_minivm.conf<br>
 +
ext_FAX.conf<br>
 +
ext_Grabaciones.conf<br>
 +
ext_IA.conf<br>
 +
ext_InicioLlamada_CHAR.conf<br>
 +
ext_InicioLlamada_Chrome.conf<br>
 +
ext_InicioLlamada_Cisco.conf<br>
 +
ext_InicioLlamada.conf<br>
 +
ext_InicioLlamada_Dahdi.conf<br>
 +
ext_InicioLlamada_Emer.conf<br>
 +
ext_InicioLlamada_ExtSIP.conf<br>
 +
ext_InicioLlamada_ExtSIP_MDTAPREC.conf<br>
 +
ext_InicioLlamada_GH.conf<br>
 +
ext_InicioLlamada_Pqcti.conf<br>
 +
ext_InicioLlamada_Teams.conf<br>
 +
ext_InicioLlamada_TrunkSIP.conf<br>
 +
ext_InicioLlamada_WS.conf<br>
 +
ext_MARCAR_ColaCentralita.conf<br>
 +
ext_MARCAR_ColaCentralita_Dial.conf<br>
 +
ext_MARCAR_Cola.conf<br>
 +
ext_MARCAR_Cola_Dial.conf<br>
 +
ext_MARCAR.conf<br>
 +
ext_MARCAR_DejarMensaje.conf<br>
 +
ext_MARCAR_DejarMensaje_Dial.conf<br>
 +
ext_MARCAR_Extension.conf<br>
 +
ext_MARCAR_Extension_Dial.conf<br>
 +
ext_MARCAR_Externo.conf<br>
 +
ext_MARCAR_Externo_Dial.conf<br>
 +
ext_MARCAR_Facilidad.conf<br>
 +
ext_MARCAR_Facilidad_Dial.conf<br>
 +
ext_MARCAR_Facilidad_nimitz.conf<br>
 +
ext_MARCAR_LeerMensaje.conf<br>
 +
ext_MARCAR_LeerMensaje_Dial.conf<br>
 +
ext_MARCAR_Nodo.conf<br>
 +
ext_MARCAR_Nodo_Dial.conf<br>
 +
ext_MARCAR_SalasConfAvan.conf<br>
 +
ext_MARCAR_SalasConfAvan_Dial.conf<br>
 +
ext_MARCAR_SalasConf.conf<br>
 +
ext_MARCAR_SalasConf_Dial.conf<br>
 +
ext_MARCAR_Servicios.conf<br>
 +
ext_MARCAR_VDN_Alertas.conf<br>
 +
ext_MARCAR_VDN.conf<br>
 +
ext_MARCAR_VDN_Dial.conf<br>
 +
ext_MDtel.conf<br>
 +
ext_MDtel_Var.conf<br>
 +
ext_Multidispositivo.conf<br>
 +
ext_Subrutinas_Alertas.conf<br>
 +
ext_Subrutinas_AnchoBanda.conf<br>
 +
ext_Subrutinas_BD_Alertas.conf<br>
 +
ext_Subrutinas_BD.conf<br>
 +
ext_Subrutinas_BD_Facilidad.conf<br>
 +
ext_Subrutinas_Codec.conf<br>
 +
ext_Subrutinas_Colas.conf<br>
 +
ext_Subrutinas.conf<br>
 +
ext_Subrutinas_Enrutamiento.conf<br>
 +
ext_Subrutinas_Estadisticas.conf<br>
 +
ext_Subrutinas_finLlamada.conf<br>
 +
ext_Subrutinas_Grabacion.conf<br>
 +
ext_Subrutinas_Multidispositivos.conf<br>
 +
ext_Subrutinas_nimitz.conf<br>
 +
ext_Subrutinas_Varias.conf<br>
 +
ext_Subscribe.conf<br>
 +
ext_Transfer.conf<br>
 +
ext_Transfer_ExtSIP.conf<br>
 +
ext_Transfer_TrunkInternos.conf<br>
 +
ext_TrunkInternos.conf<br>
 +
ext_TrunkInternos_Dial.conf<br>
 +
features.conf<br>
 +
festival.conf<br>
 +
followme.conf<br>
 +
func_odbc.conf<br>
 +
geolocation.conf<br>
 +
hep.conf<br>
 +
http.conf<br>
 +
iax.conf<br>
 +
iaxprov.conf<br>
 +
indications.conf<br>
 +
logger.conf<br>
 +
manager.conf<br>
 +
MDalertas.conf<br>
 +
MDcrash.conf<br>
 +
MDflow.conf<br>
 +
mdGen.conf<br>
 +
mdgh.conf<br>
 +
MDintz.conf<br>
 +
mdtap.conf<br>
 +
meetme.conf<br>
 +
mgcp.conf<br>
 +
minivm.conf<br>
 +
misdn.conf<br>
 +
modules.conf<br>
 +
motif.conf<br>
 +
musiconhold.conf<br>
 +
muted.conf<br>
 +
ooh323.conf<br>
 +
osp.conf<br>
 +
oss.conf<br>
 +
phone.conf<br>
 +
phoneprov.conf<br>
 +
pjproject.conf<br>
 +
pjsip.conf<br>
 +
pjsip_notify.conf<br>
 +
pjsip_wizard.conf<br>
 +
pqcti.conf<br>
 +
prometheus.conf<br>
 +
queuerules.conf<br>
 +
queues.conf<br>
 +
queues.conf.orig<br>
 +
res_config_mysql.conf<br>
 +
res_config_sqlite3.conf<br>
 +
res_config_sqlite.conf<br>
 +
res_corosync.conf<br>
 +
res_curl.conf<br>
 +
res_fax.conf<br>
 +
res_ldap.conf<br>
 +
res_odbc.conf<br>
 +
resolver_unbound.conf<br>
 +
res_parking.conf<br>
 +
res_pgsql.conf<br>
 +
res_pktccops.conf<br>
 +
res_snmp.conf<br>
 +
res_stun_monitor.conf<br>
 +
rtp.conf<br>
 +
say.conf<br>
 +
sip.conf<br>
 +
sip_Estatico.conf<br>
 +
sip_GENCUST.conf<br>
 +
sip_notify.conf<br>
 +
sip_notify.conf.orig<br>
 +
skinny.conf<br>
 +
sla.conf<br>
 +
smdi.conf<br>
 +
sorcery.conf<br>
 +
stasis.conf<br>
 +
statsd.conf<br>
 +
stir_shaken.conf<br>
 +
test_sorcery.conf<br>
 +
udptl.conf<br>
 +
unistim.conf<br>
 +
users.conf<br>
 +
voicemail.conf<br>
 +
voicemail.conf.orig<br>
 +
voximal.conf<br>
 +
vpb.conf<br>
 +
xmpp.conf<br>
 +
|
 +
ext_Enrutador_Particular.conf<br>
 +
ext_FAX_Particular.conf<br>
 +
ext_Grabaciones_Particular.conf<br>
 +
ext_IA_Particular.conf<br>
 +
ext_InicioLlamada_CHAR_Particular.conf<br>
 +
ext_InicioLlamada_Chrome_Particular.conf<br>
 +
ext_InicioLlamada_Cisco_Particular.conf<br>
 +
ext_InicioLlamada_Dahdi_Particular.conf<br>
 +
ext_InicioLlamada_Emer_Particular.conf<br>
 +
ext_InicioLlamada_ExtSIP_Particular.conf<br>
 +
ext_InicioLlamada_GH_Particular.conf<br>
 +
ext_InicioLlamada_Particular.conf<br>
 +
ext_InicioLlamada_Pqcti_Particular.conf<br>
 +
ext_InicioLlamada_Teams_Particular.conf<br>
 +
ext_InicioLlamada_TrunkSIP_Particular.conf<br>
 +
ext_InicioLlamada_WS_Particular.conf<br>
 +
ext_MARCAR_DejarMensaje_Particular.conf<br>
 +
ext_MARCAR_Extension_Particular.conf<br>
 +
ext_MARCAR_Externo_Particular.conf<br>
 +
ext_MARCAR_Facilidad_Particular.conf<br>
 +
ext_MARCAR_SalasConfAvan_Particular.conf<br>
 +
ext_MARCAR_SalasConf_Particular.conf<br>
 +
ext_MARCAR_VDN_Alertas_Particular.conf<br>
 +
ext_MARCAR_VDN_Particular.conf<br>
 +
ext_mdGen_Particular.conf<br>
 +
ext_MDtel_Particular.conf<br>
 +
ext_Multidispositivo_Particular.conf<br>
 +
ext_Subrutinas_Particular.conf<br>
 +
ext_TrunkInternos_Particular.conf
 +
|
 +
asterisk_WEB.conf<br>
 +
ext_MARCAR_VDN_WEB_9000.conf<br>
 +
ext_MARCAR_VDN_WEB_9001.conf<br>
 +
ext_MARCAR_VDN_WEB_9002.conf<br>
 +
ext_MARCAR_VDN_WEB.conf<br>
 +
ext_MDtel_WEB.conf<br>
 +
MDalertas_WEB.conf<br>
 +
musiconhold_WEB.conf<br>
 +
queues_WEB.conf<br>
 +
sip_trunkExt_WEB.conf<br>
 +
sip_trunkInt_WEB.conf
 
|}
 
|}
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Dialplan VIVAit]][[#Dialplan VIVAit | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
 +
=== Bases de datos (BBDD)===
 +
<br><br>
 +
La base de datos del sistema se basa en el motor de base de datos MariaDB, compatible con MySQL. <br>
 +
Constituye un elemento crítico de la plataforma, ya que múltiples procesos almacenan y recuperan información de ella de forma continua.<br>
 +
Gran parte de la comunicación e intercambio de información entre procesos se realiza a través de la base de datos, utilizando para ello distintas tablas del sistema.<br>
 +
El sistema puede disponer de diferentes instancias de base de datos, cuya función y configuración difiere notablemente:
 +
<br><br>
 +
: [[#BBDD Tiempo Real (DBTR) | Base de datos de tiempo real, DBTR]]
 +
: [[#BBDD Réplica (DBHIST) | Base de datos de histórica, DBHIST]]
 +
: [[#BBDD de copia (DBCopia) | Base de datos copia local, DBCopia]]
 +
<br><br>
 +
La estructura que tiene la BBDD del sistema '''''VIVA'''it'' se puede consultar [[Base de datos|aquí]].<br>
 +
Para más información sobre MariaDB consultar [https://mariadb.com/docs la documentación de MariaDB].
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
 
+
==== BBDD Tiempo Real (DBTR) ====
 
+
<br><br>
 +
En la base de datos de tiempo real se insertan datos todos los procesos del sistema, y se realizan los cambios en configuración utilizando como herramienta el Portal de Administración y la aplicación de Call Center '''''VIVA'''it Supervisor''.<br>
 +
De la base de datos de tiempo real leen los procesos que requieren información. Además de las aplicaciones:
 
<br><br>
 
<br><br>
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.Volver al índice]
+
: * '''''VIVA'''''it Supervisor, para reporting de tiempo real<br>
 +
: * '''''VIVA'''''it Tracker, para datos de llamadas y grabaciones<br>
 +
: * PanelWeb<br>
 +
: * Datos de sesión de '''''VIVA'''''it Desk<br>
 +
: * Monitorización Zabbix<br>
 +
: * Otros
 +
<br><br>
 +
Desde el portal de administración se escriben en DBTR las configuraciones realizadas en '''''VIVA'''it''.
 +
<br><br>
 +
Para cuando la BDTR contienen un número masivo de datos, existe un script que borra el contenido de ciertas tablas (tablas DAT_) dejando solamente datos de un cierto número de días configurable.<br>
 +
Este script se llama ''borraRegistrosNimitz.pl'', y se encuentra en el nodo donde está instalada DBTR.<br>
 +
Para más información consultar el apartado [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Howto%27s#Como_borrar_contenido_de_la_tabla_BDTR_con_el_script_borraRegistrosNimitz.pl Hotows]<br>
 +
Por defecto los registros se mantienen 90 días.
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Bases de datos (BBDD)]][[#Bases de datos (BBDD) | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 
<br><br>
 
<br><br>
  
 +
==== BBDD Réplica (DBHIST) ====
 +
<br><br>
 +
DBHIST es una réplica en tiempo real de DBTR.<br>
 +
Mediante la replicación de MariaDB, todos los cambios realizados en DBTR se copian automáticamente en DBHIST, manteniendo ambas bases de datos sincronizadas. <br>
 +
Esto permite disponer de una copia actualizada de la información para consultas, análisis histórico y como respaldo ante posibles incidencias en la base de datos principal.
 +
<br><br>
 +
El mecanismo se basa en la reproducción continua de los eventos registrados en el ''binary log'' de DBTR
 +
    /usr/bin/mariadb-binlog
 +
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 DBTR.<br>
 +
Entre estos procesos están los que se invocan desde portales de supervisión.<br>
 +
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.<br>
 +
Se pueden configurar tantas réplicas como sea necesario para distribuir la carga de procesos intensivos y evitar que afecten al rendimiento del sistema. No obstante, en una implantación estándar normalmente se utilizará una única réplica.<br>
 +
Algunos procesos que utilizan la base de datos de réplica son:
 +
<br><br>
 +
: • Portal '''''VIVA'''''it Supervisor<br>
 +
: • Portal '''''VIVA'''''it Tracker<br>
 +
: • Portal Tracker WEB<br>
 +
: • '''''VIVA'''''it Reporting<br>
 +
: • App Gestor de llamadas<br>
 +
: • Histórico en tiempo real de la app '''''VIVA'''''it Supervisor
 +
<br><br>
 +
<div style="text-align: center;">
 +
{| class="wikitable" style="margin: 0 auto; padding: 0.3cm; "
 +
! style = "background-color:#0099ff; color:#ffffff" |<center>'''''Importante'''''</center>
 +
|-
 +
|style="margin: 0 auto; padding: 0.3cm;" |El tipo de replica es unidireccional<br>
 +
ningún proceso, programa, aplicación, etc. escribe en DBHIST; de alla solo se extrae información
 +
|}
 +
</div>
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Bases de datos (BBDD)]][[#Bases de datos (BBDD) | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
<!--
+
===== Funcionamiento de la replica =====
==== intz-gh ====
+
<br><br>
 
+
El funcionamiento de DBTHIST es el siguiente:
intz-gh es un demonio que permite tanto la monitorizacion de extensiones (BLFs), como la activación de retrollamadas entre distintos nodos.
+
<br><br>
 
+
: 1. Un cliente inserta, modifica o elimina datos en la base principal (DBTR). <br>
 
+
: 2. MariaDB registra cada cambio en el Binary Log (binlog). <br>
'''Comandos desde consola de asterisk'''
+
: 3. La réplica (DBHIST) se conecta a la base principal y lee esos eventos. <br>
 
+
: 4. La réplica almacena temporalmente los eventos en el Relay Log. <br>
mdgh show
+
: 5. Un proceso de réplica ejecuta esos eventos sobre su propia base de datos.<br>
 
+
: 6. Ambas bases permanecen sincronizadas con un pequeño retardo, normalmente de milisegundos o pocos segundos.
Uso: mdgh show [config | exten <exten_num> | enla <peer>]]
+
<br><br>
 
+
[[File:DBTR-DBHIST_V51.png|400px|center|thumb|link=]]
* '''Ejemplo'''
+
<br><br>
 
+
<div style="
mdgh show config
+
  text-align:right;
mdgh Configuracion:  
+
  margin-top:20px;
+
  padding:8px;
  debug=no
+
  border:1px solid #ccc;
  retro_hay=yes
+
  background-color:#f9f9f9;
  subscripcion_hay=yes
+
  border-radius:6px;
  rest_red_ip=255.255.255.255
+
  display:inline-block;
  rest_red_msk=255.255.255.255
+
">
  rest_puerto_escucha=8090
+
[[File:flecha_verde.png|20px|link=#Bases de datos (BBDD)]][[#Bases de datos (BBDD) | Volver arriba]]
  retro_exten_tech=SIP
+
</div>
  retro_contexto=Cen_InicioLlamada_GHRetro
+
<div style="
  retro_to_descolgar=30 s
+
  text-align:right;
  retro_A_cartel_fmt='retro: %s
+
  margin-top:20px;
 
+
  padding:8px;
mdgh show exten 6146
+
  border:1px solid #ccc;
+
  background-color:#f9f9f9;
mdgh Datos de la extension 6146:  
+
   border-radius:6px;
+
  display:inline-block;
   Datos en intz-gh:  
+
">
    ESTADO=NOT_INUSE
+
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
    INUSE=0
+
</div>
    RINGING=0
+
<div style="
    TS=1535609682
+
  text-align:right;
    HACE=1171
+
  margin-top:20px;
 
+
  padding:8px;
mdgh show en la Trunk_MDtel
+
  border:1px solid #ccc;
 
+
  background-color:#f9f9f9;
mdgh Datos del enlace Trunk_MDtel:  
+
   border-radius:6px;
+
  display:inline-block;
   Datos en intz-gh:  
+
">
    INUSE=0
+
[[File:casa.png|20px|link=#]][[# | Página Principal]]
    RINGING=0
+
</div>
    TS=1535610093
+
<br><br>
    HACE=834
 
  
 +
===== Configuración básica de la replica =====
 +
<br><br>
 +
Para una réplica DBTR → DBHIST usando GTID (Identificador Global de Transacción), se debe trabajar en los dos servidores que constituyen el sistema de replica.
 +
<br><br>
 +
: • [[#Configuración en el servidor principal | Configuración en el servidor principal con DBTR ]]<br>
 +
: • [[#Configuración en el servidor secundario| Configuración en el servidor secundario con DBHIST ]]<br>
 +
<br><br>
  
'''Fichero de log'''
+
====== Configuración en el servidor principal ======
 +
<br><br>
 +
En el servidor master donde se sitúa DBTR.
 +
<br><br>
 +
: '''Paso 1.''' Editar configuración de mariaDB
 +
  #cat /etc/mysql/my.cnf
 +
      ..... 
 +
    [mysqld]
 +
      '''server-id=1    # Identificador único del servidor'''
 +
      binlog_format=ROW
 +
: '''Paso 2.''' Verificar, desde consola de MariaDB, que GTID y binlog están habilitados:
 +
    #mysql -u root -p
 +
    SQL
 +
      SHOW VARIABLES LIKE 'log_bin';
 +
      SHOW VARIABLES LIKE 'gtid%';
 +
[[File:DBTR_logbin_V5.1.png|1500px|center|thumb|link=]]
 +
<br><br>
 +
: '''Paso 3.''' Crear un usuario concederle permisos de replicación:
 +
    #mysql -u root -p
 +
    SQL
 +
      MariaDB [(none)]> CREATE USER 'replicador'@'%' IDENTIFIED BY 'psw_replicador';
 +
      MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'replicador'@'%';
 +
comprobar resultado
 +
      MariaDB [(none)]> SHOW GRANTS FOR 'replicador'@'%';
 +
[[File:DBTR_replicador_V5.1.png|1500px|center|thumb|link=]]
 +
<br><br>
 +
: '''Paso 4.''' Obtener una copia consistente:
 +
        #mysqldump -u root -p --single-transaction --routines --triggers nimitz > nimitz_backup.sql
 +
el fichero backup.sql se crea en el directorio desde el que se invoca el comando.
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Bases de datos (BBDD)]][[#Bases de datos (BBDD) | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
/var/log/intz-gh.log
+
====== Configuración en el servidor secundario ======
 +
<br><br>
 +
En el servidor slave donde se sitúa DBHIST.
 +
<br><br>
 +
: '''Paso 1.''' Editar configuración de mariaDB
 +
  #cat /etc/mysql/my.cnf
 +
      ..... 
 +
    [mysqld]
 +
      '''server-id=2    # Identificador único del servidor'''
 +
      binlog_format=ROW
 +
: '''Paso 2.''' Restauran la copia realizada anteriormente en DBTR:
 +
    #mysql -u root -p < nimitz_backup.sql
 +
previamente hay que colocar el fichero backup.sql en el directorio desde el que se invoca el comando.
 +
<br><br>
 +
: '''Paso 3.''' Desde la consola de MaríaDB configurar la conexión con el servidor principal:
 +
    #mysql -u root -p
 +
    SQL
 +
      MariaDB [(none)]> STOP SLAVE;
 +
      MariaDB [(none)]> CHANGE MASTER TO
 +
      MariaDB [(none)]> MASTER_HOST='DBTR',
 +
      MariaDB [(none)]> MASTER_USER='replicador',
 +
      MariaDB [(none)]> MASTER_PASSWORD='psw_replicador',
 +
      MariaDB [(none)]> MASTER_PORT=3306,
 +
      MariaDB [(none)]> MASTER_USE_GTID=slave_pos;
 +
      MariaDB [(none)]> START SLAVE;
 +
: '''Paso 4.''' Verificar el estado:
 +
    SQL
 +
      MariaDB [(none)]> show slave status\G
 +
para analizar la información mostrada consultar [[#Comprobar sincronización DBTR - DBHIST | el estado de la réplica]].
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Bases de datos (BBDD)]][[#Bases de datos (BBDD) | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
 +
==== BBDD de copia (DBCopia) ====
 +
<br><br>
 +
A efectos de asegurar el funcionamiento, y como medida de contingencia ante un problema puntual de comunicación con la DBTR, en cada nodo se dispone de una BD de copia local.<br>
 +
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.<br>
 +
Esta base de datos se llama '''nimitzCopia'''.
 +
<br><br>
 +
Solo se activará cuando ocurra el problema descrito, el cual impide el acceso a los datos. <br>
 +
Su finalidad es mantener un nivel mínimo de servicio para la empresa mientras se resuelve la incidencia.
 +
<br><br>
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Bases de datos (BBDD)]][[#Bases de datos (BBDD) | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
 +
 +
===== Sincronización DBTR - DBCopia =====
 +
<br><br>
 +
Con el fin de mantener DBCopia sincronizada con DBTR, se emplean dos scripts. <br>
 +
El primero genera una copia de seguridad de DBTR y el segundo restaura esa copia en DBCopia localmente en cada nodo en el que existe esta base de datos.<br>
 +
Estos procesos son:
 +
<br><br>
 +
'''bdCentral.sh'''
 +
<br><br>
 +
Es el encargado de realizar la copia de seguridad en el nodo donde resida DBTR.<br>
 +
Tiene un archivo de configuración ''bdCentral.conf'' en el que hay un parámetro (IGNORE_TABLAS) que indica las tablas de las que NO se realizará copia de seguridad. <br>
 +
Toda tabla que no se indique formará parte de la copia de seguridad. <br>
 +
El resultado de su ejecución se puede monitorizar en
 +
    /var/log/bdCentral.log
 +
[[File:copia_dbtr_V5.1.png|1500px|center|thumb|link=]]
 +
<br><br>
 +
'''bdNodo.sh'''
 +
<br><br>
 +
Corriendo en cada nodo que tenga DBCopia, es el encargado de descargar la copia de seguridad a cada nodo donde haya que restaurarla en local. <br>
 +
Tiene un archivo de configuración ''bdNodo.conf''. <br>
 +
Vuelca los resultados en
 +
  /var/log/bdNodo.log
 +
[[File:copia_dbcopia_V5.1.png|1500px|center|thumb|link=]]
 +
El fichero de backup se copia mediante el usuario ''sincroniza'', que deberá poder acceder sin contraseña al servidor donde reside DBTR, que es donde se realiza la copia de backup.
 +
<br><br>
 +
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".
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Bases de datos (BBDD)]][[#Bases de datos (BBDD) | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
 +
 +
==== Diagnósticos y operaciones sobre bases de datos ====
 +
<br><br>
 +
Además de las comprobaciones que se pueden realizar sobre DBCopia, vistas más[[#Sincronización DBTR - DBCopia | arriba]], se pueden realizar algunas comporbaciones básicas sobres DBTR y DBHIST para comprobar que están realizando su función adecuadamente.<br>
 +
Como operaciones básicas se pueden realizar:<br>
 +
: • [[#Estado de una base de datos | Comprobar el estado de DBTR]]<br>
 +
: • [[#Estado de una base de datos | Comprobar el estado de DBHIST]]<br>
 +
: • [[#Comprobar sincronización DBTR - DBHIST | Comprobar el estado de la réplica]]
 +
: • [[#Sincronización DBTR - DBCopia | Comprobar el estado de la copia]]
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Bases de datos (BBDD)]][[#Bases de datos (BBDD) | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
 +
 +
===== Estado de una base de datos =====
 +
<br><br>
 +
Para comprobar si la base de datos está arrancada se puede utilizar el comand
 +
    ps aux
 +
Si la base de datos está arrancada y funcionando correctamente se mostrará en el terminal algo parecedo a esto
 +
<br><br>
 +
[[File:ps-aux_V51.png|1500px|center|thumb|link=]]
 +
<br><br>
 +
Por el contrario, si la base de datos presenta algún problema el mensaje mostrado una información diferente, como puede ser:
 +
[[File:ps-aux_mal_V51.png|1500px|center|thumb|link=]]
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Bases de datos (BBDD)]][[#Bases de datos (BBDD) | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
'''Fichero de configuracion'''
+
===== Comprobar sincronización DBTR - DBHIST =====
 
+
<br><br>
/etc/MDtel/intz-gh.conf
+
Para verificar que la base de réplica está sincronizada con la base de datos en tiempo real basta con acudir al comando sql:
 
+
    show master status
 
+
realizado desde DBTR, y
'''Campos intz-gh.conf'''
+
    show slave status
 
+
realizado desde DBHIST.
# Los nombres no pueden tener numeros.
+
<br><br>
# Si el valor de una cadena contiene espacios, se pondra entre comillas dobles.
+
'''Ejemplo'''
# Los valores comentados indican valores por defecto.
+
<br><br>
 
+
Analizando el resultado del siguiente comando, ejecutado desde la replica, se puede averiguar el estado de sincronización entre DBTR y DBHIST.
base
+
    show slave status\G.
 
+
<br><br>
cfg
+
[[File:status_slave_V51.png|1500px|center|thumb|link=]]
{
+
<br><br>
soy_demonio = 1
+
A continuación se describe el significado de cada parámetro.
hay_syslog = 0
+
{| class="wikitable" style="margin-left:auto; margin-right:auto; border:none;"
# Archivo con identificador de proceso: (-: /var/run/intz-nimitz.pid)
+
|-
archivo_pid = -
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Parámetro
# Archivo_traza: (-: stdout o /var/log/intz-nimitz.log si soy_demonio)
+
! align=center style="padding:0.5cm; background-color:#0099ff; color:white;" | Significado
# No se usa si se activa hay_syslog
+
|-
archivo_traza = -
+
| style="padding:0.3cm; font-weight:bold;" | Slave_IO_State
}
+
| style="padding:0.3cm;"                  | Estado actual del hilo de E/S (IO) encargado de conectarse al maestro y recibir los eventos de replicación.
cfg_recarga
+
|-
{
+
| style="padding:0.3cm; font-weight:bold;" | Master_Host
# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
+
| style="padding:0.3cm;"                  | Nombre o dirección IP del servidor maestro.
nivel_traza = 3
+
|-
pruebas = 1
+
| style="padding:0.3cm; font-weight:bold;" | Master_User
hay_flush_traza = 1
+
| style="padding:0.3cm;"                  | Usuario utilizado para la conexión de replicación al maestro.
# traza_milisegundos = 1
+
|-
}
+
| style="padding:0.3cm; font-weight:bold;" | Master_Port
sis
+
| style="padding:0.3cm;"                  | Puerto TCP utilizado para la conexión con el maestro.
{
+
|-
# No se usa. No modificar
+
| style="padding:0.3cm; font-weight:bold;" | Connect_Retry
subsistema = 0
+
| style="padding:0.3cm;"                  | Intervalo, en segundos, entre intentos de reconexión al maestro.
}
+
|-
gmp
+
| style="padding:0.3cm; font-weight:bold;" | Master_Log_File
{
+
| style="padding:0.3cm;"                  | Fichero binlog del maestro que está siendo leído actualmente por el hilo IO.
# Numero de mensajes. No modificar
+
|-
num_msj = 256
+
| style="padding:0.3cm; font-weight:bold;" | Read_Master_Log_Pos
# Numero de buffer. No modificar
+
| style="padding:0.3cm;"                   | Posición dentro del binlog del maestro hasta la que se han leído eventos.
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
 
}
 
-->
 
 
 
===== Nuevo servicio en intz-nimitz 04.00.00  =====
 
 
 
 
 
 
 
Para las colas con extensiones multiterminal, se ha creado un ha creado un nuevo servicio en intz-nimitz 04.00.00.
 
 
 
La descripción de nuevo servicio es:
 
 
 
    multiTermGrupoSaltoRing
 
    . Devuelve la mascara con los terminales que tienen que sonar (ring) al estar la extension en una cola (queue, ringall).
 
    . par1 (extension)
 
    . Retornos posibles (ademas del los genericos) en ${MDintzRes}:
 
    .. OK: Todo correcto.
 
    .. KO: Ha habido un problema.
 
    . Retorno en MTERM (solo si OK): mascara con los terminales y su orden (ej: '33245289').
 
    . Retorno en MTERM_MENOR (solo si OK): mascara con los terminales y su orden, filtrando las de orden menor (ej: '00200200').
 
 
 
==== 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:
 
 
 
{| class="wikitable"
 
 
|-
 
|-
!Parámetro!!Descripción
+
| style="padding:0.3cm; font-weight:bold;" | Relay_Log_File
 +
| style="padding:0.3cm;"                  | Fichero relay log local que está siendo procesado.
 
|-
 
|-
|SIS/ver||Versión del proceso
+
| style="padding:0.3cm; font-weight:bold;" | Relay_Log_Pos
 +
| style="padding:0.3cm;"                  | Posición actual dentro del relay log.
 
|-
 
|-
|SIS/inic||Fecha de de arranque del proceso
+
| style="padding:0.3cm; font-weight:bold;" | Relay_Master_Log_File
 +
| style="padding:0.3cm;"                  | Binlog del maestro al que corresponden los eventos contenidos en el relay log actual.
 
|-
 
|-
|SIS/alarmas||Alarmas desde arranque
+
| style="padding:0.3cm; font-weight:bold;" | Slave_IO_Running
 +
| style="padding:0.3cm;"                  | Indica si el hilo IO está funcionando (Yes o No).
 
|-
 
|-
|SIS/ultAlar||Fecha de última alarma
+
| style="padding:0.3cm; font-weight:bold;" | Slave_SQL_Running
 +
| style="padding:0.3cm;"                  | Indica si el hilo SQL está funcionando (Yes o No).
 
|-
 
|-
|Gmp/msj||
+
| style="padding:0.3cm; font-weight:bold;" | Replicate_Do_DB
 +
| style="padding:0.3cm;"                  | Bases de datos que se replican explícitamente.
 
|-
 
|-
|Gmp/buf||
+
| style="padding:0.3cm; font-weight:bold;" | Replicate_Ignore_DB
 +
| style="padding:0.3cm;"                  | Bases de datos excluidas de la replicación.
 
|-
 
|-
|Gmp/tarea||
+
| style="padding:0.3cm; font-weight:bold;" | Replicate_Do_Table
 +
| style="padding:0.3cm;"                  | Tablas que se replican explícitamente.
 
|-
 
|-
|Tmp/uptime||Tiempo que lleva corriendo
+
| style="padding:0.3cm; font-weight:bold;" | Replicate_Ignore_Table
 +
| style="padding:0.3cm;"                  | Tablas excluidas de la replicación.
 
|-
 
|-
|mtr/mys||Si está conectado al MySQL
+
| style="padding:0.3cm; font-weight:bold;" | Replicate_Wild_Do_Table
 +
| style="padding:0.3cm;"                  | Patrón de tablas incluidas en la replicación mediante comodines.
 
|-
 
|-
|mtr/ocup||Porcentaje de ocupación
+
| style="padding:0.3cm; font-weight:bold;" | Replicate_Wild_Ignore_Table
 +
| style="padding:0.3cm;"                  | Patrón de tablas excluidas mediante comodines.
 
|-
 
|-
|mtr/planif||Contactos planificados Totales (Último minuto)
+
| style="padding:0.3cm; font-weight:bold;" | Last_Errno
 +
| style="padding:0.3cm;"                  | Código numérico del último error producido por la replicación.
 
|-
 
|-
|mtr/intento||Intentos totales (Ültimo minuto)
+
| style="padding:0.3cm; font-weight:bold;" | Last_Error
 +
| style="padding:0.3cm;"                  | Descripción textual del último error producido.
 
|-
 
|-
|}
+
| style="padding:0.3cm; font-weight:bold;" | Skip_Counter
 
+
| style="padding:0.3cm;"                  | Número de eventos que se han configurado para ser ignorados.
* Posee un fichero de configuración llamado ''motorSal.conf'' en la ruta '''/etc/MDtel/motorSal.conf''':
+
|-
 
+
| style="padding:0.3cm; font-weight:bold;" | Exec_Master_Log_Pos
#
+
| style="padding:0.3cm;"                  | Posición del binlog del maestro correspondiente al último evento ejecutado correctamente por el hilo SQL.
# Los nombres no pueden tener numeros
+
|-
# Si el valor de una cadena contiene espacios, se pondra entre comillas dobles
+
| style="padding:0.3cm; font-weight:bold;" | Relay_Log_Space
# Los valores comentados indican valores por defecto
+
| style="padding:0.3cm;"                  | Tamaño total ocupado por los relay logs almacenados localmente.
+
|-
base
+
| style="padding:0.3cm; font-weight:bold;" |Until_Condition
{
+
| style="padding:0.3cm;"                  | Condición utilizada para detener la replicación automáticamente.
cfg
+
|-
{
+
| style="padding:0.3cm; font-weight:bold;" | Until_Log_File
soy_demonio = 1
+
| style="padding:0.3cm;"                  | Binlog objetivo para una parada programada de la réplica.
hay_syslog = 0
+
|-
# Archivo con identificador de proceso: (-: /var/run/motorSal.pid)
+
| style="padding:0.3cm; font-weight:bold;" | Until_Log_Pos
archivo_pid = -
+
| style="padding:0.3cm;"                  | Posición objetivo para una parada programada de la réplica.
# Archivo_traza: (-: stdout o /var/log/motorSal.log si soy_demonio)
+
|-
# No se usa si se activa hay_syslog
+
| style="padding:0.3cm; font-weight:bold;" | Master_SSL_Allowed
archivo_traza = -
+
| style="padding:0.3cm;"                  | Indica si la conexión con el maestro utiliza SSL/TLS.
}
+
|-
cfg_recarga
+
| style="padding:0.3cm; font-weight:bold;" | Master_SSL_CA_File
{
+
| style="padding:0.3cm;"                  | Fichero CA utilizado para validar certificados SSL.
# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
+
|-
nivel_traza = 2
+
| style="padding:0.3cm; font-weight:bold;" | Master_SSL_CA_Path
pruebas = 0
+
| style="padding:0.3cm;"                  | Directorio que contiene certificados CA.
hay_flush_traza = 1
+
|-
# traza_milisegundos = 1
+
| style="padding:0.3cm; font-weight:bold;" | Master_SSL_Cert
}
+
| style="padding:0.3cm;"                  | Certificado utilizado por la réplica para autenticarse.
sis
+
|-
{
+
| style="padding:0.3cm; font-weight:bold;" | Master_SSL_Cipher
# No se usa. No modificar
+
| style="padding:0.3cm;"                  | Algoritmo de cifrado SSL utilizado en la conexión.
subsistema = 0
+
|-
}
+
| style="padding:0.3cm; font-weight:bold;" | Master_SSL_Key
gmp
+
| style="padding:0.3cm;"                  | Clave privada asociada al certificado SSL.
{
+
|-
# Numero de mensajes. No modificar
+
| style="padding:0.3cm; font-weight:bold;" | Seconds_Behind_Master
num_msj = 256
+
| style="padding:0.3cm;"                  | Retraso estimado de la réplica respecto al maestro en segundos.
# Numero de buffer. No modificar
+
|-
num_buf = 256
+
| style="padding:0.3cm; font-weight:bold;" | Master_SSL_Verify_Server_Cert
}
+
| style="padding:0.3cm;"                  | Indica si se verifica el certificado del servidor maestro.
  }
+
|-
 +
| style="padding:0.3cm; font-weight:bold;" | Last_IO_Errno
 +
| style="padding:0.3cm;"                  | Código del último error del hilo IO.
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | Last_IO_Error
 +
| style="padding:0.3cm;"                  | Descripción del último error del hilo IO.
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | Last_SQL_Errno
 +
| style="padding:0.3cm;"                  | Código del último error del hilo SQL.
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | Last_SQL_Error
 +
| style="padding:0.3cm;"                  | Descripción del último error del hilo SQL.
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | Replicate_Ignore_Server_Ids
 +
| style="padding:0.3cm;"                  | Lista de identificadores de servidores cuyos eventos se ignoran.
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | Master_Server_Id
 +
| style="padding:0.3cm;"                  | Identificador único (server-id) del servidor maestro.
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | Master_SSL_Crl
 +
| style="padding:0.3cm;"                  | Fichero de lista de revocación de certificados (CRL).
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | Master_SSL_Crlpath
 +
| style="padding:0.3cm;"                  | Directorio que contiene las listas CRL.
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | Using_Gtid
 +
| style="padding:0.3cm;"                  | Modo de uso de GTID en la replicación.
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | Gtid_IO_Pos
 +
| style="padding:0.3cm;"                  | Último GTID recibido desde el maestro.
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | Replicate_Do_Domain_Ids
 +
| style="padding:0.3cm;"                  | Dominios GTID que se replican explícitamente.
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | Replicate_Ignore_Domain_Ids
 +
| style="padding:0.3cm;"                  | Dominios GTID excluidos de la replicación.
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | Parallel_Mode
 +
| style="padding:0.3cm;"                  | Modo de ejecución paralela de eventos en la réplica.
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | SQL_Delay
 +
| style="padding:0.3cm;"                  | Retardo configurado para aplicar eventos en la réplica.
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | SQL_Remaining_Delay
 +
| style="padding:0.3cm;"                  | Tiempo restante para aplicar el siguiente evento cuando existe retardo configurado.
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | Slave_SQL_Running_State
 +
| style="padding:0.3cm;"                  | Estado detallado del hilo SQL.
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | Slave_DDL_Groups
 +
| style="padding:0.3cm;"                  | Número de grupos de operaciones DDL procesados (CREATE, ALTER, DROP, etc.).
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | Slave_Non_Transactional_Groups
 +
| style="padding:0.3cm;"                  | Número de grupos de operaciones no transaccionales procesados.
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | Slave_Transactional_Groups
 +
| style="padding:0.3cm;"                  | Número de grupos de operaciones transaccionales procesados.
 +
|-
 +
| style="padding:0.3cm; font-weight:bold;" | Replicate_Rewrite_DB
 +
| style="padding:0.3cm;"                  | Reglas de reescritura de nombres de bases de datos durante la replicación.
 +
|-
 +
|}
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Bases de datos (BBDD)]][[#Bases de datos (BBDD) | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
 +
 
 +
=== Procesos propios '''''VIVA'''it'' ===
 +
<br><br>
 +
 
 +
 
 +
[[Archivo:Icono en construccion.png|600px|miniaturadeimagen|center|marco|En construcción]]
 +
 
 +
<br><br>
 +
==== 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
 
   
 
   
  supervision
+
  BDHOST=localhost
  {
+
  BDUSU=adminNimitz
puerto_escucha = 1120
+
BDCLAVE=imdtelnimitz
  }
+
  BDRUTA=/var/lib/MDtel/backupBDnimitz
 
   
 
   
supervision_recarga
 
{
 
to_periodo = 60
 
}
 
 
   
 
   
  mysql
+
  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 
hay_mysql = 1
+
nimitz.DAT_ACUMULADOS_VDN  nimitz.DAT_ACUMULADOS_VDN_COLAS  nimitz.DAT_CONTACTOS_PREPARADOS 
host = localhost
+
nimitz.DAT_IVR_INTERACCIONES  nimitz.DAT_IVR_NODOS  nimitz.DAT_IVR_PAGOS_TARJETA  nimitz.DAT_IVR_RESULT_ENCUESTAS
usuario = nimitz
+
nimitz.DAT_LLAMADAS  nimitz.DAT_LOG  nimitz.DAT_MUESTRAS_COLAS  nimitz.DAT_SEGMENTOS  nimitz.DAT_SESIONES_AGENTES 
clave = phikau3iwCe4O0PP5b09ng==
+
nimitz.DAT_SESIONES_AGENTES_COLAS  nimitz.DAT_SESIONES_AGENTES_PAUSAS  nimitz.DAT_SESIONES_AGENTES_VDN 
base_datos = nimitz
+
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  
  motor
+
  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  
hay_motor = 1
+
  nimitz.DAT_SESIONES_AGENTES_VDN nimitz.DAT_TR_ACD_EXTENSIONES nimitz.DAT_TR_ACD_EXTEN_COLA nimitz.DAT_TR_COLAS  
ciclos_campanna_activa = 30
+
  nimitz.DAT_VALORACIONES)
  # 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:
 
  
 +
*A continuación se explica los campos mas relevantes del fichero de configuración bdCentral.conf.
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
!Campo !!Descripción !!Posibles valores (si aplica)
 
!Campo !!Descripción !!Posibles valores (si aplica)
 
|-
 
|-
|soy_demonio||Si corro como demonio o como proceso||1 demonio – 0 proceso
+
|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||
 
|-
 
|-
|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)||
+
 
 +
<br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
 +
 
 +
==== 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)
 +
 
 +
<br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0 Volver al índice]
 +
<br><br>
 +
 
 +
==== 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|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:
 +
{| class="wikitable"
 
|-
 
|-
|archivo_traza||# Archivo_traza: (-: stdout o /var/log/motorSal.log si soy_demonio)||
+
!Parámetro!!Descripción
 
|-
 
|-
|nivel_traza||# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)||
+
|sis/ver||Versión del proceso
 
|-
 
|-
|pruebas||||
+
|sis/inic||Fecha de de arranque del proceso
 
|-
 
|-
|hay_flush_traza||||
+
|Sis/alarmas||Alarmas desde arranque
 
|-
 
|-
|traza_milisegundos||||
+
|Sis/ultAlar||Fecha de última alarma
 
|-
 
|-
|subsistema||# No se usa. No modificar||
+
|Gmp/msj||
 
|-
 
|-
|num_msj||# Numero de mensajes. No modificar||
+
|Gmp/buf||
 
|-
 
|-
|num_buf ||# Numero de buffer. No modificar||
+
|Gmp/tarea||
 
|-
 
|-
|puerto_escucha||Puerto de supervisión del demonio||
+
|Tmp/uptime||Tiempo que lleva el servicio activo
 
|-
 
|-
|to_periodo||Timeout para reconectar||
+
|Vic/identif||Etiqueta de identificación del servicio
 
|-
 
|-
|hay_mysql||Hay mysql||1 hay -0 no hay
+
|Vic/entorno||Entorno de base de datos
 
|-
 
|-
|host||IP o HOST máquina base de datos de tiempo real||
+
|Vic/conx||Conexiones activas/conexiones máximas
 
|-
 
|-
|usuario||Usuario acceso Base de datos de tiempo real||
+
|Vic/numConx||Conexiones totales (último minuto)
 
|-
 
|-
|clave||Clave usuario acceso base de datos de tiempo real||
+
|Mys/curro||Número de hilos contra la base de datos
 
|-
 
|-
|base_datos||Nombre de la base de datos||
+
|Mys/soli||Conexiones solicitadas (último minuto)
 
|-
 
|-
|hay_motor||Si hay campañas saliente o no||1 hay motor saliente – 0 no hay motor saliente
+
|Mys/soliErr||Conexiones solicitadas con error (último minuto)
 
|-
 
|-
|ciclos_campanna_activa||||
+
|Mys/soliEncol||Conexiones encoladas
 
|-
 
|-
|dir_estrategias ||# Directorio donde se almacenan las librerias dinámicas con las estrategias||
+
|Cache/cola|| Colas monitorizadas/
 
|-
 
|-
|to_ciclo||# Periodo de ejecución del ciclo del motor||
+
|Cache/vdn||VDN’s monitorizados
 
|-
 
|-
|hay_muestreo||||1 hay muestreo – 0 no hay muestreo
+
|Cache/usuExten||
|-
 
|}
 
 
 
* Respecto a los logs del motorSal consultar el siguiente apartado: [[Trazas motorSal]]. Los logs pueden verse en la ruta '''/var/log/motorSal.log'''
 
 
 
 
 
<br><br>
 
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
 
 
==== 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 '''''VIVA'''''it 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:
 
{| class="wikitable"
 
|-
 
!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||Extensiones/Extensiones/Extensiones monitorizadas|-
 
|-
 
|AMI/asig||
 
|-
 
|MYSQL/cnx||Conectado (1) a MySQL
 
|-
 
|MYSQL/ms||Tiempo de última operación en ejecutarse
 
 
|-
 
|-
 
|}
 
|}
Línea 3259: Línea 4373:
 
Como complemento a los diagnósticos:
 
Como complemento a los diagnósticos:
  
* Podremos examinar el fichero de configuración del proceso en '''/etc/MDtel/myAcdSuperv.cnf'''
+
* Podremos examinar el fichero de configuración del proceso en '''/etc/MDtel/intz-nimitz.conf'''
* Podremos examinar los logs del proceso en '''/var/log/myAcdSuperv.log'''
+
* Podremos examinar los logs del proceso en '''/var/log/intz-nimitz.log'''
  
 +
'''Fichero de configuración:'''
  
 
+
#
<br><br>
+
# Los nombres no pueden tener numeros
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0 Volver al índice]
+
  # Si el valor de una cadena contiene espacios, se pondra entre comillas dobles
<br><br>
+
# Los valores comentados indican valores por defecto
 
+
==== Proceso escoba ====
+
base
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'''''.
+
cfg
# Proceso escoba perteneciente o no a un servidor de grabación (recordCentral) llamado '''''escobaGrabsBd.pl'''''.
+
{
 
+
soy_demonio = 1
===== escobaGW.pl =====
+
hay_syslog = 0
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.
+
# Archivo con identificador de proceso: (-: /var/run/intz-nimitz.pid)
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''.
+
archivo_pid = -
 
+
# Archivo_traza: (-: stdout o /var/log/intz-nimitz.log si soy_demonio)
===== escobaGrabsBd.pl =====
+
  # No se usa si se activa hay_syslog
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:
+
archivo_traza = -
* En DAT_SEGMENTOS obtiene todos aquellos segmentos con grabaciones que dieron error, su estado tendrá valor 120.
+
}
 
+
cfg_recarga
<br><br>
+
{
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0 Volver al índice]
+
# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
<br><br>
+
nivel_traza = 3
* En DAT_LLAMADAS obtendremos todos los registros correspondiente al segmentos anteriores.
+
pruebas = 1
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.
+
hay_flush_traza = 1
 
+
}
==== recordCentral ====
+
sis
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''.
+
{
 
+
  # No se usa. No modificar
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.
+
subsistema = 0
 
+
}
En '''recordCentral''' pueden existir tres tipos de dispositivos NAS:
+
gmp
* Uno dedicado para las llamadas
+
{
* Uno dedicado para los segmentos
+
  # Numero de mensajes. No modificar
* Uno mixto para todas las llamadas y segmentos.
+
num_msj = 1024
 
+
  # Numero de buffer. No modificar
 
+
num_buf = 1024
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:
 
 
 
{| class="wikitable"
 
|-
 
! 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:
 
 
   
 
   
  #
+
  supervision
  # Configuracion de recordCentral.pl
+
  {
#
+
puerto_escucha = 1115
  # 0: Solo alarmas en archivo log - 1: alarmas y trazas
+
  }
$depurar = 1;
 
 
   
 
   
  # 0: Arranca como proceso - 1: arranca como demonio
+
  supervision_recarga
  $soyDemonio = 1;
+
  {
 +
to_periodo = 60
 +
}
 
   
 
   
  # Archivo de log ('': salida estandar)
+
  cache
  $logArch = '/var/log/record/recordCentral.log';
+
  {
 +
        hay_cache = 1
 +
}
 
   
 
   
  # Archivo para el pid (eliminando el .pid final)
+
cache_recarga
  $pidArch = '/var/run/record/recordCentral';
+
{
 +
  # 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
 +
  }
 
   
 
   
  # 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion)
+
  regexp
  $unaVezSolo = 0;
+
{
 +
hay_regexp = 1
 +
  }
 
   
 
   
  # Tiempo de espera en segundos cuando no hay conexion o cuando no hay llamadas
+
  regexp_recarga
  $toBucle = 10;
+
  {
 +
num_entradas = 32
 +
inc_entradas = 128
 +
max_entradas = 1024
 +
}
 
   
 
   
  # Bytes por segundo en archivos de grabaciones
+
  vivaitcall
  $bytesPorSegundo = 16000;
+
  {
 +
hay_vic = 1
 +
puerto_escucha = 5555
 +
identif = cms1
 +
entorno = nimitz
 +
max_conx = 128
 +
}
 
   
 
   
  # Bytes a leer en cada accceso a disco
+
vivaitcall_recarga
  $bytesLeerBuf = 1048576;
+
{
 +
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
 +
}
 +
}
 +
  }
 
   
 
   
  # Conexion de base de datos
+
enrutamiento
  $db='nimitz';
+
{
  $dbHost = 'BDTR';
+
hay_enrutamiento = 1
  $dbPort = '3306';
+
max_pre_ruta_regs = 4
  $dbUsuario = 'nimitz';
+
max_ruta = 4
  $dbClave = 'ivivanimitz';
+
max_ruta_desvios = 2
 +
  # Filtro de informacion de ancho de banda
 +
  # MYSDanchoBandaPasoNinguno      0
 +
  # MYSDanchoBandaPasoSoloDirectos 1
 +
  # MYSDanchoBandaPasoSoloEnPaso  2
 +
  # MYSDanchoBandaPasoTodos        3
 +
filtro_ancho_banda = 1
 +
  }
 
   
 
   
  # Configuracion de la supervision
+
  mysql
  $supPort = '1114';
+
  {
 +
hay_mysql = 1
 +
host = BDTR
 +
usuario = nimitz
 +
clave = phikau3iwCe4O0PP5b09ng==
 +
base_datos = nimitz
 +
bd_supervivencia = 0
 +
num_curro = 10
 +
}
 
   
 
   
  # Configuracion de archivos con grabaciones (Orig en nodo)
+
  mysql_recarga
  $grabHay = 0;
+
  {
$grabAudioCalidad = 32;
+
to_resp = 5
$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)
+
Los siguientes son los campos del fichero de configuración '''int-nimitz.conf''':
$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:
 
  
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
!Campo !!Descripción !!Posibles valores (si aplica)
+
|Variable a modificar||Comentarios||Posibles valores (si aplica)
 
|-
 
|-
|recordCentral.pconf|| ||  
+
|soy_demonio||Si corro como demonio o como proceso||1 demonio – 0 proceso
 
|-
 
|-
|Variable a modificar||Comentarios||
+
|hay_syslog||Si hay servidor de syslog||1 lo hay – 0 no lo hay
 
|-
 
|-
|$depurar||# 0: Solo alarmas en archivo log - 1: alarmas y trazas||
+
|archivo_pid||# Archivo con identificador de proceso: (-: /var/run/intz-nimitz.pid)||
 
|-
 
|-
|$soyDemonio||# 0: Arranca como proceso - 1: arranca como demonio||
+
|archivo_traza||# Archivo_traza: (-: stdout o /var/log/intz-nimitz.log si soy_demonio)||
 
|-
 
|-
|$logArch =||# Archivo de log ('': salida estandar)||
+
|nivel_traza||# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)||
 
|-
 
|-
|$pidArch||# Archivo para el pid (eliminando el .pid final)||
+
|pruebas||||
 
|-
 
|-
|$unaVezSolo||# 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion)||
+
|hay_flush_traza||||
 
|-
 
|-
|$toBucle||# Tiempo de espera en segundos cuando no hay conexion o cuando no hay llamadas||
+
|subsistema||# No se usa. No modificar||
 
|-
 
|-
|$bytesPorSegundo||# Bytes por segundo en archivos de grabaciones||
+
|num_msj||# Numero de mensajes. No modificar||
 
|-
 
|-
|$bytesLeerBuf||# Bytes a leer en cada accceso a disco||
+
|num_buf||# Numero de buffer. No modificar||
 
|-
 
|-
|$db||Nombre de la base de datos||
+
|puerto_escucha||Puerto de supervisión del demonio||
 
|-
 
|-
|$dbHost||IP o HOST máquina base de datos de tiempo real||
+
|to_periodo||Timeout para reconectar||
 
|-
 
|-
|$dbPort||Puerto de escucha de mysql||
+
|hay_cache||si guarda datos o no en cache||1 hay cache – 0 no hay cache
 
|-
 
|-
|$dbUsuario||Usuario acceso Base de datos de tiempo real||
+
|colas_to_vida||# to_vida = 0, no se almacenan entradas. to_vida > 0 en segundos||
 
|-
 
|-
|$dbClave||Clave usuario acceso base de datos de tiempo real||
+
|colas_num_entrada||Número de entradas correspondiente a las colas||
 
|-
 
|-
|$supPort ||Puerto de supervision del demonio||
+
|vdn_to_vida||# to_vida = 0, no se almacenan entradas. to_vida > 0 en segundos||
 
|-
 
|-
|$grabHay||Hay fase de enrutamiento o no||
+
|vdn_num_entrada||Número de entradas correspondiente a los VDN||
 
|-
 
|-
|$grabAudioCalidad||Calidad del audio ||
+
|hay_regexp||||
 
|-
 
|-
|$grabAudioFormato||Formato del archivo de grabacion||
+
|num_entradas||||
 
|-
 
|-
|$grabAudioExten||Extensión del archivo de grabacion||
+
|inc_entradas||||
 
|-
 
|-
|$grabAudioCifrado||Si el archivo de grabación va cifrado ||
+
|max_entradas||||
 
|-
 
|-
|$grabRutaUsaTimestamp||||
+
|hay_vic||||
 
|-
 
|-
|$grabRutaOrig||# Directorio donde se localizan las grabaciones de llamadas||
+
|puerto_escucha||Puerto de escucha a nivel de vivait-call||
 
|-
 
|-
|$grabRutaTmp||Directorio temporal de las grabaciones de llamadas||
+
|identif ||||
 
|-
 
|-
|$grabRutaDest||# Directorio Destino de las grabaciones de llamadas||
+
|entorno||Nombre base de datos||
 
|-
 
|-
|$grabRutaError||# Directorio  de las grabaciones de llamadas con error||
+
|max_conx||Número máximo de conexiones a la base de datos||
 
|-
 
|-
|$segmHay||Hay segmentos||1 hay segmentos – 0 no hay
+
|to_solicitud||Timeout de solicitud||
 
|-
 
|-
|$segmUmbralTiempo||||
+
|to_desconexion||Timeout de desconexión||
 
|-
 
|-
|$segmMargenTiempo||Tiempo que se coge antes y despues del segmento||
+
|ip||Dirección de red de escucha del intz-nimitz||
 
|-
 
|-
|$segmAudioCalidad||Calidad del audio ||
+
|msk ||Máscara de red de escucha del intz-nimitz||
 
|-
 
|-
|$segmAudioFormato||Formato del archivo de grabacion||
+
|ip||IP localhost||
 
|-
 
|-
|$segmAudioExten||Extensión del archivo de grabación||
+
|msk||Máscara localhost||
 
|-
 
|-
|$segmAudioCifrado||Si el archivo de grabación va cifrado ||1 se cifra – 0 no se cifra
+
|hay_enrutamiento||Hay fase de enrutamiento o no||1 hay enrutamiento – 0 no hay
 
|-
 
|-
|$segmRutaUsaTimestamp||||
+
|max_pre_ruta_regs||Número máximo de prerutas a cargar||
 
|-
 
|-
|$segmRutaTmp ||Ruta temporal||
+
|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||
 
|-
 
|-
|$segmRutaDest = ||Ruta donde se almacenan los archivos de grabación||
+
|clave||Clave usuario acceso base de datos||
 
|-
 
|-
|$segmRutaError||Ruta de los archivos de grabación con error||
+
|base_datos||Nombre de la base de datos||
 
|-
 
|-
|$tiposSegmentoGrabar||# Selección de tipos de segmento a grabar separados por comas ('' = todos)||
+
|bd_supervivencia||Hay o no base de datos de supervivencia||1 hay base de datos de supervivencia – 0 no hay
 
|-
 
|-
|$grabarRing||# Indica si se graba ring||1 se graba – 0 no se graba
+
|num_curro||Número de conexiones simultáneas a la base de datos||
 
|-
 
|-
|$segmExternoMinSegs||# Mínino número de segundos para generar segmento externo||
+
|to_resp||Timeout de respuesta||
 
|-
 
|-
 
|}
 
|}
  
  
<!--
 
:Se explican a continuación las variables más importantes del proceso RecordCentral:
 
  
# Conexion de base de datos
 
$db='nimitz';
 
$dbHost = 'BDTR';
 
$dbPort = '3306';
 
$dbUsuario = 'nimitz';
 
$dbClave = 'ivivanimitz';
 
  
# Configuracion de archivos con grabaciones (Orig en nodo)
+
<br><br>
$grabHay = 0;
+
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0 Volver al índice]
$grabAudioCalidad = 32;
+
<br><br>
$grabAudioFormato = 'ogg';
+
 
$grabAudioExten = 'ogg';
 
$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 = 'ogg';
 
$segmAudioExten = 'ogg';
 
$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 = '';
+
==== intz-gh ====
  
# Indica si se graba ring
+
intz-gh es un demonio que permite tanto la monitorizacion de extensiones (BLFs), como la activación de retrollamadas entre distintos nodos.
$grabarRing = 0;
 
  
-->
 
  
* Podremos examinar los logs del proceso en '''/var/log/recordCentral.log'''
+
'''Comandos desde consola de asterisk'''
<!-- En la versión 3.6.0. del instalador se adjuntan los siguientes archivos en el paquete recordCentral:
 
  
borraGrabaciones.pconf: Debe colocarse en /etc/MDtel y contiene los datos de acceso a BBDD así como los días de caducidad de las grabaciones.
+
mdgh show
borraGrabaciones.pl: El script. Se ejecuta con el archivo de configuración como parámetro (mueveGrabaciones.pl /etc/MDtel/mueveGrabaciones.pconf)
+
 
borraGrabaciones: Fichero cron. Contiene la programación del script. Debe colocarse en /etc/cron.d
+
Uso: mdgh show [config | exten <exten_num> | enla <peer>]]
-->
+
 
 +
* '''Ejemplo'''
 +
 
 +
mdgh show config
 +
mdgh Configuracion:  
 +
 +
  debug=no
 +
  retro_hay=yes
 +
  subscripcion_hay=yes
 +
  rest_red_ip=255.255.255.255
 +
  rest_red_msk=255.255.255.255
 +
  rest_puerto_escucha=8090
 +
  retro_exten_tech=SIP
 +
  retro_contexto=Cen_InicioLlamada_GHRetro
 +
  retro_to_descolgar=30 s
 +
  retro_A_cartel_fmt='retro: %s
 +
 
 +
mdgh show exten 6146
 +
 +
mdgh Datos de la extension 6146:
 +
 +
  Datos en intz-gh:
 +
    ESTADO=NOT_INUSE
 +
    INUSE=0
 +
    RINGING=0
 +
    TS=1535609682
 +
    HACE=1171
 +
 
 +
mdgh show en la Trunk_MDtel
  
<br><br>
+
mdgh Datos del enlace Trunk_MDtel:
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0 Volver al índice]
+
<br><br>
+
  Datos en intz-gh:  
 +
    INUSE=0
 +
    RINGING=0
 +
    TS=1535610093
 +
    HACE=834
  
==== 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 ''VIVA''it'''.
 
  
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.
+
'''Fichero de log'''
  
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'''.
+
/var/log/intz-gh.log
  
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.
+
'''Fichero de configuracion'''
  
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:
+
/etc/MDtel/intz-gh.conf
  
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
 
  
 +
'''Campos intz-gh.conf'''
  
La explicación de los campos se muestra en la tabla siguiente:
+
# Los nombres no pueden tener numeros.
{| class="wikitable"
+
# Si el valor de una cadena contiene espacios, se pondra entre comillas dobles.
|-
+
# Los valores comentados indican valores por defecto.
! 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:
+
base
* Podremos examinar el fichero de configuración del proceso en '''/etc/MDtel/recordNodo.pconf'''
+
 
:Se muestra a continuación el fichero de configuración:
+
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
  # Configuracion de recordNodo.pl
+
  {
#
+
puerto_escucha = 1116
  # 0: Solo alarmas en archivo log - 1: alarmas y trazas
+
  }
$depurar = 1;
 
 
   
 
   
  # 0: Arranca como proceso - 1: arranca como demonio
+
  supervision_recarga
  $soyDemonio = 1;
+
  {
 +
to_periodo = 60
 +
}
 
   
 
   
  # Archivo de log ('': salida estandar)
+
  regexp
  $logArch = '/var/log/record/recordNodo.log';
+
  {
 +
hay_regexp = 1
 +
}
 
   
 
   
  # Archivo para el pid (eliminando el .pid final)
+
  regexp_recarga
  $pidArch = '/var/run/record/recordNodo';
+
  {
 +
num_entradas = 32
 +
inc_entradas = 128
 +
max_entradas = 1024
 +
}
 
   
 
   
  # 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion)
+
  vivaitcall
  $unaVezSolo = 0;
+
{
 +
hay_vic = 1
 +
puerto_escucha = 5556
 +
identif = gh_000
 +
entorno = gh
 +
max_conx = 4
 +
  }
 
   
 
   
  # Tiempo de espera en segundos cuando no hay conexion o cuando no hay llamadas
+
vivaitcall_recarga
  $toBucle = 5;
+
{
 +
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
 +
}
 +
}
 +
  }
 
   
 
   
  # Tiempo de guarda en segundos desde D_HORA_FIN hasta que se procesa llamada
+
  mysql
  $toProcesar = 30;
+
  {
 +
hay_mysql = 1
 +
host = BDTR
 +
usuario = nimitz
 +
clave = phikau3iwCe4O0PP5b09ng==
 +
base_datos = nimitz
 +
}
 
   
 
   
  # Bytes por segundo en archivos de grabaciones
+
  mysql_recarga
  $bytesPorSegundo = 16000;
+
  {
 +
to_resp = 5
 +
}
 
   
 
   
  # Bytes a leer en cada accceso a disco
+
  gh1
  $bytesLeerBuf = 1048576;
+
  {
+
hay_gh1 = 1
  # Conexion de base de datos
+
  # umbrales para el numero de digitos de una extension
  $db='nimitz';
+
  # sirve para saber si un peer es una extension o un enlace
  $dbHost = 'BDTR';
+
exten_min_digi = 3
  $dbPort = '3306';
+
exten_max_digi = 8
  $dbUsuario = 'nimitz';
+
  # numero maximo de extensiones soportadas
  $dbClave = 'ivivanimitz';
+
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
 +
}
 
   
 
   
  # Configuracion de la supervision
+
gh1_recarga
  $supPort = '1113';
+
{
 +
# 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
 +
  }
 
   
 
   
  # Quien es mi nodo para filtrar grabaciones
+
  ias
  $miNodo = 2;
+
  {
+
hay_ias = 1
# Directorio donde se localizan las grabaciones
+
url = mdgh_rest
$grabRutaOrig = '/var/spool/asterisk/monitor';
+
puerto = 8090
$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';
 
 
   
 
   
 +
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
 +
}
 +
-->
 +
 +
===== Nuevo servicio en intz-nimitz 04.00.00  =====
 +
  
*A continuación se indican los campos del fichero:
 
  
 +
Para las colas con extensiones multiterminal, se ha creado un ha creado un nuevo servicio en intz-nimitz 04.00.00.
  
{| class="wikitable"
+
La descripción de nuevo servicio es:
|-
+
 
!Campo !!Descripción !!Posibles valores (si aplica)
+
    multiTermGrupoSaltoRing
 +
    . Devuelve la mascara con los terminales que tienen que sonar (ring) al estar la extension en una cola (queue, ringall).
 +
    . par1 (extension)
 +
    . Retornos posibles (ademas del los genericos) en ${MDintzRes}:
 +
    .. OK: Todo correcto.
 +
    .. KO: Ha habido un problema.
 +
    . Retorno en MTERM (solo si OK): mascara con los terminales y su orden (ej: '33245289').
 +
    . Retorno en MTERM_MENOR (solo si OK): mascara con los terminales y su orden, filtrando las de orden menor (ej: '00200200').
 +
 
 +
==== 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:
 +
 
 +
{| class="wikitable"
 
|-
 
|-
|$depurar||# 0: Solo alarmas en archivo log - 1: alarmas y trazas||
+
!Parámetro!!Descripción
 
|-
 
|-
|$soyDemonio||# 0: Arranca como proceso - 1: arranca como demonio||
+
|SIS/ver||Versión del proceso
 
|-
 
|-
|$logArch||# Archivo de log ('': salida estandar)||
+
|SIS/inic||Fecha de de arranque del proceso
 
|-
 
|-
|$pidArch||# Archivo para el pid (eliminando el .pid final)||
+
|SIS/alarmas||Alarmas desde arranque
 
|-
 
|-
|$unaVezSolo||# 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion)||
+
|SIS/ultAlar||Fecha de última alarma
 
|-
 
|-
|$toBucle||# Tiempo de espera en segundos cuando no hay conexion o cuando no hay llamadas||
+
|Gmp/msj||
 
|-
 
|-
|$toProcesar||# Tiempo de guarda en segundos desde D_HORA_FIN hasta que se procesa llamada||
+
|Gmp/buf||
 
|-
 
|-
|$bytesPorSegundo||# Bytes por segundo en archivos de grabaciones||
+
|Gmp/tarea||
 
|-
 
|-
|$bytesLeerBuf||# Bytes a leer en cada accceso a disco||
+
|Tmp/uptime||Tiempo que lleva corriendo
 
|-
 
|-
|$db||Nombre de la base de datos||
+
|mtr/mys||Si está conectado al MySQL
 
|-
 
|-
|$dbHost||IP o HOST máquina base de datos de tiempo real||
+
|mtr/ocup||Porcentaje de ocupación
 
|-
 
|-
|$dbPort||Puerto de escucha de mysql||
+
|mtr/planif||Contactos planificados Totales (Último minuto)
 
|-
 
|-
|$dbUsuario||Usuario acceso Base de datos de tiempo real||
+
|mtr/intento||Intentos totales (Ültimo minuto)
 
|-
 
|-
|$dbClave||Clave usuario acceso base de datos de tiempo real||
+
|}
|-
+
 
|$supPort||Puerto de supervision del demonio||
+
* Posee un fichero de configuración llamado ''motorSal.conf'' en la ruta '''/etc/MDtel/motorSal.conf''':
|-
+
 
|$miNodo||# Quien es mi nodo para filtrar grabaciones||
+
#
|-
+
# Los nombres no pueden tener numeros
|$grabRutaOrig||# Directorio donde se localizan las grabaciones||
+
# Si el valor de una cadena contiene espacios, se pondra entre comillas dobles
|-
+
# Los valores comentados indican valores por defecto
|$grabRutaDest ||Directorio destino de las grabaciones procesadas||
+
|-
+
base
|$grabRutaError||Directorio destino de las grabacionescon error||
+
{
|-
+
cfg
|$grabRutaUsaTimestamp||||
+
{
|-
+
soy_demonio = 1
|$grabLimiteSegs||# Tiempo en segundos limite a truncar en las grabaciones (0=sin limite)||
+
hay_syslog = 0
|-
+
# Archivo con identificador de proceso: (-: /var/run/motorSal.pid)
|$segmEliminarGrabacionTrato||# Indica si se procesan segmentos de tipo tipoSegmEliminarGrabacion y patron eliminacion||1 se procesa – 0 no se procesa
+
archivo_pid = -
|-
+
# Archivo_traza: (-: stdout o /var/log/motorSal.log si soy_demonio)
|$patronEliminarGrabacion||Patron de eliminacion||'/etc/MDtel/null.bin'--> para utilizar '''silencio'''
+
# No se usa si se activa hay_syslog
'/etc/MDtel/pito.slin'--> para utilzar un '''pitido''' (va asociado al fichero pito.slin).
+
archivo_traza = -
|-
+
}
|}
+
cfg_recarga
 
+
{
<!--
+
# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
:Se muestran a continuación las variables que son modificadas con mayor frecuencia:
+
nivel_traza = 2
# Conexion de base de datos
+
pruebas = 0
$db='nimitz';
+
hay_flush_traza = 1
$dbHost = 'BDTR';
+
# traza_milisegundos = 1
$dbPort = '3306';
+
}
$dbUsuario = 'nimitz';
+
sis
$dbClave = 'ivivanimitz';
+
{
 
+
# No se usa. No modificar
# Quien es mi nodo para filtrar grabaciones
+
subsistema = 0
$miNodo = 1;
+
}
 
+
gmp
# Indica si se procesan segmentos de tipo tipoSegmEliminarGrabacion y patron eliminación
+
{
$segmEliminarGrabacionTrato = 1;
+
# Numero de mensajes. No modificar
$patronEliminarGrabacion = '/etc/MDtel/null.bin';
+
num_msj = 256
 
+
# Numero de buffer. No modificar
 
+
num_buf = 256
 
+
}
-->
+
}
* Podremos examinar los logs del proceso en '''/var/log/recordNodo.log'''
+
 +
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:
  
==== Sercen ====
+
{| class="wikitable"
 
+
|-
Sercen (Servicios Centrales) es un demonio de VIVAit que provee servicios centralizados
+
!Campo !!Descripción !!Posibles valores (si aplica)
a muchos elementos de la arquitectura. Sirve para identificar a los usuarios y garantizar
+
|-
que los mismos sean quienes dicen ser.
+
|soy_demonio||Si corro como demonio o como proceso||1 demonio – 0 proceso
Puede haber varias instancias en el, y diferentes servicios pueden estar en diferentes
+
|-
Sercen
+
|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)||
Ejemplos de servicios:
+
|-
 
+
|archivo_traza||# Archivo_traza: (-: stdout o /var/log/motorSal.log si soy_demonio)||
'''- Autenticación, de factor simple o doble factor'''
+
|-
 
+
|nivel_traza||# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)||
'''- Integración con proveedores de autenticación'''
+
|-
 +
|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
 +
|-
 +
|}
  
'''- Click2talk (Demonio dentro de Vivait)'''
+
* Respecto a los logs del motorSal consultar el siguiente apartado: [[Trazas motorSal]]. Los logs pueden verse en la ruta '''/var/log/motorSal.log'''
  
  
Sercen permite autenticar un usuario (simple factor o doble factor), utilizando para ello
+
<br><br>
la base de datos de vivait y/u otro mecanismo externo, como puede ser el directorio
+
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
activo de Microsoft.
+
<br><br>
  
SerCen se relaciona con :
+
==== 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.
  
'''- BBDD'''
+
Es también el proceso que genera las llamadas en el marcador automático de '''''VIVA'''''it Suite.
  
'''- Asterisk (para el click2talk)'''
+
A efectos de diagnósticos, desde un SSH se ejecuta el comando “nc ip_maquina 1112”.
  
'''- VIVAit Meet (para por ejemplo las funciones “botón colaborar” y ”Recursos
+
'''root@vivait-acd:~# nc localhost 1112'''
compartidos”.'''
+
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
  
'''- Con los portales a los que proporciona los servicios vía webservice'''
+
Donde cada parámetro monitorizado indica:
 
+
{| class="wikitable"
 
+
|-
 
+
!Parámetro!!Descripción
===== Interfaz para autenticación (app-webfon / serCen) =====
+
|-
 +
|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||Extensiones/Extensiones/Extensiones monitorizadas|-
 +
|-
 +
|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'''
  
  
  
Este interfaz permite autenticar un usuario (simple factor o doble factor), utilizando para ello la base de datos de vivait y/u otro mecanismo externo, como puede ser el directorio activo de Microsoft. El objetivo es que app-webfon obtenga un token que debe incluirse en las comunicaciones con el resto de elementos para que estos conozcan que las solicitudes proceden de un usuario autenticado. Este token también puede utilizarse para que otras aplicaciones puedan se iniciadas desde app-webfon y no se requiera de un proceso específico de autenticación para cada aplicación. De modo recíproco, app- webfon debe soportar el ser invocado con un token y, en tal caso, considerar que el usuario ya está autenticado.
+
<br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
  
 +
==== 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'''''.
  
Por ello, se asume que cada usuario conoce su clave. Independientemente de qui én gestione la clave, esta puede tener asociados periodos de expiración y de caducidad. Cuando finaliza el periodo de expiración, el usuario tiene que cambiar la clave obligatoriamente para poder acceder a sus credenciales (token). Tras la caducidad, ya no puede obtener credenciales válidas.
+
===== 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''.
  
 +
===== 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.
  
Cuando la autenticación utiliza las claves almacenadas en la base de datos vivait, serCen permite cambiar la clave. Si la validación de la clave se apoya en mecanismos externos (como puede ser el directorio activo), entonces serCen no soporta el cambio de claves, informando de ello en las respuestas correspondientes a los comandos de autenticación.
+
<br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
 +
* 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.
  
 +
==== 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.
  
===== Comandos de SerCen =====
 
  
 +
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. 
  
Los diferentes comandos de SerCen son:
+
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:
  
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! COMANDOS !! DESCRIPCIÓN
+
! Parámetro !! Descripción
 
|-
 
|-
| autenticar1 || Para autenticar en base al primer factor (usuario y clave).
+
| SIS/ver || Versión del proceso
 +
|-
 +
| SIS/inic || Fecha de arranque del proceso
 
|-
 
|-
| autenticar2 || Para, si procede, autenticar en base al segundo factor (pin adicional).
+
| SIS/alarmas || Alarmas desde arranque
 
|-
 
|-
| autenticartokenaad || Autenticar empleando un token de "azure active directory"
+
| SIS/ultAlar || Fecha de última alarma
 
|-
 
|-
| validarToken || Para autenticar a un usuario en base a un token suministrado por otra aplicación
+
| MYSQL/cnx || Conectado (1) a MySQL
 
|-
 
|-
| revalidarToken || Para ampliar el periodo de expiración de un token válido.
+
| NAS/llamadas || Alojamiento en NAS de llamadas activo (grabación de llamada completa en un único archivo)
 
|-
 
|-
| revocarToken || Para que un token deje de ser válido.
+
| NAS/segmentos || Alojamiento en NAS de segmentos activo
 
|-
 
|-
| cambiarClave || Permite que una clave pueda se cambiada. Esto es posible cuando el usuario ha sido autenticado y, además, la clave tiene que estar siendo gestionada por vivait. Este cambio no es posible, por ejemplo, si se trata de una clave validada por un directorio activo.
+
| REC/llamNum || Llamadas procesadas
|}
 
 
 
 
 
 
 
====== Comandos autenticar1 ======
 
 
 
Comandos autenticar1 y respuestas posibles:
 
 
 
autenticar1. Autenticación primer factor.
 
 
 
url (POST): https://<servidor_webfon>/sercen/postautenticar1
 
 
 
datos de entrada:    '''{"cuenta": "fulano","clave$1aA": "dificil","aplicacion": "webfon","expira": 7200,"clvCambiar": "masdificil$1aA"}'''
 
 
 
* "expira" es opcional y siempre posible. Permite solicitar un periodo de expiración (segs) para el token devuelto.
 
 
 
*  "clvCambiar" es opcional y solo se tiene en cuenta si no hay doble factor. Permite cambiar la clave del usuario, si es autenticado.
 
 
 
 
 
'''Ejemplos de posibles respuestas:'''
 
 
 
 
 
{| class="wikitable"
 
 
|-
 
|-
! Ejemplo !! Respuesta
+
| REC/llamErr || Llamadas con error
 
|-
 
|-
| ejRes1 || {"errorNum": 101,"errorCad": "Clave incorrecta"}
+
| REC/segmNum || Segmentos procesados
 
|-
 
|-
| ejRes2 || {"errorNum": 115,"errorCad": "Clave caducada"}
+
| REC/segmErr || Segmentos con error
 
|-
 
|-
| ejRes3 || {"errorNum": 116,"errorCad": "Clave expirada","dobleFactor": "no","clvLongitudMinima": 6,"clvRequiereNumeros": true, "clvRequiereMayusculas": true, "clvRequiereMinusculas": true, "clvRequiereCarsEspeciales": false}
+
| NODO/fase  || Número de proceso de recordCentral
 
|-
 
|-
| ejRes4 || ejRes4: {"errorNum": 0,"errorCad": "OK","token": "1234567890","dobleFactor": "email","clvExpira": 86400}
+
| NODO/cuarentena  || Lista de nodos en cuarentena, separada por comas
 
|-
 
|-
| ejRes5 || {"errorNum":0,"errorCad":"OK","token": "1234567890","dobleFactor": "email","clvExpira": 86400}
+
| NODO/descarga || Lista de nodos en descarga, separada por comas
 
|-
 
|-
| ejRes6 || {"errorNum": 0,"errorCad": "OK","token": "1234567890","dobleFactor": "no","token2": "0987654321","expira": 3600,"clvExpira": 86400,"clvPuedeCambiar": true,"clvHaCambiado": true,"clvLongitudMinima": 6,"clvRequiereNumeros": true, "clvRequiereMayusculas": true, "clvRequiereMinusculas": true, "clvRequiereCarsEspeciales": false}
+
| 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'''
  
Este comando se invoca para autenticar al usuario en base a cuenta y clave. Opcionalmente, se soporta un doble factor en base a un pin que se comunica al usuario mediante correo electrónico u otro medio.
+
El fichero es el siguiente:
 
+
El campo "expira" en la respuesta informa sobre el token devuelto. Dicho token es válido durante un periodo que se expresa en segundos a transcurrir desde el momento en que se informa.
+
#
 
+
# Configuracion de recordCentral.pl
El campo "clvExpira" en la respuesta informa en segs. sobre cuando va a expirar la clave introducida y validada (errorNum=0). Si devuelve cero o no devuelve nada, quiere decir que no va a expirar por estar configurado de esa manera o porque es un autenticación ldap.
+
#
 
+
# 0: Solo alarmas en archivo log - 1: alarmas y trazas
Al invocar este comando, app-webfon solicita, opcionalmente (campo "expira"), un periodo (en segundos) cuyo valor debe formar parte de su configuración. El valor finalmente válido es el que aparece con el mismo nombre en la respuesta (si finalmente es positiva) y si no hay doble factor.
+
$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;
 +
  
Es responsabilidad de app-webfon el efectuar una solicitud para revalidar el token, mediante un procedimiento que se describirá posteriormente, tantas veces como considere necesario.
 
  
 +
*Los campos del fichero de configuración son los siguientes:
  
 
+
{| class="wikitable"
En lo que se refiere a las posibles respuestas a autenticar1, pueden darse varios casos:
+
|-
 
+
!Campo !!Descripción !!Posibles valores (si aplica)
Se produce un error: ejRes1 y ejRes2.
+
|-
 
+
|recordCentral.pconf|| ||
La clave ha expirado y no hay doble factor (ejRes3). Se invita a cambiar la clave invocando de nuevo a autenticar1 con "clvCambiar", para lo cuál se aportan datos de la complejidad requerida.
+
|-
 
+
|Variable a modificar||Comentarios||
La clave es válida y hay doble factor en ejRes4.
+
|-
 
+
|$depurar||# 0: Solo alarmas en archivo log - 1: alarmas y trazas||
La clave es válida y hay doble factor "totp" con usuario no enrolado en ejRes6. Se incluye un código QR que permite enrolar al usuario
+
|-
 
+
|$soyDemonio||# 0: Arranca como proceso - 1: arranca como demonio||
 
+
|-
La clave es válida y no hay doble factor en ejRes6. El usuario ha sido autenticado. Se devuelven "token" y "token2". También se informa sobre si es posible cambiar la clave ("clvPuedeCambiar") y sobre sus requerimientos de complejidad. Si el
+
|$logArch =||# Archivo de log ('': salida estandar)||
comando autenticar1 hubiese incluido un cambio de clave mediante el campo "clvCambiar" y este cambio hubiese sido completado, se devolverá un booleano "clvHaCambiado" para informar de ello.
 
 
 
 
 
====== Comandos autenticar2 ======
 
 
 
 
 
Comandos autenticar2 y respuestas posibles:
 
 
 
autenticar2. Autenticación doble factor.
 
 
 
url (POST): https://<servidor_webfon>/sercen/postautenticar2
 
 
 
datos de entrada: '''{"token": "1234567890","pin": "1234","expira": 7200,"clvCambiar": "masdificil$1aA"}'''
 
 
 
* "expira" es opcional.
 
* "clvCambiar" es opcional. Permite cambiar la clave del usuario, si es autenticado.
 
 
 
 
 
'''Ejemplos de posibles respuestas:'''
 
 
 
 
 
{| class="wikitable"
 
 
|-
 
|-
! Ejemplo !! Respuesta
+
|$pidArch||# Archivo para el pid (eliminando el .pid final)||
 
|-
 
|-
| ejRes1 || {"errorNum": 102,"errorCad": "Pin incorrecto"}
+
|$unaVezSolo||# 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion)||
 
|-
 
|-
| ejRes2 || {"errorNum": 115,"errorCad": "Clave caducada"}
+
|$toBucle||# Tiempo de espera en segundos cuando no hay conexion o cuando no hay llamadas||
 
|-
 
|-
| ejRes3 || {"errorNum": 116,"errorCad": "Clave expirada","clvLongitudMinima": 6,"clvRequiereNumeros": true, "clvRequiereMayusculas": true, "clvRequiereMinusculas": true, "clvRequiereCarsEspeciales": false}
+
|$bytesPorSegundo||# Bytes por segundo en archivos de grabaciones||
 
|-
 
|-
| ejRes4 || ejRes4: {"errorNum": 0,"errorCad": "OK","token2": "0987654321","expira": 3600,"clvExpira": 86400,"clvPuedeCambiar": true,"clvHaCambiado": true,"clvLongitudMinima": 6,"clvRequiereNumeros": true, "clvRequiereMayusculas": true, "clvRequiereMinusculas": true, "clvRequiereCarsEspeciales": false}
+
|$bytesLeerBuf||# Bytes a leer en cada accceso a disco||
|}
+
|-
 
+
|$db||Nombre de la base de datos||
 
 
Este comando se invoca para autenticar en base a un segundo factor: pin enviado por un medio de transporte independiente.
 
 
 
El campo "expira" en la respuesta informa sobre el token enviado y token2 devuelto. Dichos token son válidos durante un periodo que se expresa en segundos a transcurrir desde el momento en que se informa.
 
 
 
 
 
El campo "clvExpira" en la respuesta informa en segs. sobre cuando va a expirar la clave introducida y validada (errorNum=0). Si devuelve cero o no devuelve nada, quiere decir que no va a expirar por estar configurado de esa manera o porque es un autenticación ldap.
 
 
 
 
 
El campo que requiere explicación adicional es "token2". "token" puede ser traspasado a otras aplicaciones para evitar procesos de autenticación, pero esas aplicaciones (a las que no debe pasarse el valor de "token2") no podrán realizar operaciones relacionadas con el propio token, como puede ser revocarlo, cuando el usuario cierre el app-webfon. Es decir, el valor de "token2" sólo se requiere para operaciones de gestión del propio token. Sin "token2" tampoco es posible ejecutar el comando "cambiarClave".
 
 
 
 
 
En lo que se refiere a las posibles respuestas a autenticar2, pueden darse varios casos:
 
 
 
 
 
Se produce un error: ejRes1 y ejRes2.
 
 
 
 
 
La clave ha expirado (ejRes3). Se invita a cambiar la clave invocando de nuevo a autenticar2 con "clvCambiar", para lo cuál se aportan datos de la complejidad requerida.
 
 
 
 
 
El pin del doble factor es válido en ejRes4. El usuario ha sido autenticado. Se devuelve "token2" ("token" ya se tiene). También se informa sobre si es posible cambiar la clave ("clvPuedeCambiar") y sobre sus requerimientos de complejidad. Si el comando autenticar2 hubiese incluido un cambio de clave mediante el campo "clvCambiar" y este cambio hubiese sido completado, se devolverá un booleano "clvHaCambiado" para informar de ello.
 
 
 
 
 
 
 
 
 
====== Comando autenticartokenaad ======
 
 
 
 
 
Autenticar empleando un token de "Azure active directory"
 
 
 
 
 
url (POST): https://<servidor_webfon>/sercen/postautenticartokenaad
 
 
 
 
 
datos de entrada: '''{"token": "tokenrequetelargao","aplicacion": "webfon","expira": 7200} ("expira" es opcional).'''
 
 
 
 
 
Ejemplos de posibles respuestas:
 
 
 
 
 
{| class="wikitable"
 
 
|-
 
|-
! Ejemplo !! Respuesta
+
|$dbHost||IP o HOST máquina base de datos de tiempo real||
 
|-
 
|-
| ejRes1 || {"errorNum": 101,"errorCad": "Token incorrecto"}
+
|$dbPort||Puerto de escucha de mysql||
 
|-
 
|-
| ejRes2 || {"errorNum": 0,"errorCad": "OK","token": "1234567890","dobleFactor": "email"}
+
|$dbUsuario||Usuario acceso Base de datos de tiempo real||
 
|-
 
|-
| ejRes3 || {"errorNum": 0,"errorCad": "OK","token": "1234567890","dobleFactor": "no","token2": "0987654321","expira": 3600}
+
|$dbClave||Clave usuario acceso base de datos de tiempo real||
|}
 
 
 
 
 
====== Comando validartoken ======
 
 
 
Es un comando muy simple, que permite conocer si un token es válido y su periodo de expiración.
 
 
 
 
 
url (POST): https://<servidor_webfon>/sercen/postvalidartoken
 
 
 
 
 
datos de entrada: '''{"token": "1234567890"}'''
 
 
 
 
 
Ejemplos de posibles respuestas:
 
 
 
 
 
{| class="wikitable"
 
 
|-
 
|-
! Ejemplo !! Respuesta
+
|$supPort ||Puerto de supervision del demonio||
 
|-
 
|-
| ejRes1 || {"errorNum": 100,"errorCad": "Token expirado"}
+
|$grabHay||Hay fase de enrutamiento o no||
 
|-
 
|-
| ejRes2 || {"errorNum": 103,"errorCad": "Token incorrecto"}
+
|$grabAudioCalidad||Calidad del audio ||
 
|-
 
|-
| ejRes3 || {"errorNum": 0,"errorCad": "OK","expira": 2538}
+
|$grabAudioFormato||Formato del archivo de grabacion||
|}
+
|-
 
+
|$grabAudioExten||Extensión del archivo de grabacion||
 
+
|-
 
+
|$grabAudioCifrado||Si el archivo de grabación va cifrado ||
====== Comando revalidartoken ======
+
|-
 
+
|$grabRutaUsaTimestamp||||
Permite ampliar el periodo de expiración de un token. El periodo ampliado es el que se indica en la respuesta.
+
|-
 
+
|$grabRutaOrig||# Directorio donde se localizan las grabaciones de llamadas||
 
+
|-
url (POST): https://<servidor_webfon>/sercen/revalidartoken
+
|$grabRutaTmp||Directorio temporal de las grabaciones de llamadas||
 
+
|-
 
+
|$grabRutaDest||# Directorio Destino de  las grabaciones de llamadas||
datos de entrada: '''{"token": "1234567890","token2": "0987654321","expira": 7200} ("expira" es opcional).'''
+
|-
 
+
|$grabRutaError||# Directorio  de las grabaciones de llamadas con error||
 
+
|-
Ejemplos de posibles respuestas:
+
|$segmHay||Hay segmentos||1 hay segmentos – 0 no hay
 
+
|-
 
+
|$segmUmbralTiempo||||
{| class="wikitable"
+
|-
 +
|$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||
 
|-
 
|-
! Ejemplo !! Respuesta
+
|$tiposSegmentoGrabar||# Selección de tipos de segmento a grabar separados por comas ('' = todos)||
 
|-
 
|-
| ejRes1 || {"errorNum": 100,"errorCad": "Token expirado"}
+
|$grabarRing||# Indica si se graba ring||1 se graba – 0 no se graba
 
|-
 
|-
| ejRes2 || {"errorNum": 103,"errorCad": "Token incorrecto"}
+
|$segmExternoMinSegs||# Mínino número de segundos para generar segmento externo||
 
|-
 
|-
| ejRes3 || {"errorNum": 0,"errorCad": "OK","expira": 3600}
 
 
|}
 
|}
  
  
 +
<!--
 +
:Se explican a continuación las variables más importantes del proceso RecordCentral:
  
====== Comando revocartoken ======
+
# Conexion de base de datos
 
+
$db='nimitz';
Permite revocar un token.
+
$dbHost = 'BDTR';
 +
$dbPort = '3306';
 +
$dbUsuario = 'nimitz';
 +
$dbClave = 'ivivanimitz';
  
 +
# Configuracion de archivos con grabaciones (Orig en nodo)
 +
$grabHay = 0;
 +
$grabAudioCalidad = 32;
 +
$grabAudioFormato = 'ogg';
 +
$grabAudioExten = 'ogg';
 +
$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 = 'ogg';
 +
$segmAudioExten = 'ogg';
 +
$segmAudioCifrado = 0;
 +
$segmRutaUsaTimestamp = 1;
 +
$segmRutaTmp = '/var/lib/recordProcesad/segmTmp';
 +
$segmRutaDest = '/var/lib/recordProcesad/segmRecord';
 +
$segmRutaError = '/var/lib/recordProcesad/segmError';
  
url (POST): https://<servidor_webfon>/sercen/postrevocartoken
+
# Seleccion de tipos de segmento a grabar separados por comas ('' = todos)
 +
$tiposSegmentoGrabar = '';
  
 +
# Indica si se graba ring
 +
$grabarRing = 0;
  
datos de entrada: '''{"token": "1234567890","token2": "0987654321"}'''
+
-->
  
 +
* Podremos examinar los logs del proceso en '''/var/log/recordCentral.log'''
 +
<!-- En la versión 3.6.0. del instalador se adjuntan los siguientes archivos en el paquete recordCentral:
  
Ejemplos de posibles respuestas:
+
borraGrabaciones.pconf: Debe colocarse en /etc/MDtel y contiene los datos de acceso a BBDD así como los días de caducidad de las grabaciones.
 +
borraGrabaciones.pl: El script. Se ejecuta con el archivo de configuración como parámetro (mueveGrabaciones.pl /etc/MDtel/mueveGrabaciones.pconf)
 +
borraGrabaciones: Fichero cron. Contiene la programación del script. Debe colocarse en /etc/cron.d
 +
-->
  
 +
<br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
  
{| class="wikitable"
+
==== 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 ''VIVA''it'''.
! Ejemplo !! Respuesta
 
|-
 
| ejRes1 || {"errorNum": 103,"errorCad": "Token incorrecto"}
 
|-
 
| ejRes2 || {"errorNum": 0,"errorCad": "OK"}
 
|}
 
  
 +
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.
  
====== Comando cambiarClave ======
+
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'''.
  
Permite que un usuario autenticado cambie su clave y amplíe el periodo de expiración y de caducidad.
+
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.
  
url (POST): https://<servidor_webfon>/sercen/postcambiarclave
+
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
datos de entrada:'''{"token": "1234567890","token2": "0987654321","clvCambiar": "masdificil$1aA"}'''
+
recordNodo SIS ver='04.00.00' inic='20160326 105137' alarmas=2 ultAlar='20160326 105542'
 
+
recordNodo MYSQL cnx=1
 
+
recordNodo REC grabNum=0 grabErr=0
Ejemplos de posibles respuestas:
 
  
  
 +
La explicación de los campos se muestra en la tabla siguiente:
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Ejemplo !! Respuesta
+
! Parámetro  !! Descripción
 +
|-
 +
| SIS/ver || Versión del proceso
 +
|-
 +
| SIS/inic  || Fecha de arranque del proceso
 
|-
 
|-
| ejRes1 || {"errorNum": 102,"errorCad": "Clave incorrecta"}
+
| SIS/amarmas || Alarmas desde arranque
 
|-
 
|-
| ejRes2 || {"errorNum": 117,"errorCad": "Clave demasiado simple"}
+
| SIS/ultAlar || Fecha de última alarma
 
|-
 
|-
| ejRes3 || {"errorNum": 118,"errorCad": "Clave con caracteres no soportados"}
+
| MYSQL/cnx || Conectado (1) a MySQL
 
|-
 
|-
| ejRes4 || {"errorNum": 119,"errorCad": "Clave no admite cambio"}
+
| REC/llamNum || Llamadas procesadas
 
|-
 
|-
| ejRes5 || {"errorNum": 120,"errorCad": "Clave repetida"}
+
| REC/llamErr || Llamadas con error
 
|-
 
|-
| ejRes6 || {"errorNum": 0,"errorCad": "OK","clvExpira": 86400}
+
| 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:
===== Posibles errores =====
+
 
+
#
 
+
# Configuracion de recordNodo.pl
{| class="wikitable"
+
#
|-
+
# 0: Solo alarmas en archivo log - 1: alarmas y trazas
! Número de error !! Descripción breve
+
$depurar = 1;
|-
+
| 0 || OK
+
# 0: Arranca como proceso - 1: arranca como demonio
|-
+
$soyDemonio = 1;
| 100 || Token expirado
+
|-
+
# Archivo de log ('': salida estandar)
| 101 || Pin expirado
+
$logArch = '/var/log/record/recordNodo.log';
|-
+
| 102 || Clave incorrecta
+
# Archivo para el pid (eliminando el .pid final)
|-
+
$pidArch = '/var/run/record/recordNodo';
| 103 || Token incorrecto
+
|-
+
# 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion)
| 104 || Token2 incorrecto
+
$unaVezSolo = 0;
|-
+
| 105 || Pin incorrecto
+
# Tiempo de espera en segundos cuando no hay conexion o cuando no hay llamadas
|-
+
$toBucle = 5;
| 106 || Token comprometido
+
 +
# 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:
 +
 
 +
 
 +
{| class="wikitable"
 
|-
 
|-
| 107 || Token anulado
+
!Campo !!Descripción !!Posibles valores (si aplica)
 
|-
 
|-
| 108 || Token inválido
+
|$depurar||# 0: Solo alarmas en archivo log - 1: alarmas y trazas||
 
|-
 
|-
| 115 || Clave caducada
+
|$soyDemonio||# 0: Arranca como proceso - 1: arranca como demonio||
 
|-
 
|-
| 116 || Clave expirada
+
|$logArch||# Archivo de log ('': salida estandar)||
 
|-
 
|-
| 117 || Clave demasiado simple
+
|$pidArch||# Archivo para el pid (eliminando el .pid final)||
 
|-
 
|-
| 118 || Clave con caracteres no soportados
+
|$unaVezSolo||# 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion)||
 
|-
 
|-
| 119 || Clave no admite cambio
+
|$toBucle||# Tiempo de espera en segundos cuando no hay conexion o cuando no hay llamadas||
 
|-
 
|-
| 120 || Clave repetida
+
|$toProcesar||# Tiempo de guarda en segundos desde D_HORA_FIN hasta que se procesa llamada||
 
|-
 
|-
| 400 || Error en datos de entrada
+
|$bytesPorSegundo||# Bytes por segundo en archivos de grabaciones||
 
|-
 
|-
| 401 || Error registro de extensión
+
|$bytesLeerBuf||# Bytes a leer en cada accceso a disco||
 
|-
 
|-
| 402 || Error en el estado del dispositivo
+
|$db||Nombre de la base de datos||
 
|-
 
|-
| 403 || Error en el estado de la media con el navegador
+
|$dbHost||IP o HOST máquina base de datos de tiempo real||
 
|-
 
|-
| 404 || No hay línea libre
+
|$dbPort||Puerto de escucha de mysql||
 
|-
 
|-
| 405 || La línea no está libre
+
|$dbUsuario||Usuario acceso Base de datos de tiempo real||
 
|-
 
|-
| 406 || La línea es errónea
+
|$dbClave||Clave usuario acceso base de datos de tiempo real||
 
|-
 
|-
| 407 || Línea en estado erróneo
+
|$supPort||Puerto de supervision del demonio||
 
|-
 
|-
| 408 || JSEP obligatorio
+
|$miNodo||# Quien es mi nodo para filtrar grabaciones||
 
|-
 
|-
| 409 || JSEP ‘offer’ obligatorio
+
|$grabRutaOrig||# Directorio donde se localizan las grabaciones||
 
|-
 
|-
| 410 || Cifrado extremo a extremo no soportado
+
|$grabRutaDest ||Directorio destino de las grabaciones procesadas||
 
|-
 
|-
| 411 || Canal de datos no soportado
+
|$grabRutaError||Directorio destino de las grabacionescon error||
 
|-
 
|-
| 412 || Comando desconocido
+
|$grabRutaUsaTimestamp||||
 
|-
 
|-
| 413 || No hay recursos
+
|$grabLimiteSegs||# Tiempo en segundos limite a truncar en las grabaciones (0=sin limite)||
 
|-
 
|-
| 414 || No hay conferencia libre
+
|$segmEliminarGrabacionTrato||# Indica si se procesan segmentos de tipo tipoSegmEliminarGrabacion y patron eliminacion||1 se procesa – 0 no se procesa
 
|-
 
|-
| 415 || Error conferencia
+
|$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).
 
|-
 
|-
| 416 || Línea no conectada
 
|-
 
| 500 || Error interno
 
 
|}
 
|}
  
 +
<!--
 +
:Se muestran a continuación las variables que son modificadas con mayor frecuencia:
 +
# Conexion de base de datos
 +
$db='nimitz';
 +
$dbHost = 'BDTR';
 +
$dbPort = '3306';
 +
$dbUsuario = 'nimitz';
 +
$dbClave = 'ivivanimitz';
  
 +
# Quien es mi nodo para filtrar grabaciones
 +
$miNodo = 1;
  
 +
# Indica si se procesan segmentos de tipo tipoSegmEliminarGrabacion y patron eliminación
 +
$segmEliminarGrabacionTrato = 1;
 +
$patronEliminarGrabacion = '/etc/MDtel/null.bin';
  
===== Logs y comandos =====
 
  
  
En serCen podemos monitorizar el funcionamiento del proceso de login de los usuarios.
+
-->
 +
* Podremos examinar los logs del proceso en '''/var/log/recordNodo.log'''
  
'''systemctl status serCen.service'''
 
  
Resultado esperado:
 
  
serCen.service - LSB: Start/stop serCen
+
==== Sercen ====
Loaded: loaded (/etc/init.d/serCen; generated)
 
Active: active (exited) since Thu 2022-02-10 15:16:46 CET;
 
2h 38min ago
 
Docs: man:systemd-sysv-generator(8)
 
Process: 942 ExecStart=/etc/init.d/serCen start
 
(code=exited, status=0/SUCCESS)
 
feb 10 15:16:45 VC-WebP-AytoArganda-MAD-02 systemd[1]:
 
Starting LSB: Start/stop serCen...
 
feb 10 15:16:45 VC-WebP-AytoArganda-MAD-02 serCen[942]:
 
Starting serCen
 
feb 10 15:16:46 VC-WebP-AytoArganda-MAD-02 systemd[1]:
 
Started LSB: Start/stop serCen.
 
  
 +
Sercen (Servicios Centrales) es un demonio de VIVAit que provee servicios centralizados
 +
a muchos elementos de la arquitectura. Sirve para identificar a los usuarios y garantizar
 +
que los mismos sean quienes dicen ser.
 +
Puede haber varias instancias en el, y diferentes servicios pueden estar en diferentes
 +
Sercen
  
Para listar información de serCen:
 
  
'''nc localhost 1125'''
+
Ejemplos de servicios:
  
 +
'''- Autenticación, de factor simple o doble factor'''
  
Resultado esperado:
+
'''- Integración con proveedores de autenticación'''
  
serCen sis ver='00.01.04.1' inic='20220210 173436' alarmas=0 ultAlar='00000000
+
'''- Click2talk (Demonio dentro de Vivait)'''
000000'
 
serCen gmp msj=254/256 buf=256/256 tarea=97/102
 
serCen tmp uptime=1009 (0d 0h 16m 49s)
 
serCen wws mysql=1 conxNum=0 conxMaxPeriodo=0
 
serCen wwc numCacheLibre=3 numColaPend=0
 
serCen wwc numReq=0/0 numGet=0/0 numPost=0/0 numPut=0/0 numDelete=0/0
 
serCen smt numCacheLibre=5 numColaPend=0 enPeriodo=0/0 numMsj=2/0
 
  
  
Ejemplos del log de serCen:
+
Sercen permite autenticar un usuario (simple factor o doble factor), utilizando para ello
 +
la base de datos de vivait y/u otro mecanismo externo, como puede ser el directorio
 +
activo de Microsoft.
  
 +
SerCen se relaciona con :
  
  
Acceso:
+
'''- BBDD'''
  
[[File:sercen1.png |1000px]]
+
'''- Asterisk (para el click2talk)'''
  
Clave errónea:
+
'''- VIVAit Meet (para por ejemplo las funciones “botón colaborar” y ”Recursos
 +
compartidos”.'''
  
[[File:sercen2.png |1000px]]
+
'''- Con los portales a los que proporciona los servicios vía webservice'''
  
==== Aplicación PQCTI ====
 
  
  
Pqcti es una nueva aplicacion de asterisk 13 que sirve para establecer llamadas , cada asterisk tendrá su modulo pqcti instalado y configurado. No hay una arquitectura como tal , sino una base para empezar a desarrollar cosas por encima.
+
===== Interfaz para autenticación (app-webfon / serCen) =====
  
  
[[Archivo:PQCTI.png|600px|center]]
 
  
  
La aplicación pqcti es un webservice con JSON y está configurada en un Tomcat. Cada nodo tendrá su pqcti, por lo que si ese nodo cae, no se podrán realizar consultas o conexiones desatendidas a ese nodo.
 
  
 +
Este interfaz permite autenticar un usuario (simple factor o doble factor), utilizando para ello la base de datos de vivait y/u otro mecanismo externo, como puede ser el directorio activo de Microsoft. El objetivo es que app-webfon obtenga un token que debe incluirse en las comunicaciones con el resto de elementos para que estos conozcan que las solicitudes proceden de un usuario autenticado. Este token también puede utilizarse para que otras aplicaciones puedan se iniciadas desde app-webfon y no se requiera de un proceso específico de autenticación para cada aplicación. De modo recíproco, app- webfon debe soportar el ser invocado con un token y, en tal caso, considerar que el usuario ya está autenticado.
  
Actualmente pqcti se utiliza para:
 
  
'''- Las conexiones desatendidas'''
+
Por ello, se asume que cada usuario conoce su clave. Independientemente de qui én gestione la clave, esta puede tener asociados periodos de expiración y de caducidad. Cuando finaliza el periodo de expiración, el usuario tiene que cambiar la clave obligatoriamente para poder acceder a sus credenciales (token). Tras la caducidad, ya no puede obtener credenciales válidas.
  
'''- Para el click2talk'''
 
  
'''- La funcionalidad de llamar desde agenda o historial en el portal de usuario VIVAit'''
+
Cuando la autenticación utiliza las claves almacenadas en la base de datos vivait, serCen permite cambiar la clave. Si la validación de la clave se apoya en mecanismos externos (como puede ser el directorio activo), entonces serCen no soporta el cambio de claves, informando de ello en las respuestas correspondientes a los comandos de autenticación.
  
  
  
  
===== Servicios web =====
+
===== Comandos de SerCen =====
  
  
Los servicios web que proporciona la aplicación son de dos tipos:
+
Los diferentes comandos de SerCen son:
  
  
1. Operativos
+
{| class="wikitable"
 
+
|-
 
+
! COMANDOS !! DESCRIPCIÓN
 
+
|-
{| class="wikitable sortable"
+
| autenticar1 || Para autenticar en base al primer factor (usuario y clave).
 +
|-
 +
| autenticar2 || Para, si procede, autenticar en base al segundo factor (pin adicional).
 +
|-
 +
| autenticartokenaad || Autenticar empleando un token de "azure active directory"
 
|-
 
|-
! Comando!! Descripción
+
| validarToken || Para autenticar a un usuario en base a un token suministrado por otra aplicación
 
|-
 
|-
| '''cmd_llamar''' || Inicia una llamada saliente desde una extensión vivait-call.
+
| revalidarToken || Para ampliar el periodo de expiración de un token válido.
 
|-
 
|-
| '''cmd_liberar''' || Libera una llamada establecida, que haya sido registrada en pqcti. La llamada se identifica mediante el ucid que se pasa como parámetro de invocación.
+
| revocarToken || Para que un token deje de ser válido.
 
|-
 
|-
 +
| cambiarClave || Permite que una clave pueda se cambiada. Esto es posible cuando el usuario ha sido autenticado y, además, la clave tiene que estar siendo gestionada por vivait. Este cambio no es posible, por ejemplo, si se trata de una clave validada por un directorio activo.
 
|}
 
|}
  
  
  
 +
====== Comandos autenticar1 ======
  
 +
Comandos autenticar1 y respuestas posibles:
 +
 +
autenticar1. Autenticación primer factor.
 +
 +
url (POST): https://<servidor_webfon>/sercen/postautenticar1
 +
 +
datos de entrada:    '''{"cuenta": "fulano","clave$1aA": "dificil","aplicacion": "webfon","expira": 7200,"clvCambiar": "masdificil$1aA"}'''
 +
 +
* "expira" es opcional y siempre posible. Permite solicitar un periodo de expiración (segs) para el token devuelto.
 +
 +
*  "clvCambiar" es opcional y solo se tiene en cuenta si no hay doble factor. Permite cambiar la clave del usuario, si es autenticado.
  
2. Informativos
 
  
 +
'''Ejemplos de posibles respuestas:'''
  
  
{| class="wikitable sortable"
+
{| class="wikitable"
 +
|-
 +
! Ejemplo !! Respuesta
 +
|-
 +
| ejRes1 || {"errorNum": 101,"errorCad": "Clave incorrecta"}
 
|-
 
|-
! Comando!! Descripción
+
| ejRes2 || {"errorNum": 115,"errorCad": "Clave caducada"}
 
|-
 
|-
| '''info_llamadas''' || Informa sobre las llamadas registradas en pqcti. Devuelve un array con la información de cada llamada.
+
| ejRes3 || {"errorNum": 116,"errorCad": "Clave expirada","dobleFactor": "no","clvLongitudMinima": 6,"clvRequiereNumeros": true, "clvRequiereMayusculas": true, "clvRequiereMinusculas": true, "clvRequiereCarsEspeciales": false}
 
|-
 
|-
| '''info_llamadas_num''' || Devuelve el número de llamadas registradas en pqcti.
+
| ejRes4 || ejRes4: {"errorNum": 0,"errorCad": "OK","token": "1234567890","dobleFactor": "email","clvExpira": 86400}
 
|-
 
|-
| '''info_llamada''' || Devuelve la información de la llamada cuyo ucid se pasa como parámetro de invocación.
+
| ejRes5 || {"errorNum":0,"errorCad":"OK","token": "1234567890","dobleFactor": "email","clvExpira": 86400}
 
|-
 
|-
 +
| ejRes6 || {"errorNum": 0,"errorCad": "OK","token": "1234567890","dobleFactor": "no","token2": "0987654321","expira": 3600,"clvExpira": 86400,"clvPuedeCambiar": true,"clvHaCambiado": true,"clvLongitudMinima": 6,"clvRequiereNumeros": true, "clvRequiereMayusculas": true, "clvRequiereMinusculas": true, "clvRequiereCarsEspeciales": false}
 
|}
 
|}
  
  
 +
Este comando se invoca para autenticar al usuario en base a cuenta y clave. Opcionalmente, se soporta un doble factor en base a un pin que se comunica al usuario mediante correo electrónico u otro medio.
  
===== Archivos relevantes y procedimientos de despliegue =====
+
El campo "expira" en la respuesta informa sobre el token devuelto. Dicho token es válido durante un periodo que se expresa en segundos a transcurrir desde el momento en que se informa.
  
 +
El campo "clvExpira" en la respuesta informa en segs. sobre cuando va a expirar la clave introducida y validada (errorNum=0). Si devuelve cero o no devuelve nada, quiere decir que no va a expirar por estar configurado de esa manera o porque es un autenticación ldap.
  
Los archivos relevantes para construir la aplicación son:
+
Al invocar este comando, app-webfon solicita, opcionalmente (campo "expira"), un periodo (en segundos) cuyo valor debe formar parte de su configuración. El valor finalmente válido es el que aparece con el mismo nombre en la respuesta (si finalmente es positiva) y si no hay doble factor.
  
 +
Es responsabilidad de app-webfon el efectuar una solicitud para revalidar el token, mediante un procedimiento que se describirá posteriormente, tantas veces como considere necesario.
  
Fuentes (directorio referenciado en donde se encuentren los fuentes de asterisk):
 
  
  
* '''apps/app_md_pqcti.c'''
+
En lo que se refiere a las posibles respuestas a autenticar1, pueden darse varios casos:
 
* '''apps/pqcti/*.c y apps/pqcti/*.h'''
 
  
* '''apps/Makefile''' (Que requiere de ser modificado para compilar la aplicación)
+
Se produce un error: ejRes1 y ejRes2.
  
 +
La clave ha expirado y no hay doble factor (ejRes3). Se invita a cambiar la clave invocando de nuevo a autenticar1 con "clvCambiar", para lo cuál se aportan datos de la complejidad requerida.
  
 +
La clave es válida y hay doble factor en ejRes4.
  
------ Añadir al final de "clean:" "pqcti/*.o" ------
+
La clave es válida y hay doble factor "totp" con usuario no enrolado en ejRes6. Se incluye un código QR que permite enrolar al usuario
  
:{|
 
|-
 
|
 
  
------ Añadir debajo de "$(subst .c,.o,$(wildcard
+
La clave es válida y no hay doble factor en ejRes6. El usuario ha sido autenticado. Se devuelven "token" y "token2". También se informa sobre si es posible cambiar la clave ("clvPuedeCambiar") y sobre sus requerimientos de complejidad. Si el
confbridge/*.c)): _ASTCFLAGS+=$(call
+
comando autenticar1 hubiese incluido un cambio de clave mediante el campo "clvCambiar" y este cambio hubiese sido completado, se devolverá un booleano "clvHaCambiado" para informar de ello.
MOD_ASTCFLAGS,app_confbridge)" ------
 
# wkw inicio
 
$(if $(filter app_md_pqcti,$
 
(EMBEDDED_MODS)),modules.link,app_md_pqcti.so): $(subst
 
.c,.o,$(wildcard pqcti/*.c))
 
$(subst .c,.o,$(wildcard pqcti/*.c)): _ASTCFLAGS+=$
 
(call MOD_ASTCFLAGS,app_md_pqcti)
 
#wkw fin (mirar clean:)
 
------
 
|} <br>
 
  
'''La compilación y despliegue se hace del modo habitual: "make" y "make install".'''
 
  
 +
====== Comandos autenticar2 ======
  
  
====== Configuración de archivos relevantes: ======
+
Comandos autenticar2 y respuestas posibles:
  
 +
autenticar2. Autenticación doble factor.
  
 +
url (POST): https://<servidor_webfon>/sercen/postautenticar2
  
 +
datos de entrada: '''{"token": "1234567890","pin": "1234","expira": 7200,"clvCambiar": "masdificil$1aA"}'''
  
 +
* "expira" es opcional.
 +
* "clvCambiar" es opcional. Permite cambiar la clave del usuario, si es autenticado.
  
  
+
'''Ejemplos de posibles respuestas:'''
 
* '''En el Dialplan. Llamada saliente''' (en el archivo que se considere adecuado)
 
  
A continuación se ofrece un dialplan de inicio de llamada. Conviene analizar si los contextos de transferencia son distintos a los habituales.
 
  
:{|
+
{| class="wikitable"
 +
|-
 +
! Ejemplo !! Respuesta
 +
|-
 +
| ejRes1 || {"errorNum": 102,"errorCad": "Pin incorrecto"}
 +
|-
 +
| ejRes2 || {"errorNum": 115,"errorCad": "Clave caducada"}
 +
|-
 +
| ejRes3 || {"errorNum": 116,"errorCad": "Clave expirada","clvLongitudMinima": 6,"clvRequiereNumeros": true, "clvRequiereMayusculas": true, "clvRequiereMinusculas": true, "clvRequiereCarsEspeciales": false}
 
|-
 
|-
|
+
| ejRes4 || ejRes4: {"errorNum": 0,"errorCad": "OK","token2": "0987654321","expira": 3600,"clvExpira": 86400,"clvPuedeCambiar": true,"clvHaCambiado": true,"clvLongitudMinima": 6,"clvRequiereNumeros": true, "clvRequiereMayusculas": true, "clvRequiereMinusculas": true, "clvRequiereCarsEspeciales": false}
------
+
|}
[pqcti_inicio_llamada_sale]
+
 
exten => _X.,1,NoOp(ID_DISPOSITIVO=${ID_DISPOSITIVO})
+
 
same =>      n,NoOp(UCID=${UCID})
+
Este comando se invoca para autenticar en base a un segundo factor: pin enviado por un medio de transporte independiente.
same =>      n,NoOp(PQCTI_SAL_EXTEN=${PQCTI_SAL_EXTEN})
+
 
same =>      n,NoOp(PQCTI_SAL_ANI_NUM=$
+
El campo "expira" en la respuesta informa sobre el token enviado y token2 devuelto. Dichos token son válidos durante un periodo que se expresa en segundos a transcurrir desde el momento en que se informa.
{PQCTI_SAL_ANI_NUM})
+
 
same =>      n,NoOp(PQCTI_SAL_ANI_NAME=$
+
 
{PQCTI_SAL_ANI_NAME})
+
El campo "clvExpira" en la respuesta informa en segs. sobre cuando va a expirar la clave introducida y validada (errorNum=0). Si devuelve cero o no devuelve nada, quiere decir que no va a expirar por estar configurado de esa manera o porque es un autenticación ldap.
same =>      n,NoOp(PQCTI_SAL_DNIS_NUM=$
 
{PQCTI_SAL_DNIS_NUM})
 
same =>      n,NoOp(PQCTI_SAL_DNIS_NAME=$
 
{PQCTI_SAL_DNIS_NAME})
 
same =>      n,Set(__TRANSFER_CONTEXT=pqcti_transferir_llamada)
 
same =>      n,Set(__FORWARD_CONTEXT=pqcti_desviar_llamada)
 
same =>      n,Set(CALLERID(name)=$
 
{PQCTI_SAL_ANI_NAME})
 
same =>      n,Set(CALLERID(num)=${PQCTI_SAL_ANI_NUM})
 
same =>      n,Set(CHANNEL(hangup_handler_wipe)=$
 
{CONTEXT},fin,1())
 
same =>      n,pqctiLlamSaleIniciada
 
same =>      n,NoOp(INSERT en BD)
 
same =>      n,Goto(Cen_Inicio_SIP,${EXTEN},1)
 
exten => fin,1,pqctiLlamLiberada
 
same =>      n,NoOp(UPDATE en BD)
 
same =>      n,Return
 
------
 
  
|} <br>
 
  
 +
El campo que requiere explicación adicional es "token2". "token" puede ser traspasado a otras aplicaciones para evitar procesos de autenticación, pero esas aplicaciones (a las que no debe pasarse el valor de "token2") no podrán realizar operaciones relacionadas con el propio token, como puede ser revocarlo, cuando el usuario cierre el app-webfon. Es decir, el valor de "token2" sólo se requiere para operaciones de gestión del propio token. Sin "token2" tampoco es posible ejecutar el comando "cambiarClave".
  
* '''Para llamada entrante'''
 
  
 +
En lo que se refiere a las posibles respuestas a autenticar2, pueden darse varios casos:
  
Es muy importante llamar a "ucid(0)" antes de pqctiLlamEntra y de insertar en BD. No importa si en "Cen_Inicio_TrunkSip" se invoca de nuevo a "ucid(0)" porque se mantiene el asignado.
 
  
:{|
+
Se produce un error: ejRes1 y ejRes2.
|-
 
|
 
------
 
[pqcti_inicio_llamada_entra]
 
exten => _X.,1,NoOp(ID_DISPOSITIVO=${ID_DISPOSITIVO})
 
same =>      n,ucid(0)
 
same =>      n,NoOp(UCID=${UCID})
 
same =>     
 
n,Set(__TRANSFER_CONTEXT=pqcti_transferir_llamada)
 
same =>     
 
n,Set(__FORWARD_CONTEXT=pqcti_desviar_llamada)
 
same =>      n,Set(CHANNEL(hangup_handler_wipe)=$
 
{CONTEXT},fin,1())
 
same =>      n,pqctiLlamEntra
 
same =>      n,NoOp(INSERT into DAT_CONX_DESATEN)
 
same =>      n,Goto(Cen_Inicio_TrunkSip,${EXTEN},1)
 
<br>
 
exten => fin,1,pqctiLlamLiberada
 
same =>      n,NoOp(UPDATE DAT_CONX_DESATEN set
 
D_HORA_FIN,DURACION)
 
same =>      n,Return
 
------
 
  
|} <br>
 
  
 +
La clave ha expirado (ejRes3). Se invita a cambiar la clave invocando de nuevo a autenticar2 con "clvCambiar", para lo cuál se aportan datos de la complejidad requerida.
  
  
* '''En /etc/asterisk/acl.conf'''
+
El pin del doble factor es válido en ejRes4. El usuario ha sido autenticado. Se devuelve "token2" ("token" ya se tiene). También se informa sobre si es posible cambiar la clave ("clvPuedeCambiar") y sobre sus requerimientos de complejidad. Si el comando autenticar2 hubiese incluido un cambio de clave mediante el campo "clvCambiar" y este cambio hubiese sido completado, se devolverá un booleano "clvHaCambiado" para informar de ello.
  
  
  
Debe configurarse el acl que limita el acceso al servicio desde direcciones ip conocidas.
 
  
Un ejemplo en que se permite una red de servidores y un equipo:
+
====== Comando autenticartokenaad ======
  
:{|
 
|-
 
|
 
  
------
+
Autenticar empleando un token de "Azure active directory"
[pqcti_acl_comandos]
 
deny=0.0.0.0/0.0.0.0
 
permit=172.25.128.0/24
 
permit=192.168.0.20/32
 
permit=127.0.0.1
 
------
 
  
|} <br>
 
  
 +
url (POST): https://<servidor_webfon>/sercen/postautenticartokenaad
  
  
* '''En /etc/asterisk/http.conf'''
+
datos de entrada: '''{"token": "tokenrequetelargao","aplicacion": "webfon","expira": 7200} ("expira" es opcional).'''
  
:{|
 
|-
 
|
 
------
 
[general]
 
servername=vcall-nodo
 
enabled=yes
 
bindaddr=0.0.0.0
 
bindport=8088
 
prefix=vcall-nodo
 
sessionlimit=100
 
session_inactivity=30000
 
session_keep_alive=15000
 
enablestatic=no
 
;redirect = / /static/config/index.html
 
tlsenable=no
 
;tlsbindaddr=0.0.0.0:8089
 
;tlscipher=
 
;tlsdisablev1=yes
 
;tlsdisablev11=yes
 
;tlsdisablev12=yes
 
;tlsservercipherorder=yes
 
;[post_mappings]
 
;uploads = /var/lib/asterisk/uploads/
 
------
 
  
|} <br>
+
Ejemplos de posibles respuestas:
  
  
* '''En /etc/asterisk/pqcti.conf'''
+
{| class="wikitable"
 +
|-
 +
! Ejemplo !! Respuesta
 +
|-
 +
| ejRes1 || {"errorNum": 101,"errorCad": "Token incorrecto"}
 +
|-
 +
| ejRes2 || {"errorNum": 0,"errorCad": "OK","token": "1234567890","dobleFactor": "email"}
 +
|-
 +
| ejRes3 || {"errorNum": 0,"errorCad": "OK","token": "1234567890","dobleFactor": "no","token2": "0987654321","expira": 3600}
 +
|}
 +
 
 +
 
 +
====== Comando validartoken ======
 +
 
 +
Es un comando muy simple, que permite conocer si un token es válido y su periodo de expiración.
 +
 
 +
 
 +
url (POST): https://<servidor_webfon>/sercen/postvalidartoken
 +
 
 +
 
 +
datos de entrada: '''{"token": "1234567890"}'''
  
:{|
+
 
 +
Ejemplos de posibles respuestas:
 +
 
 +
 
 +
{| class="wikitable"
 +
|-
 +
! Ejemplo !! Respuesta
 +
|-
 +
| ejRes1 || {"errorNum": 100,"errorCad": "Token expirado"}
 +
|-
 +
| ejRes2 || {"errorNum": 103,"errorCad": "Token incorrecto"}
 
|-
 
|-
|
+
| ejRes3 || {"errorNum": 0,"errorCad": "OK","expira": 2538}
------
+
|}
[general]
+
 
debug=false
+
 
llamadas_registrar=true
 
<br>
 
[comandos]
 
url_comandos_v1=pqcti/v1/comandos
 
acl=pqcti_acl_comandos
 
<br>
 
[llamada_sale]
 
canal_A_tech=sip
 
canal_A_dial_cad_fmt=%s
 
contexto=pqcti_inicio_llamada_sale
 
temporizador_segs=30
 
------
 
  
|} <br>
+
====== Comando revalidartoken ======
  
 +
Permite ampliar el periodo de expiración de un token. El periodo ampliado es el que se indica en la respuesta.
  
  
* '''En /etc/asterisk/ext_Subrutinas_BD.conf'''
+
url (POST): https://<servidor_webfon>/sercen/revalidartoken
  
:{|
 
|-
 
|
 
  
;------------------------------------------------------
+
datos de entrada: '''{"token": "1234567890","token2": "0987654321","expira": 7200} ("expira" es opcional).'''
[Cen_Sub_updateDatConxDesaten_Fin]
+
 
;------------------------------------------------------
+
 
-----------
+
Ejemplos de posibles respuestas:
;------------------------------------------------------
+
 
-----------
+
 
; ${ARG1}: C_UCID
+
{| class="wikitable"
<br>
+
|-
exten => s,1,NoOp(MDSUBUPDDATCONXDESCON*)
+
! Ejemplo !! Respuesta
<br>
+
|-
  same =>  n,ExecIf($["${SPRV}"="1"]?
+
| ejRes1 || {"errorNum": 100,"errorCad": "Token expirado"}
Return(SUPERVIVENCIA))
+
|-
<br>
+
| ejRes2 || {"errorNum": 103,"errorCad": "Token incorrecto"}
  same =>  n,ExecIf($["${ARG1}"=""]?Return(NO_UCID))
+
|-
<br>
+
| ejRes3 || {"errorNum": 0,"errorCad": "OK","expira": 3600}
  same =>  n,MDintz(nimitz|bd|sqlSinEspera|update
+
|}
DAT_CONX_DESATEN set D_HORA_FIN=now(),N_DURACION=now()-
+
 
D_HORA_INICIO where C_UCID="${ARG1}")
+
 
<br>
+
 
  ;same =>  n,DumpChan
+
====== Comando revocartoken ======
  same =>  n,Return(OK)
+
 
<br>
+
Permite revocar un token.
include => Cen_finLlamada
+
 
<br>
+
 
;------------------------------------------------------
+
  url (POST): https://<servidor_webfon>/sercen/postrevocartoken
-----------
+
 
[Cen_Sub_updateDatConxDesaten_Contestada]
+
 
;------------------------------------------------------
+
datos de entrada: '''{"token": "1234567890","token2": "0987654321"}'''
-----------
+
 
;------------------------------------------------------
+
 
-----------
+
Ejemplos de posibles respuestas:
; ${ARG1}: C_UCID
+
 
<br>
+
 
exten => s,1,NoOp(MDSUBUPDDATCONXDESCON*)
+
{| class="wikitable"
<br>
+
|-
  same =>  n,ExecIf($["${SPRV}"="1"]?
+
! Ejemplo !! Respuesta
Return(SUPERVIVENCIA))
+
|-
<br>
+
| ejRes1 || {"errorNum": 103,"errorCad": "Token incorrecto"}
  same =>  n,ExecIf($["${ARG1}"=""]?Return(NO_UCID))
+
|-
<br>
+
| ejRes2 || {"errorNum": 0,"errorCad": "OK"}
  same =>  n,MDintz(nimitz|bd|sqlSinEspera|update
+
|}
DAT_CONX_DESATEN set B_CONTESTADA=1 where C_UCID="$
+
 
{ARG1}")
 
<br>
 
  ;same =>n,DumpChan
 
  same =>n,Return(OK)
 
include => Cen_finLlamada
 
<br>
 
;------------------------------------------------------
 
-----------
 
[Cen_Sub_insertDatConxDesaten]
 
;------------------------------------------------------
 
-----------
 
;------------------------------------------------------
 
-----------
 
; ${ARG1}: ID_NODO
 
; ${ARG2}: C_UCID
 
; ${ARG3}: C_ORIGEN_NUM
 
; ${ARG4}: C_ORIGEN_NAME
 
; ${ARG5}: C_ORIGEN_EXTEN
 
; ${ARG6}: C_DESTINO_NUM
 
; ${ARG7}: C_DESTINO_NAME
 
; ${ARG8}: ID_DISPOSITIVO
 
;
 
<br>
 
  exten => s,1,NoOp(MDSUBINSERTDATCONXDES*)
 
<br>
 
  same =>n,ExecIf($["${SPRV}"="1"]?
 
Return(SUPERVIVENCIA))
 
<br>
 
  same =>  n,ExecIf($["${ARG1}"=""]?Return(NO_IDNODO))
 
  same =>  n,ExecIf($["${ARG2}"=""]?Return(NO_UCID))
 
  same =>  n,ExecIf($["${ARG3}"=""]?Set(ARG3=NULL))
 
  same =>  n,ExecIf($["${ARG4}"=""]?Set(ARG4=NULL))
 
  same =>  n,ExecIf($["${ARG5}"=""]?Set(ARG5=NULL))
 
  same =>  n,ExecIf($["${ARG6}"=""]?Set(ARG6=NULL))
 
  same =>  n,ExecIf($["${ARG7}"=""]?Set(ARG7=NULL))
 
  same =>  n,ExecIf($["${ARG8}"=""]?Set(ARG8=NULL))
 
<br>
 
  same =>  n,MDintz(nimitz|bd|sqlSinEspera|insert into
 
DAT_CONX_DESATEN
 
(D_HORA_INICIO,ID_NODO,C_UCID,C_ORIGEN_NUM,C_ORIGEN_NAM
 
E,C_ORIGEN_EXTEN,C_DESTINO_NUM,C_DESTINO_NAME,ID_DISPOS
 
ITIVO) VALUES(now(),${ARG1},"${ARG2}","${ARG3}","$
 
{ARG4}","${ARG5}","${ARG6}","${ARG7}",${ARG8}))
 
<br>
 
  ;same =>n,DumpChan
 
  same =>n,Return(OK)
 
<br>
 
include => Cen_finLlamada
 
<br>
 
<br>
 
---------------------------------------
 
  
 +
====== Comando cambiarClave ======
  
|} <br>
+
Permite que un usuario autenticado cambie su clave y amplíe el periodo de expiración y de caducidad.
  
  
* '''En /etc/asterisk/ext_MARCAR_Extension_Dial.conf'''
+
url (POST): https://<servidor_webfon>/sercen/postcambiarclave
  
  
*En este fichero hay que añadir lo que está en negrita.
+
datos de entrada:'''{"token": "1234567890","token2": "0987654321","clvCambiar": "masdificil$1aA"}'''
  
:{|
 
|-
 
|
 
  
;------------------------------------------------------
+
Ejemplos de posibles respuestas:
-----------
 
[Cen_Marcar_Extension_Dial_Gosub]
 
;------------------------------------------------------
 
-----------
 
exten => s,1,NoOp(MDSUBMAREXTEN*)
 
<br>
 
  same =>  n,Gosub(Cen_Sub_updAnswer,s,1(${UCID},$
 
{ID_DISPOSITIVO},${ENR_IDSEGMENTO}))
 
<br>
 
  same =>  n,ExecIf($[$[${MDDEBUG}-0] > 1]?DumpChan)
 
<br>
 
  ;Declarar la variable PASARTONOS en el trunk que
 
queramos
 
  same => n,ExecIf($["${PASARTONOS}"="1"]?
 
SetChannelOption(14,0))
 
<br>
 
  ;Rellenar el historico de llamadas
 
; same =>    n,Gosub(Cen_Sub_updDatHisLlam_tipo,s,1($
 
{DIALEDPEERNUMBER},${TIPOLLAMHIST_ENTRANTE},${UCID}))
 
  same =>    n,Gosub(Cen_Sub_updDatHisLlam_tipo_ID,s,1($
 
{DIALEDPEERNUMBER},${TIPOLLAMHIST_ENTRANTE},$
 
{ID_HLL_S}))
 
<br>
 
'''; Poner contestadas las llamadas de conexiones'''
 
'''desatendidas'''
 
'''same =>    n,GosubIf($["${PQCTI_REGISTRAR()}"="SI"]?'''
 
'''Cen_Sub_updateDatConxDesaten_Contestada,s,1(${UCID}))'''
 
<br>
 
same =>  n,Return()
 
  
|} <br>
 
  
 +
{| class="wikitable"
 +
|-
 +
! Ejemplo !! Respuesta
 +
|-
 +
| ejRes1 || {"errorNum": 102,"errorCad": "Clave incorrecta"}
 +
|-
 +
| ejRes2 || {"errorNum": 117,"errorCad": "Clave demasiado simple"}
 +
|-
 +
| ejRes3 || {"errorNum": 118,"errorCad": "Clave con caracteres no soportados"}
 +
|-
 +
| ejRes4 || {"errorNum": 119,"errorCad": "Clave no admite cambio"}
 +
|-
 +
| ejRes5 || {"errorNum": 120,"errorCad": "Clave repetida"}
 +
|-
 +
| ejRes6 || {"errorNum": 0,"errorCad": "OK","clvExpira": 86400}
 +
|-
 +
|}
  
  
'''Descripción de campos del archivo pqcti.conf:'''
 
 
'''• general'''
 
 
*'''debug'''. Activa la depuración desde el inicio, aunque puede activarse mediante comando "pqcti debug on"
 
  
*'''llamadas_registrar'''. Booleano que indica si se mantiene un registro de llamadas.Si se desactiva esta opción,
 
no hay registro y, por tanto, no se soportan los comandos "cmd_liberar" y los comandos informativos.
 
  
 +
===== Posibles errores =====
  
'''• comandos'''
 
  
*''' url_comandos_v1'''. La parte no común de la url. Con la configuración de http.conf propuesta, la url completa sería:
+
{| class="wikitable"
http://<IP_NODO>:8089/vcall-nodo/pqcti/v1/comandos
+
|-
 
+
! Número de error !! Descripción breve
*''' acl.''' Configura el "acl" a utilizar en el archivo "/etc/asterisk/acl.conf"
+
|-
 
+
| 0 || OK
 
+
|-
'''• llamada_sale'''
+
| 100 || Token expirado
 
+
|-
*''' canal_A_tech.''' Configura la tecnología de los canales de extensiones. Típicamente "sip". Podría ser "local", pero:
+
| 101 || Pin expirado
 
+
|-
  '''¡¡¡CUIDADO !!! si se usase un canal local, se perdería la función de "setvar" en el "peer": se pierde ID_DISPOSITIVO.'''
+
| 102 || Clave incorrecta
 
+
|-
 
+
| 103 || Token incorrecto
* '''canal_A_dial_cad_fmt.''' Si los canales de extensiones fuesen "sip/<exten>", entonces este campo sería "%s". Si la tecnología fuese "local", este campo sería "%s@<contexto>/n".
+
|-
 
+
| 104 || Token2 incorrecto
* '''contexto.''' Es el contexto en el que se inicia la llamada saliente. Como son necesarios algunos ajustes, debe existir un contexto especial antes de ir al contexto genérico "Cen_Inicio_Sip".
 
 
 
* '''temporizador_segs.''' Tiempo máximo (en segs.) para el descolgado de la extensión para la que se solicita el inicio de la llamada saliente.
 
 
 
===== Aplicaciones para el dialplan de asterisk =====
 
 
 
 
 
 
 
* '''pqctiLlamSaleIniciada''' (sin parámetros). Debe invocarse al inicio del dialplan de una llamada saliente. Sólo es obligatorio que se invoque si se ha configurado "llamadas_registrar=true".
 
 
 
 
 
* '''pqctiLlamEntra'''. Debe invocarse al inicio del dialplan de una llamada entrante. Sólo es obligatorio que se invoque si se ha configurado "llamadas_registrar=true".
 
 
 
 
 
* '''pqctiLlamLiberada'''. Debe invocarse al finalizar una llamada que previamente ha sido registrada en pqcti con las aplicaciones anteriores. Sólo es obligatorio que se invoque si se ha configurado "llamadas_registrar=true".
 
 
 
 
 
 
 
 
 
 
 
 
 
===== Comandos de asterisk =====
 
 
 
 
 
 
 
A continuación se muestran varios comandos de pqcti para asterisk.
 
 
 
 
 
 
 
{| class="wikitable sortable"
 
 
|-
 
|-
! Comando!! Descripción
+
| 105 || Pin incorrecto
 
|-
 
|-
| '''pqcti show''' || Lista los datos de configuración y de las llamadas registradas.
+
| 106 || Token comprometido
 
|-
 
|-
| '''pqcti reload''' || Recarga la configuración si se ha modificado "/etc/asterisk/pqcti.conf".
+
| 107 || Token anulado
 
|-
 
|-
| |'''pqcti debug [on|off]''' || Activa y desactiva la depuración del módulo.
+
| 108 || Token inválido
 
|-
 
|-
|}
+
| 115 || Clave caducada
 
+
|-
 
+
| 116 || Clave expirada
 
+
|-
 
+
| 117 || Clave demasiado simple
===== Tabla en base de datos =====
+
|-
 
+
| 118 || Clave con caracteres no soportados
 
+
|-
Con el fin de que otra aplicación pueda seguir las llamadas registradas en pqcti, se ha previsto una nueva tabla en base de datos: DAT_CONX_DESATEN.
+
| 119 || Clave no admite cambio
 +
|-
 +
| 120 || Clave repetida
 +
|-
 +
| 400 || Error en datos de entrada
 +
|-
 +
| 401 || Error registro de extensión
 +
|-
 +
| 402 || Error en el estado del dispositivo
 +
|-
 +
| 403 || Error en el estado de la media con el navegador
 +
|-
 +
| 404 || No hay línea libre
 +
|-
 +
| 405 || La línea no está libre
 +
|-
 +
| 406 || La línea es errónea
 +
|-
 +
| 407 || Línea en estado erróneo
 +
|-
 +
| 408 || JSEP obligatorio
 +
|-
 +
| 409 || JSEP ‘offer’ obligatorio
 +
|-
 +
| 410 || Cifrado extremo a extremo no soportado
 +
|-
 +
| 411 || Canal de datos no soportado
 +
|-
 +
| 412 || Comando desconocido
 +
|-
 +
| 413 || No hay recursos
 +
|-
 +
| 414 || No hay conferencia libre
 +
|-
 +
| 415 || Error conferencia
 +
|-
 +
| 416 || Línea no conectada
 +
|-
 +
| 500 || Error interno
 +
|}
 +
 
 +
 
  
Dicha tabla integra todos los registros de todos los nodos vivait y será mantenida por el dialplan.
 
  
 +
===== Logs y comandos =====
  
Por supuesto, esa tabla sólo tiene sentido cuando "llamadas_registrar=true".
 
  
 +
En serCen podemos monitorizar el funcionamiento del proceso de login de los usuarios.
  
 +
'''systemctl status serCen.service'''
  
:{|
+
Resultado esperado:
|-
 
|
 
  
  ------
+
  serCen.service - LSB: Start/stop serCen
  CREATE TABLE IF NOT EXISTS `nimitz`.`DAT_CONX_DESATEN`
+
  Loaded: loaded (/etc/init.d/serCen; generated)
  (
+
  Active: active (exited) since Thu 2022-02-10 15:16:46 CET;
  `ID` INT NOT NULL AUTO_INCREMENT,
+
2h 38min ago
  `D_HORA_INICIO` DATETIME NULL,
+
Docs: man:systemd-sysv-generator(8)
  `D_HORA_FIN` DATETIME NULL,
+
Process: 942 ExecStart=/etc/init.d/serCen start
  `N_DURACION` INT NULL DEFAULT 0,
+
(code=exited, status=0/SUCCESS)
  `ID_NODO` INT NULL DEFAULT NULL,
+
feb 10 15:16:45 VC-WebP-AytoArganda-MAD-02 systemd[1]:
  `C_UCID` VARCHAR(32) NULL,
+
Starting LSB: Start/stop serCen...
  `C_ORIGEN_NUM` VARCHAR(32) NULL,
+
  feb 10 15:16:45 VC-WebP-AytoArganda-MAD-02 serCen[942]:
  `C_ORIGEN_NAME` VARCHAR(128) NULL,
+
  Starting serCen
  `C_ORIGEN_EXTEN` VARCHAR(32) NULL,
+
  feb 10 15:16:46 VC-WebP-AytoArganda-MAD-02 systemd[1]:
  `C_DESTINO_NUM` VARCHAR(32) NULL,
+
Started LSB: Start/stop serCen.
  `C_DESTINO_NAME` VARCHAR(128) NULL,
+
 
  `ID_DISPOSITIVO` VARCHAR(32) NULL,
+
 
  PRIMARY KEY (`ID`),
+
Para listar información de serCen:
  UNIQUE INDEX `IDX_UCID_UNIQUE` (`C_UCID` ASC)
 
  VISIBLE,
 
  INDEX `IDX_HORA_INICIO` (`D_HORA_INICIO` ASC)
 
  VISIBLE)
 
  ------
 
  
|} <br>
+
'''nc localhost 1125'''
  
  
 +
Resultado esperado:
  
===== Interfaz para los servicios =====
+
serCen sis ver='00.01.04.1' inic='20220210 173436' alarmas=0 ultAlar='00000000
 +
000000'
 +
serCen gmp msj=254/256 buf=256/256 tarea=97/102
 +
serCen tmp uptime=1009 (0d 0h 16m 49s)
 +
serCen wws mysql=1 conxNum=0 conxMaxPeriodo=0
 +
serCen wwc numCacheLibre=3 numColaPend=0
 +
serCen wwc numReq=0/0 numGet=0/0 numPost=0/0 numPut=0/0 numDelete=0/0
 +
serCen smt numCacheLibre=5 numColaPend=0 enPeriodo=0/0 numMsj=2/0
  
  
Todos los servicios están implementados en base a un POST con un json en el cuerpo de la solicitud, que contiene los parámetros de invocación, y otro json en el cuerpo de la respuesta.
+
Ejemplos del log de serCen:
  
En ambos casos, el json es un objeto con campos.
 
  
Está implementada, como opción, el uso de un GET con parámetros, pero no se recomienda su uso, excepto para pruebas, porque puede haber problemas con el conjunto de caracteres no ascii.
 
  
Si no hay problemas a nivel de red, de transporte o en las reglas básicas del comando, el estado de la respuesta es siempre "200 OK", indicándose los posibles errores en el json de respuesta.
+
Acceso:
  
Todas las respuestas contienen un campo denominado "resultado" (de la ejecución) que puede tomar los siguientes valores:
+
[[File:sercen1.png |1000px]]
  
 +
Clave errónea:
  
 +
[[File:sercen2.png |1000px]]
  
* '''OK.''' La ejecución se ha iniciado correctamente. En el caso de la llamada saliente, no quiere decir que se haya establecido y, ni siquiera, que se haya iniciado porque puede que la extensión no descuelgue.
+
==== Aplicación PQCTI ====
  
* '''ERROR.''' Hay un error en los parámetros de invocación o en el estado de la llamada referida y no se puede ejecutar el comando solicitado.
 
  
* '''NO_EJECUTADO.''' Hay un problema no achacable a quién invoca y no se puede ejecutar el comando.
+
Pqcti es una nueva aplicacion de asterisk 13 que sirve para establecer llamadas , cada asterisk tendrá su modulo pqcti instalado y configurado. No hay una arquitectura como tal , sino una base para empezar a desarrollar cosas por encima.
  
  
 +
[[Archivo:PQCTI.png|600px|center]]
  
Si El "resultado" no es "OK", se devuelve un campo "diagnóstico" con una cadena que describe el problema detectado. Siempre es texto en español, por lo que su uso previsto es para logs.
 
  
 +
La aplicación pqcti es un webservice con JSON y está configurada en un Tomcat. Cada nodo tendrá su pqcti, por lo que si ese nodo cae, no se podrán realizar consultas o conexiones desatendidas a ese nodo.
  
  
 +
Actualmente pqcti se utiliza para:
  
 +
'''- Las conexiones desatendidas'''
  
===== Descipción de comandos y respuestas de json =====
+
'''- Para el click2talk'''
  
 +
'''- La funcionalidad de llamar desde agenda o historial en el portal de usuario VIVAit'''
  
A partir de aquí se describen los comandos y respuestas en base a json de ejemplo, ya que los campos son triviales y autoexplicativos:
 
  
  
*'''cmd_llamar -> Inicia una llamada saliente desde una extensión vivait-call.'''
 
  
Resultado esperado :
+
===== Servicios web =====
  
:{|
 
|-
 
|
 
cmd={
 
  "comando": "cmd_llamar",
 
  "extension": "201",
 
  "ani_num": "201",
 
  "ani_name": "ext_201",
 
  "dnis_num": "221",
 
  "dnis_name": "ext_221"
 
}
 
resp={
 
  "comando": "cmd_llamar",
 
  "ucid": "20999000031643889797",
 
  "estado_actual": "llam_sale_espera",
 
  "resultado": "OK",
 
  "ahora": "20220203 130317.107"
 
}
 
  
|} <br>
+
Los servicios web que proporciona la aplicación son de dos tipos:
  
En el comando, sólo son obligatorios: comando, extension y dnis_num. El resto son opcionales. Los campos "ani" no deben usarse, salvo por una buena razón.
 
El campo "dnis_num" sólo sirve para presentar el dato en el display de la extensión que
 
inicia la llamada.
 
  
 +
1. Operativos
  
  
  
*'''cmd_liberar -> Libera una llamada establecida, que haya sido registrada en pqcti.'''
+
{| class="wikitable sortable"
 +
|-
 +
! Comando!! Descripción
 +
|-
 +
| '''cmd_llamar''' || Inicia una llamada saliente desde una extensión vivait-call.
 +
|-
 +
| '''cmd_liberar''' || Libera una llamada establecida, que haya sido registrada en pqcti. La llamada se identifica mediante el ucid que se pasa como parámetro de invocación.
 +
|-
 +
|}
  
:{|
 
|-
 
|
 
  
cmd={
 
  "comando": "cmd_liberar",
 
  "ucid": "20999000031643889797"
 
}
 
resp={
 
  "comando": "cmd_liberar",
 
  "ucid": "20999000031643889797",
 
  "resultado": "OK",
 
  "ahora": "20220203 130804.526"
 
}
 
  
|} <br>
 
  
(Este comando sólo puede invocarse si se ha configurado "llamadas_registrar=true").
 
  
 +
2. Informativos
  
  
*'''info_llamadas -> Informa sobre las llamadas registradas en pqcti. Devuelve un array con la información de cada llamada.'''
 
  
:{|
+
{| class="wikitable sortable"
 +
|-
 +
! Comando!! Descripción
 +
|-
 +
| '''info_llamadas''' || Informa sobre las llamadas registradas en pqcti. Devuelve un array con la información de cada llamada.
 +
|-
 +
| '''info_llamadas_num''' || Devuelve el número de llamadas registradas en pqcti.
 +
|-
 +
| '''info_llamada''' || Devuelve la información de la llamada cuyo ucid se pasa como parámetro de invocación.
 
|-
 
|-
|
+
|}
}
+
 
resp={
 
  "comando": "info_llamadas",
 
  "llamadas": [
 
    {
 
      "ucid": "20999000051643890188",
 
      "estado_actual": "llam_sale_iniciada",
 
      "duracion_segundos": 8
 
    }
 
  ],
 
  "resultado": "OK",
 
  "ahora": "20220203 130957.149"
 
}
 
  
|} <br>
 
  
(Este comando sólo puede invocarse si se ha configurado "llamadas_registrar=true").
+
===== Archivos relevantes y procedimientos de despliegue =====
  
  
*'''info_llamadas_num -> IDevuelve el número de llamadas registradas en pqcti.'''
+
Los archivos relevantes para construir la aplicación son:
  
:{|
 
|-
 
|
 
  
resp={
+
Fuentes (directorio referenciado en donde se encuentren los fuentes de asterisk):
  "comando": "info_llamadas_num",
 
  "llamadas_num": 1,
 
  "resultado": "OK",
 
  "ahora": "20220203 131001.134"
 
}
 
  
|} <br>
 
  
(Este comando sólo puede invocarse si se ha configurado "llamadas_registrar=true").
+
* '''apps/app_md_pqcti.c'''
 +
 +
* '''apps/pqcti/*.c y apps/pqcti/*.h'''
  
 +
* '''apps/Makefile''' (Que requiere de ser modificado para compilar la aplicación)
  
  
  
*'''info_llamada , "ucid"-> "20999000051643890188" -> IDevuelve el número de llamadas registradas en pqcti.'''
+
------ Añadir al final de "clean:" "pqcti/*.o" ------
  
 
:{|
 
:{|
Línea 4884: Línea 6118:
 
|
 
|
  
  resp={
+
  ------ Añadir debajo de "$(subst .c,.o,$(wildcard
  "comando": "info_llamada",
+
confbridge/*.c)): _ASTCFLAGS+=$(call
  "ucid": "20999000051643890188",
+
MOD_ASTCFLAGS,app_confbridge)" ------
  "estado_actual": "llam_sale_iniciada",
+
# wkw inicio
  "duracion_segundos": 14,
+
$(if $(filter app_md_pqcti,$
  "resultado": "OK",
+
(EMBEDDED_MODS)),modules.link,app_md_pqcti.so): $(subst
  "ahora": "20220203 131003.638"
+
.c,.o,$(wildcard pqcti/*.c))
  }
+
$(subst .c,.o,$(wildcard pqcti/*.c)): _ASTCFLAGS+=$
 +
(call MOD_ASTCFLAGS,app_md_pqcti)
 +
#wkw fin (mirar clean:)
 +
  ------
 
|} <br>
 
|} <br>
  
(Este comando sólo puede invocarse si se ha configurado "llamadas_registrar=true").
+
'''La compilación y despliegue se hace del modo habitual: "make" y "make install".'''
  
  
<br>
 
  
==== Vivait-CTI ====
+
====== Configuración de archivos relevantes: ======
Permite la comunicación entre la aplicación '''''VIVA'''''it Desk de agente y el asterisk, sincronizando; convierte el protocolo “asterisk manager” a CSTA ('''''VIVA'''''it Desk “habla” CSTA).
 
  
Es un proceso importante para el uso de '''''VIVA'''''it 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 '''''VIVA'''''it 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:
 
  
{| class="wikitable"
+
 
 +
 +
 +
* '''En el Dialplan. Llamada saliente''' (en el archivo que se considere adecuado)
 +
 
 +
A continuación se ofrece un dialplan de inicio de llamada. Conviene analizar si los contextos de transferencia son distintos a los habituales.
 +
 
 +
:{|
 
|-
 
|-
!ver!!Versión del proceso
+
|
 +
------
 +
[pqcti_inicio_llamada_sale]
 +
exten => _X.,1,NoOp(ID_DISPOSITIVO=${ID_DISPOSITIVO})
 +
same =>      n,NoOp(UCID=${UCID})
 +
same =>      n,NoOp(PQCTI_SAL_EXTEN=${PQCTI_SAL_EXTEN})
 +
same =>      n,NoOp(PQCTI_SAL_ANI_NUM=$
 +
{PQCTI_SAL_ANI_NUM})
 +
same =>      n,NoOp(PQCTI_SAL_ANI_NAME=$
 +
{PQCTI_SAL_ANI_NAME})
 +
same =>      n,NoOp(PQCTI_SAL_DNIS_NUM=$
 +
{PQCTI_SAL_DNIS_NUM})
 +
same =>      n,NoOp(PQCTI_SAL_DNIS_NAME=$
 +
{PQCTI_SAL_DNIS_NAME})
 +
same =>      n,Set(__TRANSFER_CONTEXT=pqcti_transferir_llamada)
 +
same =>      n,Set(__FORWARD_CONTEXT=pqcti_desviar_llamada)
 +
same =>      n,Set(CALLERID(name)=$
 +
{PQCTI_SAL_ANI_NAME})
 +
same =>      n,Set(CALLERID(num)=${PQCTI_SAL_ANI_NUM})
 +
same =>      n,Set(CHANNEL(hangup_handler_wipe)=$
 +
{CONTEXT},fin,1())
 +
same =>      n,pqctiLlamSaleIniciada
 +
same =>      n,NoOp(INSERT en BD)
 +
same =>      n,Goto(Cen_Inicio_SIP,${EXTEN},1)
 +
exten => fin,1,pqctiLlamLiberada
 +
same =>      n,NoOp(UPDATE en BD)
 +
same =>      n,Return
 +
------
 +
 
 +
|} <br>
 +
 
 +
 
 +
* '''Para llamada entrante'''
 +
 
 +
 
 +
Es muy importante llamar a "ucid(0)" antes de pqctiLlamEntra y de insertar en BD. No importa si en "Cen_Inicio_TrunkSip" se invoca de nuevo a "ucid(0)" porque se mantiene el asignado.
 +
 
 +
:{|
 
|-
 
|-
|sis/inic||Fecha de arranque del proceso
+
|
|-
+
------
|Sis/alarmas||Alarmas desde arranque
+
[pqcti_inicio_llamada_entra]
|-
+
exten => _X.,1,NoOp(ID_DISPOSITIVO=${ID_DISPOSITIVO})
|Sis/ultAlar||Fecha de última alarma
+
same =>      n,ucid(0)
|-
+
same =>      n,NoOp(UCID=${UCID})
|Gmp/msj||
+
same =>     
|-
+
n,Set(__TRANSFER_CONTEXT=pqcti_transferir_llamada)
|Gmp/buf||
+
same =>     
|-
+
n,Set(__FORWARD_CONTEXT=pqcti_desviar_llamada)
|Gmp/tarea||
+
same =>      n,Set(CHANNEL(hangup_handler_wipe)=$
 +
{CONTEXT},fin,1())
 +
same =>      n,pqctiLlamEntra
 +
same =>      n,NoOp(INSERT into DAT_CONX_DESATEN)
 +
same =>      n,Goto(Cen_Inicio_TrunkSip,${EXTEN},1)
 +
<br>
 +
exten => fin,1,pqctiLlamLiberada
 +
same =>      n,NoOp(UPDATE DAT_CONX_DESATEN set
 +
D_HORA_FIN,DURACION)
 +
same =>      n,Return
 +
------
 +
 
 +
|} <br>
 +
 
 +
 
 +
 
 +
* '''En /etc/asterisk/acl.conf'''
 +
 
 +
 
 +
 
 +
Debe configurarse el acl que limita el acceso al servicio desde direcciones ip conocidas.
 +
 
 +
Un ejemplo en que se permite una red de servidores y un equipo:
 +
 
 +
:{|
 
|-
 
|-
|Tmp/uptime||
+
|
 +
 
 +
------
 +
[pqcti_acl_comandos]
 +
deny=0.0.0.0/0.0.0.0
 +
permit=172.25.128.0/24
 +
permit=192.168.0.20/32
 +
permit=127.0.0.1
 +
------
 +
 
 +
|} <br>
 +
 
 +
 
 +
 
 +
* '''En /etc/asterisk/http.conf'''
 +
 
 +
:{|
 
|-
 
|-
|Cti/numConx||Número de conexiones actuales / Número de conexiones máximo
+
|
|-
+
------
|Cti/numPend||
+
[general]
|-
+
servername=vcall-nodo
|Cti/numMakeCallPend||Llamadas pendientes de realizar
+
enabled=yes
|-
+
bindaddr=0.0.0.0
|Cti/numcall||
+
bindport=8088
|-
+
prefix=vcall-nodo
|Cti/numChan||
+
sessionlimit=100
|-
+
session_inactivity=30000
|Cti/numAuxStr||
+
session_keep_alive=15000
|-
+
enablestatic=no
|Cti/numMoniColas||Número de colas monitorizadas
+
;redirect = / /static/config/index.html
|-
+
tlsenable=no
|Cti/numMoniDevice||
+
;tlsbindaddr=0.0.0.0:8089
|-
+
;tlscipher=
|Cti/numMoniCall||
+
;tlsdisablev1=yes
|-
+
;tlsdisablev11=yes
|Cti/numMoniCallAuto||
+
;tlsdisablev12=yes
|-
+
;tlsservercipherorder=yes
|Cti/numMoniCallByDevice||
+
;[post_mappings]
|-
+
;uploads = /var/lib/asterisk/uploads/
|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:
+
|} <br>
  
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:
+
* '''En /etc/asterisk/pqcti.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
+
  ------
   
+
  [general]
  base
+
  debug=false
  {
+
llamadas_registrar=true
cfg
+
<br>
{
+
[comandos]
soy_demonio = 1
+
  url_comandos_v1=pqcti/v1/comandos
hay_syslog = 0
+
  acl=pqcti_acl_comandos
  # Archivo con identificador de proceso: (-: /var/run/vivait-cti.pid)
+
  <br>
archivo_pid = -
+
  [llamada_sale]
  # Archivo_traza: (-: stdout o /var/log/vivait-cti.log si soy_demonio)
+
canal_A_tech=sip
  # No se usa si se activa hay_syslog
+
canal_A_dial_cad_fmt=%s
archivo_traza = -
+
contexto=pqcti_inicio_llamada_sale
}
+
temporizador_segs=30
cfg_recarga
+
  ------
{
+
 
  # Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
+
|} <br>
nivel_traza = 3
+
 
pruebas = 1
+
 
hay_flush_traza = 1
+
 
}
+
* '''En /etc/asterisk/ext_Subrutinas_BD.conf'''
sis
+
 
{
+
:{|
  # No se usa. No modificar
+
|-
subsistema = 0
+
|
}
+
 
gmp
+
  ;------------------------------------------------------
{
+
  [Cen_Sub_updateDatConxDesaten_Fin]
  # Numero de mensajes. No modificar
+
;------------------------------------------------------
num_msj = 1024
+
-----------
  # Numero de buffer. No modificar
+
;------------------------------------------------------
num_buf = 1024
+
-----------
}
+
; ${ARG1}: C_UCID
  }
+
<br>
   
+
  exten => s,1,NoOp(MDSUBUPDDATCONXDESCON*)
  supercolas
+
<br>
  {
+
  same =>  n,ExecIf($["${SPRV}"="1"]?
en_comandos = 0
+
Return(SUPERVIVENCIA))
en_eventos = 0
+
<br>
  # archivo_conf = supercolas.conf
+
  same =>  n,ExecIf($["${ARG1}"=""]?Return(NO_UCID))
  }
+
  <br>
   
+
  same =>  n,MDintz(nimitz|bd|sqlSinEspera|update
  supervision
+
DAT_CONX_DESATEN set D_HORA_FIN=now(),N_DURACION=now()-
  {
+
D_HORA_INICIO where C_UCID="${ARG1}")
puerto_escucha = 1111
+
  <br>
}
+
  ;same =>  n,DumpChan
   
+
  same =>  n,Return(OK)
  cti
+
  <br>
{
+
include => Cen_finLlamada
hay_cti = 1
+
<br>
  # Dimensionamiento de recursos. Uno menos, ya que cero no vale
+
  ;------------------------------------------------------
max_conx = 512
+
  -----------
max_call = 2048
+
  [Cen_Sub_updateDatConxDesaten_Contestada]
max_channel = 4096
+
  ;------------------------------------------------------
max_monitor = 512
+
-----------
max_str_aux = 512
+
;------------------------------------------------------
puerto_escucha = 4500
+
  -----------
link_id = 1
+
  ; ${ARG1}: C_UCID
  #
+
  <br>
hay_vdn = 1
+
  exten => s,1,NoOp(MDSUBUPDDATCONXDESCON*)
hay_usuarios = 1
+
  <br>
usuarios
+
  same =>  n,ExecIf($["${SPRV}"="1"]?
{
+
  Return(SUPERVIVENCIA))
vivait
+
  <br>
{
+
  same =>  n,ExecIf($["${ARG1}"=""]?Return(NO_UCID))
clave = 3RSMbPlTi61rG5pySx9hhUokz8Fyy3Nql2w8Jairfl8=
+
  <br>
ip = 0.0.0.0
+
  same =>  n,MDintz(nimitz|bd|sqlSinEspera|update
msk = 0.0.0.0
+
DAT_CONX_DESATEN set B_CONTESTADA=1 where C_UCID="$
}
+
{ARG1}")
}
+
<br>
  }  
+
  ;same =>n,DumpChan
   
+
  same =>n,Return(OK)
  cti_recarga
+
include => Cen_finLlamada
  {
+
  <br>
makeCall_primero_dentro = 1
+
;------------------------------------------------------
makeCall_primero_fuera_agente_descuelga = 1
+
-----------
temporizador_makeCall = 30
+
[Cen_Sub_insertDatConxDesaten]
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
+
; ${ARG1}: ID_NODO
  # contextos para llamadas salientes desde myAcdSuperv
+
; ${ARG2}: C_UCID
contexto_myAcdSuperv_ProgreFuera = Cen_myAcdSuperv_ProgreFuera
+
; ${ARG3}: C_ORIGEN_NUM
contexto_myAcdSuperv_ProgreDentro = Cen_myAcdSuperv_ProgreDentro
+
; ${ARG4}: C_ORIGEN_NAME
contexto_myAcdSuperv_PredicFuera = Cen_myAcdSuperv_PredicFuera
+
  ; ${ARG5}: C_ORIGEN_EXTEN
contexto_myAcdSuperv_PredicDentro = Cen_myAcdSuperv_PredicDentro
+
  ; ${ARG6}: C_DESTINO_NUM
# contexto para transferencias
+
  ; ${ARG7}: C_DESTINO_NAME
contexto_redirect = Cen_Redirect
+
  ; ${ARG8}: ID_DISPOSITIVO
# expresiones regulares. se evaluan en el orden indicado
+
;
expr_esExtenLocal = ^(4)[0-9]{4}$
+
<br>
expr_esExtenInterna = -
+
exten => s,1,NoOp(MDSUBINSERTDATCONXDES*)
expr_esCola = ^(8)[0-9]{4}$
+
  <br>
expr_esPuntoDistribucion = ^(9)[0-9]{4}$
+
  same =>n,ExecIf($["${SPRV}"="1"]?
expr_esPuntoEnrutamiento = -
+
Return(SUPERVIVENCIA))
expr_esNumPrivateLocal = ^[369][0-9][0-9][0-9][0-9]$
+
  <br>
expr_esNumPrivateUnknown = ^[369]
+
  same =>  n,ExecIf($["${ARG1}"=""]?Return(NO_IDNODO))
expr_esNumPublicNational = ^0?[69][0-9]{8}$
+
  same =>  n,ExecIf($["${ARG2}"=""]?Return(NO_UCID))
expr_esNumPublicInternational = ^000[0-9]*
+
  same =>  n,ExecIf($["${ARG3}"=""]?Set(ARG3=NULL))
# resto siempre esNumPublicUnknown
+
  same =>  n,ExecIf($["${ARG4}"=""]?Set(ARG4=NULL))
#
+
  same =>  n,ExecIf($["${ARG5}"=""]?Set(ARG5=NULL))
audit_hay_Call = 1
+
  same =>  n,ExecIf($["${ARG6}"=""]?Set(ARG6=NULL))
audit_call_minutContestada = 60
+
  same =>  n,ExecIf($["${ARG7}"=""]?Set(ARG7=NULL))
audit_call_minutNoContestada = 5
+
  same =>  n,ExecIf($["${ARG8}"=""]?Set(ARG8=NULL))
audit_hay_AuxStr = 1
+
<br>
audit_AuxStr_minut = 2
+
  same =>  n,MDintz(nimitz|bd|sqlSinEspera|insert into
audit_hay_MsjReq = 1
+
DAT_CONX_DESATEN
audit_MsjReq_minut = 2
+
  (D_HORA_INICIO,ID_NODO,C_UCID,C_ORIGEN_NUM,C_ORIGEN_NAM
  #
+
  E,C_ORIGEN_EXTEN,C_DESTINO_NUM,C_DESTINO_NAME,ID_DISPOS
  }
+
  ITIVO) VALUES(now(),${ARG1},"${ARG2}","${ARG3}","$
   
+
  {ARG4}","${ARG5}","${ARG6}","${ARG7}",${ARG8}))
  ami
+
  <br>
  {
+
  ;same =>n,DumpChan
max_action = 128
+
  same =>n,Return(OK)
ip_asterisk = localhost
+
<br>
puerto_ami = 5038
+
include => Cen_finLlamada
usuario_ami = vivait
+
<br>
clave_ami = vivactisecret
+
<br>
to_inac = 30
+
---------------------------------------
to_audit = 600
+
 
audit_max_resp = 3
+
 
}
+
|} <br>
+
 
 +
 
 +
* '''En /etc/asterisk/ext_MARCAR_Extension_Dial.conf'''
  
  
Los siguientes son los campos del fichero de configuración:
+
*En este fichero hay que añadir lo que está en negrita.
  
{| class="wikitable"
+
:{|
 
|-
 
|-
!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
+
[Cen_Marcar_Extension_Dial_Gosub]
|-
+
;------------------------------------------------------
|archivo_pid||# Archivo con identificador de proceso: (-: /var/run/vivait-cti.pid)||
+
-----------
|-
+
exten => s,1,NoOp(MDSUBMAREXTEN*)
|archivo_traza||# Archivo_traza: (-: stdout o /var/log/vivait-cti.log si soy_demonio)||
+
<br>
|-
+
  same =>  n,Gosub(Cen_Sub_updAnswer,s,1(${UCID},$
|nivel_traza||# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)||
+
{ID_DISPOSITIVO},${ENR_IDSEGMENTO}))
|-
+
<br>
|pruebas||||
+
  same =>  n,ExecIf($[$[${MDDEBUG}-0] > 1]?DumpChan)
|-
+
<br>
|hay_flush_traza||||
+
  ;Declarar la variable PASARTONOS en el trunk que
|-
+
queramos
|subsistema||# No se usa. No modificar||
+
  same => n,ExecIf($["${PASARTONOS}"="1"]?
|-
+
SetChannelOption(14,0))
|num_msj||# Numero de mensajes. No modificar||
+
<br>
|-
+
  ;Rellenar el historico de llamadas
|num_buf||# Numero de buffer. No modificar||
+
; same =>    n,Gosub(Cen_Sub_updDatHisLlam_tipo,s,1($
|-
+
{DIALEDPEERNUMBER},${TIPOLLAMHIST_ENTRANTE},${UCID}))
|en_comandos||||
+
  same =>    n,Gosub(Cen_Sub_updDatHisLlam_tipo_ID,s,1($
|-
+
{DIALEDPEERNUMBER},${TIPOLLAMHIST_ENTRANTE},$
|en_eventos||||
+
{ID_HLL_S}))
|-
+
<br>
|archivo_conf||Archivo configuracion de asterisk para las supercolas||
+
'''; Poner contestadas las llamadas de conexiones'''
|-
+
'''desatendidas'''
|puerto_escucha||Puerto de supervision del demonio||
+
'''same =>    n,GosubIf($["${PQCTI_REGISTRAR()}"="SI"]?'''
|-
+
'''Cen_Sub_updateDatConxDesaten_Contestada,s,1(${UCID}))'''
|hay_cti||hay cti||1 hay cti – o no hay
+
<br>
|-
+
same =>  n,Return()
|max_conx||Numero maximo de conexiones||
+
 
|-
+
|} <br>
|max_call||Numero maximo de llamadas||
+
 
|-
+
 
|max_channel||Numero maximo de canales||
+
 
|-
+
'''Descripción de campos del archivo pqcti.conf:'''
|max_monitor||Numero maximo de grabaciones||
+
 
|-
+
'''• general'''
|max_str_aux||||
+
 
|-
+
*'''debug'''. Activa la depuración desde el inicio, aunque puede activarse mediante comando "pqcti debug on"
|puerto_escucha||Puesto escucha del demonio||
+
 
|-
+
*'''llamadas_registrar'''. Booleano que indica si se mantiene un registro de llamadas.Si se desactiva esta opción,
|link_id||||
+
no hay registro y, por tanto, no se soportan los comandos "cmd_liberar" y los comandos informativos.
|-
+
 
|hay_vdn||Existen vdns||1 existen – o no existen
+
 
 +
'''• comandos'''
 +
 
 +
*''' url_comandos_v1'''. La parte no común de la url. Con la configuración de http.conf propuesta, la url completa sería:
 +
http://<IP_NODO>:8089/vcall-nodo/pqcti/v1/comandos
 +
 
 +
*''' acl.''' Configura el "acl" a utilizar en el archivo "/etc/asterisk/acl.conf"
 +
 
 +
 
 +
'''• llamada_sale'''
 +
 
 +
*''' canal_A_tech.''' Configura la tecnología de los canales de extensiones. Típicamente "sip". Podría ser "local", pero:
 +
 
 +
  '''¡¡¡CUIDADO !!! si se usase un canal local, se perdería la función de "setvar" en el "peer": se pierde ID_DISPOSITIVO.'''
 +
 
 +
 
 +
* '''canal_A_dial_cad_fmt.''' Si los canales de extensiones fuesen "sip/<exten>", entonces este campo sería "%s". Si la tecnología fuese "local", este campo sería "%s@<contexto>/n".
 +
 
 +
* '''contexto.''' Es el contexto en el que se inicia la llamada saliente. Como son necesarios algunos ajustes, debe existir un contexto especial antes de ir al contexto genérico "Cen_Inicio_Sip".
 +
 
 +
* '''temporizador_segs.''' Tiempo máximo (en segs.) para el descolgado de la extensión para la que se solicita el inicio de la llamada saliente.
 +
 
 +
===== Aplicaciones para el dialplan de asterisk =====
 +
 
 +
 
 +
 
 +
* '''pqctiLlamSaleIniciada''' (sin parámetros). Debe invocarse al inicio del dialplan de una llamada saliente. Sólo es obligatorio que se invoque si se ha configurado "llamadas_registrar=true".
 +
 
 +
 
 +
* '''pqctiLlamEntra'''. Debe invocarse al inicio del dialplan de una llamada entrante. Sólo es obligatorio que se invoque si se ha configurado "llamadas_registrar=true".
 +
 
 +
 
 +
* '''pqctiLlamLiberada'''. Debe invocarse al finalizar una llamada que previamente ha sido registrada en pqcti con las aplicaciones anteriores. Sólo es obligatorio que se invoque si se ha configurado "llamadas_registrar=true".
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
===== Comandos de asterisk =====
 +
 
 +
 
 +
 
 +
A continuación se muestran varios comandos de pqcti para asterisk.
 +
 
 +
 
 +
 
 +
{| class="wikitable sortable"
 
|-
 
|-
|hay_usuarios||Existen usuarios||1 existen – o no existen
+
! Comando!! Descripción
 
|-
 
|-
|clave||Clave usuario cti cifrada||
+
| '''pqcti show''' || Lista los datos de configuración y de las llamadas registradas.
 
|-
 
|-
|ip||Direcion de red de escucha del cti||
+
| '''pqcti reload''' || Recarga la configuración si se ha modificado "/etc/asterisk/pqcti.conf".
 
|-
 
|-
|msk||Mascara de red de escucha del cti||
+
| |'''pqcti debug [on|off]''' || Activa y desactiva la depuración del módulo.
 
|-
 
|-
|makeCall_primero_dentro||||
+
|}
|-
+
 
|makeCall_primero_fuera_agente_descuelga||||
+
 
|-
+
 
|temporizador_makeCall||Tiempo maximo para realizar llamada||
+
 
|-
+
===== Tabla en base de datos =====
|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'''
+
Con el fin de que otra aplicación pueda seguir las llamadas registradas en pqcti, se ha previsto una nueva tabla en base de datos: DAT_CONX_DESATEN.
  
==== Introducción al aprovisionamiento ====
+
Dicha tabla integra todos los registros de todos los nodos vivait y será mantenida por el dialplan.
  
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 '''MD'''tel se utiliza una herramienta que permite que los teléfonos IP soportados y homologados por '''MD'''tel ([[http://vivait-wiki.MDtel.net/wiki/vivait/index.php/Documentaci%C3%B3n_de_usuario_VIVAit_Call_3.0#Terminales_telef.C3.B3nicos ver Terminales telefónicos]]) se puedan aprovisionar automáticamente, brindando una fácil implementación y administración cotidiana.
 
  
 +
Por supuesto, esa tabla sólo tiene sentido cuando "llamadas_registrar=true".
  
===== ¿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.
+
:{|
 +
|-
 +
|
  
===== TFTP =====
+
------
 +
CREATE TABLE IF NOT EXISTS `nimitz`.`DAT_CONX_DESATEN`
 +
(
 +
  `ID` INT NOT NULL AUTO_INCREMENT,
 +
  `D_HORA_INICIO` DATETIME NULL,
 +
  `D_HORA_FIN` DATETIME NULL,
 +
  `N_DURACION` INT NULL DEFAULT 0,
 +
  `ID_NODO` INT NULL DEFAULT NULL,
 +
  `C_UCID` VARCHAR(32) NULL,
 +
  `C_ORIGEN_NUM` VARCHAR(32) NULL,
 +
  `C_ORIGEN_NAME` VARCHAR(128) NULL,
 +
  `C_ORIGEN_EXTEN` VARCHAR(32) NULL,
 +
  `C_DESTINO_NUM` VARCHAR(32) NULL,
 +
  `C_DESTINO_NAME` VARCHAR(128) NULL,
 +
  `ID_DISPOSITIVO` VARCHAR(32) NULL,
 +
  PRIMARY KEY (`ID`),
 +
  UNIQUE INDEX `IDX_UCID_UNIQUE` (`C_UCID` ASC)
 +
VISIBLE,
 +
  INDEX `IDX_HORA_INICIO` (`D_HORA_INICIO` ASC)
 +
VISIBLE)
 +
------
  
'''TFTP''' son las siglas de '''T'''rivial '''F'''ile '''T'''ransfer '''P'''rotocol ''(Protocolo de transferencia de archivos trivial)''.
+
|} <br>
  
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  
+
===== Interfaz para los servicios =====
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”.
 
  
===== Funcionamiento del servidor phoneprove-TFTP =====
 
  
A continuación se muestra un esquema que facilita el entendimiento del funcionamiento del servidor phoneprove-TFTP:
+
Todos los servicios están implementados en base a un POST con un json en el cuerpo de la solicitud, que contiene los parámetros de invocación, y otro json en el cuerpo de la respuesta.
  
[[Archivo:Funcionamiento_Servidor.png‎ |center]]
+
En ambos casos, el json es un objeto con campos.
  
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.  
+
Está implementada, como opción, el uso de un GET con parámetros, pero no se recomienda su uso, excepto para pruebas, porque puede haber problemas con el conjunto de caracteres no ascii.
  
Desde phoneprove-TFTP se generara los archivos necesarios para cada teléfono y que sirven para ser aprovisionados automáticamente.
+
Si no hay problemas a nivel de red, de transporte o en las reglas básicas del comando, el estado de la respuesta es siempre "200 OK", indicándose los posibles errores en el json de respuesta.
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.
 
  
{|
+
Todas las respuestas contienen un campo denominado "resultado" (de la ejecución) que puede tomar los siguientes valores:
|-
 
|
 
  '''Nota:''' En instalaciones grandes habrá más de uno, quizás uno por sede grande; depende de la infraestructura de DHCP.
 
|}
 
  
===== Parámetros necesarios de Aprovisionamiento de Teléfonos =====
 
  
'''Notas:''' el aprovisionamiento desarrollado por '''MD'''tel, 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 '''''VIVA'''''it, 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 '''MD'''tel 
 
[[http://vivait-wiki.MDtel.net/wiki/vivait/index.php/Documentaci%C3%B3n_de_usuario_VIVAit_Call_3.0#Terminales_telef.C3.B3nicos ver Terminales  telefónicos]]
 
  
 +
* '''OK.''' La ejecución se ha iniciado correctamente. En el caso de la llamada saliente, no quiere decir que se haya establecido y, ni siquiera, que se haya iniciado porque puede que la extensión no descuelgue.
  
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 [[http://vivait-wiki.MDtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Plantillas | ver plantilla del portal de administración VIVAit]].  
+
* '''ERROR.''' Hay un error en los parámetros de invocación o en el estado de la llamada referida y no se puede ejecutar el comando solicitado.
  
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 .
+
* '''NO_EJECUTADO.''' Hay un problema no achacable a quién invoca y no se puede ejecutar el comando.
  
  
====== Parámetros de Aprovisionamiento globales ======
 
  
* Configuración de la red y MAC.  
+
Si El "resultado" no es "OK", se devuelve un campo "diagnóstico" con una cadena que describe el problema detectado. Siempre es texto en español, por lo que su uso previsto es para logs.
* Zona horaria.  
 
  
====== 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.
 
  
===== Aprovisionamiento de teléfonos nivel usuario =====
 
  
{|
+
===== Descipción de comandos y respuestas de json =====
|-
 
|
 
  '''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.
+
A partir de aquí se describen los comandos y respuestas en base a json de ejemplo, ya que los campos son triviales y autoexplicativos:
Para mas información ver [[http://vivait-wiki.MDtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Aprovisionamiento 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 [[http://vivait-wiki.MDtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Extensiones | 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:
+
*'''cmd_llamar -> Inicia una llamada saliente desde una extensión vivait-call.'''
  
:*El teléfono enviará un mensaje de multidifusión a través de la LAN.
+
Resultado esperado :  
:*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.  
+
:{|
 +
|-
 +
|
 +
cmd={
 +
  "comando": "cmd_llamar",
 +
  "extension": "201",
 +
  "ani_num": "201",
 +
  "ani_name": "ext_201",
 +
  "dnis_num": "221",
 +
  "dnis_name": "ext_221"
 +
}
 +
resp={
 +
  "comando": "cmd_llamar",
 +
  "ucid": "20999000031643889797",
 +
  "estado_actual": "llam_sale_espera",
 +
  "resultado": "OK",
 +
  "ahora": "20220203 130317.107"
 +
}
  
'''5)''' Asegúrese de que el teléfono encuentren el servidor TFTP, para ello esperar un tiempo adecuado para que termine el aprovisionamiento.
+
|} <br>
  
 +
En el comando, sólo son obligatorios: comando, extension y dnis_num. El resto son opcionales. Los campos "ani" no deben usarse, salvo por una buena razón.
 +
El campo "dnis_num" sólo sirve para presentar el dato en el display de la extensión que
 +
inicia la llamada.
  
'''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 <br /> o el cable Ethernet (si se utiliza la alimentación en línea PoE) para reiniciar los teléfonos.
 
|}
 
  
===== Aprovisionamiento de teléfonos nivel técnico =====
 
  
====== Plantilla de configuración ======
+
*'''cmd_liberar -> Libera una llamada establecida, que haya sido registrada en pqcti.'''
 +
 
 +
:{|
 +
|-
 +
|
 +
 
 +
cmd={
 +
  "comando": "cmd_liberar",
 +
  "ucid": "20999000031643889797"
 +
}
 +
resp={
 +
  "comando": "cmd_liberar",
 +
  "ucid": "20999000031643889797",
 +
  "resultado": "OK",
 +
  "ahora": "20220203 130804.526"
 +
}
  
La plantilla de configuración empleadas en el apartado  [[http://vivait-wiki.MDtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Plantillas | plantilla del portal de administración VIVAit]] de cada modelo está formada por una serie de variables.
+
|} <br>
  
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.  
+
(Este comando sólo puede invocarse si se ha configurado "llamadas_registrar=true").
  
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
 
  
====== Ficheros y paquetes necesarios ======
 
  
'''Paquetes previos:''' libnet-tftpd-perl, tftp-hpa, libnet-address-ip-local-perl
+
*'''info_llamadas -> Informa sobre las llamadas registradas en pqcti. Devuelve un array con la información de cada llamada.'''
'''Usuario de funcionamiento:''' root
 
  
{|
+
:{|
 
|-
 
|-
 
|
 
|
   '''Nota:'''  los archivos y directorios que generemos podrian necesitar que se permitiera el acceso al archivo de lectura <br/> y escritura en el servidor TFTP.
+
}
|}
+
resp={
 +
   "comando": "info_llamadas",
 +
  "llamadas": [
 +
    {
 +
      "ucid": "20999000051643890188",
 +
      "estado_actual": "llam_sale_iniciada",
 +
      "duracion_segundos": 8
 +
    }
 +
  ],
 +
  "resultado": "OK",
 +
  "ahora": "20220203 130957.149"
 +
}
  
'''Archivos necesarios:'''
+
|} <br>
  
/usr/local/sbin/phoneprov-tftp.pl
+
(Este comando sólo puede invocarse si se ha configurado "llamadas_registrar=true").
/usr/local/sbin/phoneprov-tftp.pm
 
/etc/MDtel/phoneprov-tftp.pconf
 
/etc/init/phoneprov-tftp.conf
 
/etc/logrotate.d/phoneprov-tftp
 
  
  
'''Directorios a crear:'''  
+
*'''info_llamadas_num -> IDevuelve el número de llamadas registradas en pqcti.'''
 +
 
 +
:{|
 +
|-
 +
|
 +
 
 +
resp={
 +
  "comando": "info_llamadas_num",
 +
  "llamadas_num": 1,
 +
  "resultado": "OK",
 +
  "ahora": "20220203 131001.134"
 +
}
 +
 
 +
|} <br>
 +
 
 +
(Este comando sólo puede invocarse si se ha configurado "llamadas_registrar=true").
 +
 
 +
 
 +
 
 +
 
 +
*'''info_llamada , "ucid"-> "20999000051643890188" -> IDevuelve el número de llamadas registradas en pqcti.'''
 +
 
 +
:{|
 +
|-
 +
|
 +
 
 +
resp={
 +
  "comando": "info_llamada",
 +
  "ucid": "20999000051643890188",
 +
  "estado_actual": "llam_sale_iniciada",
 +
  "duracion_segundos": 14,
 +
  "resultado": "OK",
 +
  "ahora": "20220203 131003.638"
 +
}
 +
|} <br>
  
/var/lib/phoneprov-tftp/plt
+
(Este comando sólo puede invocarse si se ha configurado "llamadas_registrar=true").
/var/lib/phoneprov-tftp/bin
 
  
*El archivo de configuración, '''phoneprov-tftp''', es el siguiente:
 
  
#
+
<br>
# Configuracion de phoneprov-tftp.pl
+
 
#
+
==== Vivait-CTI ====
# 0: Solo alarmas en archivo log - 1: alarmas y trazas
+
Permite la comunicación entre la aplicación '''''VIVA'''''it Desk de agente y el asterisk, sincronizando; convierte el protocolo “asterisk manager” a CSTA ('''''VIVA'''''it Desk “habla” CSTA).
$depurar = 1;
+
 
+
Es un proceso importante para el uso de '''''VIVA'''''it 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 '''''VIVA'''''it Desk y formularios hace el sistema difícilmente manejable
# 0: Arranca como proceso - 1: arranca como demonio
+
 
$soyDemonio = 1;
+
A efectos de diagnósticos, desde un SSH se ejecuta el comando “nc ip_maquina 1111”
 
# 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';
 
  
 +
'''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
  
*Los campos del fuchero de configuración y su significado se muestran en la su¡iguiente tabla:
+
Donde cada parámetro monitorizado indica:
  
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
!Campo !!Descripción !!Posibles valores (si aplica)
+
!ver!!Versión del proceso
 
|-
 
|-
|$depurar||# 0: Solo alarmas en archivo log - 1: alarmas y trazas||
+
|sis/inic||Fecha de arranque del proceso
 
|-
 
|-
|$soyDemonio||# 0: Arranca como proceso - 1: arranca como demonio||
+
|Sis/alarmas||Alarmas desde arranque
 
|-
 
|-
|$logArch =||# Archivo de log ('': salida estandar)||
+
|Sis/ultAlar||Fecha de última alarma
 
|-
 
|-
|$pidArch||# Archivo para el pid||
+
|Gmp/msj||
 
|-
 
|-
|$unaVezSolo||# 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion)||
+
|Gmp/buf||
 
|-
 
|-
|$db||Nombre de la base de datos||
+
|Gmp/tarea||
 
|-
 
|-
|$dbHost||IP o HOST máquina base de datos de tiempo real||
+
|Tmp/uptime||
 
|-
 
|-
|$dbPort||Puerto de escucha de mysql||
+
|Cti/numConx||Número de conexiones actuales / Número de conexiones máximo
 
|-
 
|-
|$dbUsuario||Usuario acceso Base de datos de tiempo real||
+
|Cti/numPend||
 
|-
 
|-
|$dbClave||Clave usuario acceso base de datos de tiempo real||
+
|Cti/numMakeCallPend||Llamadas pendientes de realizar
 
|-
 
|-
|$supPort ||Puerto de supervisión del demonio||
+
|Cti/numcall||
 
|-
 
|-
|$miDir ||||
+
|Cti/numChan||
 
|-
 
|-
|$bindDir||bindAddres||
+
|Cti/numAuxStr||
 
|-
 
|-
|$bindPuerto||Puerto de escucha del demonio||
+
|Cti/numMoniColas||Número de colas monitorizadas
 
|-
 
|-
|$dirPlantilla||Directorio de las plantillas de aprovisionamiento||
+
|Cti/numMoniDevice||
 
|-
 
|-
|$dirEstatico||Directorio archivos estáticos||
+
|Cti/numMoniCall||
 
|-
 
|-
|$dirDinamico||# Los archivos temporales con variables sustituidas están en el árbol de directorios a partir del indicado por '$dirDinamico'.||
+
|Cti/numMoniCallAuto||
 
|-
 
|-
|$toRRQ ||||
+
|Cti/numMoniCallByDevice||
 
|-
 
|-
|$toACK||Timeout ACK||
+
|Cti/numMoni||
 
|-
 
|-
|$errACK||Número de errores de ACK||
+
|Cti/auditCallErr||
 
|-
 
|-
|$tamBlq||Tamaño del bloque de archivos a transferir||
+
|Cti/auditAuxStrErr||
 
|-
 
|-
|$clasesCamposExtension||# Valores de E_TIPO_CAMPO en tabla COM_CAMPOS que enganchan ID_TABLA con CEN_EXTENSIONES ||
+
|Cti/ auditMsjReqErr||
 
|-
 
|-
|$clasesCamposUsuario||# Valores de E_TIPO_CAMPO en tabla COM_CAMPOS que enganchan ID_TABLA con CEN_USUARIOS ||
+
|Cti/ araChanID||
 
|-
 
|-
|$nomArchMacEstaticos||# Expresiones regulares de archivos con mac estaticos (separados por '>')||
+
|Cti/ araUniqueID||
 
|-
 
|-
|%archivo||# Traducciones previas de nombres de archivo estaticos||
+
|Cti/ araMoni||
 
|-
 
|-
|@y000000000044.cfg||# Traducciones previas de nombres de archivo dinámicos sin mac||
+
|Ami/esta||Estado de conexión contra manarger de asterisk
 
|-
 
|-
|@y000000000034.cfg||# Traducciones previas de nombres de archivo dinámicos sin mac||
+
|Ami/resp||
 
|-
 
|-
|@y000000000000.cfg||# Traducciones previas de nombres de archivo dinámicos sin mac||
+
|Ami/evs||Número de eventos (último minuto)
 
|-
 
|-
|@y000000000004.cfg||# Traducciones previas de nombres de archivo dinámicos sin mac||
+
||Ami/descar
 
|-
 
|-
|@y000000000036.cfg||# Traducciones previas de nombres de archivo dinámicos sin mac||
+
|Ami/err||Errores
 
|-
 
|-
|@y000000000058.cfg||# Traducciones previas de nombres de archivo dinámicos sin mac||
+
|Ami/errConx||Errores de conexión
 
|-
 
|-
|@y000000000069.cfg||# Traducciones previas de nombres de archivo dinámicos sin mac||
+
|Ami/numAct||
 
|-
 
|-
|@snom710.htm||# Traducciones previas de nombres de archivo dinámicos sin mac||
+
|Ami/auditErrAct||
|-
 
|@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||
 
 
|-
 
|-
 
|}
 
|}
  
==== Watchdog ====
+
Como complemento a los diagnósticos:
  
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.
+
Podremos examinar el fichero de configuración del proceso en '''/etc/MDtel/vivait-cti.conf'''
Si escribimos en CLI de asterisk perro tenemos los siguientes comandos:
 
  
{| class="wikitable" border="0" style="background:#ffffff" align="top"
+
*El fichero de configuración, '''vivait-cti.conf''', es el siguiente:
|-
 
|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
+
# 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
 
+
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
+
base
 
+
{
Tiene un fichero de configuración ubicado en /etc/asterisk/MDcrash.conf
+
cfg
 
+
{
{| class="wikitable" border="0" style="background:#ffffff" align="top"
+
soy_demonio = 1
|-
+
hay_syslog = 0
|Sección [perro]
+
# Archivo con identificador de proceso: (-: /var/run/vivait-cti.pid)
||activo=yes (Si esta o no activo)
+
archivo_pid = -
segs_dormir=1 (Un tick por segundo)
+
# Archivo_traza: (-: stdout o /var/log/vivait-cti.log si soy_demonio)
 
+
# No se usa si se activa hay_syslog
segs_inic=60
+
archivo_traza = -
 
+
}
segs_guarda=30
+
cfg_recarga
 
+
{
max_errores=
+
# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
|-
+
nivel_traza = 3
|Sección [sip_monitor_udp]
+
pruebas = 1
||segs_inic=60
+
hay_flush_traza = 1
 
+
}
segs_guarda=30 (Cada 30 segundos si no reciba trafico SIP genera core)
+
sis
 
+
{
max_errores=5 (Número máximo de errores)
+
# No se usa. No modificar
|-
+
subsistema = 0
|}
+
}
 
+
gmp
<!-- <br><br>
+
{
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
+
# Numero de mensajes. No modificar
<br><br>-->
+
num_msj = 1024
 
+
# Numero de buffer. No modificar
==== Proceso de Backup ====
+
num_buf = 1024
Las plataformas '''''VIVA'''''it Call y '''''VIVA'''''it Suite incluyen un script para realizar un proceso de backup.
+
}
 
+
}
Se utilizará el script '''backup.sh''', que se encuentra en el directorio '''etc/MDTel'''.
+
 
+
supercolas
Se ejecuta automaticamente mediante el uso de un cron
+
{
 
+
en_comandos = 0
'''texto del cron:'''
+
en_eventos = 0
 
+
# archivo_conf = supercolas.conf
SHELL=/bin/sh
+
}
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+
# m h dom mon dow user command
+
supervision
0 2 * * * root /etc/MDtel/backup.sh /etc/MDtel/backup.cfg
+
{
 
+
puerto_escucha = 1111
Para activar el script hay que descomentar la línea
+
}
  # m h dom mon dow user command
+
 
+
cti
Los directorios de los que se hace copia son:
+
{
* DIR=var/lib/asterisk/sounds/Particular
+
hay_cti = 1
* DIR=var/lib/asterisk/moh
+
# Dimensionamiento de recursos. Uno menos, ya que cero no vale
* DIR=etc
+
max_conx = 512
* DIR=etc/asterisk
+
max_call = 2048
* DIR=etc/cron.d
+
max_channel = 4096
* DIR=etc/dahdi
+
max_monitor = 512
* DIR=etc/exim4
+
max_str_aux = 512
* DIR=etc/ha.d
+
puerto_escucha = 4500
* DIR=etc/logrotate.d
+
link_id = 1
* DIR=etc/MDtel
+
#
* DIR=etc/mysql
+
hay_vdn = 1
* DIR=etc/network
+
hay_usuarios = 1
* DIR=etc/zabbix
+
usuarios
* DIR=usr/local/sbin
+
{
 
+
vivait
Por defecto se realiza un backup cada dos horas en la carpeta '''/var/spool/MDtel/backup'''.
+
{
 
+
clave = 3RSMbPlTi61rG5pySx9hhUokz8Fyy3Nql2w8Jairfl8=
Para cambiar la ruta de destino del backup habrá que modificar el fichero backup.sh, en concreto modificar la variable MDTEL.
+
ip = 0.0.0.0
 
+
msk = 0.0.0.0
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.
+
 
+
cti_recarga
Se guardarán 10 copias del fichero ''' backup.cfg '''
+
  {
 
+
makeCall_primero_dentro = 1
Los campos disponibles en el fichero son los siguientes:
+
makeCall_primero_fuera_agente_descuelga = 1
 
+
temporizador_makeCall = 30
{| class="wikitable"
+
fmt_canal_exten = SIP/%s
|-
+
# contextos para llamadas salientes makeCall y makePredictiveCal
!Campo !!Descripción !!Posibles valores (si aplica)
+
contexto_makeCall_primeroFuera = Cen_MakeCallPrimeroFuera
|-
+
contexto_makeCall_primeroFueraDentro = Cen_MakeCallPrimeroFueraDentro
|IP_BD ||IP o HOST máquina base de datos de tiempo real||
+
contexto_makeCall_primeroDentro = Cen_MakeCallPrimeroDentro
|-
+
# contextos para llamadas salientes desde myAcdSuperv
|HAY_SMB ||Si hay o no servidor SAMBA||1 si existe servidor SAMBA o 0 si no existe
+
contexto_myAcdSuperv_ProgreFuera = Cen_myAcdSuperv_ProgreFuera
|-
+
contexto_myAcdSuperv_ProgreDentro = Cen_myAcdSuperv_ProgreDentro
|HOST_SMB||IP o HOST servidor SAMBA||
+
contexto_myAcdSuperv_PredicFuera = Cen_myAcdSuperv_PredicFuera
|-
+
contexto_myAcdSuperv_PredicDentro = Cen_myAcdSuperv_PredicDentro
|USU_SMB||Usuario acceso servidor SAMBA||
+
# 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:
 +
 
 +
{| class="wikitable"
 +
|-
 +
!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)||
 
|-
 
|-
|CLAVE_SMB||Clave usuario acceso servidor SAMBA||
+
|archivo_traza||# Archivo_traza: (-: stdout o /var/log/vivait-cti.log si soy_demonio)||
 
|-
 
|-
|RUTA_SMB||Ruta donde se guardará el backup en el servidor SAMBA||
+
|nivel_traza||# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)||
 
|-
 
|-
|}
+
|pruebas||||
 
+
|-
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.
+
|hay_flush_traza||||
 
+
|-
===== Información adicional: como funciona un cron =====
+
|subsistema||# No se usa. No modificar||
 
+
|-
La información sobre el fucnionamiento de un cron puede encontrarse en: [http://lasegundapuerta.com/index.php/informatica/linux-y-software-libre/1709-comando-cron-en-linux-ubuntu Información sobre el comando cron]
+
|num_msj||# Numero de mensajes. No modificar||
 
+
|-
==== CHAT ====
+
|num_buf||# Numero de buffer. No modificar||
La información para configurar el CHAT y su funcionamiento puede encontrarse en:
+
|-
 
+
|en_comandos||||
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#CHAT_2 enlace]]
+
|-
 
+
|en_eventos||||
==== MEET ====
+
|-
 
+
|archivo_conf||Archivo configuracion de asterisk para las supercolas||
El esquema de conexión para el Meet es el siguiente:
+
|-
 
+
|puerto_escucha||Puerto de supervision del demonio||
[[File:Conexion.jpg|800px]]
+
|-
 
+
|hay_cti||hay cti||1 hay cti – o no hay
 
+
|-
La configuración necesaria en los navegadores, para posibilitar que se puedan compartir pantallas, se encuentra en el siguiente [[Preguntas_frecuentes_administraci%C3%B3n|enlace]]
+
|max_conx||Numero maximo de conexiones||
 
+
|-
 
+
|max_call||Numero maximo de llamadas||
Ficheros:
+
|-
 
+
|max_channel||Numero maximo de canales||
*El fichero config.json tiene la configuración necesaria para proporcionar el servicio.
+
|-
 
+
|max_monitor||Numero maximo de grabaciones||
 
+
|-
Fichero de configuracion MEET:
+
|max_str_aux||||
 
+
|-
/etc/janus/janus.cfg
+
|puerto_escucha||Puesto escucha del demonio||
/etc/janus/janus.plugin.echotest.cfg
+
|-
/etc/janus/janus.transport.http.cfg
+
|link_id||||
/etc/janus/janus.transport.websockets.cfg
+
|-
/etc/janus/vivait.plugin.meet.cfg
+
|hay_vdn||Existen vdns||1 existen – o no existen
/etc/janus/vivait.plugin.move.cfg
+
|-
 
+
|hay_usuarios||Existen usuarios||1 existen – o no existen
En los archivos de configuracion, es obligatorio revisar:
+
|-
*janus.cfg
+
|clave||Clave usuario cti cifrada||
interface = IP_NODO
+
|-
server_name = IP_NODO
+
|ip||Direcion de red de escucha del cti||
ice_enforce_list = IP_NODO (e ip publicas, si las hay)
+
|-
 
+
|msk||Mascara de red de escucha del cti||
*vivait.plugin.meet.cfg
+
|-
meet_url = https://IP_NODO/meet#
+
|makeCall_primero_dentro||||
local_nodo_id = ID_NODO
+
|-
local_ip = IP_NODO (escucha [sip])
+
|makeCall_primero_fuera_agente_descuelga||||
email_from_default_invitation = vivait-meet-18-04@mdtel.local
+
|-
smart_host = mdsmtp.mdtel.net
+
|temporizador_makeCall||Tiempo maximo para realizar llamada||
 
+
|-
*vivait.plugin.move.cfg
+
|fmt_canal_exten||||
local_nodo_id = ID_NODO
+
|-
local_ip = IP_NODO (escucha [sip])
+
|contexto_makeCall_primeroFuera||# contextos para llamadas salientes makeCall y makePredictiveCal||
 
+
|-
Fichero de logs:
+
|contexto_makeCall_primeroFueraDentro||# contextos para llamadas salientes makeCall y makePredictiveCal||
 
+
|-
/var/log/janus.log
+
|contexto_makeCall_primeroDentro||# contextos para llamadas salientes makeCall y makePredictiveCal||
 
+
|-
 
+
|contexto_myAcdSuperv_ProgreFuera||# contextos para llamadas salientes desde myAcdSuperv||
Los posibles problemas de conexión de los usuarios al portal habrá que analizarlos en la consola para analistas del  navegador.
+
|-
 
+
|contexto_myAcdSuperv_ProgreDentro||# contextos para llamadas salientes desde myAcdSuperv||
La configuración necesaria en el portal de administración de '''''VIVA'''''it Call se puede consultar en este [[Portal_de_administraci%C3%B3n_VIVAit#VIVAit_Meet_.28En_Construcci.C3.B3n.29|enlace]].
+
|-
 
+
|contexto_myAcdSuperv_PredicFuera||# contextos para llamadas salientes desde myAcdSuperv||
====Gran Hermano (GH)====
+
|-
 
+
|contexto_myAcdSuperv_PredicDentro||# contextos para llamadas salientes desde myAcdSuperv||
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,…
+
|-
 
+
|contexto_redirect||# contexto para transferencias||
Esquema de instalación:
+
|-
 
+
|expr_esExtenLocal||# expresiones regulares. Se evaluan en el orden indicado||
[[File:Gran hermano.png|800px |center]]
+
|-
 
+
|expr_esExtenInterna ||# expresiones regulares. Se evaluan en el orden indicado||
 
+
|-
 
+
|expr_esCola||# expresiones regulares. Se evaluan en el orden indicado||
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.
+
|expr_esPuntoDistribucion||# expresiones regulares. Se evaluan en el orden indicado||
 
+
|-
 
+
|expr_esPuntoEnrutamiento||# expresiones regulares. Se evaluan en el orden indicado||
===== Intz-gh =====
+
|-
El demonio que gestiona el Gran Hermano es Intz-gh, que se encuentra en versión V0.1.0.
+
|expr_esNumPrivateLocal||# expresiones regulares. Se evaluan en el orden indicado||
 
+
|-
El demonio tiene un fichero de configuración:  '''/etc/Mdtel/intz-gh.conf''' con el siguiente aspecto:
+
|expr_esNumPrivateUnknown||# expresiones regulares. Se evaluan en el orden indicado||
+
|-
#
+
|expr_esNumPublicNational||# expresiones regulares. Se evaluan en el orden indicado||
# Los nombres no pueden tener numeros
+
|-
# Si el valor de una cadena contiene espacios, se pondra entre comillas dobles
+
|expr_esNumPublicInternational||# expresiones regulares. Se evaluan en el orden indicado||
# Los valores comentados indican valores por defecto
+
|-
base
+
|audit_hay_Call||||
{
+
|-
cfg
+
|audit_call_minutContestada||||
{
+
|-
soy_demonio = 1
+
|audit_call_minutNoContestada||||
hay_syslog = 0
+
|-
# Archivo con identificador de proceso: (-: /var/run/intz-nimitz.pid)
+
|audit_hay_AuxStr||||
archivo_pid = -
+
|-
# Archivo_traza: (-: stdout o /var/log/intz-nimitz.log si soy_demonio)
+
|audit_AuxStr_minut||||
# No se usa si se activa hay_syslog
+
|-
archivo_traza = -
+
|audit_hay_MsjReq||||
}
+
|-
cfg_recarga
+
|audit_MsjReq_minut||||
{
+
|-
# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
+
|max_action||Numero maximo de acciones en el manager de asterisk||
nivel_traza = 3
+
|-
pruebas = 1
+
|ip_asterisk||Ip del asterisk de ACD||
hay_flush_traza = 1
+
|-
# traza_milisegundos = 1
+
|puerto_ami||Puerto del manager de asterisk ACD||
}
+
|-
sis
+
|usuario_ami||Usuario del manager de asterisk del ACD||
{
+
|-
# No se usa. No modificar
+
|clave_ami||Clave del manager de asterisk del ACD||
subsistema = 0
+
|-
}
+
|to_inac||Timeout de inactividad||
gmp
+
|-
{
+
|to_audit||||
# Numero de mensajes. No modificar
+
|-
num_msj = 256# Numero de buffer. No modificar
+
|audit_max_resp||Tiempo maximo de respuesta||
num_buf = 256
+
|-
}
+
|}
}
+
 
supervision
+
 
{
+
* Podremos examinar los logs del proceso en '''/var/log/vivait-cti.conf'''
puerto_escucha = 1116
+
 
}
+
==== Introducción al aprovisionamiento ====
supervision_recarga
+
 
{
+
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 '''MD'''tel se utiliza una herramienta que permite que los teléfonos IP soportados y homologados por '''MD'''tel ([[http://vivait-wiki.MDtel.net/wiki/vivait/index.php/Documentaci%C3%B3n_de_usuario_VIVAit_Call_3.0#Terminales_telef.C3.B3nicos ver Terminales telefónicos]]) se puedan aprovisionar automáticamente, brindando una fácil implementación y administración cotidiana.  
to_periodo = 60
+
 
}
+
 
regexp
+
===== ¿Qué es aprovisionar? =====
{
+
 
hay_regexp = 1
+
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.
}
+
 
regexp_recarga
+
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.  
{
+
 
num_entradas = 32
+
===== TFTP =====
inc_entradas = 128
+
 
max_entradas = 1024
+
'''TFTP''' son las siglas de '''T'''rivial '''F'''ile '''T'''ransfer '''P'''rotocol ''(Protocolo de transferencia de archivos trivial)''.  
}
+
 
vivaitcall
+
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.
{
 
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:
+
Algunos detalles del TFTP:  
  
 
+
* Utiliza UDP (puerto 69) como protocolo de transporte (a diferencia de FTP que utiliza los
{| class="wikitable"
+
puertos 20 y 21 TCP).
|-  
+
* No puede listar el contenido de los directorios.
!Campo!!Descripción
+
* 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”.
 +
 
 +
===== Funcionamiento del servidor phoneprove-TFTP =====
 +
 
 +
A continuación se muestra un esquema que facilita el entendimiento del funcionamiento del servidor phoneprove-TFTP:
 +
 
 +
[[Archivo:Funcionamiento_Servidor.png‎ |center]]
 +
 
 +
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.
 +
 
 +
{|
 
|-
 
|-
|soy_demonio || # 0: Arranca como proceso - 1: arranca como demonio
+
|
 +
  '''Nota:''' En instalaciones grandes habrá más de uno, quizás uno por sede grande; depende de la infraestructura de DHCP.
 +
|}
 +
 
 +
===== Parámetros necesarios de Aprovisionamiento de Teléfonos =====
 +
 
 +
'''Notas:''' el aprovisionamiento desarrollado por '''MD'''tel, 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 '''''VIVA'''''it, 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 '''MD'''tel 
 +
[[http://vivait-wiki.MDtel.net/wiki/vivait/index.php/Documentaci%C3%B3n_de_usuario_VIVAit_Call_3.0#Terminales_telef.C3.B3nicos 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 [[http://vivait-wiki.MDtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Plantillas | 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 .
 +
 
 +
 
 +
====== Parámetros de Aprovisionamiento globales ======
 +
 
 +
* Configuración de la red y MAC.
 +
* Zona horaria.
 +
 
 +
====== 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.
 +
 
 +
===== Aprovisionamiento de teléfonos nivel usuario =====
 +
 
 +
{|
 
|-
 
|-
|hay_syslog || Si hay servidor de syslog
+
|
|-
+
  '''Notas:''' La dirección MAC debe estar especificada en letras mayúsculas.
|archivo_pid || # Archivo con identificador de proceso: (-: /var/run/vivait-cti.pid)
+
  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. 
|archivo_traza | |# Archivo_traza: (-: stdout o /var/log/vivait-cti.log si soy_demonio)
+
|}
 +
 
 +
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 [[http://vivait-wiki.MDtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Aprovisionamiento 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 [[http://vivait-wiki.MDtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Extensiones | 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.
 +
 
 +
{|
 
|-
 
|-
|nivel_traza || # Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
+
|
 +
  '''Nota''': Si no se reaprovisiona tras un periodo largo de tiempo, desenchufe el cable de alimentación eléctrica <br /> o el cable Ethernet (si se utiliza la alimentación en línea PoE) para reiniciar los teléfonos.
 +
|}
 +
 
 +
===== Aprovisionamiento de teléfonos nivel técnico =====
 +
 
 +
====== Plantilla de configuración ======
 +
 
 +
La plantilla de configuración empleadas en el apartado  [[http://vivait-wiki.MDtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Plantillas | 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
 +
 
 +
====== Ficheros y paquetes necesarios ======
 +
 
 +
'''Paquetes previos:''' libnet-tftpd-perl, tftp-hpa, libnet-address-ip-local-perl
 +
'''Usuario de funcionamiento:''' root
 +
 
 +
{|
 
|-
 
|-
|pruebas ||
+
|
|-
+
  '''Nota:'''  los archivos y directorios que generemos podrian necesitar que se permitiera el acceso al archivo de lectura <br/> y escritura en el servidor TFTP.
|hay_flush_traza ||
+
|}
|-
+
 
|traza_milisegundos ||
+
'''Archivos necesarios:'''
|-
+
 
|subsistema || # No se usa. No modificar
+
/usr/local/sbin/phoneprov-tftp.pl
|-
+
/usr/local/sbin/phoneprov-tftp.pm
|num_msj || # Numero de mensajes. No modificar
+
/etc/MDtel/phoneprov-tftp.pconf
|-
+
/etc/init/phoneprov-tftp.conf
|num_buf || # Numero de buffer. No modificar
+
/etc/logrotate.d/phoneprov-tftp
|-
+
 
|puerto_escucha || Puesto escucha del demonio
+
 
|-
+
'''Directorios a crear:'''
|to_periodo || Timeout para reconectar
+
 
|-
+
/var/lib/phoneprov-tftp/plt
|hay_regexp ||
+
/var/lib/phoneprov-tftp/bin
|-
+
 
|num_entradas ||
+
*El archivo de configuración, '''phoneprov-tftp''', es el siguiente:
|-
+
 
|inc_entradas ||
+
#
|-
+
# Configuracion de phoneprov-tftp.pl
|max_entradas ||
+
#
|-
+
# 0: Solo alarmas en archivo log - 1: alarmas y trazas
|hay_vic ||
+
$depurar = 1;
|-
+
|puerto_escucha || Puerto de escucha a nivel de VIVAit Call
+
# 0: Arranca como proceso - 1: arranca como demonio
|-
+
$soyDemonio = 1;
|identif ||
+
|-
+
# Archivo de log ('': salida estandar)
|entorno || Nombre base de datos
+
$logArch = '/var/log/phoneprov-tftp.log';
|-
+
|max_conx || Número máximo de conexiones a la base de datos
+
# Archivo para el pid
|-
+
$pidArch = '/var/run/phoneprov-tftp';
|to_solicitud || Timeout de solicitud
+
|-
+
# 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion)
|to_desconexion || Timeout de desconexión
+
$unaVezSolo = 0;
|-
+
|ip || Dirección de red de escucha del intz-nimitz
+
# 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:
 +
 
 +
{| class="wikitable"
 
|-
 
|-
|msk || Mascara de red de escucha del intz-nimitz
+
!Campo !!Descripción !!Posibles valores (si aplica)
 
|-
 
|-
|ip || IP localhost
+
|$depurar||# 0: Solo alarmas en archivo log - 1: alarmas y trazas||
 
|-
 
|-
|msk || mascara localhost
+
|$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||
 
|-
 
|-
|hay_mysql || Hay mysql
+
|$dbUsuario||Usuario acceso Base de datos de tiempo real||
 
|-
 
|-
|host || IP o HOST maquina base de datos  
+
|$dbClave||Clave usuario acceso base de datos de tiempo real||
 
|-
 
|-
|usuario || Usuario acceso Base de datos
+
|$supPort ||Puerto de supervisión del demonio||
 
|-
 
|-
|clave || Clave usuario acceso base de datos
+
|$miDir ||||
 
|-
 
|-
|base_datos||Nombre de la base de datos
+
|$bindDir||bindAddres||
 
|-
 
|-
|to_resp || Timeout de respuesta
+
|$bindPuerto||Puerto de escucha del demonio||
 
|-
 
|-
|hay_gh1 || Hay intz-gh
+
|$dirPlantilla||Directorio de las plantillas de aprovisionamiento||
 
|-
 
|-
|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
+
|$dirEstatico||Directorio archivos estáticos||
 
|-
 
|-
|exten_max_digi ||
+
|$dirDinamico||# Los archivos temporales con variables sustituidas están en el árbol de directorios a partir del indicado por '$dirDinamico'.||
 
|-
 
|-
|exten_max || # numero máximo de extensiones soportadas
+
|$toRRQ ||||
 
|-
 
|-
|enla_max || # numero máximo de enlaces soportados
+
|$toACK||Timeout ACK||
 
|-
 
|-
|retro_max || # numero máximo de retrollamadas activas concurrentes. '''Valor por defecto --> 50'''
+
|$errACK||Número de errores de ACK||
 
|-
 
|-
|retro_max_b || # numero máximo de retrollamadas activas concurrentes para una extensión como destino (max 31). '''Valor por defecto --> 4'''
+
|$tamBlq||Tamaño del bloque de archivos a transferir||
 
|-
 
|-
|to_retro_candidato || # tiempo máximo en segs. para activar una retrollamada tras finalizar llamada. '''Valor por defecto --> 60'''
+
|$clasesCamposExtension||# Valores de E_TIPO_CAMPO en tabla COM_CAMPOS que enganchan ID_TABLA con CEN_EXTENSIONES ||
 
|-
 
|-
|to_retro_activo || # tiempo máximo en segs. que una retrollamada espera a que las extensiones estén libres. '''Valor por defecto --> 300'''
+
|$clasesCamposUsuario||# Valores de E_TIPO_CAMPO en tabla COM_CAMPOS que enganchan ID_TABLA con CEN_USUARIOS ||
 
|-
 
|-
|to_limpiar || # temporizador de limpieza de tablas en segs.
+
|$nomArchMacEstaticos||# Expresiones regulares de archivos con mac estaticos (separados por '>')||
 
|-
 
|-
|hay_ias ||
+
|%archivo||# Traducciones previas de nombres de archivo estaticos||
 
|-
 
|-
|url  ||
+
|@y000000000044.cfg||# Traducciones previas de nombres de archivo dinámicos sin mac||
 
|-
 
|-
|puerto ||
+
|@y000000000034.cfg||# Traducciones previas de nombres de archivo dinámicos sin mac||
 
|-
 
|-
|to_conx_cmd || # tiempo máximo en segs. para conectar con Asterisk para comandos
+
|@y000000000000.cfg||# Traducciones previas de nombres de archivo dinámicos sin mac||
 
|-
 
|-
|to_lista_nodos || # periodo en horas para actualizar lista de id de nodos y sus direcciones ip
+
|@y000000000004.cfg||# Traducciones previas de nombres de archivo dinámicos sin mac||
|}
 
 
 
 
 
 
 
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
 
 
 
===== 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:
 
 
 
{| class="wikitable"
 
|-
 
!Campo!!Descripción
 
 
|-
 
|-
|retro_hay || Si es YES, empleamos la retrollamada '''multinodo''' del '''GH''', si es no, utilizamos la retrollamada de Asterisk
+
|@y000000000036.cfg||# Traducciones previas de nombres de archivo dinámicos sin mac||
 
|-
 
|-
|subscripcion_hay || Si es YES, empleamos los BLFs del '''GH''', si es no, utilizamos los BLFs de Asterisk
+
|@y000000000058.cfg||# Traducciones previas de nombres de archivo dinámicos sin mac||
 
|-
 
|-
|rest_red_ip || '''IP del servidor donde corre el intz-gh'''
+
|@y000000000069.cfg||# Traducciones previas de nombres de archivo dinámicos sin mac||
 
|-
 
|-
|rest_red_msk || Máscara de red donde corre el intz-gh
+
|@snom710.htm||# Traducciones previas de nombres de archivo dinámicos sin mac||
 
|-
 
|-
|rest_puerto_escucha || Puerto de escucha a nivel de VIVAit  Call
+
|@snom710-firmware.xml||# Traducciones previas de nombres de archivo dinámicos sin mac||
 
|-
 
|-
|retro_exten_tech || Tecnología empleada en las extensiones
+
|@spa514G.cfg ||# Traducciones previas de nombres de archivo dinámicos sin mac||
 
|-
 
|-
|retro_contexto || Contexto del GH
+
|@spa512G.cfg ||# Traducciones previas de nombres de archivo dinámicos sin mac||
|-
 
|retro_to_descolgar || timeot retrollamada descolgar
 
 
|-
 
|-
|retro_A_cartel_fmt || Información aparece en el display si la llamada es una retrollamada
 
 
|}
 
|}
  
 +
==== Watchdog ====
  
{| class="wikitable"
+
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:
!Campo!!Descripción
+
 
 +
{| class="wikitable" border="0" style="background:#ffffff" align="top"
 +
|-
 +
|Activar||Activar el Watchdog
 +
|-
 +
|Desactivar||Desactiva el Watchdog
 
|-
 
|-
|host0 || Base de datos de tiempo real
+
|Parada IWantToStop||Reinicia el asterisk y genera un core para pruebas
 
|-
 
|-
|port0 || Puerto de escucha
+
|Reload||Realiza una recarga del Watchdog y aplica cambios en su configuración
|}
+
|-
 
+
|Show||Ver el estado del Watchdog
  
El comando para conocer el estado de los diferentes elementos en Asterisk es:
+
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
 +
|-
 +
|}
  
'''mdgh show
+
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
Uso: mdgh show [config | exten <exten_num> | enla <peer>]]'''
 
  
Por ejemplo:
+
Tiene un fichero de configuración ubicado en /etc/asterisk/MDcrash.conf
  
'''mdgh show exten 6140'''
+
{| class="wikitable" border="0" style="background:#ffffff" align="top"
 +
|-
 +
|Sección [perro]
 +
||activo=yes (Si esta o no activo)
 +
segs_dormir=1 (Un tick por segundo)
  
:* mdgh Datos de la extension 6140:
+
segs_inic=60
:* 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'''
+
segs_guarda=30
  
* mdgh Datos del enlace Trunk_MDtel:
+
max_errores=3 
:* Datos en intz-gh:
+
|-
:* INUSE=0
+
|Sección [sip_monitor_udp]
:* RINGING=0
+
||segs_inic=60
:* TS=1538978766
 
:* HACE=461
 
  
 +
segs_guarda=30 (Cada 30 segundos si no reciba trafico SIP genera core)
  
El fichero de logs es el:
+
max_errores=5 (Número máximo de errores)
/var/log/intz-gh.log
+
|-
 +
|}
  
 +
<!-- <br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>-->
  
===== Retrollamadas =====
+
==== Proceso de Backup ====
 +
Las plataformas '''''VIVA'''''it Call y '''''VIVA'''''it Suite incluyen un script para realizar un proceso de backup.
  
El funcionamiento será el siguiente:
+
Se utilizará el script '''backup.sh''', que se encuentra en el directorio '''etc/MDTel'''.
  
*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.
+
Se ejecuta automaticamente mediante el uso de un cron
  
*El número llamado "B" podrá ser derivado de varias causas:
+
'''texto del cron:'''
  
::"A" ha llamado a "B"
+
SHELL=/bin/sh
::"A" ha llamado a un usuario ubicado en "B"
+
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
::"A" ha llamado a un destino desviado a "B"
+
# m h dom mon dow user command
::"A" ha llamado a un destino y por preruta acaba en "B"
+
0 2 * * * root  /etc/MDtel/backup.sh /etc/MDtel/backup.cfg
::...
 
  
*Las causas por las que se podrá programar una retrollamada son:
+
Para activar el script hay que descomentar la línea
::"B" está ocupada
+
# m h dom mon dow user command
::"B" no contesta
 
::"B" está ocupada y no contesta (ha sonado en línea 2--> )
 
  
 +
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
  
'''Solo podremos programar la retrollamada si el sistema devuelve: extensión ocupada o no contesta'''
+
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.
  
Estas dos últimas casuísticas son iguales a efectos de usuario, pero no a efectos internos...
+
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.
  
Si una llamada va a buzón, salta a un grupo ACD, a una IVR...entonces NO habrá retrollamada (porque se considera contestada)
+
Se guardarán 10 copias del fichero ''' backup.cfg '''
 
*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
 
  
 +
Los campos disponibles en el fichero son los siguientes:
  
 +
{| class="wikitable"
 +
|-
 +
!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||
 +
|-
 +
|}
  
====== <big>Acuerdos de funcionamiento</big> ======
+
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.
  
*Un origen A solo tendrá programa una retrollamada a un destino B; si teniendo una programada decide programar otra, la primera se pierde.
+
===== Información adicional: como funciona un cron =====
  
*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.
+
La información sobre el fucnionamiento de un cron puede encontrarse en: [http://lasegundapuerta.com/index.php/informatica/linux-y-software-libre/1709-comando-cron-en-linux-ubuntu Información sobre el comando cron]
  
*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)
+
==== CHAT ====
 +
La información para configurar el CHAT y su funcionamiento puede encontrarse en:
  
 +
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#CHAT_2 enlace]]
  
 +
==== MEET ====
  
====== <big>Cuestiones</big> ======
+
El esquema de conexión para el Meet es el siguiente:
  
*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.
+
[[File:Conexion.jpg|800px]]
 +
 
 +
 
 +
La configuración necesaria en los navegadores, para posibilitar que se puedan compartir pantallas, se encuentra en el siguiente [[Preguntas_frecuentes_administraci%C3%B3n|enlace]]
  
*Si salta al buzón no puede haber retrollamada.
 
  
==== GeneraConf ====
+
Ficheros:
  
El GeneraConf es el webservice (war) que se utiliza en la plataforma '''''<span style="color:#144F9B">VIVA</span>'''''it 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.
+
*El fichero config.json tiene la configuración necesaria para proporcionar el servicio.  
  
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.
+
Fichero de configuracion MEET:
  
GeneraConf lee de la tabla Dat_Sincroniza, genera los ficheros de configuración y los coloca en su sitio.
+
/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
  
===== Fichero de configuración =====
+
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)
  
GeneraConf es un proceso que no incorpora fichero de configuración. El proceso es llamado por los portales del entorno '''''<span style="color:#144F9B">VIVA</span>'''''it (portal de administración y portal de alertas) siendo los propios portales los que han de incluir los parámetros necesarios.
+
*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
  
En el portal de administración de '''''<span style="color:#144F9B">VIVA</span>'''''it Call tenemos que configurar la url para poder sincronizar los cambios realizados utilizando el proceso:
+
*vivait.plugin.move.cfg
 +
local_nodo_id = ID_NODO
 +
local_ip = IP_NODO (escucha [sip])
  
 +
Fichero de logs:
  
[[File:URL de sincronizacion.jpg]]
+
/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.
  
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:
+
La configuración necesaria en el portal de administración de '''''VIVA'''''it Call se puede consultar en este [[Portal_de_administraci%C3%B3n_VIVAit#VIVAit_Meet_.28En_Construcci.C3.B3n.29|enlace]].
  
*Si no se indica o se indica con valor 10 (alcanceSincroniza=10) se sincroniza el entorno '''''<span style="color:#144F9B">VIVA</span>'''''it Call, excluyendo el entorno de alertas.
+
====Gran Hermano (GH)====
*Si se indica con valor 20 (alcanceSincroniza=20), se sincroniza solo el entorno de Alertas.
 
  
A tal efecto se ha creado el siguiente enumerado:
+
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,…
  
public enum TAlcanceSincroniza  {
+
Esquema de instalación:
        ALCANCESSINC_VIVAITCALL("10"),
 
        ALCANCESSINC_ALERTAS("20");
 
       
 
        private TAlcanceSincroniza(String text) {
 
            this.text = text;
 
        }  
 
        private final String text;  
 
        @Override
 
        public String toString() {
 
            return text;
 
        }
 
    }
 
  
 +
[[File:Gran hermano.png|800px |center]]
  
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
+
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.
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.
+
===== Intz-gh =====
 +
El demonio que gestiona el Gran Hermano es Intz-gh, que se encuentra en versión V0.1.0.
  
===== Ficheros de logs =====
+
El demonio tiene un fichero de configuración:  '''/etc/Mdtel/intz-gh.conf''' con el siguiente aspecto:
 
+
El fichero con los log’s generado se encuentra en /var/log/Tomcat.x/generaConf.log.
+
#
 
+
  # 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
==== Nodo WebRTC ====
+
base
 
+
{
Se adjunta la documentación del nodo WebRTC:
+
cfg
 
+
{
 
+
soy_demonio = 1
<big>'''[[:medio:DOCUMENTO_WEBRTC_v9.pdf| Manual de instalación y operación del nodo WebRTC ]]'''</big>
+
hay_syslog = 0
 
+
# Archivo con identificador de proceso: (-: /var/run/intz-nimitz.pid)
 
+
archivo_pid = -
La arquitectura de WebRTC en VIVAit Call es la siguiente:
+
# Archivo_traza: (-: stdout o /var/log/intz-nimitz.log si soy_demonio)
 
+
# No se usa si se activa hay_syslog
 
+
archivo_traza = -
 
+
}
 
+
cfg_recarga
 
+
{
[[File:webrtc.png|900px|center]]
+
# 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
Componentes Principales:
+
}
 
+
sis
 
+
{
 
+
  # No se usa. No modificar
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
+
subsistema = 0
! align=center style="background-color:#0099ff;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0cm;color:#ffffff;" | '''''Componentes '''''
+
}
! align=center style="background-color:#0099ff;border:0.05pt solid #000000;padding:0cm;color:#ffffff;" | '''''Explicación'''''
+
  gmp
|-
+
{
| font-weight: bold;" | '''APACHE'''
+
  # Numero de mensajes. No modificar
| | Apache es un servidor web HTTP de código abierto.La funcionalidad principal de este servicio web es servir a los usuarios todos los ficheros necesarios para visualizar la web. Las solicitudes de los usuarios se hacen normalmente mediante un navegador (Chrome, Firefox, Safari, etc.).
+
num_msj = 256# Numero de buffer. No modificar
|-
+
num_buf = 256
| font-weight: bold;" | '''SERCEN'''
+
}
| | Sirve para identificar a los usuarios y garantizar que los mismos sean quienes dicen ser.
+
}
|-
+
supervision
| font-weight: bold;" | '''JANUS'''
+
  {
| | Janus es un servidor WebRTC concebido para ser de propósito general. Como tal, no proporciona ninguna funcionalidad más que implementar los medios para configurar una comunicación de medios WebRTC con un navegador, intercambiar mensajes JSON con él y transmitir RTP / RTCP y mensajes entre navegadores y la lógica de la aplicación del lado del servidor a los que están apegados.
+
  puerto_escucha = 1116
|-
+
}
| font-weight: bold;" | '''IPTABLES'''
+
supervision_recarga
| | Es un programa que se encarga de filtrar los paquetes de red , es decir , es la parte que se encarga de determinar qué paquetes de datos queremos que lleguen hasta el servidor y cuáles no.
+
  {
|-
+
  to_periodo = 60
| font-weight: bold;" | '''FAIL2BAN'''
+
}
| | Es una aplicación de Linux que permite evitar accesos no autorizados al servidor. Funciona bloqueando o baneando las IP que realicen varios intentos de acceso incorrectos al servidor.
+
regexp
|-
+
  {
| font-weight: bold;" | '''CLIENTE'''
+
hay_regexp = 1
| |      El cliente debe de proporcionar una ip pública , un dns para esa ip y un certificado válido.
+
}
 
+
regexp_recarga
|}
+
{
 
+
num_entradas = 32
 
+
inc_entradas = 128
 
+
max_entradas = 1024
 
+
}
 
+
vivaitcall
 
+
{
=== Requerimientos de conectividad ===
+
hay_vic = 1
 
+
puerto_escucha = 5556
El esquema siguiente muestra como ejemplo todos los flujos de información existentes en un entorno típico de <big>'''telefonía corporativa (sin presencia)'''</big> ('''''VIVA'''''it Call)
+
identif = gh_000
 
+
entorno = gh
[[Archivo:Flujos corporativa.png|cebter]]
+
max_conx = 4
 
+
}
En el entorno de <big>'''Contact Center'''</big>, encontramos los siguientes flujos <big>'''entre servicios'''</big> (comunicaciones entre servidores, ('''''VIVA'''''it Suite))
+
vivaitcall_recarga
 
+
{
[[Archivo:Flujos Contact servicios.png|650px|center]]
+
to_solicitud = 10
 
+
to_desconexion = 10
y <big>'''entre usuarios y servicios'''</big> los reflejados a continuación:
+
ip_valida
 
+
{
[[Archivo:Flujos Contact puestos.png|600px|center]]
+
# Hasta 32 bloques de direcciones validas
 
+
todas
{| class="wikitable"
+
{
|-
+
ip = 0.0.0.0
!Lado A!!Lado B!!Puertos!!Sentido!!Observ.
+
msk = 0.0.0.0
|-
+
}
|Terminal telefónico||Servidor||TCP 5060||A -> B||Señalización SIP
+
localhost
|-
+
{
|Terminal telefónico||Servidor||UDP 5060||A -> B||Señalización SIP
+
ip = 127.0.0.1
|-
+
msk = 255.255.255.255}
|Terminal telefónico||Servidor||10000 a 20000||A -> B
+
}
B -> A
+
}
||RTP
+
mysql
|-
+
{
|Terminal telefónico||Servidor TFTP||UDP 69||A -> B
+
hay_mysql = 1
B -> A
+
host = BDTR
||Para actualización de terminales por TFTP
+
usuario = nimitz
|-
+
clave = phikau3iwCe4O0PP5b09ng==
|Terminal telefónico||Servidor NTP||UDP 123||A -> B||
+
base_datos = nimitz
|-
+
}
|'''''VIVA'''''it Desk||Servidor||TCP 4500||A -> B||Comunicación CTI
+
mysql_recarga
|-
+
{
|'''''VIVA'''''it Desk||Servidor||TCP 3306||A -> B||Acceso a Mysql Base de datos
+
to_resp = 5
|-
+
}
|'''''VIVA'''''it Desk||Servidor Syslog||UDP 514||A -> B||Para envio de logs de agente
+
gh1
|-
+
{
|'''''VIVA'''''it Supervisor||Servidor||TCP 3306||A -> B||Acceso a Mysql Base de datos
+
hay_gh1 = 1
|-
+
# umbrales para el numero de digitos de una extension
|'''''VIVA'''''it Tracker||Servidor||TCP 3306||A -> B||Acceso a Mysql Base de datos
+
# sirve para saber si un peer es una extension o un enlace
|-
+
exten_min_digi = 3
|'''''VIVA'''''it Tracker||Servidor||TCP 8180||A -> B||
+
exten_max_digi = 8
|-
+
# numero maximo de extensiones soportadas
|Actualizador||Servidor||TCP 80||A -> B||Necesario para actualizaciones de versiones de aplicaciones de agente y supervisores
+
exten_max = 500
|-
+
# numero maximo de enlaces soportados
|Portal de administración||Servidor||TCP 8180||A -> B||Acceso al portal de administración '''''VIVA'''''it Suite
+
enla_max = 20
|-
+
# numero maximo de retrollamadas activas concurrentes
|'''''VIVA'''''it Tracker Web||Servidor||TCP 8180||A -> B||
+
retro_max = 50
|-
+
# numero maximo de retrollamadas activas concurrentes para una extension como destino (max 31)
|Monitor||Servidor||TCP 8180||A -> B||Wallboard
+
retro_max_b = 4
|-
+
}
|Monitorización||Servidor||TCP 80||A -> B||Acceso a portal monitorización (Zabbix)
+
gh1_recarga
|-
+
{
|}
+
# tiempo maximo en segs. para activar una retrollamada tras finalizar llamada
 
+
to_retro_candidato = 60
<br><br>
+
# tiempo maximo en segs. que una retrollamada espera a que las extensiones esten libres
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0 Volver al índice]
+
to_retro_activo = 300
<br><br>
+
# temporizador de limpieza de tablas en segs.
 
+
to_limpiar = 10
=== Gateways ===
+
}
El concepto de gateway como tal no existe en la plataforma '''''VIVA'''''it; existen nodos de ACD y nodos de corporativa.
+
  ias
 
+
{
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
+
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
 +
}
  
El concepto gateway queda pues suscrito a entornos meramente comerciales
+
Los campos del fichero de configuración y su significado son los siguientes:
  
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'''
+
{| class="wikitable"
 
+
|-
Al ejecutar este comando obtenemos la salida:
+
!Campo!!Descripción
 
+
|-
[[Archivo:Enlace_Exterior.png |center]]
+
|soy_demonio || # 0: Arranca como proceso - 1: arranca como demonio
 
+
|-
Las columnas ''Host'' y ''Port'' nos muestran las conexiones establecidas y nos informa de un posible problema de conexión.
+
|hay_syslog || Si hay servidor de syslog
 
+
|-
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:
+
|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)
[[Archivo:Ejemplo_no_conexion.png |center]]
+
|-
 
+
|nivel_traza || # Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
<!--
 
<span style="background:#00FF00">FALTA AQUI DIAGNOSTICOS Y OPERACIONES DE ENLACES EXTERNOS</span>
 
-->
 
 
 
===  Servidor de grabación ===
 
==== 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.
 
 
 
<br><br>
 
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
 
 
=== 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 '''''VIVA'''''it Reporting”.
 
 
 
==== Formato de fichero de intercambio para '''''VIVA'''''it Reporting ====
 
{| class="wikitable"
 
 
|-
 
|-
! Nombre !! Descripción !! Ejemplo
+
|pruebas ||
 
|-
 
|-
| colspan="3"| Selección de registros
+
|hay_flush_traza ||
 
|-
 
|-
| SQL_selec || Expresión SQL que se añadirá al where a la SQL principal. || C_ORIGEN like '6%' and C_COD_CLIENTE= '023'
+
|traza_milisegundos ||
 
|-
 
|-
| SQL_select_leido || Filtro de selección legible
+
|subsistema || # No se usa. No modificar
|| 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
+
|num_msj || # Numero de mensajes. No modificar
 
|-
 
|-
| colspan="3"| Salida
+
|num_buf || # Numero de buffer. No modificar
 
|-
 
|-
| FIC_extension || Extensión de fichero de salida: PDF, XLSX, CSV || PDF
+
|puerto_escucha || Puesto escucha del demonio
 
|-
 
|-
| FIC_tipo_entrega || 'P': Pantalla, 'D': Directorio, 'C': Correo || D
+
|to_periodo || Timeout para reconectar
 
|-
 
|-
| FIC_destino || Si 'C', dirección de correo, si 'D', ruta del directorio || D:\informes\
+
|hay_regexp ||
 
|-
 
|-
| colspan="3"| Plantilla
+
|num_entradas ||
 
|-
 
|-
| INF_modelo || Ruta del fichero de plantilla || C:\Modelos\llamadas.rep
+
|inc_entradas ||
 
|-
 
|-
| INF_descripción || Descripción del informe || Informe detallado de llamadas
+
|max_entradas ||
 
|-
 
|-
| colspan="3"| Base de datos
+
|hay_vic ||
 
|-
 
|-
| BD_ip || IP o nombre de máquina ||  
+
|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
 
|-
 
|-
| BD_puerto || Puerto de MySQL ||
+
|retro_max || # numero máximo de retrollamadas activas concurrentes. '''Valor por defecto --> 50'''
 
|-
 
|-
| BD_base_datos || Nombre de base de datos ||
+
|retro_max_b || # numero máximo de retrollamadas activas concurrentes para una extensión como destino (max 31). '''Valor por defecto --> 4'''
 
|-
 
|-
| BD_usuario || Usuario de base de datos ||  
+
|to_retro_candidato || # tiempo máximo en segs. para activar una retrollamada tras finalizar llamada. '''Valor por defecto --> 60'''
 
|-
 
|-
| BD_clave || Clave de acceso cifrada ||  
+
|to_retro_activo || # tiempo máximo en segs. que una retrollamada espera a que las extensiones estén libres. '''Valor por defecto --> 300'''
 
|-
 
|-
| colspan="3"| Parámetros
+
|to_limpiar || # temporizador de limpieza de tablas en segs.
 
|-
 
|-
| PAR_desde_vis || Fecha inicial de selección en formato legible (o '-' si no hay) || 01/01/2016
+
|hay_ias ||
 
|-
 
|-
| PAR_hasta_vis || Fecha final de selección en formato legible (o '-' si no hay) || 31/01/2016
+
|url  ||
 
|-
 
|-
| PAR_01 || Parámetro opcional ||  
+
|puerto ||
 
|-
 
|-
| .. || .. ||
+
|to_conx_cmd || # tiempo máximo en segs. para conectar con Asterisk para comandos
 
|-
 
|-
| PAR_20 || Parámetro opcional ||  
+
|to_lista_nodos || # periodo en horas para actualizar lista de id de nodos y sus direcciones ip
 
|}
 
|}
  
  
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:
+
Para saber si GH funciona correctamente usaremos el comando '''nc localhost 1116''', obteniendo resultados similares a los siguientes:
{| class="wikitable"
 
|-
 
| SQL_selec=(DAT_ACUMULADOS_COLAS.ID_COLA in (11))
 
  
SQL_select_leido=Skill igual a 60310
+
* 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)
  
SQL_orden=
+
Los '''log's''' que genera el sistema se encuentran en: /var/log/intz-gh.log
FIC_extension=pdf
 
  
FIC_tipo_entrega=P
+
===== mdgh.conf y Mdintz.conf =====
  
FIC_destino=C:\
+
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
  
INF_modelo=skill_setsi.rep
+
Y /etc/asterisk/'''Mdintz.conf'''
  
INF_descripcion=Skill. SETSI
+
[gh]
 +
host0=BDTR
 +
port0=5556
 +
toConx=5
 +
toRx=10
  
BD_ip=172.25.1.2
+
Los campos de los ficheros y su significado son los siguientes:
  
BD_puerto=3306
+
{| class="wikitable"
 +
|-
 +
!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
 +
|}
  
BD_base_datos=nimitz
 
  
BD_usuario=nimitz
+
{| class="wikitable"
 +
|-
 +
!Campo!!Descripción
 +
|-
 +
|host0 || Base de datos de tiempo real
 +
|-
 +
|port0 || Puerto de escucha
 +
|}
  
BD_clave=UIk5jNY9PVX5ogg=
 
  
PAR_desde_vis=-
+
El comando para conocer el estado de los diferentes elementos en Asterisk es:
  
PAR_hasta_vis=-
+
'''mdgh show
 +
Uso: mdgh show [config | exten <exten_num> | enla <peer>]]'''
  
PAR_01=
+
Por ejemplo:
|}
 
  
 +
'''mdgh show exten 6140'''
  
==== Resumen de significado de columnas en reporting histórico ====
+
:* mdgh Datos de la extension 6140:
Esta información se puede consultar en el siguiente enlace:
+
:* 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
  
http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Documentacion_de_usuario_VIVAit_Suite_3.3#Resumen_del_valor_de_las_columnas_que_aparecen_en_los_informes
+
'''mdgh show enla Trunk_MDtel'''
  
<!--
+
* mdgh Datos del enlace Trunk_MDtel:
===== Agente,asistencia diaria y agente. Asistencia diaria del grupo =====
+
:* Datos en intz-gh:
 +
:* INUSE=0
 +
:* RINGING=0
 +
:* TS=1538978766
 +
:* HACE=461
  
'''• Tiempo con personal:''' Tiempo que ha estado conectado el agente.<br/>
 
'''• Tiempo ACD:''' Tiempo de conversación ACD de las llamadas contestadas
 
o realizadas por el agente excluido el tiempo de retención.<br/>
 
'''• Tiempo ACW:''' Tiempo dedicado por el agente a tareas administrativas
 
tras finalizar las llamadas contestadas por el agente.<br/>
 
'''• Tiempo de llamado:''' Tiempo de ring en llamadas ACD.<br/>
 
'''• Tiempo disponible:''' Tiempo que el agente estuvo conectado y no está
 
incluido en ninguno de los anteriores.<br/>
 
'''• Tiempo AUX:''' Tiempo que el agente estuvo en pausa<br/>
 
'''• Tiempo retención:''' Tiempo que las llamadas estuvieron retenidas por
 
el agente.<br/>
 
'''• Llamadas ACD:''' Número de llamadas ACD contestadas o realizadas por
 
el agente.<br/>
 
'''• Llamadas transferidas:''' Número de llamadas ACD que fueron
 
transferidas por el agente.
 
  
===== Agente. Aux y Grupo Aux =====
+
El fichero de logs es el:
 +
/var/log/intz-gh.log
  
'''• Llamadas ACD:''' Número de llamadas ACD contestadas o realizadas por
 
el agente.<br/>
 
'''• Tiempo ACD:''' Tiempo de conversación ACD de las llamadas contestadas
 
o realizadas por el agente excluido el tiempo de retención.<br/>
 
'''• Tiempo ACW:''' Tiempo dedicado por el agente a tareas administrativas
 
tras finalizar las llamadas contestadas por el agente.<br/>
 
'''• Tiempo con personal:''' Tiempo que ha estado conectado el agente.<br/>
 
'''• Tiempo retención:''' Tiempo que las llamadas estuvieron retenidas por
 
el agente.<br/>
 
'''• Tiempo AUX:''' Tiempo que el agente estuvo en pausa.<br/>
 
'''• Desglose de tiempos AUX:''' Tiempo que el agente estuvo en cada uno
 
de los motivos de pausa.
 
  
===== Agente. Resumen diario =====
+
===== 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:
  
'''• Tiempo con personal:''' Tiempo que ha estado conectado el agente.<br/>
+
::"A" ha llamado a "B"
'''• Tiempo ACD:''' Tiempo de conversación ACD de las llamadas contestadas
+
::"A" ha llamado a un usuario ubicado en "B"
o realizadas por el agente excluido el tiempo de retención.<br/>
+
::"A" ha llamado a un destino desviado a "B"
'''• Tiempo ACW:''' Tiempo dedicado por el agente a tareas administrativas
+
::"A" ha llamado a un destino y por preruta acaba en "B"
tras finalizar las llamadas contestadas por el agente.<br/>
+
::...
'''• Tiempo de llamado:''' Tiempo de ring en llamadas ACD.<br/>
 
'''• Tiempo AUX:''' Tiempo que el agente estuvo en pausa.<br/>
 
'''• Tiempo disponible:''' Tiempo que el agente estuvo conectado y no está
 
incluido en ninguno de los anteriores.<br/>
 
'''• Tiempo retención:''' Tiempo que las llamadas estuvieron retenidas.<br/>
 
'''• Llamadas ACD:''' Número de llamadas ACD contestadas o realizadas por
 
el agente.<br/>
 
'''• Llamadas entrada Ext:''' Número de llamadas entrantes NO ACD a la
 
extensión.<br/>
 
'''• Llamadas salida Ext:''' Número de llamadas salientes NO ACD desde la
 
extensión.<br/>
 
'''• Llamadas transferidas:''' Número de llamadas ACD que fueron
 
transferidas por el agente.<br/>
 
'''• Llamadas retenidas:''' Número de retenciones que sufrieron las
 
llamadas contestadas por el agente.<br/>
 
'''• Tiempo promedio ACD:''' Tiempo ACD/ Llamadas ACD.<br/>
 
'''• Tiempo promedio ACW:''' TiempoACW/Llamadas ACD.<br/>
 
'''• Tiempo promedio de entrada a la Ext:''' Tiempo entrada Ext/
 
Llamadas entrada Ext.<br/>
 
'''• Tiempo promedio de salida a la Ext:''' Tiempo salida Ext/ Llamadas
 
salida Ext.<br/>
 
'''• Tiempo promedio retención:''' Tiempo retención/Llamadas retenidas.<br/>
 
'''• % Ocupación con ACW:''' ((Tiempo ACD+ Tiempo retención+ Tiempo
 
ACW)/Tiempo con personal)* 100.<br/>
 
'''• % Ocupación sin ACW:''' ((Tiempo ACD+ Tiempo retención)/Tiempo
 
con personal)* 100.<br/>
 
'''• % disp.:''' (Tiempo disponible/Tiempo conectado)* 100.
 
  
===== Agente. Grupo ACD diario =====
+
*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--> )
  
  
'''• Llamadas ACD:''' Número de llamadas ACD contestadas o realizadas por
+
'''Solo podremos programar la retrollamada si el sistema devuelve: extensión ocupada o no contesta'''
el agente de un grupo ACD.<br/>
+
 
'''• Tiempo ACD:''' Tiempo de conversación ACD de las llamadas contestadas
+
 
o realizadas por el agente excluido el tiempo de retención de un grupo
+
Estas dos últimas casuísticas son iguales a efectos de usuario, pero no a efectos internos...
ACD.<br/>
+
 
'''• Tiempo ACW:''' Tiempo dedicado por el agente a tareas administrativas
+
Si una llamada va a buzón, salta a un grupo ACD, a una IVR...entonces NO habrá retrollamada (porque se considera contestada)
tras finalizar las llamadas contestadas por el agente de un grupo ACD.<br/>
+
'''• Ayuda:''' Número de llamadas contestadas por el agente que necesitaron
+
*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
de consulta de un grupo ACD.<br/>
+
*Se podrá abortar una retrollamada ( (*44#), pero esto no borrará la última llamada (podemos arrepentirnos de haber abortado la retrollamada)
'''• Llamadas retenidas:''' Número de retenciones que el agente realizó
+
*En el gran hermano se guardará Nodo A + Ext_A (numero y name) + Ext_B (numero y name_usuario) + Causa + Timestamp
sobre las llamadas de ese grupo ACD.<br/>
+
*Solo se puede programar una retrollamada y que sea la última
'''• Tiempo retención:''' Tiempo que las llamadas estuvieron retenidas por
+
*Si la ultima llamada saliente es, por ejemplo exterior --> No hay posibilidad de programar ninguna retrollamada
el agente en ese grupo ACD.<br/>
 
'''• Trans. salida:''' Llamadas que finalizan con una transferencia.
 
  
===== Grupo ACD. Reporte diario con AHT =====
 
  
'''• Llamadas ACD:''' Número de llamadas ACD contestadas o realizadas por
 
el agente de un grupo ACD.<br/>
 
'''• Tiempo promedio ACD:''' Tiempo ACD/Llamadas ACD.<br/>
 
'''• Tiempo promedio ACW:''' Tiempo ACW/Llamadas ACD.<br/>
 
'''• Tiempo ACD:''' Tiempo de conversación ACD de las llamadas contestadas
 
o realizadas por el agente excluido el tiempo de retención de un grupo
 
ACD.<br/>
 
'''• Tiempo ACW:''' Tiempo dedicado por el agente a tareas administrativas
 
tras finalizar las llamadas contestadas por el agente de un grupo ACD.
 
'''• Tiempo de llamado:''' Tiempo de ring en llamadas ACD de un grupo
 
ACD.<br/>
 
'''• Tiempo AUX:''' Tiempo que el agente estuvo en pausa.<br/>
 
'''• Tiempo disponible:''' Tiempo que el agente estuvo conectado y no está
 
incluido en ninguno de los anteriores.<br/>
 
'''• Tiempo con personal:''' Tiempo que ha estado conectado el agente.<br/>
 
'''• Ayuda:''' Número de llamadas ACD contestadas por el agente en las que
 
necesito hacer uso de la consulta.<br/>
 
'''• Llamadas retenidas:''' Número de retenciones que el agente realizó
 
sobre las llamadas ACD contestadas.<br/>
 
'''• Tiempo retención:''' Tiempo que las llamadas contestadas ACD
 
estuvieron retenidas por el agente.<br/>
 
'''• Trans. salida:''' Número de llamadas ACD que fueron transferidas por el
 
agente.<br/>
 
'''• AHT:''' (Tiempo ACD+ Tiempo ACW+ Tiempo retención)/Llamadas
 
ACD.(Average Handle Time)<br/>
 
  
===== Grupo ACD. QOS  =====
+
====== <big>Acuerdos de funcionamiento</big> ======
  
'''• Vel. prom. de resp.:''' Tiempo total de espera de llamadas antes de ser
+
*Un origen A solo tendrá programa una retrollamada a un destino B; si teniendo una programada decide programar otra, la primera se pierde.
atendidas/Llamadas ACD.<br/>
 
'''• Tiempo prom. de aban.:''' Tiempo abandonadas(tiempo que las
 
llamadas abandonadas estuvieron en el grupo ACD)/Llamadas
 
abandonadas.<br/>
 
'''• Llamadas ofrecidas:''' Número de llamadas entrantes al grupo
 
ACD(Llamadas ACD+ Abandonadas+ Desbordadas).<br/>
 
'''• Llamadas ACD:''' Número de llamadas contestadas por los agentes.<br/>
 
'''• Llamadas abandonadas:''' Número de llamadas colgadas por el cliente
 
en el grupo ACD antes de ser contestadas o desbordadas.<br/>
 
'''• Desconectadas por ACD:''' Número de llamadas desbordadas que al
 
salir del grupo ACD se cuelgan.<br/>
 
'''• Desbordadas por ACD:''' Número total de llamadas desbordadas(incluye
 
las desconectadas).<br/>
 
'''• Llamadas atendidas en < 20s:'''Número de llamadas contestadas con
 
tiempo de respuesta menor a 20 segundos.<br/>
 
'''• Tiempo total de espera:''' Tiempo total que las llamadas estuvieron
 
esperando antes de ser atendidas.<br/>
 
'''• % N.A.:''' Llamadas ACD/(Llamadas ACD+ Llamadas abandonadas).<br/>
 
'''• % N.D.S.:''' (Llamadas atendidas en < 20s/Llamadas ofrecidas)* 100.<br/>
 
'''• T.M.O:''' (Tiempo ACD+ Tiempo ACW+ Tiempo retención)/Llamadas
 
ACD.(Tiempo Medio Operación)
 
  
===== Informe conducción (VDN Conducción) =====
+
*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.
  
'''•Entrantes al grupo ACD:''' Número de llamadas ofrecidas al grupo
+
*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)
ACD(Contestadas+ Abandonadas+ Desbordadas).<br/>
+
 
'''•Llamadas contestadas:''' Número de llamadas contestadas por un agente.<br/>
+
 
'''•Contestadas NDS:''' Número de llamadas contestadas en nivel de servicio,
+
 
tiempo de respuesta< 20 segundos.<br/>
+
====== <big>Cuestiones</big> ======
'''•Abandonadas:''' Número de llamadas abandonadas, colgadas por el cliente
+
 
antes de ser contestadas por un agente o desbordadas.<br/>
+
*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.
'''•Desconectadas:''' Número de llamadas desbordadas que fueron colgadas al
+
 
salir del grupo ACD.<br/>
+
*Si salta al buzón no puede haber retrollamada.
'''•Desbordadas:''' Número total de llamadas desbordadas (incluye desconectadas)<br/>
+
 
'''•Llamadas retenidas:''' Número de retenciones que el agente realizó sobre las
+
==== GeneraConf ====
llamadas ACD contestadas.<br/>
+
 
'''•% N.A.:''' (Llamadas contestadas/(Llamadas contestadas+ Abandonadas+
+
El GeneraConf es el webservice (war) que se utiliza en la plataforma '''''<span style="color:#144F9B">VIVA</span>'''''it 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.
Desbordadas))* 100.<br/>
 
'''•% N.D.S.:''' (Contestadas NDS/(Llamadas contestadas+ Abandonadas + Desbordadas))*100<br/>
 
'''•% Abandonadas:''' (Abandonadas/(Llamadas contestadas+ Abandonadas+ Desbordadas))* 100.<br/>
 
'''•Acum. RING:''' Tiempo de ring en llamadas ACD(entrantes).<br/>
 
'''•ACDTIME:''' Tiempo de conversación ACD de las llamadas contestadas o
 
realizadas por el agente excluido el tiempo de retención de un grupo ACD.<br/>
 
'''•Acum. ACW:''' Tiempo dedicado por el agente a tareas administrativas tras
 
finalizar las llamadas.<br/>
 
'''•Acum HOLD:''' Tiempo que las llamadas contestadas ACD estuvieron retenidas
 
por el agente.<br/>
 
'''•Acum. OTHER:''' Tiempo total que las llamadas estuvieron esperando en el
 
grupo ACD antes de ser atendidas.<br/>
 
'''•Acum. AVAIL:''' Acum. STAFF- (ACDTIME+ Acum. ACW+ Acum. RING+ Acum.
 
HOLD+ Acum. AUX).<br/>
 
'''•Acum. Staff:''' Suma del Tiempo conectado de todos los agentes al grupo
 
ACD(Este tiempo se repercute en todos los grupos ACD a los que esta
 
conectado el agente).<br/>
 
'''•Acum. AUX:''' Suma del Tiempo en pausa de todos los agentes que estén
 
conectados al grupo ACD(Este tiempo se repercute en todos los grupos ACD a
 
los que esta conectado el agente).<br/>
 
'''•Prom. ACD:''' ACDTIME/Llamadas contestadas.<br/>
 
'''•Prom. ACW:''' Acum. ACW/Llamadas contestadas.<br/>
 
'''•Prom. HOLD:''' Acum. HOLD/Llamadas retenidas.<br/>
 
'''•AHT:''' (ACDTIME+ Acum. ACW+ Acum. HOLD)/Llamadas contestadas.<br/>
 
'''•Vel. prom. de resp.:''' Tiempo total de espera de llamadas antes de ser
 
atendidas/Llamadas ACD.<br/>
 
'''•Tiempo máx. de espera:''' Tiempo de la llamada que estuvo mas tiempo en el
 
grupo ACD hasta que fue atendida.<br/>
 
'''•Agentes en PH:''' (Acum. Staff- Acum. AUX)/1800(Agentes conectados que no
 
están en pausa en el intervalo).<br/>
 
'''•Agentes Staff:''' Acum. Staff/1800(Agentes conectados en el intervalo)<br/>
 
'''•Desglose de tiempos AUX:''' Tiempo que el agente estuvo en cada uno de los
 
motivos de pausa.
 
  
===== Informe de producción =====
+
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.
  
'''• LL. ACD:'''Número de llamadas contestadas por ese agente para ese
+
El GeneraConf  se instala en el mismo servidor que el Tomcat, normalmente con el portal de administración.
grupo ACD.<br />
 
'''• LL. HOLD:''' Número de retenciones efectuadas para las llamadas
 
contestadas en ese grupo ACD.<br />
 
'''• LL. Redir.:''' Número de llamadas no contestadas por un agente que
 
fueron redirigidas de nuevo a la cola.<br />
 
'''• LL. No colgadas cliente:''' Número de llamadas que terminaron sin el
 
colgado del cliente.<br />
 
'''• LL. Aband.:''' Número de llamadas abandonadas en ese grupo ACD, este
 
valor es independiente del agente por tanto se repite el valor para todos
 
los agentes en un mismo grupo ACD.<br />
 
'''• LL. Transfer.:''' Número de llamadas ACD que fueron transferidas por el
 
agente.<br />
 
'''• LL. Conf:''' Número de llamadas ACD en las que el agente estableció
 
conferencia.<br />
 
'''• S. Extensión:''' Número de llamadas salientes de extensión, este valor es
 
independiente del grupo ACD se repite el valor para todos los grupos
 
ACD en los que está conectado el agente.<br />
 
'''• Acum. Staff:''' Tiempo que el agente estuvo conectado al grupo ACD.<br />
 
'''• Acum. RING:''' Tiempo de ring en las llamadas ACD(entrantes) que
 
fueron contestadas por el agente.<br />
 
'''• Acum. ACD:''' Tiempo de conversación de las llamadas ACD(entrantes)
 
que fueron contestadas por el agente.<br />
 
'''• Acum. ACW:''' Tiempo dedicado por el agente a tareas administrativas
 
tras finalizar las llamadas que fueron contestadas por él.<br />
 
'''• Acum HOLD:''' Tiempo que las llamadas ACD(entrantes) para ese grupo
 
ACD que fueron contestadas por el agente estuvieron retenidas.<br />
 
'''• Acum. AVAIL:''' Acum. STAFF- (Acum. ACD+ Acum. ACW+ Acum. RING+
 
Acum. HOLD+ Acum. AUX)..<br />
 
'''• Acum. AUX:''' Tiempo que el agente estuvo en pausa este valor es
 
independiente del grupo ACD se repite el valor para todos los grupos
 
ACD en los que está conectado el agente..<br />
 
'''• Desgloses de tiempos AUX, tiempo AUX por cada uno de los
 
motivos.''' este valor es independiente del grupo ACD se repite el valor
 
para todos los grupos ACD en los que está conectado el agente.
 
-->
 
  
===== Consideraciones adicionales =====
+
GeneraConf lee de la tabla Dat_Sincroniza, genera los ficheros de configuración y los coloca en su sitio.
  
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.
+
===== Fichero de configuración =====
  
''* Ejemplo:''
+
GeneraConf es un proceso que no incorpora fichero de configuración. El proceso es llamado por los portales del entorno '''''<span style="color:#144F9B">VIVA</span>'''''it  (portal de administración y portal de alertas) siendo los propios portales los que han de incluir los parámetros necesarios.
  
-Llamada: Duración 15 minutos Hora fin de la llamada 13:01
+
En el portal de administración de '''''<span style="color:#144F9B">VIVA</span>'''''it Call tenemos que configurar la url para poder sincronizar los cambios realizados utilizando el proceso:
-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.
 
  
  
 +
[[File:URL de sincronizacion.jpg]]
  
<br><br>
 
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
  
=== TBC (Translation by Chat) ===
+
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 '''''<span style="color:#144F9B">VIVA</span>'''''it Call, excluyendo el entorno de alertas.
 +
*Si se indica con valor 20 (alcanceSincroniza=20), se sincroniza solo el entorno de Alertas.
  
La funcionalidad permite que dos interlocutores (a los que llamaremos “extranjero” y “agente”) puedan interactuar en una llamada telefónica independientemente del idioma en el que se expresen.
+
A tal efecto se ha creado el siguiente enumerado:
  
==== Requerimientos de usuario ====
+
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;
 +
        }
 +
    }
  
Desde el punto de vista de usuario los requerimientos serán:
 
  
• Extranjero: Cualquier tipo de terminal telefónico (de VIVAit Call o externo) alcanzando un usuario de VIVAit Call;
+
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.
  
• Agente: Usuario de VIVAit Call, con terminal telefónico en VIVAit Call y portal de usuario; el entorno más unificado se consigue si el terminal telefónico es Web Call
+
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.
  
==== Funcionamiento a nivel de usuario ====
+
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.
 
 
 
 
1. Llamadas entrantes a grupos o servicios con traducción activada por defecto: En estos casos el agente no tendrá que hacer nada y la llamada dispondrá de servicio de traducción; es típico en grupos ACD
 
  
 +
===== Ficheros de logs =====
  
 +
El fichero con los log’s generado se encuentra en /var/log/Tomcat.x/generaConf.log.
  
2. Llamadas salientes realizadas por el agente a un extranjero: En tal caso el agente realizará la llamada anteponiendo la facilidad *14# (ejemplo *14#3140) o la configurada a tal efecto en cada instalación
 
  
  
 +
=== Portales web corporativos ===
 +
<br><br>
  
3. Llamadas establecidas para las que se desea activar TBC:
+
El portal de usuario VIVAit Call permite que determinadas funcionalidades del sistema puedan ser accesibles por los usuarios finales desde una interfaz mucho más cómoda y amigable que el telefónico.
 +
<br><br>
 +
Existen varias opciones del portal de usuario según las necesidades del cliente , las diferentes opciones en base a la configuración son:
 +
<br><br>
 +
* Portal de usuario
 +
* Portal Webcall
 +
* Portal para integración con Teams
 +
* Portal Vivait Tracker
 +
* Portal Vivait Supervisor
 +
<br><br>
 +
Para configurar las diferentes posibilidades en los portales de usuario hay que modificar el archivo '''“vivaitConfig.js”''' , este archivo se encuentra en :  '''/var/www/vivait/webs/portal/Assets/Config/'''
 +
<br><br>
 +
[[File:p-usuario1.png|center|600px]]
 +
<br><br>
 +
*'''webphoneLink :''' Configuración del link de la web con solo el dialpad.
 +
*'''IsWebPhoneDisabled:''' Configuración para habilitar (false) o deshabilitar (true) la aparición de webphone al iniciar el portal.
 +
<br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
  
a. En el caso de Web Call el agente dispondrá de un botón en el control de llamada que le servirá para activar TBC; la activación pasa por una autotransferencia directa de la llamada
 
  
b. En el caso de otros terminales el usuario deberá realizar una transferencia directa a si mismo (se usa para ello llamada a  *14*)
+
==== Accesos Web ====
  
 +
{| class="wikitable"
 +
|-
 +
! Aplicación !! Enlace
 +
|-
 +
|Portal de administración '''''VIVA'''''it Suite || http://ip_admin:8180/Vivait-Call
 +
|-
 +
|'''''VIVA'''''it 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
 +
|}
  
El funcionamiento general una vez establecida una llamada con servicio TBC será:
+
===== Permisos de aplicaciones =====
 +
Se crean a través del '''portal de administración ''VIVA''it''' . Debe conocerse como funcionan los ejes [[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Ejes| ver sección Portal de administracion - General - Ejes]] y que pueden existir hasta seis aplicaciones creadas en la plataforma:
  
  
• El extranjero habla en su idioma y escucha audios en su idioma; como se ha indicado anteriormente, en el lado del extranjero no es necesario ninguna herramienta adicional al terminal telefónico, que podrá ser interno o externo a VIVAit Call
+
[[File:Permisos-Portal_Administracion.jpg|center]]
  
  
'''El agente'''
+
La forma como dar permisos de aplicaciones a un usuario está explicada en la [[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Asignaci.C3.B3n_de_Permisos_de_Usuario_por_Administrador | sección  Portal de administracion - General - Usuarios ]].
  
'''Para la recepción:'''
 
  
• Escucha el audio del extranjero (en el terminal)
+
==== Portal de usuario ====
 +
<br><br>
 +
Para configurar el portal de usuario solo para terminales telefónicos (sin webphone) se tendría que hacer de la siguiente forma:
 +
<br><br>
 +
[[File:p-usuario2.png|center|300px]]
 +
<br><br>
 +
*'''webphoneLink :''' Comentar la línea con ( // ) al comienzo de esta.
 +
*'''IsWebPhoneDisabled:''' Deshabilitar (true) para que no aparezca webphone al iniciar el portal.
 +
<br><br>
 +
Al terminar la configuración , en el portal se deshabilitará el botón de webphone:
 +
<br><br>
 +
[[File:p-usuario3.png|center|700px]]
 +
<br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
  
• Lee el texto transcrito en el idioma del extranjero
+
==== Portal Webcall ====
 +
<br><br>
 +
Para configurar el portal de usuario VIVAit Call web con webphone integrado en la misma página se tendría que hacer de la siguiente forma:
 +
<br><br>
 +
[[File:p-usuario4.png|center|300px]]
 +
<br><br>
 +
*'''webphoneLink :''' Comentar la línea con ( // ) al comienzo de esta.
 +
*'''IsWebPhoneDisabled:''' Habilitar (false) para que aparezca webphone al iniciar el portal.
 +
<br><br>
 +
Al terminar la configuración , en el portal aparecerá el dialpad de webphone:
 +
<br><br>
 +
[[File:p-usuario5.png|center|800px]]
 +
<br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
  
• Lee el texto traducido en el idioma del agente
+
==== Portal para integración con Teams ====
 +
<br><br>
 +
Para configurar el portal de usuario VIVAit Call web con botón de enlace a otra página con webphone se tendría que hacer de la siguiente forma:
 +
<br><br>
 +
[[File:p-usuario6.png|center|300px]]
 +
<br><br>
 +
*'''webphoneLink :''' Poner el link del enlace a webphone
 +
*'''IsWebPhoneDisabled:''' Deshabilitar (true) para que no aparezca webphone al iniciar el portal.
 +
<br><br>
 +
Al terminar la configuración , en el portal estará habilitado el botón de webphone , que al pulsar sobre el nos llevará a otra página con el dialpad :
 +
<br><br>
 +
[[File:p-usuario7.png|center|800px]]
 +
<br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
  
 +
==== Varios portales en una sola instalación ====
 +
<br><br>
 +
Existe la posibilidad de tener varios portales en una misma instalación de VIVAit Call con diferentes url’s para cada portal .
 +
<br><br>
 +
[[File:p-usuario8.png|center|600px]]
 +
<br><br>
 +
Un ejemplo de las url’s de los portales sería:
 +
<br><br>
 +
https://servidor/webs/vivait-user/ → Portal usuario
 +
https://servidor/webs/webfon2-solo → DialPad
 +
https://servidor/webs/webfon3 → Portal webphone
 +
<br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
  
'''Para la emisión:'''
+
==== Portal Vivait Tracker ====
 
+
<br><br>
Escribe en su idioma
+
===== Introducción a Vivait Tracker 0.1 =====
 +
<br><br>
 +
Con la versión 5.1 de la plataforma '''''VIVA'''''it Call se ha lanzado un nuevo tracker: ''VIVAit Tracker'', que supone una mejora sobre el producto anterior: [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Vivait-Tracker ''Tracker WEB''] más enfocado al mundo Call Center.<br>
 +
Los puntos claves del nuevo '''''portal VIVAit Tracker''''' dirigido al entorno corporativo son:<br>
 +
: • Adaptación para facilitar su uso en entornos de telefonía corporativa.<br>
 +
: Permite seguir llamadas y escuchar/descargar grabaciones en caso de existir.<br>
 +
: • Integrado con entornos de texto (TBC y desarrollos futuros).
 +
<br><br>
 +
[[#Introducción a Vivait Tracker 0.1 | Volver arriba]] / [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
  
  • Lee el texto traducido al idioma del extranjero
+
====== Arquitectura de Vivait Tracker 0.1 ======
 +
<br><br>
 +
Los bloque funcionales, servicios y elementos que componen la aplicación están divididos en dos capas principales:
 +
<br><br>
 +
: - '''Frontend'''<br>
 +
::Reside en un servidor web Apache.<br>
 +
::Se invoca desde un navegador mediante una URL del tipo https://host/ws/<br>
 +
        https://172.25.128.252/Tracker_Corp/
 +
::Es la parte visual: HTML, CSS, JavaScript.<br>
 +
::No accede directamente a la base de datos; solo obtiene datos desde una API.
 +
<br><br>
 +
: - '''Backend / API REST'''<br>
 +
::Corre en un servidor web Tomcat.<br>
 +
::Expone la API en: <br>
 +
        https://172.25.128.252/Tracker-Rest/tracker/.
 +
::Contiene la lógica que permite interactuar con la BBDD.<br>
 +
::Responde en JSON para que el frontend pueda ofrecérselo al navegador.<br>
 +
<br><br>
 +
Diagrama funcional de la arquitectura de VIVAit Tracker 0.1
 +
<br><br>
 +
[[File:arquitectura3_tracker_V5.1.png|1500px|center|thumb]]
 +
<br><br>
 +
[[#Introducción a Vivait Tracker 0.1 | Volver arriba]] / [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0 Volver al índice]
 +
<br><br>
  
• Tiene opción de reproducir el audio que ha escuchado el extranjero
+
====== Flujo completo del ciclo de datos ======
 +
<br><br>
 +
Siguiendo el proceso se contemplan los siguientes pasos:
 +
<br><br>
 +
'''Paso 1''' El usuario invoca el frontend residente en Apache desde un navegador, usando javascript, mediante la URL del tipo:<br>
 +
        https://host/Traker_Corp/
 +
El navegador carga la página web servida por Apache.
 +
<br><br>
 +
'''Paso 2''' Una vez superada la fase de [[#Seguridad de VIVAit Tracker 0.1 |validación]] se muestra un [[#Descripción de la interfaz de VIVAit Supervisor 2.0 |formulario]] que permite al usuario definir los parámetros de una consulta.<br>
 +
::La página del formulario inicia una transacción para efectuar una solicitud HTTP POST al endpoint correspondiente, por ejemplo:<br>
 +
                https://172.25.128.252/Tracker_Corporativo/
 +
::siendo la carga util de esta solicitud los datos del formulario rellenado por el usuario:<br>
 +
                {fechaInicio: "", fechaFin: "", horaInicio: "", horaFin: "", listaExtensiones: [], listaGrupos: [],…}         
 +
<br><br>
 +
'''Paso 3''' Al recibir los datos del formulario el frontend hace una petición a la API REST de Tomcat.<br>
  
 +
<br><br>
 +
'''Paso 4''' La API se conecta a la base de datos, ejecuta las consultas necesarias y devuelve la respuesta.<br>
  
 +
<br><br>
 +
'''Paso 5''' El frontend recibe el JSON con los datos de la consulta en la respuesta:<br>
 +
                POST https://172.25.128.252/Tracker-Rest/tracker/lista
 +
::El navegador lo representa en pantalla. En ningún momento el navegador accede directamente a la base de datos; todo pasa por la API.
 +
<br><br>
 +
[[#Introducción a Vivait Tracker 0.1 | Volver arriba]] / [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
  
 +
====== Seguridad de Vivait Tracker 0.1 ======
 +
<br><br>
 +
El acceso está controlado mediante validación de tokens.
 +
<br><br>
 +
'''Paso 1 Autenticación inicial'''
 +
<br><br>
 +
: • Al introducir sus credenciales el usuario se valida a través del servicio de autenticación ''sercen''<br>
 +
                https://172.25.128.252/sercen/postautenticar1
 +
: • Sercen genera un token firmado que identifica la sesión del usuario.
 +
<br><br>
 +
'''Paso 2 Validación interna de permisos'''
 +
<br><br>
 +
: • Una vez que el frontend tiene el token, cada petición pasa por una validación de la API del tomcat:<br>
 +
                https://172.25.128.252/Tracker-Rest/tracker/verificarToken
 +
:: En la misma se comprueba que:<br>
 +
::: - El token es válido.<br>
 +
::: - El usuario tiene permisos para el recurso que está intentando usar. <br>
 +
:::  Es necesario que el usuario tenga acceso a la aplicación ''Grabador'', ver [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit_5.0#Submen.C3.BA_Permisos_a_usuarios Usuarios].<br>
 +
: • No se ejecuta ninguna acción si el token no es validado primero.
 +
<br><br>
 +
'''Paso 3 Proxy inverso apache-tomcat'''
 +
<br><br>
 +
: • Apache actúa como punto de entrada único:
 +
:: - El usuario solo ve URLs de apache.
 +
:: - Las peticiones que requieren lógica del backend se redirigen internamente a tomcat.
 +
:: - Esto se consigue mediante proxy inverso, por ejemplo:<br>
 +
::: /Tracker_Corporativo → servido por apache<br>
 +
                https://172.25.128.252/Tracker_Corp/
 +
::: /Tracker-Rest → Apache las pasa a Tomcat de forma transparente para el usuario<br>
 +
                https://172.25.128.252/Tracker-Rest/tracker/extensiones
 +
: • El navegador utilizado por el usuario nunca ve a tomcat.
 +
<br><br>
 +
[[#Introducción a Vivait Tracker 0.1 | Volver arriba]] / [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
  
==== Funcionamiento a nivel de VIVAit Call ====
+
===== Descripción de la interfaz de Vivait Tracker 0.1 =====
 
+
<br><br>
A nivel de VIVAit Call, los elementos principales involucrados en el servicio son:
+
Este apartado se trata en [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/VIVAit_Tracker#Descripción_de_la_interfaz_de_Vivait_Tracker_0.1 Vivait Tracker]
 
+
<br><br>
'''• mdtap: Con sus componentes chan_mdtap e intz_tap se encargará de:'''
+
[[#Introducción a Vivait Tracker 0.1 | Volver arriba]] / [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
+
<br><br>
''' chan_mdtap:'''
 
  
• Captura el audio
+
==== Portal VIVAit Supervisor ====
 +
<br><br>
  
• Reenvía a intz_tap
+
===== Introducción a Vivait Supervisor 2.0 =====
 
+
<br><br>
• El audio pasa al otro extremo
+
Con la versión 5.1 de la plataforma '''''VIVA'''''it Call se ha lanzado la aplicación: ''Vivait-Supervisor 2.0''.
 
+
<br><br>
 
+
Los puntos claves del '''''portal Vivait Supervisor''''' son:<br>
''' intz_tap:'''
+
: • Seguimiento de las llamadas generadas en el sistema '''''VIVA'''''it Call.<br>
 
+
: Visualización de resultados mediante gráficos, tablas y otros formatos.<br>
'''Para speech to text'''
+
: Exportación de datos para su posterior análisis.
 
+
<br><br>
Invoca al servicio de conversión de audio a texto configurado y lo envía
+
<div style="
 
+
  text-align:right;
Recibe el texto y otros datos y los inserta en BDTR
+
  margin-top:20px;
 
+
  padding:8px;
 
+
  border:1px solid #ccc;
'''Para text to speech
+
  background-color:#f9f9f9;
'''
+
  border-radius:6px;
• Periodicamente (polling) comprueba si hay mensajes de tipo de contenido audio
+
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Portales web corporativos]][[#Portales web corporativos| Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
• Recupera la URL
+
====== Definiciones en Vivait Supervisor 2.0 ======
 
+
<br><br>
• Invoca al servicio de conversión de texto a audio configurado y lo envía
+
A continuación se definen los principales conceptos empleados en el supervisor:
 
+
<br><br>
• Recibe el audio y lo inserta en la conversación en sustitución del audio del agente
+
'''Dashboard'''<br>
 
+
:Panel de control que presenta de forma visual y resumida la información clave (datos, indicadores o métricas),<br>
 
+
:con el objetivo de facilitar la supervisión, el análisis y la toma de decisiones de manera rápida y eficiente.<br>
'''Portal de usuario/Web Call'''
+
:Un dashboard está compuesto por uno o varios componentes.
 
+
<br><br>
•      Cuando se abre pestaña de TBC sincroniza mensajes https://172.25.128.253/Vivait-FonBO/api/recuperarId
+
'''Componente'''<br>
 
+
:Elemento individual que forma parte de un dashboard y cuya función es mostrar la información requerida.<br>
  •    Periodicamente (polling) pide nuevos mensajes de TBC del extranjero a FonBO https://172.25.128.253/Vivait-FonBO/api/listaMensajesUsuario?lastId=85&idioma=es
+
:Los componentes pueden adoptar distintos formatos, entre los más habituales:<br>
 
+
::'''• Tablas:'''<br>
•    Envía mensajes de texto a FonBO https://wwv.mdtel.es/Vivait-FonBO/api/insertaMensaje?hayTraduccion=true&idiomaDestino=fr
+
:::La información se presenta en formato tabular. Las cabeceras y la estructura de la tabla se definen durante la creación de su lógica.<br>
 
+
::'''• Gráficos:'''<br>  
 
+
:::Los datos se muestran de forma visual mediante distintos tipos de gráficos, como barras, líneas, circulares, entre otros.<br>
'''FonBO:'''
+
::Según el modo en que actualizan la información, los componentes se clasifican en:<br>
 
+
::'''• Dinámicos:'''<br>
• Responde a polling de Portal de usuario/Web Call
+
:::La información se actualiza de forma periódica, de acuerdo con un temporizador asociado al componente.<br>
 
+
::'''• Estáticos:'''<br>
• Envía mensajes a traducir al servicio de traducción texto a texto, solo si el idioma del agente (configurado) y el idioma del extranjero (típicamente detectado) son diferentes; lo realiza para las traducciones en ambos sentidos
+
:::La información se carga al iniciar el dashboard y no se vuelve a actualizar hasta que el panel de control se invoca nuevamente.
 
+
<br><br>
• Recibe mensajes traducidos y los inserta en BDTR
+
<div style="
 
 
• Envía mensajes de texto al servicio de Text to Speech
 
 
 
• Recibe el audio, lo almacena e inserta en BDTR (una URL)
 
 
 
 
 
 
 
==== Puesta en marcha ====
 
 
 
 
 
Para disponer de la funcionalidad será necesario disponer de:
 
 
 
 
 
• Base de datos actualizada con tabla DAT_MENSAJES_IA y COM_USUARIOS
 
 
 
• Fonbo versión xxxx
 
 
 
• Web Call versión 2.0.0 (para esta funcionalidad, esta versión de Web Call requerirá otros cambios en BBDD por otras funcionalidades implementadas)
 
 
 
• Chan_mdtap e Intz_Tap funcionando
 
 
 
 
 
 
 
La configuración cargada por defecto en el sistema permite la activación con mucha facilidad de las funciones de:
 
 
 
 
 
• Casuística 1: Llamadas salientes realizadas por el agente a un extranjero; el agente marcará *14#num_Destino
 
 
 
 
 
::[[File:tbc1.PNG|250px|center]]
 
 
 
 
 
Es la facilidad con E_CODIGO_FACILIDAD = 800 (transcripción de número de teléfono).  
 
 
 
 
 
::[[File:tbc2.PNG|800px|center]]
 
 
 
 
 
La numeración está definida por prerutas, una por categoría
 
 
 
 
 
::[[File:tbc3.PNG|800px|center]]
 
 
 
 
 
 
 
 
 
• Casuística 2: Llamadas establecidas para las que se desea activar TBC; el agente pulsará el botón de “traducción simultánea”
 
 
 
::[[File:tbc4.PNG|350px|center]]
 
 
 
== Cluster '''''VIVA'''it'' ==
 
<br><br>
 
 
 
=== Introducción a cluster  ===
 
<br><br>
 
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.
 
<br><br>
 
De un clúster se espera que presente combinaciones de los siguientes servicios:
 
<br><br>
 
: # Alto rendimiento <br>
 
: # Alta disponibilidad<br>
 
: # Balanceo de carga <br>
 
: # Escalabilidad
 
<br><br>
 
<div style="
 
 
   text-align:right;
 
   text-align:right;
 
   margin-top:20px;
 
   margin-top:20px;
Línea 6957: Línea 8367:
 
   display:inline-block;
 
   display:inline-block;
 
">
 
">
[[File:flecha_verde.png|20px|link=#Cluster VIVAit]][[#Cluster VIVAit| Volver arriba]]
+
[[File:flecha_verde.png|20px|link=#Portales web corporativos]][[#Portales web corporativos| Volver arriba]]
 
</div>
 
</div>
 
<div style="
 
<div style="
Línea 6983: Línea 8393:
 
<br><br>
 
<br><br>
  
=== Funcionamiento en cluster ===
+
====== Arquitectura de Vivait Supervisor 2.0 ======
 +
<br><br>
 +
Los bloque funcionales, servicios y elementos que componen la aplicación están divididos en dos capas principales:
 +
<br><br>
 +
: - '''Frontend'''<br>
 +
::Reside en un servidor web Apache.<br>
 +
::Se invoca desde un navegador mediante una URL del tipo https://host/ws/<br>
 +
        https://172.25.128.92/Vivait-Supervisor/
 +
::Es la parte visual: HTML, CSS, JavaScript.<br>
 +
::No accede directamente a la base de datos; solo obtiene datos desde una API.
 +
<br><br>
 +
: - '''Backend / API REST'''<br>
 +
::Corre en un servidor web Tomcat.<br>
 +
::Expone la API en: <br>
 +
        https://172.25.128.92/Vivait-Supervisor/.
 +
::Contiene la lógica que permite interactuar con la BBDD.<br>
 +
::Responde en JSON para que el frontend pueda ofrecérselo al navegador.<br>
 +
<br><br>
 +
Diagrama funcional de la arquitectura de Vivait-Supervisor
 +
<br><br>
 +
[[File:arquitectura_supervisor2_V5.1.png|1500px|center|thumb]]
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Portales web corporativos]][[#Portales web corporativos| Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 
<br><br>
 
<br><br>
  
 +
====== Flujo completo del ciclo de datos ======
 +
<br><br>
 +
Siguiendo el proceso se contemplan los siguientes pasos:
 +
<br><br>
 +
'''Paso 1''' El usuario invoca el frontend residente en Apache desde un navegador, usando javascript, mediante la URL del tipo:<br>
 +
        https://host/Vivait-Supervisor/
 +
El navegador carga la página web servida por Apache.
 +
<br><br>
 +
'''Paso 2''' Una vez superada la fase de [[#Seguridad de Vivait Supervisor 2.0|validación]] se muestra [[#Descripción de la interfaz de Vivait Supervisor 2.0 |la pantalla inicial]] que permite al usuario elegir el dashboard, previamente configurado, ejecutándose la monitorización de la consulta preparada.<br>
 +
::Tras elegir el dashboard deseado, la página web realiza solicitudes periódicas HTTP POST al endpoint correspondiente,<br>
 +
::donde se obtienen los datos de los componentes asociados al dashboard, por ejemplo:<br>
 +
                https://172.25.128.92/Vivait-Supervisor/tablas/TablaComponenteDinamicoAjax
 +
::siendo la carga útil de esta solicitud la identificación del componente con los filtros elegidos por el usuario:<br>
 +
              {idCompoCuadro: "15",…}
 +
                  filtros : [{tipo: "titulo", valor: "titulo=Detalle"}, {tipo: "fechaDesde", valor: "FechaDesde="},…]
 +
                idCompoCuadro: "15"         
 +
<br><br>
 +
'''Paso 3''' Al recibir los datos el frontend hace una petición a la API REST de Tomcat.<br>
 +
<br><br>
 +
'''Paso 4''' La API se conecta a la base de datos, ejecuta las consultas necesarias y devuelve la respuesta.<br>
 +
              INFO TablaDinamicosDaoImpl:607 - componerSQL SELECT DATE_FORMAT(DAT_LLAMADAS.D_HORA_INICIO,'%Y-%m-%d'),DATE ...
 +
<br><br>
 +
'''Paso 5''' El frontend recibe el JSON con los datos de la consulta en la respuesta:<br>
 +
                POST https://172.25.128.92/Vivait-Supervisor/tablas/TablaComponenteDinamicoAjax
 +
::El navegador lo representa en pantalla. En ningún momento el navegador accede directamente a la base de datos; todo pasa por la API.
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Portales web corporativos]][[#Portales web corporativos| Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
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.
+
====== Seguridad de Vivait Supervisor 2.0 ======
 
+
<br><br>
Por lo que las máquinas balancean en los casos siguientes:
+
El acceso, del usuario a la aplicación, está controlado mediante validación de tokens y acceso a la aplicación correspondiente.<br>
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.
+
ver [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit_5.0#Submen.C3.BA_Permisos_a_usuarios Usuarios]
 
+
<br><br>
Por lo que las máquinas balancean en los casos siguientes:
+
La aplicación ''CALL_CENTER'' es la que gestiona los perfiles del usuario para Vivait-Supervisor, según la siguiente tabla:
 
+
<br><br>
* 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..
+
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
 
+
! align=center style="background-color:#0099ff;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.3cm;color:#ffffff;" | '''''Perfil de Usuario'''''
Y no balancea en los siguientes:
+
! align=center style="background-color:#0099ff;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.3cm;color:#ffffff;" | '''''Nivel administración'''''
 
+
! align=center style="background-color:#0099ff;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.3cm;color:#ffffff;" | '''''Funciones'''''
* 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)
+
|-
 
+
| style="text-align: center; font-weight: bold;padding:0.3cm;" |Administración
 
+
| | Distinto de Ninguno:
===== Píldoras =====
+
: - '''Alto''',
 
+
: - '''Medio''' o
 
+
: - '''Bajo'''.
====== Prevenir que un nodo vuelva a tomar el control tras volver a estar operativo ======
+
| | Configuración y utilización de dashboard.
 
+
|-
 
+
| style="text-align: center; font-weight: bold;padding:0.3cm;" |Consulta
Cuando queremos evitar que un recurso vuelva al nodo en el que estaba originalmente tras la recuperación del nodo, ejecutaremos la siguiente orden.
+
| | '''Ninguno'''
 
+
| | Utilización de dashboard.
pcs resource defaults resource-stickiness=100
+
|-
 
+
|}
====== Borrar un recurso ======
+
<br><br>
 
+
El usuario no tiene acceso a Vivait-Supervisor si no tiene asignada la aplicación ''CALL_CENTER''.
pcs resource delete DRBDFs
+
<br><br>
 
+
El proceso de validación que se sigue dentro del sistema es el siguiente:
====== Sincronización del drbd ======
+
<br><br>
 
+
'''Paso 1 Autenticación inicial'''
Para sincronizar el drdb tras un fallo tenemos que determinar cuál es el nodo que tiene los datos buenos y cuál es el que vamos a sobrescribir sus datos
+
<br><br>
 
+
: • Al introducir sus credenciales el usuario se valida a través del servicio de autenticación ''sercen''<br>
En el nodo que vamos a sobrescribir los datos ejecutaremos los siguientes comandos.
+
                https://172.25.128.92/sercen/postautenticar1
 
+
: • Sercen genera un token firmado que identifica la sesión del usuario.
drbdadm secondary all
+
<br><br>
drbdadm disconnect all
+
'''Paso 2 Validación interna de permisos'''
drbdadm invalidate all
+
<br><br>
drbdadm connect all
+
: • Una vez que el frontend tiene el token, cada petición pasa por una validación de la API del tomcat:<br>
 
+
:: En la misma se comprueba que el usuario tiene permisos para el recurso que está intentando utilizar, según la tabla anterior.<br>
 
+
::* Si el usuario tiene un perfil de administrador puede configurar (crear, borrar o gestionar) y consultar dashboard.<br>
Y en el nodo que tiene los datos correctos.
+
::* Si el usuario tiene un perfil de consulta solo puede consultar dashboard ya configurados, no puede gestionarlos.<br>
 
+
<br><br>
drbdadm connect all
+
'''Paso 3 Proxy inverso apache-tomcat'''
 
+
<br><br>
 
+
: • Apache actúa como punto de entrada único:
====== Mover un recurso de nodo ======
+
:: - El usuario solo ve URLs de apache.
 
+
:: - Las peticiones que requieren lógica del backend se redirigen internamente a tomcat.
Para mover un recurso de nodo utilizaremos el siguiente comando.
+
:: - Esto se consigue mediante proxy inverso, por ejemplo:<br>
 
+
:::/Vivait-Supervisor/ → servido por apache<br>
pcs resource move IP-ASTER
+
                https://172.25.128.92/Vivait-Supervisor/
pcs resource clear IP-ASTER
+
:::Apache las pasa a Tomcat de forma transparente para el usuario<br>
 +
                https://172.25.128.92/Vivait-Supervisor/tablas/TablaComponenteDinamicoAjax
 +
: • El navegador utilizado por el usuario nunca ve al módulo tomcat.
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Portales web corporativos]][[#Portales web corporativos| Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
Esto crea restricciones locales para evitar que el recurso vuelva a este nodo (Puede tener prioridad de ejecución en este nodo y haría que volviera a este nodo automáticamente al estar online).
+
====== Descripción de la interfaz de Vivait Supervisor 2.0 ======
 
+
<br><br>
La restricción que crea banea el nodo para este recurso, si queremos quitar esta restricción creada.
+
Este apartado se trata en [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/VIVAit_Supervisor#Descripción_de_la_interfaz_de_Vivait_Supervisor_2.0 Vivait Supervisor]
 
+
<br><br>
pcs resource clear DRBDfsASTER
+
<div style="
 
+
  text-align:right;
<span style="color:#f32100">Mirar si existe alguna manera de mover un recurso sin que se creen estas restricciones locales</span>
+
  margin-top:20px;
 
+
  padding:8px;
 
+
  border:1px solid #ccc;
====== Habilitar/deshabilitar recursos ======
+
  background-color:#f9f9f9;
 
+
  border-radius:6px;
Los comandos para habilitar y deshabilitar recursos en un nodo son
+
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Portales web corporativos]][[#Portales web corporativos| Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
 +
 
 +
===  Monitorización en '''''VIVA'''it'' ===
 +
<br><br>
 +
La plataforma de monitorización utiliza es Zabbix sistema de supervisión del sistema '''''VIVA'''it''. Se trata herramienta de monitorización que se usa para vigilar el estado de sistemas informáticos y redes en tiempo real.
 +
 
 +
 
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
 +
 
 +
====Generalidades de Zabbix ====
 +
<br><br>
 +
Con Zabbix puedes controlar:
  
Si especificamos un tiempo, pcs esperara este tiempo y retornara 0 si el recurso a parado o 1 si el recurso no ha parado en el tiempo especificado.
+
Servidores (CPU, RAM, disco…)
 +
Redes (routers, switches, tráfico)
 +
Bases de datos
 +
Aplicaciones
 +
Servicios en la nube
  
pcs resource disable resource_id [--wait[=n]]
+
Básicamente: te dice si algo funciona bien o falla.
  
Si especificamos un tiempo, pcs esperara este tiempo y retornara 0 si el recurso a arrancado o 1 si el recurso no ha arrancado en el tiempo especificado.
+
Qué hace exactamente
 +
'''Monitoriza'''
  
pcs resource enable resource_id [--wait[=n]]
+
Recoge datos continuamente:
pcs config show
 
pcs resource cleanup resource_id
 
pcs resource clear
 
pcs resource refresh
 
  
Borra los Failed Actions de un recurso:
+
uso de CPU
 +
memoria
 +
espacio en disco
 +
latencia de red
  
pcs resource cleanup [recurso]
+
'''Genera alertas'''
  
====== Notas sincronismo ======
+
Si algo va mal:
  
Si tenemos este fallo:
+
envía emails
 +
manda notificaciones
 +
lanza acciones automáticas
  
root@VC-PROC-SUMA-ALC-02:/tmp# cat /proc/drbd
+
'''Muestra gráficos'''
version: 8.4.10 (api:1/proto:86-101)
+
históricos de rendimiento
srcversion: 7922D81D3881494EB149253
+
dashboards en tiempo real
  0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r-----
 
root@VC-PROC-SUMA-ALC-01:~# cat /proc/drbd
 
version: 8.4.10 (api:1/proto:86-101)
 
srcversion: 7922D81D3881494EB149253
 
  0: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown  r-----
 
  
 +
'''Cómo funciona'''
  
En el nodo principal
+
Tiene varios componentes:
  
drbdadm connect all
+
Servidor Zabbix → recoge y analiza datos
 +
Agentes Zabbix → instalados en máquinas para enviar info
 +
Interfaz web → donde ves todo
 +
'''Ejemplo real'''
  
En el nodo secundario
+
Imagina que tienes un servidor:
  
drbdadm -- --discard-my-data connect all
+
CPU al 95% → Zabbix lo detecta
 +
Te manda alerta
 +
Puedes actuar antes de que se caiga
 +
'''Por qué se usa'''
 +
Detectar problemas antes de que afecten a usuarios
 +
Controlar infraestructuras grandes
 +
Automatizar supervisión
  
********* En secundario: **************
+
<br><br>
drbdadm secondary drbdASTER
+
<div style="
drbdadm disconnect drbdASTER
+
  text-align:right;
drbdadm -- --discard-my-data connect drbdASTER
+
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Monitorización en VIVAit]][[#Monitorización en VIVAit | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
********* En primario: ****************
+
====Zabbix ====
drbdadm primary drbdASTER
+
<br><br>
drbdadm disconnect drbdASTER
 
drbdadm connect drbdASTER
 
  
  
====== Configuración para KVM ======
+
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 '''md'''tel es Zabbix 2.2.2.
  
  '''vi /etc/multipath.conf'''
+
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.
  -----------------------------
 
  defaults {
 
    user_friendly_names yes
 
}
 
blacklist {
 
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]"
 
devnode "^vd[b-z]?[0-9]"
 
devnode "vda"
 
devnode "vda1"
 
devnode "^drbd[0-9]*"
 
}
 
  
  systemctl restart multipathd.service
+
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
 +
|}
  
'''vi /etc/corosync/corosync.conf'''
+
Zabbix posee documentación tanto en wiki, foros y comunidades.Para ampliar la información se puede visitar:
------------------------------------
+
[[http://www.zabbix.com Sitio oficial de Zabbix]]
totem {
 
    version: 2
 
    cluster_name: CLmdtel
 
    transport: knet
 
    crypto_cipher: aes256
 
    crypto_hash: sha256
 
    token: 12000
 
}
 
nodelist {
 
    node {
 
        ring0_addr: nodo-vc-01
 
        name: nodo-vc-01
 
        nodeid: 1
 
    }
 
    node {
 
        ring0_addr: nodo-vc-02
 
        name: nodo-vc-02
 
        nodeid: 2
 
    }
 
}
 
quorum {
 
    provider: corosync_votequorum
 
    two_node: 1
 
}
 
logging {
 
    to_logfile: yes
 
    logfile: /var/log/corosync/corosync.log
 
    to_syslog: yes
 
    timestamp: on
 
}
 
  
systemctl restart corosync
+
===== Glosario Zabbix =====
 +
<br><br>
  
'''Revisar que están arrancados después de reinicar:'''
+
Se trata de una lista de conceptos básicos de Zabbix, pero para ampliar la información sobre otros términos, visite el [[http://www.zabbix.com Sitio oficial de Zabbix]].
Corosync Pacemaker multipath
+
* '''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.
  
===== Ejemplo de cluster con mysql y asterisk =====
+
* '''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.
  
En este ejemplo vamos a crear un cluster que maneje mysql y Asterisk como servicios separados.
+
* '''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.
Para lograr esto vamos a necesitar que el drbd maneje dos particiones separadas y tener dos ip flotantes, una para cada servicio.
+
* '''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.
====== Requisitos previos ======
+
* '''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).
Los requisitos previos antes de comenzar la instalación del cluster son:
+
* '''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.
  
• Nodos correctamente actualizados (update/upgrade).
+
=====Discovery=====
 +
<br><br>
  
• Conexión a internet.
+
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.
  
• NTP configurado.
+
'''zabbixDiscoveryVDN.pl''' : script utilizado para buscar VDNS.
 +
|}
 +
La explicación de como configurarla se encuentra en el manual oficial [[https://www.zabbix.com/documentation/2.2/manual/discovery/network_discovery/rule | Zabbix detección de redes]].
  
 +
=====Notificaciones=====
  
'''''Creación de las particiones e instalación y configuración del drbd'''''
+
Necesariamente, debe darse de alta al usuario y darse de alta el servidor de correo electrónico para poder ser capaz de enviar correos.
  
====== Particionado (En los 2 nodos) ======
+
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 [[https://www.zabbix.com/documentation/2.2/manual/quickstart/notification  | manual oficial de Zabbix 2.2]]
  
Para la instalación de los dos recursos drbd necesitamos tener dos particiones que vamos a crear añadiendo un disco duro en cada una de las máquinas. Lo añadimos mediante el Gestor de Máquinas Virtuales de la máquina 999-sgestion. Los tamaños serán los siguientes:
+
===== Usuarios =====
 +
<br><br>
  
• Corporativo -> 50Gb
 
  
• BDTR -> 100Gb
+
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.
  
Lo siguiente es crear la partición en cada servidor:
+
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 [[https://www.zabbix.com/documentation/2.2/manual/web_interface/user_profile || manual oficial ]].
 +
 +
===== Visualización =====
 +
<br><br>
  
 +
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 [[https://www.zabbix.com/documentation/2.2/manual/config/visualisation | manual oficial]]
 +
====== Graphs ======
 +
<br><br>
  
[[File:cluster1.png|400px]]
+
{|
 +
|-
 +
|
 +
'''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.
 +
[[File:EjemploGrafica.png|center|750px]]
 +
Los valores min / avg / max que Zabbix obtiene y representa son de un registro de datos de la tabla tendencias.
  
Vamos a utilizar la herramienta parted seguido del dispositivo que queremos particionar. En este caso el espacio que vamos a particionar está en el dispositivo /dev/vdc.
+
====== Screens ======
 +
<br><br>
  
parted /dev/vdc
 
  
Una vez ejecutado el comando entraremos en una consola de la aplicación.
+
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.
  
Ejecutando el comando
+
[[File:EjemploScreen.png|center|750px]]
  
(parted) print free
+
====== Maps ======
 +
<br><br>
  
Obtenemos las particiones que tiene el dispositivo actualmente y el espacio libre que disponemos.
+
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.
 +
[[File:EjemploMaps.png|center|750px]]
 +
[[File:EstadosMaps.png|center|750px]]
  
[[File:cluster2.png|400px]]
 
  
En este ejemplo disponemos de 50Gb de espacio libre que es el que vamos a utilizar para las 2 particiones necesarias.
+
====== Monitorizar el estado de los raid ======
 +
<br><br>
  
Lanzamos el comando mkpart para realizar la primera partición que será para mysql.
 
  
(parted) mkpart
+
Los siguientes comandos son necesarios para poder monitorizar el estado de los raid.
 +
La orden:
  
El nombre que le vamos a dar a la partición es '''DRBD-MYSQL'''.
+
>hpacucli "ctrl slot=1 logicaldrive 1 show status"
El Tipo de sistema de ficheros '''ext4'''.
 
Luego nos pedirá el principio de la partición, en el ejemplo vamos a comenzar en 198Gb y vamos a finalizar en 550Gb.
 
  
 +
nos proporciona el estado de un raid (p.e. logicaldrive 1 (931.5 GB, 1): Interim Recovery Mode).
  
[[File:cluster3.png|400px]]
+
La orden:
 +
>hpacucli "ctrl slot=1 logicaldrive all show status"
  
Realizaremos la segunda partición volviendo a ejecutar el mismo comando
+
nos proporciona el estado de todos los raid.
  
(parted) mkpart
+
p.e.:
 +
logicaldrive 1 (931.5 GB, 1): Interim Recovery Mode
  
 +
logicaldrive 2 (1.8 TB, 1): OK.
  
En este ejemplo el nombre para esta partición será '''DRBD-ASTER''' el tipo '''ext4''' y le daremos el espacio restante del disco.
+
Para conseguir información genérica el comando
 +
 +
ctrl all show config detail
  
[[File:cluster4.png|400px]]
+
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".
  
  
Para ver el resultado de las particiones podemos ejecutar el comando.
+
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Monitorización en VIVAit]][[#Monitorización en VIVAit | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
lsblk
+
==== Zabbix en '''MD'''tel ====
 +
<br><br>
  
[[File:cluster5.png|400px]]
 
  
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
+
===== Configuraciones de Zabbix =====
 +
<br><br>
  
 +
====== Agentes Zabbix ======
 +
{|-
 +
|
 +
|
 +
'''Nota:''' Hay que instalar un agente Zabbix en cada maquina que se quiera monitorizar.
 +
|}
  
====== Gestión de particiones con LVM (En los 2 nodos) ======
+
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''''''.
  
  
Crearemos las 2 particiones lvm en los 2 servidores con los siguientes comandos.
 
  
En este ejemplo las particiones que queremos utilizar son /dev/sda5 para mysql y /dev/sda6 para Asterisk, esto podrá cambiar en las instalaciones.
+
====== Configurar agente de forma pasiva ======
 +
<br><br>
 +
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.
  
[[File:cluster6.png|400px]]
+
{|
 +
|-
 +
|
 +
##### 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
 +
|}
  
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
+
====== Configurar agente de forma activa ======
 +
<br><br>
  
 +
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.
  
====== Instalación y configuración del drbd (En los 2 nodos) ======
+
{|
 +
|-
 +
|
 +
##### 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
 +
|}
  
Instalaremos el paquete drbd8-utils. En Ubuntu 20.04 drbd-utils
+
El parámetro '''User_parameters''' tiene un formato de este estilo:
 +
{|
 +
|-
 +
|
 +
User_parameters: NombreMedida, comando.
 +
|}
  
  apt-get install drbd-utils
+
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.
Ahora tenemos que editar los archivos de configuración del drbd, estos archivos están en el directorio /etc/drbd.d
+
{|
 +
|-
 +
|
 +
  sudo service zabbix-agent restart
 +
|}
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Zabbix en MDtel]][[#Zabbix en MDtel| Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
Primero editaremos la configuración general, el archivo global_common.conf y le añadiremos en la sección net lo siguiente.
+
===== Scripts del Servidor Zabbix =====
 +
<br><br>
  
  vi /etc/drbd.d/global_common.conf
+
{|
 +
|
 +
|
 +
  '''Nota''': <small>No olvidar que en la misma maquina del server Zabbix, debe configurarse como agente de Zabbix.</small>
 +
|}
 +
Después de realizar la [[# Instalación de Zabbix | Instalación de Zabbix ]] correctamente. Se han creado otros ficheros scripts (''scripts propios de '''md'''tel'') 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.
  
[[File:cluster7.png|400px]]
+
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'''
 +
|}
  
Si tenemos problemas con los backup que realiza Vodafone en las máquinas virtuales añadir:
+
Se crea una tarea programada en linux para poder ejecutarse los scripts, programando el tiempo en que debe ejecutarse.
  
  net {
+
Si visualizo que "............" aparece:
                # protocol timeout max-epoch-size max-buffers
 
                # connect-int ping-int sndbuf-size rcvbuf-size ko-count
 
                # allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri
 
                # after-sb-1pri after-sb-2pri always-asbp rr-conflict
 
                # ping-timeout data-integrity-alg tcp-cork on-congestion
 
                # congestion-fill congestion-extents csums-alg verify-alg
 
                # use-rle
 
                protocol C;
 
                after-sb-0pri discard-zero-changes;
 
                after-sb-1pri discard-secondary;
 
                after-sb-2pri disconnect;
 
        }
 
  
Ó (nota Centro de Servicios)
+
*****  root zabbix
  
net {
+
====== zabbixSenderACDBD.pl ======
    ping-int 30;
+
<br><br>
    timeout 20;
 
    connect-int 30;
 
    protocol C;
 
    after-sb-0pri discard-older-primary;
 
    after-sb-1pri discard-secondary;
 
    after-sb-2pri disconnect;
 
}
 
  
 +
'''Uso:''' Obtiene diversos valores por cada cola, estados de agente por cola y estados de agente generales.
  
Para configurar los recursos tenemos que crear en el directorio /etc/drbd.d un archivo para cada recurso. Estos archivos deben tener la extensión res.
+
'''Ubicación:''' Servidor BDTR.
  
Creamos el archivo para el recurso mysql con el nombre drbd-mysql.res.
+
'''Parámetros:''' Ruta al archivo de configuración (Por ejemplo: ''/etc/MDtel/zabbixSenderACDBD.pconf'')
  
vi drbd-mysql.res
+
'''Archivo de configuración:''' zabbixSenderACDBD.pconf
  
El contenido del archivo es:
+
{|
 +
|-
 +
|
 +
<small>'''$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)</small>
 +
|}
  
resource drbdMYSQL {
+
====== zabbixSenderACD.pl ======
  on VC-CORP-Cetelem-Mad-cl1 {
+
<br><br>
    device /dev/drbd0;
 
    disk /dev/mapper/vg_DRBD--MYSQL-lv_DRBD--MYSQL;
 
    address 10.10.10.10:7788;
 
    meta-disk internal;
 
  }
 
  on VC-CORP-Cetelem-Mad-cl2 {
 
    device /dev/drbd0;
 
    disk /dev/mapper/vg_DRBD--MYSQL-lv_DRBD--MYSQL;
 
    address 10.10.10.11:7788;
 
    meta-disk internal;
 
  }
 
}
 
  
 +
'''Uso:''' Obtener el PID de Asterisk para revisar si se ha reiniciado en caso de que cambie.
  
Ahora haremos lo mismo para el recurso Asterisk, el archivo se llamará: drbd-aster.res.
+
'''Ubicación:''' Servidor ACD.
  
vi drbd-aster.res
+
'''Parámetros:''' Ruta al archivo de configuración (Por ejemplo: ''/etc/MDtel/zabbixSenderACD.pconf'').
  
 +
'''Archivo de configuración:''' zabbixSenderACDBD.pconf.
  
y el contenido será el siguiente:
+
{|
 +
|-
 +
|
 +
<small>'''$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)</small>
 +
|}
  
resource drbdASTER {
+
====== zabbixSenderCTI.pl ======
  on VC-CORP-Cetelem-Mad-cl1 {
+
<br><br>
    device /dev/drbd1;
 
    disk /dev/mapper/vg_DRBD--ASTER-lv_DRBD--ASTER;
 
    address 10.10.10.10:7789;
 
    meta-disk internal;
 
  }
 
  on VC-CORP-Cetelem-Mad-cl2 {
 
    device /dev/drbd1;
 
    disk /dev/mapper/vg_DRBD--ASTER-lv_DRBD--ASTER;
 
    address 10.10.10.11:7789;
 
    meta-disk internal;
 
  }
 
}
 
  
'''Realizamos este mismo proceso en el otro nodo del cluster.''' Los ficheros de configuración los podemos copiar de un nodo a otro.
+
'''Uso:''' Obtener estado y los distintos valores de vivait-cti.
  
 +
'''Ubicación:''' Servidor donde se ejecute vivait-cti. Normalmente el servidor ACD.
  
====== Configuración de /etc/hosts (En los 2 nodos) ======
+
'''Parámetros:'''
 +
{|
 +
|-
 +
|
 +
<small>'''--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.</small>
 +
|}
  
Tenemos que configurar correctamente los nombres de las máquinas en el archivo /etc/hosts.
+
====== zabbixSender-intz-nimitz.pl ======
 +
<br><br>
  
vi /etc/hosts
+
'''Uso:''' Obtener estado y los distintos valores de intz-nimitz.
  
El contenido de este archivo variará según la configuración, para este ejemplo.
+
'''Ubicación:''' Servidor donde se ejecute intz-nimitz.
  
[[File:cluster8.png|400px]]
+
'''Parámetros:'''
 +
{|
 +
|-
 +
|
 +
<small>'''--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.</small>
 +
|}
  
:{|
+
====== zabbixSenderMotorSal.pl ======
|
+
<br><br>
127.0.0.1 localhost
 
#127.0.1.1 VC-CORP-mdtelMad-cl1
 
  
128.1.4.201 VC-CORP-mdtel-Mad-cl1
+
'''Uso:''' Obtener estado y los distintos valores de motorSal.
128.1.4.202  VC-CORP-mdtel-Mad-cl2
 
  
10.10.10.10 nodo-vc-01
+
'''Ubicación:''' Servidor donde se ejecute motorSal.
10.10.10.11    nodo-vc-02
 
  
 +
'''Parámetros:'''
 +
{|
 +
|-
 +
|
 +
<small>'''--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.</small>
 +
|}
  
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
+
====== zabbixSenderMyACDSuperv.pl ======
 
+
<br><br>
  
====== Creación de los recursos en drbd. (En los 2 nodos) ======
+
'''Uso:''' Obtener estado y los distintos valores de myAcdSuperv.
  
Ahora crearemos los recursos en drbd, primero el de mysql
+
'''Ubicación:''' Servidor donde se ejecute myAcdSuperv.
  
  drbdadm create-md drbdMYSQL
+
'''Parámetros:'''
 +
{|
 +
|-
 +
|
 +
  <small>'''--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.</small>
 +
|}
  
Y después el de Asterisk
+
====== zabbixSenderRecordNodo.pl ======
 +
<br><br>
  
drbdadm create-md drbdASTER
+
'''Uso:''' Obtener estado y los distintos valores de recordNodo.
  
Y arrancamos el drbd en el nodo.
+
'''Ubicación:''' Servidor donde se ejecute recordNodo.
  
  /etc/init.d/drbd start
+
'''Parámetros:'''
 +
{|
 +
|-
 +
|
 +
  <small>'''--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.</small>
 +
|}
  
Crearemos las carpetas donde se montarán los recursos del drbd
+
====== zabbixSenderRecordCentral.pl ======
 +
<br><br>
  
mkdir HDmysql
+
'''Uso:''' Obtener estado y los distintos valores de recordCentral.
  
touch /HDmysql/sinMontar
+
'''Ubicación:''' Servidor donde se ejecute recordCentral.
  
  mkdir HDaster
+
'''Parámetros:'''
  touch /HDaster/sinMontar
+
{|
 +
|-
 +
|
 +
  <small>'''--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.</small>
 +
|}
  
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
 
  
====== Sincronización del drbd. (En 1 nodo) ======
+
A continuación se muestra una tabla resumen de los distintos scripts y sus funcionalidades:
  
Este proceso solo se debe realizar en un nodo, Con este comando sincronizaremos los 2 discos y el nodo desde donde lo lancemos será el que aporte los datos en la sincronización. Como no hay nada en los discos todavía es igual desde que nodo se ejecute.
+
[[Archivo:Zabbix_scripts.png |960px]]
  
drbdadm -- --overwrite-data-of-peer primary all
+
====== Dimensionamiento del servidor (Startpollers) ======
 +
<br><br>
  
 +
{|
 +
|
 +
|
 +
'''Nota''': <small>EL parámetro StartPollers es un <u>parámetro numérico</u> 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.</small>
 +
|}
  
Podemos ir viendo cual es el porcentaje que lleva realizado con el siguiente comando.
+
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. 
  
  watch -n 1 'cat /proc/drbd'
+
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.
  
Al final de la sincronización debería salir algo como esto.
+
====== Templates ======
 +
<br><br>
  
[[File:cluster9.png|400px]]
+
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 '''md'''tel hemos creado plantillas propias que facilitan estos procesos, los cuales necesitaremos [[#Importar templates |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.
  
===== Pacemaker, corosync y pcs =====
+
A continuación, se muestran los distintos bloques de funciones de la instalación en función de cada template:
  
 +
{| class="wikitable" style="text-align:center;"
 +
|-
 +
! 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
 +
|-
 +
|}
  
Ahora deberíamos tener en los 2 nodos un mysql configurado y corriendo, un Asterisk configurado y corriendo y 2 particiones de drbd (una para mysql y otra para Asterisk) sincronizadas, aunque no están montadas en ningún sitio.
 
  
  
====== Parar y deshabilitar los servicios. (en los 2 nodos) ======
+
{| class="wikitable" style="text-align:center;"
 
+
|+ '''Dependiendo del tipo de nodo:'''
Todos los servicios que vayan a ser controlados por el pacemaker tienen que estar parados y el arranque deshabilitado para que el pacemaker los arranque y los pare en el nodo que corresponda.
+
|-
 
+
! Templates !! ACD !! Corporativo/GW
/etc/init.d/asterisk stop
+
|-
/etc/init.d/mysql stop
+
| DRBD|| - || -
/etc/init.d/drbd stop
+
|-
systemctl disable mysql
+
| motorSal|| - || -
systemctl disable drbd
+
|-
systemctl disable asterisk
+
| Vivait-Suite ACD|| Si || -
 
+
|-
 
+
| Vivait-Suite BBDD|| - || -
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
+
|-
 
+
| 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|| - || -
 +
|-
 +
|}
  
====== Instalación de los paquetes necesarios. (En los 2 nodos) ======
 
  
Instalamos los paquetes necesarios.
 
  
apt install corosync pacemaker pcs
+
{| class="wikitable" style="text-align:center;"
 +
|+ '''Dependiendo del tipo de Base de dato'''s:
 +
|-
 +
! Templates !! BBDD <br />Tiempo Real !! BBDD<br /> 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|| - || - || -
 +
|-
 +
|}
  
  
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
 
  
 
+
{| class="wikitable" style="text-align:center;"
====== Configuramos la clave del usuario hacluster. (En los 2 nodos) ======
+
|-
 
+
! Templates !! Administración
Al instalar los paquetes se crea un usuario hacluster que tenemos que ponerle clave
+
|-
 
+
| DRBD|| -
passwd hacluster
+
|-
 
+
| motorSal|| -
La clave deberá ser la misma en los 2 nodos. '''ivivacluster'''
+
|-
 +
| 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|| -
 +
|-
 +
|}
  
  
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
 
  
 +
{| class="wikitable" style="text-align:center;"
 +
|-
 +
! 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|| -
 +
|-
 +
|}
  
====== Autentificación del pcs. (En 1 nodo) ======
 
  
En uno de los nodos ejecutamos el siguiente comando para autenticar el pcs.
 
  
pcs host auth nodo-vc-01 nodo-vc-02 -u hacluster -p ivivacluster
+
{| class="wikitable" style="text-align:center;"
 
+
|+ '''Monitorización'''
El resultado del comando tiene que ser:
+
|-
 
+
! Templates !! General !! Contact Center
<span style="color:#007bca">VC-CORP-Cetelem-Mad-cl1: Authorized
+
|-
VC-CORP-Cetelem-Mad-cl2: Authorized</span>
+
| 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|| - || -
 +
|-
 +
|}
  
====== Creación y configuración del cluster. (En 1 nodo) ======
 
  
Ahora creamos el cluster e incluimos las maquinas que lo van a componer y le asignamos un nombre (este nombre no puede exceder de 15 caracteres).
 
  
pcs cluster destroy (en caso de no encontrar /var/lib/pcsd/known-hosts y después lanzar pcs host auth noco-vc-01 nodo-vc-02  -h hacluster -p ivivacluster)
+
====== '''Resumen''' ======
 +
<br><br>
  
pcs cluster setup CLmutuaint  nodo-vc-01 nodo-vc-02 --start --enable --force
+
{| class="wikitable"
 
+
|-
Si todo ha ido bien la salida debería ser algo como esto.
+
!Plantillas MDTEL !! Trigger !! Descripción !! Severidad !! Actuación a llevar a cabo
 
+
|-
[[File:cluster10.png|500px]]
+
|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).
Lo habilitamos '''''en todos los nodos'''''
+
|-
 
+
|Template DRBD||DRBD desconectado en {HOST.NAME}||El DRBD esta desconectado en Host||Desastre||Revisar Host. Comprobar estado del DRBD (cat /proc/drbd)
pcs cluster enable --all
+
|-
 
+
|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
La salida será:
+
|-
 
+
|Template motorSal||motorSal caido||El motorSal esta caido||Desastre||Reiniciar motorSal.
<span style="color:#007bca">VC-CORP-CDS-MAD-01: Cluster Enabled
+
Revisar log (var/log/motorsal.log) para averiguar la causa
VC-CORP-CDS-MAD-02: Cluster Enabled</span>
+
|-
 
+
|Template Vivait-Call Asterisk||Asterisk reiniciado||El Asterisk se ha reiniciado||Alta||Comprobar que ha arrancado correctamente.
Arrancamos el cluster '''en todos los nodos'''
+
Salvar core (/tmp/core.XXX) y full (/var/log/asterisk/full) a ubicación segura.
 
+
|-
pcs cluster start --all
+
|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||Comprobar con “ps aux | 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.
 +
|-
 +
|}
  
  
[[File:cluster11.png|500px]]
+
* 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
  
Comprobamos que todo está correcto con el siguiente comando:
+
====== Importar templates ======
 +
<br><br>
  
Nos mostrara el estado del cluster.
+
Las plantillas propias de '''md'''tel se encuentran en la ruta "'''/usr/src/nimitz/archivos'''" y empiezan con el nombre de "TemplateXXX.xml".
  
[[File:cluster12.png|700px]]
+
{|
 +
|-
 +
|
 +
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'''
  
 +
|}
  
En la salida del comando, vemos que STONITH (Shoot The Other Node In The Head) esta activado, pero no hay dispositivos configurados.
 
  
Quitamos el STONITH.
+
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.
  
pcs property set stonith-enabled=false --force
+
[[File:ImportarTemplates.png|750px|center]]
  
 +
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".
  
También deshabilitaremos la política de quorum. Un cluster tiene quorum cuando más de la mitad de los nodos están online. Pacemaker por defecto para todos los servicios si no hay quorum, esto no tiene mucho sentido en un cluster de 2 nodos.
+
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Monitorización en VIVAit]][[#Monitorización en VIVAit | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
pcs property set no-quorum-policy=ignore --force
+
==== Configuración para un primer funcionamiento de Zabbix ====
 +
<br><br>
  
 +
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.
  
Vamos a ver la lista de propiedades del cluster para ver que hemos deshabilitado todo correctamente.
+
===== Configuración de los equipost (host) para la monitorización =====
 +
<br><br>
  
  pcs property list
+
{|
 +
|-
 +
|
 +
  '''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.
  
  
[[File:cluster13.png|500px]]
+
[[File:CreacionHost.png|750px|center]]
  
 +
Las opciones basicas para configurar un host son las siguientes:
 +
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
 +
! align=center ;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0cm;color:#ffffff;" | '''''Campos'''''
 +
! align=center ;border:0.05pt solid #000000;padding:0cm;color:#ffffff;" | '''''Explicación'''''
 +
! align=center ;border:0.05pt solid #000000;padding:0cm;color:#ffffff;" | '''''Valores posibles'''''
 +
|-
 +
| font-weight: bold;" | '''Host Name'''
 +
|  | Definir un nombre para el host.
 +
||Se puede utilizar números, letras, espacios y guiones bajos están permitidos.
 +
|-
 +
| font-weight: bold;" | '''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".
 +
|-
 +
| font-weight: bold;" | '''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.
  
====== Creación de las IP flotantes (En 1 nodo) ======
+
Templates.
  
Ahora vamos a crear las 2 direcciones ip flotantes para que la conexión se realice a la maquina correcta en cada caso, esta ip balanceara entre los diferentes nodos para dar acceso a los servicios en el nodo en el que estén activos.
+
Templates MDtel.
  
Creamos la IP para el mysql.
+
Zabbix servers.
  
pcs resource create IP-MYSQL ocf:heartbeat:IPaddr2 ip=128.1.4.205 nic=eno1:0 cidr_netmask=16 op monitor interval=60s
+
Linux Servers.
  
Y la IP para el Asterisk
+
Hypervisors.
  
pcs resource create IP-ASTER ocf:heartbeat:IPaddr2 ip=128.1.4.207 nic=eno1:1 cidr_netmask=16 op monitor interval=60s
+
Virtual machines.
  
Comprobamos el estado del cluster.
+
O crear uno nuevo en '''New group'''.
 
pcs status
 
  
Nos mostrará los nuevos recursos creados y nos indicará en que nodo han sido arrancados.
+
|-
 +
| font-weight: bold;" | '''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.
  
[[File:cluster14.png|600px]]
 
  
 +
====== Comprobación de disponibilidad del host ======
 +
<br><br>
  
 +
Para saber si todo esta bien debemos ver la Z de disponibilidad. 
  
====== Configuración del drdb. (En 1 nodo) ======
 
  
 +
[[File:EstadosZHost.png|750px|center]]
  
La configuración de DRBD en Pacemaker implica que creemos varios recursos que se ejecutaran a la vez, para ello, utilizaremos una opción de pcs que nos permite encolar varios comandos y ejecutarlos al mismo tiempo. Estos comandos serán ejecutados únicamente en un nodo.
 
  
Primero ejecutaremos los comandos necesarios para la creación del drbd para mysql.
+
Indicación de los colores del icono Z:
  
pcs cluster cib drbd_mysql_cfg
+
* 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.
pcs -f drbd_mysql_cfg resource create DRBDmysql ocf:linbit:drbd drbd_resource=drbdMYSQL op monitor interval=60s
 
pcs -f drbd_mysql_cfg resource master DRBDmysqlClone DRBDmysql master-max=1 master-node-max=1 clone-max=2 clone-node-max=1  notify=true
 
pcs -f drbd_mysql_cfg resource promotable DRBDmysql promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1  notify=true
 
pcs cluster cib-push drbd_mysql_cfg
 
  
Y lo mismo para el drbd de asterisk.
+
* 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.
  
pcs cluster cib drbd_aster_cfg
+
* Si el icono es verde, esta funcionando correctamente.
pcs -f drbd_aster_cfg resource create DRBDaster ocf:linbit:drbd drbd_resource=drbdASTER op monitor interval=60s
 
pcs -f drbd_aster_cfg resource promotable DRBDaster promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1  notify=true
 
pcs cluster cib-push drbd_aster_cfg
 
pcs cluster cib drbd_aster_cfg
 
pcs cluster cib-push drbd_aster_cfg
 
  
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Monitorización en VIVAit]][[#Monitorización en VIVAit | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
Miraremos el estado del cluster
+
====Indicar que plantilla (template) tendrá el host ====
 +
<br><br>
 +
Esta configuración es opcional.<br>
 +
Tras [[#Importar templates |importar templates]] nos dirigimos al host ya configurado, y en su pestaña de templates pulsamos "add" y añadimos la plantilla/s adecuadas.
  
pcs status
+
===== Asignar items al host =====
 +
<br><br>
  
El resultado debería de mostrar que los recursos del drbd están creado y cuál es el nodo primario (master) y cuál es el nodo secundario (slave) para ambos recursos.
+
{|
 +
|-
 +
|
 +
'''Nota''':Un host puede tener un ITEM sin necesitad de tener template.
 +
|}
  
[[File:cluster15.png|700px]]
+
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".
  
 +
[[File:CrearItemEjemplo.png|750px|center]]
  
====== Montar las particiones del drbd. (En 1 nodo) ======
+
Parametros o campos a rellenar para una configuración básica :
  
Formatearemos las particiones del drbd.
+
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
 
+
! align=center ;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0cm;color:#ffffff;" | '''''Campos'''''
  mkfs.ext4 /dev/drbd1
+
! align=center ;border:0.05pt solid #000000;padding:0cm;color:#ffffff;" | '''''Explicación'''''
  mkfs.ext4 /dev/drbd0
+
! align=center ;border:0.05pt solid #000000;padding:0cm;color:#ffffff;" | '''''Valores posibles'''''
 
+
|-
Una vez finalizado el proceso la pantalla mostrará a siguiente información (para cada comando).
+
| font-weight: bold;" | '''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.
 +
||
 +
|-
 +
| font-weight: bold;" | '''Type'''
 +
|| Indicar de que entidad queremos recibir informacion.
 +
||Puede ser al "Agente Zabbix" o a el Hardware como impresoras, switch o routers. 
 +
|-
 +
| font-weight: bold;" | '''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.
 +
||
 +
|-
 +
| font-weight: bold;" | '''host interface'''
 +
|  |Es la direccion de red del servidor zabbix (puede ser uno o mas)
 +
|  |
 +
||
 +
|-
 +
| font-weight: bold;" | '''Units'''
 +
|  |Es la dirección de red del servidor zabbix (puede ser uno o mas)
 +
|  |
 +
|-
 +
| font-weight: bold;" | '''Type of information'''
 +
|  |Tipo de unidades con el que mostrar Zabbix el valor segundos, minutos, euros,....
 +
||
 +
|}
  
[[File:cluster16.png|700px]]
+
Cuando termine, haga clic en Guardar.  El nuevo elemento debe aparecer en la ITEMLIST.
 +
Para mas informacion [[http://entation/1.8/manual/config/items#zabbix_agent. ver documentación Zabbix]]
  
  
Ahora crearemos el recurso para montar la partición de mysql en el directorio que creamos.
+
====== Ver la información recolectada por el item ======
 +
<br><br>
  
Vamos a crear restricciones para asegurarnos que los recursos estén todos en el nodo correcto y que arrancan en orden.
 
  
Vamos a configurar que la partición se monte en el nodo que sea master que la ip flotante este en este nodo y arranque después de haber montado la partición.
+
{|
 +
|-
 +
|
 +
<small>'''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.</small>
 +
|}
  
  pcs cluster cib fs_mysql_cfg
+
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".
  pcs -f fs_mysql_cfg resource create DRBDfsMYSQL Filesystem device="/dev/drbd0" directory="/HDmysql" fstype="ext4"
 
pcs -f fs_mysql_cfg constraint colocation add DRBDfsMYSQL with DRBDmysqlClone INFINITY with-rsc-role=Master
 
pcs -f fs_mysql_cfg constraint order promote DRBDmysqlClone then start DRBDfsMYSQL
 
pcs -f fs_mysql_cfg constraint colocation add IP-MYSQL with DRBDfsMYSQL INFINITY
 
pcs -f fs_mysql_cfg constraint order DRBDfsMYSQL then IP-MYSQL
 
pcs cluster cib-push fs_mysql_cfg
 
pcs status
 
  
La salida mostrará lo siguiente:
+
[[File:VerInfoITEM.png|750px|center]]
  
[[File:cluster17.png|700px]]
+
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".
  
Nos indica que el Filesystem está creado y montado en el nodo nodo-vc-01.
+
[[File:VIsualGraficaValorItem.png|center|750px]]
 +
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"
  
Ahora haremos lo mismo para la partición de Asterisk.
+
===== Configurar los Triggers para los host =====
 +
<br><br>
  
pcs cluster cib fs_aster_cfg
+
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.
pcs -f fs_aster_cfg resource create DRBDfsASTER Filesystem device="/dev/drbd1" directory="/HDaster" fstype="ext4"
+
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.
pcs -f fs_aster_cfg constraint colocation add DRBDfsASTER with DRBDasterClone INFINITY with-rsc-role=Master
+
{|
pcs -f fs_aster_cfg constraint order promote DRBDasterClone then start DRBDfsASTER
+
|-
pcs -f fs_aster_cfg constraint colocation add IP-ASTER with DRBDfsASTER INFINITY
+
|
pcs -f fs_aster_cfg constraint order DRBDfsASTER then IP-ASTER
+
  Nota: Un trigger necesita una accion, que indica que hacer cuando se activa el trigger.
  pcs cluster cib-push fs_aster_cfg
+
|}
pcs status
 
  
Vemos que ya tenemos las 2 particiones montadas.
 
  
[[File:cluster18.png|700px]]
+
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".
  
======  Copiar datos de Asterisk a partición drbd. (En nodo 1) ======
+
Parametros o campos a rellenar para una configuración básica :
  
Esto hay que realizarlo en el nodo en el que está montada la partición drbd para asterisk. Estará montado en la carpeta /HDaster
+
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
 +
! align=center ;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0cm;color:#ffffff;" | '''''Campos'''''
 +
! align=center ;border:0.05pt solid #000000;padding:0cm;color:#ffffff;" | '''''Explicación'''''
 +
! align=center ;border:0.05pt solid #000000;padding:0cm;color:#ffffff;" | '''''Valores posibles'''''
 +
|-
 +
| font-weight: bold;" | '''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.
 +
||
 +
|-
 +
| font-weight: bold;" | '''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
 +
|-
 +
| font-weight: bold;" | '''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.
 +
||
 +
|-
 +
| font-weight: bold;" | '''Descripción'''
 +
|  | Una descripción breve sobre el trigger.
 +
||
 +
|-
 +
| font-weight: bold;" | '''Severity'''
 +
|  | everidad distinguida por colores,
 +
|| No classified
 +
Information
 +
Warning
 +
Average
 +
High
 +
Disaster
 +
|}
  
cd /HDaster/
 
tar -zcvf etc-asterisk.tgz /etc/asterisk
 
tar -zxvf  etc-asterisk.tgz
 
rm etc-asterisk.tgz
 
tar -zcvf var-lib-asterisk.tgz /var/lib/asterisk
 
tar -zxvf  var-lib-asterisk.tgz
 
rm var-lib-asterisk.tgz
 
tar -zcvf usr-lib-asterisk.tgz /usr/lib/asterisk
 
tar -zxvf  usr-lib-asterisk.tgz
 
rm usr-lib-asterisk.tgz
 
tar -zcvf var-spool-asterisk.tgz /var/spool/asterisk
 
tar -zxvf  var-spool-asterisk.tgz
 
rm var-spool-asterisk.tgz
 
  
======  Borrar los directorios de asterisk y crear enlaces simbólicos. (En los 2 nodos) ======
 
  
Borraremos los directorios y crearemos los enlaces simbólicos necesarios.
+
====== Comprobar el estado del trigger ======
 +
<br><br>
  
 +
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.
  
rm -rf /etc/asterisk
+
[[File:EstadoTrigger.png|center|750px]]
ln -s /HDaster/etc/asterisk /etc/asterisk
 
  
rm -rf /var/lib/asterisk
+
===== Asociar un Action al trigger =====
ln -s /HDaster/var/lib/asterisk /var/lib/asterisk
+
<br><br>
  
rm -rf /usr/lib/asterisk
+
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:
ln -s /HDaster/usr/lib/asterisk /usr/lib/asterisk
 
  
rm -rf /var/spool/asterisk
+
# A través de mensajes simples, alertando al instante.
ln -s /HDaster/var/spool/asterisk /var/spool/asterisk
+
# 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]].
 +
-->
  
======  Copiar datos de mysql a partición drbd. (En 1 nodo) ======
+
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Monitorización en VIVAit]][[#Monitorización en VIVAit | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
Esto hay que realizarlo en el nodo en el que está montada la partición drbd para mysql. Estará montado en la carpeta /HDmysql
+
== Funcionalidades específicas en '''''VIVA'''it'' ==
 +
<br><br>
 +
En este apartado se tratará de las funcionalidades especificas de que dispone el sistema '''''VIVA'''it''.<br>
 +
Este apartado contiene las siguientes funcionalidades:
 +
<br><br>
 +
: • [[#Mecanismo de prioridad adaptativa|'''Mecanismo de prioridad adaptativa''']], asignación de llamadas en colas modulada por tiempo de espera.<br>
  
cd /HDmysql/
 
tar -zcvf var-lib-mysql.tgz /var/lib/mysql
 
tar -zxvf  var-lib-mysql.tgz
 
tar -zcvf etc-mysql.tgz /etc/mysql
 
tar -zxvf  etc-mysql.tgz
 
  
  
======  Borrar los directorios de mysql y crear enlaces simbólicos. (En los 2 nodos) ======
+
<br><br>
  
Los datos contenidos en estos directorios ya no son válidos, borramos los directorios.
 
  
Los enlaces simbólicos no van a ser necesarios, los vamos a conservar para facilitar el acceso a los directorios de mysql habituales
 
  
rm -rf /var/lib/mysql
+
=== Mecanismo de prioridad adaptativa ===
ln -s /HDmysql/var/lib/mysql /var/lib/mysql
 
rm -rf /etc/mysql
 
ln -s /HDmysql/etc/mysql /etc/mysql
 
  
 +
El mecanismo de prioridad adaptativa permite en una plataforma '''''VIVA'''''it 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
  
======  Modificar configuración de apparmor para mysql. (En los 2 nodos) ======
+
==== Introducción ====
  
Debemos cambiar la configuración de apparmor para darle a mysql acceso a la nueva localización de los ficheros.
+
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
  
Debemos modificar el fichero /etc/apparmor.d/usr.sbin.mysqld
+
==== Terminología ====
  
vi /etc/apparmor.d/usr.sbin.mysqld
+
* '''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,<br />
 +
prioridad 50 es mejor que prioridad 70''
  
Y dejarlo configurado con la nueva ubicación de los ficheros. Debe quedar así:
+
==== 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:
  
[[File:cluster19.png|300px]]
+
- 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
  
[[File:cluster20.png|300px]]
+
'''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.'''
  
Aplicamos los cambios con:
+
- Agentes con prioridad de colas de 100 en adelante; se utilizará el siguiente mecanismo de prioridad ponderada:
  
apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
+
:*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)
  
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
+
:*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:
  
======  Modificar archivos de configuración de mysql. (En 1 nodo) ======
+
[[Archivo:Formula.png |center]]
  
Los enlaces simbólicos no funcionan con mysql, por eso necesitamos modificar archivos de configuración de mysql para cambiar las rutas de acceso a los archivos creado en el directorio /HDmysql.
+
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
  
Esto hay que realizarlo en el nodo que tiene montada la partición /HDmysql.
+
[[Archivo:Esquema.png |center]]
  
Modificamos el fichero my.cnf.fallback
+
  <span style="color:#000080">- Calculo prioridad de llamada: se calcula por llamada cada vez que un agente queda libre</span>
 +
  <span style="color:#000080">- Agente atiende llamada con mejor prioridad de llamada</span>
  
vi  /HDmysql/etc/mysql/my.cnf.fallback
 
  
 +
<!--
 +
[[Medio:Asignación de llamadas por prioridad adaptativa.pdf|Asignación de llamadas por prioridad adaptativa]]-->
  
Deberá quedar así.
+
<br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
  
 +
=== 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.
  
[[File:cluster21.png|300px]]
 
  
Ahora el fichero mysql.cnf.
+
====Esquema de funcionamiento====
 +
[[Archivo:esquema funcionamiento marcador.jpg|center|500px]]
  
vi /HDmysql/etc/mysql/mysql.cnf
+
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.
  
Y quedará así.
+
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.
  
[[File:cluster22.png|400px]]
+
====Flujo de estados====
  
El fichero mysqld.cnf.
+
El flujo de estados es el reflejado en la figura siguiente:
  
vi /HDmysql/etc/mysql/mysql.conf.d/mysqld.cnf
+
[[Archivo:diagrama de flujo motorsal.png|center|800px]]
 
 
[[File:cluster23.png|400px]]
 
  
 +
Los diferentes estados de un contacto son:
 +
{| class="wikitable sortable"
 +
|-
 +
! 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||
 +
|-
 +
|}
  
Y por último el fichero my.cnf.
+
====Carga de contactos====
  
vi /HDmysql/etc/mysql/my.cnf
+
===== Descripción =====
  
Y quedara de la siguiente manera. (datadir / log_bin / includedir)
+
A continuación se explica la configuración y funcionamiento de la utilidad encargada de asignar contactos a campañas.
  
 +
===== Configuración =====
  
[[File:cluster24.png|500px]]
+
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.
 
 
 
 
[[File:cluster25.png|500px]]
 
 
 
 
 
[[File:cluster26.png|400px]]
 
 
 
 
 
======  Configuración del arranque de mysql. (En 1 nodo) ======
 
 
 
Vamos a configurar el arranque de mysql y le vamos a poner como condiciones que este en el nodo que este la ip flotante de mysql y que arranque después de que esté la ip.
 
 
 
pcs cluster cib mysql_cfg
 
pcs -f mysql_cfg resource create MYSQL ocf:heartbeat:mysql binary="/usr/sbin/mysqld" config="/etc/mysql/my.cnf"  datadir="/var/lib/mysql" pid="/var/run/mysqld/mysqld.pid" socket="/var/run/mysqld/mysqld.sock" additional_parameters="--bind- address=0.0.0.0" op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=30s
 
pcs -f mysql_cfg constraint colocation add MYSQL with IP-MYSQL INFINITY
 
pcs -f mysql_cfg constraint order IP-MYSQL then  MYSQL
 
pcs cluster cib-push mysql_cfg
 
pcs status
 
 
 
 
 
====== Configuración del arranque de Asterisk. (En 1 nodo) ======
 
 
 
pcs cluster cib aster_cfg
 
pcs -f aster_cfg resource create ASTER lsb:asterisk
 
pcs -f aster_cfg constraint colocation add ASTER with IP-ASTER INFINITY
 
pcs -f aster_cfg constraint order IP-ASTER then ASTER
 
pcs cluster cib-push aster_cfg
 
pcs status
 
 
 
 
 
====== Mover los recursos a otra máquina. (En 1 nodo) ======
 
 
 
El crear 2 particiones separadas para el Asterisk y el mysql nos da la posibilidad de correr un servicio en cada máquina y tener los 2 nodos activos.
 
 
 
Para mover un recurso de nodo utilizaremos el siguiente comando en el nodo que está el recurso ejecutándose.
 
 
 
pcs resource move DRBDfsASTER
 
 
 
Esto crea restricciones locales para evitar que el recurso vuelva a este nodo (Puede tener prioridad de ejecución en este nodo y haría que volviera a este nodo automáticamente al estar online).
 
 
 
La restricción que crea banea el nodo para este recurso, si queremos quitar la restricción creada.
 
 
 
pcs resource clear DRBDFsAst
 
 
 
 
 
-----------------------------------------------------------------------------------------------------------------------------
 
 
 
==== Instalación y configuración del Cluster hasta la versión '''''<span style="color:#144F9B">VIVA</span>'''''it 3.3 ====
 
.
 
 
 
 
 
 
 
Hasta la versión '''3.3''' de '''''<span style="color:#144F9B">VIVA</span>'''''it , la instalación y configuración del cluster se hace de la siguiente forma:
 
 
 
 
 
'''[[Instalación y configuración del Cluster hasta la versión VIVAit 3.3]]'''
 
  
 +
{| class="wikitable" style="text-align:center;"
 +
|-
 +
! 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 : <br /> *A: Alta <br /> *M: Modificación <br /> *B: Baja<br /> 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 ||
 +
|-
 +
| email || 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 ||
 +
|-
 +
|}
  
 +
===== 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';
  
== Otros Diagnósticos y operaciones básicas ==
+
====Comportamiento de reprogramaciones de llamadas en función del estado del agente====
<br><br>
 
 
 
=== Arranque y apagado de la plataforma ===
 
 
 
En general el arranque y apagado de cada nodo de una plataforma '''''VIVA'''''it 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:
+
Se ha preparado la siguiente maqueta:
# 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
 
  
 +
Campaña saliente.
 +
Cola saliente progresiva.
 +
Dos agentes logados en VIVAit Suite.
  
Al respecto del orden de apagado de nodos, es el siguiente:
+
En el formulario de la llamada se indica: llamada redirigida
# 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
+
Se selecciona el "check dirigida"
# 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
 
  
<br><br>
+
Las posibilidades de prueba son dos: "'''Cualquier agente'''" y "'''Solo agente'''"
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
<!--
 
=== Nivel matriz de conmutación ===
 
-->
 
  
=== Grabación ===
+
Resultados son los siguientes:
  
==== Configuración de la grabación en la plataforma corporativa ====
+
{| class="wikitable sortable"
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:
+
|-
 
+
| '''Estado del agente''' || '''Modo Cualquier Agente'''|| '''Modo Solo Agente'''
* El nodo, es decir todo lo que el nodo enrute
+
|-
* Prerutas
+
| '''Agente Preparado''' || Entra llamada a agente|| Entra llamada a agente
* Objetos: que son las extensiones, usuarios, grupos corporativos, etc.
+
|-
 +
|'''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.
 +
|-
 +
|}
  
Tenemos tres formas de grabar:
+
<br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
  
* Grabar con beep periódico
+
=== Movilidad ===
* Grabar sin beep periódico
+
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.
* 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.
+
==== Ofrecer movilidad a un usuario ====
 +
<!--parte daniel-->
 +
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 ''VIVA''it'''.  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 [[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Documentaci%C3%B3n_de_usuario_VIVAit_Call_3.0#Portal_de_usuario |portal de usuario]]). <br/>Para más información[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Pesta.C3.B1a_Centralita | ver sección Portal de administración - General - Usuarios - administración de usuarios - Pestaña Centralita]].
  
Al igual pasa si tenemos que un elemento tenga descartar la grabación. La grabación no se inicia.
+
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 ''VIVA''it'''.<br/>Para más información[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Asignaci.C3.B3n_de_Permisos_de_Usuario_por_Administrador | ver sección  Portal de administración - General - Usuarios - Permisos a usuarios]]
 
 
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.
 
  
 +
'''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.
  
==== Como configurar la grabación bajo demanda ====
 
  
Para activar la grabación bajo demanda es necesario activar el '''MixMonitor'''.
+
<!--parte daniel-->
 +
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 ''VIVA''it'''. Para más información [[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Extensiones | ver sección Portal de administración - VIVAit Call - Dispositivos - Extensiones]]
  
En el Nodo hay que identificar '''Grabar por enrutamiento''' = '''Sin grabación'''.
+
==== ¿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.''
  
[[File:Ejemplo activacion grabacion en nodo CORP-2.jpg|centro]]
+
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'''
  
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'''.
+
Y como resultado obtenemos lo siguiente:
  
 +
mdintz Variables:<br/>
 +
MdintzIdentif='cms1'<br />
 +
MOVIL_TIPO_RESET='10'<br />
 +
MOVIL_CAD_RESET='notify_yealink'<br />
 +
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:''
  
[[File:NODO ACD-2.jpg|centro]]
+
'''mdintz qry * nimitz bd extenSaleUsuarioMovil 25001'''
  
 +
Resultado del comando:
  
 +
mdintz Variables:<br/>
 +
MdintzIdentif='cms1'<br/>
 +
MOVIL_TIPO_RESET='10'<br/>
 +
MOVIL_CAD_RESET='notify_yealink'<br/>
 +
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'''
  
En la Campaña (asignar la cola a la campaña; si se pone el modo de grabación en la cola, '''no funciona <big><sup>'''**'''</sup></big>''', 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'''.
+
Obteniendo:
 
 
  
 +
mdintz Variables:<br/>
 +
MdintzIdentif='cms1'<br/>
 +
MdintzRes='movil_error_datos'
  
[[File:MODO DE GRABACION EN CAMPAÑA-2.jpg|centro]]
+
Como era lo previsible no nos deja "movernos" a esa extensión ya que no tiene movilidad.
 +
<!--
 +
'''<u>Si un usuario ya se ha movido a una extensión no se puede mover a otra si no es deslogandose de esta antes.</u>'''
  
 +
Esta línea se comenta porque se ha preparado el sistema para que los ususarios se puedan logar en una nueva extensión y el sistema lo deslogue de la primera a la que se movió. La variable que controla este funcionamiento es MD_AUTODES, con dos posibles valores:
 +
0, para que el usuario deba deslogarse de una extensión para logarse en otra.
 +
1, para que sea el sistema el que deslogue automátiamente al usuario cuando cambia de una extensión de movilidad a otra.
 +
-->
  
 +
'''<u>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.</u>'''
  
 +
'''mdintz qry * nimitz bd extenEntraUsuarioMovil 21000 20001 1234'''
  
El formulario de '''''VIVA'''''it  Desk que se abra cuando entre la llamada que queremos grabar ha de tener los botones de grabación.
+
Con salida:
  
 +
mdintz Variables:<br/>
 +
MdintzIdentif='cms1'<br/>
 +
MOVIL_EXTEN='25001'<br/>
 +
MDintzRes='movil_ya_login'
  
[[File:Ejemplo de formulario con botones de grabacion.jpg|centro]]
+
'''* 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
  
Trazas '''''VIVA'''''it Desk:
+
<br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0 Volver al índice]
 +
<br><br>
  
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'''.
 
  
  
'''<big><sup><big>'''**'''</big></sup> Hemos visto que la grabación Bajo demanda en los Grupos ACD si funciona.</big>'''
 
  
Para activarla hay que entrar en la configuración del Grupo ACD que queremos grabar y activar la grabación por enrutamiento:
 
  
  
[[File:cap_1.jpg|600px]]
+
=== Desvío por calendario ===
  
  
Además indicamos en el modo de grabación: Grabación bajo demanda inicio sin grabar.
+
Se ha desarrollado una nueva funcionalidad para VIVAit Call que permite
 +
establecer desvíos de extensiones y usuarios en base a una programación
 +
horaria.
 +
Una vez puesta en marcha esta funcionalidad , el orden de desvíos de usuarios o
 +
extensión en VIVAit Call será:
  
  
[[File:cap_2.jpg|600px]]
+
* Primero se atiende si el usuario o extensión tiene desvío incondicional a
 +
mensajería.
  
 +
* En segundo lugar se comprueba si dispone de desvío programado, y se
 +
encuentra en una franja horaria con desvío activo.
  
En la consola vemos los siguientes datos:
+
* Posteriormente se atiende si el usuario o extensión tiene desvío
 +
incondicional.
  
 +
* Posteriormente se tratarán resto de desvíos condicionales (por no
 +
conectado, por ocupado o por no contesta).
  
[[File:cap_3.jpg|600px]]
 
  
==== 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.
 
  
==== 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:
+
[[Archivo:Captura de pantalla de 2022-11-16 07-58-38.png|center|900px]]
{| class="wikitable"
 
|-
 
| 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''''
+
Los componentes principales de la arquitectura son:
|}
 
  
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.
 
  
==== Comprobar que un nodo tiene activo el agente de grabación ====
+
*'''Servidor de calendarios''' : Para definir las programaciones de desvíos se ha utilizado una solución de servidor estándar de calendarios; se ha optado por el servidor Baikal, por disponer de todas las funcionalidades necesarias y disponer de BBDD Mysql (especialmente adecuado en entornos VIVAit)
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.
 
  
==== 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:
 
  
{| class="wikitable"
+
*'''Intz-Nimitz''' : El proceso de enrutamiento de VIVAit consultará en cada llamada el estado de desvío programado al servidor de calendarios; esta consulta solo se realizará en caso de que dicha extensión o usuario tenga activo dicho desvío y un calendario asignado; por defecto los desvíos programados estarán desactivados en todas las extensiones y usuarios para proteger las prestaciones del sistema.
|-
 
| 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
+
*'''Frontales''' : Para la administración por parte de los usuarios de los desvíos programados se ofrecen los siguientes frontales:
  
recordCenral REC llamNum=24901 llamErr=0 segmNum=38906 segmErr=0 retraso=305
+
- '''Portal de usuario:''' Cada usuario podrá definir desvíos programados en el mismo entorno en el que define el resto de desvíos.
  
'''recordCentral NODO fase=0 cuarentena='' descarga='8,6,4,7,10,9' gestion='4,6,7,8,9,10''''
+
- '''Portal de administración de VIVAit''': Desde dicho portal se podrán gestionar por un administrador los desvíos programados de      usuarios y extensiones de todo el sistema.
|}
 
  
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.
+
- '''Portal de administración de Baikal''': Desde dicho portal se podrán gestionar el servidor de calendarios.
  
==== Comprobación de grabaciones que se hayan quedado enganchadas en un nodo ====
+
- '''Entorno estándar de gestión de calendarios:''' desde un entorno estándar de gestión de calendarios (p. ej Thunderbird), y con protocolo CalDav, se podrán realizar gestiones de todos los calendarios de un entorno VIVAit. Este entorno sería una alternativa al portal de administración (no de usuario), debido a que:
Podemos fijarnos en los dos comandos, para '''''nc ip_maquina 1114''''':
 
{| class="wikitable"
 
|-
 
| root@smadavacdrecord1:~# nc localhost 1114
 
recordCentral SIS ver='01.2' inic='20140423 094058' alarmas=11041 ultAlar='20140423
 
160112'
 
  
recordCentral MYSQL cnx=1
+
1.  Se deberá configurar dicho entorno para acceder con el usuario de administración de calendarios.
 +
 +
2.  Se podrán ver todos los calendarios del sistema (de todas las extensiones y usuarios).
  
recordCentral NAS llamadas=1 segmentos=1
 
  
recordCenral REC llamNum=24901 llamErr=0 segmNum=38906 segmErr=0 retraso=305
+
Por defecto no será necesario montar un nuevo nodo de VIVAit, para el despliegue de Baikal se montará donde esté ubicado el portal de administración de VIVAit.
  
'''recordCentral NODO fase=0 cuarentena='' descarga='8,6,4,7,10,9' gestion='4,6,7,8,9,10''''
+
  '''Baikal se ubicará por defecto en el mismo nodo en el que se encuentre el portal de administración de VIVAit.'''
|}
 
  
Fijándonos en el campo "cuarentena=''" indica que ninguno de los nodos tiene problemas.
 
  
==== 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:
 
  
{|class="wikitable"
 
|-
 
! 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
 
  
|}
+
===== Baikal =====
  
Nos fijaríamos en la línea marcada en negrita, el campo "Use%" indicara el porcentaje de almacenamiento temporal de grabaciones en un nodo.
+
Como se ha indicado en el apartado de arquitectura, VIVAit Call utilizará un servidor de calendarios Baikal para almacenar la información referente a desvíos programados de usuarios y extensiones.
 +
 
 +
Baikal es un servidor CalDAV ligero. Los datos se almacenan en una base de datos Mysql (diferente a la base de datos de VIVAit).
  
<br><br>
+
En el caso de su uso en VIVAit Call:
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
===Escuchas e intrusiones en asterisk===
+
* Existirá un único usuario administrador de Baikal que podrá crear los calendarios (desde los frontales anteriormente descritos).
'''CallSpy''' es una aplicación elaborada para asterisk que permite a un usuario realizar escuchas e
+
intrusiones en llamadas.
+
* Los calendarios y los desvíos podrán ir asociados tanto a usuarios como a extensiones.
En realidad tenemos dos aplicaciones en asterisk, CallSpy y CallSpyee.  
+
====CallSpy ====
+
* Cada extensión o usuario de VIVAit tiene un calendario asignado que se crea automáticamente en Baikal al programar el primer evento desde el portal de administración de VIVAit o desde el portal de usuario.
{|
 
|-
 
|
 
'''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:
 
  
{|
+
'''Si se instala Vivait 3.6 desde repositorio , habría que realizar los siguientes pasos en Mysql:'''
|-
 
|
 
  CallSpy(<tipoEspiado>,<expRegEspiado>,<parametrosConf>)
 
  
|}
+
'''Configuración de Mysql'''
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.
 
====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])
 
<small>'''Nota:'''No son parámetros obligatorios, por lo que no hace falta rellenar todos los campos pero si respetar sus posiciones separadas por comas.<small>
 
|}
 
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})
 
|}
 
  
====Cambios para el dialplan de asterisk====
+
La instalación de Baikal implica disponer de un servidor Mysql operativo; será necesario crear una base de datos de nombre “baikal” con un usuario “baikal” que será el que utilizarán los frontales para la interacción con el servidor de calendarios:
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 '''MD'''tel:  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)
 
<small>'''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. <small>
 
|}
 
  
*Paso 2.Llamar a CallSpy con la configuración deseada.
+
  Baikal usa su propia base de datos (diferente a la de VIVAit)
{|
 
|-
 
|
 
  Ejemplo '''MD'''tel:  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 '''MD'''tel:
 
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
 
|}
 
  
<br><br>
 
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
=== Calendarios ===
+
'''1.Configuración inicial Mysql'''
  
{| class="wikitable"
 
| 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.
+
Si la instalación la estamos realizando sobre un nodo que no tenía instalado Mysql y lo hemos instalado durante este proceso de instalación en el paso 3 del punto anterior, deberemos configurar Mysql para su integración con VIVAit.
  
Se adjunta un manual para su instalación:
+
'''Acceder a Mysql y cambiar clave de root'''
 +
-------------------------
 +
mysql_secure_installation
 +
mysql -u root -p
 +
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘ LACLAVEDEVIVAITPARAMYSQL ’;
 +
-------------------------
  
 +
*'''No realizar la configuración inicial de Mysql si el nodo ya dispone de base de datos VIVAit'''
  
  
<big>'''[[medio:Servidor_Calendarios_DAViCal.pdf|Manual de instalación de servidor de calendarios para '''''<span style="color:#144F9B">VIVA</span>'''''it 3.5]]'''</big>
+
'''2.Configuración de Base de datos Baikal'''
  
  
 +
'''Crear base de datos de baikal'''
 +
-------------------------
 +
mysql> create database baikal;
 +
-------------------------
 +
'''2. Crear usuario baikal'''
 +
-------------------------
 +
create user 'baikal'@'localhost' identified by 'ivivabaikal';
 +
-------------------------
 +
'''3. Asignar privilegios a usuario baikal
 +
-------------------------
 +
grant all on baikal.* to ‘baikal'@'localhost’;
 +
-------------------------
 +
 +
 +
'''Configuración de Baikal'''
 +
 +
 +
Una vez instalado, podemos comprobar que el servidor Baikal está operativo accediendo a su URL de gestión en:
  
 +
'''http://<IPServer>/baikal/html/'''
  
  
 +
Tras acceder deberemos configurarlo adecuadamente, realizando los siguientes pasos:
  
  
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.
+
'''Crear la conexión entre VIVA it y Baikal'''
  
Si deseamos crear un calendario en la plataforma '''VIVAit''' podemos hacerlo siguiendo el  siguiente enlace: 
+
Tener correctamente configurado en la tabla WEB_CONFIGURACION el usuario y clave de la base de datos de Baikal; esto permitirá configurar Baikal (usuario, calendarios…) sin tener que acceder a su interfaz de administración.
Para comprobar que el servidor de calendarios funciona correctamente bastaría con cargar en la barra de direcciones la siguiente url: [[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Calendarios |Calendarios]]
 
  
http://${NODO.HOST}/dav/html/cal.php/calendars/${DAV.CUENTA}/${DAV.CALENDARIO}
+
Se configura:
  
donde,
+
* Host
 +
* Puerto (defecto 3306)
 +
* Driver con el que se conecta (Mysql)
 +
* Usuario de BBDD Baikal
 +
* Clave de BBDD Baikal
  
* '''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:
 
  
[[Archivo:Captura de pantalla de 2016-07-21 12_43_58.png || 1020px|center]]
+
'''A nivel de base de datos'''
  
  
Si el sistema nos pide usuario y clave querrá decir que el servidor de calendarios está operativo en esa maquina
+
[[Archivo:calendario1.png|center|700px]]
  
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á:
+
Donde:
      - 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)
 
  
<br><br>
+
* '''MySQL host''' - Nombre del host de mysql.
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
+
* '''MySQL database name''' - Nombre de la base de datos creada.
<br><br>
+
* '''MySQL username''' - Nombre de usuario de acceso.
 +
* '''MySQL password''' - Contraseña de acceso.
  
=== 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.
+
'''En ajuste de sistema'''
* 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 ''VIVA''it'''  configurando unos parámetros para un usuario llamado ''Rastreo BBDD" y ''Rastreo Syslog''. Para más información[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Pesta.C3.B1a_ACD | ver sección  Portal de administración - General - Usuarios - Pestaña ACD  ]].
 
  
{| class="wikitable" border="0"  align="top"
+
[[Archivo:calendario2.png|center|500px]]
|-
 
| align="center" style="background:Lavender; color:Black" |<big>'''Elemento'''</big>
 
|align="center" style="background:Lavender; color:Black" | <big>'''Procedimiento'''</big>
 
|-
 
!colspan="2" width="60 px" style="background:Lavender; color:Black"|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
 
|-
 
!colspan="2" width="60 px" style="background:Lavender; color:Black"|Diagnostico
 
|-
 
|Registro de logs||/var/log/MDtel/vivait-desk.log
 
Fichero del día actual. se guardan los 30
 
anteriores comprimidos en tar.g
 
|}
 
  
 +
Donde:
  
 
'''Ejemplo 30-vivait-desk.conf:'''
 
 
   
 
   
#  Default rules for rsyslog.
+
* '''Zona horaria''' – Seleccionar la región que corresponda (típicamente Europe/Madrid).
#
 
#            For more information see rsyslog.conf(5) and /etc/rsyslog.conf
 
 
   
 
   
#
+
* '''Habilitar o deshabilitar CardDav o CalDav''' – Es necesario habilitar CalDav, y deshabilitar CardDav (no se va a utilizar).
# First some standard log files.  Log by facility.
 
#
 
local4.*            -/var/log/MDtel/vivait-desk.log
 
local5.*             -/var/log/MDtel/rastreo.log
 
  
 
+
* '''Enviar invitación al correo del remitente''' – Dejar vacío.
Es muy importante comprobar que el servidor de '''syslog''' escucha por el puerto '''514''':
 
 
   
 
   
#################
+
* '''Seleccionar el tipo de autenticación WebDav''' – Hay tres opciones (Digest, Basic y Apache), la opción que hay que seleccionar es Digest.
#### MODULES ####
 
#################
 
 
   
 
   
module(load="imuxsock") # provides support for local system logging
+
* '''Contraseña del administrador''' – Esta contraseña se configura solo para entrar al entorno de Baikal.
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 ####
 
###########################
 
  
=== 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]
 
  
<br><br>
+
'''Desde Baikal + Cliente Caldav'''
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
==Funcionalidades específicas ==
 
=== Mecanismo de prioridad adaptativa ===
 
  
El mecanismo de prioridad adaptativa permite en una plataforma '''''VIVA'''''it 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
 
  
==== Introducción ====
+
La administración desde Baikal solo será necesaria en caso de no poder utilizar los frontales desarrollados para la gestión de la funcionalidad.
 +
 
 +
 
 +
Consideraciones relevantes:
  
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,
+
*Desde la administración de Baikal si podremos crear:
sino en un factor de corrección de prioridad derivado del tiempo de espera de una llamada
 
  
==== 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.
+
- usuarios (en caso de la funcionalidad en VIVAit solo usuario único de VIVAit).
* '''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,<br />
+
- calendarios (existirá uno por extensión o usuario).
prioridad 50 es mejor que prioridad 70''
 
  
==== 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:
+
*Desde la administración de Baikal no podremos gestionar eventos de calendario; para ello deberemos usar un cliente CalDav (p. ej Thunderbird).
  
- 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.'''
+
'''Ejemplo de una consulta de intz-Nimitz a Baikal en los ficheros log:'''
  
- 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)
+
Ante una consulta de Intz-Nimitz a Baikal, los resultados devueltos en el fichero de log (/var/log/intz-nimitz.log) por Baikal pueden ser:
  
:*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:
 
  
[[Archivo:Formula.png |center]]
+
1. En caso de existir una programación de desvío, Baikal devolverá los campos asunto y location de la programación, que podrán ser usados en los procesos posteriores de tratamiento de la llamada en caso de ser necesario:
  
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
 
  
[[Archivo:Esquema.png |center]]
 
  
  <span style="color:#000080">- Calculo prioridad de llamada: se calcula por llamada cada vez que un agente queda libre</span>
+
[[Archivo:calendario5.png|center|700px]]
  <span style="color:#000080">- Agente atiende llamada con mejor prioridad de llamada</span>
 
  
  
<!--
 
[[Medio:Asignación de llamadas por prioridad adaptativa.pdf|Asignación de llamadas por prioridad adaptativa]]-->
 
  
<br><br>
+
2. En caso de no existir programación de desvío, devolverá vacío:
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
=== 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.
 
  
  
====Esquema de funcionamiento====
+
[[Archivo:captura6.png|center|700px]]
[[Archivo:esquema funcionamiento marcador.jpg|center|500px]]
 
  
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.
+
=== Grabación ===
  
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.
+
La grabación en '''''VIVA'''''it Call está diseñada para ser lo mas flexible posible.
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.
 
  
====Flujo de estados====
+
====Configuración====
  
El flujo de estados es el reflejado en la figura siguiente:
+
Si deseamos grabar, debemos activar que alguno de los dispositivos/elementos que intervienen en la llamada se grabe.
  
[[Archivo:diagrama de flujo motorsal.png|center|800px]]
+
Estos dispositivos/elementos son:
  
Los diferentes estados de un contacto son:
+
* Nodo.
{| class="wikitable sortable"
+
* Usuario con Centralita.
|-
+
* Agente.
! Estado !! ID_Estado!! Descripción
+
* Grupo ACD corporativo y de Contact Center.
|-
+
* Enlace exterior.
| 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
+
* Extensión.
|-
+
* Facilidades.
|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.
+
* Grupo: grupo de salto o grupo de operadoras.
|-
+
* Sala de conferencia.
|Intento||20||El control pasa a myAcdSuperv, que a su vez genera la llamada en Asterisk. Cuando termina, se pasa a Planificable o Finalizado.
+
* VDN corporativo y de Contact Center.
|-
+
* Pre-rutas.
|Finalizado||100||Las gestiones con este contacto han terminado.
+
 
|-
+
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á.
|Abortado||110||
+
 
|-
+
Al configurar un nodo existen cuatro campos que intervienen en la grabación.
|Obsoleto||200||Se ha agotado el tiempo para contactar sin agotar todos los intentos. No se le vuelve a llamar nunca.
+
 
|-
+
''''Grabador''''
|Cancelado||300||
+
 
 +
Se configura en el portal en la sección general/nodos.
 +
 
 +
Este campo corresponde con el campo [[BD.COM_NODOS#B_ES_GRABADOR|B_ES_GRABADOR]] de la tabla [[BD.COM_NODOS|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''''
 +
 
 +
<!--Su configuración se realiza en el portal, en la sección general/nodos.
 +
 
 +
Este campo define como está configurada la infraestructura, este campo existe por compatibilidad con '''''VIVA'''''it suite y para poder configurar la grabación bajo demanda.
 +
 
 +
Este campo corresponde con el campo [[BD.COM_NODOS#E_MODO_GRABACION_INFRAESTRUCTURA|E_MODO_GRABACION_INFRAESTRUCTURA]] de la tabla [[BD.COM_NODOS|COM_NODOS]], Este campo usa los valores del enumerado BD.ENUM.TModoGrabacionInfraestructura|TModoGrabacionInfraestructura]].
 +
 
 +
La formula que se seguiría para ver si una llamada se graba en ese nodo es:
 +
{|
 +
|
 
|-
 
|-
 +
|
 +
(NODO.E_MODO_GRABACION_INFRAESTRUCTURA) AND (NODO.B_ENRU_GRABAR OR CEN_PRE_RUTA.B_ENRU_GRABAR OR "OBJETO".B_ENRU_GRABAR)
 
|}
 
|}
  
====Carga de contactos====
+
Que sería que si la infraestructura esta en NoGraba no se graba nada de lo que se rute en ese nodo y en cualquiera de los 2 otros caso (GrabaTodo o GrabaPorPeticion) se grabaría dependiendo de la configuración del Nodo, la ruta o el objeto en cuestión (preruta, grupo ACD, extension,...).-->
 +
[[:medio:Modo grabacion infraestructura grabacion por petición.pdf|Modo grabación de infraestructura-Graba por petición]]
 +
 
 +
 
 +
''''Grabar enrutamiento''''
  
===== Descripción =====
+
Se configura en el portal en la sección general/nodos.
  
A continuación se explica la configuración y funcionamiento de la utilidad encargada de asignar contactos a campañas.
+
Este campo define si van a grabar las llamadas que se enruten en este nodo.
  
===== Configuración =====
+
Campo [[BD.COM_NODOS#E_ENRU_GRABAR|E_ENRU_GRABAR]] de la tabla [[BD.COM_NODOS|COM_NODOS]] que usa los valores del enumerado [[BD.ENUM.TTipoEnruGrabar|TTipoEnruGrabar]].
  
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.
 
  
{| class="wikitable" style="text-align:center;"
+
''''RecordCentral''''
|-
+
 
! Parámetro !! Valor !! Obligatorio !! Defecto
+
Se configura en el portal en la sección general/nodos.
|-
+
 
| db|| Nombre de la base de datos|| SI || nimitz
+
Define que instancia del recordCentral es la encargada de tratar las grabaciones de este nodo.
|-
+
 
| dbHost|| Host MySQL || SI || localhost
+
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.
|-
+
 
| dbPort|| Puerto MySQL || NO || 3306
+
====Vivait Tracker====
|-
+
<!--
| dbUsuario || Usuario de acceso a la base de datos|| SI ||
+
::<span style="background:#FFAA00"> DANIEL LA ÚNICA REFERENCIA A VIVAIT TRACKER EN LA DOCUMENTACIÓN "Vivait supervisor" QUE TENGO DICE LO SIGUIENTE. </span>
|-
+
-->
| dbClave || Clave del usuario || SI ||
+
Desde '''''VIVA'''''it 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 ('''''VIVA'''''it tracker)  
|-
+
 
| rutaContactos || Ruta hasta el archivo de contactos || NO || /var/spool/MDtel/contactos
+
<!--
|-
+
::<span style="background:#FFAA00"> DANIEL FIN EXPLICACIÓN. </span>
| 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 ||
+
::<span style="background:#FFAA00"> DANIEL De la documentacion creada por ivan. </span>
|-
+
-->
| idCampanna || Número de columna que contiene el ID de la campaña || SI||
+
Esquematico actual del proyecto tracker
|-  
+
[[Archivo:Esquematico_tracker_1.jpg|center]]
| 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''')
+
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.
|-  
+
 
| tipoTarea|| Número de columna que contiene el tipo de tarea || NO || Nota: los posibles valores de la columna son : <br /> *A: Alta <br /> *M: Modificación <br /> *B: Baja<br /> Por defecto el valor es A
+
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.
|-  
+
 
| codCli || Número de columna del CSV que contiene el código de cliente || SI ||
+
3º Si la ubicación de la grabación es remota, entra en escena el proxy. Es el que realiza la petición.
|-
+
 
| nombreCon || Número de columna del CSV que contiene el nombre || NO ||
+
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.
|-
+
 
| apellido1 || Número de columna del CSV que contiene el primer apellido|| NO ||
+
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.
|-
+
<!--
| apellido2 || Número de columna del CSV que contiene el segundo apellido || NO ||
+
::<span style="background:#FFAA00"> DANIEL De la documentación creada por ivan. </span>
|-
+
-->
| empresa || Número de columna del CSV que contiene la empresa || NO ||
+
Esquematico actual del proyecto tracker
|-
+
[[Archivo:Esquematico_tracker_2_https.jpg|center]]
| 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 ||
+
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
|-
+
 
| codPostal || Número de columna del CSV que contiene el código postal || NO ||
+
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.
|-
+
 
| localidad || Número de columna del CSV que contiene la localidad || NO ||
+
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)
|-  
+
 
| provin || Número de columna del CSV que contiene la provincia || NO ||
+
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).
|-  
+
 
| email || Número de columna del CSV que contiene el email || NO ||
+
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.
|-
+
 
| valFijo_1 || Número de columna del CSV que contiene el primer número fijo del contacto || SI ||
+
[[#Grabación_(Vivait_Tracker)| Volver arriba]]
|-
+
<br><br>
| valFijo_2 || Número de columna del CSV que contiene el segundo número fijo del contacto || NO ||
+
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
|-
+
<br><br>
| valFijo_3 || Número de columna del CSV que contiene el tercer número fijo del contacto || NO ||
+
 
|-
+
=== Enrutamiento ===
| valFijo_4 || Número de columna del CSV que contiene el cuarto número fijo del contacto || NO ||
+
 
|-
+
[[Archivo:Enrutamiento.png|885px |center]]
| 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 ||
+
==== Enfoque inicial ====
|-
+
 
| valMovil_3 || Número de columna del CSV que contiene el tercer número móvil del contacto || NO ||
+
[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Enfoque_inicial Acceso]
|-
+
 
| valMovil_4 || Número de columna del CSV que contiene el CUARTO número móvil del contacto || NO ||
+
==== Funcionamiento ====
|-
+
El proceso de enrutamiento, como vimos en el esquemático, se compone de dos fases:
| edad || Número de columna del CSV que contiene la edad || NO ||
+
 
|-
+
# Preenrutameinto, que se encarga de tratar todas las llamadas
| nOpc1|| Número de columna del CSV que contiene dato numérico opcional || NO ||
+
# Enrutamiento externo, que tiene módulos dedicados al enrutamiento hacia:
|-  
+
:*Enlaces externos.
| nOpc2 || Número de columna del CSV que contiene dato numérico opcional || NO ||
+
:*Extensiones.
|-
+
:*Usuarios de telefonía corporativa.
| nOpc3 || Número de columna del CSV que contiene dato numérico opcional || NO ||
+
:*Facilidades.
|-
+
:*Salas de conferencia.
| nOpc4 || Número de columna del CSV que contiene dato numérico opcional || NO ||
+
:*Agentes de grupos ACD.
|-
+
:*Grupos ACD.
| nOpc5 || Número de columna del CSV que contiene dato numérico opcional || NO ||
+
:*Vdn.
|-
+
:*Buzones para dejar mensaje.
| nOpc6 || Número de columna del CSV que contiene dato numérico opcional || NO ||
+
:*Buzones para su gestión.
|-  
 
| 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 ||
 
|-
 
|}
 
  
===== Funcionamiento =====
+
Se asume que existen rutas directas entre todos los nodos de la red.
  
Para ejecutar la utilidad se debe teclear la siguiente orden en la línea de comandos:
+
Se asume que están directamente enrutadas todas las direcciones IP involucradas, tanto nodos, como terminales.
  
'''cmd# cargaContactos.pl /<ruta hasta el conf>/cargaContactos.pconf <archivo CSV>'''
+
Se asume que todas las facilidades están disponibles en todos los nodos, aunque es posible que la implementación sea diferente entre ellos.
  
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.'''
+
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
  
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:  
+
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
# Configuracion de cargaContactos.pconf
+
* Ancho de banda disponible en la sede del dispositivo
#
+
* Ancho de banda disponible en la sede del nodo
# Conexion de base de datos
+
* Categoría entrante
$db='nimitz';
+
* Valor del eje1 asignado a la llamadas
$dbHost = 'localhost';
+
* CALLER_ID_NUM_EXTERNO
$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';
 
  
====Comportamiento de reprogramaciones de llamadas en función del estado del agente====
 
  
Se ha preparado la siguiente maqueta:
+
Los datos de salida globales del proceso de enrutamiento (pdSale) son:
 
+
* Categoría saliente
Campaña saliente.
+
* Código de cliente (opcional)
Cola saliente progresiva.
+
* Tipo de destino:
Dos agentes logados en VIVAit Suite.
+
:* No existe
 
+
:* Ruta externa
En el formulario de la llamada se indica: llamada redirigida
+
:* Extensión
Se selecciona el "check dirigida"
+
:* Usuario de telefonía corporativa
 
+
:* Facilidad
Las posibilidades de prueba son dos: "'''Cualquier agente'''" y "'''Solo agente'''"
+
:* 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)
  
Resultados son los siguientes:
 
  
{| class="wikitable sortable"
+
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). 
| '''Estado del agente''' || '''Modo Cualquier Agente'''|| '''Modo Solo Agente'''
+
* 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). 
| '''Agente Preparado''' || Entra llamada a agente|| Entra llamada a agente
+
* 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.  
|'''Agente en Pausa'''||Entra llamada a otro agente disponible||Espera a agente y entra llamada.
+
* 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. 
|'''Agente Hablando'''||Espera a agente y entra llamada||Espera a agente y entra llamada.
+
* 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
|'''Agente en Tiempo administrativo'''||Espera a agente y entra llamada||Espera a agente y entra llamada.
+
:* Extensión: cadena marcación.  
|-
+
:* Facilidad: E_CODIGO_FACILIDAD obtenido de la tabla CEN_FACILIDADES.
|'''Agente no logado'''||Entra llamada a otro agenete disponible||Consume intento.
+
:* 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.
|'''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.
+
:* Ruta externa: contexto que gestiona la llamada saliente.
|-
 
|'''Agente con dos pestañas de chat abiertas'''||Espera a agente y entra llamada||Espera a agente y entra llamada.
 
|-
 
|}
 
  
<br><br>
+
=====Fase preenrutamiento =====
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
=== Movilidad ===
+
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.
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.
 
  
==== Ofrecer movilidad a un usuario ====
+
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.
<!--parte daniel-->
 
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 ''VIVA''it'''.  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 [[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Documentaci%C3%B3n_de_usuario_VIVAit_Call_3.0#Portal_de_usuario |portal de usuario]]). <br/>Para más información[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Pesta.C3.B1a_Centralita | 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 ''VIVA''it'''.<br/>Para más información[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Asignaci.C3.B3n_de_Permisos_de_Usuario_por_Administrador | ver sección  Portal de administración - General - Usuarios - Permisos a usuarios]]
+
Los datos de salida de la fase de preenrutamiento:
 
+
* D_CATEGORIA_SAL
 
+
* COD_CLIENTE (opcional)
'''La movilidad permite''' disponer de las extensiones telefónicas empresariales en cualquier lugar. Por
+
* TIPO_DESTINO_SAL
ejemplo, con un ordenador portátil o smartphone en una ubicación remota con conexión a Internet,
+
:* No existe.  
podríamos tener registrada nuestra extensión remotamente, y así las llamadas hacia/desde nuestra
+
:* Volver a preenrutar.  
oficina serían enrutadas por Internet hasta el equipo en cuestión sin coste alguno.
+
:* 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.
  
<!--parte daniel-->
+
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.
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 ''VIVA''it'''. Para más información [[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Extensiones | ver sección Portal de administración - VIVAit Call - Dispositivos - Extensiones]]
 
  
==== ¿Cómo funcionan las extensiones? ====
+
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.
  
Primeramente el usuario debe tener los ejes apropiados en la tabla '''COM_USUARIOS_APLICACION''' (aplicación centralita).
+
Si no se encuentra ninguna entrada adecuada, quiere decir que es una llamada prohibida y se devuelve el tipo de destino "No existe".
  
La extensión debe de tener ''un teléfono'' y por tanto ''un modelo de teléfono asociado.''
+
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.
  
Es tan simple como especificar '''la extensión, el usuario y la clave de este.'''
+
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.  
  
Para corroborar el funcionamiento de esta hay ''dos métodos'':
+
Si ID_CATEGORIA_SAL es cero, se propaga a la salida el valor de la entrada. En caso contrario, se sustituye.
  
'''* CLI asterisk:'''
+
Si C_CALLER_NAME está vacío, se mantiene el valor hubiese a la entrada. En caso contrario, se sustituye.
  
'''mdintz qry * nimitz bd extenEntraUsuarioMovil 25001 20001 1234'''
+
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.
  
Y como resultado obtenemos lo siguiente:
+
Cada vez que se utilice una preruta, se incrementará el valor de N_CONTA si el valor de N_UMBRAL es mayor que cero.
  
mdintz Variables:<br/>
+
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.
MdintzIdentif='cms1'<br />
 
MOVIL_TIPO_RESET='10'<br />
 
MOVIL_CAD_RESET='notify_yealink'<br />
 
MdintzRes='OK'
 
  
El usuario con el login numérico 20001 se ha "movido" a la extensión 25001
+
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.
  
Ahora ''nos quitamos de esa extensión mediante el siguiente comando:''
+
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.
  
'''mdintz qry * nimitz bd extenSaleUsuarioMovil 25001'''
+
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.
  
Resultado del comando:
+
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.
  
mdintz Variables:<br/>
+
===== Fase de enrutamiento en casos en que el destino no es externo =====
MdintzIdentif='cms1'<br/>
+
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).
MOVIL_TIPO_RESET='10'<br/>
 
MOVIL_CAD_RESET='notify_yealink'<br/>
 
MdintzRes='OK'
 
  
Las pruebas anteriores han sido '''con extensiones con movilidad y con usuario con/sin
+
Datos de salida de la fase de enrutamiento: iguales que los del proceso global de enrutamiento (pdSale).  
propietario.'''
 
  
Ahora las realizamos '''con extensiones sin movilidad'''
+
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.
  
'''mdintz qry * nimitz bd extenEntraUsuarioMovil 25002 20001 1234'''
+
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.
  
Obteniendo:
+
En el resto de tipos de destino, sólo se prevé una ruta que puede incluir o no un enlace internodal.
  
mdintz Variables:<br/>
 
MdintzIdentif='cms1'<br/>
 
MdintzRes='movil_error_datos'
 
  
Como era lo previsible no nos deja "movernos" a esa extensión ya que no tiene movilidad.
 
<!--
 
'''<u>Si un usuario ya se ha movido a una extensión no se puede mover a otra si no es deslogandose de esta antes.</u>'''
 
  
Esta línea se comenta porque se ha preparado el sistema para que los ususarios se puedan logar en una nueva extensión y el sistema lo deslogue de la primera a la que se movió. La variable que controla este funcionamiento es MD_AUTODES, con dos posibles valores:
+
===== Fase de enrutamiento en el caso de destino externo =====
0, para que el usuario deba deslogarse de una extensión para logarse en otra.
+
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).  
1, para que sea el sistema el que deslogue automátiamente al usuario cuando cambia de una extensión de movilidad a otra.
+
Datos de salida de la fase de enrutamiento: iguales que los del proceso global de enrutamiento (pdSale).  
-->
 
  
'''<u>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.</u>'''
+
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.  
  
'''mdintz qry * nimitz bd extenEntraUsuarioMovil 21000 20001 1234'''
+
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.
  
Con salida:
+
Una vez que un registro es válido, se descartan todos los registros cuyo C_DESTINO_ENT_PREF es diferente del primero seleccionado.
  
mdintz Variables:<br/>
+
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:  
MdintzIdentif='cms1'<br/>
 
MOVIL_EXTEN='25001'<br/>
 
MDintzRes='movil_ya_login'
 
  
'''* Dialplan'''
+
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.
  
Para llamar a la función de movilidad hay que marcar el '''9992.'''
+
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.  
  
Nota.- Para comprobar que se realiza todo correctamente habría que mirar las trazas de Asterisk
+
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.
 
<br><br>
 
<br><br>
 
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
<br><br>
  
 +
=== 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
  
 +
[[Archivo:ancho de banda.png|700px]]
  
 +
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:
  
 +
{| class="wikitable"
 +
|-
 +
! 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
 +
|-
 +
|}
  
=== Desvío por calendario ===
+
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
  
Se ha desarrollado una nueva funcionalidad para VIVAit Call que permite
+
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
establecer desvíos de extensiones y usuarios en base a una programación
 
horaria.
 
Una vez puesta en marcha esta funcionalidad , el orden de desvíos de usuarios o
 
extensión en VIVAit Call será:
 
  
 +
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
  
* Primero se atiende si el usuario o extensión tiene desvío incondicional a
 
mensajería.
 
  
* En segundo lugar se comprueba si dispone de desvío programado, y se
+
=== MDflow ===
encuentra en una franja horaria con desvío activo.
 
  
* Posteriormente se atiende si el usuario o extensión tiene desvío
+
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).
incondicional.
 
  
* Posteriormente se tratarán resto de desvíos condicionales (por no
+
Los términos que usaremos para la explicación de la funcionalidad y que son relevantes
conectado, por ocupado o por no contesta).
+
para comprender, implantar, mantener e interpretar la misma son:
  
  
  
 +
* '''Nodo VIVAit''': Un nodo VIVAit es cualquier elemento dado de alta en el sistema
 +
como tal, que contiene un proceso de conmutación de voz Asterisk incorporado. Un
 +
cluster activo/pasivo son dos ordenadores, pero un solo nodo. Típicamente existen
 +
nodos de tres tipos (si bien los dos primeros pueden combinarse en uno solo):
  
 +
- Nodo de registro para telefonía corporativa
  
[[Archivo:Captura de pantalla de 2022-11-16 07-58-38.png|center|900px]]
+
- Nodo Gateway
  
 +
- Nodo de registro ACD
  
 +
* '''TIC''': Unidad básica de medida de tiempo de md flow; por defecto el valor es
 +
500ms; nótese que los valores devueltos por el sistema siempre estarán medidos
 +
en segundos, aunque internamente use el TIC como base de tiempos.
  
 +
* '''Flujo:''' Cada uno de los nueve elementos de medida y control que podrán
 +
establecerse por nodo VIVAit.
  
Los componentes principales de la arquitectura son:
+
* '''Medición:''' Capacidad de md flow para determinar el número de llamadas por
 +
segundo que se están estableciendo en un determinado flujo. Nótese que no se
 +
hace referencia a duración de las mismas o medición de llamadas previamente
 +
establecidas
  
 +
* '''Control:''' Capacidad de md flow para limitar el número de llamadas por segundo
 +
que se están estableciendo en un determinado flujo
  
*'''Servidor de calendarios''' : Para definir las programaciones de desvíos se ha utilizado una solución de servidor estándar de calendarios; se ha optado por el servidor Baikal, por disponer de todas las funcionalidades necesarias y disponer de BBDD Mysql (especialmente adecuado en entornos VIVAit)
+
* '''Tasa de llamadas por segundo:''' Cantidad de llamadas que se están
 +
estableciendo por segundo en un nodo VIVAit. Nótese que no se hace referencia a
 +
duración de las mismas o llamadas previamente establecidas
  
 +
* '''DNIS: Dialed Number Identification Servic'''e; número destino de una llamada
  
*'''Intz-Nimitz''' : El proceso de enrutamiento de VIVAit consultará en cada llamada el estado de desvío programado al servidor de calendarios; esta consulta solo se realizará en caso de que dicha extensión o usuario tenga activo dicho desvío y un calendario asignado; por defecto los desvíos programados estarán desactivados en todas las extensiones y usuarios para proteger las prestaciones del sistema.
+
* '''Congestión''': Estado del nodo VIVAit cuando se sobrepasa una determinada tasa
 +
de llamadas por segundo; el mecanismo md flow entrará en funcionamiento cuando
 +
el sistema entre en estado de congestión.
  
 +
* '''Llamada desbordada:''' Llamada que en el tratamiento de la congestión se
 +
considera apta para ser descartada (si bien el tratamiento se definirá en dialplan, el
 +
funcionamiento lógico previsto es descartarla).
  
*'''Frontales''' : Para la administración por parte de los usuarios de los desvíos programados se ofrecen los siguientes frontales:
+
* '''Llamada a agujero:''' Llamada que en el tratamiento de la congestión se considera
 +
ha de progresar por no quedar colas de DNIS disponibles (se explicará y justificará
 +
el funcionamiento más adelante).
  
- '''Portal de usuario:''' Cada usuario podrá definir desvíos programados en el mismo entorno en el que define el resto de desvíos.
+
* '''Mdflow en paso:''' md flow puede ser utilizado para:
  
- '''Portal de administración de VIVAit''': Desde dicho portal se podrán gestionar por un administrador los desvíos programados de      usuarios y extensiones de todo el sistema.
+
- Solo medir . En este caso md flow se encontrará en paso.
  
- '''Portal de administración de Baikal''': Desde dicho portal se podrán gestionar el servidor de calendarios.
+
- Medir y realizar control de flujo.
  
- '''Entorno estándar de gestión de calendarios:''' desde un entorno estándar de gestión de calendarios (p. ej Thunderbird), y con protocolo CalDav, se podrán realizar gestiones de todos los calendarios de un entorno VIVAit. Este entorno sería una alternativa al portal de administración (no de usuario), debido a que:
+
* '''DNIS masivo:''' Un DNIS con alta tasa de llamadas por segundo.
  
1.  Se deberá configurar dicho entorno para acceder con el usuario de administración de calendarios.
+
* '''DNIS ocasional:''' Un DNIS con baja tasa de llamadas por segundo.
 
2.  Se podrán ver todos los calendarios del sistema (de todas las extensiones y usuarios).
 
  
  
Por defecto no será necesario montar un nuevo nodo de VIVAit, para el despliegue de Baikal se montará donde esté ubicado el portal de administración de VIVAit.
 
  
  '''Baikal se ubicará por defecto en el mismo nodo en el que se encuentre el portal de administración de VIVAit.'''
 
  
  
  
 +
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''').
  
===== Baikal =====
+
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).
  
Como se ha indicado en el apartado de arquitectura, VIVAit Call utilizará un servidor de calendarios Baikal para almacenar la información referente a desvíos programados de usuarios y extensiones.
+
Cada una de las cajas, o flujos, mide y controla la tasa de llamadas en cada TIC → Se mostrará en llamadas/segundo.
  
Baikal es un servidor CalDAV ligero. Los datos se almacenan en una base de datos Mysql (diferente a la base de datos de VIVAit).
+
El '''FLUJO'''mide 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.
  
En el caso de su uso en VIVAit Call:
+
El '''FLUJO'''permite controlar y medir, y está pensado para enviar información a Zbbix.
  
* Existirá un único usuario administrador de Baikal que podrá crear los calendarios (desde los frontales anteriormente descritos).
+
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).
* Los calendarios y los desvíos podrán ir asociados tanto a usuarios como a extensiones.
+
*DNIS que permite controlar para que destino queremos hacer el control de flujo.
+
 
* Cada extensión o usuario de VIVAit tiene un calendario asignado que se crea automáticamente en Baikal al programar el primer evento desde el portal de administración de VIVAit o desde el portal de usuario.
+
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).
  
'''Si se instala Vivait 3.6 desde repositorio ,  habría que realizar los siguientes pasos en Mysql:'''
+
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).
  
'''Configuración de Mysql'''
+
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.
  
La instalación de Baikal implica disponer de un servidor Mysql operativo; será necesario crear una base de datos de nombre “baikal” con un usuario “baikal” que será el que utilizarán los frontales para la interacción con el servidor de calendarios:
+
El mecanismo de control de flujo entra en funcionamiento cuando el sistema entra en '''congestión'''.
  
Baikal usa su propia base de datos (diferente a la de VIVAit)
+
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...
  
'''1.Configuración inicial Mysql'''
 
  
 +
Mdflow se invoca dentro del dialplan del sistema. Por
 +
ejemplo, será la primera línea del dialplan correspondiente a un enlace externo; a la salida
 +
de md flow, este proporcionará una etiqueta, que podrá ser “Ok”, “desborda”, “agujero” o
 +
“error”
 +
El funcionamiento general de md flow es el reflejado en el siguiente diagrama de flujo.
  
Si la instalación la estamos realizando sobre un nodo que no tenía instalado Mysql y lo hemos instalado durante este proceso de instalación en el paso 3 del punto anterior, deberemos configurar Mysql para su integración con VIVAit.
 
  
'''Acceder a Mysql y cambiar clave de root'''
 
-------------------------
 
mysql_secure_installation
 
mysql -u root -p
 
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘ LACLAVEDEVIVAITPARAMYSQL ’;
 
-------------------------
 
  
*'''No realizar la configuración inicial de Mysql si el nodo ya dispone de base de datos VIVAit'''
+
[[Archivo:mdflow.png|885px |center]]
  
 +
Como se puede apreciar en el diagrama de flujo:
  
'''2.Configuración de Base de datos Baikal'''
+
*mdflow siempre cuenta las llamadas para establecer la tasa de llamadas por segundo.
  
 +
* Solo hace control de flujo si no está en paso.
  
'''Crear base de datos de baikal'''
+
* Solo hace control de flujo si hay congestión (tasa de llamadas por segundo superior a la máxima configurada).
-------------------------
 
mysql> create database baikal;
 
-------------------------
 
'''2. Crear usuario baikal'''
 
-------------------------
 
create user 'baikal'@'localhost' identified by 'ivivabaikal';
 
-------------------------
 
'''3. Asignar privilegios a usuario baikal
 
-------------------------
 
grant all on baikal.* to ‘baikal'@'localhost’;
 
-------------------------
 
  
 +
* Estando en congestión:
  
'''Configuración de Baikal'''
 
  
 +
'''- Si entra una llamada nueva'''
  
Una vez instalado, podemos comprobar que el servidor Baikal está operativo accediendo a su URL de gestión en:
+
Y existe otra encolada para el DNIS se encola en dicha cola.
  
'''http://<IPServer>/baikal/html/'''
+
Y no existe cola para el DNIS se crea la cola y encola SI quedan colas disponibles.
  
 +
Si no quedan colas disponibles la llamada sale con etiqueta “agujero”.
  
Tras acceder deberemos configurarlo adecuadamente, realizando los siguientes pasos:
 
  
 +
'''- Al respecto de colas'''
  
'''Crear la conexión entre VIVA it y Baikal'''
+
Una cola se crea cuando hay una llamada con un DNIS no encolado y si existen aún colas disponibles.
  
Tener correctamente configurado en la tabla WEB_CONFIGURACION el usuario y clave de la base de datos de Baikal; esto permitirá configurar Baikal (usuario, calendarios…) sin tener que acceder a su interfaz de administración.
+
Una cola se libera de un DNIS cuando no quedan llamadas en cola para ese DNIS.
  
Se configura:
+
Las colas no tienen una profundidad máxima.
  
* Host
+
Las colas tienen un tiempo de permanencia.
* Puerto (defecto 3306)
 
* Driver con el que se conecta (Mysql)
 
* Usuario de BBDD Baikal
 
* Clave de BBDD Baikal
 
  
 +
Las llamadas se van atendiendo equitativamente en cada cola, todas tienen el mismo peso, saliendo con etiqueta “Ok”
  
  
'''A nivel de base de datos'''
+
'''- Al respecto de llamadas'''
  
 +
Una llamada se saca de la cola con etiqueta “desborda” si pasa el máximo tiempo configurado en cola
  
[[Archivo:calendario1.png|center|700px]]
 
  
 +
'''- Si se produce un error en el sistema las llamadas podrán salir con etiqueta “error”.
  
Donde:
 
  
* '''MySQL host''' - Nombre del host de mysql.
 
* '''MySQL database name''' - Nombre de la base de datos creada.
 
* '''MySQL username''' - Nombre de usuario de acceso.
 
* '''MySQL password''' - Contraseña de acceso.
 
  
  
  
'''En ajuste de sistema'''
 
  
  
[[Archivo:calendario2.png|center|500px]]
+
Al respecto de las llamadas que salen con etiqueta “agujero”, cabría pensar que si no
 +
quedan colas disponibles las llamadas con etiqueta agujero serian llamadas candidatas a
 +
ser descartadas a DNIS ocasionales y se les dará prioridad. Téngase en cuenta que en
 +
circunstancias de congestión, las colas estarán típicamente ocupadas por DNIS masivos, y
 +
no por DNIS ocasionales, de manera que es altamente probable que cualquier DNIS
 +
masivo ya tenga cola asignada y que al agujero vayan DNIS ocasionales; todo esto pasa
 +
por realizar un buen dimensionamiento del máximo de colas (que debiera ser muy
 +
parecido al número de DNIS masivos)
  
Donde:
 
  
 
* '''Zona horaria''' – Seleccionar la región que corresponda (típicamente Europe/Madrid).
 
 
* '''Habilitar o deshabilitar CardDav o CalDav''' – Es necesario habilitar CalDav, y deshabilitar CardDav (no se va a utilizar).
 
  
* '''Enviar invitación al correo del remitente''' – Dejar vacío.
 
 
* '''Seleccionar el tipo de autenticación WebDav''' – Hay tres opciones (Digest, Basic y Apache), la opción que hay que seleccionar es Digest.
 
 
* '''Contraseña del administrador''' – Esta contraseña se configura solo para entrar al entorno de Baikal.
 
  
  
  
 +
[[Archivo:mdflow2.png|655px |center]]
  
'''Desde Baikal + Cliente Caldav'''
 
  
  
  
La administración desde Baikal solo será necesaria en caso de no poder utilizar los frontales desarrollados para la gestión de la funcionalidad.
 
  
 +
==== 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/
  
Consideraciones relevantes:
+
Tras poner ambos ficheros en sus respectivos lugares, nos iremos a /usr/src/MDtel/asterisk/ y compilaremos el asterisk make && make install
  
*Desde la administración de Baikal si podremos crear:
+
Para que el asterisk cargue el nuevo módulo entrarems en la consola de asterisk (asterisk -r) y ejecutaremos '''module load app_mdflow.so'''
  
  
- usuarios (en caso de la funcionalidad en VIVAit solo usuario único de VIVAit).
 
  
- calendarios (existirá uno por extensión o usuario).
+
==== Parámetros de configuración ====
  
  
*Desde la administración de Baikal no podremos gestionar eventos de calendario; para ello deberemos usar un cliente CalDav (p. ej Thunderbird).
 
  
 +
*'''Parámetros generales'''
  
'''Ejemplo de una consulta de intz-Nimitz a Baikal en los ficheros log:'''
 
  
 +
'''- tick_ms:''' duración de un TIC.
  
Ante una consulta de Intz-Nimitz a Baikal, los resultados devueltos en el fichero de log (/var/log/intz-nimitz.log) por Baikal pueden ser:
+
'''- estad_interv_seg:''' define intervalo de medida, si bien las informaciones siempre las proporcionará en tasa de llamadas/s.
  
  
1. En caso de existir una programación de desvío, Baikal devolverá los campos asunto y location de la programación, que podrán ser usados en los procesos posteriores de tratamiento de la llamada en caso de ser necesario:
+
*'''Parámetros por flujo'''
  
  
 +
'''-Flujo:''' nombre del flujo (solo para la salida de estadísticas); no conecta con nada en dialplan o similar.
  
[[Archivo:calendario5.png|center|700px]]
+
'''-En_paso:''' (0 o 1); si está a 1 solo mide, siempre devuelve OK; si “en_paso” es 0 hay control de flujo.
  
 +
'''-Tasa_sal_seg:''' tasa máxima de salida de llamadas/s configuradas para ese flujo; saldrán ese valor de llamadas por segundo con etiqueta “Ok”.
  
 +
'''-Dnis_max:''' número de colas máximo en ese flujo. Si se configura 1 cola, se comporta como cola única, no se hace caso al DNIS.
  
2. En caso de no existir programación de desvío, devolverá vacío:
+
'''-Dnis_umbral_masivo:''' no vale para control, pero sí para medida; nos define que un DNIS es masivo si hay tantas o más llamadas encoladas que las indicadas en este parámetro; si está solo en paso no se mide porque no hay colas.'''
  
 +
'''-to_desborda_seg:''' Tiempo máximo en cola de una llamada; pasado el tiempo sale
 +
con "desborda"
  
  
[[Archivo:captura6.png|center|700px]]
 
  
=== Grabación ===
+
==== Fichero de configuración ====
  
La grabación en '''''VIVA'''''it Call está diseñada para ser lo mas flexible posible.
 
  
====Configuración====
+
El fichero de configuración se ubica en '''/etc/Asterisk/MDflow.conf''' ; su contenido por defecto es el
 +
siguiente:
  
Si deseamos grabar, debemos activar que alguno de los dispositivos/elementos que intervienen en la llamada se grabe.
 
  
Estos dispositivos/elementos son:
 
  
* Nodo.
+
[general]
* Usuario con Centralita.
+
; Periodo de tiempo para medidas de tasa de llamadas
* Agente.
+
tick_ms=500
* Grupo ACD corporativo y de Contact Center.
+
; Periodo de tiempo para calculos estadísticos
* Enlace exterior.
+
estad_interv_seg=10
* Extensión.
+
; Máximo 9 flujos ([flujo_1] a [flujo_9])
* Facilidades.
+
; Tiene que empezar en [flujo_1] y ser correlativos
* Grupo: grupo de salto o grupo de operadoras.
+
[flujo_1]
* Sala de conferencia.
+
; Nombre asignado al flujo. Se usa en las salidas de los comandos
* VDN corporativo y de Contact Center.
+
flujo=Cen_Inicio_SIP
* Pre-rutas.
+
; "En paso"
 +
; 1: No se controla el flujo (siempre etiqueta OK), sólo se mide
 +
; 0: Se controla la tasa de llamadas y se hacen medidas
 +
en_paso=0
 +
; Tasa máxima de llamadas (expresada en llamadas/seg) que etiquetadas OK
 +
; Para un tick de 500 ms, este valor debe ser par
 +
tasa_sal_seg=4
 +
; Número máximo de dnis a encolar. Resto se etiquetan como AGUJERO
 +
dnis_max=2
 +
; Umbral para el número de llamadas encoladas en un dnis, que hace que
 +
; éste sea calificado como "masivo"
 +
; El valor mínimo es 2
 +
dnis_umbral_masivo=8
 +
; Límite de tiempo en segundos, transcurrido el cuál se etiqueta DESBORDA
 +
to_desborda_seg=5
 +
[flujo_2]
 +
flujo=Cen_Inicio_TrunkSip
 +
en_paso=1
 +
tasa_sal_seg=20
 +
dnis_max=100
 +
dnis_umbral_masivo=10
 +
to_desborda_seg=5
 +
[flujo_3]
 +
flujo=Cen_TrunkInternos
 +
en_paso=1
 +
tasa_sal_seg=20
 +
dnis_max=100
 +
dnis_umbral_masivo=10
 +
to_desborda_seg=5
  
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á.
+
==== Ejemplo claro de invocación de mdflow desde dialplan y posterior tratamiento en función de las etiquetas de salida ====
  
Al configurar un nodo existen cuatro campos que intervienen en la grabación.
+
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.
  
''''Grabador''''
+
;--------------------------------------------------------------------------------
 +
[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)}*)
 +
  
Se configura en el portal en la sección general/nodos.
+
'''Esto desaparecera cuando el dialplan sea unificado'''
 +
'''ahora es necesartio para que pase el ucid del acd'''
  
Este campo corresponde con el campo [[BD.COM_NODOS#B_ES_GRABADOR|B_ES_GRABADOR]] de la tabla [[BD.COM_NODOS|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.
+
 
+
[Cen_Inicio_SIP]
Es un campo booleano los posibles valores en el portal son si/no y en la base de datos 1/0.
+
exten => _[*#%0-9].,1,NoOp(MDINIEXTENSIP**EXTEN=${EXTEN}**CID=${CALLERID(NUM)}*)
 
+
 
+
  same =>            n,Set(ENR_PEER_ORIGEN=)
 
+
  same =>            n,Set(__ENR_TIPO_ORIGEN=10)
''''Modo grabación infraestructura''''
+
  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)'''
  
<!--Su configuración se realiza en el portal, en la sección general/nodos.
 
  
Este campo define como está configurada la infraestructura, este campo existe por compatibilidad con '''''VIVA'''''it suite y para poder configurar la grabación bajo demanda.
 
  
Este campo corresponde con el campo [[BD.COM_NODOS#E_MODO_GRABACION_INFRAESTRUCTURA|E_MODO_GRABACION_INFRAESTRUCTURA]] de la tabla [[BD.COM_NODOS|COM_NODOS]], Este campo usa los valores del enumerado BD.ENUM.TModoGrabacionInfraestructura|TModoGrabacionInfraestructura]].
+
==== Comandos básicos de diagnóstico ====
  
La formula que se seguiría para ver si una llamada se graba en ese nodo es:
+
  Comandos básicos (dentro de la consola asterisk)
{|
 
|
 
|-
 
|
 
(NODO.E_MODO_GRABACION_INFRAESTRUCTURA) AND (NODO.B_ENRU_GRABAR OR CEN_PRE_RUTA.B_ENRU_GRABAR OR "OBJETO".B_ENRU_GRABAR)
 
|}
 
  
Que sería que si la infraestructura esta en NoGraba no se graba nada de lo que se rute en ese nodo y en cualquiera de los 2 otros caso (GrabaTodo o GrabaPorPeticion) se grabaría dependiendo de la configuración del Nodo, la ruta o el objeto en cuestión (preruta, grupo ACD, extension,...).-->
+
*'''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...
[[:medio:Modo grabacion infraestructura grabacion por petición.pdf|Modo grabación de infraestructura-Graba por petición]]
 
  
 +
Preproduccion-Corp0*CLI>  mdflow show stats
 +
 +
mdflow Estadística global:
 +
  activo=1
 +
  supervEjecutando=1
 +
  tickMs=500
 +
  estadIntervSeg=10
 +
  flowNum=3
  
''''Grabar enrutamiento''''
+
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
  
Se configura en el portal en la sección general/nodos.
+
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
  
Este campo define si van a grabar las llamadas que se enruten en este nodo.
+
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
  
Campo [[BD.COM_NODOS#E_ENRU_GRABAR|E_ENRU_GRABAR]] de la tabla [[BD.COM_NODOS|COM_NODOS]] que usa los valores del enumerado [[BD.ENUM.TTipoEnruGrabar|TTipoEnruGrabar]].
+
*'''mdflow show dnis''': permite saber cuales son los DNIS masivos de la centralita
  
 +
Preproduccion-Corp0*CLI> mdflow show dnis
  
''''RecordCentral''''
+
mdflow Estado global:
 +
  activo=1
 +
  supervEjecutando=1
 +
  tickMs=500
 +
  estadIntervSeg=10
 +
  flowNum=3
  
Se configura en el portal en la sección general/nodos.
+
mdflow flujo=[flujo_1]/Cen_Inicio_TrunkSip:
 +
  flowInd=1 enPaso=0
 +
  flowInd=1 dnisColaNum=1 no se controlan dnis
  
Define que instancia del recordCentral es la encargada de tratar las grabaciones de este nodo.
+
mdflow flujo=[flujo_2]/Cen_Inicio_SIP:
 +
  flowInd=2 enPaso=1
 +
  flowInd=2 dnisColaNum=2
 +
  flowInd=2 dnisUltMasivoMax=0
  
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.
+
mdflow flujo=[flujo_3]/Cen_TrunkInternos:
 +
  flowInd=3 enPaso=0
 +
  flowInd=3 dnisColaNum=1 no se controlan dnis
  
====Vivait Tracker====
+
*'''mdflow show config''' Permite ver la configuracion de los distintos flujos
<!--
 
::<span style="background:#FFAA00"> DANIEL LA ÚNICA REFERENCIA A VIVAIT TRACKER EN LA DOCUMENTACIÓN "Vivait supervisor" QUE TENGO DICE LO SIGUIENTE. </span>
 
-->
 
Desde '''''VIVA'''''it 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 ('''''VIVA'''''it tracker)
 
  
<!--
+
Preproduccion-Corp0*CLI> mdflow show config
::<span style="background:#FFAA00"> DANIEL FIN EXPLICACIÓN. </span>
 
  
 +
mdflow Configuración global:
 +
  activo=1
 +
  supervEjecutando=1
 +
  tickMs=500
 +
  estadIntervSeg=10
 +
  estadFases=20
 +
  flowNum=3
  
::<span style="background:#FFAA00"> DANIEL De la documentacion creada por ivan. </span>
+
mdflow flujo=[flujo_1]/Cen_Inicio_TrunkSip:
-->
+
  flowInd=1 enPaso=0
Esquematico actual del proyecto tracker
+
  flowInd=1 llamSalTick=1
[[Archivo:Esquematico_tracker_1.jpg|center]]
+
  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
  
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.
+
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
  
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.
+
*'''mdflow reload:''' Recarga mdflow leyendo de nuevo el fichero de configuración
 +
MDlow.conf; se puede realizar con la plataforma en funcionamiento normal pero no
 +
se recomienda realizarlo en momentos de alto tráfico; los cambios de configuración
 +
se aplican tras un comando “mdflow reload”
  
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.
+
Preproduccion-Corp0*CLI> mdflow reload
  
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.
 
<!--
 
::<span style="background:#FFAA00"> DANIEL De la documentación creada por ivan. </span>
 
-->
 
Esquematico actual del proyecto tracker
 
[[Archivo:Esquematico_tracker_2_https.jpg|center]]
 
  
 +
*'''mdflow debug:''' Muestra estadísticas por pantalla a intervalos regulares; no se
 +
recomienda su uso sistemático.
  
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
+
Preproduccion-Corp0*CLI> mdflow debug
  
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.
+
==== Comandos básicos de diagnóstico ====
  
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)
+
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.
  
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.
 
  
[[#Grabación_(Vivait_Tracker)| Volver arriba]]
+
==== Asignación de flujos ====
<br><br>
 
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
=== Enrutamiento ===
 
  
[[Archivo:Enrutamiento.png|885px |center]]
+
Por defecto, en la instalación irán definidos los siguientes flujos:
  
 +
*'''Flujo 1 (trunksip):''' Flujo que analiza las llamadas que vienen de los trunksip.
 +
Típicamente son las llamadas que provienen de los operadores en los Gatewais.
 +
Está configurado en el contexto Cen_InicioLlamada_TrunkSip.
  
==== Enfoque inicial ====
+
*'''Flujo 2 (Extensiones):''' Flujo para las llamadas originadas por las extensiones SIP
 +
registradas en el nodo. Está configurado en el contexto Cen_InicioLlamada_SIP.
  
[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Enfoque_inicial Acceso]
+
*'''Flujo 3 (trunkInternos):''' Flujo para las llamadas que provienen de otros nodos.
 +
Está configurado en el contexto Cen_TrunkInternos
  
==== 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.
+
Estos son flujos genéricos que irán definidos en la instalación, se podrán generar mas si la
 +
instalación lo requiere, por ejemplo, si la instalación tiene primarios se podrá definir un
 +
flujo para las llamadas que vienen por el contexto Cen_InicioLlamada_Dahdi.
  
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.
+
El significado del flujo 3 es diferente según el tipo de nodo en que se está ejecutando. Por
 +
ejemplo, en una instalación de 2 nodos, un nodo Gateway y un nodo de procesamiento, el
 +
flujo 3 en el nodo gateways estará midiendo el tráfico que manda el nodo de
 +
procesamiento hacia el exterior del sistema, típicamente las llamadas salientes al sistema,
 +
en cambio, el mismo flujo en el nodo de procesamiento, estará indicando las llamadas que
 +
vienen del Gateway, típicamente las llamadas entrantes del exterior.
 +
 
 +
 
 +
Esto es mucho menos evidente en instalaciones con varios nodos, con trunk hacia
 +
proveedores externos en los nodos de procesamiento, etc.
  
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:
+
==== Configuración de cola única ====
* 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:
+
La configuración de colas es útil cuando el número de DNIS es finito y queremos priorizar
* Categoría saliente
+
los números llamados menos frecuentemente sobre los masivos.
* 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)
 
  
 +
Cuando el número de DNIS es muy grande la configuración mediante colas no ofrece un
 +
funcionamiento óptimo, las colas serán ocupadas cada una con un DNIS diferente y todos
 +
los DNIS que no tengan cola libre saldrán por la salida “agujero”.
  
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]):
+
  Para tener un control del flujo en estas situaciones se ha creado el concepto de cola única,
* CONTADOR_ABDE_nn (contador para control de ancho de banda en sede de dispositivo de entrada).  
+
  su comportamiento es que todas las llamadas van a la misma cola y no hay llamadas que
* CONTADOR_ABNE_nn (contador para control de ancho de banda en sede de nodo de entrada). 
+
obtengan la salida “agujero” y por tanto todas tienen la misma prioridad.
* 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.
 
  
=====Fase preenrutamiento =====
+
Este comportamiento se obtiene poniendo el parámetro de configuración del flujo
 +
dnis_max con el valor 1 (dnis_max=1).
  
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.
+
Un ejemplo típico de utilización de este tipo de configuración sería en el flujo 3 de los
 +
nodos gateways. Este flujo tendrá las llamadas que el resto de los nodos envían al exterior
 +
y los DNIS no coincidirían en su mayoría.
  
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.
+
==== MDflow y las trazas ====
  
Los datos de salida de la fase de preenrutamiento:
+
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))
* 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:
+
<br><br>
* ID_CATEGORIA_ENT igual a la del dispositivo de entrada. 
+
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0 Volver al índice]
* CALLER_NUM de entrada 
+
<br><br>
:* 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".
+
=== Estadísticas en '''''<span style="color:#144F9B">VIVA</span>'''''it Call ===
  
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.
+
[[:medio:Estadisticas_VIVAIT_ Call.pdf|Como configurar estadísticas para '''''VIVA'''''it Call ]]
  
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.  
+
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Funcionalidades específicas en VIVAit ]][[#Funcionalidades específicas en VIVAit | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
 +
 
 +
== Diagnósticos y operaciones básicas en '''''VIVA'''it'' ==
 +
<br><br>
  
Si C_CALLER_NAME está vacío, se mantiene el valor hubiese a la entrada. En caso contrario, se sustituye.
+
=== Arranque y apagado de la plataforma ===
 +
<br><br>
  
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:
+
En general el arranque y apagado de cada nodo de una plataforma '''''VIVA'''''it 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
* "=" 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.
+
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
  
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.
+
Al respecto del orden de apagado de nodos, es el siguiente:
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.
+
# 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
  
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:  
+
<br><br>
* "=" o cadena vacía, el nuevo destino es igual al de entrada al proceso. 
+
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0 Volver al índice]
* "+" el nuevo destino es igual al de entrada al proceso, con los caracteres a continuación de "+" como prefijo. 
+
<br><br>
* "-" 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 propiedadEl 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.
 
  
===== 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).
+
=== Cluster '''''VIVA'''it'' ===
 +
<br><br>
  
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.  
+
==== Introducción a cluster  ====
 +
<br><br>
 +
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.
 +
<br><br>
 +
De un clúster se espera que presente combinaciones de los siguientes servicios:
 +
<br><br>
 +
: # Alto rendimiento <br>
 +
: # Alta disponibilidad<br>
 +
: # Balanceo de carga <br>
 +
: # Escalabilidad
 +
<br><br>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Cluster VIVAit]][[#Cluster VIVAit| Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
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.
+
==== Funcionamiento en cluster ====
 +
<br><br>
  
En el resto de tipos de destino, sólo se prevé una ruta que puede incluir o no un enlace internodal.
 
  
 +
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:
 +
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.
  
===== Fase de enrutamiento en el caso de destino externo =====
+
Por lo que las máquinas balancean en los casos siguientes:
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:
+
* 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..
* 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.
+
Y no balancea en los siguientes:
  
Una vez que un registro es válido, se descartan todos los registros cuyo C_DESTINO_ENT_PREF es diferente del primero seleccionado.
+
* 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)
  
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.
+
===== Píldoras =====
  
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:
+
====== Prevenir que un nodo vuelva a tomar el control tras volver a estar operativo ======
* "=" 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.
+
Cuando queremos evitar que un recurso vuelva al nodo en el que estaba originalmente tras la recuperación del nodo, ejecutaremos la siguiente orden.
<br><br>
 
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
=== Control de ancho de banda ===
+
pcs resource defaults resource-stickiness=100
  
Para el control de ancho de banda, primero hemos de tener en consideración que una llamada puede tener asociadas hasta cuatro sedes
+
====== Borrar un recurso ======
:* 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:
+
pcs resource delete DRBDFs
:* De manera directa entre terminal A y terminal B
 
:* De manera indirecta, a través de los nodos A y B
 
  
[[Archivo:ancho de banda.png|700px]]
+
====== Sincronización del drbd ======
  
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:
+
Para sincronizar el drdb tras un fallo tenemos que determinar cuál es el nodo que tiene los datos buenos y cuál es el que vamos a sobrescribir sus datos
  
{| class="wikitable"
+
En el nodo que vamos a sobrescribir los datos ejecutaremos los siguientes comandos.
|-
 
! 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:
+
drbdadm secondary all
:* '''wwww''' --> id de sede
+
drbdadm disconnect all
:* '''xxxx''' --> ancho de banda total de la sede
+
drbdadm invalidate all
:* '''y''' --> número de llamadas a sumar si conversación directa
+
drbdadm connect all
:* '''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
+
Y en el nodo que tiene los datos correctos.
  
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
+
drbdadm connect all
  
  
=== MDflow ===
+
====== Mover un recurso de nodo ======
  
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).
+
Para mover un recurso de nodo utilizaremos el siguiente comando.
  
Los términos que usaremos para la explicación de la funcionalidad y que son relevantes
+
pcs resource move IP-ASTER
para comprender, implantar, mantener e interpretar la misma son:
+
pcs resource clear IP-ASTER
  
 +
Esto crea restricciones locales para evitar que el recurso vuelva a este nodo (Puede tener prioridad de ejecución en este nodo y haría que volviera a este nodo automáticamente al estar online).
  
 +
La restricción que crea banea el nodo para este recurso, si queremos quitar esta restricción creada.
  
* '''Nodo VIVAit''': Un nodo VIVAit es cualquier elemento dado de alta en el sistema
+
pcs resource clear DRBDfsASTER
como tal, que contiene un proceso de conmutación de voz Asterisk incorporado. Un
 
cluster activo/pasivo son dos ordenadores, pero un solo nodo. Típicamente existen
 
nodos de tres tipos (si bien los dos primeros pueden combinarse en uno solo):
 
  
- Nodo de registro para telefonía corporativa
+
<span style="color:#f32100">Mirar si existe alguna manera de mover un recurso sin que se creen estas restricciones locales</span>
  
- Nodo Gateway
 
  
- Nodo de registro ACD
+
====== Habilitar/deshabilitar recursos ======
  
* '''TIC''': Unidad básica de medida de tiempo de md flow; por defecto el valor es
+
Los comandos para habilitar y deshabilitar recursos en un nodo son
500ms; nótese que los valores devueltos por el sistema siempre estarán medidos
 
en segundos, aunque internamente use el TIC como base de tiempos.
 
  
* '''Flujo:''' Cada uno de los nueve elementos de medida y control que podrán
+
Si especificamos un tiempo, pcs esperara este tiempo y retornara 0 si el recurso a parado o 1 si el recurso no ha parado en el tiempo especificado.
establecerse por nodo VIVAit.
 
  
* '''Medición:''' Capacidad de md flow para determinar el número de llamadas por
+
pcs resource disable resource_id [--wait[=n]]
segundo que se están estableciendo en un determinado flujo. Nótese que no se
 
hace referencia a duración de las mismas o medición de llamadas previamente
 
establecidas
 
  
* '''Control:''' Capacidad de md flow para limitar el número de llamadas por segundo
+
Si especificamos un tiempo, pcs esperara este tiempo y retornara 0 si el recurso a arrancado o 1 si el recurso no ha arrancado en el tiempo especificado.
que se están estableciendo en un determinado flujo
 
  
* '''Tasa de llamadas por segundo:''' Cantidad de llamadas que se están
+
pcs resource enable resource_id [--wait[=n]]
estableciendo por segundo en un nodo VIVAit. Nótese que no se hace referencia a
+
pcs config show
duración de las mismas o llamadas previamente establecidas
+
pcs resource cleanup resource_id
 +
pcs resource clear
 +
pcs resource refresh
  
* '''DNIS: Dialed Number Identification Servic'''e; número destino de una llamada
+
Borra los Failed Actions de un recurso:
  
* '''Congestión''': Estado del nodo VIVAit cuando se sobrepasa una determinada tasa
+
pcs resource cleanup [recurso]
de llamadas por segundo; el mecanismo md flow entrará en funcionamiento cuando
 
el sistema entre en estado de congestión.
 
  
* '''Llamada desbordada:''' Llamada que en el tratamiento de la congestión se
+
====== Notas sincronismo ======
considera apta para ser descartada (si bien el tratamiento se definirá en dialplan, el
 
funcionamiento lógico previsto es descartarla).
 
  
* '''Llamada a agujero:''' Llamada que en el tratamiento de la congestión se considera
+
Si tenemos este fallo:
ha de progresar por no quedar colas de DNIS disponibles (se explicará y justificará
 
el funcionamiento más adelante).
 
  
* '''Mdflow en paso:''' md flow puede ser utilizado para:
+
root@VC-PROC-SUMA-ALC-02:/tmp# cat /proc/drbd
 +
version: 8.4.10 (api:1/proto:86-101)
 +
srcversion: 7922D81D3881494EB149253
 +
  0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r-----
 +
root@VC-PROC-SUMA-ALC-01:~# cat /proc/drbd
 +
version: 8.4.10 (api:1/proto:86-101)
 +
srcversion: 7922D81D3881494EB149253
 +
  0: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown  r-----
  
- Solo medir . En este caso md flow se encontrará en paso.
 
  
- Medir y realizar control de flujo.
+
En el nodo principal
  
* '''DNIS masivo:''' Un DNIS con alta tasa de llamadas por segundo.
+
drbdadm connect all
  
* '''DNIS ocasional:''' Un DNIS con baja tasa de llamadas por segundo.
+
En el nodo secundario
  
 +
drbdadm -- --discard-my-data connect all
  
 +
********* En secundario: **************
 +
drbdadm secondary drbdASTER
 +
drbdadm disconnect drbdASTER
 +
drbdadm -- --discard-my-data connect drbdASTER
  
 +
********* En primario: ****************
 +
drbdadm primary drbdASTER
 +
drbdadm disconnect drbdASTER
 +
drbdadm connect drbdASTER
  
  
 +
====== Configuración para KVM ======
  
La aplicación está diseñada para '''controlar el flujo de llamadas entrantes''' → '''El sistema cuenta llamadas en cada periodo TIC.'''
+
'''vi /etc/multipath.conf'''
 +
-----------------------------
 +
defaults {
 +
    user_friendly_names yes
 +
}
 +
blacklist {
 +
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]"
 +
devnode "^vd[b-z]?[0-9]"
 +
devnode "vda"
 +
devnode "vda1"
 +
devnode "^drbd[0-9]*"
 +
}
  
El módulo permite difinir distintas cajas de medida y control ('''FLUJO''').
+
systemctl restart multipathd.service
  
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).
+
'''vi /etc/corosync/corosync.conf'''
 
+
------------------------------------
Cada una de las cajas, o flujos, mide y controla la tasa de llamadas en cada TIC → Se mostrará en llamadas/segundo.
+
totem {
 
+
    version: 2
El '''FLUJO'''mide 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.
+
    cluster_name: CLmdtel
 
+
    transport: knet
El '''FLUJO'''permite controlar y medir, y está pensado para enviar información a Zbbix.
+
    crypto_cipher: aes256
 
+
    crypto_hash: sha256
Desde el punto de vista del Dialplan, se trata de una aplicación con dos parámetros:
+
    token: 12000
*Que caja se utiliza (número del 1 al 9).
+
}
*DNIS que permite controlar para que destino queremos hacer el control de flujo.
+
nodelist {
 
+
    node {
Para encolar internamente cada '''FLUJO''' tiene un número de colas definidas y cada DNIS está en una cola.  
+
        ring0_addr: nodo-vc-01
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.
+
        name: nodo-vc-01
El número de colas deberá ser el numero de DNIS masivo.
+
        nodeid: 1
 +
    }
 +
    node {
 +
        ring0_addr: nodo-vc-02
 +
        name: nodo-vc-02
 +
        nodeid: 2
 +
    }
 +
}
 +
quorum {
 +
    provider: corosync_votequorum
 +
    two_node: 1
 +
}
 +
logging {
 +
    to_logfile: yes
 +
    logfile: /var/log/corosync/corosync.log
 +
    to_syslog: yes
 +
    timestamp: on
 +
}
  
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).
+
systemctl restart corosync
  
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).
+
'''Revisar que están arrancados después de reinicar:'''
 +
Corosync Pacemaker multipath
  
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.
+
===== Ejemplo de cluster con mysql y asterisk =====
  
El mecanismo de control de flujo entra en funcionamiento cuando el sistema entra en '''congestión'''.
+
En este ejemplo vamos a crear un cluster que maneje mysql y Asterisk como servicios separados.
  
Las llamadas que se encolan tienen un retardo adicional tipico de un TIC.
+
Para lograr esto vamos a necesitar que el drbd maneje dos particiones separadas y tener dos ip flotantes, una para cada servicio.
  
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...
+
====== Requisitos previos ======
  
 +
Los requisitos previos antes de comenzar la instalación del cluster son:
  
Mdflow se invoca dentro del dialplan del sistema. Por
+
• Nodos correctamente actualizados (update/upgrade).
ejemplo, será la primera línea del dialplan correspondiente a un enlace externo; a la salida
 
de md flow, este proporcionará una etiqueta, que podrá ser “Ok”, “desborda”, “agujero” o
 
“error”
 
El funcionamiento general de md flow es el reflejado en el siguiente diagrama de flujo.
 
  
 +
• Conexión a internet.
  
 +
• NTP configurado.
  
[[Archivo:mdflow.png|885px |center]]
 
  
Como se puede apreciar en el diagrama de flujo:
+
'''''Creación de las particiones e instalación y configuración del drbd'''''
  
*mdflow siempre cuenta las llamadas para establecer la tasa de llamadas por segundo.
+
====== Particionado (En los 2 nodos) ======
  
* Solo hace control de flujo si no está en paso.
+
Para la instalación de los dos recursos drbd necesitamos tener dos particiones que vamos a crear añadiendo un disco duro en cada una de las máquinas. Lo añadimos mediante el Gestor de Máquinas Virtuales de la máquina 999-sgestion. Los tamaños serán los siguientes:
  
* Solo hace control de flujo si hay congestión (tasa de llamadas por segundo superior a la máxima configurada).
+
• Corporativo -> 50Gb
  
* Estando en congestión:
+
• BDTR -> 100Gb
  
 +
Lo siguiente es crear la partición en cada servidor:
  
'''- Si entra una llamada nueva'''
 
  
Y existe otra encolada para el DNIS se encola en dicha cola.
+
[[File:cluster1.png|400px]]
  
Y no existe cola para el DNIS se crea la cola y encola SI quedan colas disponibles.
+
Vamos a utilizar la herramienta parted seguido del dispositivo que queremos particionar. En este caso el espacio que vamos a particionar está en el dispositivo /dev/vdc.
  
Si no quedan colas disponibles la llamada sale con etiqueta “agujero”.
+
parted /dev/vdc
  
 +
Una vez ejecutado el comando entraremos en una consola de la aplicación.
  
'''- Al respecto de colas'''
+
Ejecutando el comando
  
Una cola se crea cuando hay una llamada con un DNIS no encolado y si existen aún colas disponibles.
+
(parted) print free
  
Una cola se libera de un DNIS cuando no quedan llamadas en cola para ese DNIS.
+
Obtenemos las particiones que tiene el dispositivo actualmente y el espacio libre que disponemos.
  
Las colas no tienen una profundidad máxima.
+
[[File:cluster2.png|400px]]
  
Las colas tienen un tiempo de permanencia.
+
En este ejemplo disponemos de 50Gb de espacio libre que es el que vamos a utilizar para las 2 particiones necesarias.  
  
Las llamadas se van atendiendo equitativamente en cada cola, todas tienen el mismo peso, saliendo con etiqueta “Ok”
+
Lanzamos el comando mkpart para realizar la primera partición que será para mysql.
  
 +
(parted) mkpart
  
'''- Al respecto de llamadas'''
+
El nombre que le vamos a dar a la partición es '''DRBD-MYSQL'''.
 +
El Tipo de sistema de ficheros '''ext4'''.
 +
Luego nos pedirá el principio de la partición, en el ejemplo vamos a comenzar en 198Gb y vamos a finalizar en 550Gb.
  
Una llamada se saca de la cola con etiqueta “desborda” si pasa el máximo tiempo configurado en cola
 
  
 +
[[File:cluster3.png|400px]]
  
'''- Si se produce un error en el sistema las llamadas podrán salir con etiqueta “error”.
+
Realizaremos la segunda partición volviendo a ejecutar el mismo comando
  
 +
(parted) mkpart
  
  
 +
En este ejemplo el nombre para esta partición será '''DRBD-ASTER''' el tipo '''ext4''' y le daremos el espacio restante del disco.
  
 +
[[File:cluster4.png|400px]]
  
  
 +
Para ver el resultado de las particiones podemos ejecutar el comando.
  
Al respecto de las llamadas que salen con etiqueta “agujero”, cabría pensar que si no
+
lsblk
quedan colas disponibles las llamadas con etiqueta agujero serian llamadas candidatas a
 
ser descartadas a DNIS ocasionales y se les dará prioridad. Téngase en cuenta que en
 
circunstancias de congestión, las colas estarán típicamente ocupadas por DNIS masivos, y
 
no por DNIS ocasionales, de manera que es altamente probable que cualquier DNIS
 
masivo ya tenga cola asignada y que al agujero vayan DNIS ocasionales; todo esto pasa
 
por realizar un buen dimensionamiento del máximo de colas (que debiera ser muy
 
parecido al número de DNIS masivos)
 
  
 +
[[File:cluster5.png|400px]]
  
 +
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
  
  
 +
====== Gestión de particiones con LVM (En los 2 nodos) ======
  
  
[[Archivo:mdflow2.png|655px |center]]
+
Crearemos las 2 particiones lvm en los 2 servidores con los siguientes comandos.
  
 +
En este ejemplo las particiones que queremos utilizar son /dev/sda5 para mysql y /dev/sda6 para Asterisk, esto podrá cambiar en las instalaciones.
  
 +
[[File:cluster6.png|400px]]
  
 +
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
  
  
==== Proceso de instalación de mdflow en una instalación existente; → como se "añade" mdflow en un VIVAit existente ====
+
====== Instalación y configuración del drbd (En los 2 nodos) ======
   
 
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
+
Instalaremos el paquete drbd8-utils. En Ubuntu 20.04 drbd-utils
  
Para que el asterisk cargue el nuevo módulo entrarems en la consola de asterisk (asterisk -r) y ejecutaremos '''module load app_mdflow.so'''
+
apt-get install drbd-utils
  
 +
Ahora tenemos que editar los archivos de configuración del drbd, estos archivos están en el directorio /etc/drbd.d
  
 +
Primero editaremos la configuración general, el archivo global_common.conf y le añadiremos en la sección net lo siguiente.
  
==== Parámetros de configuración ====
+
vi /etc/drbd.d/global_common.conf
  
 +
[[File:cluster7.png|400px]]
  
 +
Si tenemos problemas con los backup que realiza Vodafone en las máquinas virtuales añadir:
  
*'''Parámetros generales'''
+
  net {
 +
                # protocol timeout max-epoch-size max-buffers
 +
                # connect-int ping-int sndbuf-size rcvbuf-size ko-count
 +
                # allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri
 +
                # after-sb-1pri after-sb-2pri always-asbp rr-conflict
 +
                # ping-timeout data-integrity-alg tcp-cork on-congestion
 +
                # congestion-fill congestion-extents csums-alg verify-alg
 +
                # use-rle
 +
                protocol C;
 +
                after-sb-0pri discard-zero-changes;
 +
                after-sb-1pri discard-secondary;
 +
                after-sb-2pri disconnect;
 +
        }
  
 +
Ó (nota Centro de Servicios)
  
'''- tick_ms:''' duración de un TIC.
+
net {
 +
    ping-int 30;
 +
    timeout 20;
 +
    connect-int 30;
 +
    protocol C;
 +
    after-sb-0pri discard-older-primary;
 +
    after-sb-1pri discard-secondary;
 +
    after-sb-2pri disconnect;
 +
}
 +
 
 +
 
 +
Para configurar los recursos tenemos que crear en el directorio /etc/drbd.d un archivo para cada recurso. Estos archivos deben tener la extensión res.
  
'''- estad_interv_seg:''' define intervalo de medida, si bien las informaciones siempre las proporcionará en tasa de llamadas/s.
+
Creamos el archivo para el recurso mysql con el nombre drbd-mysql.res.
  
 +
vi drbd-mysql.res
  
*'''Parámetros por flujo'''
+
El contenido del archivo es:
  
 +
resource drbdMYSQL {
 +
  on VC-CORP-Cetelem-Mad-cl1 {
 +
    device /dev/drbd0;
 +
    disk /dev/mapper/vg_DRBD--MYSQL-lv_DRBD--MYSQL;
 +
    address 10.10.10.10:7788;
 +
    meta-disk internal;
 +
  }
 +
  on VC-CORP-Cetelem-Mad-cl2 {
 +
    device /dev/drbd0;
 +
    disk /dev/mapper/vg_DRBD--MYSQL-lv_DRBD--MYSQL;
 +
    address 10.10.10.11:7788;
 +
    meta-disk internal;
 +
  }
 +
}
  
'''-Flujo:''' nombre del flujo (solo para la salida de estadísticas); no conecta con nada en dialplan o similar.
 
  
'''-En_paso:''' (0 o 1); si está a 1 solo mide, siempre devuelve OK; si “en_paso” es 0 hay control de flujo.
+
Ahora haremos lo mismo para el recurso Asterisk, el archivo se llamará:  drbd-aster.res.
  
'''-Tasa_sal_seg:''' tasa máxima de salida de llamadas/s configuradas para ese flujo; saldrán ese valor de llamadas por segundo con etiqueta “Ok”.
+
vi drbd-aster.res
  
'''-Dnis_max:''' número de colas máximo en ese flujo. Si se configura 1 cola, se comporta como cola única, no se hace caso al DNIS.
 
  
'''-Dnis_umbral_masivo:''' no vale para control, pero sí para medida; nos define que un DNIS es masivo si hay tantas o más llamadas encoladas que las indicadas en este parámetro; si está solo en paso no se mide porque no hay colas.'''
+
y el contenido será el siguiente:
  
'''-to_desborda_seg:''' Tiempo máximo en cola de una llamada; pasado el tiempo sale
+
resource drbdASTER {
con "desborda"
+
  on VC-CORP-Cetelem-Mad-cl1 {
 +
    device /dev/drbd1;
 +
    disk /dev/mapper/vg_DRBD--ASTER-lv_DRBD--ASTER;
 +
    address 10.10.10.10:7789;
 +
    meta-disk internal;
 +
  }
 +
  on VC-CORP-Cetelem-Mad-cl2 {
 +
    device /dev/drbd1;
 +
    disk /dev/mapper/vg_DRBD--ASTER-lv_DRBD--ASTER;
 +
    address 10.10.10.11:7789;
 +
    meta-disk internal;
 +
  }
 +
}
  
 +
'''Realizamos este mismo proceso en el otro nodo del cluster.''' Los ficheros de configuración los podemos copiar de un nodo a otro.
  
  
==== Fichero de configuración ====
+
====== Configuración de /etc/hosts (En los 2 nodos) ======
  
 +
Tenemos que configurar correctamente los nombres de las máquinas en el archivo /etc/hosts.
  
El fichero de configuración se ubica en '''/etc/Asterisk/MDflow.conf''' ; su contenido por defecto es el
+
vi /etc/hosts
siguiente:
 
  
 +
El contenido de este archivo variará según la configuración, para este ejemplo.
  
 +
[[File:cluster8.png|400px]]
 +
 +
:{|
 +
|
 +
127.0.0.1 localhost
 +
#127.0.1.1 VC-CORP-mdtelMad-cl1
 +
 +
128.1.4.201 VC-CORP-mdtel-Mad-cl1
 +
128.1.4.202  VC-CORP-mdtel-Mad-cl2
 +
 +
10.10.10.10 nodo-vc-01
 +
10.10.10.11    nodo-vc-02
 +
 +
 +
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
  
[general]
 
; Periodo de tiempo para medidas de tasa de llamadas
 
tick_ms=500
 
; Periodo de tiempo para calculos estadísticos
 
estad_interv_seg=10
 
; Máximo 9 flujos ([flujo_1] a [flujo_9])
 
; Tiene que empezar en [flujo_1] y ser correlativos
 
[flujo_1]
 
; Nombre asignado al flujo. Se usa en las salidas de los comandos
 
flujo=Cen_Inicio_SIP
 
; "En paso"
 
; 1: No se controla el flujo (siempre etiqueta OK), sólo se mide
 
; 0: Se controla la tasa de llamadas y se hacen medidas
 
en_paso=0
 
; Tasa máxima de llamadas (expresada en llamadas/seg) que etiquetadas OK
 
; Para un tick de 500 ms, este valor debe ser par
 
tasa_sal_seg=4
 
; Número máximo de dnis a encolar. Resto se etiquetan como AGUJERO
 
dnis_max=2
 
; Umbral para el número de llamadas encoladas en un dnis, que hace que
 
; éste sea calificado como "masivo"
 
; El valor mínimo es 2
 
dnis_umbral_masivo=8
 
; Límite de tiempo en segundos, transcurrido el cuál se etiqueta DESBORDA
 
to_desborda_seg=5
 
[flujo_2]
 
flujo=Cen_Inicio_TrunkSip
 
en_paso=1
 
tasa_sal_seg=20
 
dnis_max=100
 
dnis_umbral_masivo=10
 
to_desborda_seg=5
 
[flujo_3]
 
flujo=Cen_TrunkInternos
 
en_paso=1
 
tasa_sal_seg=20
 
dnis_max=100
 
dnis_umbral_masivo=10
 
to_desborda_seg=5
 
  
==== Ejemplo claro de invocación de mdflow desde dialplan y posterior tratamiento en función de las etiquetas de salida ====
+
====== Creación de los recursos en drbd. (En los 2 nodos) ======
  
Por defecto el MDflow se pondrá en los siguientes ficheros de Asterisk:
+
Ahora crearemos los recursos en drbd, primero el de mysql
* ext_InicioLlamada_ExtSIP.conf 
 
* ext_InicioLlamada_TrunkSIP.conf 
 
* ext_TrunkInternos.conf
 
ya que son los diferentes contextos de entrada de llamadas.
 
  
  ;--------------------------------------------------------------------------------
+
  drbdadm create-md drbdMYSQL
[Cen_TrunkInternos]
+
 
;--------------------------------------------------------------------------------
+
Y después el de Asterisk
;--------------------------------------------------------------------------------
+
 
  exten => _[*#%0-9a-zA-Z].,1,NoOp(MDENTTR_X****EXTEN=${EXTEN}**CID=${CALLERID(NUM)}*)
+
  drbdadm create-md drbdASTER
+
 
  same =>                  n,Set(__ENR_PEER_ORIGEN=${CHANNEL(peername)})
+
Y arrancamos el drbd en el nodo.
+
 
+
  /etc/init.d/drbd start
;-------------------------
+
 
;  Control de flujo
+
Crearemos las carpetas donde se montarán los recursos del drbd
;-------------------------
 
  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'''
+
mkdir HDmysql
'''ahora es necesartio para que pase el ucid del acd'''
 
  
   
+
  touch /HDmysql/sinMontar
[Cen_Inicio_SIP]
+
 
  exten => _[*#%0-9].,1,NoOp(MDINIEXTENSIP**EXTEN=${EXTEN}**CID=${CALLERID(NUM)}*)
+
  mkdir HDaster
   
+
  touch /HDaster/sinMontar
  same =>            n,Set(ENR_PEER_ORIGEN=)
+
 
  same =>            n,Set(__ENR_TIPO_ORIGEN=10)
+
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
  same =>            n,Set(__ENR_ORIGEN=${ID_DISPOSITIVO})
+
 
  same =>            n,Set(__SPAN_IN=)
+
====== Sincronización del drbd. (En 1 nodo) ======
  same =>            n,Set(__CANAL_IN=)
+
 
  ;same =>            n,Set(__TIPO_LLAMADA=${TIPOLLAMADASAL})
+
Este proceso solo se debe realizar en un nodo, Con este comando sincronizaremos los 2 discos y el nodo desde donde lo lancemos será el que aporte los datos en la sincronización. Como no hay nada en los discos todavía es igual desde que nodo se ejecute.
 
  ;-------------------------
 
  ;  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)'''
 
  
 +
drbdadm -- --overwrite-data-of-peer primary all
  
  
==== Comandos básicos de diagnóstico ====
+
Podemos ir viendo cual es el porcentaje que lleva realizado con el siguiente comando.
  
  Comandos básicos (dentro de la consola asterisk)
+
watch -n 1 'cat /proc/drbd'
  
*'''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...
+
Al final de la sincronización debería salir algo como esto.
  
Preproduccion-Corp0*CLI>  mdflow show stats
+
[[File:cluster9.png|400px]]
 
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:
+
===== Pacemaker, corosync y pcs =====
  flowInd=3 enPaso=0
+
 
  flowInd=3 tasaUltIntervMs=10003
+
 
  flowInd=3 tasaUltEntra=0
+
Ahora deberíamos tener en los 2 nodos un mysql configurado y corriendo, un Asterisk configurado y corriendo y 2 particiones de drbd (una para mysql y otra para Asterisk) sincronizadas, aunque no están montadas en ningún sitio.
  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
+
====== Parar y deshabilitar los servicios. (en los 2 nodos) ======
  
mdflow Estado global:
+
Todos los servicios que vayan a ser controlados por el pacemaker tienen que estar parados y el arranque deshabilitado para que el pacemaker los arranque y los pare en el nodo que corresponda.
  activo=1
 
  supervEjecutando=1
 
  tickMs=500
 
  estadIntervSeg=10
 
  flowNum=3
 
  
  mdflow flujo=[flujo_1]/Cen_Inicio_TrunkSip:
+
  /etc/init.d/asterisk stop
  flowInd=1 enPaso=0
+
/etc/init.d/mysql stop
  flowInd=1 dnisColaNum=1 no se controlan dnis
+
/etc/init.d/drbd stop
 +
systemctl disable mysql
 +
systemctl disable drbd
 +
systemctl disable asterisk
  
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:
+
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
  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
+
====== Instalación de los paquetes necesarios. (En los 2 nodos) ======
  
mdflow Configuración global:
+
Instalamos los paquetes necesarios.
  activo=1
 
  supervEjecutando=1
 
  tickMs=500
 
  estadIntervSeg=10
 
  estadFases=20
 
  flowNum=3
 
  
  mdflow flujo=[flujo_1]/Cen_Inicio_TrunkSip:
+
  apt install corosync pacemaker pcs
  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:
+
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
  flowInd=3 enPaso=0
 
  flowInd=3 llamSalTick=1
 
  flowInd=3 llamSalSeg=2
 
  flowInd=3 dnisColaNum=1
 
  flowInd=3 dnisUmbralMasivo=8
 
  flowInd=3 llamDesbordaToSeg=5
 
  
  
*'''mdflow reload:''' Recarga mdflow leyendo de nuevo el fichero de configuración
+
====== Configuramos la clave del usuario hacluster. (En los 2 nodos) ======
MDlow.conf; se puede realizar con la plataforma en funcionamiento normal pero no
 
se recomienda realizarlo en momentos de alto tráfico; los cambios de configuración
 
se aplican tras un comando “mdflow reload”
 
  
Preproduccion-Corp0*CLI> mdflow reload
+
Al instalar los paquetes se crea un usuario hacluster que tenemos que ponerle clave
  
 +
passwd hacluster
  
*'''mdflow debug:''' Muestra estadísticas por pantalla a intervalos regulares; no se
+
La clave deberá ser la misma en los 2 nodos. '''ivivacluster'''
recomienda su uso sistemático.
 
  
Preproduccion-Corp0*CLI> mdflow debug
 
  
==== Comandos básicos de diagnóstico ====
+
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
  
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.
 
  
 +
====== Autentificación del pcs. (En 1 nodo) ======
  
 +
En uno de los nodos ejecutamos el siguiente comando para autenticar el pcs.
  
==== Asignación de flujos ====
+
pcs host auth nodo-vc-01 nodo-vc-02 -u hacluster -p ivivacluster
  
 +
El resultado del comando tiene que ser:
  
Por defecto, en la instalación irán definidos los siguientes flujos:
+
<span style="color:#007bca">VC-CORP-Cetelem-Mad-cl1: Authorized
 +
VC-CORP-Cetelem-Mad-cl2: Authorized</span>
  
*'''Flujo 1 (trunksip):''' Flujo que analiza las llamadas que vienen de los trunksip.
+
====== Creación y configuración del cluster. (En 1 nodo) ======
Típicamente son las llamadas que provienen de los operadores en los Gatewais.
 
Está configurado en el contexto Cen_InicioLlamada_TrunkSip.
 
  
*'''Flujo 2 (Extensiones):''' Flujo para las llamadas originadas por las extensiones SIP
+
Ahora creamos el cluster e incluimos las maquinas que lo van a componer y le asignamos un nombre (este nombre no puede exceder de 15 caracteres).
registradas en el nodo. Está configurado en el contexto Cen_InicioLlamada_SIP.
 
  
*'''Flujo 3 (trunkInternos):''' Flujo para las llamadas que provienen de otros nodos.
+
pcs cluster destroy (en caso de no encontrar /var/lib/pcsd/known-hosts y después lanzar pcs host auth noco-vc-01 nodo-vc-02  -h hacluster -p ivivacluster)
Está configurado en el contexto Cen_TrunkInternos
 
  
 +
pcs cluster setup CLmutuaint  nodo-vc-01 nodo-vc-02 --start --enable --force
  
 +
Si todo ha ido bien la salida debería ser algo como esto.
  
Estos son flujos genéricos que irán definidos en la instalación, se podrán generar mas si la
+
[[File:cluster10.png|500px]]
instalación lo requiere, por ejemplo, si la instalación tiene primarios se podrá definir un
 
flujo para las llamadas que vienen por el contexto Cen_InicioLlamada_Dahdi.
 
  
 +
Lo habilitamos '''''en todos los nodos'''''
  
El significado del flujo 3 es diferente según el tipo de nodo en que se está ejecutando. Por
+
pcs cluster enable --all
ejemplo, en una instalación de 2 nodos, un nodo Gateway y un nodo de procesamiento, el
 
flujo 3 en el nodo gateways estará midiendo el tráfico que manda el nodo de
 
procesamiento hacia el exterior del sistema, típicamente las llamadas salientes al sistema,
 
en cambio, el mismo flujo en el nodo de procesamiento, estará indicando las llamadas que
 
vienen del Gateway, típicamente las llamadas entrantes del exterior.
 
  
 +
La salida será:
  
Esto es mucho menos evidente en instalaciones con varios nodos, con trunk hacia
+
<span style="color:#007bca">VC-CORP-CDS-MAD-01: Cluster Enabled
proveedores externos en los nodos de procesamiento, etc.
+
VC-CORP-CDS-MAD-02: Cluster Enabled</span>
  
 +
Arrancamos el cluster '''en todos los nodos'''
  
 +
pcs cluster start --all
  
==== Configuración de cola única ====
 
  
 +
[[File:cluster11.png|500px]]
  
La configuración de colas es útil cuando el número de DNIS es finito y queremos priorizar
+
Comprobamos que todo está correcto con el siguiente comando:
los números llamados menos frecuentemente sobre los masivos.
 
  
Cuando el número de DNIS es muy grande la configuración mediante colas no ofrece un
+
Nos mostrara el estado del cluster.
funcionamiento óptimo, las colas serán ocupadas cada una con un DNIS diferente y todos
 
los DNIS que no tengan cola libre saldrán por la salida “agujero”.
 
  
Para tener un control del flujo en estas situaciones se ha creado el concepto de cola única,
+
[[File:cluster12.png|700px]]
su comportamiento es que todas las llamadas van a la misma cola y no hay llamadas que
+
 
  obtengan la salida “agujero” y por tanto todas tienen la misma prioridad.
+
 
 +
En la salida del comando, vemos que STONITH (Shoot The Other Node In The Head) esta activado, pero no hay dispositivos configurados.
 +
 
 +
Quitamos el STONITH.
 +
 
 +
  pcs property set stonith-enabled=false --force
  
Este comportamiento se obtiene poniendo el parámetro de configuración del flujo
 
dnis_max con el valor 1 (dnis_max=1).
 
  
Un ejemplo típico de utilización de este tipo de configuración sería en el flujo 3 de los
+
También deshabilitaremos la política de quorum. Un cluster tiene quorum cuando más de la mitad de los nodos están online. Pacemaker por defecto para todos los servicios si no hay quorum, esto no tiene mucho sentido en un cluster de 2 nodos.
nodos gateways. Este flujo tendrá las llamadas que el resto de los nodos envían al exterior
 
y los DNIS no coincidirían en su mayoría.
 
  
==== MDflow y las trazas ====
+
pcs property set no-quorum-policy=ignore --force
  
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))
 
  
 +
Vamos a ver la lista de propiedades del cluster para ver que hemos deshabilitado todo correctamente.
  
 +
pcs property list
  
<br><br>
 
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
=== Estadísticas en '''''<span style="color:#144F9B">VIVA</span>'''''it Call ===
+
[[File:cluster13.png|500px]]
  
[[:medio:Estadisticas_VIVAIT_ Call.pdf|Como configurar estadísticas para '''''VIVA'''''it Call ]]
 
  
  
== Configuración de los diferentes Portales de Usuario ==
+
====== Creación de las IP flotantes (En 1 nodo) ======
<br><br>
 
El portal de usuario VIVAit Call permite que determinadas funcionalidades del sistema puedan ser accesibles por los usuarios finales desde una interfaz mucho más cómoda y amigable que el telefónico.
 
<br><br>
 
Existen varias opciones del portal de usuario según las necesidades del cliente , las diferentes opciones en base a la configuración son:
 
<br><br>
 
* Portal de usuario
 
* Portal Webcall
 
* Portal para integración con Teams
 
* Portal Vivait Tracker
 
* Portal Vivait Supervisor
 
<br><br>
 
Para configurar las diferentes posibilidades en los portales de usuario hay que modificar el archivo '''“vivaitConfig.js”''' , este archivo se encuentra en :  '''/var/www/vivait/webs/portal/Assets/Config/'''
 
<br><br>
 
[[File:p-usuario1.png|center|600px]]
 
<br><br>
 
*'''webphoneLink :''' Configuración del link de la web con solo el dialpad.
 
*'''IsWebPhoneDisabled:''' Configuración para habilitar (false) o deshabilitar (true) la aparición de webphone al iniciar el portal.
 
<br><br>
 
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
=== Portal de usuario ===
+
Ahora vamos a crear las 2 direcciones ip flotantes para que la conexión se realice a la maquina correcta en cada caso, esta ip balanceara entre los diferentes nodos para dar acceso a los servicios en el nodo en el que estén activos.
<br><br>
 
Para configurar el portal de usuario solo para terminales telefónicos (sin webphone) se tendría que hacer de la siguiente forma:
 
<br><br>
 
[[File:p-usuario2.png|center|300px]]
 
<br><br>
 
*'''webphoneLink :''' Comentar la línea con ( // ) al comienzo de esta.
 
*'''IsWebPhoneDisabled:''' Deshabilitar (true) para que no aparezca webphone al iniciar el portal.
 
<br><br>
 
Al terminar la configuración , en el portal se deshabilitará el botón de webphone:
 
<br><br>
 
[[File:p-usuario3.png|center|700px]]
 
<br><br>
 
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
=== Portal Webcall ===
+
Creamos la IP para el mysql.
<br><br>
+
 
Para configurar el portal de usuario VIVAit Call web con webphone integrado en la misma página se tendría que hacer de la siguiente forma:
+
pcs resource create IP-MYSQL ocf:heartbeat:IPaddr2 ip=128.1.4.205 nic=eno1:0 cidr_netmask=16 op monitor interval=60s
<br><br>
+
 
[[File:p-usuario4.png|center|300px]]
+
Y la IP para el Asterisk
<br><br>
+
 
*'''webphoneLink :''' Comentar la línea con ( // ) al comienzo de esta.
+
pcs resource create IP-ASTER ocf:heartbeat:IPaddr2 ip=128.1.4.207 nic=eno1:1 cidr_netmask=16 op monitor interval=60s
*'''IsWebPhoneDisabled:''' Habilitar (false) para que aparezca webphone al iniciar el portal.
+
 
<br><br>
+
Comprobamos el estado del cluster.
Al terminar la configuración , en el portal aparecerá el dialpad de webphone:
+
   
<br><br>
+
pcs status
[[File:p-usuario5.png|center|800px]]
 
<br><br>
 
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0 Volver al índice]
 
<br><br>
 
  
=== Portal para integración con Teams ===
+
Nos mostrará los nuevos recursos creados y nos indicará en que nodo han sido arrancados.
<br><br>
 
Para configurar el portal de usuario VIVAit Call web con botón de enlace a otra página con webphone se tendría que hacer de la siguiente forma:
 
<br><br>
 
[[File:p-usuario6.png|center|300px]]
 
<br><br>
 
*'''webphoneLink :''' Poner el link del enlace a webphone
 
*'''IsWebPhoneDisabled:''' Deshabilitar (true) para que no aparezca webphone al iniciar el portal.
 
<br><br>
 
Al terminar la configuración , en el portal estará habilitado el botón de webphone , que al pulsar sobre el nos llevará a otra página con el dialpad :
 
<br><br>
 
[[File:p-usuario7.png|center|800px]]
 
<br><br>
 
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
=== Varios portales en una sola instalación ===
 
<br><br>
 
Existe la posibilidad de tener varios portales en una misma instalación de VIVAit Call con diferentes url’s para cada portal .
 
<br><br>
 
[[File:p-usuario8.png|center|600px]]
 
<br><br>
 
Un ejemplo de las url’s de los portales sería:
 
<br><br>
 
https://servidor/webs/vivait-user/ → Portal usuario
 
https://servidor/webs/webfon2-solo → DialPad
 
https://servidor/webs/webfon3 → Portal webphone
 
<br><br>
 
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
=== Portal Vivait Tracker ===
+
[[File:cluster14.png|600px]]
<br><br>
 
==== Introducción a Vivait Tracker 0.1 ====
 
<br><br>
 
Con la versión 5.1 de la plataforma '''''VIVA'''''it Call se ha lanzado un nuevo tracker: ''VIVAit Tracker'', que supone una mejora sobre el producto anterior: [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Vivait-Tracker ''Tracker WEB''] más enfocado al mundo Call Center.<br>
 
Los puntos claves del nuevo '''''portal VIVAit Tracker''''' dirigido al entorno corporativo son:<br>
 
: • Adaptación para facilitar su uso en entornos de telefonía corporativa.<br>
 
: • Permite seguir llamadas y escuchar/descargar grabaciones en caso de existir.<br>
 
: • Integrado con entornos de texto (TBC y desarrollos futuros).
 
<br><br>
 
[[#Introducción a Vivait Tracker 0.1 | Volver arriba]] / [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
===== Arquitectura de Vivait Tracker 0.1 =====
 
<br><br>
 
Los bloque funcionales, servicios y elementos que componen la aplicación están divididos en dos capas principales:
 
<br><br>
 
: - '''Frontend'''<br>
 
::Reside en un servidor web Apache.<br>
 
::Se invoca desde un navegador mediante una URL del tipo https://host/ws/<br>
 
        https://172.25.128.252/Tracker_Corp/
 
::Es la parte visual: HTML, CSS, JavaScript.<br>
 
::No accede directamente a la base de datos; solo obtiene datos desde una API.
 
<br><br>
 
: - '''Backend / API REST'''<br>
 
::Corre en un servidor web Tomcat.<br>
 
::Expone la API en: <br>
 
        https://172.25.128.252/Tracker-Rest/tracker/.
 
::Contiene la lógica que permite interactuar con la BBDD.<br>
 
::Responde en JSON para que el frontend pueda ofrecérselo al navegador.<br>
 
<br><br>
 
Diagrama funcional de la arquitectura de VIVAit Tracker 0.1
 
<br><br>
 
[[File:arquitectura3_tracker_V5.1.png|1500px|center|thumb]]
 
<br><br>
 
[[#Introducción a Vivait Tracker 0.1 | Volver arriba]] / [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
====== Flujo completo del ciclo de datos ======
 
<br><br>
 
Siguiendo el proceso se contemplan los siguientes pasos:
 
<br><br>
 
'''Paso 1''' El usuario invoca el frontend residente en Apache desde un navegador, usando javascript, mediante la URL del tipo:<br>
 
        https://host/Traker_Corp/
 
El navegador carga la página web servida por Apache.
 
<br><br>
 
'''Paso 2''' Una vez superada la fase de [[#Seguridad de VIVAit Tracker 0.1 |validación]] se muestra un [[#Descripción de la interfaz de VIVAit Supervisor 2.0 |formulario]] que permite al usuario definir los parámetros de una consulta.<br>
 
::La página del formulario inicia una transacción para efectuar una solicitud HTTP POST al endpoint correspondiente, por ejemplo:<br>
 
                https://172.25.128.252/Tracker_Corporativo/
 
::siendo la carga util de esta solicitud los datos del formulario rellenado por el usuario:<br>
 
                {fechaInicio: "", fechaFin: "", horaInicio: "", horaFin: "", listaExtensiones: [], listaGrupos: [],…}         
 
<br><br>
 
'''Paso 3''' Al recibir los datos del formulario el frontend hace una petición a la API REST de Tomcat.<br>
 
  
<br><br>
+
====== Configuración del drdb. (En 1 nodo) ======
'''Paso 4''' La API se conecta a la base de datos, ejecuta las consultas necesarias y devuelve la respuesta.<br>
+
 
 +
 
 +
La configuración de DRBD en Pacemaker implica que creemos varios recursos que se ejecutaran a la vez, para ello, utilizaremos una opción de pcs que nos permite encolar varios comandos y ejecutarlos al mismo tiempo. Estos comandos serán ejecutados únicamente en un nodo.
 +
 
 +
Primero ejecutaremos los comandos necesarios para la creación del drbd para mysql.
 +
 
 +
pcs cluster cib drbd_mysql_cfg
 +
pcs -f drbd_mysql_cfg resource create DRBDmysql ocf:linbit:drbd drbd_resource=drbdMYSQL op monitor interval=60s
 +
pcs -f drbd_mysql_cfg resource master DRBDmysqlClone DRBDmysql master-max=1 master-node-max=1 clone-max=2 clone-node-max=1  notify=true
 +
pcs -f drbd_mysql_cfg resource promotable DRBDmysql promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1  notify=true
 +
pcs cluster cib-push drbd_mysql_cfg
  
<br><br>
+
Y lo mismo para el drbd de asterisk.
'''Paso 5''' El frontend recibe el JSON con los datos de la consulta en la respuesta:<br>
 
                POST https://172.25.128.252/Tracker-Rest/tracker/lista
 
::El navegador lo representa en pantalla. En ningún momento el navegador accede directamente a la base de datos; todo pasa por la API.
 
<br><br>
 
[[#Introducción a Vivait Tracker 0.1 | Volver arriba]] / [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
===== Seguridad de Vivait Tracker 0.1 =====
+
pcs cluster cib drbd_aster_cfg
<br><br>
+
pcs -f drbd_aster_cfg resource create DRBDaster ocf:linbit:drbd drbd_resource=drbdASTER op monitor interval=60s
El acceso está controlado mediante validación de tokens.
+
pcs -f drbd_aster_cfg resource promotable DRBDaster promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1  notify=true
<br><br>
+
pcs cluster cib-push drbd_aster_cfg
'''Paso 1 Autenticación inicial'''
+
pcs cluster cib drbd_aster_cfg
<br><br>
+
  pcs cluster cib-push drbd_aster_cfg
: • Al introducir sus credenciales el usuario se valida a través del servicio de autenticación ''sercen''<br>
+
 
                https://172.25.128.252/sercen/postautenticar1
+
 
: • Sercen genera un token firmado que identifica la sesión del usuario.
+
Miraremos el estado del cluster
<br><br>
 
'''Paso 2 Validación interna de permisos'''
 
<br><br>
 
: • Una vez que el frontend tiene el token, cada petición pasa por una validación de la API del tomcat:<br>
 
                https://172.25.128.252/Tracker-Rest/tracker/verificarToken
 
:: En la misma se comprueba que:<br>
 
::: - El token es válido.<br>
 
::: - El usuario tiene permisos para el recurso que está intentando usar. <br>
 
:::  Es necesario que el usuario tenga acceso a la aplicación ''Grabador'', ver [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit_5.0#Submen.C3.BA_Permisos_a_usuarios Usuarios].<br>
 
: • No se ejecuta ninguna acción si el token no es validado primero.
 
<br><br>
 
'''Paso 3 Proxy inverso apache-tomcat'''
 
<br><br>
 
: • Apache actúa como punto de entrada único:
 
:: - El usuario solo ve URLs de apache.
 
:: - Las peticiones que requieren lógica del backend se redirigen internamente a tomcat.
 
:: - Esto se consigue mediante proxy inverso, por ejemplo:<br>
 
::: /Tracker_Corporativo → servido por apache<br>
 
                https://172.25.128.252/Tracker_Corp/
 
::: /Tracker-Rest → Apache las pasa a Tomcat de forma transparente para el usuario<br>
 
                https://172.25.128.252/Tracker-Rest/tracker/extensiones
 
: • El navegador utilizado por el usuario nunca ve a tomcat.
 
<br><br>
 
[[#Introducción a Vivait Tracker 0.1 | Volver arriba]] / [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
==== Descripción de la interfaz de Vivait Tracker 0.1 ====
+
  pcs status
<br><br>
 
Este apartado se trata en [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/VIVAit_Tracker#Descripción_de_la_interfaz_de_Vivait_Tracker_0.1 Vivait Tracker]
 
<br><br>
 
[[#Introducción a Vivait Tracker 0.1 | Volver arriba]] / [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0 Volver al índice]
 
<br><br>
 
  
=== Portal VIVAit Supervisor ===
+
El resultado debería de mostrar que los recursos del drbd están creado y cuál es el nodo primario (master) y cuál es el nodo secundario (slave) para ambos recursos.
<br><br>
 
==== Introducción a Vivait Supervisor 2.0 ====
 
<br><br>
 
Con la versión 5.1 de la plataforma '''''VIVA'''''it Call se ha lanzado la aplicación: ''Vivait-Supervisor 2.0''.
 
<br><br>
 
Los puntos claves del '''''portal Vivait Supervisor''''' son:<br>
 
: • Seguimiento de las llamadas generadas en el sistema '''''VIVA'''''it Call.<br>
 
: • Visualización de resultados mediante gráficos, tablas y otros formatos.<br>
 
: • Exportación de datos para su posterior análisis.
 
<br><br>
 
[[#Introducción a Vivait Supervisor 2.0| Volver arriba]] / [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
===== Definiciones en Vivait Supervisor 2.0 =====
+
[[File:cluster15.png|700px]]
<br><br>
 
A continuación se definen los principales conceptos empleados en el supervisor:
 
<br><br>
 
'''Dashboard'''<br>
 
:Panel de control que presenta de forma visual y resumida la información clave (datos, indicadores o métricas),<br>
 
:con el objetivo de facilitar la supervisión, el análisis y la toma de decisiones de manera rápida y eficiente.<br>
 
:Un dashboard está compuesto por uno o varios componentes.
 
<br><br>
 
'''Componente'''<br>
 
:Elemento individual que forma parte de un dashboard y cuya función es mostrar la información requerida.<br>
 
:Los componentes pueden adoptar distintos formatos, entre los más habituales:<br>
 
::'''• Tablas:'''<br>
 
:::La información se presenta en formato tabular. Las cabeceras y la estructura de la tabla se definen durante la creación de su lógica.<br>
 
::'''• Gráficos:'''<br>
 
:::Los datos se muestran de forma visual mediante distintos tipos de gráficos, como barras, líneas, circulares, entre otros.<br>
 
::Según el modo en que actualizan la información, los componentes se clasifican en:<br>
 
::'''• Dinámicos:'''<br>
 
:::La información se actualiza de forma periódica, de acuerdo con un temporizador asociado al componente.<br>
 
::'''• Estáticos:'''<br>
 
:::La información se carga al iniciar el dashboard y no se vuelve a actualizar hasta que el panel de control se invoca nuevamente.
 
<br><br>
 
[[#Introducción a Vivait Supervisor 2.0| Volver arriba]] / [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
===== Arquitectura de Vivait Supervisor 2.0 =====
 
<br><br>
 
Los bloque funcionales, servicios y elementos que componen la aplicación están divididos en dos capas principales:
 
<br><br>
 
: - '''Frontend'''<br>
 
::Reside en un servidor web Apache.<br>
 
::Se invoca desde un navegador mediante una URL del tipo https://host/ws/<br>
 
        https://172.25.128.92/Vivait-Supervisor/
 
::Es la parte visual: HTML, CSS, JavaScript.<br>
 
::No accede directamente a la base de datos; solo obtiene datos desde una API.
 
<br><br>
 
: - '''Backend / API REST'''<br>
 
::Corre en un servidor web Tomcat.<br>
 
::Expone la API en: <br>
 
        https://172.25.128.92/Vivait-Supervisor/.
 
::Contiene la lógica que permite interactuar con la BBDD.<br>
 
::Responde en JSON para que el frontend pueda ofrecérselo al navegador.<br>
 
<br><br>
 
Diagrama funcional de la arquitectura de Vivait-Supervisor
 
<br><br>
 
[[File:arquitectura_supervisor2_V5.1.png|1500px|center|thumb]]
 
<br><br>
 
[[#Introducción a Vivait Supervisor 2.0| Volver arriba]] / [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
====== Flujo completo del ciclo de datos ======
+
====== Montar las particiones del drbd. (En 1 nodo) ======
<br><br>
+
 
Siguiendo el proceso se contemplan los siguientes pasos:
+
Formatearemos las particiones del drbd.
<br><br>
+
 
'''Paso 1''' El usuario invoca el frontend residente en Apache desde un navegador, usando javascript, mediante la URL del tipo:<br>
+
mkfs.ext4 /dev/drbd1
        https://host/Vivait-Supervisor/
+
mkfs.ext4 /dev/drbd0
El navegador carga la página web servida por Apache.
+
 
<br><br>
+
Una vez finalizado el proceso la pantalla mostrará a siguiente información (para cada comando).
'''Paso 2''' Una vez superada la fase de [[#Seguridad de Vivait Supervisor 2.0|validación]] se muestra [[#Descripción de la interfaz de Vivait Supervisor 2.0 |la pantalla inicial]] que permite al usuario elegir el dashboard, previamente configurado, ejecutándose la monitorización de la consulta preparada.<br>
+
 
::Tras elegir el dashboard deseado, la página web realiza solicitudes periódicas HTTP POST al endpoint correspondiente,<br>
+
[[File:cluster16.png|700px]]
::donde se obtienen los datos de los componentes asociados al dashboard, por ejemplo:<br>
+
 
                https://172.25.128.92/Vivait-Supervisor/tablas/TablaComponenteDinamicoAjax
 
::siendo la carga útil de esta solicitud la identificación del componente con los filtros elegidos por el usuario:<br>
 
              {idCompoCuadro: "15",…}
 
                  filtros : [{tipo: "titulo", valor: "titulo=Detalle"}, {tipo: "fechaDesde", valor: "FechaDesde="},…]
 
                idCompoCuadro: "15"         
 
<br><br>
 
'''Paso 3''' Al recibir los datos el frontend hace una petición a la API REST de Tomcat.<br>
 
<br><br>
 
'''Paso 4''' La API se conecta a la base de datos, ejecuta las consultas necesarias y devuelve la respuesta.<br>
 
              INFO TablaDinamicosDaoImpl:607 - componerSQL SELECT DATE_FORMAT(DAT_LLAMADAS.D_HORA_INICIO,'%Y-%m-%d'),DATE ...
 
<br><br>
 
'''Paso 5''' El frontend recibe el JSON con los datos de la consulta en la respuesta:<br>
 
                POST https://172.25.128.92/Vivait-Supervisor/tablas/TablaComponenteDinamicoAjax
 
::El navegador lo representa en pantalla. En ningún momento el navegador accede directamente a la base de datos; todo pasa por la API.
 
<br><br>
 
[[#Introducción a Vivait Supervisor 2.0| Volver arriba]] / [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_4.0  Volver al índice]
 
<br><br>
 
  
===== Seguridad de Vivait Supervisor 2.0 =====
+
Ahora crearemos el recurso para montar la partición de mysql en el directorio que creamos.
<br><br>
 
El acceso, del usuario a la aplicación, está controlado mediante validación de tokens y acceso a la aplicación correspondiente.<br>
 
ver [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit_5.0#Submen.C3.BA_Permisos_a_usuarios Usuarios]
 
<br><br>
 
La aplicación ''CALL_CENTER'' es la que gestiona los perfiles del usuario para Vivait-Supervisor, según la siguiente tabla:
 
<br><br>
 
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
 
! align=center style="background-color:#0099ff;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.3cm;color:#ffffff;" | '''''Perfil de Usuario'''''
 
! align=center style="background-color:#0099ff;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.3cm;color:#ffffff;" | '''''Nivel administración'''''
 
! align=center style="background-color:#0099ff;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.3cm;color:#ffffff;" | '''''Funciones'''''
 
|-
 
| style="text-align: center; font-weight: bold;padding:0.3cm;" |Administración
 
| | Distinto de Ninguno:
 
: - '''Alto''',
 
: - '''Medio''' o
 
: - '''Bajo'''.
 
| | Configuración y utilización de dashboard.
 
|-
 
| style="text-align: center; font-weight: bold;padding:0.3cm;" |Consulta
 
| | '''Ninguno'''
 
| | Utilización de dashboard.
 
|-
 
|}
 
<br><br>
 
El usuario no tiene acceso a Vivait-Supervisor si no tiene asignada la aplicación ''CALL_CENTER''.
 
<br><br>
 
El proceso de validación que se sigue dentro del sistema es el siguiente:
 
<br><br>
 
'''Paso 1 Autenticación inicial'''
 
<br><br>
 
: • Al introducir sus credenciales el usuario se valida a través del servicio de autenticación ''sercen''<br>
 
                https://172.25.128.92/sercen/postautenticar1
 
: • Sercen genera un token firmado que identifica la sesión del usuario.
 
<br><br>
 
'''Paso 2 Validación interna de permisos'''
 
<br><br>
 
: • Una vez que el frontend tiene el token, cada petición pasa por una validación de la API del tomcat:<br>
 
:: En la misma se comprueba que el usuario tiene permisos para el recurso que está intentando utilizar, según la tabla anterior.<br>
 
::* Si el usuario tiene un perfil de administrador puede configurar (crear, borrar o gestionar) y consultar dashboard.<br>
 
::* Si el usuario tiene un perfil de consulta solo puede consultar dashboard ya configurados, no puede gestionarlos.<br>
 
<br><br>
 
'''Paso 3 Proxy inverso apache-tomcat'''
 
<br><br>
 
: • Apache actúa como punto de entrada único:
 
:: - El usuario solo ve URLs de apache.
 
:: - Las peticiones que requieren lógica del backend se redirigen internamente a tomcat.
 
:: - Esto se consigue mediante proxy inverso, por ejemplo:<br>
 
:::/Vivait-Supervisor/ → servido por apache<br>
 
                https://172.25.128.92/Vivait-Supervisor/
 
:::Apache las pasa a Tomcat de forma transparente para el usuario<br>
 
                https://172.25.128.92/Vivait-Supervisor/tablas/TablaComponenteDinamicoAjax
 
: • El navegador utilizado por el usuario nunca ve al módulo tomcat.
 
<br><br>
 
[[#Introducción a Vivait Supervisor 2.0| Volver arriba]] / [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
==== Descripción de la interfaz de Vivait Supervisor 2.0 ====
+
Vamos a crear restricciones para asegurarnos que los recursos estén todos en el nodo correcto y que arrancan en orden.
<br><br>
 
Este apartado se trata en [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/VIVAit_Supervisor#Descripción_de_la_interfaz_de_Vivait_Supervisor_2.0 Vivait Supervisor]
 
<br><br>
 
[[#Introducción a Vivait Supervisor 2.0 | Volver arriba]] / [https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
<br><br>
 
  
== Puesto de trabajo ==
+
Vamos a configurar que la partición se monte en el nodo que sea master que la ip flotante este en este nodo y arranque después de haber montado la partición.
El puesto de trabajo del agente en la plataforma '''''VIVA'''''it  (para el producto '''''VIVA'''''it Suite) estará compuesto por:
 
* PC (típicamente windows) en el que reside la aplicación '''''VIVA'''''it Desk
 
* Terminal telefónico con extensión física asociada.
 
  
Para más información [[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Puestos | ver sección Portal de administración-VIVAit Suite ACD+ - Puestos]].
+
pcs cluster cib fs_mysql_cfg
 +
pcs -f fs_mysql_cfg resource create DRBDfsMYSQL Filesystem device="/dev/drbd0" directory="/HDmysql" fstype="ext4"
 +
pcs -f fs_mysql_cfg constraint colocation add DRBDfsMYSQL with DRBDmysqlClone INFINITY with-rsc-role=Master
 +
pcs -f fs_mysql_cfg constraint order promote DRBDmysqlClone then start DRBDfsMYSQL
 +
pcs -f fs_mysql_cfg constraint colocation add IP-MYSQL with DRBDfsMYSQL INFINITY
 +
pcs -f fs_mysql_cfg constraint order DRBDfsMYSQL then IP-MYSQL
 +
pcs cluster cib-push fs_mysql_cfg
 +
pcs status
  
=== Relación PC/teléfono en puesto de trabajo ===
+
La salida mostrará lo siguiente:
  
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
+
[[File:cluster17.png|700px]]
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.
 
==== 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.
+
Nos indica que el Filesystem está creado y montado en el nodo nodo-vc-01.
 +
 
 +
Ahora haremos lo mismo para la partición de Asterisk.
  
A continuación se reflejan los cambios más habituales:
+
pcs cluster cib fs_aster_cfg
 +
pcs -f fs_aster_cfg resource create DRBDfsASTER Filesystem device="/dev/drbd1" directory="/HDaster" fstype="ext4"
 +
pcs -f fs_aster_cfg constraint colocation add DRBDfsASTER with DRBDasterClone INFINITY with-rsc-role=Master
 +
pcs -f fs_aster_cfg constraint order promote DRBDasterClone then start DRBDfsASTER
 +
pcs -f fs_aster_cfg constraint colocation add IP-ASTER with DRBDfsASTER INFINITY
 +
pcs -f fs_aster_cfg constraint order DRBDfsASTER then IP-ASTER
 +
pcs cluster cib-push fs_aster_cfg
 +
pcs status
  
{| class="wikitable"
+
Vemos que ya tenemos las 2 particiones montadas.
|-
 
! Cambio !! Procedimiento !! Punto de acción
 
|-
 
|rowspan="2"| 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
 
|-
 
| rowspan="2"| 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
 
|}
 
<!--
 
[[File:relacion_puesto_agente.png|center|500px]]
 
-->
 
  
=== Estructura de aplicaciones en puesto de trabajo ===
+
[[File:cluster18.png|700px]]
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
 
{| class="wikitable"
 
|-
 
! Fichero !! Descrición
 
|-
 
| Vivait-desk.exe || Contiene la aplicación '''''VIVA'''''it 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 '''''VIVA'''''it Desk
 
|-
 
|}
 
  
=== Secciones de utilidad en nimitz.ini ===
 
  
==== Configuración del puesto de agente ====
+
======  Copiar datos de Asterisk a partición drbd. (En nodo 1) ======
  
El fichero nimitz.ini contiene la configuración del puesto de agente; sus principales parámetros son:
+
Esto hay que realizarlo en el nodo en el que está montada la partición drbd para asterisk. Estará montado en la carpeta /HDaster
  
{| class="wikitable" border="0" style="background:#ffffff" align="top"
+
cd /HDaster/
|-  
+
tar -zcvf etc-asterisk.tgz /etc/asterisk
| |''' Fichero'''
+
tar -zxvf  etc-asterisk.tgz
|| '''Descripción'''
+
rm etc-asterisk.tgz
|-
+
tar -zcvf var-lib-asterisk.tgz /var/lib/asterisk
|Sección [bd1]
+
tar -zxvf  var-lib-asterisk.tgz
||host="ip_BBDD_tiempo_real"
+
rm var-lib-asterisk.tgz
puerto="Nº puerto"
+
tar -zcvf usr-lib-asterisk.tgz /usr/lib/asterisk
basedatos="nimitz"
+
tar -zxvf  usr-lib-asterisk.tgz
usuario="nimitz"
+
rm usr-lib-asterisk.tgz
clave="UIk5jMY9PVX6ogg="
+
tar -zcvf var-spool-asterisk.tgz /var/spool/asterisk
 +
tar -zxvf  var-spool-asterisk.tgz
 +
rm var-spool-asterisk.tgz
 +
 
 +
====== Borrar los directorios de asterisk y crear enlaces simbólicos. (En los 2 nodos) ======
  
Contiene información para la conexión a BBDD de tiempo real, en la que '''''VIVA'''''it Desk fundamentalmente inserta información
+
Borraremos los directorios y crearemos los enlaces simbólicos necesarios.
|-
 
|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 '''''VIVA'''''it Desk solo leerá información
 
|-
 
|Sección [telefono]
 
||pruebas=1 (Valores válidos 0 ó 1)
 
Activación de funcionalidad "servicio técnico" en '''''VIVA'''''it Desk.
 
Cuando usamos el parámetro pruebas=1 permitimos abrir más de una sesión de '''''VIVA'''''it Desk; esto puede provocar que el programa no responda y estemos obligados a resetear la aplicación
 
  
puesto="Nombre puesto"
+
rm -rf /etc/asterisk
|-
+
ln -s /HDaster/etc/asterisk /etc/asterisk
|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)
+
rm -rf /var/lib/asterisk
 +
ln -s /HDaster/var/lib/asterisk /var/lib/asterisk
  
'''consola=0''' (Si el nivel de trazas es 3 no debemos utilizar el valor consola=1, impedirá que arranque el desk)
+
rm -rf /usr/lib/asterisk
 +
ln -s /HDaster/usr/lib/asterisk /usr/lib/asterisk
  
'''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.
+
rm -rf /var/spool/asterisk
 +
ln -s /HDaster/var/spool/asterisk /var/spool/asterisk
  
'''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
+
======  Copiar datos de mysql a partición drbd. (En 1 nodo) ======
|}
 
  
=== Parámetros en invocación a '''''VIVA'''''it Desk ===
+
Esto hay que realizarlo en el nodo en el que está montada la partición drbd para mysql. Estará montado en la carpeta /HDmysql
  
La aplicación '''''VIVA'''''it Desk puede ser invocada con una serie de parámetros que condicionan su funcionamiento; los parámetros son:
+
cd /HDmysql/
* Primer parámetro: Nombre del archivo .ini; usado como alternativa al fichero por defecto "nimitz.ini"
+
tar -zcvf var-lib-mysql.tgz /var/lib/mysql
* Segundo parámetro: Nombre de puesto; usado como alternativa al nombre de puesto del ordenador
+
tar -zxvf  var-lib-mysql.tgz
* 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
+
tar -zcvf etc-mysql.tgz /etc/mysql
 +
tar -zxvf  etc-mysql.tgz
  
=== 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:
+
======  Borrar los directorios de mysql y crear enlaces simbólicos. (En los 2 nodos) ======
URL="http://IP_Servidor:8180/WSActualizaXML/actualizar.xml"
+
 
BASE_URL_DESCARGAS="http://IP_servidor:8180/XMLFILES/"
+
Los datos contenidos en estos directorios ya no son válidos, borramos los directorios.
 +
 
 +
Los enlaces simbólicos no van a ser necesarios, los vamos a conservar para facilitar el acceso a los directorios de mysql habituales
  
=== Servicio técnico en '''''VIVA'''''it Desk ===
+
rm -rf /var/lib/mysql
La activación de la funcionalidad de servicio técnico en '''''VIVA'''''it 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 '''''VIVA'''''it Desk. Pulsando el botón derecho del ratón sobre la barra '''''VIVA'''''it Desk accederemos a las capacidades de soporte técnico
+
ln -s /HDmysql/var/lib/mysql /var/lib/mysql
<br><br>
+
rm -rf /etc/mysql
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
+
ln -s /HDmysql/etc/mysql /etc/mysql
<br><br>
 
  
== Funcionamiento de la plataforma en modo emergencia ==
 
== Accesos Web ==
 
  
{| class="wikitable"
+
======  Modificar configuración de apparmor para mysql. (En los 2 nodos) ======
|-
 
! Aplicación !! Enlace
 
|-
 
|Portal de administración '''''VIVA'''''it Suite || http://ip_admin:8180/Vivait-Call
 
|-
 
|'''''VIVA'''''it 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
 
|}
 
  
=== Permisos de aplicaciones ===
+
Debemos cambiar la configuración de apparmor para darle a mysql acceso a la nueva localización de los ficheros.
Se crean a través del '''portal de administración ''VIVA''it''' . Debe conocerse como funcionan los ejes [[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Ejes| ver sección Portal de administracion - General - Ejes]] y que pueden existir hasta seis aplicaciones creadas en la plataforma:
 
  
 +
Debemos modificar el fichero /etc/apparmor.d/usr.sbin.mysqld
  
[[File:Permisos-Portal_Administracion.jpg|center]]
+
vi /etc/apparmor.d/usr.sbin.mysqld
  
  
La forma como dar permisos de aplicaciones a un usuario está explicada en la [[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Asignaci.C3.B3n_de_Permisos_de_Usuario_por_Administrador | sección  Portal de administracion - General - Usuarios ]].
+
Y dejarlo configurado con la nueva ubicación de los ficheros. Debe quedar así:
  
== Elementos monitorizados del sistema ==
 
===Generalidades de Zabbix===
 
====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 '''md'''tel 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.  
+
[[File:cluster19.png|300px]]
  
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.
+
[[File:cluster20.png|300px]]
{|
 
|-
 
|
 
Direccion.IP.Zabbix.Server/zabbix
 
|}
 
  
Zabbix posee documentación tanto en wiki, foros y comunidades.Para ampliar la información se puede visitar:
+
Aplicamos los cambios con:
[[http://www.zabbix.com Sitio oficial de Zabbix]]
 
===== 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 [[http://www.zabbix.com 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'''
+
apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
: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'''
+
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
: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'''
+
====== Modificar archivos de configuración de mysql. (En 1 nodo) ======
: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.
 
  
=====Discovery=====
+
Los enlaces simbólicos no funcionan con mysql, por eso necesitamos modificar archivos de configuración de mysql para cambiar las rutas de acceso a los archivos creado en el directorio /HDmysql.
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.
+
Esto hay que realizarlo en el nodo que tiene montada la partición /HDmysql.
|}
 
La explicación de como configurarla se encuentra en el manual oficial [[https://www.zabbix.com/documentation/2.2/manual/discovery/network_discovery/rule | Zabbix detección de redes]].
 
  
=====Notificaciones=====
+
Modificamos el fichero my.cnf.fallback
  
Necesariamente, debe darse de alta al usuario y darse de alta el servidor de correo electrónico para poder ser capaz de enviar correos.
+
vi  /HDmysql/etc/mysql/my.cnf.fallback
  
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 [[https://www.zabbix.com/documentation/2.2/manual/quickstart/notification  | manual oficial de Zabbix 2.2]]
 
  
=====Usuarios=====
+
Deberá quedar así.
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 [[https://www.zabbix.com/documentation/2.2/manual/web_interface/user_profile || manual oficial ]].
 
 
=====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 [[https://www.zabbix.com/documentation/2.2/manual/config/visualisation | manual oficial]]
 
======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.
 
[[File:EjemploGrafica.png|center|750px]]
 
Los valores min / avg / max que Zabbix obtiene y representa son de un registro de datos de la tabla tendencias.
 
  
======Screens======
+
[[File:cluster21.png|300px]]
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.
 
  
[[File:EjemploScreen.png|center|750px]]
+
Ahora el fichero mysql.cnf.
  
======Maps======
+
  vi /HDmysql/etc/mysql/mysql.cnf
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.
 
[[File:EjemploMaps.png|center|750px]]
 
[[File:EstadosMaps.png|center|750px]]
 
  
 +
Y quedará así.
  
======Monitorizar el estado de los raid======
+
[[File:cluster22.png|400px]]
Los siguientes comandos son necesarios para poder monitorizar el estado de los raid.
 
La orden:
 
  
>hpacucli "ctrl slot=1 logicaldrive 1 show status"
+
El fichero mysqld.cnf.
  
nos proporciona el estado de un raid (p.e. logicaldrive 1 (931.5 GB, 1): Interim Recovery Mode).
+
vi /HDmysql/etc/mysql/mysql.conf.d/mysqld.cnf
  
La orden:
+
[[File:cluster23.png|400px]]
>hpacucli "ctrl slot=1 logicaldrive all show status"
 
  
nos proporciona el estado de todos los raid.
 
  
p.e.:
+
Y por último el fichero my.cnf.
logicaldrive 1 (931.5 GB, 1): Interim Recovery Mode
 
  
logicaldrive 2 (1.8 TB, 1): OK.
+
vi /HDmysql/etc/mysql/my.cnf
 +
 
 +
Y quedara de la siguiente manera. (datadir / log_bin / includedir)
 +
 
 +
 
 +
[[File:cluster24.png|500px]]
  
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".
+
[[File:cluster25.png|500px]]
  
===Zabbix en '''MD'''tel===
 
  
 +
[[File:cluster26.png|400px]]
  
==== Configuraciones de Zabbix ====
 
  
===== Agentes Zabbix =====
+
======  Configuración del arranque de mysql. (En 1 nodo) ======
{|-
 
|
 
|
 
'''Nota:''' Hay que instalar un agente Zabbix en cada maquina que se quiera monitorizar.
 
|}
 
  
El agente de Zabbix puede recoger datos:
+
Vamos a configurar el arranque de mysql y le vamos a poner como condiciones que este en el nodo que este la ip flotante de mysql y que arranque después de que esté la ip.
*'''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''''''.
 
  
 +
pcs cluster cib mysql_cfg
 +
pcs -f mysql_cfg resource create MYSQL ocf:heartbeat:mysql binary="/usr/sbin/mysqld" config="/etc/mysql/my.cnf"  datadir="/var/lib/mysql" pid="/var/run/mysqld/mysqld.pid" socket="/var/run/mysqld/mysqld.sock" additional_parameters="--bind- address=0.0.0.0" op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=30s
 +
pcs -f mysql_cfg constraint colocation add MYSQL with IP-MYSQL INFINITY
 +
pcs -f mysql_cfg constraint order IP-MYSQL then  MYSQL
 +
pcs cluster cib-push mysql_cfg
 +
pcs status
  
  
====== Configurar agente de forma pasiva======
+
====== Configuración del arranque de Asterisk. (En 1 nodo) ======
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.
 
  
{|
+
  pcs cluster cib aster_cfg
|-
+
  pcs -f aster_cfg resource create ASTER lsb:asterisk
|
+
  pcs -f aster_cfg constraint colocation add ASTER with IP-ASTER INFINITY
  ##### Passive checks related
+
  pcs -f aster_cfg constraint order IP-ASTER then ASTER
  ### Option: Server
+
  pcs cluster cib-push aster_cfg
  #      List of comma delimited IP addresses (or hostnames) of Zabbix servers.
+
  pcs status
  #      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
 
|}
 
  
====== 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.
+
====== Mover los recursos a otra máquina. (En 1 nodo) ======
  
{|
+
El crear 2 particiones separadas para el Asterisk y el mysql nos da la posibilidad de correr un servicio en cada máquina y tener los 2 nodos activos.
|-
 
|
 
##### 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:
+
Para mover un recurso de nodo utilizaremos el siguiente comando en el nodo que está el recurso ejecutándose.
{|
 
|-
 
|
 
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.
+
  pcs resource move DRBDfsASTER
Tras la configuración del fichero, debemos reiniciar el servicio de los agentes.
 
{|
 
|-
 
|
 
  sudo service zabbix-agent restart
 
|}
 
  
===== Scripts del Servidor Zabbix =====
+
Esto crea restricciones locales para evitar que el recurso vuelva a este nodo (Puede tener prioridad de ejecución en este nodo y haría que volviera a este nodo automáticamente al estar online).
{|
 
|
 
|
 
'''Nota''': <small>No olvidar que en la misma maquina del server Zabbix, debe configurarse como agente de Zabbix.</small>
 
|}
 
Después de realizar la [[# Instalación de Zabbix | Instalación de Zabbix ]] correctamente. Se han creado otros ficheros scripts (''scripts propios de '''md'''tel'') 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.
+
La restricción que crea banea el nodo para este recurso, si queremos quitar la restricción creada.
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.
+
pcs resource clear DRBDFsAst
  
Si visualizo que "............" aparece:
 
  
*****  root zabbix
+
-----------------------------------------------------------------------------------------------------------------------------
  
======zabbixSenderACDBD.pl======
+
===== Instalación y configuración del Cluster hasta la versión '''''<span style="color:#144F9B">VIVA</span>'''''it 3.3 =====
 +
.
  
'''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'')
+
Hasta la versión '''3.3''' de '''''<span style="color:#144F9B">VIVA</span>'''''it , la instalación y configuración del cluster se hace de la siguiente forma:
  
'''Archivo de configuración:''' zabbixSenderACDBD.pconf
 
  
{|
+
'''[[Instalación y configuración del Cluster hasta la versión VIVAit 3.3]]'''
|-
 
|
 
<small>'''$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)</small>
 
|}
 
  
  
======zabbixSenderACD.pl======
 
  
'''Uso:''' Obtener el PID de Asterisk para revisar si se ha reiniciado en caso de que cambie.
+
<!--
 +
=== Nivel matriz de conmutación ===
 +
-->
 +
<br><br>
  
'''Ubicación:''' Servidor ACD.
+
=== Gateways ===
 +
<br><br>
  
'''Parámetros:''' Ruta al archivo de configuración (Por ejemplo: ''/etc/MDtel/zabbixSenderACD.pconf'').
+
El concepto de gateway como tal no existe en la plataforma '''''VIVA'''''it; existen nodos de ACD y nodos de corporativa.
  
'''Archivo de configuración:''' zabbixSenderACDBD.pconf.
+
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
|-
 
|
 
<small>'''$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)</small>
 
|}
 
       
 
  
======zabbixSenderCTI.pl======
+
Incluimos no obstante en este apartado los diagnósticos y operaciones básicos de conexiones a sistemas externos o RTC
  
'''Uso:''' Obtener estado y los distintos valores de vivait-cti.
+
Para verificar los enlaces establecidos ejecutamos el siguiente comando en el terminal: '''sip show peers'''  
  
'''Ubicación:''' Servidor donde se ejecute vivait-cti. Normalmente el servidor ACD.
+
Al ejecutar este comando obtenemos la salida:
  
'''Parámetros:'''
+
[[Archivo:Enlace_Exterior.png |center]]
{|
 
|-
 
|
 
<small>'''--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.</small>
 
|}
 
  
 +
Las columnas ''Host'' y ''Port'' nos muestran las conexiones establecidas y nos informa de un posible problema de conexión.
  
======zabbixSender-intz-nimitz.pl======
+
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:
  
'''Uso:''' Obtener estado y los distintos valores de intz-nimitz.
 
  
'''Ubicación:''' Servidor donde se ejecute intz-nimitz.
+
[[Archivo:Ejemplo_no_conexion.png |center]]
  
'''Parámetros:'''
+
<!--
{|
+
<span style="background:#00FF00">FALTA AQUI DIAGNOSTICOS Y OPERACIONES DE ENLACES EXTERNOS</span>
|-
+
-->
|
 
<small>'''--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.</small>
 
|}
 
       
 
  
======zabbixSenderMotorSal.pl======
 
  
'''Uso:''' Obtener estado y los distintos valores de motorSal.
 
  
'''Ubicación:''' Servidor donde se ejecute motorSal.
 
  
'''Parámetros:'''
+
=== Grabación ===
{|
+
<br><br>
|-
 
|
 
<small>'''--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.</small>
 
|}
 
  
======zabbixSenderMyACDSuperv.pl======
+
==== 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:
  
'''Uso:''' Obtener estado y los distintos valores de myAcdSuperv.
+
* El nodo, es decir todo lo que el nodo enrute
 +
* Prerutas
 +
* Objetos: que son las extensiones, usuarios, grupos corporativos, etc.
  
'''Ubicación:''' Servidor donde se ejecute myAcdSuperv.
+
Tenemos tres formas de grabar:
  
'''Parámetros:'''
+
* Grabar con beep periódico
{|
+
* Grabar sin beep periódico
|-
+
* Descartar grabación
|
 
<small>'''--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.</small>
 
|}
 
  
======zabbixSenderRecordNodo.pl======
+
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.
  
'''Uso:''' Obtener estado y los distintos valores de recordNodo.
+
Al igual pasa si tenemos que un elemento tenga descartar la grabación. La grabación no se inicia.
  
'''Ubicación:''' Servidor donde se ejecute recordNodo.
+
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.
  
'''Parámetros:'''
+
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.
{|
 
|-
 
|
 
<small>'''--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.</small>
 
|}
 
  
  
======zabbixSenderRecordCentral.pl======
+
==== Como configurar la grabación bajo demanda ====
'''Uso:''' Obtener estado y los distintos valores de recordCentral.
 
  
'''Ubicación:''' Servidor donde se ejecute recordCentral.
+
Para activar la grabación bajo demanda es necesario activar el '''MixMonitor'''.
  
'''Parámetros:'''
+
En el Nodo hay que identificar '''Grabar por enrutamiento''' = '''Sin grabación'''.
{|
 
|-
 
|
 
<small>'''--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.</small>
 
|}
 
  
  
A continuación se muestra una tabla resumen de los distintos scripts y sus funcionalidades:
 
  
[[Archivo:Zabbix_scripts.png |960px]]
+
[[File:Ejemplo activacion grabacion en nodo CORP-2.jpg|centro]]
  
====== Dimensionamiento del servidor (Startpollers) ======
 
{|
 
|
 
|
 
'''Nota''': <small>EL parámetro StartPollers es un <u>parámetro numérico</u> 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.</small>
 
|}
 
  
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.
 
  
=====Templates=====
+
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'''.
  
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 '''md'''tel hemos creado plantillas propias que facilitan estos procesos, los cuales necesitaremos [[#Importar templates |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:
+
[[File:NODO ACD-2.jpg|centro]]
  
{| class="wikitable" style="text-align:center;"
 
|-
 
! 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
 
|-
 
|}
 
  
  
 +
En la Campaña (asignar la cola a la campaña; si se pone el modo de grabación en la cola, '''no funciona <big><sup>'''**'''</sup></big>''', 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'''.
  
{| class="wikitable" style="text-align:center;"
 
|+ '''Dependiendo del tipo de nodo:'''
 
|-
 
! 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|| - || -
 
|-
 
|}
 
  
 +
 +
[[File:MODO DE GRABACION EN CAMPAÑA-2.jpg|centro]]
  
  
{| class="wikitable" style="text-align:center;"
 
|+ '''Dependiendo del tipo de Base de dato'''s:
 
|-
 
! Templates !! BBDD <br />Tiempo Real !! BBDD<br /> 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|| - || - || -
 
|-
 
|}
 
  
  
 +
El formulario de '''''VIVA'''''it  Desk que se abra cuando entre la llamada que queremos grabar ha de tener los botones de grabación.
  
{| class="wikitable" style="text-align:center;"
 
|-
 
! 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|| -
 
|-
 
|}
 
  
 +
[[File:Ejemplo de formulario con botones de grabacion.jpg|centro]]
  
  
{| class="wikitable" style="text-align:center;"
 
|-
 
! 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|| -
 
|-
 
|}
 
  
 +
Trazas '''''VIVA'''''it  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'''.
  
{| class="wikitable" style="text-align:center;"
 
|+ '''Monitorización'''
 
|-
 
! 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|| - || -
 
|-
 
|}
 
  
 +
'''<big><sup><big>'''**'''</big></sup> Hemos visto que la grabación Bajo demanda en los Grupos ACD si funciona.</big>'''
  
 +
Para activarla hay que entrar en la configuración del Grupo ACD que queremos grabar y activar la grabación por enrutamiento:
  
======'''Resumen'''======
 
  
 +
[[File:cap_1.jpg|600px]]
 +
 +
 +
Además indicamos en el modo de grabación: Grabación bajo demanda inicio sin grabar.
 +
 +
 +
[[File:cap_2.jpg|600px]]
 +
 +
 +
En la consola vemos los siguientes datos:
 +
 +
 +
[[File:cap_3.jpg|600px]]
 +
 +
==== 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.
 +
 +
==== 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:
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
!Plantillas MDTEL !! Trigger !! Descripción !! Severidad !! Actuación a llevar a cabo
+
| 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.
 +
 
 +
==== 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.
 +
 
 +
==== 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:
 +
 
 +
{| class="wikitable"
 
|-
 
|-
|Template DRBD||DRBD balanceado en {HOST.NAME}||El DRBD ha balanceado en Host||Desastre||Revisar ambos nodos del cluster.  
+
| root@smadavacdrecord1:~# nc localhost 1114
Comprobar que el DRBD está sincronizado (cat /proc/drbd).
+
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.
 +
 
 +
==== Comprobación de grabaciones que se hayan quedado enganchadas en un nodo ====
 +
Podemos fijarnos en los dos comandos, para '''''nc ip_maquina 1114''''':
 +
{| class="wikitable"
 
|-
 
|-
|Template DRBD||DRBD desconectado en {HOST.NAME}||El DRBD esta desconectado en Host||Desastre||Revisar Host. Comprobar estado del DRBD (cat /proc/drbd)
+
| 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.
 +
 
 +
==== 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:
 +
 
 +
{|class="wikitable"
 
|-
 
|-
|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
+
! Filesystem !! Size !! Used !! Avail !! Use% !! Mounted on
 
|-
 
|-
|Template motorSal||motorSal caido||El motorSal esta caido||Desastre||Reiniciar motorSal.
+
| udev || 486M || 4,0K || 486M || 1,00% || /dev
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.
+
| tmpfs || 100M || 416K || 99M || 1,00% || /run
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.
+
| '''/dev/vda1''' ||''' 236M''' ||''' 68M''' ||''' 156M''' ||''' 31,00% '''||''' /boot'''
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.  
+
| tmpfs || 100M || 48K || 100M || 1,00% || /var/spool/asterisk/monitor
Revisar sip_WEB.conf
+
 
 +
|}
 +
 
 +
Nos fijaríamos en la línea marcada en negrita, el campo "Use%" indicara el porcentaje de almacenamiento temporal de grabaciones en un nodo.
 +
 
 +
<br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
 +
 
 +
===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.  
 +
====CallSpy ====
 +
{|
 
|-
 
|-
|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.
+
'''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:
 +
 
 +
{|
 
|-
 
|-
|Template Vivait-Call bdCentral||Error en bdCentral||Se ha dado un error en el bdCentrlal||Alta||Revisar BBDD central.
+
|
|-
+
CallSpy(<tipoEspiado>,<expRegEspiado>,<parametrosConf>)
|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
+
|}
 +
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.
 +
====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:
 +
{|
 
|-
 
|-
|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
+
CallSpyee([CID_NUM],[cola],[vdn],[agen],[exten])
 +
<small>'''Nota:'''No son parámetros obligatorios, por lo que no hace falta rellenar todos los campos pero si respetar sus posiciones separadas por comas.<small>
 +
|}
 +
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:
 +
{|
 
|-
 
|-
|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
+
exten => s,n,CallSpyee(,,,${EXTENSION})
 +
|}
 +
 
 +
====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).
 +
{|
 
|-
 
|-
|Template Vivait-Suite ACD||VivaitCTI caido||El CTI está caido||Alta||Reiniciar vivait-cti. Comprobar en log (/var/log/vivait-cti.log) la causa
+
|
 +
Ejemplo '''MD'''tel:  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)  
 +
<small>'''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. <small>
 +
|}
 +
 
 +
*Paso 2.Llamar a CallSpy con la configuración deseada.
 +
{|
 
|-
 
|-
|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.
+
Ejemplo '''MD'''tel:  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.  
|Template Vivait-Suite BBDD||MyACDSuperV caido||MyACDSuperV esta caido||Alta||Iniciar myAcdSuperv. Comprobar en log /var/log/myAcdSuperv.log) la causa.
+
;------------------------------------------------------------------------  
|-
+
; Intrusion a Espiado
|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.
+
exten => intrusionEspiado,1,NoOp
|-
+
exten => intrusionEspiado,n,GotoIf($["${datoServicio}"=""]?colgar)  
|Template Vivait-Suite GW||{HOSTNAME} Asterisk PID cambiado||El PID de Asterisk ha cambiado||Alta||Comprobar que ha arrancado correctamente.
+
exten => intrusionEspiado,n,CallSpy(c,${datoServicio},w)  
Salvar core (/tmp/core.XXX) y full (/var/log/asterisk/full) a ubicación segura.
+
exten => intrusionEspiado,n(colgar),Hangup
|-
+
|}
|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.
+
* Paso 3. Llamar a CallSpyee con la configuración de las llamadas candidatas a ser escuchadas.
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||Comprobar con “ps aux | 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.
 
 
|-
 
|-
 +
|
 +
Ejemplo '''MD'''tel:
 +
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
 
|}
 
|}
  
 +
<br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
  
* El template OS Linux tiene asociado el Template App Zabbix Agent.
+
=== Calendarios ===
Una '''base de datos unificada''' es una base de datos de tiempo real junto a  una base de datos de replica
 
  
====== Importar templates======
+
{| class="wikitable"
 +
| Nota: '''En la versión de VIVAit 3.5 , Se tiene que instalar el nuevo servidor de DaviCal. '''
 +
|}
  
Las plantillas propias de '''md'''tel se encuentran en la ruta "'''/usr/src/nimitz/archivos'''" y empiezan con el nombre de "TemplateXXX.xml".
+
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:
|-
 
|
 
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.
+
<big>'''[[medio:Servidor_Calendarios_DAViCal.pdf|Manual de instalación de servidor de calendarios para '''''<span style="color:#144F9B">VIVA</span>'''''it 3.5]]'''</big>
  
[[File:ImportarTemplates.png|750px|center]]
 
  
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".
 
  
===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.
 
  
====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.
 
  
  
[[File:CreacionHost.png|750px|center]]
 
  
Las opciones basicas para configurar un host son las siguientes:
+
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.
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
 
! align=center ;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0cm;color:#ffffff;" | '''''Campos'''''
 
! align=center ;border:0.05pt solid #000000;padding:0cm;color:#ffffff;" | '''''Explicación'''''
 
! align=center ;border:0.05pt solid #000000;padding:0cm;color:#ffffff;" | '''''Valores posibles'''''
 
|-
 
| font-weight: bold;" | '''Host Name'''
 
|  | Definir un nombre para el host.
 
||Se puede utilizar números, letras, espacios y guiones bajos están permitidos.
 
|-
 
| font-weight: bold;" | '''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".
 
|-
 
| font-weight: bold;" | '''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.
+
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: [[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Calendarios |Calendarios]]
  
Templates.
+
http://${NODO.HOST}/dav/html/cal.php/calendars/${DAV.CUENTA}/${DAV.CALENDARIO}
  
Templates MDtel.
+
donde,
  
Zabbix servers.
+
* '''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
  
Linux Servers.
+
Una vez que se carga la url sabremos que el servidor funciona correctamente si visualizamos lo siguiente:
  
Hypervisors.
+
[[Archivo:Captura de pantalla de 2016-07-21 12_43_58.png || 1020px|center]]
  
Virtual machines.
 
  
O crear uno nuevo en '''New group'''.
+
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
| font-weight: bold;" | '''Agent interfaces'''
+
  calendar show calendars
|  |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.
+
calendar show calendar [nombreCalendario]
| | 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.
+
'''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)
  
 +
<br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
  
===== Comprobación de disponibilidad del host=====
+
=== Syslog de agentes ===
Para saber si todo esta bien debemos ver la Z de disponibilidad.  
+
'''''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 :
  
[[File:EstadosZHost.png|750px|center]]
+
* 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 ''VIVA''it'''  configurando unos parámetros para un usuario llamado ''Rastreo BBDD" y ''Rastreo Syslog''. Para más información[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Pesta.C3.B1a_ACD | ver sección  Portal de administración - General - Usuarios - Pestaña ACD  ]].
  
Indicacion de los colores del icono Z:
+
{| class="wikitable" border="0"  align="top"
 
+
|-
* 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.  
+
| align="center" style="background:Lavender; color:Black" |<big>'''Elemento'''</big>
 
+
|align="center" style="background:Lavender; color:Black" | <big>'''Procedimiento'''</big>
* 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.
+
|-
 
+
!colspan="2" width="60 px" style="background:Lavender; color:Black"|Operacion
* Si el icono es verde, esta funcionando correctamente.
+
|-
 
+
|Ubicación del proceso||Script arranque: /etc/init/ rsyslog.conf
 
+
Configuración :
====Indicar que plantilla (template) tendra el host [opcional]====
+
/etc/rsyslog.d/30-vivait-
Tras [[#Importar templates |importar templates]] nos dirigimos al host ya configurado, y en su pestaña de templates pulsamos "add" y añadimos la plantilla/s adecuadas.
+
desk.conf
 
+
|-
====Asignar items al host ====
+
|Arranque||service rsyslog start
{|
+
|-
 +
|Parada||service rsyslog stop
 +
|-
 +
|Reinicio||service rsyslog reload
 +
|-
 +
!colspan="2" width="60 px" style="background:Lavender; color:Black"|Diagnostico
 
|-
 
|-
|
+
|Registro de logs||/var/log/MDtel/vivait-desk.log
'''Nota''':Un host puede tener un ITEM sin necesitad de tener template.
+
Fichero del día actual. se guardan los 30
 +
anteriores comprimidos en tar.g
 
|}
 
|}
  
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".
 
  
[[File:CrearItemEjemplo.png|750px|center]]
 
  
Parametros o campos a rellenar para una configuración básica :
+
'''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
  
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
 
! align=center ;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0cm;color:#ffffff;" | '''''Campos'''''
 
! align=center ;border:0.05pt solid #000000;padding:0cm;color:#ffffff;" | '''''Explicación'''''
 
! align=center ;border:0.05pt solid #000000;padding:0cm;color:#ffffff;" | '''''Valores posibles'''''
 
|-
 
| font-weight: bold;" | '''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.
 
||
 
|-
 
| font-weight: bold;" | '''Type'''
 
|| Indicar de que entidad queremos recibir informacion.
 
||Puede ser al "Agente Zabbix" o a el Hardware como impresoras, switch o routers. 
 
|-
 
| font-weight: bold;" | '''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.
 
||
 
|-
 
| font-weight: bold;" | '''host interface'''
 
|  |Es la direccion de red del servidor zabbix (puede ser uno o mas)
 
|  |
 
||
 
|-
 
| font-weight: bold;" | '''Units'''
 
|  |Es la dirección de red del servidor zabbix (puede ser uno o mas)
 
|  |
 
|-
 
| font-weight: bold;" | '''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.
+
Es muy importante comprobar que el servidor de '''syslog''' escucha por el puerto '''514''':
Para mas informacion [[http://entation/1.8/manual/config/items#zabbix_agent. ver documentación Zabbix]]
+
 +
#################
 +
#### 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 ####
 +
###########################
 +
 
 +
=== 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:
  
===== Ver la información recolectada por el item =====
+
    Ejecutar ps aux | grep asterisk y coger el PID del programa
{|
+
    gdb /usr/sbin/asterisk [PID]
|-
+
    gcore [file]
|
+
 
<small>'''Nota:''' Normalmente para ver la información lo encontraremos en "Monitoring → Latest data",luego
+
<br><br>
clic en el signo "+" en "other" siempre que no pertenezca a una aplicación.  
+
<div style="
En caso contrario, estará bajo el nombre de la aplicación.</small>
+
  text-align:right;
|}
+
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:flecha_verde.png|20px|link=#Diagnósticos y operaciones básicas en VIVAit]][[#Diagnósticos y operaciones básicas en VIVAit | Volver arriba]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:Índice_azul.png|20px|link=#toc]][[#toc | Ir al índice]]
 +
</div>
 +
<div style="
 +
  text-align:right;
 +
  margin-top:20px;
 +
  padding:8px;
 +
  border:1px solid #ccc;
 +
  background-color:#f9f9f9;
 +
  border-radius:6px;
 +
  display:inline-block;
 +
">
 +
[[File:casa.png|20px|link=#]][[# | Página Principal]]
 +
</div>
 +
<br><br>
  
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".
+
== puntos a reasignar ==
 +
===  Servidor de grabación ===
 +
==== 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:
  
[[File:VerInfoITEM.png|750px|center]]
+
*$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 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".
+
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.
  
[[File:VIsualGraficaValorItem.png|center|750px]]
+
<br><br>
Si en un caso usted no observa información le recomendamos:
+
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 
+
<br><br>
* 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.  
+
=== Reporting ===
* El icono "Z" en el host debe estar en color verde.  
+
La aplicación de reporting en general no tiene procesos habituales de operación y mantenimiento.
* Asegure que esta monitoreando el servidor que le agregó este "Item"
+
Los informes son obtenidos desde la interfaz gráfica o mediante un procedimiento de scripting, descritos en “Formato de fichero de intercambio para '''''VIVA'''''it Reporting”.
  
====Configurar los Triggers para los host====
+
==== Formato de fichero de intercambio para '''''VIVA'''''it Reporting ====
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.
+
{| class="wikitable"
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.
+
|-
{|
+
! Nombre !! Descripción !! Ejemplo
 +
|-
 +
| colspan="3"| 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
 
|-
 
|-
|
+
| colspan="3"| Salida
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 :
 
 
 
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
 
! align=center ;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0cm;color:#ffffff;" | '''''Campos'''''
 
! align=center ;border:0.05pt solid #000000;padding:0cm;color:#ffffff;" | '''''Explicación'''''
 
! align=center ;border:0.05pt solid #000000;padding:0cm;color:#ffffff;" | '''''Valores posibles'''''
 
 
|-
 
|-
| font-weight: bold;" | '''Name'''
+
| FIC_extension || Extensión de fichero de salida: PDF, XLSX, CSV || PDF
| | 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.
 
||
 
 
|-
 
|-
| font-weight: bold;" | '''Expression'''
+
| FIC_tipo_entrega || 'P': Pantalla, 'D': Directorio, 'C': Correo || D
|| 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
 
 
|-
 
|-
| font-weight: bold;" | '''Key'''
+
| FIC_destino || Si 'C', dirección de correo, si 'D', ruta del directorio || D:\informes\
|  | 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.
 
||
 
 
|-
 
|-
| font-weight: bold;" | '''Descripción'''
+
| colspan="3"|  Plantilla
| Una descripción breve sobre el trigger.
 
||
 
 
|-
 
|-
| font-weight: bold;" | '''Severity'''
+
| INF_modelo || Ruta del fichero de plantilla || C:\Modelos\llamadas.rep
| | everidad distinguida por colores,
+
|-
|| No classified
+
| INF_descripción || Descripción del informe || Informe detallado de llamadas
Information
+
|-
Warning
+
| colspan="3"| Base de datos
  Average
+
|-
High
+
| BD_ip || IP o nombre de máquina ||
Disaster
+
|-
|}
+
| BD_puerto || Puerto de MySQL ||
 
+
|-
 
+
| BD_base_datos || Nombre de base de datos ||
 
+
|-
===== Comprobar el estado del trigger =====
+
| BD_usuario || Usuario de base de datos ||
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.
+
|-
 
+
| BD_clave || Clave de acceso cifrada ||
[[File:EstadoTrigger.png|center|750px]]
+
|-
 
+
| colspan="3"|  Parámetros
====Asociar un Action al trigger====
+
|-
 
+
| PAR_desde_vis || Fecha inicial de selección en formato legible (o '-' si no hay) || 01/01/2016
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:
+
|-
 
+
| PAR_hasta_vis || Fecha final de selección en formato legible (o '-' si no hay) || 31/01/2016
# A través de mensajes simples, alertando al instante.
+
|-
# Escalar los mensajes hacia el jefe y/o otros grupos.
+
| PAR_01 || Parámetro opcional ||
# 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.
+
| PAR_20 || Parámetro opcional ||
 
+
|}
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]].
+
 
-->
+
 
 
+
El fichero tendrá un nombre único para permitir la generación simultánea de informes.
== Integraciones con servicios externos ==
+
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”
=== Presencia con Openfire ===
+
“C:\Archivos de Programa\MDtel\Nimitz\LanzaInformes\NIM00001.tmp”
'''''VIVA'''''it se integra con servidor XMPP Openfire en su versión 3.10.2 (última probada)
+
 
 
+
Ejemplo de fichero:
Además del servidor, es necesario instalar un plugin de integración con asterisk 13, denominado "asterisk IM", versión 1.4.1
+
{| class="wikitable"
 
+
|-
La instalación del servidor Openfire es una instalación estándar, realizada de paquete
+
| SQL_selec=(DAT_ACUMULADOS_COLAS.ID_COLA in (11))
 
+
 
La instalación del plugin es un "jar" que se carga desde la pagina de plugins de openfire
+
SQL_select_leido=Skill igual a 60310
 
+
 
Con esto conseguiremos comunicar asterisk y OPenfire de manera que:
+
SQL_orden=
*Los estados telefónicos de una extensión '''''VIVA'''''it  se reflejen en Openfire
+
FIC_extension=pdf
*Poder marcar desde los clientes de IM instalados en los puestos
+
 
*Ver en el cliente llamadas entrantes al teléfono
+
FIC_tipo_entrega=P
 
+
 
-----
+
FIC_destino=C:\
 
+
 
'''<big>Enlaces de interes:</big>'''
+
INF_modelo=skill_setsi.rep
 
+
 
[http://www.igniterealtime.org/projects/openfire/ Página proyecto openfire]
+
INF_descripcion=Skill. SETSI
 
+
 
[https://community.igniterealtime.org/thread/56076 Página proyecto "asterisk IM"]
+
BD_ip=172.25.1.2
 
+
 
 
+
BD_puerto=3306
=== 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.
+
BD_base_datos=nimitz
 
+
 
Para instalar '''OpenMettings''' debe seguir el [[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manuales_de_instalaci%C3%B3n#Instalaci.C3.B3n_de_Openmeetings | manual de Instalación de Openmeetings]]
+
BD_usuario=nimitz
 
+
 
 
+
BD_clave=UIk5jNY9PVX5ogg=
 
+
 
=== Integración de portal usuario de VIVAit Call Web Microsoft Teams ===
+
PAR_desde_vis=-
 
+
 
 
+
PAR_hasta_vis=-
La integración de VIVAit Call Web con MS Teams se realiza en tres pasos; dos
+
 
de ellos han de ser realizados íntegramente por el cliente puesto que requieren
+
PAR_01=
realizar modificaciones en su entorno de gestión de Microsoft Azure y Teams.
+
|}
 
+
 
 
+
 
[[Archivo:teams-esquema.png|400px|center]]
+
==== Resumen de significado de columnas en reporting histórico ====
 
+
Esta información se puede consultar en el siguiente enlace:
 
+
 
 
+
http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Documentacion_de_usuario_VIVAit_Suite_3.3#Resumen_del_valor_de_las_columnas_que_aparecen_en_los_informes
A continuación se muestra que debe hacer el administrador de Teams y de Mdtel para la integración con Ms Teams , los pasos consisten en:
+
 
{| class="wikitable"
+
<!--
|-
+
===== Agente,asistencia diaria y agente. Asistencia diaria del grupo =====
! Responsable !! Pasos
+
 
|-
+
'''• Tiempo con personal:''' Tiempo que ha estado conectado el agente.<br/>
|Administrador de Teams y Mdtel || Generar el archivo .zip con todos los elementos requeridos para una integrar una nueva aplicación en MS Teams. Este archivo .zip es diferente para cada cliente de VIVAit Call Web y tiene que ser generado para cada caso
+
'''• Tiempo ACD:''' Tiempo de conversación ACD de las llamadas contestadas
|-
+
o realizadas por el agente excluido el tiempo de retención.<br/>
 
+
'''• Tiempo ACW:''' Tiempo dedicado por el agente a tareas administrativas
|}
+
tras finalizar las llamadas contestadas por el agente.<br/>
 
+
'''• Tiempo de llamado:''' Tiempo de ring en llamadas ACD.<br/>
 
+
'''• Tiempo disponible:''' Tiempo que el agente estuvo conectado y no está
 
+
incluido en ninguno de los anteriores.<br/>
'''PASOS:'''
+
'''• Tiempo AUX:''' Tiempo que el agente estuvo en pausa<br/>
 
+
'''• Tiempo retención:''' Tiempo que las llamadas estuvieron retenidas por
'''Generar archivo ZIP con todos los elementos'''
+
el agente.<br/>
 
+
'''• Llamadas ACD:''' Número de llamadas ACD contestadas o realizadas por
El paso ha de ser realizado por un administrador de Teams y mdtel
+
el agente.<br/>
 
+
'''• Llamadas transferidas:''' Número de llamadas ACD que fueron
Debemos disponer de los valores :
+
transferidas por el agente.
 
+
 
* ''' AAD_APLICACION_ID'''
+
===== Agente. Aux y Grupo Aux =====
*  
+
 
* ''' AAD_CLAVE_EXPIRA'''
+
'''• Llamadas ACD:''' Número de llamadas ACD contestadas o realizadas por
*  
+
el agente.<br/>
* ''' AAD_CLAVE_VALOR'''
+
'''• Tiempo ACD:''' Tiempo de conversación ACD de las llamadas contestadas
*  
+
o realizadas por el agente excluido el tiempo de retención.<br/>
* ''' AAD_CLAVE_ID'''
+
'''• Tiempo ACW:''' Tiempo dedicado por el agente a tareas administrativas
 
+
tras finalizar las llamadas contestadas por el agente.<br/>
 
+
'''• Tiempo con personal:''' Tiempo que ha estado conectado el agente.<br/>
Estos datos serán proporcionados a mdtel, que generará un archivo ZIP
+
'''• Tiempo retención:''' Tiempo que las llamadas estuvieron retenidas por
 +
el agente.<br/>
 +
'''• Tiempo AUX:''' Tiempo que el agente estuvo en pausa.<br/>
 +
'''• Desglose de tiempos AUX:''' Tiempo que el agente estuvo en cada uno
 +
de los motivos de pausa.
 +
 
 +
===== Agente. Resumen diario =====
 +
 
 +
'''• Tiempo con personal:''' Tiempo que ha estado conectado el agente.<br/>
 +
'''• Tiempo ACD:''' Tiempo de conversación ACD de las llamadas contestadas
 +
o realizadas por el agente excluido el tiempo de retención.<br/>
 +
'''• Tiempo ACW:''' Tiempo dedicado por el agente a tareas administrativas
 +
tras finalizar las llamadas contestadas por el agente.<br/>
 +
'''• Tiempo de llamado:''' Tiempo de ring en llamadas ACD.<br/>
 +
'''• Tiempo AUX:''' Tiempo que el agente estuvo en pausa.<br/>
 +
'''• Tiempo disponible:''' Tiempo que el agente estuvo conectado y no está
 +
incluido en ninguno de los anteriores.<br/>
 +
'''• Tiempo retención:''' Tiempo que las llamadas estuvieron retenidas.<br/>
 +
'''• Llamadas ACD:''' Número de llamadas ACD contestadas o realizadas por
 +
el agente.<br/>
 +
'''• Llamadas entrada Ext:''' Número de llamadas entrantes NO ACD a la
 +
extensión.<br/>
 +
'''• Llamadas salida Ext:''' Número de llamadas salientes NO ACD desde la
 +
extensión.<br/>
 +
'''• Llamadas transferidas:''' Número de llamadas ACD que fueron
 +
transferidas por el agente.<br/>
 +
'''• Llamadas retenidas:''' Número de retenciones que sufrieron las
 +
llamadas contestadas por el agente.<br/>
 +
'''• Tiempo promedio ACD:''' Tiempo ACD/ Llamadas ACD.<br/>
 +
'''• Tiempo promedio ACW:''' TiempoACW/Llamadas ACD.<br/>
 +
'''• Tiempo promedio de entrada a la Ext:''' Tiempo entrada Ext/
 +
Llamadas entrada Ext.<br/>
 +
'''• Tiempo promedio de salida a la Ext:''' Tiempo salida Ext/ Llamadas
 +
salida Ext.<br/>
 +
'''• Tiempo promedio retención:''' Tiempo retención/Llamadas retenidas.<br/>
 +
'''• % Ocupación con ACW:''' ((Tiempo ACD+ Tiempo retención+ Tiempo
 +
ACW)/Tiempo con personal)* 100.<br/>
 +
'''• % Ocupación sin ACW:''' ((Tiempo ACD+ Tiempo retención)/Tiempo
 +
con personal)* 100.<br/>
 +
'''• % disp.:''' (Tiempo disponible/Tiempo conectado)* 100.
 +
 
 +
===== Agente. Grupo ACD diario =====
 +
 
 +
 
 +
'''• Llamadas ACD:''' Número de llamadas ACD contestadas o realizadas por
 +
el agente de un grupo ACD.<br/>
 +
'''• Tiempo ACD:''' Tiempo de conversación ACD de las llamadas contestadas
 +
o realizadas por el agente excluido el tiempo de retención de un grupo
 +
ACD.<br/>
 +
'''• Tiempo ACW:''' Tiempo dedicado por el agente a tareas administrativas
 +
tras finalizar las llamadas contestadas por el agente de un grupo ACD.<br/>
 +
'''• Ayuda:''' Número de llamadas contestadas por el agente que necesitaron
 +
de consulta de un grupo ACD.<br/>
 +
'''• Llamadas retenidas:''' Número de retenciones que el agente realizó
 +
sobre las llamadas de ese grupo ACD.<br/>
 +
'''• Tiempo retención:''' Tiempo que las llamadas estuvieron retenidas por
 +
el agente en ese grupo ACD.<br/>
 +
'''• Trans. salida:''' Llamadas que finalizan con una transferencia.
 +
 
 +
===== Grupo ACD. Reporte diario con AHT =====
 +
 
 +
'''• Llamadas ACD:''' Número de llamadas ACD contestadas o realizadas por
 +
el agente de un grupo ACD.<br/>
 +
'''• Tiempo promedio ACD:''' Tiempo ACD/Llamadas ACD.<br/>
 +
'''• Tiempo promedio ACW:''' Tiempo ACW/Llamadas ACD.<br/>
 +
'''• Tiempo ACD:''' Tiempo de conversación ACD de las llamadas contestadas
 +
o realizadas por el agente excluido el tiempo de retención de un grupo
 +
ACD.<br/>
 +
'''• Tiempo ACW:''' Tiempo dedicado por el agente a tareas administrativas
 +
tras finalizar las llamadas contestadas por el agente de un grupo ACD.
 +
'''• Tiempo de llamado:''' Tiempo de ring en llamadas ACD de un grupo
 +
ACD.<br/>
 +
'''• Tiempo AUX:''' Tiempo que el agente estuvo en pausa.<br/>
 +
'''• Tiempo disponible:''' Tiempo que el agente estuvo conectado y no está
 +
incluido en ninguno de los anteriores.<br/>
 +
'''• Tiempo con personal:''' Tiempo que ha estado conectado el agente.<br/>
 +
'''• Ayuda:''' Número de llamadas ACD contestadas por el agente en las que
 +
necesito hacer uso de la consulta.<br/>
 +
'''• Llamadas retenidas:''' Número de retenciones que el agente realizó
 +
sobre las llamadas ACD contestadas.<br/>
 +
'''• Tiempo retención:''' Tiempo que las llamadas contestadas ACD
 +
estuvieron retenidas por el agente.<br/>
 +
'''• Trans. salida:''' Número de llamadas ACD que fueron transferidas por el
 +
agente.<br/>
 +
'''• AHT:''' (Tiempo ACD+ Tiempo ACW+ Tiempo retención)/Llamadas
 +
ACD.(Average Handle Time)<br/>
 +
 
 +
===== Grupo ACD. QOS  =====
 +
 
 +
'''• Vel. prom. de resp.:''' Tiempo total de espera de llamadas antes de ser
 +
atendidas/Llamadas ACD.<br/>
 +
'''• Tiempo prom. de aban.:''' Tiempo abandonadas(tiempo que las
 +
llamadas abandonadas estuvieron en el grupo ACD)/Llamadas
 +
abandonadas.<br/>
 +
'''• Llamadas ofrecidas:''' Número de llamadas entrantes al grupo
 +
ACD(Llamadas ACD+ Abandonadas+ Desbordadas).<br/>
 +
'''• Llamadas ACD:''' Número de llamadas contestadas por los agentes.<br/>
 +
'''• Llamadas abandonadas:''' Número de llamadas colgadas por el cliente
 +
en el grupo ACD antes de ser contestadas o desbordadas.<br/>
 +
'''• Desconectadas por ACD:''' Número de llamadas desbordadas que al
 +
salir del grupo ACD se cuelgan.<br/>
 +
'''• Desbordadas por ACD:''' Número total de llamadas desbordadas(incluye
 +
las desconectadas).<br/>
 +
'''• Llamadas atendidas en < 20s:'''Número de llamadas contestadas con
 +
tiempo de respuesta menor a 20 segundos.<br/>
 +
'''• Tiempo total de espera:''' Tiempo total que las llamadas estuvieron
 +
esperando antes de ser atendidas.<br/>
 +
'''• % N.A.:''' Llamadas ACD/(Llamadas ACD+ Llamadas abandonadas).<br/>
 +
'''• % N.D.S.:''' (Llamadas atendidas en < 20s/Llamadas ofrecidas)* 100.<br/>
 +
'''• T.M.O:''' (Tiempo ACD+ Tiempo ACW+ Tiempo retención)/Llamadas
 +
ACD.(Tiempo Medio Operación)
 +
 
 +
===== Informe conducción (VDN Conducción) =====
 +
 
 +
'''•Entrantes al grupo ACD:''' Número de llamadas ofrecidas al grupo
 +
ACD(Contestadas+ Abandonadas+ Desbordadas).<br/>
 +
'''•Llamadas contestadas:''' Número de llamadas contestadas por un agente.<br/>
 +
'''•Contestadas NDS:''' Número de llamadas contestadas en nivel de servicio,
 +
tiempo de respuesta< 20 segundos.<br/>
 +
'''•Abandonadas:''' Número de llamadas abandonadas, colgadas por el cliente
 +
antes de ser contestadas por un agente o desbordadas.<br/>
 +
'''•Desconectadas:''' Número de llamadas desbordadas que fueron colgadas al
 +
salir del grupo ACD.<br/>
 +
'''•Desbordadas:''' Número total de llamadas desbordadas (incluye desconectadas)<br/>
 +
'''•Llamadas retenidas:''' Número de retenciones que el agente realizó sobre las
 +
llamadas ACD contestadas.<br/>
 +
'''•% N.A.:''' (Llamadas contestadas/(Llamadas contestadas+ Abandonadas+
 +
Desbordadas))* 100.<br/>
 +
'''•% N.D.S.:''' (Contestadas NDS/(Llamadas contestadas+ Abandonadas + Desbordadas))*100<br/>
 +
'''•% Abandonadas:''' (Abandonadas/(Llamadas contestadas+ Abandonadas+ Desbordadas))* 100.<br/>
 +
'''•Acum. RING:''' Tiempo de ring en llamadas ACD(entrantes).<br/>
 +
'''•ACDTIME:''' Tiempo de conversación ACD de las llamadas contestadas o
 +
realizadas por el agente excluido el tiempo de retención de un grupo ACD.<br/>
 +
'''•Acum. ACW:''' Tiempo dedicado por el agente a tareas administrativas tras
 +
finalizar las llamadas.<br/>
 +
'''•Acum HOLD:''' Tiempo que las llamadas contestadas ACD estuvieron retenidas
 +
por el agente.<br/>
 +
'''•Acum. OTHER:''' Tiempo total que las llamadas estuvieron esperando en el
 +
grupo ACD antes de ser atendidas.<br/>
 +
'''•Acum. AVAIL:''' Acum. STAFF- (ACDTIME+ Acum. ACW+ Acum. RING+ Acum.
 +
HOLD+ Acum. AUX).<br/>
 +
'''•Acum. Staff:''' Suma del Tiempo conectado de todos los agentes al grupo
 +
ACD(Este tiempo se repercute en todos los grupos ACD a los que esta
 +
conectado el agente).<br/>
 +
'''•Acum. AUX:''' Suma del Tiempo en pausa de todos los agentes que estén
 +
conectados al grupo ACD(Este tiempo se repercute en todos los grupos ACD a
 +
los que esta conectado el agente).<br/>
 +
'''•Prom. ACD:''' ACDTIME/Llamadas contestadas.<br/>
 +
'''•Prom. ACW:''' Acum. ACW/Llamadas contestadas.<br/>
 +
'''•Prom. HOLD:''' Acum. HOLD/Llamadas retenidas.<br/>
 +
'''•AHT:''' (ACDTIME+ Acum. ACW+ Acum. HOLD)/Llamadas contestadas.<br/>
 +
'''•Vel. prom. de resp.:''' Tiempo total de espera de llamadas antes de ser
 +
atendidas/Llamadas ACD.<br/>
 +
'''•Tiempo máx. de espera:''' Tiempo de la llamada que estuvo mas tiempo en el
 +
grupo ACD hasta que fue atendida.<br/>
 +
'''•Agentes en PH:''' (Acum. Staff- Acum. AUX)/1800(Agentes conectados que no
 +
están en pausa en el intervalo).<br/>
 +
'''•Agentes Staff:''' Acum. Staff/1800(Agentes conectados en el intervalo)<br/>
 +
'''•Desglose de tiempos AUX:''' Tiempo que el agente estuvo en cada uno de los
 +
motivos de pausa.
 +
 
 +
===== Informe de producción =====
 +
 
 +
'''• LL. ACD:'''Número de llamadas contestadas por ese agente para ese
 +
grupo ACD.<br />
 +
'''• LL. HOLD:''' Número de retenciones efectuadas para las llamadas
 +
contestadas en ese grupo ACD.<br />
 +
'''• LL. Redir.:''' Número de llamadas no contestadas por un agente que
 +
fueron redirigidas de nuevo a la cola.<br />
 +
'''• LL. No colgadas cliente:''' Número de llamadas que terminaron sin el
 +
colgado del cliente.<br />
 +
'''• LL. Aband.:''' Número de llamadas abandonadas en ese grupo ACD, este
 +
valor es independiente del agente por tanto se repite el valor para todos
 +
los agentes en un mismo grupo ACD.<br />
 +
'''• LL. Transfer.:''' Número de llamadas ACD que fueron transferidas por el
 +
agente.<br />
 +
'''• LL. Conf:''' Número de llamadas ACD en las que el agente estableció
 +
conferencia.<br />
 +
'''• S. Extensión:''' Número de llamadas salientes de extensión, este valor es
 +
independiente del grupo ACD se repite el valor para todos los grupos
 +
ACD en los que está conectado el agente.<br />
 +
'''• Acum. Staff:''' Tiempo que el agente estuvo conectado al grupo ACD.<br />
 +
'''• Acum. RING:''' Tiempo de ring en las llamadas ACD(entrantes) que
 +
fueron contestadas por el agente.<br />
 +
'''• Acum. ACD:''' Tiempo de conversación de las llamadas ACD(entrantes)
 +
que fueron contestadas por el agente.<br />
 +
'''• Acum. ACW:''' Tiempo dedicado por el agente a tareas administrativas
 +
tras finalizar las llamadas que fueron contestadas por él.<br />
 +
'''• Acum HOLD:''' Tiempo que las llamadas ACD(entrantes) para ese grupo
 +
ACD que fueron contestadas por el agente estuvieron retenidas.<br />
 +
'''• Acum. AVAIL:''' Acum. STAFF- (Acum. ACD+ Acum. ACW+ Acum. RING+
 +
Acum. HOLD+ Acum. AUX)..<br />
 +
'''• Acum. AUX:''' Tiempo que el agente estuvo en pausa este valor es
 +
independiente del grupo ACD se repite el valor para todos los grupos
 +
ACD en los que está conectado el agente..<br />
 +
'''• Desgloses de tiempos AUX, tiempo AUX por cada uno de los
 +
motivos.''' este valor es independiente del grupo ACD se repite el valor
 +
para todos los grupos ACD en los que está conectado el agente.
 +
-->
 +
 
 +
===== 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.
 +
 
 +
 
 +
 
 +
<br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
 +
 
 +
 
 +
=== TBC (Translation by Chat) ===
 +
 
 +
 
 +
La funcionalidad permite que dos interlocutores (a los que llamaremos “extranjero” y “agente”) puedan interactuar en una llamada telefónica independientemente del idioma en el que se expresen.
 +
 
 +
==== Requerimientos de usuario ====
 +
 
 +
Desde el punto de vista de usuario los requerimientos serán:
 +
 
 +
• Extranjero: Cualquier tipo de terminal telefónico (de VIVAit Call o externo) alcanzando un usuario de VIVAit Call;
 +
 
 +
• Agente: Usuario de VIVAit Call, con terminal telefónico en VIVAit Call y portal de usuario; el entorno más unificado se consigue si el terminal telefónico es Web Call
 +
 
 +
 
 +
 
 +
==== Funcionamiento a nivel de usuario ====
 +
 
 +
 
 +
1. Llamadas entrantes a grupos o servicios con traducción activada por defecto: En estos casos el agente no tendrá que hacer nada y la llamada dispondrá de servicio de traducción; es típico en grupos ACD
 +
 
 +
 
 +
 
 +
2. Llamadas salientes realizadas por el agente a un extranjero: En tal caso el agente realizará la llamada anteponiendo la facilidad *14# (ejemplo *14#3140) o la configurada a tal efecto en cada instalación
 +
 
 +
 
 +
 
 +
3. Llamadas establecidas para las que se desea activar TBC:
 +
 
 +
a. En el caso de Web Call el agente dispondrá de un botón en el control de llamada que le servirá para activar TBC; la activación pasa por una autotransferencia directa de la llamada
 +
 
 +
b. En el caso de otros terminales el usuario deberá realizar una transferencia directa a si mismo (se usa para ello llamada a  *14*)
 +
 
 +
 
 +
El funcionamiento general una vez establecida una llamada con servicio TBC será:
 +
 
 +
 
 +
• El extranjero habla en su idioma y escucha audios en su idioma; como se ha indicado anteriormente, en el lado del extranjero no es necesario ninguna herramienta adicional al terminal telefónico, que podrá ser interno o externo a VIVAit Call
 +
 
 +
 
 +
'''El agente'''
 +
 
 +
'''Para la recepción:'''
 +
 
 +
• Escucha el audio del extranjero (en el terminal)
 +
 
 +
• Lee el texto transcrito en el idioma del extranjero
 +
 
 +
• Lee el texto traducido en el idioma del agente
 +
 
 +
 
 +
'''Para la emisión:'''
 +
 
 +
• Escribe en su idioma
 +
 
 +
• Lee el texto traducido al idioma del extranjero
 +
 
 +
• Tiene opción de reproducir el audio que ha escuchado el extranjero
 +
 
 +
 
 +
 
 +
 
 +
==== Funcionamiento a nivel de VIVAit Call ====
 +
 
 +
A nivel de VIVAit Call, los elementos principales involucrados en el servicio son:
 +
 
 +
'''• mdtap: Con sus componentes chan_mdtap e intz_tap se encargará de:'''
 +
 
 +
''' chan_mdtap:'''
 +
 
 +
• Captura el audio
 +
 
 +
• Reenvía a intz_tap
 +
 
 +
• El audio pasa al otro extremo
 +
 
 +
 
 +
''' intz_tap:'''
 +
 
 +
'''Para speech to text'''
 +
 
 +
• Invoca al servicio de conversión de audio a texto configurado y lo envía
 +
 
 +
• Recibe el texto y otros datos y los inserta en BDTR
 +
 
 +
 
 +
'''Para text to speech
 +
'''
 +
• Periodicamente (polling) comprueba si hay mensajes de tipo de contenido audio
 +
 
 +
• Recupera la URL
 +
 
 +
• Invoca al servicio de conversión de texto a audio configurado y lo envía
 +
 
 +
• Recibe el audio y lo inserta en la conversación en sustitución del audio del agente
 +
 
 +
 
 +
'''Portal de usuario/Web Call'''
 +
 
 +
•      Cuando se abre pestaña de TBC sincroniza mensajes https://172.25.128.253/Vivait-FonBO/api/recuperarId
 +
 
 +
  •    Periodicamente (polling) pide nuevos mensajes de TBC del extranjero a FonBO https://172.25.128.253/Vivait-FonBO/api/listaMensajesUsuario?lastId=85&idioma=es
 +
 
 +
•    Envía mensajes de texto a FonBO https://wwv.mdtel.es/Vivait-FonBO/api/insertaMensaje?hayTraduccion=true&idiomaDestino=fr
 +
 
 +
 
 +
'''FonBO:'''
 +
 
 +
• Responde a polling de Portal de usuario/Web Call
 +
 
 +
• Envía mensajes a traducir al servicio de traducción texto a texto, solo si el idioma del agente (configurado) y el idioma del extranjero (típicamente detectado) son diferentes; lo realiza para las traducciones en ambos sentidos
 +
 
 +
• Recibe mensajes traducidos y los inserta en BDTR
 +
 
 +
• Envía mensajes de texto al servicio de Text to Speech
 +
 
 +
• Recibe el audio, lo almacena e inserta en BDTR (una URL)
 +
 
 +
 
 +
 
 +
==== Puesta en marcha ====
 +
 
 +
 
 +
Para disponer de la funcionalidad será necesario disponer de:
 +
 
 +
 
 +
• Base de datos actualizada con tabla DAT_MENSAJES_IA y COM_USUARIOS
 +
 
 +
• Fonbo versión xxxx
 +
 
 +
• Web Call versión 2.0.0 (para esta funcionalidad, esta versión de Web Call requerirá otros cambios en BBDD por otras funcionalidades implementadas)
 +
 
 +
• Chan_mdtap e Intz_Tap funcionando
 +
 
 +
 
 +
 
 +
La configuración cargada por defecto en el sistema permite la activación con mucha facilidad de las funciones de:
 +
 
 +
 
 +
• Casuística 1: Llamadas salientes realizadas por el agente a un extranjero; el agente marcará *14#num_Destino
 +
 
 +
 
 +
::[[File:tbc1.PNG|250px|center]]
 +
 
 +
 
 +
Es la facilidad con E_CODIGO_FACILIDAD = 800 (transcripción de número de teléfono).
 +
 
 +
 
 +
::[[File:tbc2.PNG|800px|center]]
 +
 
 +
 
 +
La numeración está definida por prerutas, una por categoría
 +
 
 +
 
 +
::[[File:tbc3.PNG|800px|center]]
 +
 
 +
 
 +
 
 +
 
 +
• Casuística 2: Llamadas establecidas para las que se desea activar TBC; el agente pulsará el botón de “traducción simultánea”
 +
 
 +
::[[File:tbc4.PNG|350px|center]]
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
=== Puesto de trabajo ===
 +
<br><br>
 +
 
 +
El puesto de trabajo del agente en la plataforma '''''VIVA'''''it  (para el producto '''''VIVA'''''it Suite) estará compuesto por:
 +
* PC (típicamente windows) en el que reside la aplicación '''''VIVA'''''it Desk
 +
* Terminal telefónico con extensión física asociada.
 +
 
 +
Para más información [[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Puestos | ver sección Portal de administración-VIVAit Suite ACD+ - Puestos]].
 +
 
 +
==== Relación PC/teléfono en puesto de trabajo ====
 +
<br><br>
 +
 
 +
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.
 +
 
 +
 
 +
 
 +
===== Procedimiento para un cambio de puesto de trabajo =====
 +
<br><br>
 +
 
 +
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:
 +
 
 +
{| class="wikitable"
 +
|-
 +
! Cambio !! Procedimiento !! Punto de acción
 +
|-
 +
|rowspan="2"| 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
 +
|-
 +
| rowspan="2"| 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
 +
|}
 +
<!--
 +
[[File:relacion_puesto_agente.png|center|500px]]
 +
-->
 +
 
 +
==== Estructura de aplicaciones en puesto de trabajo ====
 +
<br><br>
 +
 
 +
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
 +
{| class="wikitable"
 +
|-
 +
! Fichero !! Descrición
 +
|-
 +
| Vivait-desk.exe || Contiene la aplicación '''''VIVA'''''it 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 '''''VIVA'''''it Desk
 +
|-
 +
|}
 +
 
 +
==== Secciones de utilidad en nimitz.ini ====
 +
<br><br>
 +
 
 +
===== Configuración del puesto de agente =====
 +
<br><br>
 +
 
 +
El fichero nimitz.ini contiene la configuración del puesto de agente; sus principales parámetros son:
 +
 
 +
{| class="wikitable" border="0" style="background:#ffffff" align="top"
 +
|-
 +
| |''' 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 '''''VIVA'''''it 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 '''''VIVA'''''it Desk solo leerá información
 +
|-
 +
|Sección [telefono]
 +
||pruebas=1 (Valores válidos 0 ó 1)
 +
Activación de funcionalidad "servicio técnico" en '''''VIVA'''''it Desk.
 +
Cuando usamos el parámetro pruebas=1 permitimos abrir más de una sesión de '''''VIVA'''''it 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
 +
|}
 +
 
 +
==== Parámetros en invocación a '''''VIVA'''''it Desk ====
 +
<br><br>
 +
 
 +
La aplicación '''''VIVA'''''it 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
 +
 
 +
==== 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/"
 +
 
 +
==== Servicio técnico en '''''VIVA'''''it Desk ====
 +
<br><br>
 +
 
 +
La activación de la funcionalidad de servicio técnico en '''''VIVA'''''it 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 '''''VIVA'''''it Desk. Pulsando el botón derecho del ratón sobre la barra '''''VIVA'''''it Desk accederemos a las capacidades de soporte técnico
 +
<br><br>
 +
[https://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operación_VIVAit_5.0  Volver al índice]
 +
<br><br>
 +
 
 +
=== Integraciones con servicios externos ===
 +
<br><br>
 +
 
 +
 
 +
==== Presencia con Openfire ====
 +
<br><br>
 +
 
 +
'''''VIVA'''''it 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 '''''VIVA'''''it  se reflejen en Openfire
 +
*Poder marcar desde los clientes de IM instalados en los puestos
 +
*Ver en el cliente llamadas entrantes al teléfono
 +
 
 +
-----
 +
 
 +
'''<big>Enlaces de interes:</big>'''
 +
 
 +
[http://www.igniterealtime.org/projects/openfire/ Página proyecto openfire]
 +
 
 +
[https://community.igniterealtime.org/thread/56076 Página proyecto "asterisk IM"]
 +
 
 +
 
 +
==== Reuniones virtuales con Openmeetings ====
 +
<br><br>
 +
 
 +
'''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 [[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manuales_de_instalaci%C3%B3n#Instalaci.C3.B3n_de_Openmeetings | manual de Instalación de Openmeetings]]
 +
 
 +
 
 +
 
 +
==== Integración de portal usuario de VIVAit Call Web Microsoft Teams ====
 +
<br><br>
 +
 
 +
 
 +
 
 +
La integración de VIVAit Call Web con MS Teams se realiza en tres pasos; dos
 +
de ellos han de ser realizados íntegramente por el cliente puesto que requieren
 +
realizar modificaciones en su entorno de gestión de Microsoft Azure y Teams.
 +
 
 +
 
 +
[[Archivo:teams-esquema.png|400px|center]]
 +
 
 +
 
 +
 
 +
A continuación se muestra que debe hacer el administrador de Teams y de Mdtel para la integración con Ms Teams , los pasos consisten en:
 +
{| class="wikitable"
 +
|-
 +
! Responsable !! Pasos
 +
|-
 +
|Administrador de Teams y Mdtel || Generar el archivo .zip con todos los elementos requeridos para una integrar una nueva aplicación en MS Teams. Este archivo .zip es diferente para cada cliente de VIVAit Call Web y tiene que ser generado para cada caso
 +
|-
 +
 
 +
|}
 +
 
 +
 
 +
 
 +
'''PASOS:'''
 +
 
 +
'''Generar archivo ZIP con todos los elementos'''
 +
 
 +
El paso ha de ser realizado por un administrador de Teams y mdtel
 +
 
 +
Debemos disponer de los valores :
 +
 
 +
* ''' AAD_APLICACION_ID'''
 +
*  
 +
* ''' AAD_CLAVE_EXPIRA'''
 +
*  
 +
* ''' AAD_CLAVE_VALOR'''
 +
*  
 +
* ''' AAD_CLAVE_ID'''
 +
 
 +
 
 +
Estos datos serán proporcionados a mdtel, que generará un archivo ZIP
  
 
'''VIVAit-call-web-empresa-vivait-manifest.zip'''
 
'''VIVAit-call-web-empresa-vivait-manifest.zip'''
Línea 11 678: Línea 14 040:
 
[[Archivo:teams-ad18.png|700px|center]]
 
[[Archivo:teams-ad18.png|700px|center]]
  
== Marcador Predictivo ==
+
=== Marcador Predictivo ===
 +
<br><br>
 +
 
  
 
La marcación, como la conocemos hasta ahora, comienza en la tabla de contactos del portal.
 
La marcación, como la conocemos hasta ahora, comienza en la tabla de contactos del portal.
Línea 11 694: Línea 14 058:
  
  
===Arquitectura===
+
==== Arquitectura ====
 +
<br><br>
  
  
Línea 11 705: Línea 14 070:
 
[[File:ArquitecturaMODULOS.jpg|600px]]
 
[[File:ArquitecturaMODULOS.jpg|600px]]
  
===¿Como funciona un marcador predictivo?===
+
==== ¿Como funciona un marcador predictivo? ====
 +
<br><br>
 +
 
 +
====== Conceptos y funcionamiento general ======
 +
<br><br>
  
====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).   
 
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).   
Línea 11 727: Línea 14 095:
 
El sistema determina cuanto tráfico es capaz de generar, en función del número de agentes disponibles.
 
El sistema determina cuanto tráfico es capaz de generar, en función del número de agentes disponibles.
  
=== Modelos de marcación predictivos ===
+
==== Modelos de marcación predictivos ====
 +
<br><br>
  
 
Básicamente existen cuatro modelos de marcación:
 
Básicamente existen cuatro modelos de marcación:
Línea 11 777: Línea 14 146:
 
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.
 
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.
  
==='''Parámetros'''===
+
==== '''Parámetros''' ====
 +
<br><br>
 +
 
  
 
Cada modelo de predictivo utiliza un conjunto de parámetros.
 
Cada modelo de predictivo utiliza un conjunto de parámetros.
Línea 11 803: Línea 14 174:
 
'''PAR10:''' Nivel de servicio.
 
'''PAR10:''' Nivel de servicio.
  
===Variables===
+
==== Variables ====
 +
<br><br>
 +
 
  
 
Cada modelo de predictivo utiliza una variables que se encuentran en la tabla DAT_TR_COLAS:
 
Cada modelo de predictivo utiliza una variables que se encuentran en la tabla DAT_TR_COLAS:
Línea 11 839: Línea 14 212:
 
'''VAR14:''' Nº de colas predictivas compartidas.
 
'''VAR14:''' Nº de colas predictivas compartidas.
  
=== Nuevas tablas ===
+
==== Nuevas tablas ====
 +
<br><br>
 +
 
 +
 
 +
===== DAT_MUESTRAS_COLAS_PREDICTIVAS =====
 +
<br><br>
  
==== DAT_MUESTRAS_COLAS_PREDICTIVAS====
 
  
 
Constituirá el histórico del marcador predictivo.
 
Constituirá el histórico del marcador predictivo.
Línea 11 949: Línea 14 326:
  
  
=== Particularidades del modelo mezcla===
+
==== Particularidades del modelo mezcla ====
 +
<br><br>
 +
 
  
 
En el modelo mezcla asumimos que los agentes se conectan a las mismas colas.
 
En el modelo mezcla asumimos que los agentes se conectan a las mismas colas.
Línea 11 970: Línea 14 349:
 
En el arranque del modelo los datos de tiempo de servicio y de intentos 100contactos se obtienen de los parámetros PAR7 y PAR1.
 
En el arranque del modelo los datos de tiempo de servicio y de intentos 100contactos se obtienen de los parámetros PAR7 y PAR1.
  
====Escalabilidad====
+
===== Escalabilidad =====
 +
<br><br>
 +
 
  
 
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.
 
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.
Línea 11 976: Línea 14 357:
 
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.
 
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.
  
====Límites al sistema====
+
===== Límites al sistema =====
 +
<br><br>
 +
 
  
 
Quizá fuesen necesarios "topes" al número máximo de intentos en base a un porcentaje calculado a partir de la capacidad del 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.
Línea 11 987: Línea 14 370:
  
  
== Canales digitales en VIVAit Suite ==
+
=== Canales digitales en VIVAit Suite ===
  
 
Se incluye enlace a documentación en formato .pdf a canales digitales, actualmente correo electrónico
 
Se incluye enlace a documentación en formato .pdf a canales digitales, actualmente correo electrónico

Revisión actual del 12:05 12 jun 2026

Producto: VIVAit Call

VIVAit Suite

Sumario

1 Introducción a la plataforma VIVAit



En este documento se describe la plataforma VIVAit de MDTel, cuyo objetivo principal es proporcionar servicios de comunicaciones con tecnología VoIP.

La plataforma VIVAit tiene dos proyecciones en el plano comercial, cuya denominación ser utilizará recurrentemente a lo largo de este documento:

VIVAit Call, producto VIVAit para el entorno corporativo
VIVAit Suite, producto VIVAit para el entorno call center



Se documentan los procesos principales de cada elemento del sistema, así como sus componentes clave para el diagnóstico.
Por ello el presente documento se divide en cuatro grandes grupos:

Arquitectura de la plataforma VIVAit
Descripción de los elementos software
Funcionalidades específicas en VIVAit
Diagnósticos y operaciones básicas en VIVAit



Quedan fuera del ámbito de este documento:

* Uso de aplicación de agente (VIVAit Desk)
* Uso de aplicación de supervisor (VIVAit Supervisor), incluyendo sus módulos autónomos (VIVAit reporting, VIVAit Tracker)
* Uso de portal de administración
* Uso de portal de traceo de llamadas y agentes (VIVAit Tracker web)
* Uso de portal de monitorización zabbix





2 Arquitectura de la plataforma VIVAit



La plataforma VIVAit de MDTel se compone de nodos de distinto tipo:

Nodo tipo operativo
Realiza funciones de encaminamiento de tráfico telefónico. Estarán dados de alta en el portal de gestión. Entre ellos están:
Nodo Corporativo, para entornos corporativos de telefonía IP y diferentes aplicaciones. Nodo de procesamiento de telefonía corporativa. Tiene la aplicación Asterisk.
Nodo Call Center, para los servicios típicos de call center. Nodo de procesamiento de call center. Tiene la aplicación Asterisk.
Nodo Gateway, auxiliar del nodo corporativo para funciones de telefonía tradicional. Tiene la aplicación Asterisk.
Nodo STG, para gestionar tráfico telefónico a/desde internet. Este nodo asume la funcionalidad WebRTC que da soporte a terminales webfon e incorpora flexisip para terminales VCB.
Nodo MCAM, para proporcionar servicios de multicanalidad.
Nodo Presencia, para proporcionar servicios de presencia.
Nodo Varios, utilizado normalmente para identificar un nodo tipo auxiliar.



Nodo tipo auxiliar
Realiza funciones auxiliares. Aunque conveniente no es necesario darlos de alta en el portal de gestión. Entre otros podemos encontrar:
Nodo BBDD, soporta la base de datos del sistema, bien sea la de tiempo real o la de histórico. En entornos especialmente grandes, suele estar implementado en máquinas dedicadas (bien un servidor o de un clúster de dos servidores).
Nodo de Gestión, contiene el portal de administración y opcionalmente otros procesos auxiliares no relacionados directamente con la conmutación telefónica de llamadas como: otros portales tracker, GH (Gran Hermano).



Esta sería la arquitectura funcional, en un proyecto determinado pueden coexistir varios de estos nodos en un solo servidor físico o virtual.
Los despliegues pueden ser múltiples pudiendo abarcar desde:

Instalación sencilla, un solo servidor que contiene nodo corporativo + nodo de gestión + nodo BBDD.
Instalación con máximo despliegue, cada nodo en un servidor, pudiendo existir varios nodos con la misma funcionalidad: varios nodos corporativos, varios nodos GW, etc.



En la versión actual los módulos software en los que se implementan los nodos que proporcionan servicios de VoIP son:

Sistema Operativo, sobre servidor en máquina física o virtualizada
Asterisk: gestiona llamadas telefónicas VoIP, integrando funciones de una central telefónica en un servidor
DBTR: gestor de la base de datos
Tomcat/Apache: servidor web para los diferentes portales: gestión, supervisor, usuario, traker, ...
Webrtc: gestionar llamadas telefónicas desde un navegador web



Tipo de nodo Función Sistema Operativo Asterisk
Corporativo / GW Telefonía corporativa Linux 6.12.63+deb13-amd64 Asterisk certified/18.9-cert4
Call Center Telefonía ACD Ubuntu 22.04.4 LTS Asterisk 1.4.24-RSP
Webrtc Nodo STG Linux 6.12.43+deb13-amd64 -



Para una información más detallada consultar Versiones de los módulos software



2.1 Arquitectura nodo Corporativo



Un nodo Corporativo / GW se puede instalar en máquinas físicas (directamente sobre el hardware disponible) o sobre máquinas virtuales.
El entorno virtualizado será el procedimiento preferido por MDTel siempre que no existan necesidades especiales que aconsejen el uso de máquinas físicas.
Estas necesidades especiales suelen ser sistemas que tengan un alto volumen de llamadas y sea preferible la instalación en máquinas físicas.



2.1.1 Arquitectura nodo Corporativo / GW sobre máquinas físicas



Este despliegue puede realizarse, según especificaciones del proyecto, sobre una solo máquina o sobre varias máquinas:

Todo en una sola máquina

Sobre la plataforma del sistema operativo se despliegan los distintos servicios necesarios. A continuación se muestran, una configuración mínima:

Arquitectura física V5.1.png



Despliegue en varias máquinas

Sobre el sistema operativo de cada máquina se despliegan los distintos servicios, distribuyéndolos según los procesos de instalación correspondiente.
El ejemplo anterior en dos máquinas físicas podría ser el siguiente:

Arquitectura física 2 V5.1.png



En este caso se ha añadido DBTHIST, una base de datos que almacena información histórica para distintos propósitos, como seguridad, postproceso o copias de respaldo.



2.1.2 Arquitectura nodo Corporativo sobre máquinas virtuales



El despliegue virtualizado puede realizarse, según especificaciones del proyecto, sobre una solo máquina física o sobre varias.
El entorno de virutalización es sobre el programa QEMU, que permite ejecutar un sistema operativo dentro de otro (host), como si fuera una “máquina dentro de otra máquina”

Todo en una sola máquina

El mínimo número de máquinas virtuales en una instalación son 2, un VIVAit-corporativo y una máquina de BD/Gestión.

Arquitectura virtualización 1 V5.1.png



En el caso de necesitar instalar tarjetas físicas para conectar líneas al sistema, se instalará Asterisk en la maquina física, pero este no será un nodo VIVAit.
se comportará como un conversor de líneas físicas a SIP y dentro de 'VIVAit se configurarán las líneas como Trunk SIP.

Despliegue en varias máquinas

El sistema estará compuesto de tantas máquinas virtuales como sean necesarias y el número de máquinas físicas necesarias para asumir la carga de la instalación. El ejemplo virtualizado anterior, en dos máquinas físicas, podría ser el siguiente:

Arquitectura virtualizacion 2 V5.1.png





2.2 Arquitectura nodo Call Center



La arquitectura de este tipo de nodo se hereda de versiones anteriores.

Arquitectura call center V5.1.png





2.2.1 Arquitectura del puesto de agente



Como complemento a la arquitectura Call Center se muestra la arquitectura asociada a los actores principales del ACD: agentes y supervisores.

Arquitectura-Puesto-Agente.jpg





2.3 Arquitectura del nodo STG



Este nodo está formado por los componentes que permiten conectar, a través de Internet, servicios de VoIP para terminales del sistema que acceden a los nodos corporativos.
Para minimizar la exposición de VIVAit a redes abiertas, como internet, este nodo concentra las funciones que requieren conectividad con dichas redes.
Con esta filosofía de diseño conexiones de VIVAit Web Call, app como VCB, hardphone en internet, etc. serán controladas por este nodo.

Nodo stg V5.1.png



En el nodo STG se dan de alta los servicios necesarios para la funcionalidad multidispositivo, como son:

- SerCen,
- Janus,
- Apache,
- FonBo,
- Seguridad
- Certificados,
- entre otros.



La documentación del nodo STG (WebRTC) se puede consulta aquí .

La arquitectura de WebRTC en VIVAit Call es la siguiente:

Webrtc.png





2.3.1 Componentes principales del nodo STG



Se muestran a contiuación los módulos principales que constituyen el nodo STG.

Componentes Explicación
APACHE Apache es un servidor web HTTP de código abierto.La funcionalidad principal de este servicio web es servir a los usuarios todos los ficheros necesarios para visualizar la web. Las solicitudes de los usuarios se hacen normalmente mediante un navegador (Chrome, Firefox, Safari, etc.).
SERCEN Sirve para identificar a los usuarios y garantizar que los mismos sean quienes dicen ser.
JANUS Janus es un servidor WebRTC concebido para ser de propósito general. Como tal, no proporciona ninguna funcionalidad más que implementar los medios para configurar una comunicación de medios WebRTC con un navegador, intercambiar mensajes JSON con él y transmitir RTP / RTCP y mensajes entre navegadores y la lógica de la aplicación del lado del servidor a los que están apegados.
IPTABLES Es un programa que se encarga de filtrar los paquetes de red , es decir , es la parte que se encarga de determinar qué paquetes de datos queremos que lleguen hasta el servidor y cuáles no.
FAIL2BAN Es una aplicación de Linux que permite evitar accesos no autorizados al servidor. Funciona bloqueando o baneando las IP que realicen varios intentos de acceso incorrectos al servidor.
CLIENTE El cliente debe de proporcionar una ip pública , un dns para esa ip y un certificado válido.





2.4 Servicios de networking



Al integrar el sistema VIVAit en la infraestructura del cliente, destinado a prestar servicios de VoIP, es fundamental considerar los servicios necesarios para su correcto funcionamiento.
Aunque los servidores pueden ser proporcionados por el sistema de MDTel, lo más habitual es que el cliente los aporte dentro de su propia infraestructura:

* NTP: el sistema en global ha de estar sincronizado; todos los servidores y puestos de trabajo (en el caso de VIVAit Suite) han de estar perfectamente sincronizados.
Los servidores de la plataforma se sincronizarán con el NTP del cliente; si el cliente no tiene NTP será necesario que un servidor de la plataforma se sincronice con un NTP externo y este sea el servidor para el resto de la plataforma
* DNS: la configuración de DNS de la plataforma será coherente con el resto de la plataforma IT del cliente
* DHCP: Es necesario coordinar con el cliente la asignación de direcciones para los diferentes elementos de la plataforma VIVAit, fundamentalmente para terminales telefónicos.
En este caso será necesario activar la opción 66 del DHCP que permitirá definir el servidor TFTP del que los terminales descargaran sus ficheros de aprovisionamiento



Arquitectura networking 1 V5.1.png





2.5 Conectividad en VIVAit



2.5.1 Esquema VIVAit Call



El esquema siguiente muestra todos los flujos de información existentes en un entorno típico de telefonía corporativa (sin presencia)

Flujos corporativa.png



La descripción de los flujos se puede consultar en Tabla de flujos VIVAit

2.5.2 Esquema VIVAit Suite



En el entorno de Contact Center se encuentran los siguientes flujos entre servicios (comunicaciones entre servidores).

Flujos Contact servicios.png



La descripción de los flujos se puede consultar en Tabla de flujos VIVAit



2.5.3 Esquema usuario-servidor



Entre usuarios y servicios se documentan los siguientes flujos:

Flujos Contact puestos.png



La descripción de los flujos se puede consultar en Tabla de flujos VIVAit



2.5.4 Tabla de flujos VIVAit



La sisguiente tabla muestra los flujos de datos que se establecen entre los distintos componentes del sistema VIVAit.

Lado A Lado B Puertos Sentido Observaciones
Terminal telefónico Servidor TCP 5060 A -> B Señalización SIP
Terminal telefónico Servidor UDP 5060 A -> B Señalización SIP
Terminal telefónico Servidor 10000 a 20000 A -> B

B -> A

RTP
Terminal telefónico Servidor TFTP UDP 69 A -> B

B -> A

Para actualización de terminales por TFTP
Terminal telefónico Servidor NTP UDP 123 A -> B
VIVAit Desk Servidor TCP 4500 A -> B Comunicación CTI
VIVAit Desk Servidor TCP 3306 A -> B Acceso a Mysql Base de datos
VIVAit Desk Servidor UDP 514 A -> B Para envío de logs de agente
VIVAit Supervisor

aplicación de supervisor

Servidor TCP 4500 A -> B Comunicación CTI
VIVAit Supervisor

portal de supervisión

Servidor TCP 3306 A -> B Acceso a Mysql Base de datos
VIVAit Tracker Servidor TCP 3306 A -> B Acceso a Mysql Base de datos
Tracker WEB Servidor TCP 3306 A -> B Acceso a Mysql Base de datos
Actualizador Servidor TCP 80 A -> B Necesario para actualizaciones de versiones de aplicaciones de agente y supervisores
Portales Servidor TCP 443 A -> B Acceso a los diferentes portales de VIVAit
Monitor Servidor TCP 8180 A -> B Wallboard
Monitorización Servidor TCP 80 A -> B Acceso a portal monitorización (Zabbix)





2.6 Gateways VIVAit



El concepto de gateway no existe como entidad funcional dentro de la plataforma VIVAit. En su arquitectura únicamente se definen nodos ACD (Automatic Call Distribution) y nodos corporativos.
Desde el punto de vista operativo, el nodo corporativo es el encargado de asumir las funcionalidades típicamente asociadas a un gateway. En particular, gestiona la interconexión con sistemas externos, incluyendo interfaces analógicas, digitales e IP, así como la conexión con la Red Telefónica Conmutada.
Por tanto, el término gateway queda limitado a un uso comercial o conceptual, sin correspondencia directa con elementos funcionales dentro de la plataforma.
En consecuencia, los procedimientos de diagnóstico y operación relativos a la conectividad con sistemas externos o con la RTC deben realizarse conforme a los mecanismos definidos para el nodo corporativo.



3 Descripción de los elementos software



3.1 Niveles funcionales del software



Los niveles funcionales o capas del software en el sistema VIVAit cumplen una función específica y se apoyan en el nivel inferior.

La lista de los mismos es la siguiente:

Nivel de sistema operativo
Nivel de conmutación de voz
Nivel de base de datos
Nivel de procesos VIVAit
Nivel de Administración
Nivel de Monitorización





3.1.1 Nivel de sistema operativo



Elemento Instancias Propósito Producto Observaciones
Ubuntu Server LTS

64 bits

Uno por servidor VIVAit Call / VIVAit Suite Actualmente (may-2026) 22.04. Bajo proyecto puede cambiarse
Debian LTS Uno por servidor VIVAit Call Actualmente (may-2026) 13 (Trixie). Bajo proyecto puede cambiarse
Almacenamiento de grabaciones Uno por sistema Almacenamiento de las grabaciones, ya sean de entorno corporativo o de Contact Center VIVAit Call / VIVAit Suite Típicamente un espacio grande de almacenamiento proporcionado por el cliente y que se monta como un sistema de archivos local en los servidores de la plataforma

Pueden existir sistemas secundarios de almacenamiento de grabaciones



Para más detalles, consultar el apartado Sistema Operativo



3.1.2 Nivel de conmutación de voz



Elemento Instancias Propósito Producto Observaciones
Asterisk 1.4.24

by MDtel

Uno por servidor ACD Núcleo de conmutación de voz basado en Asterisk 1.4 y modificado por MDtel VIVAit Suite Fuertemente modificado por MDtel. En el futuro migrará a Asterisk 18.9 Certified
Dialplan ACD

by MDtel

Uno por servidor ACD Configuración de voz VIVAit Suite En el futuro se unificará con corporativa
Asterisk 18.9

Certified by MDtel

Uno por servidor corporativo / gateway Núcleo de conmutación de voz basado en Asterisk 18.9 y modificado por MDtel VIVAit Call Actualmente Asterisk estándar (05/26).

La instalación contempla descargar de la red la versión 18 más actualizada, siempre "CERTIFIED"

Dialplan corporativo Uno por servidor corporativo/gateway Configuración de voz| VIVAit Call En el futuro se unificará con ACD



Para más detalles, consultar el apartado Matriz de conmutación



3.1.3 Nivel de base de datos



Elemento Instancias Propósito Producto Observaciones
MySQL 8.0.45 Donde haya BBDD de cualquier tipo (incluso zabbix) Motor de Base de Datos para Ubuntu 22.04 VIVAit Call / VIVAit Suite A efectos prácticos se pretende que sea la BBDD de todos los servicios
MariaDB 11.8.3 Donde haya BBDD de cualquier tipo Motor de Base de Datos para Debian 13 VIVAit Call / VIVAit Suite A efectos prácticos se pretende que sea la BBDD de todos los servicios
DBTR Una por sistema Base de Datos sobre la que trabaja todo el entorno de tiempo real VIVAit Call / VIVAit Suite
DBHIST Una por sistema multinodo Base de Datos para postproceso, como reporting, traker, supervisor, ... Subconjunto de tablas de DBTR con la que está sincronizada VIVAit Call / VIVAit Suite Bajo proyecto puede existir más de una.

En el nodo en el que exista réplica existirá además copia (excepto nodo ACD)

DBCopia Uno por servidor con Asterisk Copia de tablas de configuración de DBTR para respaldo de la misma VIVAit Call / VIVAit Suite* Local en cada nodo con Asterisk.
  • Los nodos de ACD actualmente no trabajan con copia; en caso de fallo de DBTR se usa el modo emergencia



Para más detalles, consultar el apartado Bases de Datos



3.1.4 Nivel de procesos VIVAit



La mayoría de los elementos aparecen como servicios en los nodos correspondientes.

Elemento Instancias Propósito Producto Observaciones
intz-nimitz Donde haya una BBDD de tiempo real o copia Interfaz entre el dialplan y la base de datos VIVAit Call / VIVAit Suite No donde haya BBDD de réplica.

En sistemas grandes pueden contemplar más de un intz-nimitz

intz-gh En el nodo con menos carga Conocer el estado de las extensiones de diferentes nodos VIVAit Call Solo va en un nodo. Si desconocemos cual es el nodo con menos carga, instalarlo en la maquina con BDHIST
intz-tap En los nodos corporativos Encargado de la grabación SIPREC y TBC VIVAit Call Junto al modulo chan_mdtap de asterisk para enviar los flujos RTP a un elemento externo
serCen En nodo STG y nodo de gestión Encargado de la autenticidad y doble factor de los usuarios VIVAit Call / VIVAit Suite Proporciona servicios a los diferentes portales (front-end) del sistema
vivait-direct En nodo STG y nodo de gestión Centraliza y gestiona la consulta de agendas y contactos desde distintas fuentes de datos.

Alternativa a Vivait-FonBO que sigue gestionando el histórico de llamadas

VIVAit Call / VIVAit Suite Servicio invocado por los portales vivait-user y webfon2
vivait-cti Uno por servidor ACD Interfaz entre VIVAit Desk, supervisor y el manager de asterisk VIVAit Suite
motorSal Uno por servidor ACD Motor de marcador saliente automático VIVAit Suite Solo si hay marcación saliente. Junto a DBTR
myAcdSuperv Uno por servidor ACD Recopilador de datos de asterisk y actualiza en la BBDD. Genera llamadas en el marcador VIVAit Suite
recordCentral Uno por sistema Servidor de grabaciones, los agentes (recorNodo) se conectan a él VIVAit Call Se arrancan varias instancias en función del número de nodos. Debe instalarse en un servidor que tenga el almacenamiento de grabaciones en su sistema de archivos
recordNodo Uno por servidor corporativo / gateway Agente de grabación VIVAit Call
bdCentral Uno, en el nodo con la BBDD de tiempo real Genera la base de datos que se copiará para respaldo a otros nodos VIVAit Call / VIVAit Suite
bdNodo En cada nodo con BBDD de copia Recoge la base de datos del servidor central con el objeto de tener el respaldo VIVAit Call / VIVAit Suite
Actualizador Uno por sistema con ACD Se encarga de proporcionar las versiones actualizadas de las aplicaciones de puesto de trabajo VIVAit Suite En el mismo servidor que el portal de administración
phoneProv-tftp Uno por sistema Se encarga del aprovisionamiento masivo de terminales VIVAit Call / VIVAit Suite En instalaciones grandes habrá más de uno, quizás uno por sede grande; depende de la infraestructura de DHCP
borraregistrosnimitz Uno por sistema Se encarga de la gestión de las bases de datos, aplicando políticas de retención que limitan la persistencia de los registros hasta una fecha máxima establecida. VIVAit Call / VIVAit Suite En la BDTR es típico dejar 6 meses y en BDHIST 5 anos.
movergrabacionesanube Uno por sistema Guardar las grabaciones un un NAS del cliente VIVAit Suite Utiliza el módulo RecordCentral



Para más detalles, consultar el apartado Procesos propios VIVAit



3.1.5 Nivel de Administración



Este nivel software proporciona servicios para administrar el sistema y servicios al usuario final. Se estructura en dos capas:

Front-end: capa de presentación que interactúa con el usuario (portales web, interfaces gráficas o paneles de control), encargada de mostrar la información y recoger las acciones del usuario.
Back-end: capa de lógica y procesamiento donde se gestionan los servicios, la ejecución de aplicaciones y el acceso a datos, apoyándose en servidores como Apache HTTP Server y Apache Tomcat.



Para obtener más información del tipo administración consultar el apartado Portales de Administración.
Para ver los diferentes portales de usuario ver Portales web corporativos.






3.1.5.1 Nivel de Administración - Front-end



Se compone de dos entidades:

Servidores: donde se ejecutan las aplicaciones y servicios web, como Apache HTTP Server.
Clientes: interfaces de acceso para los usuarios, como portales web.



Elemento Instancias Propósito Producto Observaciones |
Apache2 Uno por servidor con portales Servidor de páginas web. Servidor de portales. No usa JAVA VIVAit Call / VIVAit Suite
Vivait-Call Uno por sistema Portal de administración del sistema VIVAit Call / VIVAit Suite Bajo proyecto puede existir más de uno
vivait-user Uno por sistema en nodo STG Portal de usuario, para acceso a buzones, configuración, etc. VIVAit Call Bajo proyecto puede existir más de uno
webfon2 Uno por sistema en nodo STG Portal de VIVAit Call Web VIVAit Call Bajo proyecto puede existir más de uno
webfon2-solo Uno por sistema en nodo STG Dialpad de VIVAit Call Web.

webfon2 = vivait-user + webfon2-solo

VIVAit Call Bajo proyecto puede existir más de uno
Vivait-Tracker Uno por sistema Portal de seguimiento de llamadas Denominado Tracker web. VIVAit Call / VIVAit Suite Debe instalarse en un servidor que tenga los ficheros de grabación montados en su sistema de archivos.

Ligado a recordCentral

Tracker-Corp Uno por sistema Portal de seguimiento de llamadas del entorno corporativo. Denominado Tracker corporativo. VIVAit Call Debe instalarse en un servidor que tenga los ficheros de grabación montados en su sistema de archivos.

Ligado a recordCentral

Monitor Uno por sistema Portal de monitores de pared de Call Center VIVAit Suite Bajo proyecto puede existir más de uno
Vivait-Supervisor Uno por sistema Portal de monitorización de llamadas del entorno corporativo VIVAit Call Bajo proyecto puede existir más de uno
Baikal Uno por sistema Servidor de calendarios para su uso en diferentes entornos de nimitz VIVAit Call / VIVAit Suite





3.1.5.2 Nivel de Administración - Back-end



Se compone principalmente de los siguientes elementos:

Servidor: infraestructura donde se alojan las aplicaciones y servicios que exponen APIs (por ejemplo, aplicaciones Java desplegadas en servidores como Apache Tomcat).
Recibe peticiones web (HTTP), ejecuta el código Java de la aplicación y devuelve la respuesta al cliente (navegador, app, etc.).
Clientes: aplicaciones externas (front-end, apps móviles, otros sistemas) que consumen las APIs del back-end.



Elemento Instancias Propósito Producto Observaciones
Tomcat11 Uno por sistema Servidor de aplicaciones web Apache Tomcat especializado en ejecutar aplicaciones desarrolladas en Java. VIVAit Call / VIVAit Suite Para proyectos especiales puede existir uno por contexto JAVA
cargaClickToCall Uno por sistema Inserción en BBDD de la tabla ACD_LISTAS_LLAMAME a través de los parámetros proporcionados VIVAit Suite Se invoca desde el portal Vivait-Call
cargaContactos Uno por sistema Inserción en BBDD de las tablas ACD_CONTACTOS y ACD_CONTACTOS_CAMPANNA a través de los parámetros proporcionados VIVAit Suite Se invoca desde el portal Vivait-Call
ChatWebService Uno por sistema Interface entre el formulario de chat del VivaDesk y el servicio de chansip VIVAit Suite Servicio de multicanal texto
GeneraConf Uno por sistema Sincroniza cambios en algunas tablas de la BBDD con ficheros Asterisk VIVAit Call / VIVAit Suite Se invoca desde el portal Vivait-Call
generaLlamada Uno por sistema Generación de una llamada telefónica a partir de la invocación al servicio VIVAit Call / VIVAit Suite Creación de un archivo de llamada Asterisk y puesta en la carpeta outgoing
InfoWS Uno por sistema Proporciona información de llamadas de la BBDD y gestiona grabaciones VIVAit Suite La información de las llamadas puede ser de DBTR o DBHIST.

Inicia/finaliza grabaciones y mediante un script se trasladan los archivos de grabación a un directorio de ficheros específico

Vivait-FonBO Uno por sistema Proporciona información de la agenda e histórico de llamadas VIVAit Call Invocado por los portales vivait-user y webfon2
Vivait-Supervisor Uno por sistema Obtiene información de la BBDD y ejecuta acciones en el entorno corporativo. VIVAit Call Se invoca desde el portal Vivait-Supervisor
Tracker-Rest Uno por sistema Proporciona información de las llamadas corporativas y los ficheros de audio de las posibles grabaciones asociadas VIVAit Call Se invoca desde el portal Tracker-Corp
Vivait-Tracker Uno por sistema Proporciona información de las llamadas y los ficheros de audio de las posibles grabaciones asociadas.

Permite valorar las llamadas

VIVAit Call / VIVAit Suite Se invoca desde el portal Vivait-Tracker
Vivait-Call Uno por sistema Gestiona DBTR. Lee, crea, borra y actualiza los registros en las tablas de nimitz VIVAit Call / VIVAit Suite Se invoca desde el portal Vivait-Call





3.1.6 Nivel de Monitorización



Elemento Instancias Propósito Producto Observaciones
Servidor Zabbix Uno por sistema Monitoriza el estado y el rendimiento del sistema en tiempo real VIVAit Call / VIVAit Suite Bajo proyecto puede existir más de uno. Típicamente irá o en BBDD replica o en nodo de gestión en instalaciones grandes
Template Zabbix Uno por sistema Define qué se va a monitorizar y cómo hacerlo de forma reutilizable VIVAit Suite
Agente Zabbix Uno por sistema a monitorizar Componente que se instala en los equipos que se quieres monitorizar para recoger información directamente del sistema VIVAit Suite
Script monitorización Zabbix Uno por sistema Amplia lo que el sistema puede vigilar, especialmente cuando algo no se puede medir con las opciones estándar VIVAit Call / VIVAit Suite



Para más detalles, consultar el apartado Monitorización en VIVAit



3.2 Versiones de módulos



Módulo VSuite V.3.1 VSuite V.3.2 VSuite V.3.3 VIVAit V.3.0 (VSuite 3.4 + VCall 3.0) VIVAit V.3.1 (VSuite 3.5 + VCall 3.1) VIVAit V.3.2 (VSuite 3.6 + VCall 3.2) VIVAit V.3.4 (VSuite 3.8 + VCall 3.4) VIVAit V.3.5 (VSuite 3.9 + VCall 3.5) VIVAit V.3.6 (VSuite 3.9 + VCall 3.6) VIVAit V.4.0 (VSuite 3.9 + VCall 4.0) VIVAit V.5.0 (VSuite 3.9 + VCall 5.0) VIVAit V.5.1 (VSuite 3.9 + VCall 5.1)
Año de lanzamiento ---- ---- ---- 2015 2016 2018 2020 2021 2022 2023 2025 2026
Sistema Operativo ---- ---- ---- Ubuntu 14.0 LTS Ubuntu 14.0 LTS Ubuntu 16.0 LTS Ubuntu 18.4 LTS Ubuntu 20.4 LTS Ubuntu 20.4 LTS Ubuntu 20.4 LTS Ubuntu 22.4 LTS nodos ACD y Cisco

Debian 12 resto de nodos

Ubuntu 22.4 LTS nodos ACD y Cisco

Debian 13 resto de nodos

MySQL (C) ---- ---- ---- 5.5 5.5 5.7 5.7 8.0 8.0 8.0 ---- ----
Mariadb (C) ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- 10.11 11.4
Apache Tomcat (C) ---- ---- ---- ---- 7 8 8 9 9 9 9 11
PHP (C) ---- ---- ---- 5.6 5.6 7.0 7.0 7.4 7.4 8.2 8.4 8.4
OpenJDK (C) ---- ---- ---- ---- 7.0 8.0 8.0 11.0 11.0 11.0 11.0 21.0
Asterisk LTS (*) 1.4 nodo ACD 1.4 nodo ACD 1.4 nodo ACD 1.4 nodo ACD,

13 resto nodos

1.4 nodo ACD,

13 resto nodos

1.4 nodo ACD,

13 resto nodos

1.4 nodo ACD,

13 resto nodos

1.4 nodo ACD,

13 resto nodos

1.4 nodo ACD,

13 resto nodos

1.4 nodo ACD,

18 resto nodos

1.4 nodo ACD,

18 resto nodos

1.4 nodo ACD,

18 resto nodos

Asterisk MDTel

nodo ACD (VS)

---- ---- ---- 3.3.1 3.4.1 3,5,0 3.5.3 3.5.4 3.5.5 3.5.5 3.5.5 3.5.5
Asterisk MDTel

nodo Corp Cisco (VC)

---- ---- ---- 3.3.4 3.4.4 3.5.1 3.5.4 3.5.4 3.5.4 3.5.4 3.5.4 3.5.4
Asterisk MDTel

nodo Corp / GW (VC)

---- ---- ---- 3.3.4 3.4.4 3.5.1 3.5.4 3.5.5 3.5.6 3.5.6 3.6.0 3.7.0
BD (C) 3.2.0 3.4.0 3.5.0 3.6.0 3.8.0 3.9.0 3.11.0 3.11.1 3.11.2 3.11.3 3.20.0 3.30
CargaContactos (VS) 3.8.0 3.8.0 3.8.0 3.8.0 3.8.0 3.8.0
Dialplan ACD (VS) 3.5.0 3.6.0 3.8.1 3.8.2 3.8.3 3.8.4 3.9.0 3.10.0
Dialplan Corp (C) 3.3.1 3.5.0 3.6.0 3.8.1 3.8.2 3.8.3 3.8.4 3.9.0 3.10.0
Generaconf (C) 3.0.0 3.0.0 3.2.0 3.4.0 3.5.0 3.6.0 3.8.0 3.8.1 3.8.2 3.8.3 3.9.0 3.9.3
Instalador (C) 3.1.0 3.2.0 3.3.0 3.4.0 3.5.0 3.6.0 3.8.0 3.9.0 3.10.0 3.11.0 3.20 3.20
Intz-gh (VC) 0.1.0 0.1.1 0.1.2 0.1.3 0.1.4 0.1.5 0.1.7
Intz-nimitz (C) 2.6.0 3.0.1 3.0.3 3.4.1 3.4.2 3.4.4 3.5.0 3.7.1 3.08 4.0.0 4.0.1 4.0.3
Intz-tap (C) 0.1.0
Janus WebRTC Server (VC) --- --- --- --- --- --- --- 0.8.0 0.8.0 0.8.0 0.10.10 0.10.10
LazarusComún (VS) 3.1.0 3.2.0 3.3.0 3.4.0 3.5.0 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4
Mcan (VS) --- --- --- --- --- --- --- 0.1.5 0.1.5 --- --- ---
MotorPredi (VS) --- --- --- --- --- --- 0.1.1 0.1.1 0.1.1 ---- ---- ----
Motorsal (VS) 1.4.0 3.1.0 3.2.0 3.3.0 3.4.0 3.5.3 3.6.1 3.6.1 3.6.3 3.6.4
Multimonitorweb (VS) 3.0.1 3.0.2 3.1.0 3.1.0 3.2.0 3.2.0 3.4.1 3.4.1 3.4.3 3.4.4
MyACDSuperv (VS) 5.2.0 5.3.0 5.3.0 5.3.2 5.3.2 5.3.3 6.0.1 6.0.3 6.0.4 6.0.5
Phone_prov (C) ------ ------ 3.0.1 3.0.3 3.0.3 3.0.3 3.0.4 3.0.4 3.0.4 3.0.4 3.0.5 3.0.5
Portal de administración (C) 3.1.0 3.2.0 3.3.0 3.4.0 3.5.0 3.6.0 3.8.0 3.8.3 3.8.5 3.8.6 4.1.2 4.1.3
Portal usuario (VC) --- --- --- 3.0.0 3.1.0 4.0.0 4.1.0 4.1.0 4.1.1 4.1.2 ---- ----
Nuevo portal usuario (VC) --- --- --- --- --- --- --- 1.0.0 1.0.1 1.0.2 2.0.10 2.3.1
Portal webfon (VC) --- --- --- --- --- --- --- 1.0.0 1.0.1 1.0.2 2.0.10 2.3.1
FonBo (VC) ------ ------ ------ ----- ----- ----- ----- 1.0.0 1.0.1 1.0.1 1.0.1 2.0.5
Preview (VS) 1.0.18 3.2.0 3.3.0 3.4.0 3.5.0 3.5.0 --- --- --- --- ---- ----
recordCentral (C) ----- ----- ----- 4.0.0 4.0.1 4.0.2 4.0.3 4.0.3 4.0.3 4.0.4 4.0.4 4.0.4
recordgwd (C) 1.3.0 1.3.0 3.1.0 ----- ----- ---- ---- ---- ---- ---- ---- ----
recordNodo (C) ----- ----- ----- 4.0.0 4.0.0 4.0.0 4.0.3 4.0.3 4.0.3 4.0.3 4.0.3
recordprocesad (C) 1.2.0 1.2.0 3.0.0 ----- ----- ---- ---- ---- ---- ---- ---- ----
Sercen (C) 0.03.01 0.03. 0.03.05 0.4.2
Supervisor Web (VS) 1.0.0 1.0.0 1.1.0 1.1.1 1.2.0 2.0.2
Tracker Web (C) 3.0.2 3.1.0 3.2.0 3.3.0 3.4.0 3.5.0 3.7.0 3.7.1 3.7.3 3.7.8 3.8.0
Tracker Corporativo (C) ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- 0.1.0
Tracker windows (C) 3.0.0 3.1.0 3.2.0 3.3.0 3.4.0 3.4.0 ---- ---- ---- ---- ---- ----
VIVA designer (VS) 1.0.23 3.0.1 3.1.0 3.1.0 3.2.0 3.2.0 ---- ---- ---- ---- ---- ----
VIVA desk (VS) 3.0.2 3.2.0 3.3.0 3.4.0 3.5.0 3.5.2 3.5.3 3.6.1 3.6.6 3.6.6 3.6.6
VIVAit Call Business IOS (VC) --- --- --- --- --- --- --- --- --- --- 2.1.6 3.17.3
VIVAit Call Business Androit (VC) --- --- --- --- --- --- --- --- --- --- 2.1.6 3.0.17
VIVAit Call Celullar --- --- --- --- --- --- --- --- --- --- 1.0.1
VIVAit Call Cloud (VC) --- --- --- --- --- --- --- --- --- --- --- ----
VIVA report (VS) 1.2.0 3.1.0 3.2.0 3.2.2 3.3.0 3.4.1 3.5.1 3.5.2 3.5.3 3.5.4
VIVA supervisor (VS) 3.0.0 3.1.0 3.2.0 3.3.0 3.4.0 3.6.1 3.8.0 3.8.1 3.8.2 3.8.3
vivait-cti (VS) 3.0.0 3.0.1 3.0.1 3.0.1 3.0.2 3.0.2 4.0.1 4.0.1 4.0.1 4.0.1 4.0.1 4.0.1
WebRTC (VC) ----- ----- ----- ----- ----- ----- ----- 0.0.1 0.0.6 0.0.7 0.0.9 0.0.10
Vivait-direc (VC) ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- 0.0.8



La distribución de los módulos software por tipo de nodo se documentan en los procesos de instalación.
Se puede consultar un ejemplo de un entrorno virualizado en el siguiente enlace Instalación VIVAit 3.5

(C): Módulo común

(VC): Módulo de VIVAit Call

(VS): Módulo de VIVAit Suite

(*) La información sobre las versiones disponibles de Asterisk se puede encontrar en Versiones de Asterisk



3.3 Sistema Operativo



En la plataforma VIVAit se utiliza el sistema operativo Linux, con dos distribuciones según la versión del proyecto:

• Hasta la versión 4.0 y para proyectos especiales de VIVAit, se emplea Ubuntu Server LTS.
• A partir de la versión 5.0 de VIVAit, se utiliza por defecto Debian LTS.



3.3.1 Sistema Operativo Ubuntu



El sistema operativo de la plataforma VIVAit, hasta la versión 4.0, se basa en Ubuntu Server LTS.
Estas versiones cuentan con soporte a largo plazo (LTS), lo que las hace más estables y con actualizaciones controladas desde Ubuntu 14.04.1.
En concreto, el sistema operativo utilizado enVIVAit es Ubuntu Server 22.04 LTS.
Para más información visitar Ubuntu Server.

Sistema operativo ubuntu V5.1.png





3.3.2 Sistema Operativo Debian



El sistema operativo de la plataforma VIVAit, desde la versión 4.0, se basa en Debain LTS.
En concreto, el sistema operativo utilizado en VIVAit es la versión número Debian 13, de nombre Trixie con soporte a largo plazo LTS.
Estas versiones cuentan con soporte a largo plazo (LTS), lo que las hace más estables y con actualizaciones controladas.
Para más información Debian “trixie”.

Sistema operativo debian V5.1.png





3.4 Matriz de conmutación



La matriz de conmutación en la plataforma VIVAit se plantea con tres núcleos de conmutación diferentes:

* Nodos ACD: el núcleo de conmutación es Asterisk 1.4 RSP
* Nodos corporativo Cisco: el núcleo de conmutación es Asterisk 18 versión certified
* Nodos corporativos / GW: el núcleo de conmutación es Asterisk 18 versión certified

Sobre este núcleo constituido por Asterisk LTS se realizan las modificaciones necesarias para implementar la plataforma VIVAit conformando Asterisk MDTel.
Estas modificaciones se estructuran en dos apartados:

Asterisk MDTel, añadiendo y modificando ficheros en la instalación realizada.
Dialplan VIVAit, ficheros que modulan el comportamiento de Asterisk antes eventos externos.





3.4.1 Asterisk MDTel



Sobre el software Asterisk LTS instalado se realizan modificaciones para implementar las funcionalidades de conmutación de VIVAit.
Estas modificaciones se llevan a cabo mediante dos acciones complementarias, dando lugar al Asterisk MDTel.

* Añadiendo archivos nuevos
* Modificando archivos ya existentes



Los ficheros copiados son el código fuente que es necesario compilar e instalar.

3.4.1.1 Flujo de compilación e instalación de app en Asterisk



Dentro del flujo habitual:

Flujo compilación para asterisk V5.1.png



se seguirá el siguiente proceso operativo:

Paso 1: Edición del código fuente, colocado en el entorno de desarrollo. Por ejemplo para la app: app_mdintz.c, se podría usar:

    #cat /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/apps/app_mdintz.c
o
    #nano /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/apps/app_mdintz.c



Paso 2: Compilación del código fuente generando el binario utilizable por Asterisk

    app_mdintz.c → app_mdintz.o → app_mdintz.so

Para ello se utiliza el comando del sistema operativo

    #make

dentro de su contexto (directorio adecuado, controlado por el fichero Makefile, ...)

solo se compilan los ficheros .c, el restos de ficheros son auxiares y se utilizan en la compilación:
.h (headers) apoyan a los .c (definiciones, funciones, macros, estructuras)
.in plantillas usadas en compilación



Paso 3: instalación en Asterisk

    #cp app_mdintz.so /usr/lib/asterisk/modules/

o más completo

    #make install

dentro de su contexto (directorio adecuado, controlado por el fichero Makefile, ...)

Paso 4: Recargar en Asterisk. Se puede utilizar:

    #module reload app_mdintz.so

pero es más efectivo:

    #systemctl stop asterisk
    #systemctl start asterisk

Este es el archivo activo que Asterisk carga en tiempo de ejecución.



3.4.1.2 Archivos añadidos por MDtel



Se copia el código fuente en el entorno de desarrollo y se sigue el procedimiento visto más arriba

   /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4

y en diferentes subdirectorios, los archivos añadidos son los siguientes:

  /apps/app_ucid.c
  /apps/app_cli.c
  /apps/app_crash.c
  /apps/app_crash.exports.in
  /apps/app_mdintz.c
  /apps/app_mdintz.exports.in
  /apps/pqcti
  /apps/app_md_pqcti.c
  /channels/chan_mdtap.c
  /configs/samples/MDcrash.conf
  /include/asterisk/mdintz.h
  /include/asterisk/ucid.h
  /include/asterisk/mdcrash.h
  /include/asterisk/mdgh.h
  /res/res_mdcal.c
  /res/res_mdgh.exports.in
  /res/res_mdgh.c



La funcionalidad que aporta cada uno de ellos se puede consultar visualizando la cabecera de los mismos.

Ejemplo:

root@srv-vivaitcall-01:/usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/apps# cat app_ucid.c
/*
 * Asterisk -- An open source telephony toolkit.
 *
 * Copyright (C) 2011 MDtel
 *
 * See http://www.asterisk.org for more information about
 * the Asterisk project. Please do not directly contact
 * any of the maintainers of this project for assistance; 
 * the project provides a web site, mailing lists and IRC
 * channels for your use.
 *
 * This program is free software, distributed under the terms of
 * the GNU General Public License Version 2. See the LICENSE file
 * at the top of the source tree.
 */
/*! \file
 *
 * \brief Aplicacion para generar UCID
 *
 * \author MDtel
 *
 * \ingroup applications
 */
#include "asterisk.h"





3.4.1.3 Archivos modificados por MDTel



Se copia el código fuente en el entorno de desarrollo y se sigue el procedimiento visto más arriba

   /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4

y en diferentes subdirectorios, los archivos modificados son los siguientes:

  /apps/app_mixmonitor.c
  /apps/app_chanspy.c
  /apps/app_setoptions.c
  /apps/app_confbridge.c
  /cdr/cdr-csv.c
  /channels/sig_pri.c
  /channels/chan_sip.c
  /channels/chan_dahdi.c
  /channels/sip/dialplan_functions.c
  /contrib/scripts/safe_asterisk
  /contrib/init.d/rc.debian.asterisk
  /contrib/init.d/etc_default_asterisk
  /include/asterisk/audiohook.h
  /main/audiohook.c
  /main/asterisk.c  
  /main/pbx.c 
  /main/manager.c

  /res/res_mdcal.c
  /res/res_calendar_caldav.c





3.4.1.4 Ficheros significativos de Asterisk MDTel



A continuación se documentan algunos de los ficheros gestionados en los puntos anteriores.

/main/audiohook.c



Modificado para solucionar un crash de asterisk al utilizar en el mixmonitor las opciónes r y t

/apps/app_crash.c



Esta nueva aplicación es sólo compatible a partir de Asterisk 13.
La documentación de la misma se encuentra en el comando CLI de Asterisk:

   >core show application Crash



CLI app crash V5.1.png



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
Herramienta de laboratorio. No debería estar presente en una instalación en producción.



/apps/app_mdintz.c - /include/asterisk/mdintz.h



Esta aplicación sirve como interfaz a entornos (funcionalidades) creados por MDTel.
Está orientada al proceso de enrutamiento a implementar en intz-nimitz.
Para mas información consultar la página de MDintz.
El archivo es casi igual para toda las versiones de Asterisk utilizadas (1.4, 13, 18, ...).

Nota
Cuando se compila a partir de Asterisk 13, es necesario comentar la línea #define ASTERISK_OLD
//#define ASTERISK_OLD.



Los cambios implementados son:

* Unificación de código entre las versiones de asterisk
* Nuevo comando "qry"
* Posible resolución de "Mal write" en intz-nimitz (a verificar)



El formato del nuevo comando es:

    mdintz qry <nHostFijo> <entorno> <servicio> <par1>...<parN>



Permite interrogar a un servidor de igual modo que hace el dialplan para fines de diagnóstico.
La única diferencia es que se ha añadido el parámetro "nHostFijo" que puede tomar como valor: "*" (invoca interrogación secuencial a todos los servidores definidos,
igual a la funcionalidad del dialplan) ó de "0" a "3" (invoca un interrogación dirigida el host indicado como hostN, y sólo a él, en archivo de configuración).

/contrib/init.d/rc.debian.asterisk



Cambiado por el modificado por MDtel.
El fichero:

     /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/contrib/init.d/rc.debian.asterisk

es un script de inicio de Asterisk para sistemas Debian antiguos basados en SysVinit.

Sirve para:

- Arrancar Asterisk automáticamente,
- Detenerlo,
- Reiniciarlo,
- Comprobar estado.



Usos típicos

   root@srv-vivaitcall-01:~#service asterisk start/status/stop/restart



/contrib/scripts/safe_asterisk



Cambiado por el modificado por MDtel
Del directorio de desarrollo:

    /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/contrib/scripts/

es un script diseñado para monitorizar Asterisk y levantarlo automáticamente si se cae. La lógica del scrips funciona así:

- Lanza Asterisk en primer plano ejecuta el comando real (el binario que sí está compilado) usando la ruta
        /usr/sbin/asterisk -f.
- Se queda escuchando por si Asterisk se llega a colgar o se cierra inesperadamente con un error (EXITSTATUS diferente a 0), el script lo detecta.
- Guarda un reporte del fallo generando un archivo de volcado de memoria en la carpeta /tmp con la fecha y hora exacta del fallo para que puedas investigar qué pasó.
- Reinica el servicio, levantando la centralita automáticamente sin que la necesidad de que un técnico intervenga.

Después de la instalación aparece en:

   /usr/sbin/safe_asterisk

En este archivo se ha modificado MAXFILES=32768

Archivos de audio mp3



Añadiir la capeta mp3/ al directorio addons/

 /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/addons/

Esta permite la reproducción desde el diaplan de los mensajes en mp3.
Es necesario que Asterisk descargue el soporte de MP3 y se ejecuta el menú make menuselect.

El procedimiento sería:
Paso 1: entrar a la carpeta de fuentes:

   #cd /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/

Paso 2: descargar el soporte MP3:

   #./contrib/scripts/get_mp3_source.sh

Paso 3: lanzar el menú:

   #make menuselect

donde se modifican la opción:

- en la sección Add-ons marcar [*] format_mp3.
- guardar y salir.
Menuselect V5.1.png

Paso 4: compilar e instalar los nuevos módulos:

   #make
   #make insstall

Paso 5: gestionar la app el reproductor externo mpg123 para música en espera:

comprobar si está instalado:
   #mpg123 --version
si no está instalado, instalar:
   #apt install mpg123

Paso 6: reinciar Asterisk para que asuma las modificaciones

   #systemctl stop asterisk
   #systemctl start asterisk
   #systemctl status asterisk

Paso 7: comprobar resultados, en la consola Asterisk:

  >core show file formats



sig_pri.c



Modificado para enviar/recibir el ucid en un E1 conectado a una tarjeta DAHDI con señalización PRI y QSIG.
Para que se envié el ucid es necesario habilitar el envío de facilidades en

       /etc/asterisk/chan_dahdi.conf
       /usr/src/MDtel/DialPlan/chan_dahdi.conf

modificando

       facilityenable = yes



Nota
El concepto UCID solo tiene sentido dentro del entorno VIVAit.

Por ello, esta modificación se aplica cuando dos sistemas VIVAit están conectados mediante un enlace QSIG,
permitiendo que este parámetro se envíe y reciba entre los sistemas partner.



/etc/init.d/asterisk



La modificación realizada en este fichero ha sido la siguiente:

SAFE_ASTEISK=/usr/sbin/safe_asterisk
....
#//!!@RM
    if [ -f $SAFE_ASTERISK ]; then
        DAEMON=$SAFE_ASTERISK
    fi



/etc/default/asterisk



La finalidad de la modificación de este fichero es poder correr como usuario Asterisk, grupo asterisk y generar cores (descomentar línea).
Las modificaciones realizadas han sido:


#//!! jac
  AST_USER="asterisk"
  AST_GROUP="asterisk"
  ...
  COREDUMP=yes



/apps/app_cli.c



La función CLI de Asterisk permite ejecutar desde el dialplan un comando de línea de consola.
Sus principales uso en la actualidad son:

Lanzar los mensajes notify que los teléfonos necesitan para el reaprovisionamiento desde el portal de administración
Ejecutar los mensajes notify de reincio invocados desde la facilidad de movilidad de usuario.



Básicamente ejecuta un comando y devuelve su salida. Utiliza un archivo intermedio que puede ser:

* /dev/null si el campo se deja vacío, por tanto, no se puede recuperar la salida.
* TEMP, en cuyo caso se crea un archivo temporal que se borra antes de finalizar la ejecución de la función.
* Un nombre de fichero que es responsabilidad del dialplan el borrarlo cuando proceda.



Para instalarlo basta copiar app_cli.c en el directorio "apps" de los fuentes

  /usr/src/MDtel/MDASTCOR_3_7_0_asterisk_18.9-cert4/apps/

luego compilar e instalar:

   #make
   #make install



La información de la función CLI se puede obtenr desde la consola de Asterisk:

CLI app cli V5.1.png





3.4.2 Dialplan VIVAit



El Dialplan podría considerarse el cerebro del sistema Asterisk, decide qué hacer cuando un usuario marca un número o cuando entra una llamada.
Es el conjunto de reglas o acciones que determina cómo se procesan y enrutan las llamadas dentro del sistema VIVAit.
Sus funciones principales incluyen:

- Analizar los números marcados.
- Enrutar llamadas a extensiones internas o externas.
- Ejecutar aplicaciones (buzón de voz, colas, conferencias, IVR, grabación, etc.).
- Aplicar horarios, permisos y restricciones.
- Manipular números antes de enviarlos a otro destino.



Las configuraciones generales del Dialplan de Asterisk están accesibles en la ruta

   /etc/asterisk

y se materializan en ficheros editables, la mayoría de extensión .conf.

3.4.2.1 Conceptos básicos del Dialplan



El Dialplan de Asterisk es el mecanismo de programación basado en contextos, extensiones y prioridades que controla el tratamiento, enrutamiento y ejecución de servicios sobre las llamadas telefónicas.
Es la lógica de negocio de la centralita Asterisk, encargada de decidir qué acciones se realizan para cada llamada en función de su origen, destino y condiciones definidas por el administrador.

Normalmente el Dialplan se configura en archivos .conf (o mediante configuraciones equivalentes en tiempo real) y está organizado en:

- Contextos: definen el comportamiento del sistema ([interno], [externo], etc.).
- Extensiones: realmente son patrones de caracteres, normalmente números.
- Prioridades: pasos que se ejecutan secuencialmente.



Ejemplo básico:

  [interno]
  exten => 100,1,Answer()
   same => n,Playback(hello-world)
   same => n,Hangup()

Cuando alguien llama a la extensión 100, Asterisk:

1. Contesta la llamada.
2. Reproduce el mensaje hello-world, normalmente es un fichero de audio wav o mp3 según configuración.
3. Cuelga.



EXTENSIONES

Una extensión es una marcación en el teclado de un teléfono. Dicha configuración se encuentra 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 un 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.



3.4.2.2 Ficheros de configuración del Dialplan



En Asterisk, los archivos .conf son los ficheros de configuración donde se define el comportamiento de los distintos módulos del sistema.
El Dialplan es solo una parte de esa configuración. Los más importantes relacionados con este son:

Archivo Propósito
extensions.conf Define el Dialplan: contextos, extensiones y lógica de llamadas.
features.conf Configura funciones que pueden invocarse desde el Dialplan (transferencias, parking, etc.).



De los ficheros de configuración de Asterisk, extensions.conf contiene el dialplan, mientras que otros archivos proporcionan la configuración de los recursos, dispositivos y servicios que el Dialplan utiliza para procesar las llamadas.
Entre los que configuran canales y servicios están:

Archivo Propósito
pjsip.conf Configuración de terminales, troncales y transporte SIP (tecnología PJSIP).
sip.conf Configuración SIP clásica.
voicemail.conf Configuración del buzón de voz.
queues.conf Configuración de colas de llamadas.
agents.conf Configuración de agentes.
meetme.conf Salas de conferencia.
musiconhold.conf Música en espera.



En el sistema VIVAit estos se clasifican en:

Tipo de 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.
Particulares 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 tipo de nodo donde corre Asterisk, encontraremos dos tipos de dialplan:

Dialplan que aplica a nodos Corporativo o nodos GW'
Dialplan que aplica a nodos Call center

Para más información ver el apartado nodos.



3.4.2.3 Dialplan VIVAit CALL



A continuación se muestran las tablas con los ficheros de configuración correspondientes al Dialplan Corporativo.

GENERALES PARTICULARES WEB

acl.conf
adsi.conf
agents.conf
alarmreceiver.conf
alsa.conf
amd.conf
app_mysql.conf
app_skel.conf
ari.conf
ast_debug_tools.conf
asterisk.conf
calendar.conf
ccss.conf
cdr_adaptive_odbc.conf
cdr_beanstalkd.conf
cdr.conf
cdr_custom.conf
cdr_manager.conf
cdr_mysql.conf
cdr_odbc.conf
cdr_pgsql.conf
cdr_sqlite3_custom.conf
cdr_syslog.conf
cdr_tds.conf
cel_beanstalkd.conf
cel.conf
cel_custom.conf
cel_odbc.conf
cel_pgsql.conf
cel_sqlite3_custom.conf
cel_tds.conf
chan_dahdi.conf
chan_mobile.conf
check-sync
cli_aliases.conf
cli.conf
cli_permissions.conf
codecs.conf
confbridge.conf
config_test.conf
console.conf
dbsep.conf
dnsmgr.conf
dsp.conf
dundi.conf
enum.conf
extconfig.conf
ext_Enrutador.conf
extensions.conf
extensions_minivm.conf
ext_FAX.conf
ext_Grabaciones.conf
ext_IA.conf
ext_InicioLlamada_CHAR.conf
ext_InicioLlamada_Chrome.conf
ext_InicioLlamada_Cisco.conf
ext_InicioLlamada.conf
ext_InicioLlamada_Dahdi.conf
ext_InicioLlamada_Emer.conf
ext_InicioLlamada_ExtSIP.conf
ext_InicioLlamada_ExtSIP_MDTAPREC.conf
ext_InicioLlamada_GH.conf
ext_InicioLlamada_Pqcti.conf
ext_InicioLlamada_Teams.conf
ext_InicioLlamada_TrunkSIP.conf
ext_InicioLlamada_WS.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_SalasConfAvan.conf
ext_MARCAR_SalasConfAvan_Dial.conf
ext_MARCAR_SalasConf.conf
ext_MARCAR_SalasConf_Dial.conf
ext_MARCAR_Servicios.conf
ext_MARCAR_Servicios.conf.save
ext_MARCAR_VDN_Alertas.conf
ext_MARCAR_VDN.conf
ext_MARCAR_VDN_Dial.conf
ext_MDtel.conf
ext_MDtel_Var.conf
ext_Multidispositivo.conf
ext_Subrutinas_Alertas.conf
ext_Subrutinas_AnchoBanda.conf
ext_Subrutinas_BD_Alertas.conf
ext_Subrutinas_BD.conf
ext_Subrutinas_BD_Facilidad.conf
ext_Subrutinas_Codec.conf
ext_Subrutinas_Colas.conf
ext_Subrutinas.conf
ext_Subrutinas_Enrutamiento.conf
ext_Subrutinas_Estadisticas.conf
ext_Subrutinas_finLlamada.conf
ext_Subrutinas_Grabacion.conf
ext_Subrutinas_Multidispositivos.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
features.conf
festival.conf
followme.conf
func_odbc.conf
geolocation.conf
hep.conf
http.conf
iax.conf
iaxprov.conf
indications.conf
logger.conf
manager.conf
MDalertas.conf
MDcrash.conf
MDflow.conf
mdGen.conf
mdgh.conf
MDintz.conf
mdtap.conf
meetme.conf
mgcp.conf
minivm.conf
misdn.conf
modules.conf
motif.conf
musiconhold.conf
muted.conf
ooh323.conf
osp.conf
oss.conf
phone.conf
phoneprov.conf
pjproject.conf
pjsip.conf
pjsip_notify.conf
pjsip_wizard.conf
pqcti.conf
prometheus.conf
queuerules.conf
queues.conf
res_config_mysql.conf
res_config_sqlite3.conf
res_config_sqlite.conf
res_corosync.conf
res_curl.conf
res_fax.conf
res_ldap.conf
res_odbc.conf
resolver_unbound.conf
res_parking.conf
res_pgsql.conf
res_pktccops.conf
res_snmp.conf
res_stun_monitor.conf
rtp.conf
say.conf
sip.conf
sip.conf.orig
sip_Estatico.conf
sip_GENCUST.conf
sip_notify.conf
sip_notify.conf.orig
skinny.conf
sla.conf
smdi.conf
sorcery.conf
stasis.conf
statsd.conf
stir_shaken.conf
test_sorcery.conf
udptl.conf
unistim.conf
users.conf
voicemail.conf
voicemail.conf.orig
voximal.conf
vpb.conf
xmpp.conf

ext_Enrutador_Particular.conf
ext_FAX_Particular.conf
ext_Grabaciones_Particular.conf
ext_IA_Particular.conf
ext_InicioLlamada_CHAR_Particular.conf
ext_InicioLlamada_Chrome_Particular.conf
ext_InicioLlamada_Cisco_Particular.conf
ext_InicioLlamada_Dahdi_Particular.conf
ext_InicioLlamada_Emer_Particular.conf
ext_InicioLlamada_ExtSIP_Particular.conf
ext_InicioLlamada_GH_Particular.conf
ext_InicioLlamada_Particular.conf
ext_InicioLlamada_Pqcti_Particular.conf
ext_InicioLlamada_Teams_Particular.conf
ext_InicioLlamada_TrunkSIP_Particular.conf
ext_InicioLlamada_WS_Particular.conf
ext_MARCAR_DejarMensaje_Particular.conf
ext_MARCAR_Extension_Particular.conf
ext_MARCAR_Externo_Particular.conf
ext_MARCAR_Facilidad_Particular.conf
ext_MARCAR_SalasConfAvan_Particular.conf
ext_MARCAR_SalasConf_Particular.conf
ext_MARCAR_VDN_Alertas_Particular.conf
ext_MARCAR_VDN_Particular.conf
ext_mdGen_Particular.conf
ext_MDtel_Particular.conf
ext_Multidispositivo_Particular.conf
ext_Subrutinas_Particular.conf
ext_TrunkInternos_Particular.conf

asterisk_WEB.conf
ext_MARCAR_VDN_WEB_9000.conf
ext_MARCAR_VDN_WEB_9001.conf
ext_MARCAR_VDN_WEB_9002.conf
ext_MARCAR_VDN_WEB.conf
ext_MDtel_WEB.conf
MDalertas_WEB.conf
musiconhold_WEB.conf
queues_WEB.conf
sip_trunkExt_WEB.conf
sip_trunkInt_WEB.conf





3.4.2.4 Dialplan VIVAit Suite



A continuación se muestran las tablas con los ficheros de configuración correspondientes al Dialplan ACD.

GENERALES PARTICULARES WEB

acl.conf
adsi.conf
agents.conf
alarmreceiver.conf
alsa.conf
amd.conf
app_mysql.conf
app_skel.conf
ari.conf
ast_debug_tools.conf
asterisk.conf
calendar.conf
ccss.conf
cdr_adaptive_odbc.conf
cdr_beanstalkd.conf
cdr.conf
cdr_custom.conf
cdr_manager.conf
cdr_mysql.conf
cdr_odbc.conf
cdr_pgsql.conf
cdr_sqlite3_custom.conf
cdr_syslog.conf
cdr_tds.conf
cel_beanstalkd.conf
cel.conf
cel_custom.conf
cel_odbc.conf
cel_pgsql.conf
cel_sqlite3_custom.conf
cel_tds.conf
chan_dahdi.conf
chan_mobile.conf
cli_aliases.conf
cli.conf
cli_permissions.conf
codecs.conf
confbridge.conf
config_test.conf
console.conf
dbsep.conf
dnsmgr.conf
dsp.conf
dundi.conf
enum.conf
extconfig.conf
ext_Enrutador.conf
extensions.conf
extensions.conf.orig
extensions_minivm.conf
ext_FAX.conf
ext_Grabaciones.conf
ext_IA.conf
ext_InicioLlamada_CHAR.conf
ext_InicioLlamada_Chrome.conf
ext_InicioLlamada_Cisco.conf
ext_InicioLlamada.conf
ext_InicioLlamada_Dahdi.conf
ext_InicioLlamada_Emer.conf
ext_InicioLlamada_ExtSIP.conf
ext_InicioLlamada_ExtSIP_MDTAPREC.conf
ext_InicioLlamada_GH.conf
ext_InicioLlamada_Pqcti.conf
ext_InicioLlamada_Teams.conf
ext_InicioLlamada_TrunkSIP.conf
ext_InicioLlamada_WS.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_SalasConfAvan.conf
ext_MARCAR_SalasConfAvan_Dial.conf
ext_MARCAR_SalasConf.conf
ext_MARCAR_SalasConf_Dial.conf
ext_MARCAR_Servicios.conf
ext_MARCAR_VDN_Alertas.conf
ext_MARCAR_VDN.conf
ext_MARCAR_VDN_Dial.conf
ext_MDtel.conf
ext_MDtel_Var.conf
ext_Multidispositivo.conf
ext_Subrutinas_Alertas.conf
ext_Subrutinas_AnchoBanda.conf
ext_Subrutinas_BD_Alertas.conf
ext_Subrutinas_BD.conf
ext_Subrutinas_BD_Facilidad.conf
ext_Subrutinas_Codec.conf
ext_Subrutinas_Colas.conf
ext_Subrutinas.conf
ext_Subrutinas_Enrutamiento.conf
ext_Subrutinas_Estadisticas.conf
ext_Subrutinas_finLlamada.conf
ext_Subrutinas_Grabacion.conf
ext_Subrutinas_Multidispositivos.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
features.conf
festival.conf
followme.conf
func_odbc.conf
geolocation.conf
hep.conf
http.conf
iax.conf
iaxprov.conf
indications.conf
logger.conf
manager.conf
MDalertas.conf
MDcrash.conf
MDflow.conf
mdGen.conf
mdgh.conf
MDintz.conf
mdtap.conf
meetme.conf
mgcp.conf
minivm.conf
misdn.conf
modules.conf
motif.conf
musiconhold.conf
muted.conf
ooh323.conf
osp.conf
oss.conf
phone.conf
phoneprov.conf
pjproject.conf
pjsip.conf
pjsip_notify.conf
pjsip_wizard.conf
pqcti.conf
prometheus.conf
queuerules.conf
queues.conf
queues.conf.orig
res_config_mysql.conf
res_config_sqlite3.conf
res_config_sqlite.conf
res_corosync.conf
res_curl.conf
res_fax.conf
res_ldap.conf
res_odbc.conf
resolver_unbound.conf
res_parking.conf
res_pgsql.conf
res_pktccops.conf
res_snmp.conf
res_stun_monitor.conf
rtp.conf
say.conf
sip.conf
sip_Estatico.conf
sip_GENCUST.conf
sip_notify.conf
sip_notify.conf.orig
skinny.conf
sla.conf
smdi.conf
sorcery.conf
stasis.conf
statsd.conf
stir_shaken.conf
test_sorcery.conf
udptl.conf
unistim.conf
users.conf
voicemail.conf
voicemail.conf.orig
voximal.conf
vpb.conf
xmpp.conf

ext_Enrutador_Particular.conf
ext_FAX_Particular.conf
ext_Grabaciones_Particular.conf
ext_IA_Particular.conf
ext_InicioLlamada_CHAR_Particular.conf
ext_InicioLlamada_Chrome_Particular.conf
ext_InicioLlamada_Cisco_Particular.conf
ext_InicioLlamada_Dahdi_Particular.conf
ext_InicioLlamada_Emer_Particular.conf
ext_InicioLlamada_ExtSIP_Particular.conf
ext_InicioLlamada_GH_Particular.conf
ext_InicioLlamada_Particular.conf
ext_InicioLlamada_Pqcti_Particular.conf
ext_InicioLlamada_Teams_Particular.conf
ext_InicioLlamada_TrunkSIP_Particular.conf
ext_InicioLlamada_WS_Particular.conf
ext_MARCAR_DejarMensaje_Particular.conf
ext_MARCAR_Extension_Particular.conf
ext_MARCAR_Externo_Particular.conf
ext_MARCAR_Facilidad_Particular.conf
ext_MARCAR_SalasConfAvan_Particular.conf
ext_MARCAR_SalasConf_Particular.conf
ext_MARCAR_VDN_Alertas_Particular.conf
ext_MARCAR_VDN_Particular.conf
ext_mdGen_Particular.conf
ext_MDtel_Particular.conf
ext_Multidispositivo_Particular.conf
ext_Subrutinas_Particular.conf
ext_TrunkInternos_Particular.conf

asterisk_WEB.conf
ext_MARCAR_VDN_WEB_9000.conf
ext_MARCAR_VDN_WEB_9001.conf
ext_MARCAR_VDN_WEB_9002.conf
ext_MARCAR_VDN_WEB.conf
ext_MDtel_WEB.conf
MDalertas_WEB.conf
musiconhold_WEB.conf
queues_WEB.conf
sip_trunkExt_WEB.conf
sip_trunkInt_WEB.conf





3.5 Bases de datos (BBDD)



La base de datos del sistema se basa en el motor de base de datos MariaDB, compatible con MySQL.
Constituye un elemento crítico de la plataforma, ya que múltiples procesos almacenan y recuperan información de ella de forma continua.
Gran parte de la comunicación e intercambio de información entre procesos se realiza a través de la base de datos, utilizando para ello distintas tablas del sistema.
El sistema puede disponer de diferentes instancias de base de datos, cuya función y configuración difiere notablemente:

Base de datos de tiempo real, DBTR
Base de datos de histórica, DBHIST
Base de datos copia local, DBCopia



La estructura que tiene la BBDD del sistema VIVAit se puede consultar aquí.
Para más información sobre MariaDB consultar la documentación de MariaDB.



3.5.1 BBDD Tiempo Real (DBTR)



En la base de datos de tiempo real se insertan datos todos los procesos del sistema, y se realizan los cambios en configuración utilizando como herramienta el Portal de Administración y la aplicación de Call Center VIVAit Supervisor.
De la base de datos de tiempo real leen los procesos que requieren información. Además de las aplicaciones:

* VIVAit Supervisor, para reporting de tiempo real
* VIVAit Tracker, para datos de llamadas y grabaciones
* PanelWeb
* Datos de sesión de VIVAit Desk
* Monitorización Zabbix
* Otros



Desde el portal de administración se escriben en DBTR las configuraciones realizadas en VIVAit.

Para cuando la BDTR contienen un número masivo de datos, existe un script que borra el contenido de ciertas tablas (tablas DAT_) dejando solamente datos de un cierto número de días configurable.
Este script se llama borraRegistrosNimitz.pl, y se encuentra en el nodo donde está instalada DBTR.
Para más información consultar el apartado Hotows
Por defecto los registros se mantienen 90 días.



3.5.2 BBDD Réplica (DBHIST)



DBHIST es una réplica en tiempo real de DBTR.
Mediante la replicación de MariaDB, todos los cambios realizados en DBTR se copian automáticamente en DBHIST, manteniendo ambas bases de datos sincronizadas.
Esto permite disponer de una copia actualizada de la información para consultas, análisis histórico y como respaldo ante posibles incidencias en la base de datos principal.

El mecanismo se basa en la reproducción continua de los eventos registrados en el binary log de DBTR

   /usr/bin/mariadb-binlog

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 DBTR.
Entre estos procesos están los que se invocan desde portales de supervisión.
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.
Se pueden configurar tantas réplicas como sea necesario para distribuir la carga de procesos intensivos y evitar que afecten al rendimiento del sistema. No obstante, en una implantación estándar normalmente se utilizará una única réplica.
Algunos procesos que utilizan la base de datos de réplica son:

• Portal VIVAit Supervisor
• Portal VIVAit Tracker
• Portal Tracker WEB
VIVAit Reporting
• App Gestor de llamadas
• Histórico en tiempo real de la app VIVAit Supervisor



Importante
El tipo de replica es unidireccional

ningún proceso, programa, aplicación, etc. escribe en DBHIST; de alla solo se extrae información





3.5.2.1 Funcionamiento de la replica



El funcionamiento de DBTHIST es el siguiente:

1. Un cliente inserta, modifica o elimina datos en la base principal (DBTR).
2. MariaDB registra cada cambio en el Binary Log (binlog).
3. La réplica (DBHIST) se conecta a la base principal y lee esos eventos.
4. La réplica almacena temporalmente los eventos en el Relay Log.
5. Un proceso de réplica ejecuta esos eventos sobre su propia base de datos.
6. Ambas bases permanecen sincronizadas con un pequeño retardo, normalmente de milisegundos o pocos segundos.



DBTR-DBHIST V51.png





3.5.2.2 Configuración básica de la replica



Para una réplica DBTR → DBHIST usando GTID (Identificador Global de Transacción), se debe trabajar en los dos servidores que constituyen el sistema de replica.

Configuración en el servidor principal con DBTR
Configuración en el servidor secundario con DBHIST



3.5.2.2.1 Configuración en el servidor principal



En el servidor master donde se sitúa DBTR.

Paso 1. Editar configuración de mariaDB
  #cat /etc/mysql/my.cnf
     .....   
    [mysqld]
      server-id=1     # Identificador único del servidor
      binlog_format=ROW
Paso 2. Verificar, desde consola de MariaDB, que GTID y binlog están habilitados:
   #mysql -u root -p
   SQL
     SHOW VARIABLES LIKE 'log_bin';
     SHOW VARIABLES LIKE 'gtid%';
DBTR logbin V5.1.png



Paso 3. Crear un usuario concederle permisos de replicación:
   #mysql -u root -p
   SQL
     MariaDB [(none)]> CREATE USER 'replicador'@'%' IDENTIFIED BY 'psw_replicador';
     MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'replicador'@'%';

comprobar resultado

     MariaDB [(none)]> SHOW GRANTS FOR 'replicador'@'%';
DBTR replicador V5.1.png



Paso 4. Obtener una copia consistente:
        #mysqldump -u root -p --single-transaction --routines --triggers nimitz > nimitz_backup.sql

el fichero backup.sql se crea en el directorio desde el que se invoca el comando.



3.5.2.2.2 Configuración en el servidor secundario



En el servidor slave donde se sitúa DBHIST.

Paso 1. Editar configuración de mariaDB
  #cat /etc/mysql/my.cnf
     .....   
    [mysqld]
      server-id=2     # Identificador único del servidor
      binlog_format=ROW
Paso 2. Restauran la copia realizada anteriormente en DBTR:
   #mysql -u root -p < nimitz_backup.sql

previamente hay que colocar el fichero backup.sql en el directorio desde el que se invoca el comando.

Paso 3. Desde la consola de MaríaDB configurar la conexión con el servidor principal:
   #mysql -u root -p
   SQL
     MariaDB [(none)]> STOP SLAVE;
     MariaDB [(none)]> CHANGE MASTER TO
     MariaDB [(none)]> MASTER_HOST='DBTR',
     MariaDB [(none)]> MASTER_USER='replicador',
     MariaDB [(none)]> MASTER_PASSWORD='psw_replicador',
     MariaDB [(none)]> MASTER_PORT=3306,
     MariaDB [(none)]> MASTER_USE_GTID=slave_pos;
     MariaDB [(none)]> START SLAVE;
Paso 4. Verificar el estado:
   SQL
     MariaDB [(none)]> show slave status\G

para analizar la información mostrada consultar el estado de la réplica.



3.5.3 BBDD de copia (DBCopia)



A efectos de asegurar el funcionamiento, y como medida de contingencia ante un problema puntual de comunicación con la DBTR, en cada nodo se dispone 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 se llama nimitzCopia.

Solo se activará cuando ocurra el problema descrito, el cual impide el acceso a los datos.
Su finalidad es mantener un nivel mínimo de servicio para la empresa mientras se resuelve la incidencia.





3.5.3.1 Sincronización DBTR - DBCopia



Con el fin de mantener DBCopia sincronizada con DBTR, se emplean dos scripts.
El primero genera una copia de seguridad de DBTR y el segundo restaura esa copia en DBCopia localmente en cada nodo en el que existe esta base de datos.
Estos procesos son:

bdCentral.sh

Es el encargado de realizar la copia de seguridad en el nodo donde resida DBTR.
Tiene un archivo de configuración bdCentral.conf en el que 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.
El resultado de su ejecución se puede monitorizar en

   /var/log/bdCentral.log
Copia dbtr V5.1.png



bdNodo.sh

Corriendo en cada nodo que tenga DBCopia, es el encargado de descargar la copia de seguridad a cada nodo donde haya que restaurarla en local.
Tiene un archivo de configuración bdNodo.conf.
Vuelca los resultados en

  /var/log/bdNodo.log
Copia dbcopia V5.1.png

El fichero de backup se copia mediante el usuario sincroniza, que deberá poder acceder sin contraseña al servidor donde reside DBTR, que es donde se realiza la copia de backup.

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



Además de las comprobaciones que se pueden realizar sobre DBCopia, vistas más arriba, se pueden realizar algunas comporbaciones básicas sobres DBTR y DBHIST para comprobar que están realizando su función adecuadamente.
Como operaciones básicas se pueden realizar:

Comprobar el estado de DBTR
Comprobar el estado de DBHIST
Comprobar el estado de la réplica
Comprobar el estado de la copia





3.5.4.1 Estado de una base de datos



Para comprobar si la base de datos está arrancada se puede utilizar el comand

   ps aux

Si la base de datos está arrancada y funcionando correctamente se mostrará en el terminal algo parecedo a esto

Ps-aux V51.png



Por el contrario, si la base de datos presenta algún problema el mensaje mostrado una información diferente, como puede ser:

Ps-aux mal V51.png





3.5.4.2 Comprobar sincronización DBTR - DBHIST



Para verificar que la base de réplica está sincronizada con la base de datos en tiempo real basta con acudir al comando sql:

   show master status

realizado desde DBTR, y

   show slave status

realizado desde DBHIST.

Ejemplo

Analizando el resultado del siguiente comando, ejecutado desde la replica, se puede averiguar el estado de sincronización entre DBTR y DBHIST.

   show slave status\G.



Status slave V51.png



A continuación se describe el significado de cada parámetro.

Parámetro Significado
Slave_IO_State Estado actual del hilo de E/S (IO) encargado de conectarse al maestro y recibir los eventos de replicación.
Master_Host Nombre o dirección IP del servidor maestro.
Master_User Usuario utilizado para la conexión de replicación al maestro.
Master_Port Puerto TCP utilizado para la conexión con el maestro.
Connect_Retry Intervalo, en segundos, entre intentos de reconexión al maestro.
Master_Log_File Fichero binlog del maestro que está siendo leído actualmente por el hilo IO.
Read_Master_Log_Pos Posición dentro del binlog del maestro hasta la que se han leído eventos.
Relay_Log_File Fichero relay log local que está siendo procesado.
Relay_Log_Pos Posición actual dentro del relay log.
Relay_Master_Log_File Binlog del maestro al que corresponden los eventos contenidos en el relay log actual.
Slave_IO_Running Indica si el hilo IO está funcionando (Yes o No).
Slave_SQL_Running Indica si el hilo SQL está funcionando (Yes o No).
Replicate_Do_DB Bases de datos que se replican explícitamente.
Replicate_Ignore_DB Bases de datos excluidas de la replicación.
Replicate_Do_Table Tablas que se replican explícitamente.
Replicate_Ignore_Table Tablas excluidas de la replicación.
Replicate_Wild_Do_Table Patrón de tablas incluidas en la replicación mediante comodines.
Replicate_Wild_Ignore_Table Patrón de tablas excluidas mediante comodines.
Last_Errno Código numérico del último error producido por la replicación.
Last_Error Descripción textual del último error producido.
Skip_Counter Número de eventos que se han configurado para ser ignorados.
Exec_Master_Log_Pos Posición del binlog del maestro correspondiente al último evento ejecutado correctamente por el hilo SQL.
Relay_Log_Space Tamaño total ocupado por los relay logs almacenados localmente.
Until_Condition Condición utilizada para detener la replicación automáticamente.
Until_Log_File Binlog objetivo para una parada programada de la réplica.
Until_Log_Pos Posición objetivo para una parada programada de la réplica.
Master_SSL_Allowed Indica si la conexión con el maestro utiliza SSL/TLS.
Master_SSL_CA_File Fichero CA utilizado para validar certificados SSL.
Master_SSL_CA_Path Directorio que contiene certificados CA.
Master_SSL_Cert Certificado utilizado por la réplica para autenticarse.
Master_SSL_Cipher Algoritmo de cifrado SSL utilizado en la conexión.
Master_SSL_Key Clave privada asociada al certificado SSL.
Seconds_Behind_Master Retraso estimado de la réplica respecto al maestro en segundos.
Master_SSL_Verify_Server_Cert Indica si se verifica el certificado del servidor maestro.
Last_IO_Errno Código del último error del hilo IO.
Last_IO_Error Descripción del último error del hilo IO.
Last_SQL_Errno Código del último error del hilo SQL.
Last_SQL_Error Descripción del último error del hilo SQL.
Replicate_Ignore_Server_Ids Lista de identificadores de servidores cuyos eventos se ignoran.
Master_Server_Id Identificador único (server-id) del servidor maestro.
Master_SSL_Crl Fichero de lista de revocación de certificados (CRL).
Master_SSL_Crlpath Directorio que contiene las listas CRL.
Using_Gtid Modo de uso de GTID en la replicación.
Gtid_IO_Pos Último GTID recibido desde el maestro.
Replicate_Do_Domain_Ids Dominios GTID que se replican explícitamente.
Replicate_Ignore_Domain_Ids Dominios GTID excluidos de la replicación.
Parallel_Mode Modo de ejecución paralela de eventos en la réplica.
SQL_Delay Retardo configurado para aplicar eventos en la réplica.
SQL_Remaining_Delay Tiempo restante para aplicar el siguiente evento cuando existe retardo configurado.
Slave_SQL_Running_State Estado detallado del hilo SQL.
Slave_DDL_Groups Número de grupos de operaciones DDL procesados (CREATE, ALTER, DROP, etc.).
Slave_Non_Transactional_Groups Número de grupos de operaciones no transaccionales procesados.
Slave_Transactional_Groups Número de grupos de operaciones transaccionales procesados.
Replicate_Rewrite_DB Reglas de reescritura de nombres de bases de datos durante la replicación.





3.6 Procesos propios VIVAit




En construcción



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




Volver al índice

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



Volver al índice

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





Volver al índice


3.6.3.1 Nuevo servicio en intz-nimitz 04.00.00

Para las colas con extensiones multiterminal, se ha creado un ha creado un nuevo servicio en intz-nimitz 04.00.00.

La descripción de nuevo servicio es:

   multiTermGrupoSaltoRing
   . Devuelve la mascara con los terminales que tienen que sonar (ring) al estar la extension en una cola (queue, ringall).
   . par1 (extension)
   . Retornos posibles (ademas del los genericos) en ${MDintzRes}:
   .. OK: Todo correcto.
   .. KO: Ha habido un problema.
   . Retorno en MTERM (solo si OK): mascara con los terminales y su orden (ej: '33245289').
   . Retorno en MTERM_MENOR (solo si OK): mascara con los terminales y su orden, filtrando las de orden menor (ej: '00200200').

3.6.4 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




Volver al índice

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




Volver al índice

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

  1. Proceso escoba perteneciente a nodo con agente de grabación (recordNodo) llamado escobaGW.pl.
  2. Proceso escoba perteneciente o no a un servidor de grabación (recordCentral) llamado escobaGrabsBd.pl.
3.6.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.6.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.



Volver al índice

  • 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.6.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



Volver al índice

3.6.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.6.9 Sercen

Sercen (Servicios Centrales) es un demonio de VIVAit que provee servicios centralizados a muchos elementos de la arquitectura. Sirve para identificar a los usuarios y garantizar que los mismos sean quienes dicen ser. Puede haber varias instancias en el, y diferentes servicios pueden estar en diferentes Sercen


Ejemplos de servicios:

- Autenticación, de factor simple o doble factor

- Integración con proveedores de autenticación

- Click2talk (Demonio dentro de Vivait)


Sercen permite autenticar un usuario (simple factor o doble factor), utilizando para ello la base de datos de vivait y/u otro mecanismo externo, como puede ser el directorio activo de Microsoft.

SerCen se relaciona con :


- BBDD

- Asterisk (para el click2talk)

- VIVAit Meet (para por ejemplo las funciones “botón colaborar” y ”Recursos compartidos”.

- Con los portales a los que proporciona los servicios vía webservice


3.6.9.1 Interfaz para autenticación (app-webfon / serCen)

Este interfaz permite autenticar un usuario (simple factor o doble factor), utilizando para ello la base de datos de vivait y/u otro mecanismo externo, como puede ser el directorio activo de Microsoft. El objetivo es que app-webfon obtenga un token que debe incluirse en las comunicaciones con el resto de elementos para que estos conozcan que las solicitudes proceden de un usuario autenticado. Este token también puede utilizarse para que otras aplicaciones puedan se iniciadas desde app-webfon y no se requiera de un proceso específico de autenticación para cada aplicación. De modo recíproco, app- webfon debe soportar el ser invocado con un token y, en tal caso, considerar que el usuario ya está autenticado.


Por ello, se asume que cada usuario conoce su clave. Independientemente de qui én gestione la clave, esta puede tener asociados periodos de expiración y de caducidad. Cuando finaliza el periodo de expiración, el usuario tiene que cambiar la clave obligatoriamente para poder acceder a sus credenciales (token). Tras la caducidad, ya no puede obtener credenciales válidas.


Cuando la autenticación utiliza las claves almacenadas en la base de datos vivait, serCen permite cambiar la clave. Si la validación de la clave se apoya en mecanismos externos (como puede ser el directorio activo), entonces serCen no soporta el cambio de claves, informando de ello en las respuestas correspondientes a los comandos de autenticación.



3.6.9.2 Comandos de SerCen

Los diferentes comandos de SerCen son:


COMANDOS DESCRIPCIÓN
autenticar1 Para autenticar en base al primer factor (usuario y clave).
autenticar2 Para, si procede, autenticar en base al segundo factor (pin adicional).
autenticartokenaad Autenticar empleando un token de "azure active directory"
validarToken Para autenticar a un usuario en base a un token suministrado por otra aplicación
revalidarToken Para ampliar el periodo de expiración de un token válido.
revocarToken Para que un token deje de ser válido.
cambiarClave Permite que una clave pueda se cambiada. Esto es posible cuando el usuario ha sido autenticado y, además, la clave tiene que estar siendo gestionada por vivait. Este cambio no es posible, por ejemplo, si se trata de una clave validada por un directorio activo.


3.6.9.2.1 Comandos autenticar1

Comandos autenticar1 y respuestas posibles:

autenticar1. Autenticación primer factor.

url (POST): https://<servidor_webfon>/sercen/postautenticar1

datos de entrada: {"cuenta": "fulano","clave$1aA": "dificil","aplicacion": "webfon","expira": 7200,"clvCambiar": "masdificil$1aA"}

  • "expira" es opcional y siempre posible. Permite solicitar un periodo de expiración (segs) para el token devuelto.
  • "clvCambiar" es opcional y solo se tiene en cuenta si no hay doble factor. Permite cambiar la clave del usuario, si es autenticado.


Ejemplos de posibles respuestas:


Ejemplo Respuesta
ejRes1 {"errorNum": 101,"errorCad": "Clave incorrecta"}
ejRes2 {"errorNum": 115,"errorCad": "Clave caducada"}
ejRes3 {"errorNum": 116,"errorCad": "Clave expirada","dobleFactor": "no","clvLongitudMinima": 6,"clvRequiereNumeros": true, "clvRequiereMayusculas": true, "clvRequiereMinusculas": true, "clvRequiereCarsEspeciales": false}
ejRes4 ejRes4: {"errorNum": 0,"errorCad": "OK","token": "1234567890","dobleFactor": "email","clvExpira": 86400}
ejRes5 {"errorNum":0,"errorCad":"OK","token": "1234567890","dobleFactor": "email","clvExpira": 86400}
ejRes6 {"errorNum": 0,"errorCad": "OK","token": "1234567890","dobleFactor": "no","token2": "0987654321","expira": 3600,"clvExpira": 86400,"clvPuedeCambiar": true,"clvHaCambiado": true,"clvLongitudMinima": 6,"clvRequiereNumeros": true, "clvRequiereMayusculas": true, "clvRequiereMinusculas": true, "clvRequiereCarsEspeciales": false}


Este comando se invoca para autenticar al usuario en base a cuenta y clave. Opcionalmente, se soporta un doble factor en base a un pin que se comunica al usuario mediante correo electrónico u otro medio.

El campo "expira" en la respuesta informa sobre el token devuelto. Dicho token es válido durante un periodo que se expresa en segundos a transcurrir desde el momento en que se informa.

El campo "clvExpira" en la respuesta informa en segs. sobre cuando va a expirar la clave introducida y validada (errorNum=0). Si devuelve cero o no devuelve nada, quiere decir que no va a expirar por estar configurado de esa manera o porque es un autenticación ldap.

Al invocar este comando, app-webfon solicita, opcionalmente (campo "expira"), un periodo (en segundos) cuyo valor debe formar parte de su configuración. El valor finalmente válido es el que aparece con el mismo nombre en la respuesta (si finalmente es positiva) y si no hay doble factor.

Es responsabilidad de app-webfon el efectuar una solicitud para revalidar el token, mediante un procedimiento que se describirá posteriormente, tantas veces como considere necesario.


En lo que se refiere a las posibles respuestas a autenticar1, pueden darse varios casos:

Se produce un error: ejRes1 y ejRes2.

La clave ha expirado y no hay doble factor (ejRes3). Se invita a cambiar la clave invocando de nuevo a autenticar1 con "clvCambiar", para lo cuál se aportan datos de la complejidad requerida.

La clave es válida y hay doble factor en ejRes4.

La clave es válida y hay doble factor "totp" con usuario no enrolado en ejRes6. Se incluye un código QR que permite enrolar al usuario


La clave es válida y no hay doble factor en ejRes6. El usuario ha sido autenticado. Se devuelven "token" y "token2". También se informa sobre si es posible cambiar la clave ("clvPuedeCambiar") y sobre sus requerimientos de complejidad. Si el comando autenticar1 hubiese incluido un cambio de clave mediante el campo "clvCambiar" y este cambio hubiese sido completado, se devolverá un booleano "clvHaCambiado" para informar de ello.


3.6.9.2.2 Comandos autenticar2

Comandos autenticar2 y respuestas posibles:

autenticar2. Autenticación doble factor.

url (POST): https://<servidor_webfon>/sercen/postautenticar2

datos de entrada: {"token": "1234567890","pin": "1234","expira": 7200,"clvCambiar": "masdificil$1aA"}

  • "expira" es opcional.
  • "clvCambiar" es opcional. Permite cambiar la clave del usuario, si es autenticado.


Ejemplos de posibles respuestas:


Ejemplo Respuesta
ejRes1 {"errorNum": 102,"errorCad": "Pin incorrecto"}
ejRes2 {"errorNum": 115,"errorCad": "Clave caducada"}
ejRes3 {"errorNum": 116,"errorCad": "Clave expirada","clvLongitudMinima": 6,"clvRequiereNumeros": true, "clvRequiereMayusculas": true, "clvRequiereMinusculas": true, "clvRequiereCarsEspeciales": false}
ejRes4 ejRes4: {"errorNum": 0,"errorCad": "OK","token2": "0987654321","expira": 3600,"clvExpira": 86400,"clvPuedeCambiar": true,"clvHaCambiado": true,"clvLongitudMinima": 6,"clvRequiereNumeros": true, "clvRequiereMayusculas": true, "clvRequiereMinusculas": true, "clvRequiereCarsEspeciales": false}


Este comando se invoca para autenticar en base a un segundo factor: pin enviado por un medio de transporte independiente.

El campo "expira" en la respuesta informa sobre el token enviado y token2 devuelto. Dichos token son válidos durante un periodo que se expresa en segundos a transcurrir desde el momento en que se informa.


El campo "clvExpira" en la respuesta informa en segs. sobre cuando va a expirar la clave introducida y validada (errorNum=0). Si devuelve cero o no devuelve nada, quiere decir que no va a expirar por estar configurado de esa manera o porque es un autenticación ldap.


El campo que requiere explicación adicional es "token2". "token" puede ser traspasado a otras aplicaciones para evitar procesos de autenticación, pero esas aplicaciones (a las que no debe pasarse el valor de "token2") no podrán realizar operaciones relacionadas con el propio token, como puede ser revocarlo, cuando el usuario cierre el app-webfon. Es decir, el valor de "token2" sólo se requiere para operaciones de gestión del propio token. Sin "token2" tampoco es posible ejecutar el comando "cambiarClave".


En lo que se refiere a las posibles respuestas a autenticar2, pueden darse varios casos:


Se produce un error: ejRes1 y ejRes2.


La clave ha expirado (ejRes3). Se invita a cambiar la clave invocando de nuevo a autenticar2 con "clvCambiar", para lo cuál se aportan datos de la complejidad requerida.


El pin del doble factor es válido en ejRes4. El usuario ha sido autenticado. Se devuelve "token2" ("token" ya se tiene). También se informa sobre si es posible cambiar la clave ("clvPuedeCambiar") y sobre sus requerimientos de complejidad. Si el comando autenticar2 hubiese incluido un cambio de clave mediante el campo "clvCambiar" y este cambio hubiese sido completado, se devolverá un booleano "clvHaCambiado" para informar de ello.



3.6.9.2.3 Comando autenticartokenaad

Autenticar empleando un token de "Azure active directory"


url (POST): https://<servidor_webfon>/sercen/postautenticartokenaad


datos de entrada: {"token": "tokenrequetelargao","aplicacion": "webfon","expira": 7200} ("expira" es opcional).


Ejemplos de posibles respuestas:


Ejemplo Respuesta
ejRes1 {"errorNum": 101,"errorCad": "Token incorrecto"}
ejRes2 {"errorNum": 0,"errorCad": "OK","token": "1234567890","dobleFactor": "email"}
ejRes3 {"errorNum": 0,"errorCad": "OK","token": "1234567890","dobleFactor": "no","token2": "0987654321","expira": 3600}


3.6.9.2.4 Comando validartoken

Es un comando muy simple, que permite conocer si un token es válido y su periodo de expiración.


url (POST): https://<servidor_webfon>/sercen/postvalidartoken


datos de entrada: {"token": "1234567890"}


Ejemplos de posibles respuestas:


Ejemplo Respuesta
ejRes1 {"errorNum": 100,"errorCad": "Token expirado"}
ejRes2 {"errorNum": 103,"errorCad": "Token incorrecto"}
ejRes3 {"errorNum": 0,"errorCad": "OK","expira": 2538}


3.6.9.2.5 Comando revalidartoken

Permite ampliar el periodo de expiración de un token. El periodo ampliado es el que se indica en la respuesta.


url (POST): https://<servidor_webfon>/sercen/revalidartoken


datos de entrada: {"token": "1234567890","token2": "0987654321","expira": 7200} ("expira" es opcional).


Ejemplos de posibles respuestas:


Ejemplo Respuesta
ejRes1 {"errorNum": 100,"errorCad": "Token expirado"}
ejRes2 {"errorNum": 103,"errorCad": "Token incorrecto"}
ejRes3 {"errorNum": 0,"errorCad": "OK","expira": 3600}


3.6.9.2.6 Comando revocartoken

Permite revocar un token.


url (POST): https://<servidor_webfon>/sercen/postrevocartoken


datos de entrada: {"token": "1234567890","token2": "0987654321"}


Ejemplos de posibles respuestas:


Ejemplo Respuesta
ejRes1 {"errorNum": 103,"errorCad": "Token incorrecto"}
ejRes2 {"errorNum": 0,"errorCad": "OK"}


3.6.9.2.7 Comando cambiarClave

Permite que un usuario autenticado cambie su clave y amplíe el periodo de expiración y de caducidad.


url (POST): https://<servidor_webfon>/sercen/postcambiarclave


datos de entrada:{"token": "1234567890","token2": "0987654321","clvCambiar": "masdificil$1aA"}


Ejemplos de posibles respuestas:


Ejemplo Respuesta
ejRes1 {"errorNum": 102,"errorCad": "Clave incorrecta"}
ejRes2 {"errorNum": 117,"errorCad": "Clave demasiado simple"}
ejRes3 {"errorNum": 118,"errorCad": "Clave con caracteres no soportados"}
ejRes4 {"errorNum": 119,"errorCad": "Clave no admite cambio"}
ejRes5 {"errorNum": 120,"errorCad": "Clave repetida"}
ejRes6 {"errorNum": 0,"errorCad": "OK","clvExpira": 86400}



3.6.9.3 Posibles errores
Número de error Descripción breve
0 OK
100 Token expirado
101 Pin expirado
102 Clave incorrecta
103 Token incorrecto
104 Token2 incorrecto
105 Pin incorrecto
106 Token comprometido
107 Token anulado
108 Token inválido
115 Clave caducada
116 Clave expirada
117 Clave demasiado simple
118 Clave con caracteres no soportados
119 Clave no admite cambio
120 Clave repetida
400 Error en datos de entrada
401 Error registro de extensión
402 Error en el estado del dispositivo
403 Error en el estado de la media con el navegador
404 No hay línea libre
405 La línea no está libre
406 La línea es errónea
407 Línea en estado erróneo
408 JSEP obligatorio
409 JSEP ‘offer’ obligatorio
410 Cifrado extremo a extremo no soportado
411 Canal de datos no soportado
412 Comando desconocido
413 No hay recursos
414 No hay conferencia libre
415 Error conferencia
416 Línea no conectada
500 Error interno



3.6.9.4 Logs y comandos

En serCen podemos monitorizar el funcionamiento del proceso de login de los usuarios.

systemctl status serCen.service

Resultado esperado:

serCen.service - LSB: Start/stop serCen
Loaded: loaded (/etc/init.d/serCen; generated)
Active: active (exited) since Thu 2022-02-10 15:16:46 CET;
2h 38min ago
Docs: man:systemd-sysv-generator(8)
Process: 942 ExecStart=/etc/init.d/serCen start
(code=exited, status=0/SUCCESS)
feb 10 15:16:45 VC-WebP-AytoArganda-MAD-02 systemd[1]:
Starting LSB: Start/stop serCen...
feb 10 15:16:45 VC-WebP-AytoArganda-MAD-02 serCen[942]:
Starting serCen
feb 10 15:16:46 VC-WebP-AytoArganda-MAD-02 systemd[1]:
Started LSB: Start/stop serCen.


Para listar información de serCen:

nc localhost 1125


Resultado esperado:

serCen sis ver='00.01.04.1' inic='20220210 173436' alarmas=0 ultAlar='00000000
000000'
serCen gmp msj=254/256 buf=256/256 tarea=97/102
serCen tmp uptime=1009 (0d 0h 16m 49s)
serCen wws mysql=1 conxNum=0 conxMaxPeriodo=0
serCen wwc numCacheLibre=3 numColaPend=0
serCen wwc numReq=0/0 numGet=0/0 numPost=0/0 numPut=0/0 numDelete=0/0
serCen smt numCacheLibre=5 numColaPend=0 enPeriodo=0/0 numMsj=2/0


Ejemplos del log de serCen:


Acceso:

Sercen1.png

Clave errónea:

Sercen2.png

3.6.10 Aplicación PQCTI

Pqcti es una nueva aplicacion de asterisk 13 que sirve para establecer llamadas , cada asterisk tendrá su modulo pqcti instalado y configurado. No hay una arquitectura como tal , sino una base para empezar a desarrollar cosas por encima.


PQCTI.png


La aplicación pqcti es un webservice con JSON y está configurada en un Tomcat. Cada nodo tendrá su pqcti, por lo que si ese nodo cae, no se podrán realizar consultas o conexiones desatendidas a ese nodo.


Actualmente pqcti se utiliza para:

- Las conexiones desatendidas

- Para el click2talk

- La funcionalidad de llamar desde agenda o historial en el portal de usuario VIVAit



3.6.10.1 Servicios web

Los servicios web que proporciona la aplicación son de dos tipos:


1. Operativos


Comando Descripción
cmd_llamar Inicia una llamada saliente desde una extensión vivait-call.
cmd_liberar Libera una llamada establecida, que haya sido registrada en pqcti. La llamada se identifica mediante el ucid que se pasa como parámetro de invocación.



2. Informativos


Comando Descripción
info_llamadas Informa sobre las llamadas registradas en pqcti. Devuelve un array con la información de cada llamada.
info_llamadas_num Devuelve el número de llamadas registradas en pqcti.
info_llamada Devuelve la información de la llamada cuyo ucid se pasa como parámetro de invocación.


3.6.10.2 Archivos relevantes y procedimientos de despliegue

Los archivos relevantes para construir la aplicación son:


Fuentes (directorio referenciado en donde se encuentren los fuentes de asterisk):


  • apps/app_md_pqcti.c
  • apps/pqcti/*.c y apps/pqcti/*.h
  • apps/Makefile (Que requiere de ser modificado para compilar la aplicación)



Añadir al final de "clean:" "pqcti/*.o" ------

------ Añadir debajo de "$(subst .c,.o,$(wildcard
confbridge/*.c)): _ASTCFLAGS+=$(call
MOD_ASTCFLAGS,app_confbridge)" ------
# wkw inicio
$(if $(filter app_md_pqcti,$
(EMBEDDED_MODS)),modules.link,app_md_pqcti.so): $(subst
.c,.o,$(wildcard pqcti/*.c))
$(subst .c,.o,$(wildcard pqcti/*.c)): _ASTCFLAGS+=$
(call MOD_ASTCFLAGS,app_md_pqcti)
#wkw fin (mirar clean:)
------

La compilación y despliegue se hace del modo habitual: "make" y "make install".


3.6.10.2.1 Configuración de archivos relevantes:
  • En el Dialplan. Llamada saliente (en el archivo que se considere adecuado)

A continuación se ofrece un dialplan de inicio de llamada. Conviene analizar si los contextos de transferencia son distintos a los habituales.

------
[pqcti_inicio_llamada_sale]
exten => _X.,1,NoOp(ID_DISPOSITIVO=${ID_DISPOSITIVO})
same =>      n,NoOp(UCID=${UCID})
same =>      n,NoOp(PQCTI_SAL_EXTEN=${PQCTI_SAL_EXTEN})
same =>      n,NoOp(PQCTI_SAL_ANI_NUM=$
{PQCTI_SAL_ANI_NUM})
same =>      n,NoOp(PQCTI_SAL_ANI_NAME=$
{PQCTI_SAL_ANI_NAME})
same =>      n,NoOp(PQCTI_SAL_DNIS_NUM=$
{PQCTI_SAL_DNIS_NUM})
same =>      n,NoOp(PQCTI_SAL_DNIS_NAME=$
{PQCTI_SAL_DNIS_NAME})
same =>      n,Set(__TRANSFER_CONTEXT=pqcti_transferir_llamada)
same =>      n,Set(__FORWARD_CONTEXT=pqcti_desviar_llamada)
same =>      n,Set(CALLERID(name)=$
{PQCTI_SAL_ANI_NAME})
same =>      n,Set(CALLERID(num)=${PQCTI_SAL_ANI_NUM})
same =>      n,Set(CHANNEL(hangup_handler_wipe)=$
{CONTEXT},fin,1())
same =>      n,pqctiLlamSaleIniciada
same =>      n,NoOp(INSERT en BD)
same =>      n,Goto(Cen_Inicio_SIP,${EXTEN},1)
exten => fin,1,pqctiLlamLiberada
same =>      n,NoOp(UPDATE en BD)
same =>      n,Return
------


  • Para llamada entrante


Es muy importante llamar a "ucid(0)" antes de pqctiLlamEntra y de insertar en BD. No importa si en "Cen_Inicio_TrunkSip" se invoca de nuevo a "ucid(0)" porque se mantiene el asignado.

------
[pqcti_inicio_llamada_entra]
exten => _X.,1,NoOp(ID_DISPOSITIVO=${ID_DISPOSITIVO})
same =>      n,ucid(0)
same =>      n,NoOp(UCID=${UCID})
same =>      
n,Set(__TRANSFER_CONTEXT=pqcti_transferir_llamada)
same =>      
n,Set(__FORWARD_CONTEXT=pqcti_desviar_llamada)
same =>      n,Set(CHANNEL(hangup_handler_wipe)=$
{CONTEXT},fin,1())
same =>      n,pqctiLlamEntra
same =>      n,NoOp(INSERT into DAT_CONX_DESATEN)
same =>      n,Goto(Cen_Inicio_TrunkSip,${EXTEN},1)

exten => fin,1,pqctiLlamLiberada same => n,NoOp(UPDATE DAT_CONX_DESATEN set D_HORA_FIN,DURACION) same => n,Return ------


  • En /etc/asterisk/acl.conf


Debe configurarse el acl que limita el acceso al servicio desde direcciones ip conocidas.

Un ejemplo en que se permite una red de servidores y un equipo:

------
[pqcti_acl_comandos]
deny=0.0.0.0/0.0.0.0
permit=172.25.128.0/24
permit=192.168.0.20/32
permit=127.0.0.1
------


  • En /etc/asterisk/http.conf
------
[general]
servername=vcall-nodo
enabled=yes
bindaddr=0.0.0.0
bindport=8088
prefix=vcall-nodo
sessionlimit=100
session_inactivity=30000
session_keep_alive=15000
enablestatic=no
;redirect = / /static/config/index.html
tlsenable=no
;tlsbindaddr=0.0.0.0:8089
;tlscipher=
;tlsdisablev1=yes
;tlsdisablev11=yes
;tlsdisablev12=yes
;tlsservercipherorder=yes
;[post_mappings]
;uploads = /var/lib/asterisk/uploads/
------


  • En /etc/asterisk/pqcti.conf
------
[general]
debug=false
llamadas_registrar=true

[comandos] url_comandos_v1=pqcti/v1/comandos acl=pqcti_acl_comandos
[llamada_sale] canal_A_tech=sip canal_A_dial_cad_fmt=%s contexto=pqcti_inicio_llamada_sale temporizador_segs=30 ------


  • En /etc/asterisk/ext_Subrutinas_BD.conf
;------------------------------------------------------
[Cen_Sub_updateDatConxDesaten_Fin]
;------------------------------------------------------
-----------
;------------------------------------------------------
-----------
; ${ARG1}: C_UCID

exten => s,1,NoOp(MDSUBUPDDATCONXDESCON*)
same => n,ExecIf($["${SPRV}"="1"]? Return(SUPERVIVENCIA))
same => n,ExecIf($["${ARG1}"=""]?Return(NO_UCID))
same => n,MDintz(nimitz|bd|sqlSinEspera|update DAT_CONX_DESATEN set D_HORA_FIN=now(),N_DURACION=now()- D_HORA_INICIO where C_UCID="${ARG1}")
;same => n,DumpChan same => n,Return(OK)
include => Cen_finLlamada
;------------------------------------------------------ ----------- [Cen_Sub_updateDatConxDesaten_Contestada] ;------------------------------------------------------ ----------- ;------------------------------------------------------ ----------- ; ${ARG1}: C_UCID
exten => s,1,NoOp(MDSUBUPDDATCONXDESCON*)
same => n,ExecIf($["${SPRV}"="1"]? Return(SUPERVIVENCIA))
same => n,ExecIf($["${ARG1}"=""]?Return(NO_UCID))
same => n,MDintz(nimitz|bd|sqlSinEspera|update DAT_CONX_DESATEN set B_CONTESTADA=1 where C_UCID="$ {ARG1}")
;same =>n,DumpChan same =>n,Return(OK) include => Cen_finLlamada
;------------------------------------------------------ ----------- [Cen_Sub_insertDatConxDesaten] ;------------------------------------------------------ ----------- ;------------------------------------------------------ ----------- ; ${ARG1}: ID_NODO ; ${ARG2}: C_UCID ; ${ARG3}: C_ORIGEN_NUM ; ${ARG4}: C_ORIGEN_NAME ; ${ARG5}: C_ORIGEN_EXTEN ; ${ARG6}: C_DESTINO_NUM ; ${ARG7}: C_DESTINO_NAME ; ${ARG8}: ID_DISPOSITIVO ;
exten => s,1,NoOp(MDSUBINSERTDATCONXDES*)
same =>n,ExecIf($["${SPRV}"="1"]? Return(SUPERVIVENCIA))
same => n,ExecIf($["${ARG1}"=""]?Return(NO_IDNODO)) same => n,ExecIf($["${ARG2}"=""]?Return(NO_UCID)) same => n,ExecIf($["${ARG3}"=""]?Set(ARG3=NULL)) same => n,ExecIf($["${ARG4}"=""]?Set(ARG4=NULL)) same => n,ExecIf($["${ARG5}"=""]?Set(ARG5=NULL)) same => n,ExecIf($["${ARG6}"=""]?Set(ARG6=NULL)) same => n,ExecIf($["${ARG7}"=""]?Set(ARG7=NULL)) same => n,ExecIf($["${ARG8}"=""]?Set(ARG8=NULL))
same => n,MDintz(nimitz|bd|sqlSinEspera|insert into DAT_CONX_DESATEN (D_HORA_INICIO,ID_NODO,C_UCID,C_ORIGEN_NUM,C_ORIGEN_NAM E,C_ORIGEN_EXTEN,C_DESTINO_NUM,C_DESTINO_NAME,ID_DISPOS ITIVO) VALUES(now(),${ARG1},"${ARG2}","${ARG3}","$ {ARG4}","${ARG5}","${ARG6}","${ARG7}",${ARG8}))
;same =>n,DumpChan same =>n,Return(OK)
include => Cen_finLlamada

---------------------------------------




  • En /etc/asterisk/ext_MARCAR_Extension_Dial.conf


  • En este fichero hay que añadir lo que está en negrita.
;------------------------------------------------------
-----------
[Cen_Marcar_Extension_Dial_Gosub]
;------------------------------------------------------
-----------
exten => s,1,NoOp(MDSUBMAREXTEN*)

same => n,Gosub(Cen_Sub_updAnswer,s,1(${UCID},$ {ID_DISPOSITIVO},${ENR_IDSEGMENTO}))
same => n,ExecIf($[$[${MDDEBUG}-0] > 1]?DumpChan)
;Declarar la variable PASARTONOS en el trunk que queramos same => n,ExecIf($["${PASARTONOS}"="1"]? SetChannelOption(14,0))
;Rellenar el historico de llamadas ; same => n,Gosub(Cen_Sub_updDatHisLlam_tipo,s,1($ {DIALEDPEERNUMBER},${TIPOLLAMHIST_ENTRANTE},${UCID})) same => n,Gosub(Cen_Sub_updDatHisLlam_tipo_ID,s,1($ {DIALEDPEERNUMBER},${TIPOLLAMHIST_ENTRANTE},$ {ID_HLL_S}))
; Poner contestadas las llamadas de conexiones desatendidas same => n,GosubIf($["${PQCTI_REGISTRAR()}"="SI"]? Cen_Sub_updateDatConxDesaten_Contestada,s,1(${UCID}))
same => n,Return()


Descripción de campos del archivo pqcti.conf:

• general

  • debug. Activa la depuración desde el inicio, aunque puede activarse mediante comando "pqcti debug on"
  • llamadas_registrar. Booleano que indica si se mantiene un registro de llamadas.Si se desactiva esta opción,

no hay registro y, por tanto, no se soportan los comandos "cmd_liberar" y los comandos informativos.


• comandos

  • url_comandos_v1. La parte no común de la url. Con la configuración de http.conf propuesta, la url completa sería:

http://<IP_NODO>:8089/vcall-nodo/pqcti/v1/comandos

  • acl. Configura el "acl" a utilizar en el archivo "/etc/asterisk/acl.conf"


• llamada_sale

  • canal_A_tech. Configura la tecnología de los canales de extensiones. Típicamente "sip". Podría ser "local", pero:
 ¡¡¡CUIDADO !!! si se usase un canal local, se perdería la función de "setvar" en el "peer": se pierde ID_DISPOSITIVO.


  • canal_A_dial_cad_fmt. Si los canales de extensiones fuesen "sip/<exten>", entonces este campo sería "%s". Si la tecnología fuese "local", este campo sería "%s@<contexto>/n".
  • contexto. Es el contexto en el que se inicia la llamada saliente. Como son necesarios algunos ajustes, debe existir un contexto especial antes de ir al contexto genérico "Cen_Inicio_Sip".
  • temporizador_segs. Tiempo máximo (en segs.) para el descolgado de la extensión para la que se solicita el inicio de la llamada saliente.
3.6.10.3 Aplicaciones para el dialplan de asterisk
  • pqctiLlamSaleIniciada (sin parámetros). Debe invocarse al inicio del dialplan de una llamada saliente. Sólo es obligatorio que se invoque si se ha configurado "llamadas_registrar=true".


  • pqctiLlamEntra. Debe invocarse al inicio del dialplan de una llamada entrante. Sólo es obligatorio que se invoque si se ha configurado "llamadas_registrar=true".


  • pqctiLlamLiberada. Debe invocarse al finalizar una llamada que previamente ha sido registrada en pqcti con las aplicaciones anteriores. Sólo es obligatorio que se invoque si se ha configurado "llamadas_registrar=true".




3.6.10.4 Comandos de asterisk

A continuación se muestran varios comandos de pqcti para asterisk.


Comando Descripción
pqcti show Lista los datos de configuración y de las llamadas registradas.
pqcti reload Recarga la configuración si se ha modificado "/etc/asterisk/pqcti.conf".
pqcti debug [on|off] Activa y desactiva la depuración del módulo.



3.6.10.5 Tabla en base de datos

Con el fin de que otra aplicación pueda seguir las llamadas registradas en pqcti, se ha previsto una nueva tabla en base de datos: DAT_CONX_DESATEN.

Dicha tabla integra todos los registros de todos los nodos vivait y será mantenida por el dialplan.


Por supuesto, esa tabla sólo tiene sentido cuando "llamadas_registrar=true".


------
CREATE TABLE IF NOT EXISTS `nimitz`.`DAT_CONX_DESATEN`
(
  `ID` INT NOT NULL AUTO_INCREMENT,
  `D_HORA_INICIO` DATETIME NULL,
  `D_HORA_FIN` DATETIME NULL,
  `N_DURACION` INT NULL DEFAULT 0,
  `ID_NODO` INT NULL DEFAULT NULL,
  `C_UCID` VARCHAR(32) NULL,
  `C_ORIGEN_NUM` VARCHAR(32) NULL,
  `C_ORIGEN_NAME` VARCHAR(128) NULL,
  `C_ORIGEN_EXTEN` VARCHAR(32) NULL,
  `C_DESTINO_NUM` VARCHAR(32) NULL,
  `C_DESTINO_NAME` VARCHAR(128) NULL,
  `ID_DISPOSITIVO` VARCHAR(32) NULL,
  PRIMARY KEY (`ID`),
  UNIQUE INDEX `IDX_UCID_UNIQUE` (`C_UCID` ASC)
VISIBLE,
  INDEX `IDX_HORA_INICIO` (`D_HORA_INICIO` ASC)
VISIBLE)
------


3.6.10.6 Interfaz para los servicios

Todos los servicios están implementados en base a un POST con un json en el cuerpo de la solicitud, que contiene los parámetros de invocación, y otro json en el cuerpo de la respuesta.

En ambos casos, el json es un objeto con campos.

Está implementada, como opción, el uso de un GET con parámetros, pero no se recomienda su uso, excepto para pruebas, porque puede haber problemas con el conjunto de caracteres no ascii.

Si no hay problemas a nivel de red, de transporte o en las reglas básicas del comando, el estado de la respuesta es siempre "200 OK", indicándose los posibles errores en el json de respuesta.

Todas las respuestas contienen un campo denominado "resultado" (de la ejecución) que puede tomar los siguientes valores:


  • OK. La ejecución se ha iniciado correctamente. En el caso de la llamada saliente, no quiere decir que se haya establecido y, ni siquiera, que se haya iniciado porque puede que la extensión no descuelgue.
  • ERROR. Hay un error en los parámetros de invocación o en el estado de la llamada referida y no se puede ejecutar el comando solicitado.
  • NO_EJECUTADO. Hay un problema no achacable a quién invoca y no se puede ejecutar el comando.


Si El "resultado" no es "OK", se devuelve un campo "diagnóstico" con una cadena que describe el problema detectado. Siempre es texto en español, por lo que su uso previsto es para logs.



3.6.10.7 Descipción de comandos y respuestas de json

A partir de aquí se describen los comandos y respuestas en base a json de ejemplo, ya que los campos son triviales y autoexplicativos:


  • cmd_llamar -> Inicia una llamada saliente desde una extensión vivait-call.

Resultado esperado :

cmd={
  "comando": "cmd_llamar",
  "extension": "201",
  "ani_num": "201",
  "ani_name": "ext_201",
  "dnis_num": "221",
  "dnis_name": "ext_221"
}
resp={
  "comando": "cmd_llamar",
  "ucid": "20999000031643889797",
  "estado_actual": "llam_sale_espera",
  "resultado": "OK",
  "ahora": "20220203 130317.107"
}

En el comando, sólo son obligatorios: comando, extension y dnis_num. El resto son opcionales. Los campos "ani" no deben usarse, salvo por una buena razón. El campo "dnis_num" sólo sirve para presentar el dato en el display de la extensión que inicia la llamada.



  • cmd_liberar -> Libera una llamada establecida, que haya sido registrada en pqcti.
cmd={
  "comando": "cmd_liberar",
  "ucid": "20999000031643889797"
}
resp={
  "comando": "cmd_liberar",
  "ucid": "20999000031643889797",
  "resultado": "OK",
  "ahora": "20220203 130804.526"
}

(Este comando sólo puede invocarse si se ha configurado "llamadas_registrar=true").


  • info_llamadas -> Informa sobre las llamadas registradas en pqcti. Devuelve un array con la información de cada llamada.
}
resp={
  "comando": "info_llamadas",
  "llamadas": [
    {
     "ucid": "20999000051643890188",
     "estado_actual": "llam_sale_iniciada",
     "duracion_segundos": 8
    }
 ],
 "resultado": "OK",
 "ahora": "20220203 130957.149"
}

(Este comando sólo puede invocarse si se ha configurado "llamadas_registrar=true").


  • info_llamadas_num -> IDevuelve el número de llamadas registradas en pqcti.
resp={
  "comando": "info_llamadas_num",
  "llamadas_num": 1,
  "resultado": "OK",
  "ahora": "20220203 131001.134"
}

(Este comando sólo puede invocarse si se ha configurado "llamadas_registrar=true").



  • info_llamada , "ucid"-> "20999000051643890188" -> IDevuelve el número de llamadas registradas en pqcti.
resp={
  "comando": "info_llamada",
  "ucid": "20999000051643890188",
  "estado_actual": "llam_sale_iniciada",
  "duracion_segundos": 14,
  "resultado": "OK",
  "ahora": "20220203 131003.638"
}

(Este comando sólo puede invocarse si se ha configurado "llamadas_registrar=true").



3.6.11 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.6.12 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.6.12.1 ¿Qué es aprovisionar?

Aprovisionar un teléfono es el proceso de configuración automático de teléfonos IP para su uso con una Centralita Telefónica de forma remota. Una vez que aprovisione un teléfono, el teléfono automáticamente se configurará correctamente y podrá administrar los teléfonos de forma centralizada y remota, sin tener que iniciar sesión en la interfaz web de cada uno de los teléfonos.

El aprovisionamiento de teléfono facilita enormemente la administración cotidiana de los teléfonos IP. Esto hace que sea fácil de cambiar las contraseñas de extensión,realizar desvíos de llamadas, nombre a mostrar, mensajería y demás configuraciones, ya que puede hacerlo de forma centralizada para todos los teléfonos desde el portal de administración y luego transferir los cambios al teléfono.

3.6.12.2 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.6.12.3 Funcionamiento del servidor phoneprove-TFTP

A continuación se muestra un esquema que facilita el entendimiento del funcionamiento del servidor phoneprove-TFTP:

Funcionamiento Servidor.png

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.6.12.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.6.12.4.1 Parámetros de Aprovisionamiento globales
  • Configuración de la red y MAC.
  • Zona horaria.
3.6.12.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.6.12.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 
o el cable Ethernet (si se utiliza la alimentación en línea PoE) para reiniciar los teléfonos.
3.6.12.6 Aprovisionamiento de teléfonos nivel técnico
3.6.12.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.6.12.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 
y escritura en el servidor TFTP.

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.6.13 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.6.14 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.6.14.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.6.15 CHAT

La información para configurar el CHAT y su funcionamiento puede encontrarse en:

[enlace]

3.6.16 MEET

El esquema de conexión para el Meet es el siguiente:

Conexion.jpg


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.6.17 Gran Hermano (GH)

Gran Hermano (GH) controla el estado de las extensiones de diferentes nodos. Esto permite gestionar servicios como la movilidad avanzada, la retrollamada entre extensiones de diferentes nodos, el uso de BLF's por parte de los usuarios en movilidad,…

Esquema de instalación:

Gran hermano.png


GH solo se instala en un nodo. Recomendamos instalarlo en el nodo con menos carga. Si desconocemos cual es, lo instalaremos en la maquina con BDHIST.


3.6.17.1 Intz-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.6.17.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.6.17.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.6.17.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.6.17.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.6.18 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.6.18.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:


URL de sincronizacion.jpg


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.6.18.2 Ficheros de logs

El fichero con los log’s generado se encuentra en /var/log/Tomcat.x/generaConf.log.


3.7 Portales web corporativos



El portal de usuario VIVAit Call permite que determinadas funcionalidades del sistema puedan ser accesibles por los usuarios finales desde una interfaz mucho más cómoda y amigable que el telefónico.

Existen varias opciones del portal de usuario según las necesidades del cliente , las diferentes opciones en base a la configuración son:

  • Portal de usuario
  • Portal Webcall
  • Portal para integración con Teams
  • Portal Vivait Tracker
  • Portal Vivait Supervisor



Para configurar las diferentes posibilidades en los portales de usuario hay que modificar el archivo “vivaitConfig.js” , este archivo se encuentra en : /var/www/vivait/webs/portal/Assets/Config/

P-usuario1.png



  • webphoneLink : Configuración del link de la web con solo el dialpad.
  • IsWebPhoneDisabled: Configuración para habilitar (false) o deshabilitar (true) la aparición de webphone al iniciar el portal.



Volver al índice


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


Permisos-Portal Administracion.jpg


La forma como dar permisos de aplicaciones a un usuario está explicada en la [| sección Portal de administracion - General - Usuarios ].


3.7.2 Portal de usuario



Para configurar el portal de usuario solo para terminales telefónicos (sin webphone) se tendría que hacer de la siguiente forma:

P-usuario2.png



  • webphoneLink : Comentar la línea con ( // ) al comienzo de esta.
  • IsWebPhoneDisabled: Deshabilitar (true) para que no aparezca webphone al iniciar el portal.



Al terminar la configuración , en el portal se deshabilitará el botón de webphone:

P-usuario3.png



Volver al índice

3.7.3 Portal Webcall



Para configurar el portal de usuario VIVAit Call web con webphone integrado en la misma página se tendría que hacer de la siguiente forma:

P-usuario4.png



  • webphoneLink : Comentar la línea con ( // ) al comienzo de esta.
  • IsWebPhoneDisabled: Habilitar (false) para que aparezca webphone al iniciar el portal.



Al terminar la configuración , en el portal aparecerá el dialpad de webphone:

P-usuario5.png



Volver al índice

3.7.4 Portal para integración con Teams



Para configurar el portal de usuario VIVAit Call web con botón de enlace a otra página con webphone se tendría que hacer de la siguiente forma:

P-usuario6.png



  • webphoneLink : Poner el link del enlace a webphone
  • IsWebPhoneDisabled: Deshabilitar (true) para que no aparezca webphone al iniciar el portal.



Al terminar la configuración , en el portal estará habilitado el botón de webphone , que al pulsar sobre el nos llevará a otra página con el dialpad :

P-usuario7.png



Volver al índice

3.7.5 Varios portales en una sola instalación



Existe la posibilidad de tener varios portales en una misma instalación de VIVAit Call con diferentes url’s para cada portal .

P-usuario8.png



Un ejemplo de las url’s de los portales sería:

https://servidor/webs/vivait-user/ → Portal usuario
https://servidor/webs/webfon2-solo → DialPad
https://servidor/webs/webfon3 → Portal webphone



Volver al índice

3.7.6 Portal Vivait Tracker



3.7.6.1 Introducción a Vivait Tracker 0.1



Con la versión 5.1 de la plataforma VIVAit Call se ha lanzado un nuevo tracker: VIVAit Tracker, que supone una mejora sobre el producto anterior: Tracker WEB más enfocado al mundo Call Center.
Los puntos claves del nuevo portal VIVAit Tracker dirigido al entorno corporativo son:

• Adaptación para facilitar su uso en entornos de telefonía corporativa.
• Permite seguir llamadas y escuchar/descargar grabaciones en caso de existir.
• Integrado con entornos de texto (TBC y desarrollos futuros).



Volver arriba / Volver al índice

3.7.6.1.1 Arquitectura de Vivait Tracker 0.1



Los bloque funcionales, servicios y elementos que componen la aplicación están divididos en dos capas principales:

- Frontend
Reside en un servidor web Apache.
Se invoca desde un navegador mediante una URL del tipo https://host/ws/
       https://172.25.128.252/Tracker_Corp/
Es la parte visual: HTML, CSS, JavaScript.
No accede directamente a la base de datos; solo obtiene datos desde una API.



- Backend / API REST
Corre en un servidor web Tomcat.
Expone la API en:
       https://172.25.128.252/Tracker-Rest/tracker/.
Contiene la lógica que permite interactuar con la BBDD.
Responde en JSON para que el frontend pueda ofrecérselo al navegador.



Diagrama funcional de la arquitectura de VIVAit Tracker 0.1

Arquitectura3 tracker V5.1.png



Volver arriba / Volver al índice

3.7.6.1.2 Flujo completo del ciclo de datos



Siguiendo el proceso se contemplan los siguientes pasos:

Paso 1 El usuario invoca el frontend residente en Apache desde un navegador, usando javascript, mediante la URL del tipo:

       https://host/Traker_Corp/

El navegador carga la página web servida por Apache.

Paso 2 Una vez superada la fase de validación se muestra un formulario que permite al usuario definir los parámetros de una consulta.

La página del formulario inicia una transacción para efectuar una solicitud HTTP POST al endpoint correspondiente, por ejemplo:
               https://172.25.128.252/Tracker_Corporativo/
siendo la carga util de esta solicitud los datos del formulario rellenado por el usuario:
               {fechaInicio: "", fechaFin: "", horaInicio: "", horaFin: "", listaExtensiones: [], listaGrupos: [],…}          



Paso 3 Al recibir los datos del formulario el frontend hace una petición a la API REST de Tomcat.



Paso 4 La API se conecta a la base de datos, ejecuta las consultas necesarias y devuelve la respuesta.



Paso 5 El frontend recibe el JSON con los datos de la consulta en la respuesta:

               POST https://172.25.128.252/Tracker-Rest/tracker/lista
El navegador lo representa en pantalla. En ningún momento el navegador accede directamente a la base de datos; todo pasa por la API.



Volver arriba / Volver al índice

3.7.6.1.3 Seguridad de Vivait Tracker 0.1



El acceso está controlado mediante validación de tokens.

Paso 1 Autenticación inicial

• Al introducir sus credenciales el usuario se valida a través del servicio de autenticación sercen
               https://172.25.128.252/sercen/postautenticar1
• Sercen genera un token firmado que identifica la sesión del usuario.



Paso 2 Validación interna de permisos

• Una vez que el frontend tiene el token, cada petición pasa por una validación de la API del tomcat:
               https://172.25.128.252/Tracker-Rest/tracker/verificarToken
En la misma se comprueba que:
- El token es válido.
- El usuario tiene permisos para el recurso que está intentando usar.
Es necesario que el usuario tenga acceso a la aplicación Grabador, ver Usuarios.
• No se ejecuta ninguna acción si el token no es validado primero.



Paso 3 Proxy inverso apache-tomcat

• Apache actúa como punto de entrada único:
- El usuario solo ve URLs de apache.
- Las peticiones que requieren lógica del backend se redirigen internamente a tomcat.
- Esto se consigue mediante proxy inverso, por ejemplo:
/Tracker_Corporativo → servido por apache
               https://172.25.128.252/Tracker_Corp/
/Tracker-Rest → Apache las pasa a Tomcat de forma transparente para el usuario
               https://172.25.128.252/Tracker-Rest/tracker/extensiones
• El navegador utilizado por el usuario nunca ve a tomcat.



Volver arriba / Volver al índice

3.7.6.2 Descripción de la interfaz de Vivait Tracker 0.1



Este apartado se trata en Vivait Tracker

Volver arriba / Volver al índice

3.7.7 Portal VIVAit Supervisor



3.7.7.1 Introducción a Vivait Supervisor 2.0



Con la versión 5.1 de la plataforma VIVAit Call se ha lanzado la aplicación: Vivait-Supervisor 2.0.

Los puntos claves del portal Vivait Supervisor son:

• Seguimiento de las llamadas generadas en el sistema VIVAit Call.
• Visualización de resultados mediante gráficos, tablas y otros formatos.
• Exportación de datos para su posterior análisis.





3.7.7.1.1 Definiciones en Vivait Supervisor 2.0



A continuación se definen los principales conceptos empleados en el supervisor:

Dashboard

Panel de control que presenta de forma visual y resumida la información clave (datos, indicadores o métricas),
con el objetivo de facilitar la supervisión, el análisis y la toma de decisiones de manera rápida y eficiente.
Un dashboard está compuesto por uno o varios componentes.



Componente

Elemento individual que forma parte de un dashboard y cuya función es mostrar la información requerida.
Los componentes pueden adoptar distintos formatos, entre los más habituales:
• Tablas:
La información se presenta en formato tabular. Las cabeceras y la estructura de la tabla se definen durante la creación de su lógica.
• Gráficos:
Los datos se muestran de forma visual mediante distintos tipos de gráficos, como barras, líneas, circulares, entre otros.
Según el modo en que actualizan la información, los componentes se clasifican en:
• Dinámicos:
La información se actualiza de forma periódica, de acuerdo con un temporizador asociado al componente.
• Estáticos:
La información se carga al iniciar el dashboard y no se vuelve a actualizar hasta que el panel de control se invoca nuevamente.





3.7.7.1.2 Arquitectura de Vivait Supervisor 2.0



Los bloque funcionales, servicios y elementos que componen la aplicación están divididos en dos capas principales:

- Frontend
Reside en un servidor web Apache.
Se invoca desde un navegador mediante una URL del tipo https://host/ws/
       https://172.25.128.92/Vivait-Supervisor/
Es la parte visual: HTML, CSS, JavaScript.
No accede directamente a la base de datos; solo obtiene datos desde una API.



- Backend / API REST
Corre en un servidor web Tomcat.
Expone la API en:
       https://172.25.128.92/Vivait-Supervisor/.
Contiene la lógica que permite interactuar con la BBDD.
Responde en JSON para que el frontend pueda ofrecérselo al navegador.



Diagrama funcional de la arquitectura de Vivait-Supervisor

Arquitectura supervisor2 V5.1.png





3.7.7.1.3 Flujo completo del ciclo de datos



Siguiendo el proceso se contemplan los siguientes pasos:

Paso 1 El usuario invoca el frontend residente en Apache desde un navegador, usando javascript, mediante la URL del tipo:

       https://host/Vivait-Supervisor/

El navegador carga la página web servida por Apache.

Paso 2 Una vez superada la fase de validación se muestra la pantalla inicial que permite al usuario elegir el dashboard, previamente configurado, ejecutándose la monitorización de la consulta preparada.

Tras elegir el dashboard deseado, la página web realiza solicitudes periódicas HTTP POST al endpoint correspondiente,
donde se obtienen los datos de los componentes asociados al dashboard, por ejemplo:
               https://172.25.128.92/Vivait-Supervisor/tablas/TablaComponenteDinamicoAjax
siendo la carga útil de esta solicitud la identificación del componente con los filtros elegidos por el usuario:
              {idCompoCuadro: "15",…}
                  filtros : [{tipo: "titulo", valor: "titulo=Detalle"}, {tipo: "fechaDesde", valor: "FechaDesde="},…]
               idCompoCuadro: "15"          



Paso 3 Al recibir los datos el frontend hace una petición a la API REST de Tomcat.


Paso 4 La API se conecta a la base de datos, ejecuta las consultas necesarias y devuelve la respuesta.

              INFO TablaDinamicosDaoImpl:607 - componerSQL SELECT DATE_FORMAT(DAT_LLAMADAS.D_HORA_INICIO,'%Y-%m-%d'),DATE ...



Paso 5 El frontend recibe el JSON con los datos de la consulta en la respuesta:

               POST https://172.25.128.92/Vivait-Supervisor/tablas/TablaComponenteDinamicoAjax
El navegador lo representa en pantalla. En ningún momento el navegador accede directamente a la base de datos; todo pasa por la API.





3.7.7.1.4 Seguridad de Vivait Supervisor 2.0



El acceso, del usuario a la aplicación, está controlado mediante validación de tokens y acceso a la aplicación correspondiente.
ver Usuarios

La aplicación CALL_CENTER es la que gestiona los perfiles del usuario para Vivait-Supervisor, según la siguiente tabla:

Perfil de Usuario Nivel administración Funciones
Administración Distinto de Ninguno:
- Alto,
- Medio o
- Bajo.
Configuración y utilización de dashboard.
Consulta Ninguno Utilización de dashboard.



El usuario no tiene acceso a Vivait-Supervisor si no tiene asignada la aplicación CALL_CENTER.

El proceso de validación que se sigue dentro del sistema es el siguiente:

Paso 1 Autenticación inicial

• Al introducir sus credenciales el usuario se valida a través del servicio de autenticación sercen
               https://172.25.128.92/sercen/postautenticar1
• Sercen genera un token firmado que identifica la sesión del usuario.



Paso 2 Validación interna de permisos

• Una vez que el frontend tiene el token, cada petición pasa por una validación de la API del tomcat:
En la misma se comprueba que el usuario tiene permisos para el recurso que está intentando utilizar, según la tabla anterior.
  • Si el usuario tiene un perfil de administrador puede configurar (crear, borrar o gestionar) y consultar dashboard.
  • Si el usuario tiene un perfil de consulta solo puede consultar dashboard ya configurados, no puede gestionarlos.



Paso 3 Proxy inverso apache-tomcat

• Apache actúa como punto de entrada único:
- El usuario solo ve URLs de apache.
- Las peticiones que requieren lógica del backend se redirigen internamente a tomcat.
- Esto se consigue mediante proxy inverso, por ejemplo:
/Vivait-Supervisor/ → servido por apache
               https://172.25.128.92/Vivait-Supervisor/
Apache las pasa a Tomcat de forma transparente para el usuario
               https://172.25.128.92/Vivait-Supervisor/tablas/TablaComponenteDinamicoAjax
• El navegador utilizado por el usuario nunca ve al módulo tomcat.





3.7.7.1.5 Descripción de la interfaz de Vivait Supervisor 2.0



Este apartado se trata en Vivait Supervisor



3.8 Monitorización en VIVAit



La plataforma de monitorización utiliza es Zabbix sistema de supervisión del sistema VIVAit. Se trata herramienta de monitorización que se usa para vigilar el estado de sistemas informáticos y redes en tiempo real.






3.8.1 Generalidades de Zabbix



Con Zabbix puedes controlar:

Servidores (CPU, RAM, disco…) Redes (routers, switches, tráfico) Bases de datos Aplicaciones Servicios en la nube

Básicamente: te dice si algo funciona bien o falla.

Qué hace exactamente Monitoriza

Recoge datos continuamente:

uso de CPU memoria espacio en disco latencia de red

Genera alertas

Si algo va mal:

envía emails manda notificaciones lanza acciones automáticas

Muestra gráficos históricos de rendimiento dashboards en tiempo real

Cómo funciona

Tiene varios componentes:

Servidor Zabbix → recoge y analiza datos Agentes Zabbix → instalados en máquinas para enviar info Interfaz web → donde ves todo Ejemplo real

Imagina que tienes un servidor:

CPU al 95% → Zabbix lo detecta Te manda alerta Puedes actuar antes de que se caiga Por qué se usa Detectar problemas antes de que afecten a usuarios Controlar infraestructuras grandes Automatizar supervisión





3.8.2 Zabbix




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

3.8.2.1 Glosario Zabbix



Se trata de una lista de conceptos básicos de Zabbix, pero para ampliar la información sobre otros términos, visite el [Sitio oficial de Zabbix].

  • 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.
3.8.2.2 Discovery



La funcionalidad discovery(detección) lista los dispositivos que se integran en nuestra red y el tipo de servicios que proporciona. Por ejemplo, si la empresa tuviera cien colas ACDs, y veinticinco VDNS, y en cada cola como veinte medidas, seria muy laborioso registrar una por uno cada uno. Gracias a esta funcionalidad, se descubre todas las interfaces de red que se tiene, automáticamente y tanto para colas nodos o IVR. Para utilizar esta funcionalidad , se hace el uso de dos script, que se instalan en el momento de instalación de Zabbix en el directorio "/usr/local/sbin", que son:

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

3.8.2.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]

3.8.2.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 ].

3.8.2.5 Visualización



Con Zabbix es posible visualizar los datos como gráficos, pantallas, mapas y hasta presentaciones cambiantes, entre otros. En este apartado solo nombraremos características esenciales que se tendra que completar con el [| manual oficial]

3.8.2.5.1 Graphs



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.

EjemploGrafica.png

Los valores min / avg / max que Zabbix obtiene y representa son de un registro de datos de la tabla tendencias.

3.8.2.5.2 Screens




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.

EjemploScreen.png
3.8.2.5.3 Maps



En Zabbix, un map (mapa) es una representación gráfica de la situacion de nuestros dispositivos en red. Es un escenario que muestra nuestra red, aplicaciones y servicios a través de figuras o iconos. Dichas figuras toman vida en respuesta a los eventos que se dan en nuestro entorno.

EjemploMaps.png
EstadosMaps.png


3.8.2.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".






3.8.3 Zabbix en MDtel




3.8.3.1 Configuraciones de Zabbix



3.8.3.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'.


3.8.3.1.2 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
3.8.3.1.3 Configurar agente de forma activa



Para configurar el agente de Zabbix necesitamos acceder a la máquina que actuará como agente, y en el directorio /etc/zabbix modificar el fichero zabbix_agentd.conf e indicar cual es la dirección de red (IP) del servidor Zabbix.

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





3.8.3.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
3.8.3.2.1 zabbixSenderACDBD.pl



Uso: Obtiene diversos valores por cada cola, estados de agente por cola y estados de agente generales.

Ubicación: Servidor BDTR.

Parámetros: Ruta al archivo de configuración (Por ejemplo: /etc/MDtel/zabbixSenderACDBD.pconf)

Archivo de configuración: zabbixSenderACDBD.pconf

$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)
3.8.3.2.2 zabbixSenderACD.pl



Uso: Obtener el PID de Asterisk para revisar si se ha reiniciado en caso de que cambie.

Ubicación: Servidor ACD.

Parámetros: Ruta al archivo de configuración (Por ejemplo: /etc/MDtel/zabbixSenderACD.pconf).

Archivo de configuración: zabbixSenderACDBD.pconf.

$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)
3.8.3.2.3 zabbixSenderCTI.pl



Uso: Obtener estado y los distintos valores de vivait-cti.

Ubicación: Servidor donde se ejecute vivait-cti. Normalmente el servidor ACD.

Parámetros:

--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.
3.8.3.2.4 zabbixSender-intz-nimitz.pl



Uso: Obtener estado y los distintos valores de intz-nimitz.

Ubicación: Servidor donde se ejecute intz-nimitz.

Parámetros:

--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.
3.8.3.2.5 zabbixSenderMotorSal.pl



Uso: Obtener estado y los distintos valores de motorSal.

Ubicación: Servidor donde se ejecute motorSal.

Parámetros:

--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.
3.8.3.2.6 zabbixSenderMyACDSuperv.pl



Uso: Obtener estado y los distintos valores de myAcdSuperv.

Ubicación: Servidor donde se ejecute myAcdSuperv.

Parámetros:

--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.
3.8.3.2.7 zabbixSenderRecordNodo.pl



Uso: Obtener estado y los distintos valores de recordNodo.

Ubicación: Servidor donde se ejecute recordNodo.

Parámetros:

--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.
3.8.3.2.8 zabbixSenderRecordCentral.pl



Uso: Obtener estado y los distintos valores de recordCentral.

Ubicación: Servidor donde se ejecute recordCentral.

Parámetros:

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

Zabbix scripts.png

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

3.8.3.2.10 Templates



Zabbix cuenta con templates (plantillas) que facilitan la tarea de "Registrar Equipos y Dispositivos" y agregarles métricas; acelerar el despliegue de las tareas de supervisión en un host; aplicar cambios masivos a tareas de supervisión. En mdtel hemos creado plantillas propias que facilitan estos procesos, los cuales necesitaremos importar templates.

Las plantillas están vinculados directamente a los hosts individuales, por tanto se necesitaran utilizar en cada host.

Automáticamente, cada template rellena por item las aplicaciones, trigers, alarmas,gráficos,... etc.

A continuación, se muestran los distintos bloques de funciones de la instalación en función de cada template:

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


Dependiendo del tipo de nodo:
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 - -


Dependiendo del tipo de Base de datos:
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 -


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


3.8.3.2.11 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
3.8.3.2.12 Importar templates



Las plantillas propias de mdtel se encuentran en la ruta "/usr/src/nimitz/archivos" y empiezan con el nombre de "TemplateXXX.xml".

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.

ImportarTemplates.png

Hay opciones varias opciones a elegir para importación de templates, pero podemos dejar por defecto las señaladas y pulsar el botón "import".





3.8.4 Configuración para un primer funcionamiento de Zabbix



Se describe una básica configuracion de Zabbix para cualquier equipo que utilice Windows o linux. Pues mediante la definición de hosts, items, triggers y acciones, Zabbix permite efectuar un monitoreo efectivo de plataformas IT heterogéneas.

3.8.4.1 Configuración de los equipost (host) para la monitorización



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.


CreacionHost.png

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.


3.8.4.1.1 Comprobación de disponibilidad del host



Para saber si todo esta bien debemos ver la Z de disponibilidad.


EstadosZHost.png


Indicación 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.





3.8.5 Indicar que plantilla (template) tendrá el host



Esta configuración es 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.

3.8.5.1 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".

CrearItemEjemplo.png

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]


3.8.5.1.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".

VerInfoITEM.png

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

VIsualGraficaValorItem.png

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"
3.8.5.2 Configurar los Triggers para los host



A partir de la información que captura los agentes , el servidor de Zabbix comienza a efectuar la recolección de estos items en la base de datos. Con esto se tiene un registro histórico de tales mediciones, que pueden ser tan simples como un simple ping hasta datos de uso de disco, memoria, cpu, etc. A partir de los datos que se reciben de los agentes lo que sigue es definir y configurar Triggers, que son evaluaciones que hace Zabix de estos datos para determinar la existencia de un Problema en un dispositivo.

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


3.8.5.2.1 Comprobar el estado del trigger



Podemos ver el estado del "Trigger" en "Monitoring → Triggers".El color en caso de que se active depende de la severidad definida. Por ejemplo, si el "Trigger" esta en color verde indica que el resultado de la métrica se mantiene por debajo de la condición que indicamos. Por el contrario si el resultado esta "sobre lo indicado" su color sera rojo.

EstadoTrigger.png
3.8.5.3 Asociar un Action al trigger



Una action(acción) sirve para configurar un mensaje de alerta o una accion para Zabbix, ante un problema. Hay varias formas de gestionar un problema a través de una acción:

  1. A través de mensajes simples, alertando al instante.
  2. Escalar los mensajes hacia el jefe y/o otros grupos.
  3. Ejecución de commandos remotos.
  4. Notificaciones repetidas hasta que se resuelve el problema.
  5. Notificaciones y comandos retardados.
  6. 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]]. -->





4 Funcionalidades específicas en VIVAit



En este apartado se tratará de las funcionalidades especificas de que dispone el sistema VIVAit.
Este apartado contiene las siguientes funcionalidades:

Mecanismo de prioridad adaptativa, asignación de llamadas en colas modulada por tiempo de espera.





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

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

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

4.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:
Formula.png

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

Esquema.png
 - Calculo prioridad de llamada: se calcula por llamada cada vez que un agente queda libre
 - Agente atiende llamada con mejor prioridad de llamada




Volver al índice

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


4.2.1 Esquema de funcionamiento

Esquema funcionamiento marcador.jpg

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.

4.2.2 Flujo de estados

El flujo de estados es el reflejado en la figura siguiente:

Diagrama de flujo motorsal.png

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

4.2.3 Carga de contactos

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

4.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
email 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
4.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';

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



Volver al índice

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

4.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]

4.3.2 ¿Cómo funcionan las extensiones?

Primeramente el usuario debe tener los ejes apropiados en la tabla COM_USUARIOS_APLICACION (aplicación centralita).

La extensión debe de tener un teléfono y por tanto un modelo de teléfono asociado.

Es tan simple como especificar la extensión, el usuario y la clave de este.

Para corroborar el funcionamiento de esta hay dos métodos:

* CLI asterisk:

mdintz qry * nimitz bd extenEntraUsuarioMovil 25001 20001 1234

Y como resultado obtenemos lo siguiente:

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



Volver al índice




4.4 Desvío por calendario

Se ha desarrollado una nueva funcionalidad para VIVAit Call que permite establecer desvíos de extensiones y usuarios en base a una programación horaria. Una vez puesta en marcha esta funcionalidad , el orden de desvíos de usuarios o extensión en VIVAit Call será:


  • Primero se atiende si el usuario o extensión tiene desvío incondicional a

mensajería.

  • En segundo lugar se comprueba si dispone de desvío programado, y se

encuentra en una franja horaria con desvío activo.

  • Posteriormente se atiende si el usuario o extensión tiene desvío

incondicional.

  • Posteriormente se tratarán resto de desvíos condicionales (por no

conectado, por ocupado o por no contesta).



Captura de pantalla de 2022-11-16 07-58-38.png



Los componentes principales de la arquitectura son:


  • Servidor de calendarios : Para definir las programaciones de desvíos se ha utilizado una solución de servidor estándar de calendarios; se ha optado por el servidor Baikal, por disponer de todas las funcionalidades necesarias y disponer de BBDD Mysql (especialmente adecuado en entornos VIVAit)


  • Intz-Nimitz : El proceso de enrutamiento de VIVAit consultará en cada llamada el estado de desvío programado al servidor de calendarios; esta consulta solo se realizará en caso de que dicha extensión o usuario tenga activo dicho desvío y un calendario asignado; por defecto los desvíos programados estarán desactivados en todas las extensiones y usuarios para proteger las prestaciones del sistema.


  • Frontales : Para la administración por parte de los usuarios de los desvíos programados se ofrecen los siguientes frontales:

- Portal de usuario: Cada usuario podrá definir desvíos programados en el mismo entorno en el que define el resto de desvíos.

- Portal de administración de VIVAit: Desde dicho portal se podrán gestionar por un administrador los desvíos programados de usuarios y extensiones de todo el sistema.

- Portal de administración de Baikal: Desde dicho portal se podrán gestionar el servidor de calendarios.

- Entorno estándar de gestión de calendarios: desde un entorno estándar de gestión de calendarios (p. ej Thunderbird), y con protocolo CalDav, se podrán realizar gestiones de todos los calendarios de un entorno VIVAit. Este entorno sería una alternativa al portal de administración (no de usuario), debido a que:

1. Se deberá configurar dicho entorno para acceder con el usuario de administración de calendarios.

2. Se podrán ver todos los calendarios del sistema (de todas las extensiones y usuarios).


Por defecto no será necesario montar un nuevo nodo de VIVAit, para el despliegue de Baikal se montará donde esté ubicado el portal de administración de VIVAit.

 Baikal se ubicará por defecto en el mismo nodo en el que se encuentre el portal de administración de VIVAit.



4.4.1 Baikal

Como se ha indicado en el apartado de arquitectura, VIVAit Call utilizará un servidor de calendarios Baikal para almacenar la información referente a desvíos programados de usuarios y extensiones.

Baikal es un servidor CalDAV ligero. Los datos se almacenan en una base de datos Mysql (diferente a la base de datos de VIVAit).

En el caso de su uso en VIVAit Call:

  • Existirá un único usuario administrador de Baikal que podrá crear los calendarios (desde los frontales anteriormente descritos).
  • Los calendarios y los desvíos podrán ir asociados tanto a usuarios como a extensiones.
  • Cada extensión o usuario de VIVAit tiene un calendario asignado que se crea automáticamente en Baikal al programar el primer evento desde el portal de administración de VIVAit o desde el portal de usuario.


Si se instala Vivait 3.6 desde repositorio , habría que realizar los siguientes pasos en Mysql:

Configuración de Mysql


La instalación de Baikal implica disponer de un servidor Mysql operativo; será necesario crear una base de datos de nombre “baikal” con un usuario “baikal” que será el que utilizarán los frontales para la interacción con el servidor de calendarios:

Baikal usa su propia base de datos (diferente a la de VIVAit)


1.Configuración inicial Mysql


Si la instalación la estamos realizando sobre un nodo que no tenía instalado Mysql y lo hemos instalado durante este proceso de instalación en el paso 3 del punto anterior, deberemos configurar Mysql para su integración con VIVAit.

Acceder a Mysql y cambiar clave de root
-------------------------
mysql_secure_installation
mysql -u root -p
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘ LACLAVEDEVIVAITPARAMYSQL ’;
-------------------------
  • No realizar la configuración inicial de Mysql si el nodo ya dispone de base de datos VIVAit


2.Configuración de Base de datos Baikal


Crear base de datos de baikal
-------------------------
mysql> create database baikal;
-------------------------
2. Crear usuario baikal
-------------------------
create user 'baikal'@'localhost' identified by 'ivivabaikal';
-------------------------
3. Asignar privilegios a usuario baikal
-------------------------
grant all on baikal.* to ‘baikal'@'localhost’;
-------------------------


Configuración de Baikal


Una vez instalado, podemos comprobar que el servidor Baikal está operativo accediendo a su URL de gestión en:

http://<IPServer>/baikal/html/


Tras acceder deberemos configurarlo adecuadamente, realizando los siguientes pasos:


Crear la conexión entre VIVA it y Baikal

Tener correctamente configurado en la tabla WEB_CONFIGURACION el usuario y clave de la base de datos de Baikal; esto permitirá configurar Baikal (usuario, calendarios…) sin tener que acceder a su interfaz de administración.

Se configura:

  • Host
  • Puerto (defecto 3306)
  • Driver con el que se conecta (Mysql)
  • Usuario de BBDD Baikal
  • Clave de BBDD Baikal


A nivel de base de datos


Calendario1.png


Donde:

  • MySQL host - Nombre del host de mysql.
  • MySQL database name - Nombre de la base de datos creada.
  • MySQL username - Nombre de usuario de acceso.
  • MySQL password - Contraseña de acceso.


En ajuste de sistema


Calendario2.png

Donde:


  • Zona horaria – Seleccionar la región que corresponda (típicamente Europe/Madrid).
  • Habilitar o deshabilitar CardDav o CalDav – Es necesario habilitar CalDav, y deshabilitar CardDav (no se va a utilizar).
  • Enviar invitación al correo del remitente – Dejar vacío.
  • Seleccionar el tipo de autenticación WebDav – Hay tres opciones (Digest, Basic y Apache), la opción que hay que seleccionar es Digest.
  • Contraseña del administrador – Esta contraseña se configura solo para entrar al entorno de Baikal.



Desde Baikal + Cliente Caldav


La administración desde Baikal solo será necesaria en caso de no poder utilizar los frontales desarrollados para la gestión de la funcionalidad.


Consideraciones relevantes:

  • Desde la administración de Baikal si podremos crear:


- usuarios (en caso de la funcionalidad en VIVAit solo usuario único de VIVAit).

- calendarios (existirá uno por extensión o usuario).


  • Desde la administración de Baikal no podremos gestionar eventos de calendario; para ello deberemos usar un cliente CalDav (p. ej Thunderbird).


Ejemplo de una consulta de intz-Nimitz a Baikal en los ficheros log:


Ante una consulta de Intz-Nimitz a Baikal, los resultados devueltos en el fichero de log (/var/log/intz-nimitz.log) por Baikal pueden ser:


1. En caso de existir una programación de desvío, Baikal devolverá los campos asunto y location de la programación, que podrán ser usados en los procesos posteriores de tratamiento de la llamada en caso de ser necesario:


Calendario5.png


2. En caso de no existir programación de desvío, devolverá vacío:


Captura6.png

4.5 Grabación

La grabación en VIVAit Call está diseñada para ser lo mas flexible posible.

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

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

Esquematico tracker 1.jpg


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

Esquematico tracker 2 https.jpg


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

4.6 Enrutamiento

Enrutamiento.png


4.6.1 Enfoque inicial

Acceso

4.6.2 Funcionamiento

El proceso de enrutamiento, como vimos en el esquemático, se compone de dos fases:

  1. Preenrutameinto, que se encarga de tratar todas las llamadas
  2. 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.
4.6.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.

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


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

Volver al índice

4.7 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

Ancho de banda.png

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


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

Los términos que usaremos para la explicación de la funcionalidad y que son relevantes para comprender, implantar, mantener e interpretar la misma son:


  • Nodo VIVAit: Un nodo VIVAit es cualquier elemento dado de alta en el sistema

como tal, que contiene un proceso de conmutación de voz Asterisk incorporado. Un cluster activo/pasivo son dos ordenadores, pero un solo nodo. Típicamente existen nodos de tres tipos (si bien los dos primeros pueden combinarse en uno solo):

- Nodo de registro para telefonía corporativa

- Nodo Gateway

- Nodo de registro ACD

  • TIC: Unidad básica de medida de tiempo de md flow; por defecto el valor es

500ms; nótese que los valores devueltos por el sistema siempre estarán medidos en segundos, aunque internamente use el TIC como base de tiempos.

  • Flujo: Cada uno de los nueve elementos de medida y control que podrán

establecerse por nodo VIVAit.

  • Medición: Capacidad de md flow para determinar el número de llamadas por

segundo que se están estableciendo en un determinado flujo. Nótese que no se hace referencia a duración de las mismas o medición de llamadas previamente establecidas

  • Control: Capacidad de md flow para limitar el número de llamadas por segundo

que se están estableciendo en un determinado flujo

  • Tasa de llamadas por segundo: Cantidad de llamadas que se están

estableciendo por segundo en un nodo VIVAit. Nótese que no se hace referencia a duración de las mismas o llamadas previamente establecidas

  • DNIS: Dialed Number Identification Service; número destino de una llamada
  • Congestión: Estado del nodo VIVAit cuando se sobrepasa una determinada tasa

de llamadas por segundo; el mecanismo md flow entrará en funcionamiento cuando el sistema entre en estado de congestión.

  • Llamada desbordada: Llamada que en el tratamiento de la congestión se

considera apta para ser descartada (si bien el tratamiento se definirá en dialplan, el funcionamiento lógico previsto es descartarla).

  • Llamada a agujero: Llamada que en el tratamiento de la congestión se considera

ha de progresar por no quedar colas de DNIS disponibles (se explicará y justificará el funcionamiento más adelante).

  • Mdflow en paso: md flow puede ser utilizado para:

- Solo medir . En este caso md flow se encontrará en paso.

- Medir y realizar control de flujo.

  • DNIS masivo: Un DNIS con alta tasa de llamadas por segundo.
  • DNIS ocasional: Un DNIS con baja tasa de llamadas por segundo.




La aplicación está diseñada para controlar el flujo de llamadas entrantesEl 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...


Mdflow se invoca dentro del dialplan del sistema. Por ejemplo, será la primera línea del dialplan correspondiente a un enlace externo; a la salida de md flow, este proporcionará una etiqueta, que podrá ser “Ok”, “desborda”, “agujero” o “error” El funcionamiento general de md flow es el reflejado en el siguiente diagrama de flujo.


Mdflow.png

Como se puede apreciar en el diagrama de flujo:

  • mdflow siempre cuenta las llamadas para establecer la tasa de llamadas por segundo.
  • Solo hace control de flujo si no está en paso.
  • Solo hace control de flujo si hay congestión (tasa de llamadas por segundo superior a la máxima configurada).
  • Estando en congestión:


- Si entra una llamada nueva

Y existe otra encolada para el DNIS se encola en dicha cola.

Y no existe cola para el DNIS se crea la cola y encola SI quedan colas disponibles.

Si no quedan colas disponibles la llamada sale con etiqueta “agujero”.


- Al respecto de colas

Una cola se crea cuando hay una llamada con un DNIS no encolado y si existen aún colas disponibles.

Una cola se libera de un DNIS cuando no quedan llamadas en cola para ese DNIS.

Las colas no tienen una profundidad máxima.

Las colas tienen un tiempo de permanencia.

Las llamadas se van atendiendo equitativamente en cada cola, todas tienen el mismo peso, saliendo con etiqueta “Ok”


- Al respecto de llamadas

Una llamada se saca de la cola con etiqueta “desborda” si pasa el máximo tiempo configurado en cola


- Si se produce un error en el sistema las llamadas podrán salir con etiqueta “error”.




Al respecto de las llamadas que salen con etiqueta “agujero”, cabría pensar que si no quedan colas disponibles las llamadas con etiqueta agujero serian llamadas candidatas a ser descartadas a DNIS ocasionales y se les dará prioridad. Téngase en cuenta que en circunstancias de congestión, las colas estarán típicamente ocupadas por DNIS masivos, y no por DNIS ocasionales, de manera que es altamente probable que cualquier DNIS masivo ya tenga cola asignada y que al agujero vayan DNIS ocasionales; todo esto pasa por realizar un buen dimensionamiento del máximo de colas (que debiera ser muy parecido al número de DNIS masivos)




Mdflow2.png



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


4.8.2 Parámetros de configuración

  • Parámetros generales


- tick_ms: duración de un TIC.

- estad_interv_seg: define intervalo de medida, si bien las informaciones siempre las proporcionará en tasa de llamadas/s.


  • Parámetros por flujo


-Flujo: nombre del flujo (solo para la salida de estadísticas); no conecta con nada en dialplan o similar.

-En_paso: (0 o 1); si está a 1 solo mide, siempre devuelve OK; si “en_paso” es 0 hay control de flujo.

-Tasa_sal_seg: tasa máxima de salida de llamadas/s configuradas para ese flujo; saldrán ese valor de llamadas por segundo con etiqueta “Ok”.

-Dnis_max: número de colas máximo en ese flujo. Si se configura 1 cola, se comporta como cola única, no se hace caso al DNIS.

-Dnis_umbral_masivo: no vale para control, pero sí para medida; nos define que un DNIS es masivo si hay tantas o más llamadas encoladas que las indicadas en este parámetro; si está solo en paso no se mide porque no hay colas.

-to_desborda_seg: Tiempo máximo en cola de una llamada; pasado el tiempo sale con "desborda"


4.8.3 Fichero de configuración

El fichero de configuración se ubica en /etc/Asterisk/MDflow.conf ; su contenido por defecto es el siguiente:


[general]
; Periodo de tiempo para medidas de tasa de llamadas
tick_ms=500
; Periodo de tiempo para calculos estadísticos
estad_interv_seg=10
; Máximo 9 flujos ([flujo_1] a [flujo_9])
; Tiene que empezar en [flujo_1] y ser correlativos
[flujo_1]
; Nombre asignado al flujo. Se usa en las salidas de los comandos
flujo=Cen_Inicio_SIP
; "En paso"
; 1: No se controla el flujo (siempre etiqueta OK), sólo se mide
; 0: Se controla la tasa de llamadas y se hacen medidas
en_paso=0
; Tasa máxima de llamadas (expresada en llamadas/seg) que etiquetadas OK
; Para un tick de 500 ms, este valor debe ser par
tasa_sal_seg=4
; Número máximo de dnis a encolar. Resto se etiquetan como AGUJERO
dnis_max=2
; Umbral para el número de llamadas encoladas en un dnis, que hace que
; éste sea calificado como "masivo"
; El valor mínimo es 2
dnis_umbral_masivo=8
; Límite de tiempo en segundos, transcurrido el cuál se etiqueta DESBORDA
to_desborda_seg=5
[flujo_2]
flujo=Cen_Inicio_TrunkSip
en_paso=1
tasa_sal_seg=20
dnis_max=100
dnis_umbral_masivo=10
to_desborda_seg=5
[flujo_3]
flujo=Cen_TrunkInternos
en_paso=1
tasa_sal_seg=20
dnis_max=100
dnis_umbral_masivo=10
to_desborda_seg=5

4.8.4 Ejemplo claro de invocación de mdflow desde dialplan y posterior tratamiento en función de las etiquetas de 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)


4.8.5 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


  • mdflow reload: Recarga mdflow leyendo de nuevo el fichero de configuración

MDlow.conf; se puede realizar con la plataforma en funcionamiento normal pero no se recomienda realizarlo en momentos de alto tráfico; los cambios de configuración se aplican tras un comando “mdflow reload”

Preproduccion-Corp0*CLI> mdflow reload


  • mdflow debug: Muestra estadísticas por pantalla a intervalos regulares; no se

recomienda su uso sistemático.

Preproduccion-Corp0*CLI> mdflow debug

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


4.8.7 Asignación de flujos

Por defecto, en la instalación irán definidos los siguientes flujos:

  • Flujo 1 (trunksip): Flujo que analiza las llamadas que vienen de los trunksip.

Típicamente son las llamadas que provienen de los operadores en los Gatewais. Está configurado en el contexto Cen_InicioLlamada_TrunkSip.

  • Flujo 2 (Extensiones): Flujo para las llamadas originadas por las extensiones SIP

registradas en el nodo. Está configurado en el contexto Cen_InicioLlamada_SIP.

  • Flujo 3 (trunkInternos): Flujo para las llamadas que provienen de otros nodos.

Está configurado en el contexto Cen_TrunkInternos


Estos son flujos genéricos que irán definidos en la instalación, se podrán generar mas si la instalación lo requiere, por ejemplo, si la instalación tiene primarios se podrá definir un flujo para las llamadas que vienen por el contexto Cen_InicioLlamada_Dahdi.


El significado del flujo 3 es diferente según el tipo de nodo en que se está ejecutando. Por ejemplo, en una instalación de 2 nodos, un nodo Gateway y un nodo de procesamiento, el flujo 3 en el nodo gateways estará midiendo el tráfico que manda el nodo de procesamiento hacia el exterior del sistema, típicamente las llamadas salientes al sistema, en cambio, el mismo flujo en el nodo de procesamiento, estará indicando las llamadas que vienen del Gateway, típicamente las llamadas entrantes del exterior.


Esto es mucho menos evidente en instalaciones con varios nodos, con trunk hacia proveedores externos en los nodos de procesamiento, etc.


4.8.8 Configuración de cola única

La configuración de colas es útil cuando el número de DNIS es finito y queremos priorizar
los números llamados menos frecuentemente sobre los masivos.
Cuando el número de DNIS es muy grande la configuración mediante colas no ofrece un
funcionamiento óptimo, las colas serán ocupadas cada una con un DNIS diferente y todos
los DNIS que no tengan cola libre saldrán por la salida “agujero”.
Para tener un control del flujo en estas situaciones se ha creado el concepto de cola única,
su comportamiento es que todas las llamadas van a la misma cola y no hay llamadas que
obtengan la salida “agujero” y por tanto todas tienen la misma prioridad.
Este comportamiento se obtiene poniendo el parámetro de configuración del flujo
dnis_max con el valor 1 (dnis_max=1).
Un ejemplo típico de utilización de este tipo de configuración sería en el flujo 3 de los
nodos gateways. Este flujo tendrá las llamadas que el resto de los nodos envían al exterior
y los DNIS no coincidirían en su mayoría.

4.8.9 MDflow y las 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))




Volver al índice

4.9 Estadísticas en VIVAit Call

Como configurar estadísticas para VIVAit Call






5 Diagnósticos y operaciones básicas en VIVAit



5.1 Arranque y apagado de la plataforma



En general el arranque y apagado de cada nodo de una plataforma VIVAit es el estándar de un procedimiento ordenado de apagado en una máquina linux: "Shutdown -h now" o comando de apagado inmediato o programado equivalente


El orden de arranque de la plataforma deberá ser:

  1. En primer lugar arrancar el nodo con la base de datos de tiempo real
  2. Una vez finalizado el arranque del punto 1, arrancar el nodo con la base de datos de réplica
  3. 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:

  1. 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
  2. Una vez apagados totalmente todos los nodos del punto 1, apagaremos el nodo (o nodos) con bases de datos de réplica
  3. Una vez apagados totalmente todos los nodos del punto 2, se apagará el nodo con la base de datos de tiempo real



Volver al índice


5.2 Cluster VIVAit



5.2.1 Introducción a 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





5.2.2 Funcionamiento en cluster




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


5.2.2.1 Píldoras
5.2.2.1.1 Prevenir que un nodo vuelva a tomar el control tras volver a estar operativo

Cuando queremos evitar que un recurso vuelva al nodo en el que estaba originalmente tras la recuperación del nodo, ejecutaremos la siguiente orden.

pcs resource defaults resource-stickiness=100
5.2.2.1.2 Borrar un recurso
pcs resource delete DRBDFs
5.2.2.1.3 Sincronización del drbd

Para sincronizar el drdb tras un fallo tenemos que determinar cuál es el nodo que tiene los datos buenos y cuál es el que vamos a sobrescribir sus datos

En el nodo que vamos a sobrescribir los datos ejecutaremos los siguientes comandos.

drbdadm secondary all
drbdadm disconnect all 
drbdadm invalidate all
drbdadm connect all


Y en el nodo que tiene los datos correctos.

drbdadm connect all


5.2.2.1.4 Mover un recurso de nodo

Para mover un recurso de nodo utilizaremos el siguiente comando.

pcs resource move IP-ASTER 
pcs resource clear IP-ASTER

Esto crea restricciones locales para evitar que el recurso vuelva a este nodo (Puede tener prioridad de ejecución en este nodo y haría que volviera a este nodo automáticamente al estar online).

La restricción que crea banea el nodo para este recurso, si queremos quitar esta restricción creada.

pcs resource clear DRBDfsASTER

Mirar si existe alguna manera de mover un recurso sin que se creen estas restricciones locales


5.2.2.1.5 Habilitar/deshabilitar recursos

Los comandos para habilitar y deshabilitar recursos en un nodo son

Si especificamos un tiempo, pcs esperara este tiempo y retornara 0 si el recurso a parado o 1 si el recurso no ha parado en el tiempo especificado.

pcs resource disable resource_id [--wait[=n]]

Si especificamos un tiempo, pcs esperara este tiempo y retornara 0 si el recurso a arrancado o 1 si el recurso no ha arrancado en el tiempo especificado.

pcs resource enable resource_id [--wait[=n]]
pcs config show
pcs resource cleanup resource_id
pcs resource clear
pcs resource refresh

Borra los Failed Actions de un recurso:

pcs resource cleanup [recurso]
5.2.2.1.6 Notas sincronismo

Si tenemos este fallo:

root@VC-PROC-SUMA-ALC-02:/tmp# cat /proc/drbd
version: 8.4.10 (api:1/proto:86-101)
srcversion: 7922D81D3881494EB149253
 0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r-----
root@VC-PROC-SUMA-ALC-01:~# cat /proc/drbd
version: 8.4.10 (api:1/proto:86-101)
srcversion: 7922D81D3881494EB149253
 0: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown   r-----


En el nodo principal

drbdadm connect all

En el nodo secundario

drbdadm -- --discard-my-data connect all 
********* En secundario: ************** 
drbdadm secondary drbdASTER
drbdadm disconnect drbdASTER
drbdadm -- --discard-my-data connect drbdASTER
********* En primario: ****************
drbdadm primary drbdASTER
drbdadm disconnect drbdASTER
drbdadm connect drbdASTER


5.2.2.1.7 Configuración para KVM
vi /etc/multipath.conf
-----------------------------
defaults {
   user_friendly_names yes
}
blacklist {
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]"
devnode "^vd[b-z]?[0-9]"
devnode "vda"
devnode "vda1"
devnode "^drbd[0-9]*"
}
systemctl restart multipathd.service
vi /etc/corosync/corosync.conf
------------------------------------
totem {
   version: 2
   cluster_name: CLmdtel
   transport: knet
   crypto_cipher: aes256
   crypto_hash: sha256
   token: 12000
}
nodelist {
   node {
       ring0_addr: nodo-vc-01
       name: nodo-vc-01
       nodeid: 1
   }
   node {
       ring0_addr: nodo-vc-02
       name: nodo-vc-02
       nodeid: 2
   }
}
quorum {
   provider: corosync_votequorum
   two_node: 1
}
logging {
   to_logfile: yes
   logfile: /var/log/corosync/corosync.log
   to_syslog: yes
   timestamp: on
}
systemctl restart corosync

Revisar que están arrancados después de reinicar:

Corosync Pacemaker multipath


5.2.2.2 Ejemplo de cluster con mysql y asterisk

En este ejemplo vamos a crear un cluster que maneje mysql y Asterisk como servicios separados.

Para lograr esto vamos a necesitar que el drbd maneje dos particiones separadas y tener dos ip flotantes, una para cada servicio.

5.2.2.2.1 Requisitos previos

Los requisitos previos antes de comenzar la instalación del cluster son:

• Nodos correctamente actualizados (update/upgrade).

• Conexión a internet.

• NTP configurado.


Creación de las particiones e instalación y configuración del drbd

5.2.2.2.2 Particionado (En los 2 nodos)

Para la instalación de los dos recursos drbd necesitamos tener dos particiones que vamos a crear añadiendo un disco duro en cada una de las máquinas. Lo añadimos mediante el Gestor de Máquinas Virtuales de la máquina 999-sgestion. Los tamaños serán los siguientes:

• Corporativo -> 50Gb

• BDTR -> 100Gb

Lo siguiente es crear la partición en cada servidor:


Cluster1.png

Vamos a utilizar la herramienta parted seguido del dispositivo que queremos particionar. En este caso el espacio que vamos a particionar está en el dispositivo /dev/vdc.

parted /dev/vdc

Una vez ejecutado el comando entraremos en una consola de la aplicación.

Ejecutando el comando

(parted) print free

Obtenemos las particiones que tiene el dispositivo actualmente y el espacio libre que disponemos.

Cluster2.png

En este ejemplo disponemos de 50Gb de espacio libre que es el que vamos a utilizar para las 2 particiones necesarias.

Lanzamos el comando mkpart para realizar la primera partición que será para mysql.

(parted) mkpart

El nombre que le vamos a dar a la partición es DRBD-MYSQL. El Tipo de sistema de ficheros ext4. Luego nos pedirá el principio de la partición, en el ejemplo vamos a comenzar en 198Gb y vamos a finalizar en 550Gb.


Cluster3.png

Realizaremos la segunda partición volviendo a ejecutar el mismo comando

(parted) mkpart


En este ejemplo el nombre para esta partición será DRBD-ASTER el tipo ext4 y le daremos el espacio restante del disco.

Cluster4.png


Para ver el resultado de las particiones podemos ejecutar el comando.

lsblk

Cluster5.png

Realizamos este mismo proceso en el otro nodo del cluster.


5.2.2.2.3 Gestión de particiones con LVM (En los 2 nodos)

Crearemos las 2 particiones lvm en los 2 servidores con los siguientes comandos.

En este ejemplo las particiones que queremos utilizar son /dev/sda5 para mysql y /dev/sda6 para Asterisk, esto podrá cambiar en las instalaciones.

Cluster6.png

Realizamos este mismo proceso en el otro nodo del cluster.


5.2.2.2.4 Instalación y configuración del drbd (En los 2 nodos)

Instalaremos el paquete drbd8-utils. En Ubuntu 20.04 drbd-utils

apt-get install drbd-utils

Ahora tenemos que editar los archivos de configuración del drbd, estos archivos están en el directorio /etc/drbd.d

Primero editaremos la configuración general, el archivo global_common.conf y le añadiremos en la sección net lo siguiente.

vi /etc/drbd.d/global_common.conf

Cluster7.png

Si tenemos problemas con los backup que realiza Vodafone en las máquinas virtuales añadir:

 net {
               # protocol timeout max-epoch-size max-buffers
               # connect-int ping-int sndbuf-size rcvbuf-size ko-count
               # allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri
               # after-sb-1pri after-sb-2pri always-asbp rr-conflict
               # ping-timeout data-integrity-alg tcp-cork on-congestion
               # congestion-fill congestion-extents csums-alg verify-alg
               # use-rle
               protocol C;
               after-sb-0pri discard-zero-changes;
               after-sb-1pri discard-secondary;
               after-sb-2pri disconnect;
       }

Ó (nota Centro de Servicios)

net {
   ping-int 30;
   timeout 20;
   connect-int 30;
   protocol C;
   after-sb-0pri discard-older-primary;
   after-sb-1pri discard-secondary;
   after-sb-2pri disconnect;
}


Para configurar los recursos tenemos que crear en el directorio /etc/drbd.d un archivo para cada recurso. Estos archivos deben tener la extensión res.

Creamos el archivo para el recurso mysql con el nombre drbd-mysql.res.

vi drbd-mysql.res

El contenido del archivo es:

resource drbdMYSQL {
 on VC-CORP-Cetelem-Mad-cl1 {
   device /dev/drbd0;
   disk /dev/mapper/vg_DRBD--MYSQL-lv_DRBD--MYSQL;
   address 10.10.10.10:7788;
   meta-disk internal;
 }
 on VC-CORP-Cetelem-Mad-cl2 {
   device /dev/drbd0;
   disk /dev/mapper/vg_DRBD--MYSQL-lv_DRBD--MYSQL;
   address 10.10.10.11:7788;
   meta-disk internal;
 }
}


Ahora haremos lo mismo para el recurso Asterisk, el archivo se llamará: drbd-aster.res.

vi drbd-aster.res


y el contenido será el siguiente:

resource drbdASTER {
 on VC-CORP-Cetelem-Mad-cl1 {
   device /dev/drbd1;
   disk /dev/mapper/vg_DRBD--ASTER-lv_DRBD--ASTER;
   address 10.10.10.10:7789;
   meta-disk internal;
 }
 on VC-CORP-Cetelem-Mad-cl2 {
   device /dev/drbd1;
   disk /dev/mapper/vg_DRBD--ASTER-lv_DRBD--ASTER;
   address 10.10.10.11:7789;
   meta-disk internal;
 }
}

Realizamos este mismo proceso en el otro nodo del cluster. Los ficheros de configuración los podemos copiar de un nodo a otro.


5.2.2.2.5 Configuración de /etc/hosts (En los 2 nodos)

Tenemos que configurar correctamente los nombres de las máquinas en el archivo /etc/hosts.

vi /etc/hosts

El contenido de este archivo variará según la configuración, para este ejemplo.

Cluster8.png

127.0.0.1	localhost
#127.0.1.1	VC-CORP-mdtelMad-cl1
128.1.4.201	VC-CORP-mdtel-Mad-cl1
128.1.4.202   VC-CORP-mdtel-Mad-cl2
10.10.10.10	 nodo-vc-01
10.10.10.11    nodo-vc-02


Realizamos este mismo proceso en el otro nodo del cluster.


5.2.2.2.6 Creación de los recursos en drbd. (En los 2 nodos)

Ahora crearemos los recursos en drbd, primero el de mysql

drbdadm create-md drbdMYSQL

Y después el de Asterisk

drbdadm create-md drbdASTER

Y arrancamos el drbd en el nodo.

/etc/init.d/drbd start

Crearemos las carpetas donde se montarán los recursos del drbd

mkdir HDmysql
touch /HDmysql/sinMontar
mkdir HDaster
touch /HDaster/sinMontar

Realizamos este mismo proceso en el otro nodo del cluster.

5.2.2.2.7 Sincronización del drbd. (En 1 nodo)

Este proceso solo se debe realizar en un nodo, Con este comando sincronizaremos los 2 discos y el nodo desde donde lo lancemos será el que aporte los datos en la sincronización. Como no hay nada en los discos todavía es igual desde que nodo se ejecute.

drbdadm -- --overwrite-data-of-peer primary all


Podemos ir viendo cual es el porcentaje que lleva realizado con el siguiente comando.

watch -n 1 'cat /proc/drbd'

Al final de la sincronización debería salir algo como esto.

Cluster9.png


5.2.2.3 Pacemaker, corosync y pcs

Ahora deberíamos tener en los 2 nodos un mysql configurado y corriendo, un Asterisk configurado y corriendo y 2 particiones de drbd (una para mysql y otra para Asterisk) sincronizadas, aunque no están montadas en ningún sitio.


5.2.2.3.1 Parar y deshabilitar los servicios. (en los 2 nodos)

Todos los servicios que vayan a ser controlados por el pacemaker tienen que estar parados y el arranque deshabilitado para que el pacemaker los arranque y los pare en el nodo que corresponda.

/etc/init.d/asterisk stop
/etc/init.d/mysql stop
/etc/init.d/drbd stop
systemctl disable mysql
systemctl disable drbd
systemctl disable asterisk


Realizamos este mismo proceso en el otro nodo del cluster.


5.2.2.3.2 Instalación de los paquetes necesarios. (En los 2 nodos)

Instalamos los paquetes necesarios.

apt install corosync pacemaker pcs


Realizamos este mismo proceso en el otro nodo del cluster.


5.2.2.3.3 Configuramos la clave del usuario hacluster. (En los 2 nodos)

Al instalar los paquetes se crea un usuario hacluster que tenemos que ponerle clave

passwd hacluster

La clave deberá ser la misma en los 2 nodos. ivivacluster


Realizamos este mismo proceso en el otro nodo del cluster.


5.2.2.3.4 Autentificación del pcs. (En 1 nodo)

En uno de los nodos ejecutamos el siguiente comando para autenticar el pcs.

pcs host auth nodo-vc-01 nodo-vc-02 -u hacluster -p ivivacluster

El resultado del comando tiene que ser:

VC-CORP-Cetelem-Mad-cl1: Authorized
VC-CORP-Cetelem-Mad-cl2: Authorized
5.2.2.3.5 Creación y configuración del cluster. (En 1 nodo)

Ahora creamos el cluster e incluimos las maquinas que lo van a componer y le asignamos un nombre (este nombre no puede exceder de 15 caracteres).

pcs cluster destroy (en caso de no encontrar /var/lib/pcsd/known-hosts y después lanzar pcs host auth noco-vc-01 nodo-vc-02   -h hacluster -p ivivacluster)
pcs cluster setup CLmutuaint  nodo-vc-01 nodo-vc-02 --start --enable --force

Si todo ha ido bien la salida debería ser algo como esto.

Cluster10.png

Lo habilitamos en todos los nodos

pcs cluster enable --all

La salida será:

VC-CORP-CDS-MAD-01: Cluster Enabled
VC-CORP-CDS-MAD-02: Cluster Enabled

Arrancamos el cluster en todos los nodos

pcs cluster start --all


Cluster11.png

Comprobamos que todo está correcto con el siguiente comando:

Nos mostrara el estado del cluster.

Cluster12.png


En la salida del comando, vemos que STONITH (Shoot The Other Node In The Head) esta activado, pero no hay dispositivos configurados.

Quitamos el STONITH.

pcs property set stonith-enabled=false --force


También deshabilitaremos la política de quorum. Un cluster tiene quorum cuando más de la mitad de los nodos están online. Pacemaker por defecto para todos los servicios si no hay quorum, esto no tiene mucho sentido en un cluster de 2 nodos.

pcs property set no-quorum-policy=ignore --force


Vamos a ver la lista de propiedades del cluster para ver que hemos deshabilitado todo correctamente.

pcs property list


Cluster13.png


5.2.2.3.6 Creación de las IP flotantes (En 1 nodo)

Ahora vamos a crear las 2 direcciones ip flotantes para que la conexión se realice a la maquina correcta en cada caso, esta ip balanceara entre los diferentes nodos para dar acceso a los servicios en el nodo en el que estén activos.

Creamos la IP para el mysql.

pcs resource create IP-MYSQL ocf:heartbeat:IPaddr2 ip=128.1.4.205 nic=eno1:0 cidr_netmask=16 op monitor interval=60s

Y la IP para el Asterisk

pcs resource create IP-ASTER ocf:heartbeat:IPaddr2 ip=128.1.4.207 nic=eno1:1 cidr_netmask=16 op monitor interval=60s

Comprobamos el estado del cluster.

pcs status

Nos mostrará los nuevos recursos creados y nos indicará en que nodo han sido arrancados.


Cluster14.png


5.2.2.3.7 Configuración del drdb. (En 1 nodo)

La configuración de DRBD en Pacemaker implica que creemos varios recursos que se ejecutaran a la vez, para ello, utilizaremos una opción de pcs que nos permite encolar varios comandos y ejecutarlos al mismo tiempo. Estos comandos serán ejecutados únicamente en un nodo.

Primero ejecutaremos los comandos necesarios para la creación del drbd para mysql.

pcs cluster cib drbd_mysql_cfg
pcs -f drbd_mysql_cfg resource create DRBDmysql ocf:linbit:drbd drbd_resource=drbdMYSQL op monitor interval=60s
pcs -f drbd_mysql_cfg resource master DRBDmysqlClone DRBDmysql master-max=1 master-node-max=1 clone-max=2 clone-node-max=1  notify=true
pcs -f drbd_mysql_cfg resource promotable DRBDmysql promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1  notify=true 
pcs cluster cib-push drbd_mysql_cfg

Y lo mismo para el drbd de asterisk.

pcs cluster cib drbd_aster_cfg
pcs -f drbd_aster_cfg resource create DRBDaster ocf:linbit:drbd drbd_resource=drbdASTER op monitor interval=60s
pcs -f drbd_aster_cfg resource promotable DRBDaster promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1  notify=true 
pcs cluster cib-push drbd_aster_cfg
pcs cluster cib drbd_aster_cfg
pcs cluster cib-push drbd_aster_cfg


Miraremos el estado del cluster

pcs status

El resultado debería de mostrar que los recursos del drbd están creado y cuál es el nodo primario (master) y cuál es el nodo secundario (slave) para ambos recursos.

Cluster15.png


5.2.2.3.8 Montar las particiones del drbd. (En 1 nodo)

Formatearemos las particiones del drbd.

mkfs.ext4 /dev/drbd1
mkfs.ext4 /dev/drbd0

Una vez finalizado el proceso la pantalla mostrará a siguiente información (para cada comando).

Cluster16.png


Ahora crearemos el recurso para montar la partición de mysql en el directorio que creamos.

Vamos a crear restricciones para asegurarnos que los recursos estén todos en el nodo correcto y que arrancan en orden.

Vamos a configurar que la partición se monte en el nodo que sea master que la ip flotante este en este nodo y arranque después de haber montado la partición.

pcs cluster cib fs_mysql_cfg
pcs -f fs_mysql_cfg resource create DRBDfsMYSQL Filesystem device="/dev/drbd0" directory="/HDmysql" fstype="ext4"
pcs -f fs_mysql_cfg constraint colocation add DRBDfsMYSQL with DRBDmysqlClone INFINITY with-rsc-role=Master
pcs -f fs_mysql_cfg constraint order promote DRBDmysqlClone then start DRBDfsMYSQL
pcs -f fs_mysql_cfg constraint colocation add IP-MYSQL with DRBDfsMYSQL INFINITY
pcs -f fs_mysql_cfg constraint order DRBDfsMYSQL then IP-MYSQL
pcs cluster cib-push fs_mysql_cfg
pcs status

La salida mostrará lo siguiente:

Cluster17.png

Nos indica que el Filesystem está creado y montado en el nodo nodo-vc-01.

Ahora haremos lo mismo para la partición de Asterisk.

pcs cluster cib fs_aster_cfg
pcs -f fs_aster_cfg resource create DRBDfsASTER Filesystem device="/dev/drbd1" directory="/HDaster" fstype="ext4"
pcs -f fs_aster_cfg constraint colocation add DRBDfsASTER with DRBDasterClone INFINITY with-rsc-role=Master
pcs -f fs_aster_cfg constraint order promote DRBDasterClone then start DRBDfsASTER
pcs -f fs_aster_cfg constraint colocation add IP-ASTER with DRBDfsASTER INFINITY
pcs -f fs_aster_cfg constraint order DRBDfsASTER then IP-ASTER
pcs cluster cib-push fs_aster_cfg
pcs status

Vemos que ya tenemos las 2 particiones montadas.

Cluster18.png


5.2.2.3.9 Copiar datos de Asterisk a partición drbd. (En nodo 1)

Esto hay que realizarlo en el nodo en el que está montada la partición drbd para asterisk. Estará montado en la carpeta /HDaster

cd /HDaster/
tar -zcvf etc-asterisk.tgz /etc/asterisk
tar -zxvf  etc-asterisk.tgz
rm etc-asterisk.tgz
tar -zcvf var-lib-asterisk.tgz /var/lib/asterisk
tar -zxvf  var-lib-asterisk.tgz
rm var-lib-asterisk.tgz
tar -zcvf usr-lib-asterisk.tgz /usr/lib/asterisk
tar -zxvf  usr-lib-asterisk.tgz
rm usr-lib-asterisk.tgz
tar -zcvf var-spool-asterisk.tgz /var/spool/asterisk
tar -zxvf  var-spool-asterisk.tgz
rm var-spool-asterisk.tgz
5.2.2.3.10 Borrar los directorios de asterisk y crear enlaces simbólicos. (En los 2 nodos)

Borraremos los directorios y crearemos los enlaces simbólicos necesarios.


rm -rf /etc/asterisk
ln -s /HDaster/etc/asterisk /etc/asterisk
rm -rf /var/lib/asterisk
ln -s /HDaster/var/lib/asterisk /var/lib/asterisk
rm -rf /usr/lib/asterisk
ln -s /HDaster/usr/lib/asterisk /usr/lib/asterisk
rm -rf /var/spool/asterisk
ln -s /HDaster/var/spool/asterisk /var/spool/asterisk


5.2.2.3.11 Copiar datos de mysql a partición drbd. (En 1 nodo)

Esto hay que realizarlo en el nodo en el que está montada la partición drbd para mysql. Estará montado en la carpeta /HDmysql

cd /HDmysql/
tar -zcvf var-lib-mysql.tgz /var/lib/mysql
tar -zxvf  var-lib-mysql.tgz
tar -zcvf etc-mysql.tgz /etc/mysql
tar -zxvf  etc-mysql.tgz


5.2.2.3.12 Borrar los directorios de mysql y crear enlaces simbólicos. (En los 2 nodos)

Los datos contenidos en estos directorios ya no son válidos, borramos los directorios.

Los enlaces simbólicos no van a ser necesarios, los vamos a conservar para facilitar el acceso a los directorios de mysql habituales

rm -rf /var/lib/mysql
ln -s /HDmysql/var/lib/mysql /var/lib/mysql
rm -rf /etc/mysql
ln -s /HDmysql/etc/mysql /etc/mysql


5.2.2.3.13 Modificar configuración de apparmor para mysql. (En los 2 nodos)

Debemos cambiar la configuración de apparmor para darle a mysql acceso a la nueva localización de los ficheros.

Debemos modificar el fichero /etc/apparmor.d/usr.sbin.mysqld

vi /etc/apparmor.d/usr.sbin.mysqld


Y dejarlo configurado con la nueva ubicación de los ficheros. Debe quedar así:


Cluster19.png

Cluster20.png

Aplicamos los cambios con:

apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld

Realizamos este mismo proceso en el otro nodo del cluster.

5.2.2.3.14 Modificar archivos de configuración de mysql. (En 1 nodo)

Los enlaces simbólicos no funcionan con mysql, por eso necesitamos modificar archivos de configuración de mysql para cambiar las rutas de acceso a los archivos creado en el directorio /HDmysql.

Esto hay que realizarlo en el nodo que tiene montada la partición /HDmysql.

Modificamos el fichero my.cnf.fallback

vi  /HDmysql/etc/mysql/my.cnf.fallback


Deberá quedar así.


Cluster21.png

Ahora el fichero mysql.cnf.

vi /HDmysql/etc/mysql/mysql.cnf

Y quedará así.

Cluster22.png

El fichero mysqld.cnf.

vi /HDmysql/etc/mysql/mysql.conf.d/mysqld.cnf

Cluster23.png


Y por último el fichero my.cnf.

vi /HDmysql/etc/mysql/my.cnf

Y quedara de la siguiente manera. (datadir / log_bin / includedir)


Cluster24.png


Cluster25.png


Cluster26.png


5.2.2.3.15 Configuración del arranque de mysql. (En 1 nodo)

Vamos a configurar el arranque de mysql y le vamos a poner como condiciones que este en el nodo que este la ip flotante de mysql y que arranque después de que esté la ip.

pcs cluster cib mysql_cfg
pcs -f mysql_cfg resource create MYSQL ocf:heartbeat:mysql binary="/usr/sbin/mysqld" config="/etc/mysql/my.cnf"  datadir="/var/lib/mysql" pid="/var/run/mysqld/mysqld.pid" socket="/var/run/mysqld/mysqld.sock" additional_parameters="--bind- address=0.0.0.0" op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=30s
pcs -f mysql_cfg constraint colocation add MYSQL with IP-MYSQL INFINITY
pcs -f mysql_cfg constraint order IP-MYSQL then  MYSQL
pcs cluster cib-push mysql_cfg
pcs status


5.2.2.3.16 Configuración del arranque de Asterisk. (En 1 nodo)
pcs cluster cib aster_cfg 
pcs -f aster_cfg resource create ASTER lsb:asterisk 
pcs -f aster_cfg constraint colocation add ASTER with IP-ASTER INFINITY 
pcs -f aster_cfg constraint order IP-ASTER then ASTER 
pcs cluster cib-push aster_cfg
pcs status


5.2.2.3.17 Mover los recursos a otra máquina. (En 1 nodo)

El crear 2 particiones separadas para el Asterisk y el mysql nos da la posibilidad de correr un servicio en cada máquina y tener los 2 nodos activos.

Para mover un recurso de nodo utilizaremos el siguiente comando en el nodo que está el recurso ejecutándose.

pcs resource move DRBDfsASTER

Esto crea restricciones locales para evitar que el recurso vuelva a este nodo (Puede tener prioridad de ejecución en este nodo y haría que volviera a este nodo automáticamente al estar online).

La restricción que crea banea el nodo para este recurso, si queremos quitar la restricción creada.

pcs resource clear DRBDFsAst



5.2.2.4 Instalación y configuración del Cluster hasta la versión VIVAit 3.3

.


Hasta la versión 3.3 de VIVAit , la instalación y configuración del cluster se hace de la siguiente forma:


Instalación y configuración del Cluster hasta la versión VIVAit 3.3




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

Enlace Exterior.png

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:


Ejemplo no conexion.png



5.4 Grabación



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


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


Ejemplo activacion grabacion en nodo CORP-2.jpg



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.



NODO ACD-2.jpg


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.


MODO DE GRABACION EN CAMPAÑA-2.jpg



El formulario de VIVAit Desk que se abra cuando entre la llamada que queremos grabar ha de tener los botones de grabación.


Ejemplo de formulario con botones de grabacion.jpg


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:


Cap 1.jpg


Además indicamos en el modo de grabación: Grabación bajo demanda inicio sin grabar.


Cap 2.jpg


En la consola vemos los siguientes datos:


Cap 3.jpg

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

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

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

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

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

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



Volver al índice

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

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

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

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



Volver al índice

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

Captura de pantalla de 2016-07-21 12 43 58.png


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)



Volver al índice

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

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





6 puntos a reasignar

6.1 Servidor de grabación

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



Volver al índice

6.2 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”.

6.2.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 PDF
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=


6.2.2 Resumen de significado de columnas en reporting histórico

Esta información se puede consultar en el siguiente enlace:

http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Documentacion_de_usuario_VIVAit_Suite_3.3#Resumen_del_valor_de_las_columnas_que_aparecen_en_los_informes


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




Volver al índice


6.3 TBC (Translation by Chat)

La funcionalidad permite que dos interlocutores (a los que llamaremos “extranjero” y “agente”) puedan interactuar en una llamada telefónica independientemente del idioma en el que se expresen.

6.3.1 Requerimientos de usuario

Desde el punto de vista de usuario los requerimientos serán:

• Extranjero: Cualquier tipo de terminal telefónico (de VIVAit Call o externo) alcanzando un usuario de VIVAit Call;

• Agente: Usuario de VIVAit Call, con terminal telefónico en VIVAit Call y portal de usuario; el entorno más unificado se consigue si el terminal telefónico es Web Call


6.3.2 Funcionamiento a nivel de usuario

1. Llamadas entrantes a grupos o servicios con traducción activada por defecto: En estos casos el agente no tendrá que hacer nada y la llamada dispondrá de servicio de traducción; es típico en grupos ACD


2. Llamadas salientes realizadas por el agente a un extranjero: En tal caso el agente realizará la llamada anteponiendo la facilidad *14# (ejemplo *14#3140) o la configurada a tal efecto en cada instalación


3. Llamadas establecidas para las que se desea activar TBC:

a.	En el caso de Web Call el agente dispondrá de un botón en el control de llamada que le servirá para activar TBC; la activación pasa por una autotransferencia directa de la llamada
b.	En el caso de otros terminales el usuario deberá realizar una transferencia directa a si mismo (se usa para ello llamada a  *14*)


El funcionamiento general una vez establecida una llamada con servicio TBC será:


• El extranjero habla en su idioma y escucha audios en su idioma; como se ha indicado anteriormente, en el lado del extranjero no es necesario ninguna herramienta adicional al terminal telefónico, que podrá ser interno o externo a VIVAit Call


El agente

Para la recepción:

•	Escucha el audio del extranjero (en el terminal)
•	Lee el texto transcrito en el idioma del extranjero
•	Lee el texto traducido en el idioma del agente


Para la emisión:

•	Escribe en su idioma
•	Lee el texto traducido al idioma del extranjero
•	Tiene opción de reproducir el audio que ha escuchado el extranjero



6.3.3 Funcionamiento a nivel de VIVAit Call

A nivel de VIVAit Call, los elementos principales involucrados en el servicio son:

• mdtap: Con sus componentes chan_mdtap e intz_tap se encargará de:

chan_mdtap:

•	Captura el audio
•	Reenvía a intz_tap
•	El audio pasa al otro extremo


intz_tap:

Para speech to text

•	Invoca al servicio de conversión de audio a texto configurado y lo envía
•	Recibe el texto y otros datos y los inserta en BDTR


Para text to speech

•	Periodicamente (polling) comprueba si hay mensajes de tipo de contenido audio
•	Recupera la URL
•	Invoca al servicio de conversión de texto a audio configurado y lo envía
•	Recibe el audio y lo inserta en la conversación en sustitución del audio del agente


Portal de usuario/Web Call

•      Cuando se abre pestaña de TBC sincroniza mensajes https://172.25.128.253/Vivait-FonBO/api/recuperarId
 •     Periodicamente (polling) pide nuevos mensajes de TBC del extranjero a FonBO https://172.25.128.253/Vivait-FonBO/api/listaMensajesUsuario?lastId=85&idioma=es
•     Envía mensajes de texto a FonBO https://wwv.mdtel.es/Vivait-FonBO/api/insertaMensaje?hayTraduccion=true&idiomaDestino=fr


FonBO:

•	Responde a polling de Portal de usuario/Web Call
•	Envía mensajes a traducir al servicio de traducción texto a texto, solo si el idioma del agente (configurado) y el idioma del extranjero (típicamente detectado) son diferentes; lo realiza para las traducciones en ambos sentidos
•	Recibe mensajes traducidos y los inserta en BDTR
•	Envía mensajes de texto al servicio de Text to Speech
•	Recibe el audio, lo almacena e inserta en BDTR (una URL)


6.3.4 Puesta en marcha

Para disponer de la funcionalidad será necesario disponer de:


• Base de datos actualizada con tabla DAT_MENSAJES_IA y COM_USUARIOS

• Fonbo versión xxxx

• Web Call versión 2.0.0 (para esta funcionalidad, esta versión de Web Call requerirá otros cambios en BBDD por otras funcionalidades implementadas)

• Chan_mdtap e Intz_Tap funcionando


La configuración cargada por defecto en el sistema permite la activación con mucha facilidad de las funciones de:


• Casuística 1: Llamadas salientes realizadas por el agente a un extranjero; el agente marcará *14#num_Destino


Tbc1.PNG


Es la facilidad con E_CODIGO_FACILIDAD = 800 (transcripción de número de teléfono).


Tbc2.PNG


La numeración está definida por prerutas, una por categoría


Tbc3.PNG



• Casuística 2: Llamadas establecidas para las que se desea activar TBC; el agente pulsará el botón de “traducción simultánea”

Tbc4.PNG




6.4 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.4.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.4.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.4.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.4.3 Secciones de utilidad en nimitz.ini



6.4.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.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.4.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.4.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

6.5 Integraciones con servicios externos




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

Página proyecto openfire

Página proyecto "asterisk IM"


6.5.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]


6.5.3 Integración de portal usuario de VIVAit Call Web Microsoft Teams




La integración de VIVAit Call Web con MS Teams se realiza en tres pasos; dos de ellos han de ser realizados íntegramente por el cliente puesto que requieren realizar modificaciones en su entorno de gestión de Microsoft Azure y Teams.


Teams-esquema.png


A continuación se muestra que debe hacer el administrador de Teams y de Mdtel para la integración con Ms Teams , los pasos consisten en:

Responsable Pasos
Administrador de Teams y Mdtel Generar el archivo .zip con todos los elementos requeridos para una integrar una nueva aplicación en MS Teams. Este archivo .zip es diferente para cada cliente de VIVAit Call Web y tiene que ser generado para cada caso


PASOS:

Generar archivo ZIP con todos los elementos

El paso ha de ser realizado por un administrador de Teams y mdtel

Debemos disponer de los valores :

  • AAD_APLICACION_ID
  • AAD_CLAVE_EXPIRA
  • AAD_CLAVE_VALOR
  • AAD_CLAVE_ID


Estos datos serán proporcionados a mdtel, que generará un archivo ZIP

VIVAit-call-web-empresa-vivait-manifest.zip


Para crear este archivo .zip, se parte de un zip base en el que modifican los valores que se indican de manifest.json :


  • staticTabs.contentUrl (debe apuntar a la web específica del cliente).
  • validDomains (lista de dominios a los que se permite acceder: el dominio de la web del cliente).
  • webApplicationInfo.id <AAD_APLICACION_ID>
  • webApplicationInfo.resource <AAD_URL_APLICACION_ID>


También con estos valores debe modificarse la configuración de serCen:


  • ws_implementacion.aad_app_client_id = <AAD_APLICACION_ID>
  • ws_implementacion.aad_app_client_secret_cifrado = <AAD_CLAVE_VALOR> (CIFRADO)
  • ws_implementacion.aad_app_secret_expire = <AAD_CLAVE_EXPIRA>


1- A partir de aquí, interviene un administrador de MS Teams.


Acceder a: https://admin.teams.microsoft.com


Teams-wiki.png



2- Pulsar en “Administrar aplicaciones” y “Cargar”, donde se subirá el archivo que habremos creado con los datos obtenidos en Azure Active Directory:

                               VIVAit-call-web-empresa-vivait-manifest.zip


Integración de portal usuario de VIVAit Call Web Microsoft Teams desde el cliente

A continuación se muestran los pasos que han de ser realizados íntegramente por el cliente puesto que requieren realizar modificaciones en su entorno de gestión de Microsoft Azure y Teams , los pasos consisten en:


Responsable Pasos
Administrador Azure Configurar en Azure AD para que reconozca a VIVAit Call Web. Es el paso más complejo
Usuario Incorporación de la nueva aplicación en Microsoft Teams


Paso 1: Configurar en Azure AD

El proceso de configuración en Azure AD es, como se ha indicado anteriormente, el más complejo. Ha de ser realizado íntegramente por un administrador de Azure


Las acciones a realizar son:


  • Administrar Azure Active Directory / Registros de aplicaciones / Nuevo registro



Teams-ad1.png



  • Rellenamos el nombre de la aplicación. La cadena “empresa” debesustituirse por un acrónimo de la empresa que estamos integrando. No debe rellenarse el campo “URI de redirección”


Teams-ad2.png



  • Al pulsar en “Registrar”, almacenamos el valor que aparece en “Id de aplicación (cliente)” con la etiqueta <AAD_APLICACION_ID>, porque será necesario en pasos posteriores


Teams-ad3.png


  • Entramos en "Agregar un certificado o secreto"


Teams-ad4.png


  • Pulsamos en “Nuevo secreto de cliente” y:

o En Descripción, rellenamos: Clave de acceso

o En expira: 24 mesesPulsamos el botón “Agregar” y obtenemos:


Teams-ad5.png


Es necesario tomar nota para pasos posteriores de los siguientes datos:


Datos Descripción
Expira Es la fecha en la que expirará la clave creada y será necesario repetir este proceso. Conviene que el periodo de validez sea lo más grande posible y, por ello, al agregar indicamos un periodo de 24 meses. El valor lo almacenamos con la etiqueta

<AAD_CLAVE_EXPIRA>.

Valor Es el valor de la clave o secreto. Hay que obtenerlo obligatoriamente copiando y pegando porque lo que se ve es incompleto. El valor lo almacenamos con la etiqueta <AAD_CLAVE_VALOR>.
Id de Secreto Es el identificador de la clave o secreto. Hay que obtenerlo obligatoriamente copiando y pegando porque lo que se ve es incompleto. El valor lo almacenamos con la etiqueta <AAD_CLAVE_ID>.


  • Entramos en "Exponer un API"


  • Pulsamos en “Agregar un ámbito”


  • Rellenamos “URI de id. de la aplicación”:

- Propuesto por defecto: api://bfe5e58a-c1d5-4736-8996-0d6b29346d6b

- Rellenado :api://empresa.vivait.es/bfe5e58a-c1d5-4736-8996-0d6b29346d6b


La cadena “bfe5e58a-c1d5-4736-8996-0d6b29346d6b” se incluye a modo de ejemplo, debiendo ser rellenada por el id de aplicación obtenido para el caso




Teams-ad6.png


  • Pulsamos “Guardar y continuar”



  • Pulsamos botón “Agregar ámbito”. Nos aseguramos que el estado del ámbito es “Habilitado”


Teams-ad7.png



Teams-ad8.png


-Ahora tenemos que pulsar “Agregar una aplicación cliente”

-Rellenamos “Id. de cliente”:(por ejemplo) 1fec8e78-bce4-4aaf-ab1b-5451cc387264

-Activamos el check del ámbito

-Pulsamos el botón “Agregar aplicación”

Teams-ad9.png


Con esto, autorizamos a “Teams mobile” y a la aplicación Teams de escritorio


-Es necesario repetir lo mismo con “Id. de cliente”: (por ejemplo) 5e3ce6c0-2b1f-4285-8d4b-75ee78787346. Con ello se autoriza a la aplicación web de Teams

-El resultado será similar a la siguiente ilustración:



Teams-ad10.png


-Entramos en "Permisos de API" y pulsamos en “Agregar un premiso”

-Pulsamos en “Microsoft Graph”


Teams-ad11.png



Teams-ad12.png


-Añadimos “profile” y pulsamos botón “Agregar permisos”


Teams-ad13.png


-Debe quedar:


Teams-ad14.png


-Ahora pulsamos en “Conceder consentimiento de administrador para ...”



Teams-ad15.png




-Ahora pulsamos en “Conceder consentimiento de administrador para ...”



Teams-ad16.png


-Pulsamos en “Sí” y nos debe quedar


Teams-ad17.png


Con estos pasos, finaliza la configuración de la aplicación en Azure Active Directory.



Paso 2: Incorporación de la nueva aplicación en Microsoft Teams


El paso 2 será realizado por cada usuario


A partir de ese momento, los usuarios de Microsoft Teams pueden incorporar la aplicación en: https://teams.microsoft.com



Teams-ad18.png

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


6.6.1 Arquitectura




ArquitecturaPP.jpg


En el siguiente equema se muestan los módulos que intervienen en el Marcador Predictivo:


ArquitecturaMODULOS.jpg

6.6.2 ¿Como funciona un marcador predictivo?



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

  1. El número de agentes presentes no pausados → define la capacidad existente de cursar tráfico saliente.
  2. 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.
  3. 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.

6.6.3 Modelos de marcación predictivos



Básicamente existen cuatro modelos de marcación:

  1. 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.
  2. 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.
  3. SOLO SALIENTE: Los agentes están logados en una sola cola de saliente predictivo, todos con la misma prioridad.
  4. 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:

  1. Divisor planificables → Ratio entre planificables y planificados
  2. 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.

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

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

6.6.6 Nuevas tablas




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

Esquema marcador.jpeg


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

Modelo Mezcla.jpg

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

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

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


6.7 Canales digitales en VIVAit Suite

Se incluye enlace a documentación en formato .pdf a canales digitales, actualmente correo electrónico

Documentación canal correo electrónico




Volver al índice


La arquitectura general de VIVAit Suite para canales digitales es la reflejada a continuación



Mcan1.png


Los componentes reflejados en verde en el esquema de la arquitectura son componentes externos a VIVAit Suite.

Los elementos principales que aparecen en la arquitectura de VIVAit Suite para la implementación de canales digitales serán:


  • Plataforma: Tipo de comunicación concreta que estableceremos; actualmente las posibilidades son:


- Tareas

- Correo

- Whatsapp

- Telegram


  • Proveedor: Identifica el servicio a través del cual podremos acceder a las plataformas; actualmente son:


-VIVAit: El acceso a la plataforma se realiza directamente con tecnología VIVAit

-Messagebird: Proveedor de accesos a servicios como Whatsapp y Telegram (VIVAit no puede conectarse directamente a estos servicios por política de estas empresas)


  • VIVAit Mcan: Nuevo demonio de multicanalidad que hace el tratamiento específico de los canales digitales


  • Bot: En los nuevos canales digitales, una conversación podrá ser tratada previamente por un elemento automático (bot) que automatice acciones o enrute en base a diferentes parámetros.


  • Chan_sit: Módulo de asterisk desarrollado por mdtel que permite insertar una interacción digital como una llamada más dentro del sistema; es el elemento que inserta "llamadas" que no son son de voz dentro de asterisk


  • Mqtt: Protocolo de intercambio de mensajes entre MCan y resto de VIVAit Suite (Chat_Sit y VIVAit Cti). VIVAit Suite prevé la instalación de un servidor Mqtt en su infraestructura


  • Tomcat: Los agentes dispondrán de un complemento web en la barra de agente; la parte de servidor de dicho complemento residirá en un Tomcat


  • Formdesk: Formulario específico de VIVA desk para tratamiento de correo; será muy habitual iniciarlo minimizado


  • Mailform: Complemento web de formdesk que presenta al agente toda la gestión del correo recibido; se podría entender que sustituye al formulario de VIVA desk


El canal correo abre un formulario “de desk” que no es el que maneja el correo
El canal correo electrónico también utiliza formulario web en agente


Otros conceptos relevantes que aparecen en la arquitectura son:


  • Conversaciones: De la misma manera que existen conversaciones en voz, existirán conversaciones en canales digitales, incluso en el canal correo electrónico.

Una conversación vendrá definida por:

- Un origen

- Un destino

- No se ha producido cierre ó

- No se ha vencido el tiempo de salvaguarda


Los canales digitales utilizan el concepto de conversación, con un inicio y un final


6.8 Principales elementos funcionales

6.8.1 Mcan

Mcan es un demonio desarrollado por mdtel e integrado en la arquitectura deVIVAit Suite que permite la integración de canales digitales diferentes de la voz dentro del sistema.

Así pues, mcan :


  • Detecta la existencia de interacciones digitales que han de entrar a VIVAit Suite


  • Proporciona un mecanismo de encolamiento previo (la terminología “cola previa” será ampliamente utilizada), que maneja la posibilidad de que existan un número muy alto de interacciones digitales que no habrán de estar en “cola asterisk” directamente (imaginemos un buzón de correo electrónico al que le entra Spam)


  • Proporciona mecanismos de automatización de tratamiento:

- Mensajes de bienvenida

- Mensajes de paciencia

- Bots


  • Entrega interacciones cercanas a su tratamiento en el tiempo a asterisk (vía el módulo chan_sit) para ser encoladas


mcan proporciona control de flujo, implementa cola previa


6.8.1.1 Diagnósticos y comprobaciones mcan

Comprobación de estado

Para comprobar si mcan está activo ejecutaremos el comando:


/etc/init.d/vivait-mcan status


el resultado esperado será:

vivait-mcan is running


Diagnósticos básicos


Para visualizar los diagnósticos básicos de mcan ejecutaremos el comando:

nc localhost 1124


Dicho comando nos mostrará las estadísticas más importantes sobre el funcionamiento del demonio mcan


Mcan2.png


Trazas


Las trazas de mcan son almacenadas en el fichero /var/log/vivait-mcan.log


Mcan3.png



Fichero de configuración


El fichero vivait-mcan.conf está ubicando en /etc/MDtel



6.8.2 Entorno de agente

Para los canales digitales (centraremos ejemplos y casos en interacciones de correo electrónico), la experiencia de agente se verá potenciada con el uso de nuevas herramientas

Recordemos que en el caso de interacciones digitales, el agente tendrá configurada una capacidad que le permitirá poder atender más de una interacción simultáneamente (de voz solo una), consumiendo cada interacción entrante un esfuerzo (la voz consume todo). Una vez sobrepasado el esfuerzo máximo no entrarán más interacciones al agente


Las herramientas del agente para los entornos de canales digitales serán:

  • Formulario específico de VIVA desk de canal digital, que no solo estará adaptado a las realidades de ese canal (por ejemplo deberá presentar ventana de chat), sino que podrá invocar a herramientas específicas que potencien la experiencia de agente.
  • Formulario externo (pero perteneciente a VIVA it Suite) de canal digital, que permitirá al agente gestionar la interacción completa (ignorando incluso el formulario de VIVA desk)


Por ejemplo, para el canal correo existe un formulario externo específico, basado en web y denominado mailform, cuyo aspecto se muestra a continuación


Mcan4.png



Este formulario web está integrado a nivel CTI con VIVA it Suite, por lo que las acciones que se realicen influyen en el funcionamiento el sistema; por ejemplo si el agente transfiere pasará a estar disponible en VIVA desk


Si bien en este momento no vamos a documentar completamente mailform, si indicaremos sus principales funciones:


  • Se abre a la entrada de una interacción en el agente
  • El agente dispone a la izquierda de un histórico de interacciones de correo con el cliente


Mcan5.png


  • El agente puede realizar acciones de responder, transferir, aparcar, cerrar


Mcan6.png


Si el agente responde dispondrá de plantillas y un entorno de edición de email (Se adjunta imagen)


Mcan7.png


Desde un punto de vista técnico, aparece un nuevo entorno de definición del funcionamiento de ciertos parámetros asociados al agente, que se configurarán en un fichero “.ini” cuyo nombre coincidirá con el ejecutable del VIVA Desk


Mcan8.png


El contenido de ese fichero “.ini” nos permitirá configurar cosas tales como (se adjuntan ejemplos de interacciones de correo):

  • Mailform se abrirá sin posibilidad de respnder
  • Mailform permitirá introducción de texto libre en respuestas
  • Mailform se abre automáticamente a la vez que el formulario VIVA desk
  • Ubicación de mailform (url)
  • Formulario VIVA Desk se iconiza automáticamente


Mcan9.png


6.8.3 Otras funcionalidades en agente

Otras funcionalidades típicas que un agente podrá realizar son:


  • Estando en llamada telefónica poder enviar un correo electrónico. Requiere realizar un formulario personalizado (o añadir la funcionalidad a uno existente)


  • Estando en llamada telefónica poder consultar el histórico de correos electrónicos de un cliente. Requiere realizar un formulario personalizado (o añadir la funcionalidad a uno existente)


  • Acceder al entorno de dashboards de supervisor web con permisos muy controlados sobre que puede ver y que puede modificar; un ejemplo típico de uso es disponer de un dashboard que le permita ver correos que ha aparcado para desaparcarla; otro ejemplo es poder ver correos en cola previa para tratarlos (porque por ejemplo estoy hablando con el cliente sobre un correo que ha mandado)



6.9 Funcionamiento típico

Un flujo típico de funcionamiento sería (se utiliza canal tipo correo electrónico como ejemplo):


1.Un cliente manda un correo electrónico a un servicio (por ejemplo atención al cliente)

2. El correo electrónico entra en el buzón del servidor de correo electrónico

3. Mcan

  • a. detecta la existencia del correo electrónico (realiza polling periódico)
  • b. copia el correo (.eml) al repositorio interno de VIVA it Suite

4. Si existe bot, se pasan las reglas del bot para obtener el grupo ACD destino

5. La interacción pasa a cola previa, siendo mcan el responsable de su cambio de estado

6. Cuando se dan las condiciones (típicamente el algoritmo correspondiente determina que en poco tiempo el correo será tratado por agente) mcan entrega la interacción a Chan_Sit, que lo encola "en asterisk"

7. Cuando se asigna la interacción a agente

- a. Se abre el formulario de correo en VIVA desk

- b. Se abre mailform (web); la interacción se realizará típicamente desde este formulario

8. Si el agente

- a. realiza determinadas acciones (transferir, aparcar…) la interacción vuelve a mcan a cola previa

- b. Si termina la interacción o la aparca, quedará disponible (o recuperará capacidad al liberar esfuerzo)


  • VIVA it mcan monitoriza constantemente un canal. En función del tipo de canal está monitorización podrá ser por “polling” o por otras tecnologías (p. ej. Webhooks)


  • Cuando existe un nuevo mensaje en el canal, VIVA it mcan determina si dicho mensaje pertenece a una conversación existente o constituye una nueva conversación. Los criterios para determinarlo son:


- Si existen mensajes con mismo origen y destino previos, que constituyeron una conversación y esta no se ha cerrado (por ejemplo, el agente no la ha cerrado), el nuevo mensaje es parte de la misma conversación


- Si existen mensajes con mismo origen y destino previos, que constituyeron una conversación y esta se ha cerrado, si no se ha vencido el tiempo de salvaguarda se sigue considerando parte de la misma conversación



6.10 Bots

Los bots residen junto a mcan (misma máquina), en la carpeta /var/lib/vivait-mcan/scripts


Cada bot creado y su revisión correspondiente en esa carpeta


Mcan12.png


El nombre del fichero de cada bot contiene información importante que se relaciona con la configuración del canal correspondiente

  • Nombre de bot (por ejemplo en la imagen anterior botEmailEnrutarAsunto
  • Revisión del bot (por ejemplo en la imagen anterior 00000


Así, un canal ejecutará un bot y una revisión configurada, que corresponderá con el nombre fichero cuyo nombre bot y número de revisión sea la misma. Cuando un bot está en modo prueba entonces usará siempre y solo la revisión 00000.



6.10.1 Funcionamiento de bots

Como se ha indicado anteriormente, un canal creado en VIVA it Suite puede llevar asociado un bot que automatiza las acciones previas a su paso a cola previa

Si bien se pueden desarrollar bots a medida de necesidades de cliente, por defecto el sistema dispone de dos tipos de bot creados para interacciones de tipo correo electrónico(considérense plantillas para crear cada bot de cada servicio) que permiten:

  • Enrutar una interacción en base a asunto
  • Enrutar una interacción en base a horario


Los bots automatizan tratamientos
Por defecto tenemos plantillas para email, enrutar en base a asunto o horario



Los bots son manejados en pseudocódigo basado en Python; su uso está previsto para ser realizado por parte de personal muy concreto, no necesariamente técnico.


Los bots manejan un sistema de versiones y prueba que nos permitirán:

  • Definir si un bot está en modo prueba o en modo producción
  • Definir que versión de bot deseamos pasar a producción


En general este proceso se basará en el número de revisión configurado en VIVA it Suite para un bot, que coincidirá con parte del nombre del fichero de bot



6.10.2 Modificaciones en bots

El aspecto del pseudocódigo de un bot es (la siguiente figura muestra el pseudocódigo donde se configura el enrutamiento en base a asunto del bot botEmailEnrutarAsunto


Mcan13.png


Como se puede intuir, en el ejemplo anterior en base a expresiones regulares contenidas en el campo asunto de un correo electrónico podremos definir con facilidad el grupo ACD hacia el que se dirigirá una interacción y con que prioridad entrará.

Los cambios realizados en un bot se aplicarán sin necesidad de reinicio alguno para siguientes interaciones entrantes.

Es especialmente relevante el uso de una identación adecuada; el pseudocódigo basado en Python tiene en cuenta las identaciones como parte de la estructura del código; se recomienda usar (como se ve en la figura anterior) una herramienta de edición que facilite la visualización de caracteres especiales, tales como espacios, tabuladores y retornos de carro. En la imagen anterior se ha utilizado como herramienta de edición:


  • Notepad++
  • Opciones de view/show symbols activadas según imagen a continuación


Mcan14.png


Las identificaciones son MUY importantes en el pseudocódigo de los bots

Se recomienda que cualquier cambio que se realice en un bot en producción genere una nueva versión (no modificar la versión existente), lo cual implica:


  • Crear un nuevo fichero con versión incrementada
  • Modificar dicho fichero
  • Cambiar en la configuración de VIVA it Suite la versión


Utilizar la gestión de versiones de bot



6.10.3 Herramienta de prueba de bots

Con la herramienta “vivait-mcan-bot-test” podemos probar bots

En el ejemplo siguiente probaremos el bot “botEmailPPHglobal” en su versión 2


Mcan15.png


Una vez dentro si tecleamos el mensaje que entra en el caso del correo (valor por defecto) será el asunto


Mcan16.png


En ese ejemplo vemos que como hemos enviado un correo con asunto que contiene “cancel” le ha asignado prioridad 2


6.11 Canal

La creación de un canal facilita la comunicación entre VIVA it Suite y los elementos de omunicación externos; típicamente un canal será:


  • Un buzón de correo electrónico que será tratado desde VIVA it Suite
  • Una cuenta de Whatsapp que será tratada desde VIVA it Suite
  • Una cuenta de Telegram que será tratada desde VIVA it Suite


6.11.1 Configuración plataforma mail

Típicamente cada buzón del cliente que vayamos a monitorizar será un canal

Es recomendable pedir al cliente que no nos conectemos al buzón original, sino a un buzón espejo que ellos creen, al que se copian todos los correos y de esta manera nosotros manejamos el buzón espejo y ellos siguen gestionando el original, asegurando que ellos puedan tener siempre la info original


Fundamentalmente configuraremos:

  • Protocolo y credenciales de lectura de buzón para comprobar correos nuevos
  • Protocolo y credenciales de envío de mensajes
  • Temporizadores
  • Acciones auxiliares (por ejemplo si tras leer un mensaje lo borramos de la bandeja de entrada del buzón de correo)



6.11.2 Herramienta de prueba de conexión a cuenta de correo de cliente

Existe un script “enviar.sh” que nos ayuda a determinar con una herramienta externa a VIVA it Suite si la conexión con el servidor de correo está funcionando


Dentro del script se meten todas la credenciales, y se le llama con /root/scripts/enviar.sh


6.11.3 Conexión a proveedor Messagebird

A efectos, mcan sería como montar un servidor web con HTTPS. Mcan (dentro de la red del cliente) ha de ser visto desde messagebird (en internet)

No es necesario consumir ni una IP completa ni siquiera un puerto completo, basta con que llegue a mcan un “trozo de URL” en un puerto de una IP


Típicamente existirá un proxy inverso delante que

  • termina el túnel (descifra)
  • deriva URL hacia mcan
  • tiene que tener una IP publica fija
  • un DNS válido
  • un certificado asociado


Este proxy inverso debiera ser parte de la arquitectura de seguridad del cliente; si el cliente no lo tiene podemos ponerlo nosotros



6.12 Desk

VIVA Desk contiene integrados las clases necesarias que invocarán (creando el formulario en VIVA it Call) a los formularios web correspondientes:

  • TfrmEmail
  • TfrmCHAT

VIVA Desk tendrá asociado un fichero “.ini” con el mismo nombre que el “.exe” del desk (típicamente “vivait-desk.ini”)

Los parámetros principales a manejar están dentro de la sección [Email] y serán:


Parámetro Descripción
url_solo_visor=0 El formulario de correo web se abrirá sin posibilidad de modificar
url_texto_libre=1 El formulario de correo web solo permitirá cargar plantillas en la confección de correos
url_webcorreo_auto=1 El formulario de correo web se abre automáticamente
url_webchat_auto=1 El formulario de chat web se abre automáticamente
url_webcorreo=http://172.25.128.100:8180/mailForm/correo/VerCorreo Ubicación del formulario de correo web
url_webchat=http://172.25.128.100:8180/chatForm/chatForm/view Ubicación del formulario de chat web
form_iconizar=0 EL formulario web se abre minimizado




6.13 Configuraciones de procesos internos

6.13.1 Mcan

Ubicado en /etc/MDtel/vivait-mcan.conf

En el fichero /etc/host hay que meter la IP del MQTTHOST al que se hace referencia en este fichero

Es necesario configurar el ID que tiene este no do en la BBDD (campo nodo_id)

Por lo demás este fichero solo contiene configuraciones de “ajuste fino”


6.13.2 Chan_sit

Chan_sit reside en el nodo ACD


La configuración de Chan_sit está en /etc/asterisk/chan_sit.conf


Existen configuraciones específicas para [mcan_email] y [mcan_chat] en las que lo relevante es configurar la IP de la maquina en la que reside mcan



6.14 Comprobaciones

6.14.1 Estados de las llamadas

TMCAestado= (
   mcaEstado_Fin= 0,
   mcaEstado_Llamando= 10,
   mcaEstado_Ring= 20, -> EN COLA ASTERISK
   mcaEstado_Agente= 30,
   mcaEstado_Reserva= 40,
   mcaEstado_Transfiriendo= 50,
   mcaEstado_colaPrevia= 100,
   mcaEstado_Aparcado= 200,
   mcaEstado_Bot= 300
 ); // 10100


6.14.2 Total de correos pendientes de tratar

El total de correos pendientes de tratar en un sistema serán la suma de:


  • Correos que estén en el buzón aún no leidos por VIVA it Suite; hay que tener en cuenta que VIVA it Suite tiene un control de flujo en mcan y no lee siempre todos los correos del buzón
  • Correos que estén en cola previa (estado 100) y que serán visualizados desde supervisor web
  • Correos que estén en cola asterisk (estado 20) y que serán visualizados desde



6.14.3 Ubicación de los correos

Los correos quedan ubicados en /var/lib/vivait-mcan/eml