Diferencia entre revisiones de «Manual de operación 2»

De VIVAitwiki
Ir a la navegaciónIr a la búsqueda
 
(No se muestran 310 ediciones intermedias del mismo usuario)
Línea 679: Línea 679:
 
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 
<br><br>
 
<br><br>
 +
 
==== Interfuncionalidad FlexiSIP - Asterisk ====
 
==== Interfuncionalidad FlexiSIP - Asterisk ====
 
<br><br>
 
<br><br>
Línea 828: Línea 829:
 
: - Muchas comunicaciones entre procesos se realizan vía BBDD.<br>
 
: - Muchas comunicaciones entre procesos se realizan vía BBDD.<br>
 
Pueden existir distintas instancias de base de datos que se explican en las siguientes secciones.<br>
 
Pueden existir distintas instancias de base de datos que se explican en las siguientes secciones.<br>
La base de datos de '''''VIVA'''it'' tiene la siguiente estructura: [[Base de datos|Información completa de la BD]].<br>
+
La base de datos de '''''VIVA'''it'' se llama ''nimit'' y está estructura en tablas. Estas tablas se puede consultar en la [[Base de datos|descripción completa de la BD]].<br>
Se puede ampliar más información en https://dev.mysql.com/doc/
+
Se puede ampliar más información en la página de [https://dev.mysql.com/doc/refman/8.0/en/ documentación mysql]
 
<br><br>
 
<br><br>
 
==== BBDD Tiempo Real (DBTR) ====
 
==== BBDD Tiempo Real (DBTR) ====
Línea 901: Línea 902:
 
El proceso '''bdCentral.sh''' es el encargado de realizar la copia de seguridad. Se ejecuta en los nodos en los que se desea tener un backup de la BDTR.<br>
 
El proceso '''bdCentral.sh''' es el encargado de realizar la copia de seguridad. Se ejecuta en los nodos en los que se desea tener un backup de la BDTR.<br>
 
Tiene un archivo de configuración ''bdCentral.conf'' en la ruta ''/etc/MDtel/bdCentral.conf''. En este archivo hay un parámetro (IGNORE_TABLAS) que indica las tablas de la DBTR de las que NO se realizará copia de seguridad. Toda tabla que no se indique formará parte de la copia de seguridad. <br>
 
Tiene un archivo de configuración ''bdCentral.conf'' en la ruta ''/etc/MDtel/bdCentral.conf''. En este archivo hay un parámetro (IGNORE_TABLAS) que indica las tablas de la DBTR de las que NO se realizará copia de seguridad. Toda tabla que no se indique formará parte de la copia de seguridad. <br>
Vuelca los resultados en:
+
Se puede seguir la ejecución del proceso consultando el fichero:
 
           /var/log/bdCentral.log<br>
 
           /var/log/bdCentral.log<br>
En caso de producirse algún error, se marcará dicho error en el log con una línea que comienza con la cadena "*ERROR".<br>
+
En caso de producirse algún error, se marcará dicho error en el fichero .log con una línea que comienza con la cadena "*ERROR".<br>
 
<br><br>
 
<br><br>
♦ '''EJECUCIÓN DEL PROCESO'''
+
♦ '''EJECUCIÓN DEL PROCESO bdCentral'''
 
<br><br>
 
<br><br>
 
Este proceso se puede ejecutar de dos formas diferentes:
 
Este proceso se puede ejecutar de dos formas diferentes:
Línea 914: Línea 915:
 
: en los nodos en los que se desea tener un backup de la BDTR.
 
: en los nodos en los que se desea tener un backup de la BDTR.
 
<br><br>
 
<br><br>
♦ '''FICHEROS LOG'''
+
♦ '''FICHEROS LOG de bdCentral'''
 
<br><br>
 
<br><br>
 
Para que se roten los logs hay que copiar el fichero ''bdCentral.logrotate'' a:
 
Para que se roten los logs hay que copiar el fichero ''bdCentral.logrotate'' a:
           /etc/logrotate.d<br>
+
           /etc/logrotate.d/<br>
 
renombrándolo como ''bdCentral''.<br>
 
renombrándolo como ''bdCentral''.<br>
El contenido del fichero dbCentral es similar a este:<br>
+
El contenido del fichero bdCentral es similar a este:<br>
 +
 
 +
  root@preproduccioncorp0:/# cat /etc/logrotate.d/bdCentral
 
   /var/log/bdCentral.log {
 
   /var/log/bdCentral.log {
 
       daily
 
       daily
Línea 926: Línea 929:
 
       compress
 
       compress
 
       copytruncate
 
       copytruncate
    }
+
  }
 +
 
 +
root@preproduccioncorp0:/#
 
<br>
 
<br>
Esta configuración hará que el fichero log rote diariamente, se comprima y se conserve durante un máximo de 31 días. Si el archivo de registro no existe, se creará sin generar ningún error.<br>
+
La explicación de este fichero es la siguiente:<br>
La ruta donde se encuentra ''bdCentral.log'' es la siguiente:<br>
+
: - Esta configuración hará que el fichero log rote diariamente (''daily''),<br>
          /var/log/
+
: . se comprima (''compress''),<br>
 +
: - realiza una copia del fichero original y luego vacía el fichero para que los procesos que estaban trabajando con ese fichero puedan seguir haciéndolo a pesar de la rotación, (copytruncate),
 +
: - se conserve durante un máximo de 31 días (''rotate 31''),<br>
 +
: - si el archivo de registro no existe, se creará sin generar ningún error (''missingok'').<br>
 +
: - indicando la ruta donde se almacenará ''bdCentral.log'' (''/var/log/'').
 
<br><br>
 
<br><br>
♦ '''FICHERO DE CONFIGURACIÓN'''
+
♦ '''FICHERO DE CONFIGURACIÓN de bdCentral'''
 
<br><br>
 
<br><br>
 
Por defecto la programación vienen comentada por lo que será necesario activarla.<br>
 
Por defecto la programación vienen comentada por lo que será necesario activarla.<br>
Línea 994: Línea 1003:
 
En caso de producirse algún error, se marcará dicho error en el log con una línea que comienza con la cadena "*ERROR".
 
En caso de producirse algún error, se marcará dicho error en el log con una línea que comienza con la cadena "*ERROR".
 
<br><br>
 
<br><br>
♦ '''EJECUCIÓN DEL PROCESO'''
+
♦ '''EJECUCIÓN DEL PROCESO bdNodo'''
 
<br><br>
 
<br><br>
 
Este proceso se puede ejecutar de dos formas diferentes:
 
Este proceso se puede ejecutar de dos formas diferentes:
Línea 1003: Línea 1012:
 
: en cada servidor en el que se desee una DBCOPIA .
 
: en cada servidor en el que se desee una DBCOPIA .
 
<br><br>
 
<br><br>
♦ '''FICHEROS LOG'''
+
♦ '''FICHEROS LOG de bdNodo'''
 
<br><br>
 
<br><br>
 
Para que se roten los logs hay que copiar el fichero ''bdNodo.logrotate'' a:
 
Para que se roten los logs hay que copiar el fichero ''bdNodo.logrotate'' a:
           /etc/logrotate.d<br>
+
           /etc/logrotate.d/<br>
 
renombrándolo como ''bdNodo''.<br>
 
renombrándolo como ''bdNodo''.<br>
 
El contenido del fichero ''/etc/logrotate.d/dbNodo'' es similar a este:<br>
 
El contenido del fichero ''/etc/logrotate.d/dbNodo'' es similar a este:<br>
Línea 1017: Línea 1026:
 
     }
 
     }
 
<br>
 
<br>
Esta configuración hará que el fichero log rote diariamente, se comprima y se conserve durante un máximo de 31 días. Si el archivo de registro no existe, se creará sin generar ningún error.<br>
+
La explicación de este fichero es la siguiente:<br>
La ruta donde se encuentra ''bdNodo.log'' es la siguiente:<br>
+
: - Esta configuración hará que el fichero .log rote diariamente (''daily''),<br>
          /var/log/
+
: . se comprima (''compress''),<br>
 +
: - realiza una copia del fichero original y luego vacía el fichero para que los procesos que estaban trabajando con ese fichero puedan seguir haciéndolo a pesar de la rotación, (copytruncate),
 +
: - se conserve durante un máximo de 31 días (''rotate 31''),<br>
 +
: - si el archivo de registro no existe, se creará sin generar ningún error (''missingok'').<br>
 +
: - indicando la ruta donde se almacenará ''bdNodo.log'' (''/var/log/'').
 
<br><br>
 
<br><br>
♦ '''FICHERO DE CONFIGURACIÓN'''
+
♦ '''FICHERO DE CONFIGURACIÓN de bdNodo'''
 
<br><br>
 
<br><br>
 
Por defecto la programación vienen comentada por lo que será necesario activarla.<br>
 
Por defecto la programación vienen comentada por lo que será necesario activarla.<br>
Línea 1061: Línea 1074:
 
<br><br>
 
<br><br>
  
=== Zabixx ===
+
==== Diagnósticos y operaciones sobre bases de datos ====
 
<br><br>
 
<br><br>
 
+
===== Diagnóstico sobre la BBDD =====
 
 
 
<br><br>
 
<br><br>
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
+
: '''* Comando ps'''
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
+
Para comprobar si la base de datos está arrancada se puede usar la consola de ubuntu en el servidor donde esté instalada:<br>
 +
    '''ps aux | grep mysql'''<br>
 +
Si la base de datos está arrancada y funcionando correctamente se mostrará en el terminal:
 
<br><br>
 
<br><br>
=== SerCen ===
+
    root@preproducciongestion:~# ps aux | grep mysql
 +
    '''mysql        829  0.9  2.4 2862880 96188 ?      Ssl  Oct08  88:14 /usr/sbin/mysqld'''
 +
    root      48497  0.0  0.0  4028  1980 pts/1    S+  12:41  0:00 grep --color=auto mysql
 +
    root@preproducciongestion:~# /mysqld
 
<br><br>
 
<br><br>
 
+
Cualquier otro resultado del comando indica que existe un problema que es necesario analizar.<br>
 
 
 
<br><br>
 
<br><br>
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
+
: '''* Comando systemctl'''
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 
 
<br><br>
 
<br><br>
=== '''''VIVA'''it''-direct ===
+
Con este comando se puede comprobar, arrancar, parar o reiniciar el servicio ''mysql'' en los nodos con BBDD (DBTR, DBTHIST).
 
<br><br>
 
<br><br>
 
+
  systemctl status/stop/start/reboot mysql.service
 
 
<br><br>
 
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
 
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 
 
<br><br>
 
<br><br>
=== Intz-nimitz ===
+
EJEMPLO
 
<br><br>
 
<br><br>
 +
  root@vm-gestion:~# systemctl status mysql.service
 +
  ● mysql.service - MySQL Community Server
 +
      Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
 +
      Active: '''active (running)''' since Tue 2024-10-15 10:35:50 CEST; 8min ago
 +
      Process: 525030 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 +
    Main PID: 525038 (mysqld)
 +
      Status: "Server is operational"
 +
        Tasks: 42 (limit: 2220)
 +
      Memory: 361.9M
 +
          CPU: 10.449s
 +
      CGroup: /system.slice/mysql.service
 +
              └─525038 /usr/sbin/mysqld
  
 
+
  Oct 15 10:35:39 vm-gestion systemd[1]: Starting MySQL Community Server...
<br><br>
+
  Oct 15 10:35:50 vm-gestion systemd[1]: Started MySQL Community Server.
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
+
  root@vm-gestion:~#
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 
<br><br>
 
=== PQCTI ===
 
 
<br><br>
 
<br><br>
  
 
+
=====Comprobación que DBHIST está sincronizada con DBTR =====
 
<br><br>
 
<br><br>
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
+
Si se necesita verificar que la base de réplica (DBHIST) está sincronizada con la base de datos en tiempo real (DBTR) se seguirá el siguiente proceso:
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 
 
<br><br>
 
<br><br>
=== Record ===
+
'''Paso 1''': Iniciar sesión en la consola mysql desde la consola ubuntua tras introducir las credenciales correspondientes:<br>
 +
  '''root@vm-gestion:~# mysql -u root -p'''
 +
  Enter password:
 +
  Welcome to the MySQL monitor.  Commands end with ; or \g.
 +
  Your MySQL connection id is 19
 +
  Server version: 8.0.36-0ubuntu0.22.04.1 (Ubuntu)
 +
 
 +
  Copyright (c) 2000, 2024, Oracle and/or its affiliates.
 +
 
 +
  Oracle is a registered trademark of Oracle Corporation and/or its
 +
  affiliates. Other names may be trademarks of their respective
 +
  owners.
 +
 
 +
  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 +
 
 +
  '''mysql>'''
 
<br><br>
 
<br><br>
 +
'''Paso 2''': Desde la consola mysql utilizar el comando:<br>
 +
  '''show slave status\G'''<br>
  
 
+
'''Paso 3''': Analizar el resultado:<br>
<br><br>
+
A modo de ejemplo se muestra el resultado de una sincronización correcta entre ambas DDBD:
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
 
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 
<br><br>
 
=== Intz-GH ===
 
 
<br><br>
 
<br><br>
 +
  '''mysql> show slave status\G'''
 +
  *************************** 1. row ***************************
 +
                Slave_IO_State: Waiting for source to send event
 +
                    Master_Host: 172.25.128.94
 +
                    Master_User: replicador
 +
                    Master_Port: 3306
 +
                  Connect_Retry: 60
 +
                Master_Log_File: mysql-bin.000369
 +
            Read_Master_Log_Pos: 12922458
 +
                Relay_Log_File: vm-gestion-relay-bin.000314
 +
                  Relay_Log_Pos: 530906
 +
          Relay_Master_Log_File: mysql-bin.000369
 +
              Slave_IO_Running: Yes
 +
              Slave_SQL_Running: Yes
 +
                Replicate_Do_DB:
 +
            Replicate_Ignore_DB:
 +
            Replicate_Do_Table:
 +
        Replicate_Ignore_Table:
 +
        Replicate_Wild_Do_Table: nimitz.%
 +
    Replicate_Wild_Ignore_Table:
 +
                    Last_Errno: 0
 +
                    Last_Error:
 +
                  Skip_Counter: 0
 +
            Exec_Master_Log_Pos: 12922458
 +
                Relay_Log_Space: 12094628
 +
                Until_Condition: None
 +
                Until_Log_File:
 +
                  Until_Log_Pos: 0
 +
            Master_SSL_Allowed: No
 +
            Master_SSL_CA_File:
 +
            Master_SSL_CA_Path:
 +
                Master_SSL_Cert:
 +
              Master_SSL_Cipher:
 +
                Master_SSL_Key:
 +
          Seconds_Behind_Master: 0
 +
  Master_SSL_Verify_Server_Cert: No
 +
                  Last_IO_Errno: 0
 +
                  Last_IO_Error:
 +
                Last_SQL_Errno: 0
 +
                Last_SQL_Error:
 +
    Replicate_Ignore_Server_Ids:
 +
              Master_Server_Id: 3
 +
                    Master_UUID: 8f237349-80ca-11eb-9526-5254003dbcdb
 +
              Master_Info_File: mysql.slave_master_info
 +
                      SQL_Delay: 0
 +
            SQL_Remaining_Delay: NULL
 +
        Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
 +
            Master_Retry_Count: 86400
 +
                    Master_Bind:
 +
        Last_IO_Error_Timestamp:
 +
      Last_SQL_Error_Timestamp:
 +
                Master_SSL_Crl:
 +
            Master_SSL_Crlpath:
 +
            Retrieved_Gtid_Set:
 +
              Executed_Gtid_Set:
 +
                  Auto_Position: 0
 +
          Replicate_Rewrite_DB:
 +
                  Channel_Name:
 +
            Master_TLS_Version:
 +
        Master_public_key_path:
 +
          Get_master_public_key: 0
 +
              Network_Namespace:
 +
  1 row in set, 1 warning (0.01 sec)
  
  
 +
'''mysql>'''
 
<br><br>
 
<br><br>
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
+
'''Comandos importantes, desde consola de mysql'''
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 
 
<br><br>
 
<br><br>
=== VCB ===
+
: -  '''show master status''': desde el servidor con DBTR<br>
 +
: -  '''show slave status''': desde el esclavo con DBHIST<br>
 +
::El valor del parámetro ''seconds behind master'' indica cuanto está retrasada DBHIST con respecto a DBTR.<br>
 +
::Si el valor de este campo es elevado indicará que DBHIST no está sincronizada con DBTRcon la réplica no estará sincronizada.
 +
::Si el valor es NULL indica que la sincronización está parada.<br>
 +
::Interesa que este valor sea lo más pequeño posible.
 
<br><br>
 
<br><br>
 
+
[[#Base de datos (BBDD) | Volver arriba]]
 
 
<br><br>
 
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
 
 
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 
<br><br>
 
<br><br>
=== '''''VIVA'''it'' WebCall ===
 
<br><br>
 
 
  
 +
==== Tabla Dat_Log ====
 
<br><br>
 
<br><br>
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
+
En la tabla '''Dat_log''' se encuentra el histórico de las operaciones realizadas por las aplicaciones en la BBDD.<br>
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
+
En ella se registran todos los cambios que realizan los usuarios a través de las diferentes aplicaciones (Portal de administración, Supervisor, Meet, Alertas, ...).
 
<br><br>
 
<br><br>
=== '''''VIVA'''it'' Call ===
+
La tabla está formada por los siguientes campos: [[BD.DAT_LOG]]<br>
 +
A continuación se especifican algunos de los posibles valores de los campos, en función del valor de E_ACCION.
 +
<br><br>
 +
{| 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`
 +
|-
 +
|10||accionLog_escuchar_seg||Escuchar segmento|| || || || || ||
 +
|-
 +
|20||accionLog_escuchar_lla||Escuchar llamada|| || || || || ||
 +
|-
 +
|30||accionLog_descargar_seg||Descargar segmento|| || || || || ||
 +
|-
 +
|40||accionLog_descargar_lla||Descargar llamada|| || || || || ||
 +
|-
 +
|50||accionLog_generar_config||Generar configuración|| || || || || ||
 +
|-
 +
|60||accionLog_cambiar_clave_propia||Cambiar clave propia|| || || || || ||
 +
|-
 +
|65||accionLog_login_correcto||Login correcto||||idUsuario||nivelSupervisor|| ||
 +
|-
 +
|70||accionLog_login_erroneo||Login erroneo|| || || || || ||
 +
|-
 +
|80||accionLog_login_multiple||Login multiple|| || || || || ||
 +
|-
 +
|90||accionLog_escuchar_ext||Escuchar Extensión|| || || || || ||
 +
|-
 +
|100||accionLog_chg_objetivo_peso||Modificar nivel servicio|| ||idCola||objetivo||peso|| ||
 +
|-
 +
|105||accionLog_add_agente_cola_bd||Añadir agente a grupo BD|| ||idCola||agente||prioridad||obligatorio||
 +
|-
 +
|115||accionLog_del_agente_cola_bd||Quitar agente de grupo BD|| ||idCola||agente|| ||
 +
|-
 +
|125||accionLog_prio_agente_cola_bd||Modificar prioridad agente en grupo BD|| ||idCola||agente||prioridad||obligatorio|| 
 +
|-
 +
|135||accionLog_perfil_agente_bd||Asignar perfil a agente BD|| ||idAgente||perfil||  ||||
 +
|-
 +
|140||accionLog_add_agente||Añadrid agente|| || ||  || || ||
 +
|-
 +
|145||accionLog_del_agente||Borrar agente|| || ||  || || ||
 +
|-
 +
|150||accionLog_chg_agente||Modificar agente|| ||idAgente|| || ||nombre||cuenta
 +
|-
 +
|155||accionLog_add_agenda_perfil||Añadir agenda a perfil|| ||idPerfil||idAgenda||  || ||
 +
|-
 +
|160||accionLog_del_agenda_perfil||Borrar agenda de perfil|| ||idPerfil||idAgenda||  || ||
 +
|-
 +
|165||accionLog_add_entrada_agenda||Añadir entrada a agenda|| || ||idAgenda|| ||nombre||numero
 +
|-
 +
|170||accionLog_del_entrada_agenda||Borrar entrada de agenda|| ||idEntrada||idAgenda|| ||nombre||numero
 +
|-
 +
|175||accionLog_chg_entrada_agenda||Modificar entrada de agenda|| ||idEntradaAgenda|| || ||nombre||numero
 +
|-
 +
|180||accionLog_add_agenda||Añadir agenda|| || || || ||nombre||descripción
 +
|-
 +
|185||accionLog_del_agenda||Borrar agenda|| || ||  || || ||
 +
|-
 +
|190||accionLog_chg_agenda||Modificar agenda|| ||idAgenda|| || ||nombre||descripción
 +
|-
 +
|195||accionLog_add_etiqueta_agente||Añadir etiqueta agente|| || || || ||nombre||descripción
 +
|-
 +
|200||accionLog_del_etiqueta_agente||Borrar etiqueta agente|| ||idEtiqueta|| ||  || ||
 +
|-
 +
|205||accionLog_chg_etiqueta_agente||Modificar etiqueta agente|| ||idEtiqueta|| || ||nombre||descripción
 +
|-
 +
|210||accionLog_add_rel_etiqueta_agente||Añadir relación etiqueta agente|| ||idEtiqueta|| idUsuario||  || ||
 +
|-
 +
|215||accionLog_del_rel_etiqueta_agente||Borrar relación etiqueta agente|| ||idEtiqueta|| idUsuario||  || ||
 +
|-
 +
|220||accionLog_chg_rel_etiqueta_agente||Modificar relación etiqueta agente|| ||idEtiqueta|| idUsuario||  || ||
 +
|-
 +
|225||accionLog_add_perfil||Añadir perfil|| || || ||  ||nombre||descripción
 +
|-
 +
|230||accionLog_del_perfil||Borrar perfil|| ||idPerfil|| ||  || ||
 +
|-
 +
|235||accionLog_chg_perfil||Modificar perfil|| ||idPerfil|| || ||nombre||descripción
 +
|-
 +
|240||accionLog_add_rel_cola_perfil_bd||Añadir relación grupo ACD/perfil BD|| ||idCola|| idPerfil||prioridad||obligatorio|| 
 +
|-
 +
|250||accionLog_del_rel_cola_perfil_bd||Borrar relación grupo ACD/perfil BD|| ||idCola|| idPerfil||prioridad||obligatorio|| 
 +
|-
 +
|260||accionLog_chg_rel_cola_perfil_bd||Modificar relación grupo ACD/perfil BD|| ||idCola|| idPerfil||prioridad||obligatorio|| 
 +
|-
 +
|265||accionLog_add_cola||Añadir grupo ACD|| || || || ||nombre||descripción
 +
|-
 +
|270||accionLog_del_cola||Borrar grupo ACD|| || || || ||  ||
 +
|-
 +
|275||accionLog_chg_cola||Modificar grupo ACD|| ||idAgente|| || ||nombre||descripción
 +
|-
 +
|280||accionLog_add_campanna_cola_bd||Añadir campaña a grupo ACD BD|| ||idCola||idCampanna||  || ||
 +
|-
 +
|285||accionLog_del_campanna_cola_bd||Borrar campaña de grupo ACD BD|| || ||  || || ||
 +
|-
 +
|290||accionLog_chg_cola_algor_predic||Cambiar algoritmo predictivo de grupo ACD|| || || || || ||
 +
|-
 +
|300||accionLog_enviar_msj||Enviar mensaje ||tipo_msj||ambito||id_ambito||N_VAR1||N_VAR2||C_VAR3
 +
|-
 +
|305||accionLog_cerrar_sesion||Cerrar sesión|| ||idUsuario||forzado||segundos||fecha||motivo
 +
|-
 +
|310||accionLog_activa_campanna_bd||Activar campaña|| ||idCampanna||activa|| ||  ||
 +
|-
 +
|320||accionLog_grabacion_sombra||Grabación en la sombra|| || ||  || || ||
 +
|-
 +
|330||accionLog_add_filtro_contactos|| || || ||  || || ||
 +
|-
 +
|335||accionLog_del_filtro_contactos|| || || ||  || || ||
 +
|-
 +
|340||accionLog_chg_filtro_contactos|| || || ||  || || ||
 +
|-
 +
|350||accionLog_add_val_filtro_contactos|| || || ||  || || ||
 +
|-
 +
|355||accionLog_del_val_filtro_contactos|| || || ||  || || ||
 +
|-
 +
|400||accionLog_activar_contactos|| || ||idCampanna|| ||  || ||
 +
|-
 +
|405||accionLog_cancelar_contactos|| || ||idCampanna|| ||  || ||
 +
|-
 +
|410||accionLog_orden_contactos|| || ||idCampanna|| ||  || ||
 +
|-
 +
|415||accionLog_prioridad_contactos|| || ||idCampanna|| || || ||
 +
|-
 +
!colspan="9"|ACCIÓN LOGS PORTAL: Faltan añadir en la BD (Datos versión) y Revisar si ya existen. Poner los parámetros
 +
|-
 +
|5310||accionLog_chg_acd_configuracion|| || || || || || ||
 +
|-
 +
|5315||accionLog_add_acd_finales|| || || || || || ||
 +
|-
 +
|5320||accionLog_chg_acd_finales|| || || || || || ||
 +
|-
 +
|5325||accionLog_del_acd_finales|| || || || || || ||
 +
|-
 +
|5330||accionLog_add_acd_formularios|| || || || || || ||
 +
|-
 +
|5335||accionLog_chg_acd_formularios|| || || || || || ||
 +
|-
 +
|5340||accionLog_del_acd_formularios||||||||||||||
 +
|-
 +
|5345||accionLog_add_acd_pausas|| || || || || || ||
 +
|-
 +
|5350||accionLog_chg_acd_pausas|| || || || || || ||
 +
|-
 +
|5355||accionLog_del_acd_pausas|| || || || || || ||
 +
|-
 +
|5359||accionLog_add_cen_molticanal_texto_entrada|| || || || || || ||
 +
|-
 +
|5360||accionLog_add_acd_supercolas|| || || || || || ||
 +
|-
 +
|5361||accionLog_del_cen_molticanal_texto_entrada|| || || || || || ||
 +
|-
 +
|5362||accionLog_udel_cen_molticanal_texto_entrada||||||||||||||
 +
|-
 +
|5363||accionLog_add_cen_molticanal_texto_salida|| || || || || || ||
 +
|-
 +
|5364||accionccionLog_chg_cen_molticanal_texto_salida|| || || || || || ||
 +
|-
 +
|5365||accionLog_chg_acd_supercolas|| || || || || || ||
 +
|-
 +
|5366||accionLog_udel_cen_molticanal_texto_salida|| || || || || || ||
 +
|-
 +
|5367||accionLog_chg_cen_molticanal_texto_entrada|| || || || || || ||
 +
|-
 +
|5368||accionLog_del_cen_molticanal_texto_salida|| || || || || || ||
 +
|-
 +
|5370||accionLog_del_acd_supercolas|| || || || || || ||
 +
|-
 +
|5375||accionLog_udel_acd_supercolas|| || || || || || ||
 +
|-
 +
|5380||accionLog_add_acd_vdn|| || || || || || ||
 +
|-
 +
|5385||accionLog_chg_acd_vdn|| || || || || || ||
 +
|-
 +
|5390||accionLog_del_acd_vdn|| || || || || || ||
 +
|-
 +
|5395||accionLog_udel_acd_vdn|| || || || || || ||
 +
|-
 +
|5396||accionLog_add_cen_vdn|| || || || || || ||
 +
|-
 +
|5397||accionLog_chg_cen_vdn|| || || || || || ||
 +
|-
 +
|5398||accionLog_del_cen_vdn|| || || || || || ||
 +
|-
 +
|5399||accionLog_udel_cen_vdn|| || || || || || ||
 +
|-
 +
|5400||accionLog_add_campos|| || || || || || ||
 +
|-
 +
|5405||accionLog_chg_campos|| || || || || || ||
 +
|-
 +
|5410||accionLog_del_campos|| || || || || || ||
 +
|-
 +
|5415||accionLog_add_categorias|| || || || || || ||
 +
|-
 +
|5420||accionLog_chg_categorias|| || || || || || ||
 +
|-
 +
|5425||accionLog_del_categorias|| || || || || || ||
 +
|-
 +
|5430||accionLog_chg_com_configuracion|| || || || || || ||
 +
|-
 +
|5435||accionLog_add_nodos|| || || || || || ||
 +
|-
 +
|5440||accionLog_chg_nodos|| || || || || || ||
 +
|-
 +
|5445||accionLog_del_nodos|| || || || || || ||
 +
|-
 +
|5450||accionLog_udel_nodos|| || || || || || ||
 +
|-
 +
|5455||accionLog_add_sedes|| || || || || || ||
 +
|-
 +
|5460||accionLog_chg_sedes|| || || || || || ||
 +
|-
 +
|5465||accionLog_del_sedes|| || || || || || ||
 +
|-
 +
|5470||accionLog_udel_sedes|| || || || || || ||
 +
|-
 +
|5475||accionLog_add_dat_sincroniza|| || || || || || ||
 +
|-
 +
|5480||accionLog_chg_dat_sincroniza|| || || || || || ||
 +
|-
 +
|5485||accionLog_add_extensiones|| || || || || || ||
 +
|-
 +
|5490||accionLog_chg_extensiones|| || || || || || ||
 +
|-
 +
|5495||accionLog_del_extensiones|| || || || || || ||
 +
|-
 +
|5500||accionLog_udel_extensiones|| || || || || || ||
 +
|-
 +
|5505||accionLog_add_facilidades|| || || || || || ||
 +
|-
 +
|5510||accionLog_chg_facilidades|| || || || || || ||
 +
|-
 +
|5515||accionLog_del_facilidades|| || || || || || ||
 +
|-
 +
|5520||accionLog_add_locuciones|| || || || || || ||
 +
|-
 +
|5525||accionLog_chg_locuciones|| || || || || || ||
 +
|-
 +
|5530||accionLog_del_locuciones|| || || || || || ||
 +
|-
 +
|5535||accionLog_add_musica|| || || || || || ||
 +
|-
 +
|5540||accionLog_chg_musica|| || || || || || ||
 +
|-
 +
|5545||accionLog_del_musica|| || || || || || ||
 +
|-
 +
|5550||accionLog_add_permisos|| || || || || || ||
 +
|-
 +
|5555||accionLog_chg_permisos|| || || || || || ||
 +
|-
 +
|5560||accionLog_del_permisos|| || || || || || ||
 +
|-
 +
|5565||accionLog_add_plantillas|| || || || || || ||
 +
|-
 +
|5570||accionLog_chg_plantillas|| || || || || || ||
 +
|-
 +
|5575||accionLog_del_plantillas|| || || || || || ||
 +
|-
 +
|5580||accionLog_add_puestos_extensiones|| || || || || || ||
 +
|-
 +
|5585||accionLog_chg_puestos_extensiones|| || || || || || ||
 +
|-
 +
|5590||accionLog_del_puestos_extensiones|| || || || || || ||
 +
|-
 +
|5595||accionLog_des_puestos_extensiones|| || || || || || ||
 +
|-
 +
|5600||accionLog_add_usuarios|| || || || || || ||
 +
|-
 +
|5605||accionLog_chg_usuarios|| || || || || || ||
 +
|-
 +
|5610||accionLog_del_usuarios|| || || || || || ||
 +
|-
 +
|5615||accionLog_udel_usuarios|| || || || || || ||
 +
|-
 +
|5620||accionLog_chg_licencias|| || || || || || ||
 +
|-
 +
!colspan="9"|ACCIONES DE LOS EJES
 +
|-
 +
|5705||accionLog_chg_Eje|| || || || || || ||
 +
|-
 +
|5710||accionLog_out_Eje_Padre|| || || || || || ||
 +
|-
 +
|5715||accionLog_del_Eje|| || || || || || ||
 +
|-
 +
|5720||accionLog_add_Eje||  ||  ||  || || || ||
 +
|-
 +
|5725||accionLog_set_Eje_Padre|| || || || || || ||
 +
|-
 +
|5730||accionLog_add_acd_pausas_usuarios|| || || || || || ||
 +
|-
 +
|5735||accionLog_del_acd_pausas_usuarios|| || || || || || ||
 +
|-
 +
|5740||accionLog_add_centros_dispositivos|| || || || || || ||
 +
|-
 +
|5745||accionLog_chg_centros_dispositivos|| || || || || || ||
 +
|-
 +
|5750||accionLog_del_centros_dispositivos|| || || || || || ||
 +
|-
 +
|5755||accionLog_add_centros_extensiones|| || || || || || ||
 +
|-
 +
|5760||accionLog_chg_centros_extensiones|| || || || || || ||
 +
|-
 +
|5765||accionLog_del_centros_extensiones|| || || || || || ||
 +
|-
 +
|5770||accionLog_add_acd_usuarios|| || || || || || ||
 +
|-
 +
|5775||accionLog_chg_acd_usuarios||||||||||||||
 +
|-
 +
|5780||accionLog_add_relacion_campos|| || || || || || ||
 +
|-
 +
|5785||accionLog_del_relacion_campos|| || || || || || ||
 +
|-
 +
|5786||accionLog_chg_grabacion_configuracion|| || || || || || ||
 +
|-
 +
|5787||accionLog_add_campannas|| || || || || || ||
 +
|-
 +
|5788||accionLog_chg_campannas|| || || || || || ||
 +
|-
 +
|5789||accionLog_del_campannas|| || || || || || ||
 +
|-
 +
|5790||accionLog_udel_campannas|| || || || || || ||
 +
|-
 +
|5791||accionLog_add_lista_contactos|| || || || || || ||
 +
|-
 +
|5792||accionLog_chg_lista_contactos|| || || || || || ||
 +
|-
 +
|5793||accionLog_del_lista_contactos|| || || || || || ||
 +
|-
 +
|5794||accionLog_udel_lista_contactos|| || || || || || ||
 +
|-
 +
|5795||accionLog_add_lista_llamames|| || || || || || ||
 +
|-
 +
|5796||accionLog_chg_lista_llamames|| || || || || || ||
 +
|-
 +
|5797||accionLog_del_lista_llamames|| || || || || || ||
 +
|-
 +
|5798||accionLog_udel_lista_llamames|| || || || || || ||
 +
|-
 +
|5799||accionLog_add_lista_robinson|| || || || || || ||
 +
|-
 +
|5800||accionLog_chg_lista_robinson|| || || || || || ||
 +
|-
 +
|5801||accionLog_del_lista_robinson|| || || || || || ||
 +
|-
 +
|5802||accionLog_udel_lista_robinson|| || || || || || ||
 +
|-
 +
|5803||accionLog_add_contacto|| || || || || || ||
 +
|-
 +
|5804||accionLog_chg_contacto|| || || || || || ||
 +
|-
 +
|5805||accionLog_del_contacto|| || || || || || ||
 +
|-
 +
|5806||accionLog_udel_contacto|| || || || || || ||
 +
|-
 +
|5807||accionLog_import_contactos|| || || || || || ||
 +
|-
 +
|5808'''(*)'''||accionLog_add_contacto_campanna|| || || || || || ||
 +
|-
 +
|'''''5818'''''||accionLog_chg_contacto_campanna|| || || || || || ||
 +
|-
 +
|5809||accionLog_chk_exist_contacto_campanna|| || || || || || ||
 +
|-
 +
|5810||accionLog_add_contacto_lista|| || || || || || ||
 +
|-
 +
|5811||accionLog_chk_exist_contacto_lista|| || || || || || ||
 +
|-
 +
|5812||accionLog_del_contacto_lista|| || || || || || ||
 +
|-
 +
|5813||accionLog_add_estrategia|| || || || || || ||
 +
|-
 +
|5814||accionLog_chg_estrategia|| || || || || || ||
 +
|-
 +
|5815||accionLog_del_estrategia|| || || || || || ||
 +
|-
 +
|5816||accionLog_udel_estrategia|| || || || || || ||
 +
|-
 +
|5817'''(*)'''||accionLog_chk_exist_contacto|| || || || || || ||
 +
|-
 +
|'''''5818'''''||accionLog_add_telefono_robinson|| || || || || || ||
 +
|-
 +
|5819||accionLog_chg_telefono_robinson|| || || || || || ||
 +
|-
 +
|5820||accionLog_del_telefono_robinson|| || || || || || ||
 +
|-
 +
|5821||accionLog_chk_exist_robinson_lista|| || || || || || ||
 +
|-
 +
|5822||accionLog_add_dat_click2call|| || || || || || ||
 +
|-
 +
|5823||accionLog_chg_dat_click2call|| || || || || || ||
 +
|-
 +
|5824||accionLog_del_dat_click2call|| || || || || || ||
 +
|-
 +
|5825||accionLog_chk_exist_dat_click2call|| || || || || || ||
 +
|-
 +
|5826||accionLog_add_aplicaciones|| || || || || || ||
 +
|-
 +
|5827||accionLog_chg_aplicaciones|| || || || || || ||
 +
|-
 +
|5828||accionLog_del_aplicaciones|| || || || || || ||
 +
|-
 +
|5829||accionLog_add_cen_destinos|| || || || || || ||
 +
|-
 +
|5830||accionLog_chg_cen_destinos|| || || || || || ||
 +
|-
 +
|5831||accionLog_del_cen_destinos|| || || || || || ||
 +
|-
 +
|5832||accionLog_add_acd_monitores|| || || || || || ||
 +
|-
 +
|5833||accionLog_chg_acd_monitores|| || || || || || ||
 +
|-
 +
|5834||accionLog_del_acd_monitores|| || || || || || ||
 +
|-
 +
|5835||accionLog_add_campos_monitor_8|| || || || || || ||
 +
|-
 +
|5836||accionLog_chg_campos_monitor_8|| || || || || || ||
 +
|-
 +
|5837||accionLog_del_campos_monitor_8|| || || || || || ||
 +
|-
 +
|5838||accionLog_add_agendas|| || || || || || ||
 +
|-
 +
|5839||accionLog_chg_agendas|| || || || || || ||
 +
|-
 +
|5840||accionLog_del_agendas|| || || || || || ||
 +
|-
 +
|5841||accionLog_add_agendas_telefonos|| || || || || || ||
 +
|-
 +
|5842||accionLog_chg_agendas_telefonos|| || || || || || ||
 +
|-
 +
|5843||accionLog_del_agendas_telefonos|| || || || || || ||
 +
|-
 +
|5844||accionLog_add_agendas_campos_cliente|| || || || || || ||
 +
|-
 +
|5845||accionLog_chg_agendas_campos_cliente|| || || || || || ||
 +
|-
 +
|5846||accionLog_del_agendas_campos_cliente|| || || || || || ||
 +
|-
 +
!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|| || || || || || ||
 +
|}
 +
<br><br>
 +
[[#Base de datos (BBDD) | Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 
<br><br>
 
<br><br>
  
 +
=== Zabbix ===
 +
<br><br>
 +
==== Generalidades ====
 +
<br><br>
 +
Zabbix es una solución de código abierto que ofrece características de monitorización avanzada de sistemas constituidos por todo tipo de servidores, aplicaciones y equipos.<br>
 +
La versión actual de Zabbix en VIVAit es la 6.0. Para más información [https://www.zabbix.com/documentation/6.0/es/manual ver Zabbix 6.0]
 +
<br>
 +
Zabbix  monitoriza los  recursos  de un equipo en forma remota, permitiendo centralizar la información que se recoge en un servidor desde el que se puede visualizar.<br>
 +
Zabbix cuenta con una interfaz de administración vía web y utiliza un mecanismo flexible de notificaciones que permita que los usuarios reciban las alarmas. Estas notificaciones están basadas e_mail, SMS, Jabber, etc. e informan de la aparición de cualquier evento. Esto permite una reacción rápida ante problemas en el elemento supervisado. <br>
 +
Para acceder al servidor Zabbix se invoca, desde un navegador, la dirección IP de la máquina donde se encuentra instalado el servidor Zabbix seguido de "/zabbix.
 +
{|
 +
|-
 +
|
 +
IP_address_Zabbix_Server/zabbix
 +
|}
 +
<br><br>
 +
[[File:zabbix_login.png|300px|center]]
 +
<br><br>
 +
Zabbix posee documentación tanto en wiki, foros y comunidades. Para ampliar la información se puede visitar [https://www.zabbix.com el sitio oficial de Zabbix]
 +
<br><br>
 +
===== Glosario Zabbix =====
 +
<br><br>
 +
La terminología básica de Zabbix es la siguiente, en su web oficial se puede ampliar información sobre otros términos, [https://www.zabbix.com/documentation/6.0/en/manual/definitions definiciones de Zabbix].
 +
<br>
 +
* '''Host'''
 +
: Es una entidad que define el elemento en red que del que se desea monitorizar/supervisar activamente sus recursos. Este puede ser una impresora, router, switch, un servidor, un ordenador, etc. La característica de un host es que debe poseer una dirección de red (IP).<br>
 +
* '''Host group'''
 +
: Es una agrupación lógica de hosts, 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.<br>
 +
* '''Item'''
 +
: Es una medida especifica que se obtiene de un host. Este parámetro se recoge en el servidor Zabbix remitida por el agente Zabbix instalado en los host.<br>
 +
* '''Trigger'''
 +
: 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.<br>
 +
* '''Event'''
 +
: 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.<br>
 +
* '''Action'''
 +
: 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: notificacion, comandos remotos) y condiciones (cuando la operación se lleva a cabo).<br>
 +
* '''Notification'''
 +
: Es la entidad con que Zabbix puede notificar (e_mail, SMS, Jabber, ...).<br>
 +
* '''Template'''
 +
: Una plantilla es un conjunto de módulos ya configurados y que están listos para  ser aplicados al host a supervisar. Agrupa items, triggers, graphs, ... para monitorizar cualquier servicio o aplicación. Permiten configurar la supervisión de un host en base a su tipo o a los elementos que comparten los mismos parámetros de medición. Cuando se instala Zabbix server se proporciona una conjunto de plantillas preconfiguradas, estas se pueden utilizar directamente, si procede, o adaptarlas a las necesidades específicas. También existe la posibilidad de crear una plantilla desde cero.<br>
 +
* '''Zabbix server'''
 +
: 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.<br>
 +
* '''Zabbix agent'''
 +
: Es un proceso desplegado en los host que son supervisados, funciona como un servicio y puede funcionar de forma activa o pasiva según su configuración.
 +
<br><br>
 +
[[#Zabbix | Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
  
<br><br>
+
===== Funcionalidad Discovery =====
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
+
<br><br>
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
+
Permite descubrir y mostrar los dispositivos que se integran en una red supervisada y el tipo de servicios que proporcionan.<br>
<br><br>
+
<br><br>
=== '''''VIVA'''it'' Tracker ===
+
'''Ejemplo'''
<br><br>
+
<br><br>
 
+
Un cliente con 100 colas ACDs, y 25 VDNS, y en cada cola 25 medidas, seria muy laborioso registrarlos uno por uno.   
 
+
''Discovery'' descubre automáticamente todas las interfaces de red que existen, tanto para colas, nodos o IVR.<br>
<br><br>
+
Para utilizar esta funcionalidad, se hace el uso de dos script, que se activan en el momento de instalación de Zabbix en el directorio:
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
+
   /usr/local/sbin<br>
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
+
Estos script son:<br>
<br><br>
 
=== '''''VIVA'''it'' Supervisor ===
 
<br><br>
 
 
 
 
 
<br><br>
 
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
 
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 
<br><br>
 
 
 
== Descripción de los elementos, diagnósticos y operaciones ==
 
 
 
=== Funcionamiento en cluster ===
 
 
 
Un clúster es un grupo de múltiples ordenadores unidos mediante una red de alta velocidad, de tal forma que el conjunto es visto como un único ordenador.
 
 
 
De un clúster se espera que presente combinaciones de los siguientes servicios:
 
 
 
# Alto rendimiento
 
# Alta disponibilidad
 
# Balanceo de carga
 
# Escalabilidad
 
 
 
Tal y como esta definido el cluster de MDtel, este comprueba conectividad con la otra máquina que lo forma y con un punto de confianza. Si la máquina no tiene conectividad con la otra y si con el punto de confianza es que el servidor está vivo, mientas que si no tengo conectividad ni con la otra máquina ni con el punto de confianza es que el muerto soy yo, por lo que balanceo.
 
 
 
Por lo que las máquinas balancean en los casos siguientes:
 
 
 
* Todo lo que tenga que ver con la red, es decir, caída de la tarjeta de red, apagado de la máquina, corte en la red..
 
 
 
Y no balancea en los siguientes:
 
 
 
* No balancea en los demás casos, es decir, todo lo que tenga que ver con procesos de una máquina (caída asterisk, base de datos, intz-nimitz)
 
 
 
 
 
===== Píldoras =====
 
 
 
 
 
====== 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
 
 
 
====== Borrar un recurso ======
 
 
 
pcs resource delete DRBDFs
 
 
 
====== 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
 
 
 
 
 
====== 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
 
 
 
<span style="color:#f32100">Mirar si existe alguna manera de mover un recurso sin que se creen estas restricciones locales</span>
 
 
 
 
 
====== 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]
 
 
 
====== 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
 
 
 
 
 
====== 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
 
 
 
 
 
===== 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.
 
 
 
====== 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'''''
 
 
 
====== 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:
 
 
 
 
 
[[File:cluster1.png|400px]]
 
 
 
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.
 
 
 
[[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.
 
 
 
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.
 
 
 
 
 
[[File:cluster3.png|400px]]
 
 
 
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.
 
 
 
lsblk
 
 
 
[[File:cluster5.png|400px]]
 
 
 
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
 
 
 
 
 
====== 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.
 
 
 
[[File:cluster6.png|400px]]
 
 
 
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
 
 
 
 
 
====== 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
 
 
 
[[File:cluster7.png|400px]]
 
 
 
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.
 
 
 
 
 
====== 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.
 
 
 
[[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.'''
 
 
 
 
 
====== 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.'''
 
 
 
====== 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.
 
 
 
[[File:cluster9.png|400px]]
 
 
 
 
 
 
 
===== 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.
 
 
 
 
 
====== 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.'''
 
 
 
 
 
====== 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.'''
 
 
 
 
 
====== 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'''
 
  
 +
{|
 +
|-
 +
|
 +
: - '''zabbixDiscoveryQueues.pl''': script utilizado para buscar colas ACD.
  
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
+
: - '''zabbixDiscoveryVDN.pl''': script utilizado para buscar VDNS.
 +
|}<br>
  
 +
La explicación de como configurarla se encuentra en el manual oficial de Zabbix [[https://www.zabbix.com/documentation/2.2/manual/discovery/network_discovery/rule Zabbix detección de redes]].
 +
<br><br>
 +
[[#Zabbix (BBDD) | Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
  
====== Autentificación del pcs. (En 1 nodo) ======
+
===== Notificaciones =====
 +
<br><br>
 +
Para recibir notificaciones del servidor Zabbix es necesario dar de alta al usuario que vaya a recibirlas y su servidor de correo electrónico para poder enviarle las notificaciones mediante mensajes de correo.
 +
<br><br>
 +
[[File:zabbix_notificación.png|800px|center]]
 +
<br><br>
 +
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/6.0/es/manual/quickstart/notification  manual oficial de Zabbix 6.0]
 +
<br><br>
 +
[[#Zabbix | Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
  
En uno de los nodos ejecutamos el siguiente comando para autenticar el pcs.
+
===== Usuarios =====
 +
<br><br>
 +
Zabbix permite la organización de usuarios en grupos para establecer los permisos adecuados de acuerdo al tipo de perfil que se desea crear.<br>
 +
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.
 +
<br><br>
 +
[[File:zabbix_usuarios.png|800px|center]]
 +
<br><br>
 +
Cada usuario Zabbix se le asigna un nombre de usuario único, una contraseña y se puede indicar que tipo de comunicación posee, normalmente es vía email, pero puede ser vía otro tipo de medios.<br>
 +
Para mas información ver el [https://www.zabbix.com/documentation/2.2/manual/web_interface/user_profile manual oficial ].
 +
<br><br>
  
  pcs host auth nodo-vc-01 nodo-vc-02 -u hacluster -p ivivacluster
+
===== 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 tendrá que completar con el [https://www.zabbix.com/documentation/2.2/manual/config/visualisation manual oficial].
 +
<br><br>
 +
======Graphs======
 +
<br><br>
 +
{|
 +
|-
 +
|
 +
'''Nota'''<br>
 +
    Debe crearse algún item dentro del host para poder utilizar una gráfica.
 +
|}
 +
En Zabbix una gráfica sirve para representar visualmente los resultados obtenidos de uno o varios items.
 +
<br><br>
 +
[[File:zabbix_gráficos.png|1400px|center]]
 +
<br><br>
 +
Los valores ''min / avg / max'' que Zabbix obtiene y representa son de un registro de datos de la ''tabla tendencias''.
 +
<br><br>
  
El resultado del comando tiene que ser:
+
======Screens======
 +
<br><br>
 +
Las pantallas refiere otra característica adaptable de Zabbix la cual permite que los usuarios creen vistas personalizadas dentro de Zabbix para mostrar la información suministrada por la supervisión.<br>
 +
Se considera como una colección de gráficas y no depende del host.<br>
 +
Una pantalla puede consistir en:<br>
 +
: - gráficos simples,<br>
 +
: - gráficos personalizados,<br>
 +
: - integrar mapas,<br>
 +
: - alertas,<br>
 +
: - gráficos estadísticos,<br>
 +
: - texto plano tal como los 5 valores pasados de un item particular,<br>
 +
: - entre otros.<br>
 +
La información se muestra de forma dinámica.
 +
<br><br>
 +
[[File:zabbix_pantallas.png|800px|center]]
 +
<br><br>
  
<span style="color:#007bca">VC-CORP-Cetelem-Mad-cl1: Authorized
+
======Maps======
VC-CORP-Cetelem-Mad-cl2: Authorized</span>
+
<br><br>
 +
En Zabbix, un map (mapa) es una representación gráfica de la situación de los dispositivos en red.<br>
 +
Es un escenario que muestra la red, aplicaciones y servicios a través de figuras o iconos.<br>
 +
Dichas figuras toman vida en respuesta a los eventos que se dan en el entorno supervisado.
 +
<br><br>
 +
[[File:zabbix_mapas.png|800px|center]]
 +
<br><br>
  
====== Creación y configuración del cluster. (En 1 nodo) ======
+
======Monitorizar el estado de los raid ======
 +
<br><br>
 +
Los siguientes comandos son necesarios para poder monitorizar el estado de los raid.<br>
 +
<br>
 +
El comando:<br>
 +
    >hpacucli "ctrl slot=1 logicaldrive 1 show status"<br>
 +
proporciona el estado de un raid (p.e. logicaldrive 1 (931.5 GB, 1): Interim Recovery Mode).
 +
<br><br>
 +
El comando:<br>
 +
  >hpacucli "ctrl slot=1 logicaldrive all show status"<br>
 +
proporciona el estado de todos los raid, p.e.:<br>
 +
    logicaldrive 1 (931.5 GB, 1): Interim Recovery Mode<br>
 +
    logicaldrive 2 (1.8 TB, 1): OK<br>
 +
Para conseguir información genérica se utiliza el comando:<br>
 +
    ctrl all show config detail<br>
 +
muestra mucha información, permite conocer el modelo de disco físico instalado para poder sustituirle, si procede.
 +
<br><br>
 +
[[#Zabbix | Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
  
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).
+
==== Configuraciones de Zabbix en '''MD'''tel ====
 +
<br><br>
 +
===== Agentes Zabbix =====
 +
<br><br>
 +
{|-
 +
|
 +
|
 +
'''Nota:''' Hay que instalar un agente Zabbix en cada máquina que se quiera monitorizar.
 +
|}
 +
<br>
 +
El agente Zabbix puede recoger datos:
 +
: * '''De forma pasiva:''' el server contacta con el agente pidiéndole un dato (por ejemplo el consumo de CPU en ese instante) y el agente responde al server con ese dato.<br>
 +
: A esta acción del agente se la llama '''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 el que de forma periódica recogerá datos sobre esos ítems y se los hará llegar al server. A esta acción del agente se la llama ''''''Agente pasivo''''''.
 +
<br><br>
 +
====== Configurar el agente Zabbix de forma pasiva ======
 +
<br><br>
 +
Para configurar el agente Zabbix es necesario acceder a la maquina que actuará como agente, y en el directorio<br>
 +
    /etc/zabbix<br>
 +
modificar el fichero<br>
 +
    zabbix_agentd.conf<br>
 +
indicando cual es la dirección de red (IP) del servidor Zabbix.
 +
<br>
 +
{|
 +
|-
 +
|
 +
  ##### 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.
 +
|}
 +
<br>
 +
Tras la configuración del fichero, debemos reiniciar el servicio de los agentes.
 +
<br>
 +
{|
 +
|-
 +
|
 +
sudo service zabbix-agent restart
 +
|}
 +
<br><br>
 +
====== Configurar el agente Zabbix de forma activa ======
 +
<br><br>
 +
Para configurar el agente Zabbix necesitamos acceder a la máquina que actuará como agente, y en el directorio<br>
 +
    /etc/zabbix<br>
 +
modificar el fichero<br>
 +
    zabbix_agentd.conf<br>
 +
e indicar cual es la dirección de red (IP) del servidor Zabbix.
 +
<br>
 +
{|
 +
|-
 +
|
 +
  ##### 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
 +
|}
 +
<br>
 +
El parámetro '''User_parameters''' tiene un formato de este estilo:
 +
<br>
 +
{|
 +
|-
 +
|
 +
    User_parameters: NombreMedida, comando.
 +
|}
 +
<br>
 +
La variable ''NombreMedida'' se refiere al nombre que se de a la aplicación, no hace falta que exista una aplicación con ese nombre en Zabbix,<br>
 +
y ''comando'', es el comando remoto que tiene que ejecutar el servidor Zabbix. Posiblemente se necesita dar permisos para ejecutar el comando y siempre debe devolver un valor (un número o un tiempo) que el servidor Zabbix pueda manejar.<br>
 +
Tras la configuración del fichero, debemos reiniciar el servicio de los agentes.
 +
<br>
 +
{|
 +
|-
 +
|
 +
    sudo service zabbix-agent restart
 +
|}
 +
<br><br>
 +
[[#Zabbix | Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
  
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)
+
===== Templates servidor Zabbix=====
 
+
<br><br>
pcs cluster setup CLmutuaint  nodo-vc-01 nodo-vc-02 --start --enable --force
+
El uso de plantillas sirve para reducir la carga de trabajo y agilizar la configuración de Zabbix, facilitando la tarea de:<br>
 
+
: - Registrar equipos y dispositivos,<br>
Si todo ha ido bien la salida debería ser algo como esto.
+
: - Agregarles métricas,<br>
 
+
: - Acelerar el despliegue de las tareas de supervisión en un host,<br>
[[File:cluster10.png|500px]]
+
: - Aplicar cambios masivos a tareas de supervisión,<br>
 
+
: - Etc.
Lo habilitamos '''''en todos los nodos'''''
+
<br><br>
 
+
Cada template está compuesta por entidades: items, trigers, alarms, graphs,... etc.<br>
pcs cluster enable --all
+
Las plantillas están vinculados directamente a los hosts específicos, por tanto es necesario utilizarlas individualmente en cada host.<br>
 
+
Cuando una plantilla se vincula a un host todas las entidades de esta se agregan al host.<br>
La salida será:
+
Cuando se debe cambiar algo en todos los hosts, si se cambia algo en el nivel de plantilla una vez, el cambio se propagará a todos los hosts vinculados.<br>
 
+
En '''MD'''tel se han creado plantillas propias que facilitan estos procesos, las cuales es necesario [[#Importar templates | importar]].<br>
<span style="color:#007bca">VC-CORP-CDS-MAD-01: Cluster Enabled
+
A continuación, se muestran los distintos bloques funcionales de la instalación en función de cada template:<br>
VC-CORP-CDS-MAD-02: Cluster Enabled</span>
+
<br><br>
 
+
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none; text-align:center;"
Arrancamos el cluster '''en todos los nodos'''
+
|-
 
+
! Templates !! Se instalan en general
pcs cluster start --all
+
|-
 
+
| DRBD|| SI (si clúster)
 
+
|-
[[File:cluster11.png|500px]]
+
| motorSal|| -
 
+
|-
Comprobamos que todo está correcto con el siguiente comando:
+
| Vivait-Suite ACD|| -
 
+
|-  
Nos mostrara el estado del cluster.
+
| Vivait-Suite BBDD|| -
 
+
|-
[[File:cluster12.png|700px]]
+
| Vivait-Suite Record|| -
 
+
|-
 
+
| Vivait-Suite GW|| -
En la salida del comando, vemos que STONITH (Shoot The Other Node In The Head) esta activado, pero no hay dispositivos configurados.
+
|-  
 
+
| Vivait-Call Asterisk|| -
Quitamos el STONITH.
+
|-
 
+
| Vivait-Call bdCentral|| -
pcs property set stonith-enabled=false --force
+
|-
 
+
| Vivait-Call bdNodo|| si
 
+
|-
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.
+
| cambiarPerfil_Cal|| -
 
+
|-
pcs property set no-quorum-policy=ignore --force
+
| Template App Zabbix Server|| -
 
+
|-
 
+
| Template_OS_Linux*|| si(si no posee ip virtuales de clúster)
Vamos a ver la lista de propiedades del cluster para ver que hemos deshabilitado todo correctamente.
+
|-
 
+
| Template_App_MySQL|| si
pcs property list
+
|-
 
+
|}
 
+
<br><br>
[[File:cluster13.png|500px]]
+
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none; text-align:center;"
 
+
|+ '''Dependiendo del tipo de nodo:'''
 
+
|-
 
+
! Templates !! ACD !! Corporativo/GW
====== Creación de las IP flotantes (En 1 nodo) ======
+
|-
 
+
| DRBD|| - || -
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.
+
|-  
 
+
| motorSal|| - || -
Creamos la IP para el mysql.
+
|-
 
+
| Vivait-Suite ACD|| Si || -
pcs resource create IP-MYSQL ocf:heartbeat:IPaddr2 ip=128.1.4.205 nic=eno1:0 cidr_netmask=16 op monitor interval=60s
+
|-
 
+
| Vivait-Suite BBDD|| - || -
Y la IP para el Asterisk
+
|-
 
+
| Vivait-Suite Record|| - || -
pcs resource create IP-ASTER ocf:heartbeat:IPaddr2 ip=128.1.4.207 nic=eno1:1 cidr_netmask=16 op monitor interval=60s
+
|-
 
+
| Vivait-Suite GW|| - || Si
Comprobamos el estado del cluster.
+
|-
+
| Vivait-Call Asterisk|| - || Si
pcs status
+
|-
 
+
| Vivait-Call bdCentral|| - || -
Nos mostrará los nuevos recursos creados y nos indicará en que nodo han sido arrancados.
+
|-
 
+
| Vivait-Call bdNodo|| - || -
 
+
|-
[[File:cluster14.png|600px]]
+
| cambiarPerfil_Cal|| - || -
 
+
|-
 
+
| Template App Zabbix Server|| - || -
 
+
|-  
====== Configuración del drdb. (En 1 nodo) ======
+
| Template_OS_Linux*|| - || -
 
+
|-  
 
+
| Template_App_MySQL|| - || -
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.
+
<br><br>
 
+
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none; text-align:center;"
pcs cluster cib drbd_mysql_cfg
+
|+ '''Dependiendo del tipo de Base de dato'''s:
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
+
! Templates !! BBDD <br />Tiempo Real !! BBDD<br /> Réplica !! BBDD Copia
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
+
| DRBD|| - || - || -
 
+
|-
Y lo mismo para el drbd de asterisk.
+
| motorSal|| Si(si ACD) || - || -
 
+
|-  
pcs cluster cib drbd_aster_cfg
+
| Vivait-Suite ACD|| - || - || -
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
+
| Vivait-Suite BBDD|| si || si || si
pcs cluster cib-push drbd_aster_cfg
+
|-  
pcs cluster cib drbd_aster_cfg
+
| Vivait-Suite Record|| - || - || -
pcs cluster cib-push drbd_aster_cfg
+
|-  
 
+
| Vivait-Suite GW|| - || - || -
 
+
|-
Miraremos el estado del cluster
+
| Vivait-Call Asterisk|| - || - || -
 
+
|-
pcs status
+
| Vivait-Call bdCentral|| si || - || -
 
+
|-
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.
+
| Vivait-Call bdNodo|| - || - || -
 
+
|-
[[File:cluster15.png|700px]]
+
| cambiarPerfil_Cal|| - || - || -
 
+
|-
 
+
| Template App Zabbix Server|| - || - || -
====== Montar las particiones del drbd. (En 1 nodo) ======
+
|-
 
+
| Template_OS_Linux*|| - || - || -
Formatearemos las particiones del drbd.
+
|-
 
+
| Template_App_MySQL|| - || - || -
mkfs.ext4 /dev/drbd1
+
|-
mkfs.ext4 /dev/drbd0
+
|}
 
+
<br><br>
Una vez finalizado el proceso la pantalla mostrará a siguiente información (para cada comando).
+
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none; text-align:center;"
 
+
|-
[[File:cluster16.png|700px]]
+
! Templates !! Administración
 
+
|-
 
+
| DRBD|| -
Ahora crearemos el recurso para montar la partición de mysql en el directorio que creamos.
+
|-
 
+
| motorSal|| -
Vamos a crear restricciones para asegurarnos que los recursos estén todos en el nodo correcto y que arrancan en orden.
+
|-
 
+
| Vivait-Suite ACD|| -
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.
+
|-  
 
+
| Vivait-Suite BBDD|| -
pcs cluster cib fs_mysql_cfg
+
|-  
pcs -f fs_mysql_cfg resource create DRBDfsMYSQL Filesystem device="/dev/drbd0" directory="/HDmysql" fstype="ext4"
+
| Vivait-Suite Record|| -  
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
+
| Vivait-Suite GW|| -  
pcs -f fs_mysql_cfg constraint colocation add IP-MYSQL with DRBDfsMYSQL INFINITY
+
|-  
pcs -f fs_mysql_cfg constraint order DRBDfsMYSQL then IP-MYSQL
+
| Vivait-Call Asterisk|| -
pcs cluster cib-push fs_mysql_cfg
+
|-
pcs status
+
| Vivait-Call bdCentral|| -
 
+
|-
La salida mostrará lo siguiente:
+
| Vivait-Call bdNodo|| -
 
+
|-
[[File:cluster17.png|700px]]
+
| cambiarPerfil_Cal||SI (si posee servidor calendarios)
 
+
|-  
Nos indica que el Filesystem está creado y montado en el nodo nodo-vc-01.
+
| Template App Zabbix Server|| -  
 
+
|-
Ahora haremos lo mismo para la partición de Asterisk.
+
| Template_OS_Linux*|| -
 
+
|-
pcs cluster cib fs_aster_cfg
+
| Template_App_MySQL|| -
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
+
<br><br>
pcs -f fs_aster_cfg constraint colocation add IP-ASTER with DRBDfsASTER INFINITY
+
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none; text-align:center;"
pcs -f fs_aster_cfg constraint order DRBDfsASTER then IP-ASTER
+
|-  
pcs cluster cib-push fs_aster_cfg
+
! Templates !! Servidor de grabaciones
pcs status
+
|-  
 
+
| DRBD|| -  
Vemos que ya tenemos las 2 particiones montadas.
+
|-
 
+
| motorSal|| -
[[File:cluster18.png|700px]]
+
|-
 
+
| Vivait-Suite ACD|| -
 
+
|-
======  Copiar datos de Asterisk a partición drbd. (En nodo 1) ======
+
| Vivait-Suite BBDD|| -
 
+
|-
Esto hay que realizarlo en el nodo en el que está montada la partición drbd para asterisk. Estará montado en la carpeta /HDaster
+
| Vivait-Suite Record|| Si
 
+
|-
cd /HDaster/
+
| Vivait-Suite GW|| -
tar -zcvf etc-asterisk.tgz /etc/asterisk
+
|-  
tar -zxvf  etc-asterisk.tgz
+
| Vivait-Call Asterisk|| -  
rm etc-asterisk.tgz
+
|-  
tar -zcvf var-lib-asterisk.tgz /var/lib/asterisk
+
| Vivait-Call bdCentral|| -
tar -zxvf  var-lib-asterisk.tgz
+
|-  
rm var-lib-asterisk.tgz
+
| Vivait-Call bdNodo|| -  
tar -zcvf usr-lib-asterisk.tgz /usr/lib/asterisk
+
|-  
tar -zxvf  usr-lib-asterisk.tgz
+
| cambiarPerfil_Cal||-
rm usr-lib-asterisk.tgz
+
|-  
tar -zcvf var-spool-asterisk.tgz /var/spool/asterisk
+
| Template App Zabbix Server|| -  
tar -zxvf  var-spool-asterisk.tgz
+
|-  
rm var-spool-asterisk.tgz
+
| Template_OS_Linux*|| -  
 
+
|-  
======  Borrar los directorios de asterisk y crear enlaces simbólicos. (En los 2 nodos) ======
+
| Template_App_MySQL|| -  
 
+
|-
Borraremos los directorios y crearemos los enlaces simbólicos necesarios.
+
|}
 
+
<br><br>
 
+
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none; text-align:center;"
rm -rf /etc/asterisk
+
|+ '''Monitorización'''
ln -s /HDaster/etc/asterisk /etc/asterisk
+
|-  
 
+
! Templates !! General !! Contact Center
rm -rf /var/lib/asterisk
+
|-  
ln -s /HDaster/var/lib/asterisk /var/lib/asterisk
+
| DRBD|| - || -
 
+
|-  
rm -rf /usr/lib/asterisk
+
| motorSal|| - || -
ln -s /HDaster/usr/lib/asterisk /usr/lib/asterisk
+
|-  
 
+
| Vivait-Suite ACD|| - || -
rm -rf /var/spool/asterisk
+
|-  
ln -s /HDaster/var/spool/asterisk /var/spool/asterisk
+
| Vivait-Suite BBDD|| - || -
 
+
|-
 
+
| Vivait-Suite Record|| - || -
====== Copiar datos de mysql a partición drbd. (En 1 nodo) ======
+
|-
 
+
| Vivait-Suite GW|| - || -
Esto hay que realizarlo en el nodo en el que está montada la partición drbd para mysql. Estará montado en la carpeta /HDmysql
+
|-
 
+
| Vivait-Call Asterisk|| - || -
cd /HDmysql/
+
|-
tar -zcvf var-lib-mysql.tgz /var/lib/mysql
+
| Vivait-Call bdCentral|| - || -
tar -zxvf  var-lib-mysql.tgz
+
|-  
tar -zcvf etc-mysql.tgz /etc/mysql
+
| Vivait-Call bdNodo|| - || -
tar -zxvf  etc-mysql.tgz
+
|-  
 
+
| cambiarPerfil_Cal|| - || -
 
+
|-  
======  Borrar los directorios de mysql y crear enlaces simbólicos. (En los 2 nodos) ======
+
| Template App Zabbix Server|| si || -  
 
+
|-
Los datos contenidos en estos directorios ya no son válidos, borramos los directorios.
+
| Template_OS_Linux*|| - || -
 
+
|-
Los enlaces simbólicos no van a ser necesarios, los vamos a conservar para facilitar el acceso a los directorios de mysql habituales
+
| Template_App_MySQL|| - || -
 
+
|-
rm -rf /var/lib/mysql
+
|}
ln -s /HDmysql/var/lib/mysql /var/lib/mysql
+
<br><br>
rm -rf /etc/mysql
+
====== Resumen de plantillas '''''MD'''Tel'' ======
ln -s /HDmysql/etc/mysql /etc/mysql
+
<br><br>
 
+
{| class="wikitable"
 
+
|-
======  Modificar configuración de apparmor para mysql. (En los 2 nodos) ======
+
!Plantillas MDTEL !! Trigger !! Descripción !! Severidad !! Actuación a llevar a cabo
 
+
|-
Debemos cambiar la configuración de apparmor para darle a mysql acceso a la nueva localización de los ficheros.
+
|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).
Debemos modificar el fichero /etc/apparmor.d/usr.sbin.mysqld
+
|-
 
+
|Template DRBD||DRBD desconectado en {HOST.NAME}||El DRBD esta desconectado en Host||Desastre||Revisar Host. Comprobar estado del DRBD (cat /proc/drbd)
vi /etc/apparmor.d/usr.sbin.mysqld
+
|-
 
+
|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
 
+
|-
Y dejarlo configurado con la nueva ubicación de los ficheros. Debe quedar así:
+
|Template motorSal||motorSal caido||El motorSal esta caido||Desastre||Reiniciar motorSal.  
 
+
Revisar log (var/log/motorsal.log) para averiguar la causa
 
+
|-
[[File:cluster19.png|300px]]
+
|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.
[[File:cluster20.png|300px]]
+
|-
 
+
|Template Vivait-Call Asterisk||Error en enrutamiento||Error en enrutamiento||Baja||Revisar full de asterisk para comprobar donde está el error.  
Aplicamos los cambios con:
+
Corregir (añadir prerutas o lo que sea necesario).
 
+
|-
apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
+
|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
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
+
|-
 
+
|Template Vivait-Call Asterisk||No hay trunks activos||No hay trunks activos||Baja||Revisar full de asterisk para comprobar donde está el error.  
======  Modificar archivos de configuración de mysql. (En 1 nodo) ======
+
Revisar enlaces en portal.
 
+
|-
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.
+
|Template Vivait-Call bdCentral||Error en bdCentral||Se ha dado un error en el bdCentrlal||Alta||Revisar BBDD central.
 
+
|-
Esto hay que realizarlo en el nodo que tiene montada la partición /HDmysql.
+
|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.
 +
|-
 +
|}
 +
<br><br>
 +
* 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
 +
<br><br>
  
Modificamos el fichero my.cnf.fallback
+
====== Importar templates ======
 +
<br><br>
 +
Las plantillas propias de '''''MD'''tel'' se encuentran en la ruta "'''/usr/src/nimitz/archivos'''" y empiezan con el nombre de "TemplateXXX.xml".
 +
<br><br>
 +
{|
 +
|-
 +
|
 +
  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'''
 +
|}
 +
<br><br>
 +
La importación se realizará desde cualquier computadora con acceso al portal web de Zabbix.
 +
<br><br>
 +
[[File:zabbix_importar.png|600px|center]]
 +
<br><br>
 +
Hay varias opciones a elegir para importación de ''templates'', pero se puede dejar por defecto las señaladas y pulsar el botón ''Importar''.
 +
<br><br>
 +
[[#Zabbix | Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
  
  vi /HDmysql/etc/mysql/my.cnf.fallback
+
==== Configuración inicial de Zabbix ====
 
+
<br><br>
 
+
A continuación se describe una configuración básica de Zabbix para cualquier equipo que utilice Windows o Linux.<br>
Deberá quedar así.
+
Mediante la definición de hosts, items, triggers y acciones, Zabbix permite efectuar un monitoreo efectivo de plataformas IT heterogéneas.
 
+
<br><br>
 
+
===== Configuración de los equipos (host) para la monitorización =====
[[File:cluster21.png|300px]]
+
<br><br>
 
+
{|
Ahora el fichero mysql.cnf.
+
|-
 +
|
 +
'''Nota'''<br>
 +
Debe tenerse en cuenta que debe 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 se registra en Zabbix, corresponde al dispositivo que se desea monitorizar.
 +
: * '''Host virtual''': es una dirección IP virtual, que puede relacionarse con un servidor Web, clusters, etc.
 +
<br><br>
 +
[[File:zabbix_host.png|1000px|center]]
 +
<br><br>
 +
Las opciones basicas para configurar un host son las siguientes:
 +
<br><br>
 +
{| 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 al que pertenecerá el host.
 +
|| Seleccionar uno o varios de los valores que aparecen tras pulsar el botón ''Seleccionar''.<br>
 +
El cuadro desplegado se muestra más abajo.
 +
|-
 +
| 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
 +
|}
 +
<br><br>
 +
[[File:zabbix_grupos.png|400px|center]]
 +
<br><br>
 +
Pulsar el botón Guardar el nuevo "Host" se mostrará en la lista de "Host registrados".<br>
 +
Después el Zabbix se conectará a la IP configurada, repitiendo el proceso según un tiempo programado.  
 +
<br><br>
 +
====== Comprobación de disponibilidad del host ======
 +
<br><br>
 +
Para comprobar el estado del host solo es necesario comprobar en el listado de host la columna ''Disponibilidad'' (Availability). 
 +
<br><br>
 +
[[File:zabbix_disponibilidad.png|1400px|center]]
 +
<br><br>
 +
Los colores del botón ZBX de la columna ''Availability'' indican el estado del host:<br>
 +
: *  Si el botón ZBX en la columna de disponibilidad es de color rojo, indica que hay un error en la comunicación. Posicionando el cursor del ratón sobre él permite ver un mensaje de error informativo.<br>
 +
: *  Si el botón ZBX es gris, significa que el host está en proceso de comunicación con el "Agente Zabbix". Comprobar que el servidor Zabbix está en marcha, y proceder a actualizar la página más tarde. El tiempo estimado para revisar si existe problemas es de 5 minutos.
 +
: *  Si el botón ZBX es verde indica que está funcionando correctamente.
 +
<br><br>
  
vi /HDmysql/etc/mysql/mysql.cnf
+
===== Asignar Templates (plantilas) al host =====
 +
<br><br>
 +
Tras [[#Importar templates |importar templates]] y de forma opcional se pueden al host ya creado.<br>
 +
Para ello se edita el host ya configurado, y en su pestaña ''Templates'' y pulsando ''Select'' se añaden las plantillas adecuadas.
 +
<br><br>
 +
[[File:zabbix_template.png|800px|center]]
 +
<br><br>
 +
Una vez seleccionados las plantillas correspondientes pulsar el botón ''Update'' para activar los cambios.
 +
<br><br>
  
Y quedará así.
+
===== Asignar Items al host =====
 
+
<br><br>
[[File:cluster22.png|400px]]
+
{|
 
+
|-
El fichero mysqld.cnf.
+
|
 
+
'''Nota'''<br>
vi /HDmysql/etc/mysql/mysql.conf.d/mysqld.cnf
+
Un host puede tener un item sin necesitad de tener template.
 
+
|}
[[File:cluster23.png|400px]]
+
<br><br>
 
+
Todos lo items se agrupan por host, esto significa que cada host tiene sus propios "Módulos que recogen datos del Host".<br>
 
+
Para agregar un nuevo módulo se selecciona en la lista del host el host deseado al cual se le va a añadir un nuevo ''Item''.<br>
Y por último el fichero my.cnf.
+
Al seleccionar el host se selecciona la pestaña ''Items'' y se pulsa el botón ''Create Item'' en la parte superior derecha de la pantalla.
 +
<br><br>
 +
[[File:zabbix_items.png|1000px|center]]
 +
<br><br>
 +
Campos necesarios para una configuración básica:
 +
<br><br>
 +
{| 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'''
 +
| | Define el nombre para el item.<br>
 +
Va a ser el identificador para todas la gestiones en donde lo involucremos como el caso de Triggers.
 +
| |
 +
|-
 +
| font-weight: bold;" | '''Type'''
 +
| | Indica de que entidad se quiere recibir información.
 +
| | Puede ser al "Zabbix agent" o hardware como impresoras, switch o routers. 
 +
|-
 +
| font-weight: bold;" | '''Key'''
 +
| | Parámetros de Zabbix.<br>
 +
Permiten indicar específicamente que tipo de información se va a solicitara a la entidad.<br>
 +
Se puede considerar también como el nombre de alguna aplicación.
 +
| |
 +
|-
 +
| font-weight: bold;" | '''Host interface'''
 +
| | Dirección de red del host (puede ser uno o mas)
 +
| |
 +
||
 +
|-
 +
| font-weight: bold;" | '''Type of information'''
 +
| | Tipo de datos almacenados en la BBDD después de la conversión adecuada, si la hay.
 +
| | Valores posibles:<br>
 +
: - '''Numeric (unsigned)''' - número entero de 64-bit
 +
: - '''Numeric (float)''' - número entero de coma flotande de 64-bit. Este tipo permitirá una precisión de 15 dígitos y un rango aproximado de -1.79E+308 a 1.79E+308. Este tipo soporta notación científica. P.e., 1.23E+7, 1e308, 1.1E-4.<br>
 +
: - '''Character''' - texto corto
 +
: - '''Log''' - texto largo con propiedades relativas a log (timestamp, source, severity, logeventid)
 +
: - '''Text''' - texto largo.
 +
Para las items que devuelven datos solo en un formato específico, el tipo de información coincidente se selecciona automáticamente.
 +
|}
 +
<br><br>
 +
Para una información más detallada consultar [https://www.zabbix.com/documentation/6.0/es/manual/config/items items]
 +
<br><br>
 +
Para validar el nuevo item a añadir al host hacer clic en el botón ''Add''. El nuevo item debe aparecer en la lista de items asociados al host.
 +
<br><br>
 +
====== Ver la información recolectada por el item ======
 +
<br><br>
 +
{|
 +
|-
 +
|
 +
'''Nota'''<br>
 +
Normalmente para ver la información se encontrará en "Monitoring → Latest data", se despliega el host y se  elige el item deseado,<br>
 +
siempre que no pertenezca a una aplicación en cuyo caso estará bajo el nombre de la aplicación.
 +
|}
 +
<br><br>
 +
Después de definir el "Item" es conveniente revisar la información que se está recolectando. <br>
 +
La información comenzará a ser recolectada según el tiempo que se ha indicado en el campo ''Timeout'' del ''Item''.
 +
<br><br>
 +
[[File:zabbix_item_timeout.png|1000px|center]]
 +
<br><br>
 +
La espera para recibir información varía dependiendo del tiempo de recolección del item, la mayoría suele ser aproximadamente al minuto de crearlo.<br>
 +
Zabbix ofrece la opción de visualizar la información en forma gráfica (sencilla). En la lista de item de un host, dentro del menú ''Monitoring - Latest Data'', se puede invocar el botón ''Graph''.<br>
 +
Aparece una ventana donde se muestra de forma gráfica la información disponible, pudiendo en la parte superior derecha de la misma elegir el periodo que se desea mostrar.
 +
<br><br>
 +
[[File:zabbix_item_graph.png|1000px|center]]
 +
<br><br>
 +
Si no se observa información se pueden realizar las siguientes acciones:<br>
 +
: * Comprobar que el host tiene un item con el campo ''Key = system.cpu.load''.<br>
 +
: * Verificar que el agente esta funcionando en el host monitorizado y que el servidor Zabbix está funcionando.<br>
 +
: * El icono "ZXB" en el host debe estar en color verde.<br>
 +
: * Asegurarse que se está monitoreando el servidor correcto.
 +
<br><br>
  
vi /HDmysql/etc/mysql/my.cnf
+
===== Configurar Triggers para un host =====
 
+
<br><br>
Y quedara de la siguiente manera. (datadir / log_bin / includedir)
+
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.<br>
 
+
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.
 
+
<br><br>
[[File:cluster24.png|500px]]
+
{|
 
+
|-
 
+
|
[[File:cluster25.png|500px]]
+
'''Nota'''<br>
 
+
Un trigger necesita una ''accion'', que indica que hacer cuando se activa el trigger.
 
+
|}
[[File:cluster26.png|400px]]
+
<br><br>
 
+
Un trigger (iniciador) es un tipo de reacción ante unas medidas, como un disparador en el que si pasa algo se activa.<br>
 
+
Los Trigger en Zabbix son módulos que se crean en uno o múltiples items para evaluar o comparar los valores recolectados por estos con las condiciones establecidas para el sistema.<br>
====== Configuración del arranque de mysql. (En 1 nodo) ======
+
Estas condiciones pueden ser de tipo aritmético y lógico.
 
+
<br><br>
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.
+
Para configurar un ''trigger'' o ''iniciador'' se siguen los siguientes pasos:
 
+
<br><br>
pcs cluster cib mysql_cfg
+
'''Paso 1''': Seleccionar "Configuration → Hosts".<br>
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
+
'''Paso 2''': Elegir el "Host" deseado y luego hacer clic en "Trigger".<br>
pcs -f mysql_cfg constraint colocation add MYSQL with IP-MYSQL INFINITY
+
'''Paso 3:''' Pulsar el botón "Create Trigger". Aparece una ventana mostrando los campos necesarios para configurar un nuevo iniciador.
pcs -f mysql_cfg constraint order IP-MYSQL then  MYSQL
+
<br><br>
pcs cluster cib-push mysql_cfg
+
[[File:zabbix_triggers.png|800px|center]]
pcs status
+
<br><br>
 +
Si lo que se desea es editar un trigger se selecciona en la lista que se muestra asociada al host elegido.
 +
<br><br>
 +
[[File:zabbix_triggers_editar.png|800px|center]]
 +
<br><br>
 +
Parámetros o campos a rellenar para una configuración básica:
 +
<br><br>
 +
{| 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'''
 +
| | Nmbre para el trigger. Este nombre va a ser el identificador para todas la gestiones en donde se invoque, como el caso de los eventos.
 +
| |
 +
|-
 +
| font-weight: bold;" | '''Severity'''
 +
| | Gravedad que se desea que tenga el trigger, distinguida por colores,
 +
| | Elegir uno de los siguientes niveles de gravedad para el trigger:<br>
 +
: Not Classified
 +
: Information
 +
: Warning
 +
: Average
 +
: High
 +
: Disaster
 +
|-
 +
| font-weight: bold;" | '''Expression'''
 +
| | En este campo se indica para que medida se crea (item) y sus funciones con los parámetros adecuados.<br>
 +
Se recomienda usar el enlace ''Expression constructor'' junto con el botón ''ADD'' y que permite crear las condiciones necesarias.
 +
| |Ejemplo: {New host:system.cpu.load.avg(180)}>2
 +
|-
 +
| font-weight: bold;" | '''Descripción'''
 +
| | Una descripción breve sobre el trigger.
 +
| |
 +
|-
 +
| font-weight: bold;" | '''Enable'''
 +
| | Activa o desactiva el trigger.
 +
| |
 +
|-
 +
|}
 +
<br><br>
 +
====== Comprobar el estado de un trigger ======
 +
<br><br>
 +
Se puede ver el estado del trigger para un host en ''Configuration -> Host -> Triggers''.<br>
 +
El  color en caso de que se active depende de la severidad definida.<br>
 +
Por ejemplo observando la columna ''Value'' y con un trigger numérico:<br>
 +
: - Si el trigger está ''OK'' de color verde indica que el resultado de la métrica se mantiene por debajo de la condición de disparo que se ha indicado.<br>
 +
: - Si el trigguer está en ''PROBLEM'' de color rojo indica que el resultado de la métrica está por encima de la condición de disparo configurada.
 +
<br><br>
 +
[[File:zabbix_triggers_severity.png|1000px|center]]
 +
<br><br>
 +
Si el trigger es lógico la indicación verde advierte que se cumple la condición lógica definida, si la indicación es roja la condición lógica no coincide con lo definido en el trigger.<br>
 +
La forma más habitual de supervisar el estado de un host es desde el menú ''Monitoring'', eligiendo el ''Host'' y con el botón derecho sobre él indicar lo que se desea obtener del mismo.
 +
<br><br>
 +
[[File:zabbix_triggers_monitoring.png|1000px|center]]
 +
<br><br>
 +
Para más información sobre trigger consultar [https://www.zabbix.com/documentation/6.0/es/manual/config/triggers iniciadores en el manual de Zabbix 6.0]
 +
<br><br>
  
 +
===== Asociar una Action a triggers =====
 +
<br><br>
 +
Si desea que algunas operaciones se lleven a cabo como resultado de eventos informados por los trigger (por ejemplo, notificaciones enviadas), es necesario configurar acciones asociadas a la información que reportan los trigger.<br>
 +
Las acciones se pueden definir en respuesta a eventos de todos los tipos admitidos:<br>
 +
: - '''Acciones de activación''': para eventos cuando el estado de activación cambia de OK a PROBLEMA y viceversa,
 +
: - '''Acciones de servicio''': para eventos cuando el estado del servicio cambia de OK a PROBLEMA y viceversa,
 +
: - '''Acciones de descubrimiento''': para eventos cuando se lleva a cabo el descubrimiento de la red,
 +
: - '''Acciones de registro automático''': para eventos cuando nuevos agentes activos registro automático (o cambios de metadatos de host para los registrados),
 +
: - '''Acciones internas''': para eventos cuando los elementos dejan de ser compatibles o los disparadores entran en un estado desconocido.
 +
<br><br>
 +
Para crear una configuración se utiliza el menú ''Configuration - Actions''.
 +
<br><br>
 +
[[File:zabbix_trigger_actions.png|1200px|center]]
 +
<br><br>
 +
En '''''MD'''tel'' la acción que se activa, según la información aportada por el trigger, es el envío de un mensaje de correo al Centro del Servicio Técnico '''''VIVA'''it'' (SAT).<br>
 +
En este email se informa el problema detectado en el elemento supervisado para su diagnóstico y solución.<br>
 +
Para más información sobre [https://www.zabbix.com/documentation/6.0/es/manual/config/notifications/action acciones consultar el manual Zabbix 6.0].
 +
<br><br>
 +
[[#Zabbix | Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
  
====== Configuración del arranque de Asterisk. (En 1 nodo) ======
+
=== SerCen ===
 
+
<br><br>
pcs cluster cib aster_cfg
+
Servicios Centrales ( ©SerCen MDtel) es un software desarrollado por MDtel que provee servicios centralizados a muchos elementos de la arquitectura '''''VIVA'''it''.<br>
pcs -f aster_cfg resource create ASTER lsb:asterisk
+
La función principal de SerCen es identificar a los usuarios y garantizar que los mismos sean quienes dicen ser aportando seguridad en el acceso a la plataforma.<br>
pcs -f aster_cfg constraint colocation add ASTER with IP-ASTER INFINITY
+
SerCen es un proceso en segundo plano que se ejecuta automáticamente sobre el sistema operativo (demonio) en la plataforma '''''VIVA'''it''<br>
pcs -f aster_cfg constraint order IP-ASTER then ASTER
+
Dentro de la arquitectura '''''VIVA'''it'' pueden existir varias instancias SerCen y cada una de ellas soportar diferentes servicios.<br>
pcs cluster cib-push aster_cfg
+
Ejemplos de servicios:<br>
pcs status
+
: - '''Autenticación''' de doble o simple factor,<br>
 
+
: - '''Integración''' con proveedores de autenticación,<br>
 
+
: - '''Click2talk''' demonio dentro de '''''VIVA'''it''.<br>
====== Mover los recursos a otra máquina. (En 1 nodo) ======
+
Sercen permite autenticar un usuario mediante doble o simple factor, utilizando para ello la BBDD de '''''VIVA'''it'' y/u otro mecanismo externo, como puede ser el Active Directory de Microsoft.<br>
 
+
SerCen se relaciona con:<br>
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.
+
: - '''BBDD''',<br>
 
+
: - '''Asterisk''' para la funcionalidad Click2talk,
Para mover un recurso de nodo utilizaremos el siguiente comando en el nodo que está el recurso ejecutándose.
+
: - '''VIVAit Meet''' para por ejemplo las funciones ''botón Colaborar'' y ''Recursos compartidos'',
 +
: - '''Portales''' a los que proporciona los servicios vía webservice.
 +
<br><br>
 +
==== Autenticación mediante SerCen ====
 +
<br><br>
 +
Este proceso permite autenticar un usuario, bien mediante autenticación simple factor o doble factor, utilizando para ello la BBDD de '''''VIVA'''it''<br>
 +
Además de SerCen puede existir otro mecanismo externo, como puede ser el Active Directory de Microsoft.<br>
 +
El despliegue de SerCen en VIVAit tiene como objetivo que un usuario que intenta acceder al sistema mediante un portal (Administración, Tracker, WebCall, ...) obtenga una cadena de caracteres aleatoria (tokern) que reemplaza información confidencial, como contraseñas, que debe incluirse en las comunicaciones con el resto de elementos para que estos conozcan que las solicitudes proceden de un usuario autenticado.<br>
 +
Este token también puede utilizarse para que otras aplicaciones puedan ser invocadas desde los portales, como es el caso de WebCall, y no se requiera de un proceso específico de autenticación para cada aplicación.<br>
 +
De modo recíproco estos portales, como WebCall, deben soportar el ser invocados con un token y, en tal caso, considerar que el usuario ya está autenticado.<br>
 +
Para todo esto se asume que cada usuario conoce su clave.<br>
 +
Independientemente de quién gestione la clave, esta puede tener asociados periodos de expiración y de caducidad.<br>
 +
Cuando finaliza el periodo de expiración, el usuario tiene que cambiar la clave obligatoriamente para poder acceder a sus credenciales (token).<br>
 +
Tras la caducidad, ya no puede obtener credenciales válidas.<br>
 +
Cuando la autenticación utiliza las claves almacenadas en la BBDD de '''''VIVA'''it'', SerCen permite cambiar la clave.<br>
 +
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>
 +
[[#SerCen | Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
 +
==== Comandos de SerCen ====
 +
<br><br>
 +
Los diferentes comandos que utiliza SerCen, y que se pueden analizar para diagnóstico en la consola del navegador (tecla F12) son:
 +
<br><br>
 +
{| class="wikitable"
 +
|-
 +
! 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.
 +
|}
 +
<br><br>
 +
====== Comando autenticar1 ======
 +
<br><br>
 +
Este comando se utiliza por SerCen para autenticación de primer factor.<br>
 +
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.<br>
 +
url (POST): https://<servidor_webfon>/sercen/postautenticar1
 +
<br><br>
 +
'''Datos de entrada'''
 +
<br><br>
 +
    '''{"cuenta": "fulano","clave$1aA": "dificil","aplicacion": "webfon","expira": 7200,"clvCambiar": "masdificil$1aA"}'''<br>
 +
<br><br>
 +
* El campo "expira" es opcional y siempre posible. Permite solicitar un periodo de expiración (segs) para el token devuelto.<br>
 +
* El campo "clvCambiar" es opcional y solo se tiene en cuenta si no hay doble factor. Permite cambiar la clave del usuario, si es autenticado.
 +
<br><br>
 +
'''Respuestas'''
 +
<br><br>
 +
En lo que se refiere a las posibles respuestas a autenticar1, pueden darse varios casos:<br>
 +
: - Se produce un error: ejRes1 y ejRes2.<br>
 +
: - 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.<br>
 +
: - 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.<br>
 +
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.<br>
 +
<br><br>
 +
'''Ejemplos de posibles respuestas'''
 +
<br><br>
 +
{| class="wikitable"
 +
|-
 +
! 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}
 +
|}
 +
<br><br>
 +
: * 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.<br>
 +
: * 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.<br>
 +
<br><br>
 +
Al invocar este comando, WebCall 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.<br>
 +
En el caso de WebCall es responsabilidad de la aplicación efectuar una solicitud para revalidar el token, mediante un procedimiento que se describirá posteriormente, tantas veces como considere necesario.<br>
 +
<br><br>
  
pcs resource move DRBDfsASTER
+
====== Comandos autenticar2 ======
 
+
<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).
+
Este comando se utiliza por SerCen para autenticación doble factor.<br>
 
+
Este comando se invoca para autenticar en base a un segundo factor: pin enviado por un medio de transporte independiente.<br>
La restricción que crea banea el nodo para este recurso, si queremos quitar la restricción creada.
+
<br><br>
 
+
    url (POST): https://<servidor_webfon>/sercen/postautenticar2
pcs resource clear DRBDFsAst
+
<br><br>
 
+
'''Datos de entrada'''
 
+
<br><br>
-----------------------------------------------------------------------------------------------------------------------------
+
: '''{"token": "1234567890","pin": "1234","expira": 7200,"clvCambiar": "masdificil$1aA"}'''
 +
<br><br>
 +
* El campo "expira" es opcional y siempre posible. Permite solicitar un periodo de expiración (seg.) para el token devuelto.<br>
 +
* El campo "clvCambiar" es opcional. Permite cambiar la clave del usuario, si es autenticado.
 +
<br><br>
 +
'''Respuestas'''
 +
<br><br>
 +
En lo que se refiere a las posibles respuestas a autenticar2 pueden darse varios casos:
 +
<br><br>
 +
: - 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.
 +
<br><br>
 +
'''Ejemplos de posibles respuestas'''
 +
<br><br>
 +
{| 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}
 +
|}
 +
<br><br>
 +
: * 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.<br>
 +
: * El campo "clvExpira" en la respuesta informa en seg. 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.
 +
<br><br>
 +
El campo que requiere explicación adicional es "token2".<br>
 +
"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 WebCall.<br>
 +
Es decir, el valor de "token2" sólo se requiere para operaciones de gestión del propio token.<br>
 +
Sin "token2" tampoco es posible ejecutar el comando "cambiarClave".
 +
<br><br>
  
==== Instalación y configuración del Cluster hasta la versión '''''<span style="color:#144F9B">VIVA</span>'''''it 3.3 ====
+
====== Comando autenticartokenaad ======
.
+
<br><br>
 +
ESte comando se utiliza por SerCen para autenticar empleando un token de "Azure active directory"
 +
<br><br>
 +
    url (POST): https://<servidor_webfon>/sercen/postautenticartokenaad
 +
<br><br>
 +
'''Datos de entrada'''
 +
<br><br>
 +
'''{"token": "tokenrequetelargao","aplicacion": "webfon","expira": 7200} ("expira" es opcional).'''
 +
<br><br>
 +
'''Respuestas'''
 +
<br><br>
 +
En lo que se refiere a las posibles respuestas a autenticar2 pueden darse varios casos:<br>
 +
: - Se produce un error: ejRes1.
 +
: - Respuesta correcta con o sin doble factor: ejRes2 y ejRes3.
 +
<br><br>
 +
'''Ejemplos de posibles respuestas'''
 +
<br><br>
 +
{| 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}
 +
|}
 +
<br><br>
  
 +
====== Comando validartoken ======
 +
<br><br>
 +
Este comando permite conocer si un token es válido y su periodo de expiración.
 +
<br><br>
 +
    url (POST): https://<servidor_webfon>/sercen/postvalidartoken
 +
<br><br>
 +
'''Datos de entrada'''
 +
<br><br>
 +
    '''{"token": "1234567890"}'''
 +
<br><br>
 +
'''Ejemplos de posibles respuestas'''
 +
<br><br>
 +
: - Se produce un error: ejRes1 y ejRes2.
 +
: - Respuesta correcta: ejRes3 indica validez del token y su tiempo de expiración en segundos.
 +
<br><br>
 +
{| class="wikitable"
 +
|-
 +
! Ejemplo !! Respuesta
 +
|-
 +
| ejRes1 || {"errorNum": 100,"errorCad": "Token expirado"}
 +
|-
 +
| ejRes2 || {"errorNum": 103,"errorCad": "Token incorrecto"}
 +
|-
 +
| ejRes3 || {"errorNum": 0,"errorCad": "OK","expira": 2538}
 +
|}
 +
<br><br>
  
 +
====== Comando revalidartoken ======
 +
<br><br>
 +
Este comando permite ampliar el periodo de expiración de un token. El periodo ampliado es el que se indica en la respuesta.
 +
<br><br>
 +
    url (POST): https://<servidor_webfon>/sercen/revalidartoken
 +
<br><br>
 +
'''Datos de entrada'''
 +
<br><br>
 +
  '''{"token": "1234567890","token2": "0987654321","expira": 7200} ("expira" es opcional).'''
 +
<br><br>
 +
'''Ejemplos de posibles respuestas'''
 +
<br><br>
 +
: - Se produce un error: ejRes1 y ejRes2.
 +
: - Respuesta correcta: ejRes3 indica validez del token y su tiempo de expiración en segundos.
 +
<br><br>
 +
{| class="wikitable"
 +
|-
 +
! Ejemplo !! Respuesta
 +
|-
 +
| ejRes1 || {"errorNum": 100,"errorCad": "Token expirado"}
 +
|-
 +
| ejRes2 || {"errorNum": 103,"errorCad": "Token incorrecto"}
 +
|-
 +
| ejRes3 || {"errorNum": 0,"errorCad": "OK","expira": 3600}
 +
|}
 +
<br><br>
  
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:
+
====== Comando revocartoken ======
 
+
<br><br>
 +
Este comando permite revocar un token.
 +
<br><br>
 +
    url (POST): https://<servidor_webfon>/sercen/postrevocartoken
 +
<br><br>
 +
'''Datos de entrada'''
 +
<br><br>
 +
'''{"token": "1234567890","token2": "0987654321"}'''
 +
<br><br>
 +
'''Ejemplos de posibles respuestas'''
 +
<br><br>
 +
: - Se ha producido un error, token incorrecto, ejResp1.<br>
 +
: - Respuesta correcta, ejeResp2.
 +
<br><br>
 +
{| class="wikitable"
 +
|-
 +
! Ejemplo !! Respuesta
 +
|-
 +
| ejRes1 || {"errorNum": 103,"errorCad": "Token incorrecto"}
 +
|-
 +
| ejRes2 || {"errorNum": 0,"errorCad": "OK"}
 +
|}
 +
<br><br>
  
'''[[Instalación y configuración del Cluster hasta la versión VIVAit 3.3]]'''
+
====== Comando cambiarClave ======
 +
<br><br>
 +
Este comando permite que un usuario autenticado cambie su clave y amplíe el periodo de expiración y de caducidad.
 +
<br><br>
 +
    url (POST): https://<servidor_webfon>/sercen/postcambiarclave
 +
<br><br>
 +
'''Datos de entrada'''
 +
<br><br>
 +
    '''{"token": "1234567890","token2": "0987654321","clvCambiar": "masdificil$1aA"}'''
 +
<br><br>
 +
'''Ejemplos de posibles respuestas'''
 +
<br><br>
 +
: - Clave no adecuada: ejRes1, ejRes2, ejRes3, ejRes4, ejRes5.<br>
 +
: - Clave correcta: ejeRes6.
 +
<br><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}
 +
|-
 +
|}
 +
<br><br>
  
 
+
===== Posibles errores =====
 
+
<br><br>
 
+
A continuación se muesta la lista de posibles respuestas que proporciona SerCen cuando se le invoca con el comando correspondiente:
 
+
<br><br>
 
+
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none; text-align:center;"
 
+
|-
.
+
! Número de error !! Descripción breve
 
+
|-
=== Servicios networking ===
+
| 0 || OK
Son muy importantes las configuraciones adecuadas de los servicios de:
+
|-
 
+
| 100 || Token expirado
* '''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
+
|-
 
+
| 101 || Pin expirado
* '''DNS''': La configuración de DNS de la plataforma será coherente con el resto de la plataforma IT del cliente
+
|-
 
+
| 102 || Clave incorrecta
* '''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
+
|-
 
+
| 103 || Token incorrecto
=== Bases de datos (BBDD)===
+
|-
 
+
| 104 || Token2 incorrecto
 
+
|-
 
+
| 105 || Pin incorrecto
==== Diagnósticos y operaciones sobre bases de datos ====
+
|-
 
+
| 106 || Token comprometido
=====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'''
+
| 107 || Token anulado
 
+
|-
Si la base de datos está arrancada y funcionando correctamente se nos mostrará en el terminal:
+
| 108 || Token inválido
[[Archivo:Base_Datos_bien.png‎ |500px|center]]
+
|-
 
+
| 115 || Clave caducada
Por el contrario, si la base de datos presenta algun problema el mensaje mostrado será:
+
|-
 
+
| 116 || Clave expirada
[[Archivo:Base_datos_mal.png |center]]
+
|-
 
+
| 117 || Clave demasiado simple
=====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.
 
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
 
 
 
=== 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`
+
| 118 || Clave con caracteres no soportados
 
|-
 
|-
|10||accionLog_escuchar_seg||Escuchar segmento|| || || || || ||  
+
| 119 || Clave no admite cambio
 
|-
 
|-
|20||accionLog_escuchar_lla||Escuchar llamada|| || || || || ||
+
| 120 || Clave repetida
 
|-
 
|-
|30||accionLog_descargar_seg||Descargar segmento|| || || || || ||
+
| 400 || Error en datos de entrada
 
|-
 
|-
|40||accionLog_descargar_lla||Descargar llamada|| || || || || ||
+
| 401 || Error registro de extensión
 
|-
 
|-
|50||accionLog_generar_config||Generar configuración|| || || || || ||
+
| 402 || Error en el estado del dispositivo
 
|-
 
|-
|60||accionLog_cambiar_clave_propia||Cambiar clave propia|| || || || || ||
+
| 403 || Error en el estado de la media con el navegador
 
|-
 
|-
|65||accionLog_login_correcto||Login correcto||||idUsuario||nivelSupervisor|| ||
+
| 404 || No hay línea libre
 
|-
 
|-
|70||accionLog_login_erroneo||Login erroneo|| || || || || ||
+
| 405 || La línea no está libre
 
|-
 
|-
|80||accionLog_login_multiple||Login multiple|| || || || || ||
+
| 406 || La línea es errónea
 
|-
 
|-
|90||accionLog_escuchar_ext||Escuchar Extensión|| || || || || ||
+
| 407 || Línea en estado erróneo
 
|-
 
|-
|100||accionLog_chg_objetivo_peso||Modificar nivel servicio|| ||idCola||objetivo||peso|| ||
+
| 408 || JSEP obligatorio
 
|-
 
|-
|105||accionLog_add_agente_cola_bd||Añadir agente a grupo BD|| ||idCola||agente||prioridad||obligatorio||
+
| 409 || JSEP ‘offer’ obligatorio
 
|-
 
|-
|115||accionLog_del_agente_cola_bd||Quitar agente de grupo BD|| ||idCola||agente|| ||
+
| 410 || Cifrado extremo a extremo no soportado
 
|-
 
|-
|125||accionLog_prio_agente_cola_bd||Modificar prioridad agente en grupo BD|| ||idCola||agente||prioridad||obligatorio|| 
+
| 411 || Canal de datos no soportado
 
|-
 
|-
|135||accionLog_perfil_agente_bd||Asignar perfil a agente BD|| ||idAgente||perfil||  ||||
+
| 412 || Comando desconocido
 
|-
 
|-
|140||accionLog_add_agente||Añadrid agente|| || ||  || || ||  
+
| 413 || No hay recursos
 
|-
 
|-
|145||accionLog_del_agente||Borrar agente|| || ||  || || ||
+
| 414 || No hay conferencia libre
 
|-
 
|-
|150||accionLog_chg_agente||Modificar agente|| ||idAgente|| || ||nombre||cuenta
+
| 415 || Error conferencia
 
|-
 
|-
|155||accionLog_add_agenda_perfil||Añadir agenda a perfil|| ||idPerfil||idAgenda||  || ||
+
| 416 || Línea no conectada
 
|-
 
|-
|160||accionLog_del_agenda_perfil||Borrar agenda de perfil|| ||idPerfil||idAgenda||  || ||
+
| 500 || Error interno
|-
+
|}
|165||accionLog_add_entrada_agenda||Añadir entrada a agenda|| || ||idAgenda|| ||nombre||numero
+
<br><br>
|-
+
[[#SerCen | Volver arriba]]
|170||accionLog_del_entrada_agenda||Borrar entrada de agenda|| ||idEntrada||idAgenda|| ||nombre||numero
+
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
|-
+
<br><br>
|175||accionLog_chg_entrada_agenda||Modificar entrada de agenda|| ||idEntradaAgenda|| || ||nombre||numero
+
 
|-
+
==== Diagnóstico en SerCen ====
|180||accionLog_add_agenda||Añadir agenda|| || || || ||nombre||descripción
+
<br><br>
|-
+
En SerCen se puede monitorizar, mediante log y comandos, el funcionamiento del servicio, esto permite realizar un diagnostico ante un posible mal funcionamiento de la funcionalidad de autenticación de usuarios.
|185||accionLog_del_agenda||Borrar agenda|| || ||   || || ||
+
<br><br>
|-
+
===== Comandos en SerCen =====
|190||accionLog_chg_agenda||Modificar agenda|| ||idAgenda|| || ||nombre||descripción
+
<br><br>
|-
+
'''Diagnóstico del servicio'''
|195||accionLog_add_etiqueta_agente||Añadir etiqueta agente|| || || || ||nombre||descripción
+
<br><br>
|-
+
Se puede monitorizar el funcionamiento del proceso de login de los usuarios. Para ello se invoca el siguiente comando en la consola del nodo donde este corriendo SerCen:
|200||accionLog_del_etiqueta_agente||Borrar etiqueta agente|| ||idEtiqueta|| ||   || ||
+
<br><br>
|-
+
'''systemctl status serCen.service'''
|205||accionLog_chg_etiqueta_agente||Modificar etiqueta agente|| ||idEtiqueta|| || ||nombre||descripción
+
<br><br>
|-
+
Resultado esperado
|210||accionLog_add_rel_etiqueta_agente||Añadir relación etiqueta agente|| ||idEtiqueta|| idUsuario||   || ||
+
<br><br>
|-
+
root@preproducciongestion:~# '''systemctl status serCen.service'''
|215||accionLog_del_rel_etiqueta_agente||Borrar relación etiqueta agente|| ||idEtiqueta|| idUsuario||   || ||
+
● serCen.service - LSB: Start/stop serCen
|-
+
    Loaded: loaded (/etc/init.d/serCen; generated)
|220||accionLog_chg_rel_etiqueta_agente||Modificar relación etiqueta agente|| ||idEtiqueta|| idUsuario||   || ||
+
    '''Active: active (running)''' since Fri 2024-09-20 03:01:08 CEST; 2 weeks 3 days ago
|-
+
      Docs: man:systemd-sysv-generator(8)
|225||accionLog_add_perfil||Añadir perfil|| || || ||   ||nombre||descripción
+
      Tasks: 10 (limit: 4556)
|-
+
    Memory: 5.3M
|230||accionLog_del_perfil||Borrar perfil|| ||idPerfil|| ||   || ||
+
        CPU: 5min 45.154s
|-
+
    CGroup: /system.slice/serCen.service
|235||accionLog_chg_perfil||Modificar perfil|| ||idPerfil|| || ||nombre||descripción
+
            └─749 /usr/sbin/serCen - /etc/MDtel/serCen.conf
|-
+
 
|240||accionLog_add_rel_cola_perfil_bd||Añadir relación grupo ACD/perfil BD|| ||idCola|| idPerfil||prioridad||obligatorio||    
+
Sep 20 03:01:08 preproducciongestion systemd[1]: Starting LSB: Start/stop serCen...
|-
+
Sep 20 03:01:08 preproducciongestion serCen[654]: Starting serCen
|250||accionLog_del_rel_cola_perfil_bd||Borrar relación grupo ACD/perfil BD|| ||idCola|| idPerfil||prioridad||obligatorio||    
+
Sep 20 03:01:08 preproducciongestion systemd[1]: Started LSB: Start/stop serCen.
|-
+
<br><br>
|260||accionLog_chg_rel_cola_perfil_bd||Modificar relación grupo ACD/perfil BD|| ||idCola|| idPerfil||prioridad||obligatorio||    
+
'''Información del servicio'''
|-
+
<br><br>
|265||accionLog_add_cola||Añadir grupo ACD|| || || || ||nombre||descripción
+
Este comando permite obtener información de SerCen. Para ello se invoca el siguiente comando en la consola del nodo donde este corriendo SerCen:
|-
+
<br><br>
|270||accionLog_del_cola||Borrar grupo ACD|| || || || ||  ||
+
'''nc localhost 1125'''
|-
+
<br><br>
|275||accionLog_chg_cola||Modificar grupo ACD|| ||idAgente|| || ||nombre||descripción
+
Resultado esperado:
|-
+
<br><br>
|280||accionLog_add_campanna_cola_bd||Añadir campaña a grupo ACD BD|| ||idCola||idCampanna||  || ||
+
root@preproducciongestion:~# '''nc localhost 1125'''
|-
+
serCen sis ver='00.03.01' inic='20240920 030108' alarmas=44 ultAlar='20241007 080921'
|285||accionLog_del_campanna_cola_bd||Borrar campaña de grupo ACD BD|| || ||  || || ||
+
serCen gmp msj=254/256 buf=256/256 tarea=6/15
|-
+
serCen tmp uptime=1501066 (17d 8h 57m 46s)
|290||accionLog_chg_cola_algor_predic||Cambiar algoritmo predictivo de grupo ACD|| || || || || ||
+
serCen wws conxNum=0 conxMaxPeriodo=0 hilos=4/4 wsi mysCnx=1 appSecretExpire=0
|-
+
serCen wwc numCacheLibre=3 numColaPend=0
|300||accionLog_enviar_msj||Enviar mensaje ||tipo_msj||ambito||id_ambito||N_VAR1||N_VAR2||C_VAR3
+
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=0/0
|305||accionLog_cerrar_sesion||Cerrar sesión|| ||idUsuario||forzado||segundos||fecha||motivo
+
<br><br>
|-
+
'''Reinciar/parar/arrancar el servicio'''
|310||accionLog_activa_campanna_bd||Activar campaña|| ||idCampanna||activa|| ||   ||
+
<br><br>
 +
Se puede reiniciar SerCen. Para ello se invocan el siguiente comando en la consola del nodo donde este corriendo SerCen:
 +
<br><br>
 +
'''systemctl restart/stop/start serCen.service'''
 +
<br><br>
 +
Resultado esperado
 +
<br><br>
 +
Por ejemplo parando el servicio:
 +
<br><br>
 +
root@preproducciongestion:~# '''systemctl stop serCen.service'''
 +
root@preproducciongestion:~# '''systemctl status serCen.service'''
 +
○ serCen.service - LSB: Start/stop serCen
 +
      Loaded: loaded (/etc/init.d/serCen; generated)
 +
      '''Active: inactive (dead)''' since Mon 2024-10-07 12:08:01 CEST; 2s ago
 +
        Docs: man:systemd-sysv-generator(8)
 +
    Process: 199591 ExecStart=/etc/init.d/serCen start (code=exited, status=0/SUCCESS)
 +
    Process: 199615 ExecStop=/etc/init.d/serCen stop (code=exited, status=0/SUCCESS)
 +
        CPU: 101ms
 +
 
 +
Oct 07 12:07:38 preproducciongestion systemd[1]: Starting LSB: Start/stop serCen...
 +
Oct 07 12:07:38 preproducciongestion serCen[199591]: Starting serCen
 +
Oct 07 12:07:38 preproducciongestion systemd[1]: Started LSB: Start/stop serCen.
 +
Oct 07 12:08:00 preproducciongestion systemd[1]: Stopping LSB: Start/stop serCen...
 +
Oct 07 12:08:00 preproducciongestion serCen[199615]: Shutting down serCen
 +
Oct 07 12:08:01 preproducciongestion systemd[1]: serCen.service: Deactivated successfully.
 +
Oct 07 12:08:01 preproducciongestion systemd[1]: serCen.service: Unit process 199598 (serCen) remains run>
 +
Oct 07 12:08:01 preproducciongestion systemd[1]: Stopped LSB: Start/stop serCen.
 +
<br><br>
 +
 
 +
===== Log en SerCem =====
 +
<br><br>
 +
El log del SerCen se encuentra en el fichero ''serCen.log'' situada en el directorio ''/var/log/serCen/''.<br>
 +
Para monitorizar en tiempo real la actividad de SerCen se puede utilizar el comando:
 +
<br><br>
 +
    tail -f /var/log/serCen/serCen.log
 +
<br><br>
 +
Ejemplos del log de serCen
 +
<br><br>
 +
'''Acceso correcto'''
 +
<br><br>
 +
  20241007 122443.524    SIS Convertido hilo (lwp=1844) en tarea (cod=13) codResp=4 codSalir=30000 evSalir=16
 +
  20241007 122443.524    MYQ[WSIaut/00] qryParResFin Memoria 1119 bytes
 +
  20241007 122443.524    MYQ[WSIaut/01] qryParResFin Memoria 133 bytes
 +
  20241007 122443.524    MYQ[WSIaut/02] qryParResFin Memoria 524 bytes
 +
  20241007 122443.524    MYQ[WSIaut/03] qryParResFin Memoria 734 bytes
 +
  20241007 122443.524    MYQ[WSIaut/04] qryParResFin Memoria 30 bytes
 +
  20241007 122443.524    MYQ[WSIaut/05] qryParResFin Memoria 142 bytes
 +
  20241007 122443.524    MYQ[WSIaut/06] qryParResFin Memoria 8 bytes
 +
  20241007 122443.524    MYQ[WSIaut/07] qryParResFin Memoria 8 bytes
 +
  20241007 122443.524    MYQ[WSIaut/08] qryParResFin Memoria 8 bytes
 +
  20241007 122443.524    MYQ[WSIaut/09] qryParResFin Memoria 8 bytes
 +
  20241007 122443.525    MYQ[WSIaut/10] qryParResFin Memoria 184 bytes
 +
  20241007 122443.525    MYQ[WSIaut/11] qryParResFin Memoria 53 bytes
 +
  20241007 122443.525    MYQ[WSIaut/12] qryParResFin Memoria 1123 bytes
 +
  20241007 122443.525    MYQ[WSIaut/13] qryParResFin Memoria 1059 bytes
 +
  20241007 122443.525    MYQ[WSIaut/14] qryParResFin Memoria 276 bytes
 +
  20241007 122443.525    MYQ[WSIaut/15] qryParResFin Memoria 216 bytes
 +
  20241007 122443.525    MYQ[WSIaut/16] qryParResFin Memoria 216 bytes
 +
  20241007 122443.525    MYQ[WSIaut/17] qryParResFin Memoria 136 bytes
 +
  20241007 122443.525    MYQ[WSIaut/18] qryParResFin Memoria 136 bytes
 +
  20241007 122443.544    MYQ[WSIaut] dameNuevaConexion cnxCharset=utf8mb4
 +
!20241007 122443.544 MYQ[WSIaut] Conectado: "BDTR:nimitz:nimitz"
 +
  20241007 122443.546    MYQ[WSIaut/00] preparada qry numPar=1 numRes=23
 +
  20241007 122443.547    MYQ[WSIaut/01] preparada qry numPar=2 numRes=1
 +
  20241007 122443.548    MYQ[WSIaut/02] preparada qry numPar=19 numRes=0
 +
  20241007 122443.549    MYQ[WSIaut/03] preparada qry numPar=1 numRes=22
 +
  20241007 122443.550    MYQ[WSIaut/04] preparada qry numPar=0 numRes=6
 +
  20241007 122443.550    MYQ[WSIaut/05] preparada qry numPar=4 numRes=0
 +
  20241007 122443.552    MYQ[WSIaut/06] preparada qry numPar=2 numRes=0
 +
  20241007 122443.553    MYQ[WSIaut/07] preparada qry numPar=2 numRes=0
 +
  20241007 122443.554    MYQ[WSIaut/08] preparada qry numPar=2 numRes=0
 +
  20241007 122443.555    MYQ[WSIaut/09] preparada qry numPar=2 numRes=0
 +
  20241007 122443.555    MYQ[WSIaut/10] preparada qry numPar=1 numRes=4
 +
  20241007 122443.556    MYQ[WSIaut/11] preparada qry numPar=3 numRes=1
 +
  20241007 122443.557    MYQ[WSIaut/12] preparada qry numPar=2 numRes=23
 +
  20241007 122443.559    MYQ[WSIaut/13] preparada qry numPar=1 numRes=23
 +
  20241007 122443.560    MYQ[WSIaut/14] preparada qry numPar=1 numRes=8
 +
  20241007 122443.561    MYQ[WSIaut/15] preparada qry numPar=1 numRes=8
 +
  20241007 122443.562    MYQ[WSIaut/16] preparada qry numPar=1 numRes=8
 +
  20241007 122443.563    MYQ[WSIaut/17] preparada qry numPar=3 numRes=0
 +
  20241007 122443.564    MYQ[WSIaut/18] preparada qry numPar=3 numRes=0
 +
  20241007 122443.564    WSI(13) Iniciado mysql=1
 +
  20241007 122443.566    WSI(13) usuarioPorCuenta ok cuenta=sat id=1 modoLogin=10 usuMultiIp=0 tipo2Factor=no pinIntentosMax=0 clvExpiradaSegs=0 pinExpira=0
 +
  20241007 122443.567    WSI(13) postAutenticar1 bd_Ok cuenta=sat id=1 clvExpiradaSegs=0
 +
  20241007 122443.577    WSI(13) tokenBdInsertar token=usiELn apli=VivaitCall ipOrig=172.25.2.119 esta=200 tokenExpira=3600 pinExpira=0
 +
  20241007 122443.579    WSI(13) usuBdClaveComplejidad diasValidezNueva=90 longiMin=4 requiereNumeros=0 requiereMayusculas=0 requiereMinusculas=0 requiereCarsEspeciales=0
 +
<br><br>
 +
'''Clave errónea'''
 +
<br><br>
 +
  20241007 122815.947    WSI(12) usuarioPorCuenta ok cuenta=sat id=1 modoLogin=10 usuMultiIp=0 tipo2Factor=no pinIntentosMax=0 clvExpiradaSegs=0 pinExpira=0
 +
!20241007 122815.948 WSI TRUCO_KO [172.25.2.119] postAutenticar1_bd_mal_clave
 +
   20241007 122815.949    WSI(12) postAutenticar1 no_clave cuenta=sat id=1
 +
===== Herramientas del navegador =====
 +
<br><br>
 +
Desde la ventana del navegador utilizado para abrir sesión de usuario también se puede monitorizar el diálogo con SerCen y controlar los resultados de los comandos invocados.<br>
 +
Para ello se utilizan las herramientas de desarrollador invocándolas mediante la tecla F12:<br>
 +
En este ejemplo se comprueba la respuesta de SerCen al comando ''autenticar1'' :
 +
<br><br>
 +
[[File:sercen_navegador.png|1800px|center]]
 +
<br><br>
 +
[[#SerCen | Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
 +
 
 +
=== '''''VIVA'''it''-direct ===
 +
<br><br>
 +
 
 +
 
 +
<br><br>
 +
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
 +
=== MDintz ===
 +
<br><br>
 +
==== Introducción ====
 +
<br><br>
 +
Aplicación de asterisk, desarrollada por MDtel (©MDintz MDtel), que permite invocar desde el dialplan distintos servicios propietarios.<br>
 +
Cada uno de estos servicios está accesible desde un entorno diferente.<br>
 +
Los diferentes entornos que puede invocar MDintz se definen en el archivo de configuración como secciones.<br>
 +
Se puede consultar los entornos desplegados consultado el fichero ''MDintz.conf'' en el directorio /etc/asterisk/:
 +
<br><br>
 +
  '''root@preproduccioncorp0:/# cat /etc/asterisk/MDintz.conf'''
 +
  [nimitz]
 +
  host0=BDTR
 +
   port0=5555
 +
  host1=172.25.128.254
 +
  port1=5555
 +
  toConx=5
 +
   toRx=10
 +
 +
   [gh]
 +
  host0=GH
 +
   port0=5556
 +
  toConx=5
 +
   toRx=10
 +
 
 +
   [srvBasico]
 +
  host0=172.25.128.252
 +
  port0=8180
 +
  protocolo=http2
 +
  url=/intzJava
 +
  toConx=5
 +
  toRx=10
 +
 
 +
  [srvPepephone]
 +
  host0=172.25.128.252
 +
   port0=8180
 +
  protocolo=http2
 +
  url=/intzJavaPepePhone
 +
  toConx=5
 +
  toRx=10
 +
 
 +
  [tap]
 +
  host0=127.0.0.1
 +
  port0=5557
 +
  protocolo=nimitz
 +
   toConx=5
 +
  toRx=10
 +
  root@preproduccioncorp0:/#
 +
<br><br>
 +
Cada uno de los entornos proporciona diferentes servicios y cada uno de los servicios tiene comandos.<br>
 +
Por ejemplo, el entorno ''nimitz'' tiene varios servicios (ping, BD, regExpr)<br>
 +
El servicio BD del entorno nimit tienen diferentes comandos (sqlDato, enrutar, ...)<br>
 +
Para más información consultar [[MDintz|MDintz]]
 +
<br><br>
 +
[[#MDintz| Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
 +
 
 +
==== Aplicación de asterisk ====
 +
<br><br>
 +
Para comprobar si asterisk tiene activa la aplicación MDintz se puede preguntar por ella, desde la consola de asterisk, con el comando:
 +
<br><br>
 +
    core show applications     
 +
<br><br>
 +
  root@vm-corp:~# '''asterisk -rx"core show applications"|grep mdintz'''
 +
                  mdintz: V03.1 Se conecta con servidor de procesos MDtel para solicitar servicios
 +
   root@vm-corp:~#
 +
<br><br>
 +
[[#MDintz| Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
 +
 
 +
==== Entornos de MDintz ====
 +
<br><br>
 +
Los entornos, suministradores de servicios, más habituales en '''''VIVA'''it'' se muestran a continuación.
 +
<br><br>
 +
===== Intz-nimitz =====
 +
<br><br>
 +
====== Introducción ======
 +
<br><br>
 +
Software desarrollado por MDtel (©intz-nimitz MDtel) que implementa el entorno para integrar procesos del dialplan (asterisk) con la base de datos de '''''VIVA'''it''.<br>
 +
Los procesos del dialplan invocan a la aplicación MDintz, MDintz utiliza el entorno intz-nimitz para dialogar con la BBDD, que en '''''VIVA'''it'' se llama ''nimitz''.<br>
 +
Por ejemplo, el proceso por el que se incluye el registro de una llamada en la BBDD (tabla DAT_LLAMADAS) de '''''VIVA'''it'' sería:
 +
<br><br>
 +
  root@vm-corp:~# asterisk -rvvvv|grep DAT_LLA
 +
      -- Executing [s@Cen_Sub_insertDatLlamada:15] '''mdintz("SIP/2060-000004c8", "nimitz|bd|sqlSinEspera|insert''' into DAT_LLAMADAS
 +
  (D_HORA_INICIO,C_ORIGEN,C_DESTINO,C_UCID,E_GRABACION,N_PRIMARIO,N_CANAL_PRIMARIO,E_TIPO_LLAMADA,E_TIPO_CANAL,ID_RUTA_ENT,ID_NODO_GW,C_COD_CLIENTE)
 +
  VALUES(now(),"2060","06389","10002023101728994565",0,NULL,NULL,NULL,10,1012,2,NULL)") in new stack
 +
      -- Executing [s@Cen_Sub_updDatLlamada_dispout:5] '''mdintz("SIP/Trunk_GW_corporativo-000004c9", "nimitz|bd|sqlSinEspera|update''' DAT_LLAMADAS set ID_RUTA_SAL=1006 where C_UCID="10002023101728994565"") in new
 +
   stack
 +
      -- Executing [s@Cen_Sub_updDatLlamada:5] '''mdintz("SIP/2060-000004c8", "nimitz|bd|sqlSinEspera|update''' DAT_LLAMADAS set D_HORA_FIN=now(),N_DURACION=UNIX_TIMESTAMP()-
 +
UNIX_TIMESTAMP(D_HORA_INICIO),E_TIPO_LLAMADA=10 where C_UCID="10002023101728994565"") in new stack
 +
<br><br>
 +
Intz-nimitz es un proceso en segundo plano que se ejecuta automáticamente sobre el sistema operativo (demonio) en la plataforma '''''VIVA'''it''. La estabilidad de este es importante para el funcionamiento del sistema, si bien las llamadas progresan en caso de no estar disponible si se configura con redundancia.<br>
 +
Para mas información consultar la página de [[intz-nimitz|intz-nimitz]].<br>
 +
<br><br>
 +
[[#Intz-nimitz| Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
 +
 
 +
====== Diagnóstico en Intz-nimitz ======
 +
<br><br>
 +
Para monitorizar el funcionamiento del entorno intz-nimitz se pueden usar comandos y consultar ficheros log y de configuración.<br>
 +
Esto permitirá realizar un diagnostico ante un posible mal funcionamiento de la funcionalidad de integrar la BBDD en asterisk.
 +
<br><br>
 +
 
 +
====== Comandos de Intz-nimitz ======
 +
<br><br>
 +
'''Información del servicio'''
 +
<br><br>
 +
Se puede obtener información del proceso intz-nimitz. Para ello se invoca el siguiente comando en la consola de ubuntu:
 +
<br><br>
 +
      nc ip_máquina 1115<br>
 +
<br><br>
 +
Resultado esperado
 +
<br><br>
 +
  root@preproduccioncorp0:~# '''nc localhost 1115'''
 +
  intz-nimitz sis ver='04.00.00' inic='20241008 083913' alarmas=10 ultAlar='20241008 083918'
 +
  intz-nimitz gmp msj=1012/1024 buf=1024/1024 tarea=14/31
 +
  intz-nimitz tmp uptime=701565 (8d 2h 52m 45s)
 +
  intz-nimitz vic identif='cms1' entorno='nimitz' conx=0/128 numConx=1218(0)
 +
  intz-nimitz mys curro=10/0/0/0 soli=1218(0) soliErr=0(0) soliEncol=0(0/0)
 +
  intz-nimitz cache colas=128/0/0/0 vdn=128/0/0/0
 +
   intz-nimitz regExpr entr=32/32/1024 numRegExpr=1 consul=41(0)
 +
<br><br>
 +
La información obtenida se puede interpretar en la siguiente tabla:
 +
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none; text-align:center;"
 
|-
 
|-
|320||accionLog_grabacion_sombra||Grabación en la sombra|| || ||  || || ||
+
!Parámetro!!Descripción
 
|-
 
|-
|330||accionLog_add_filtro_contactos|| || || ||  || || ||
+
|sis/ver||Versión del proceso
 
|-
 
|-
|335||accionLog_del_filtro_contactos|| || || ||  || || ||
+
|sis/inic||Fecha de de arranque del proceso
 
|-
 
|-
|340||accionLog_chg_filtro_contactos|| || || ||  || || ||
+
|sis/alarmas||Alarmas desde arranque
 
|-
 
|-
|350||accionLog_add_val_filtro_contactos|| || || ||  || || ||
+
|sis/ultAlar||Fecha de última alarma
 
|-
 
|-
|355||accionLog_del_val_filtro_contactos|| || || ||  || || ||
+
|gmp/msj||Numero de mensajes. Cada llamada en curso requiere de un mensaje
 
|-
 
|-
|400||accionLog_activar_contactos|| || ||idCampanna|| ||  || ||
+
|gmp/buf||Numero de buffer
 
|-
 
|-
|405||accionLog_cancelar_contactos|| || ||idCampanna|| ||  || ||
+
|gmp/tarea||Numero de tareas
 
|-
 
|-
|410||accionLog_orden_contactos|| || ||idCampanna|| ||  || ||
+
|tmp/uptime||Tiempo que lleva el servicio activo
 
|-
 
|-
|415||accionLog_prioridad_contactos|| || ||idCampanna|| || || ||
+
|vic/identif||Etiqueta de identificación del servicio
 
|-
 
|-
!colspan="9"|ACCIÓN LOGS PORTAL: Faltan añadir en la BD (Datos versión) y Revisar si ya existen. Poner los parámetros
+
|vic/entorno||Entorno de base de datos
 
|-
 
|-
|5310||accionLog_chg_acd_configuracion|| || || || || || ||
+
|vic/conx||Conexiones activas/conexiones máximas
 
|-
 
|-
|5315||accionLog_add_acd_finales|| || || || || || ||
+
|vic/numConx||Conexiones totales (último minuto)
 
|-
 
|-
|5320||accionLog_chg_acd_finales|| || || || || || ||
+
|mys/curro||Número de hilos contra la base de datos
 
|-
 
|-
|5325||accionLog_del_acd_finales|| || || || || || ||
+
|mys/soli||Conexiones solicitadas (último minuto)
 
|-
 
|-
|5330||accionLog_add_acd_formularios|| || || || || || ||
+
|mys/soliErr||Conexiones solicitadas con error (último minuto)
 
|-
 
|-
|5335||accionLog_chg_acd_formularios|| || || || || || ||
+
|mys/soliEncol||Conexiones encoladas
 
|-
 
|-
|5340||accionLog_del_acd_formularios||||||||||||||
+
|cache/cola|| Colas monitorizadas/
 
|-
 
|-
|5345||accionLog_add_acd_pausas|| || || || || || ||
+
|cache/vdn||VDN’s monitorizados
 
|-
 
|-
|5350||accionLog_chg_acd_pausas|| || || || || || ||
+
|regExpr/entr||
 
|-
 
|-
|5355||accionLog_del_acd_pausas|| || || || || || ||
+
|regExpr/numRegExpr||
 
|-
 
|-
|5359||accionLog_add_cen_molticanal_texto_entrada|| || || || || || ||
+
|regExpr/consul||
 
|-
 
|-
|5360||accionLog_add_acd_supercolas|| || || || || || ||
+
|}
 +
<br><br>
 +
'''Gestión del servicio'''
 +
<br><br>
 +
Se puede monitorizar/parar/iniciar/reiniciar el funcionamiento del proceso intz-nimitz. Para ello se invoca el siguiente comando en la consola de ubuntu en el nodo donde esté instalado:
 +
<br><br>
 +
    systemctl status/stop/start/reboot intz-nimitz.service<br>
 +
<br><br>
 +
Resultado esperado del estado
 +
<br><br>
 +
  root@vm-corp:~# '''systemctl status intz-nimitz.service'''
 +
  ● intz-nimitz.service - LSB: Start/stop intz-nimitz
 +
      Loaded: loaded (/etc/init.d/intz-nimitz; generated)
 +
      Active: ''active (running)'' since Wed 2024-10-16 11:00:13 CEST; 36min ago
 +
        Docs: man:systemd-sysv-generator(8)
 +
      Process: 498322 ExecStart=/etc/init.d/intz-nimitz start (code=exited, status=0/SUCCESS)
 +
        Tasks: 18 (limit: 2220)
 +
      Memory: 13.3M
 +
          CPU: 4.981s
 +
      CGroup: /system.slice/intz-nimitz.service
 +
              └─498327 /usr/sbin/intz-nimitz - /etc/MDtel/intz-nimitz.conf
 +
 
 +
  Oct 16 11:00:11 vm-corp intz-nimitz[498322]: Starting intz-nimitz
 +
  Oct 16 11:00:13 vm-corp intz-nimitz[498323]:  20241016 110013    CFG recargado base.cfg_recarga.nivel_traza='nDepuBajo'
 +
  Oct 16 11:00:13 vm-corp intz-nimitz[498323]:  20241016 110013    CFG recargado base.cfg_recarga.pruebas=1
 +
  Oct 16 11:00:13 vm-corp intz-nimitz[498323]:  20241016 110013    CFG recargado base.cfg_recarga.hay_flush_traza=1
 +
  Oct 16 11:00:13 vm-corp intz-nimitz[498323]:  20241016 110013.934    CFG recargado base.cfg_recarga.traza_milisegundos=1
 +
  Oct 16 11:00:13 vm-corp intz-nimitz[498323]:  20241016 110013.934    CFG leido tipo=natu grp=sis nom=subsistema val=0
 +
  Oct 16 11:00:13 vm-corp intz-nimitz[498323]:  20241016 110013.934    CFG leido tipo=natu grp=sis nom=tareas_max_num val=32
 +
  Oct 16 11:00:13 vm-corp intz-nimitz[498323]:  20241016 110013.934    CFG leido tipo=natu grp=gmp nom=num_msj val=1024
 +
  Oct 16 11:00:13 vm-corp intz-nimitz[498323]:  20241016 110013.934    CFG leido tipo=natu grp=gmp nom=num_buf val=1024
 +
  Oct 16 11:00:13 vm-corp systemd[1]: Started LSB: Start/stop intz-nimitz.
 +
<br><br>
 +
[[#Intz-nimitz| Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
 +
 
 +
====== Ficheros de Intz-nimitz ======
 +
<br><br>
 +
Como complemento a los comandos se pueden visualizar los siguientes ficheros relativos al proceso:
 +
<br><br>
 +
: * '''Fichero de configuración''' del proceso en  '''/etc/MDtel/intz-nimitz.conf'''
 +
: * '''Fichero log''' del proceso en '''/var/log/intz-nimitz.log'''
 +
<br><br>
 +
'''Ficheros de configuración:'''
 +
<br><br>
 +
  root@preproduccioncorp0:~# '''cat /etc/MDtel/intz-nimitz.conf'''
 +
 
 +
  #
 +
  # Los nombres no pueden tener números
 +
  # Si el valor de una cadena contiene espacios, se pondrá entre comillas dobles
 +
  # Los valores comentados indican valores por defecto
 +
 
 +
 
 +
  base =
 +
  {
 +
          cfg =
 +
          {
 +
                  soy_demonio = true
 +
                  hay_syslog = false
 +
                  archivo_pid = ""      // "": /var/run/vivait-mcan.pid
 +
                  archivo_traza = ""    // "": stdout o /var/log/vivait-mcan.log si soy_demonio
 +
          }
 +
          cfg_recarga =
 +
          {
 +
                  pruebas = true
 +
                  nivel_traza = 3        // 0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo
 +
                  hay_flush_traza = true
 +
                  traza_milisegundos = true
 +
          }
 +
          sis =
 +
          {
 +
                  subsistema = 0        // No modificar
 +
                  tareas_max_num = 32
 +
          }
 +
          gmp =
 +
          {
 +
                  num_msj = 1024        // Numero de mensajes. Cada llamada en curso requiere de un mensaje
 +
                  num_buf = 1024        // Numero de buffer
 +
          }
 +
  }
 +
 
 +
  supervision =
 +
  {
 +
          puerto_escucha = 1115
 +
  }
 +
 
 +
  supervision_recarga =
 +
  {
 +
          to_periodo = 60
 +
  }
 +
 
 +
  cache =
 +
  {
 +
          hay_cache = true
 +
  }
 +
 
 +
  cache_recarga =
 +
  {
 +
          colas_to_vida = 300    // si 0, no se alamacenan entradas
 +
          colas_num_entrada = 128
 +
          vdn_to_vida = 300      // si 0, no se alamacenan entradas
 +
          vdn_num_entrada = 128
 +
  }
 +
 
 +
  regexp =
 +
  {
 +
          hay_regexp = true
 +
  }
 +
 
 +
  regexp_recarga =
 +
  {
 +
          num_entradas = 32
 +
          inc_entradas = 128
 +
          max_entradas = 1024
 +
  }
 +
 
 +
  vivaitcall =
 +
  {
 +
          hay_vic = true
 +
          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 = true
 +
          ejecutar_desvio_incondicional = false
 +
          ejecutar_desvio_mensa_incondicional = false
 +
          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 = true
 +
          host = "BDTR"
 +
          usuario = "nimitz"
 +
          clave = "phikau3iwCe4O0PP5b09ng=="
 +
          base_datos = "nimitz"
 +
          charset = "utf8mb4"
 +
          bd_supervivencia = false
 +
          hisllam_insertar = true
 +
          hisllam_dnis_regexp_excluir = "^0?016$"
 +
          num_curro = 10
 +
  }
 +
 
 +
  mysql_recarga =
 +
  {
 +
          to_resp = 5
 +
  }
 +
 
 +
  @include "/etc/MDtel/intz-nimitz_MDtel.conf"
 +
  @include "/etc/MDtel/intz-nimitz_Particular.conf"
 +
 
 +
  root@preproduccioncorp0:~# '''cat /etc/MDtel/intz-nimitz_MDtel.conf'''
 +
  sql_comun =
 +
  {
 +
          hora =
 +
          {
 +
                  num_par = 0
 +
                  tam_par = 32
 +
                  num_res = 1
 +
                  tam_res = 32
 +
                  sql = "select now()"
 +
          }
 +
 
 +
          tiempoDial =
 +
          {
 +
                  num_par = 1
 +
                  tam_par = 32
 +
                  num_res = 1
 +
                  tam_res = 32
 +
                  sql = "select N_PRIORIDAD from CEN_EXTENSIONES where C_NOMBRE=?"
 +
          }
 +
  }
 +
 
 +
  root@preproduccioncorp0:~# '''cat /etc/MDtel/intz-nimitz_Particular.conf'''
 +
  sql_particular =
 +
  {
 +
  }
 +
<br><br>
 +
Los siguientes son los campos significativos de los fichero de configuración:
 +
<br><br>
 +
Para el fichero ''intz-nimitz.conf''
 +
<br><br>
 +
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none; text-align:center;"
 
|-
 
|-
|5361||accionLog_del_cen_molticanal_texto_entrada|| || || || || || ||
+
|'''Variable a modificar'''||'''Comentarios'''||'''Posibles valores (si aplica)'''
 
|-
 
|-
|5362||accionLog_udel_cen_molticanal_texto_entrada||||||||||||||
+
|soy_demonio||Si se ejecuta como demonio o como proceso||true: demonio – false: proceso
 
|-
 
|-
|5363||accionLog_add_cen_molticanal_texto_salida|| || || || || || ||
+
|hay_syslog||Si hay servidor de syslog||true: lo hay – false: no lo hay
 
|-
 
|-
|5364||accionccionLog_chg_cen_molticanal_texto_salida|| || || || || || ||
+
|archivo_pid||# Archivo con identificador de proceso: (-: /var/run/intz-nimitz.pid)||
 
|-
 
|-
|5365||accionLog_chg_acd_supercolas|| || || || || || ||
+
|archivo_traza||# Archivo_traza: (-: stdout o /var/log/intz-nimitz.log si soy_demonio=true)||
 
|-
 
|-
|5366||accionLog_udel_cen_molticanal_texto_salida|| || || || || || ||
+
|pruebas||||
 
|-
 
|-
|5367||accionLog_chg_cen_molticanal_texto_entrada|| || || || || || ||
+
|nivel_traza||# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)||
 
|-
 
|-
|5368||accionLog_del_cen_molticanal_texto_salida|| || || || || || ||
+
|hay_flush_traza||||
 
|-
 
|-
|5370||accionLog_del_acd_supercolas|| || || || || || ||
+
|traza_milisegundos||||
 
|-
 
|-
|5375||accionLog_udel_acd_supercolas|| || || || || || ||
+
|subsistema||# No se usa. No modificar||
 
|-
 
|-
|5380||accionLog_add_acd_vdn|| || || || || || ||
+
|num_msj||# Numero de mensajes. No modificar||
 
|-
 
|-
|5385||accionLog_chg_acd_vdn|| || || || || || ||
+
|num_buf||# Numero de buffer. No modificar||
 
|-
 
|-
|5390||accionLog_del_acd_vdn|| || || || || || ||
+
|puerto_escucha||Puerto de supervisión del demonio||
 
|-
 
|-
|5395||accionLog_udel_acd_vdn|| || || || || || ||
+
|to_periodo||Timeout para reconectar||
 
|-
 
|-
|5396||accionLog_add_cen_vdn|| || || || || || ||
+
|hay_cache||si guarda datos o no en cache||1 hay cache – 0 no hay cache
 
|-
 
|-
|5397||accionLog_chg_cen_vdn|| || || || || || ||
+
|colas_to_vida||# to_vida = 0, no se almacenan entradas. to_vida > 0 en segundos||
 
|-
 
|-
|5398||accionLog_del_cen_vdn|| || || || || || ||
+
|colas_num_entrada||Número de entradas correspondiente a las colas||
 
|-
 
|-
|5399||accionLog_udel_cen_vdn|| || || || || || ||
+
|vdn_to_vida||# to_vida = 0, no se almacenan entradas. to_vida > 0 en segundos||
 
|-
 
|-
|5400||accionLog_add_campos|| || || || || || ||
+
|vdn_num_entrada||Número de entradas correspondiente a los VDN||
 
|-
 
|-
|5405||accionLog_chg_campos|| || || || || || ||
+
|hay_regexp||||
 
|-
 
|-
|5410||accionLog_del_campos|| || || || || || ||
+
|num_entradas||||
 
|-
 
|-
|5415||accionLog_add_categorias|| || || || || || ||
+
|inc_entradas||||
 
|-
 
|-
|5420||accionLog_chg_categorias|| || || || || || ||
+
|max_entradas||||
 
|-
 
|-
|5425||accionLog_del_categorias|| || || || || || ||
+
|hay_vic||||
 
|-
 
|-
|5430||accionLog_chg_com_configuracion|| || || || || || ||
+
|puerto_escucha||Puerto de escucha a nivel de vivait-call||
 
|-
 
|-
|5435||accionLog_add_nodos|| || || || || || ||
+
|identif ||||
 
|-
 
|-
|5440||accionLog_chg_nodos|| || || || || || ||
+
|entorno||Nombre base de datos||
 
|-
 
|-
|5445||accionLog_del_nodos|| || || || || || ||
+
|max_conx||Número máximo de conexiones a la base de datos||
 
|-
 
|-
|5450||accionLog_udel_nodos|| || || || || || ||
+
|to_solicitud||Timeout de solicitud||
 
|-
 
|-
|5455||accionLog_add_sedes|| || || || || || ||
+
|to_desconexion||Timeout de desconexión||
 
|-
 
|-
|5460||accionLog_chg_sedes|| || || || || || ||
+
|todas/ip||Dirección de red de escucha del intz-nimitz||
 
|-
 
|-
|5465||accionLog_del_sedes|| || || || || || ||
+
|todas/msk||Máscara de red de escucha del intz-nimitz||
 
|-
 
|-
|5470||accionLog_udel_sedes|| || || || || || ||
+
|localhost/ip||IP localhost||
 
|-
 
|-
|5475||accionLog_add_dat_sincroniza|| || || || || || ||
+
|localhost/msk||Máscara localhost||
 
|-
 
|-
|5480||accionLog_chg_dat_sincroniza|| || || || || || ||
+
|hay_enrutamiento||Hay fase de enrutamiento o no||true: hay enrutamiento – false: no hay
 
|-
 
|-
|5485||accionLog_add_extensiones|| || || || || || ||
+
|ejecutar_desvio_incondicional||||
 
|-
 
|-
|5490||accionLog_chg_extensiones|| || || || || || ||
+
|ejecutar_desvio_mensa_incondicional||||
 
|-
 
|-
|5495||accionLog_del_extensiones|| || || || || || ||
+
|max_pre_ruta_regs||Número máximo de prerutas a cargar||
 
|-
 
|-
|5500||accionLog_udel_extensiones|| || || || || || ||
+
|max_ruta||Número máximo de rutas a cargar||
 
|-
 
|-
|5505||accionLog_add_facilidades|| || || || || || ||
+
|max_ruta_desvios||Número máximo de rutas de desvíos a cargar||
 
|-
 
|-
|5510||accionLog_chg_facilidades|| || || || || || ||
+
|filtro_ancho_banda||Filtrar por ancho de banda||1 filtrar – 0 no filtrar
 
|-
 
|-
|5515||accionLog_del_facilidades|| || || || || || ||
+
|hay_mysql||Hay mysql||true: hay - false: no hay
 
|-
 
|-
|5520||accionLog_add_locuciones|| || || || || || ||
+
|host||IP o HOST máquina base de datos ||
 
|-
 
|-
|5525||accionLog_chg_locuciones|| || || || || || ||
+
|usuario||Usuario acceso Base de datos||
 
|-
 
|-
|5530||accionLog_del_locuciones|| || || || || || ||
+
|clave||Clave usuario acceso base de datos||
 
|-
 
|-
|5535||accionLog_add_musica|| || || || || || ||
+
|base_datos||Nombre de la base de datos||
 
|-
 
|-
|5540||accionLog_chg_musica|| || || || || || ||
+
|bd_supervivencia||Hay o no base de datos de supervivencia||true: hay base de datos de supervivencia – false: no hay
 
|-
 
|-
|5545||accionLog_del_musica|| || || || || || ||
+
|hisllam_insertar||||
 
|-
 
|-
|5550||accionLog_add_permisos|| || || || || || ||
+
|hisllama_dnis_regexp_excluir||||
 
|-
 
|-
|5555||accionLog_chg_permisos|| || || || || || ||
+
|num_curro||Número de conexiones simultáneas a la base de datos||
 
|-
 
|-
|5560||accionLog_del_permisos|| || || || || || ||
+
|to_resp||Timeout de respuesta||
 
|-
 
|-
|5565||accionLog_add_plantillas|| || || || || || ||
+
|}
 +
<br><br>
 +
Para el fichero '' intz-nimitz_MDtel.conf''
 +
<br><br>
 +
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none; text-align:center;"
 
|-
 
|-
|5570||accionLog_chg_plantillas|| || || || || || ||
+
|'''Variable a modificar'''||'''Comentarios'''||'''Posibles valores (si aplica)'''
 
|-
 
|-
|5575||accionLog_del_plantillas|| || || || || || ||
+
|hora/num_par||||
 
|-
 
|-
|5580||accionLog_add_puestos_extensiones|| || || || || || ||
+
|hora/tam_par||||
 
|-
 
|-
|5585||accionLog_chg_puestos_extensiones|| || || || || || ||
+
|hora/num_res||||
 
|-
 
|-
|5590||accionLog_del_puestos_extensiones|| || || || || || ||
+
|hora/tam_res||||
 
|-
 
|-
|5595||accionLog_des_puestos_extensiones|| || || || || || ||
+
|hora/sql||||
 
|-
 
|-
|5600||accionLog_add_usuarios|| || || || || || ||
+
|tiempoDial/num_par||||
 
|-
 
|-
|5605||accionLog_chg_usuarios|| || || || || || ||
+
|tiempoDial/tam_par||||
 
|-
 
|-
|5610||accionLog_del_usuarios|| || || || || || ||
+
|tiempoDial/num_res||||
 
|-
 
|-
|5615||accionLog_udel_usuarios|| || || || || || ||
+
|tiempoDial/tam_res||||
 
|-
 
|-
|5620||accionLog_chg_licencias|| || || || || || ||
+
|tiempoDial/sql|||
 
|-
 
|-
!colspan="9"|ACCIONES DE LOS EJES
+
|}
|-
+
<br><br>
|5705||accionLog_chg_Eje|| || || || || || ||
+
[[#Intz-nimitz| Volver arriba]]
|-
+
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
|5710||accionLog_out_Eje_Padre|| || || || || || ||
+
<br><br>
|-
+
 
|5715||accionLog_del_Eje|| || || || || || ||
+
===== Intz-GH =====
|-
+
<br><br>
|5720||accionLog_add_Eje|| || ||  || || || ||
+
====== Introducción ======
|-
+
<br><br>
|5725||accionLog_set_Eje_Padre|| || || || || || ||
+
Software desarrollado por MDtel (©intz-GH MDtel) que implementa el entorno para integrar la funcionalidad ''Gran Hermano'' en '''''VIVA'''it''.<br>
|-
+
Gran Hermano (GH) controla el estado de las extensiones de diferentes nodos. Los servicios que permite gestionar son:<br>
|5730||accionLog_add_acd_pausas_usuarios|| || || || || || ||
+
: - La retrollamada entre extensiones de diferentes nodos,
|-
+
: - Estado de extensiones de '''''VIVA'''it'', implementa la funcionalidad BLF interno.
|5735||accionLog_del_acd_pausas_usuarios|| || || || || || ||
+
: - EStado de extensiones externas, de momento disponible para extensiones VORA; implementa la funcionalidad BLF externo.
 +
<br><br>
 +
'''Esquema funcional'''
 +
<br><br>
 +
[[File:Gran hermano.png|800px |center]]
 +
<br><br>
 +
GH solo se instala en un nodo. Se recomienda instalarlo en el nodo con menos carga del sistema, por defecto se instala en la maquina con BDHIST.<br>
 +
VORA es el servicio de presencia de Vodafone para extensiones on-net de una VPN. Permite la supervisión de extensiones on-net pero no la captura de sus llamadas.<br>
 +
Para VORA se necesita un nodo de presencia. Este nodo es un servicio instalado en cualquier servidor del sistema.
 +
<br><br>
 +
[[#Intz-GH| Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
 +
====== Retrollamadas ======
 +
<br><br>
 +
La funcionalidad ''retrollamada'' controlada por ''Gran Hermano'' se comportará de la siguiente forma:
 +
<br><br>
 +
*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 se pueda programar una retrollamada cuando se ha llamado a una numeración de usuario, pero queda programada sobre la extensión física en la que está ese usuario en el momento de activarla.<br>
 +
*La retrollada sobre un número llamado "B" se puede canalizar por varias situaciones de tráfico telefónico:<br>
 +
::"A" ha llamado a "B" <br>
 +
::"A" ha llamado a un usuario ubicado en "B" <br>
 +
::"A" ha llamado a un destino desviado a "B" <br>
 +
::"A" ha llamado a un destino y por preruta acaba en "B" <br>
 +
::...<br>
 +
*Las causas por las que se puede activar una retrollamada sobre la extensión "B" son:<br>
 +
::"B" está ocupada <br>
 +
::"B" no contesta <br>
 +
::"B" está ocupada y no contesta (ha sonado en línea 2--> )<br>
 +
Estas dos últimas casuísticas son iguales a efectos de usuario, pero no a efectos del sistema.<br>
 +
'''Solo se puede activar la retrollamada si el sistema devuelve: extensión ocupada o extensión no contesta'''<br>
 +
Si una llamada va a buzón, salta a un grupo ACD, a una IVR, etc. entonces NO se puede activar la retrollamada (porque se considera contestada)
 +
<br><br>
 +
'''Uso de la funcionalidad ''retrollamda'''''
 +
<br><br>
 +
: * Para programar una retrollamada se digita el código de facilidad de tipo ''Activar retrollamada'' definido en '''''Viva'''it'' una vez informada la llamada;<br>
 +
::el sistema recuerda la última llamada durante un período de tiempo configurable; aunque entre una llamada en "A" o esta extensión realice una llamada, se podrá programar retrollamada a la última saliente candidata si sigue dentro del período configurado.<br>
 +
: * Se podrá abortar una retrollamada activa digitando el código de facilidad de tipo ''Cancelar retrollamada'' definido en '''''Viva'''it''<br>
 +
::Esto no borrará la última llamada se puede reactivar después de haber abortado la retrollamada.<br>
 +
: * En ''gran hermano'' se guardará Nodo A + Ext_A (numero y name) + Ext_B (numero y name_usuario) + Causa + Timestamp<br>
 +
: * Solo se puede programar una retrollamada sobre una extensión "B". Esta sera la última.<br>
 +
: * Si la ultima llamada saliente es, por ejemplo exterior --> No hay posibilidad de programar ninguna retrollamada.
 +
<br><br>
 +
'''Acuerdos de funcionamiento'''
 +
<br><br>
 +
: * Un origen "A" solo tendrá activar una retrollamada a un destino "B"; si teniendo una retrollamada activada se decide programar otra a otro destino, la primera retrollamada se pierde.<br>
 +
: * 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 al siguiente y así hasta responder a todas las activaciones.<br>
 +
: * Si se trata de programar una "n+1" retrollamada desde una extensión "A" para un destino "B" con "n" retrollamadas ya activas, el sistema le informará de que la retrollamada no ha podido programarse mediante la locución correspondiente.
 +
<br><br>
 +
'''Cuestiones'''
 +
<br><br>
 +
: * Se prevé que la retrollamada suene en una extensión desviada; si "A" llama a "B" y esta está desviada a "C", si suena "C" la retrollamada se activa sobre "C".<br>
 +
: * Si salta al buzón no puede haber retrollamada.
 +
<br><br>
 +
[[#Intz-GH| Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
 +
 
 +
====== Diagnóstico en intz-GH ======
 +
<br><br>
 +
Para monitorizar el funcionamiento del entorno intz-GH se pueden usar comandos y consultar ficheros log y de configuración.<br>
 +
Esto permitirá realizar un diagnostico ante un posible mal funcionamiento de las funcionalidades que ofrece ''Gran Hermano''.
 +
====== Comandos de intz-gh ======
 +
<br><br>
 +
'''Información del servicio'''
 +
<br><br>
 +
Se puede obtener información del proceso intz-gh. Para ello se invoca el siguiente comando en la consola de ubuntu:
 +
<br><br>
 +
      '''nc ip_máquina 1116'''<br>
 +
<br><br>
 +
Resultado esperado
 +
<br><br>
 +
  root@preproducciongestion:~# '''nc localhost 1116'''
 +
  intz-gh sis ver='00.01.05' inic='20241018 030221' alarmas=651 ultAlar='20241028 130310'
 +
  intz-gh gmp msj=252/256 buf=256/256 tarea=7/15
 +
  intz-gh tmp uptime=986091 (11d 9h 54m 51s)
 +
  intz-gh vic identif='gh_000' entorno='gh' conx=0/8 numConx=175424(8)
 +
  intz-gh regExpr entr=32/32/1024 numRegExpr=0 consul=0(0)
 +
  intz-gh ias nodos=11 nodosPres=1 cmd=1722(0) cmdErr=0 tresp=0
 +
  intz-gh gh1 exten=36/300 enla=18/20 retro=0/0/50
 +
  intz-gh gh1 soli=175419(8) soliErr=5(0) soliEncol=1345(0)
 +
  intz-gh wws conxNum=0 conxMaxPeriodo=0 hilos=0/2 wsi
 +
<br><br>
 +
La información obtenida se puede interpretar en la siguiente tabla:
 +
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none; text-align:center;"
 
|-
 
|-
|5740||accionLog_add_centros_dispositivos|| || || || || || ||
+
!Parámetro!!Descripción
 
|-
 
|-
|5745||accionLog_chg_centros_dispositivos|| || || || || || ||
+
|sis/ver||Versión del proceso
 
|-
 
|-
|5750||accionLog_del_centros_dispositivos|| || || || || || ||
+
|sis/inic||Fecha de de arranque del proceso
 
|-
 
|-
|5755||accionLog_add_centros_extensiones|| || || || || || ||
+
|sis/alarmas||Alarmas desde arranque
 
|-
 
|-
|5760||accionLog_chg_centros_extensiones|| || || || || || ||
+
|sis/ultAlar||Fecha de última alarma
 
|-
 
|-
|5765||accionLog_del_centros_extensiones|| || || || || || ||
+
|gmp/msj||Numero de mensajes. Cada llamada en curso requiere de un mensaje
 
|-
 
|-
|5770||accionLog_add_acd_usuarios|| || || || || || ||
+
|gmp/buf||Numero de buffer
 
|-
 
|-
|5775||accionLog_chg_acd_usuarios||||||||||||||
+
|gmp/tarea||Numero de tareas
 
|-
 
|-
|5780||accionLog_add_relacion_campos|| || || || || || ||
+
|tmp/uptime||Tiempo que lleva el servicio activo
 
|-
 
|-
|5785||accionLog_del_relacion_campos|| || || || || || ||
+
|vic/identif||Etiqueta de identificación del servicio
 
|-
 
|-
|5786||accionLog_chg_grabacion_configuracion|| || || || || || ||
+
|vic/entorno||Entorno de gran hermano
 
|-
 
|-
|5787||accionLog_add_campannas|| || || || || || ||
+
|vic/conx||Conexiones activas/conexiones máximas
 
|-
 
|-
|5788||accionLog_chg_campannas|| || || || || || ||
+
|vic/numConx||Conexiones totales (último minuto)
 
|-
 
|-
|5789||accionLog_del_campannas|| || || || || || ||
+
|mys/curro||Número de hilos contra la base de datos
 
|-
 
|-
|5790||accionLog_udel_campannas|| || || || || || ||
+
|regExpr/entr||
 
|-
 
|-
|5791||accionLog_add_lista_contactos|| || || || || || ||
+
|regExpr/numRegExpr||
 
|-
 
|-
|5792||accionLog_chg_lista_contactos|| || || || || || ||
+
|regExpr/consul||
 
|-
 
|-
|5793||accionLog_del_lista_contactos|| || || || || || ||
+
|ias/nodos||
 
|-
 
|-
|5794||accionLog_udel_lista_contactos|| || || || || || ||
+
|ias/nodosPres||
 
|-
 
|-
|5795||accionLog_add_lista_llamames|| || || || || || ||
+
|ias/cmd||
 
|-
 
|-
|5796||accionLog_chg_lista_llamames|| || || || || || ||
+
|ias/cmdErr||
 
|-
 
|-
|5797||accionLog_del_lista_llamames|| || || || || || ||
+
|ias/tresp||
|-
 
|5798||accionLog_udel_lista_llamames|| || || || || || ||
 
 
|-
 
|-
|5799||accionLog_add_lista_robinson|| || || || || || ||
+
|gh1/exten||
 
|-
 
|-
|5800||accionLog_chg_lista_robinson|| || || || || || ||
+
|gh1/eenla||
 
|-
 
|-
|5801||accionLog_del_lista_robinson|| || || || || || ||
+
|gh1/retro||
 
|-
 
|-
|5802||accionLog_udel_lista_robinson|| || || || || || ||
+
|gh1/soli||
 
|-
 
|-
|5803||accionLog_add_contacto|| || || || || || ||
+
|gh1/soliErr||
 
|-
 
|-
|5804||accionLog_chg_contacto|| || || || || || ||
+
|gh1/soliEncol||
 
|-
 
|-
|5805||accionLog_del_contacto|| || || || || || ||
+
|wws/conxNum||
 
|-
 
|-
|5806||accionLog_udel_contacto|| || || || || || ||
+
|wws/conxMaxPeriodo||
 
|-
 
|-
|5807||accionLog_import_contactos|| || || || || || ||
+
|wws/hilos||
 
|-
 
|-
|5808'''(*)'''||accionLog_add_contacto_campanna|| || || || || || ||
+
|wws/wsi||
 
|-
 
|-
|'''''5818'''''||accionLog_chg_contacto_campanna|| || || || || || ||
+
|}
 +
<br><br>
 +
'''Gestión del servicio'''
 +
<br><br>
 +
Se puede monitorizar/parar/iniciar/reiniciar el funcionamiento del proceso intz-gh. Para ello se invoca el siguiente comando en la consola de ubuntu en el nodo donde esté instalado:
 +
<br><br>
 +
    '''systemctl status/stop/start/reboot intz-gh.service'''<br>
 +
<br><br>
 +
Resultado esperado del estado
 +
<br><br>
 +
  root@preproducciongestion:~# '''systemctl status intz-gh.service'''
 +
  ● intz-gh.service - LSB: Start/stop intz-gh
 +
        Loaded: loaded (/etc/init.d/intz-gh; generated)
 +
        Active: ''active (running)'' since Fri 2024-10-18 03:02:21 CEST; 1 week 4 days ago
 +
          Docs: man:systemd-sysv-generator(8)
 +
        Tasks: 11 (limit: 4556)
 +
        Memory: 9.5M
 +
          CPU: 26min 12.345s
 +
        CGroup: /system.slice/intz-gh.service
 +
                └─674 /usr/sbin/intz-gh - /etc/MDtel/intz-gh.conf
 +
 
 +
  Oct 18 03:02:21 preproducciongestion systemd[1]: Starting LSB: Start/stop intz-gh...
 +
  Oct 18 03:02:21 preproducciongestion intz-gh[621]: Starting intz-gh
 +
  Oct 18 03:02:21 preproducciongestion intz-gh[621]: .
 +
  Oct 18 03:02:21 preproducciongestion systemd[1]: Started LSB: Start/stop intz-gh.
 +
<br><br>
 +
'''Elementos de asterisk'''
 +
<br><br>
 +
El comando para conocer el estado de los diferentes elementos en Asterisk referentes a ''Gran Hermano'' es:
 +
<br><br>
 +
    '''mdgh show'''
 +
<br><br>
 +
El comando se invoca desde la consola de asterisk con las siguientes opciones:
 +
<br><br>
 +
    '''mdgh show [config | exten <exten_num> | enla <peer>]]'''
 +
<br><br>
 +
Ejemplo configuración:
 +
  preproduccioncorp1*CLI> '''mdgh show config'''
 +
  mdgh Configuracion:
 +
 
 +
    debug=no
 +
    retro_hay=yes
 +
    subscripcion_hay=yes
 +
    estado_enlace_hay=yes
 +
    rest_red_ip=172.25.0.0
 +
    rest_red_msk=255.255.0.0
 +
    rest_puerto_escucha=8090
 +
    retro_exten_tech=SIP
 +
    retro_contexto=Cen_InicioLlamada_GHRetro
 +
    retro_to_descolgar=30 s
 +
    retro_A_cartel_fmt='retro: %s'
 +
<br><br>
 +
Ejemplo estado de extensión:
 +
<br><br>
 +
  preproduccioncorp1*CLI> '''mdgh show exten 40702'''
 +
  mdgh Datos de la extension 40702:
 +
 
 +
  Datos en intz-gh:
 +
    ESTADO=NOT_INUSE
 +
    INUSE=0
 +
    RINGING=0
 +
    TS=1730801824
 +
    HACE=20
 +
    RETRO_B_CONT=1
 +
    RETRO_B_EXTEN=40716
 +
    RETRO_B_HACE=3
 +
    SUBS_NODOS_NUM=2
 +
 
 +
  Estado en cache local: NOT_INUSE
 +
<br><br>
 +
Ejemplo estado de enlace:
 +
<br><br>
 +
  preproduccioncorp1*CLI> '''mdgh show enla Trunk_MDtel'''
 +
 
 +
    mdgh Datos del enlace Trunk_MDtel:
 +
      Datos en intz-gh:
 +
      INUSE=0
 +
      RINGING=0
 +
      TS=1538978766
 +
      HACE=461
 +
<br><br>
 +
[[#Intz-GH| Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
 +
 
 +
====== Ficheros de intz-gh ======
 +
<br><br>
 +
Como complemento a los comandos se pueden visualizar los siguientes ficheros relativos al proceso:
 +
<br><br>
 +
: * '''Fichero de configuración del proceso gran hermano''' en  '''/etc/MDtel/intz-gh.conf'''
 +
: * '''Fichero de configuración de la aplicación MDintz''' de asterisk para gran hermano en '''/etc/asterisk/mdgh.conf'''
 +
: * '''Fichero log del proceso gran hermano''' en '''/var/log/intz-gh.log'''
 +
<br><br>
 +
'''Ficheros de configuración del proceso gran hermano'''
 +
<br><br>
 +
El demonio gran hermano tiene un fichero de configuración ''intz-gh.conf''.<br>
 +
Este fichero se puede consultar con el comando:
 +
  '''cat /etc/MDtel/intz-gh.conf'''
 +
<br><br>
 +
  root@preproducciongestion:~# '''cat /etc/MDtel/intz-gh.conf'''
 +
  base =
 +
  {
 +
          cfg =
 +
          {
 +
                  soy_demonio = true
 +
                  hay_syslog = false
 +
                  archivo_pid = ""      // "": /var/run/vivait-mcan.pid
 +
                  archivo_traza = ""    // "": stdout o /var/log/vivait-mcan.log si soy_demonio
 +
          }
 +
          cfg_recarga =
 +
          {
 +
                  pruebas = true
 +
                  nivel_traza = 3        // 0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo
 +
                  hay_flush_traza = true
 +
                  traza_milisegundos = true
 +
          }
 +
          sis =
 +
          {
 +
                  subsistema = 0        // No modificar
 +
                  tareas_max_num = 16
 +
          }
 +
          gmp =
 +
          {
 +
                  num_msj = 256          // Numero de mensajes. Cada llamada en curso requiere de un mensaje
 +
                  num_buf = 256          // Numero de buffer
 +
          }
 +
  }
 +
 
 +
  supervision =
 +
  {
 +
          puerto_escucha = 1116
 +
  }
 +
 
 +
  supervision_recarga =
 +
  {
 +
          to_periodo = 60
 +
  }
 +
 
 +
  regexp =
 +
  {
 +
          hay_regexp = true
 +
  }
 +
 
 +
  regexp_recarga =
 +
  {
 +
          num_entradas = 32
 +
          inc_entradas = 128
 +
          max_entradas = 1024
 +
  }
 +
 
 +
  vivaitcall =
 +
  {
 +
          hay_vic = true
 +
          puerto_escucha = 5556
 +
          identif = "gh_000"
 +
          entorno = "gh"
 +
          max_conx = 8
 +
  }
 +
 
 +
  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 = true
 +
          host = "BDTR"
 +
          usuario = "nimitz"
 +
          clave = "phikau3iwCe4O0PP5b09ng=="
 +
          base_datos = "nimitz"
 +
          charset = "utf8mb4"
 +
  }
 +
 
 +
  mysql_recarga =
 +
  {
 +
          to_resp = 5
 +
  }
 +
 
 +
  gh1 =
 +
  {
 +
          hay_gh1 = true
 +
  // 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 = 9
 +
  // numero maximo de extensiones soportadas
 +
          exten_max = 300
 +
  // 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 = true
 +
          url = "mdgh_rest"
 +
          puerto = 8090
 +
          url_presencia = "/IntzPresence/Publish"
 +
          puerto_presencia = 8180
 +
  }
 +
 
 +
  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
 +
  }
 +
 
 +
  wws =
 +
  {
 +
          hay_wws = true
 +
          ip_escucha = "127.0.0.1"
 +
          puerto_escucha = 7667
 +
          hilos_max = 2
 +
          conx_max = 2
 +
          conxt_to_seg = 10
 +
          arch_subir_max_M = 1
 +
          arch_subir_tmp_prefijo = "/tmp/intz-gh_wws_"
 +
  }
 +
 
 +
  wws_recarga =
 +
  {
 +
          access_control_allow_origin = ""
 +
          filtro_00_ip = "0.0.0.0"
 +
          filtro_00_msk = "0.0.0.0"
 +
          filtro_01_ip = ""
 +
          filtro_01_msk = ""
 +
          filtro_02_ip = ""
 +
          filtro_02_msk = ""
 +
          filtro_03_ip = ""
 +
          filtro_03_msk = ""
 +
  }
 +
<br><br>
 +
Los campos del fichero de configuración y su significado son los siguientes:
 +
<br><br>
 +
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none; text-align:center;"
 
|-
 
|-
|5809||accionLog_chk_exist_contacto_campanna|| || || || || || ||
+
|'''Variable a modificar'''||'''Comentarios'''||'''Posibles valores (si aplica)'''
 
|-
 
|-
|5810||accionLog_add_contacto_lista|| || || || || || ||
+
|soy_demonio||Si se ejecuta como demonio o como proceso||true: demonio – false: proceso
 
|-
 
|-
|5811||accionLog_chk_exist_contacto_lista|| || || || || || ||
+
|hay_syslog||Si hay servidor de syslog||true: hay syslog– false: no hay syslog
 
|-
 
|-
|5812||accionLog_del_contacto_lista|| || || || || || ||
+
|archivo_pid||# Archivo con identificador de proceso: (-: /var/run/intz-nimitz.pid)||
 
|-
 
|-
|5813||accionLog_add_estrategia|| || || || || || ||
+
|archivo_traza||# Archivo_traza: (-: stdout o /var/log/intz-nimitz.log si soy_demonio=true)||
 
|-
 
|-
|5814||accionLog_chg_estrategia|| || || || || || ||
+
|pruebas||||
 
|-
 
|-
|5815||accionLog_del_estrategia|| || || || || || ||
+
|nivel_traza||# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)||
 
|-
 
|-
|5816||accionLog_udel_estrategia|| || || || || || ||
+
|hay_flush_traza||||
 
|-
 
|-
|5817'''(*)'''||accionLog_chk_exist_contacto|| || || || || || ||
+
|traza_milisegundos||||
 
|-
 
|-
|'''''5818'''''||accionLog_add_telefono_robinson|| || || || || || ||
+
|subsistema||# No se usa. No modificar||
 
|-
 
|-
|5819||accionLog_chg_telefono_robinson|| || || || || || ||
+
|num_msj||# Numero de mensajes. No modificar||
 
|-
 
|-
|5820||accionLog_del_telefono_robinson|| || || || || || ||
+
|num_buf||# Numero de buffer. No modificar||
 
|-
 
|-
|5821||accionLog_chk_exist_robinson_lista|| || || || || || ||
+
|puerto_escucha||Puerto de supervisión del demonio||
 
|-
 
|-
|5822||accionLog_add_dat_click2call|| || || || || || ||
+
|to_periodo||Timeout para reconectar|| Tiempo en segundos
 
|-
 
|-
|5823||accionLog_chg_dat_click2call|| || || || || || ||
+
|hay_regexp||||true: hay cache – false: no hay cache
 
|-
 
|-
|5824||accionLog_del_dat_click2call|| || || || || || ||
+
|num_entradas||||
 
|-
 
|-
|5825||accionLog_chk_exist_dat_click2call|| || || || || || ||
+
|inc_entradas||||
 
|-
 
|-
|5826||accionLog_add_aplicaciones|| || || || || || ||
+
|max_entradas||||
 
|-
 
|-
|5827||accionLog_chg_aplicaciones|| || || || || || ||
+
|hay_vic||||
 
|-
 
|-
|5828||accionLog_del_aplicaciones|| || || || || || ||
+
|puerto_escucha||Puerto de escucha a nivel de vivait-call||
 
|-
 
|-
|5829||accionLog_add_cen_destinos|| || || || || || ||
+
|identif ||||
 
|-
 
|-
|5830||accionLog_chg_cen_destinos|| || || || || || ||
+
|entorno||Nombre en el fichero de configuración de la aplicación MDintz||Valor = "gh"
 
|-
 
|-
|5831||accionLog_del_cen_destinos|| || || || || || ||
+
|max_conx||Número máximo de conexiones a la base de datos||
 
|-
 
|-
|5832||accionLog_add_acd_monitores|| || || || || || ||
+
|to_solicitud||Timeout de solicitud||Tiempo en segundos
 
|-
 
|-
|5833||accionLog_chg_acd_monitores|| || || || || || ||
+
|to_desconexion||Timeout de desconexión||Tiempo en segundos
 
|-
 
|-
|5834||accionLog_del_acd_monitores|| || || || || || ||
+
|ip_valida||||
 
|-
 
|-
|5835||accionLog_add_campos_monitor_8|| || || || || || ||
+
|todas/ip||||
 
|-
 
|-
|5836||accionLog_chg_campos_monitor_8|| || || || || || ||
+
|todas/msk||||
 
|-
 
|-
|5837||accionLog_del_campos_monitor_8|| || || || || || ||
+
|localhost/ip||IP localhost||
 
|-
 
|-
|5838||accionLog_add_agendas|| || || || || || ||
+
|localhost/msk||Máscara localhost||
 
|-
 
|-
|5839||accionLog_chg_agendas|| || || || || || ||
+
|hay_mysql||Hay mysql||true: hay BBDD - false: no hay BBDD
 
|-
 
|-
|5840||accionLog_del_agendas|| || || || || || ||
+
|host||IP o HOST máquina base de datos ||
 
|-
 
|-
|5841||accionLog_add_agendas_telefonos|| || || || || || ||
+
|usuario||Usuario acceso Base de datos||
 
|-
 
|-
|5842||accionLog_chg_agendas_telefonos|| || || || || || ||
+
|clave||Clave usuario acceso base de datos||
 
|-
 
|-
|5843||accionLog_del_agendas_telefonos|| || || || || || ||
+
|base_datos||Nombre de la base de datos||"nimitz"
 
|-
 
|-
|5844||accionLog_add_agendas_campos_cliente|| || || || || || ||
+
|charset||||
 
|-
 
|-
|5845||accionLog_chg_agendas_campos_cliente|| || || || || || ||
+
|mysql_recarga/to_resp||||
 
|-
 
|-
|5846||accionLog_del_agendas_campos_cliente|| || || || || || ||
+
|hay_gh1||hay gran hermano || true: hay gh1 - false: no hay gh1
 
|-
 
|-
!colspan="9"|GRUPOS DE SALTO
+
|exten_min_digi||mínimo número de dígitos de una extensión||
 
|-
 
|-
|5847||accionLog_add_grupos_salto|| || || || || || ||
+
|exten_max_digi||máximo número de dígitos de una extensión||
 
|-
 
|-
|5848||accionLog_chg_grupos_salto|| || || || || || ||
+
|exten_max||número máximo de extensiones soportadas||
 
|-
 
|-
|5849||accionLog_del_grupos_salto|| || || || || || ||
+
|enla_max||número máximo de enlaces soportadas||
 
|-
 
|-
|5850||accionLog_udel_grupos_salto|| || || || || || ||
+
|retro_max||numero máximo de retrollamadas activas concurrentes|| Valor por defecto = 50
 
|-
 
|-
!colspan="9"|GRUPOS DE CAPTURA
+
|retro_max_b||numero máximo de retrollamadas activas concurrentes para una extensión como destino|| Valor por defecto = 4
 
|-
 
|-
|5851||accionLog_add_grupos_captura|| || || || || || ||
+
|to_retro_candidato||tiempo máximo en segs. para activar una retrollamada tras finalizar llamada|| Valor por defecto = 60
 
|-
 
|-
|5852||accionLog_chg_grupos_captura|| || || || || || ||
+
|to_retro_activo||tiempo maximo en segs. que una retrollamada espera a que las extensiones estén libres|| Valor por defecto = 300
 
|-
 
|-
|5853||accionLog_del_grupos_captura|| || || || || || ||
+
|to_limpiar||temporizador de limpieza de tablas en segs.||
 
|-
 
|-
|5854||accionLog_udel_grupos_captura|| || || || || || ||
+
|hay_ias|||| true: hay ias - false: no hay ias
 
|-
 
|-
|5855||accionLog_add_grupos_locuciones|| || || || || || ||
+
|url||||
 
|-
 
|-
|5856||accionLog_chg_grupos_locuciones|| || || || || || ||
+
|puerto||||
 
|-
 
|-
|5857||accionLog_del_grupos_locuciones|| || || || || || ||
+
|url_presencia||||
 
|-
 
|-
|5858||accionLog_udel_grupos_locuciones|| || || || || || ||
+
|puerto_presencia||||
 
|-
 
|-
!colspan="9"|INFORMES DE CALIDAD
+
|to_conex_cmd||tiempo maáimo en segs. para conectar con asterisk para comandos||
 
|-
 
|-
|5859||accionLog_add_informes_calidad|| || || || || || ||
+
|to_lista_nodos||periodo en horas para actualizar lista de id de nodos y sus direcciones ip||
 
|-
 
|-
|5860||accionLog_chg_informes_calidad|| || || || || || ||
+
|hay_wws|||| true: hay ias - false: no hay ias
 
|-
 
|-
|5861||accionLog_del_informes_calidad|| || || || || || ||
+
|ip_escucha||||
 
|-
 
|-
|5862||accionLog_udel_informes_calidad|| || || || || || ||
+
|puerto_escucha||||
 
|-
 
|-
!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
+
|hilos_max||||
 
|-
 
|-
!colspan="9"|PREGUNTAS DE CALIDAD
+
|conx_max||||
 
|-
 
|-
|5863||accionLog_add_preguntas_calidad|| || || || || || ||
+
|conxt_to_seg||||
 
|-
 
|-
|5864||accionLog_chg_preguntas_calidad|| || || || || || ||
+
|arch_subir_max_M||||
 
|-
 
|-
|5865||accionLog_del_preguntas_calidad|| || || || || || ||
+
|arch_subir_tmp_prefijo||||
 
|-
 
|-
|5866||accionLog_udel_preguntas_calidad|| || || || || || ||
+
|access_control_allow_origin||||
 
|-
 
|-
!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
+
|filtro_00_ip||||
 
|-
 
|-
!colspan="9"|SALAS MEET
+
|filtro_00_msk||||
 
|-
 
|-
|5867||accionLog_add_sala_meet|| || || || || || ||
+
|filtro_01_ip||||
 
|-
 
|-
|5868||accionLog_add_perfil_sala_meet|| || || || || || ||
+
|filtro_01_msk||||
 
|-
 
|-
|5869||accionLog_add_grupo_sala_meet|| || || || || || ||
+
|filtro_02_ip||||
 
|-
 
|-
|5870||accionLog_chg_sala_meet|| || || || || || ||
+
|filtro_02_msk||||
 
|-
 
|-
|5871||accionLog_chg_perfil_sala_meet|| || || || || || ||
+
|filtro_03_ip||||
 
|-
 
|-
|5872||accionLog_chg_grupo_sala_meet|| || || || || || ||
+
|filtro_03_msk||||
 
|-
 
|-
|5873||accionLog_del_sala_meet|| || || || || || ||
+
|}
 +
<br><br>
 +
[[#Intz-GH| Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
 +
'''Ficheros de configuración de la aplicación MDintz'''
 +
<br><br>
 +
Existe un fichero de configuración de gran hermano para la aplicación MDintz de asterisk.<br>
 +
Este fichero se puede consultar con el comando:
 +
    '''cat /etc/asterisk/mdgh.conf'''
 +
<br><br>
 +
  root@preproduccioncorp1:~# cat /etc/asterisk/mdgh.conf
 +
  [servicios]
 +
  retro_hay=yes
 +
  subscripcion_hay=yes
 +
  estado_enlace_hay=yes
 +
 
 +
  [rest]
 +
  rest_red_ip=172.25.0.0
 +
  rest_red_msk=255.255.0.0
 +
  rest_puerto_escucha=8090
 +
  retro_exten_tech=SIP
 +
  retro_contexto=Cen_InicioLlamada_GHRetro
 +
  retro_to_descolgar=30
 +
  retro_A_cartel_fmt=retro: %s
 +
<br><br>
 +
Los campos del fichero de configuración y su significado son los siguientes:
 +
<br><br>
 +
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none; text-align:center;"
 +
|-
 +
!Campo!!Descripción
 
|-
 
|-
|5874||accionLog_del_perfil_sala_meet|| || || || || || ||
+
|retro_hay || YES -> se activa la retrollamada '''multinodo''' de '''GH'''; NO -> se utiliza la retrollamada de Asterisk
 
|-
 
|-
|5875||accionLog_del_grupo_sala_meet|| || || || || || ||
+
|subscripcion_hay || YES -> se utilizan los BLFs de '''GH'''; NO -> se utilizan los BLFs de Asterisk
 
|-
 
|-
|5876||accionLog_udel_sala_meet|| || || || || || ||
+
|estado_enlace_hay || YES -> se utilizan la supervisión de enlaces de '''GH'''; NO -> se utiliza  la supervisión de enlaces de Asterisk
 
|-
 
|-
|5877||accionLog_udel_perfil_sala_meet|| || || || || || ||
+
|rest_red_ip || '''IP del servidor donde se ejecuta el intz-gh'''
 
|-
 
|-
|5878||accionLog_udel_grupo_sala_meet|| || || || || || ||
+
|rest_red_msk || Máscara de red donde corre el intz-gh
 
|-
 
|-
!colspan="9"|ALERTAS
+
|rest_puerto_escucha || Puerto de escucha a nivel de VIVAit  Call
 
|-
 
|-
|7000||accionLog_add_ale_entidades|| || || || || || ||
+
|retro_exten_tech || Tecnología empleada en las extensiones
 
|-
 
|-
|7005||accionLog_chg_ale_entidades|| || || || || || ||
+
|retro_contexto || Contexto del GH para retrollamada
 
|-
 
|-
|7010||accionLog_del_ale_entidades|| || || || || || ||
+
|retro_to_descolgar || timeot retrollamada descolgar
 
|-
 
|-
|7015||accionLog_udel_ale_entidades|| || || || || || ||
+
|retro_A_cartel_fmt || Información que aparece en el display si la llamada es una retrollamada
|-
 
|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|| || || || || || ||
 
 
|}
 
|}
 +
<br><br>
 +
[[#Intz-GH| Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
 +
'''Fichero LOG del proceso gran hermano'''
 +
<br><br>
 +
Existe un fichero log donde se guarda la actividad del proceso en el servidor donde se ejecuta ''gran hermano''.<br>
 +
Este fichero se puede consultar en tiempo real con el comando:<br>
 +
    '''tail -f /var/log/intz-gh.log'''
 +
<br><br>
 +
Ejemplo: Activación de una retrollamada por no contesta (parte "A" = 40716, parte "B" = 40702)
 +
<br><br>
 +
  root@preproducciongestion:/tmp# tail -f /var/log/intz-gh.log
 +
  '
 +
    20241104 140039.637    VIC(3/5/172.25.128.254) solicitud:
 +
  identif='gh_000'
 +
  channel='Local/40702@Cen_MARCAR_Grabar-000001b6;2'
 +
  context='Cen_Marcar_Extension_Dial'
 +
  exten='%-NOANSWER'
 +
  priority=33
 +
  entorno='gh'
 +
  servicio='gh1'
 +
  numPar=6
 +
  par0='RETRO_CANDIDATO'
 +
  par1='2'
 +
  par2='40716'
 +
  par3='40702'
 +
    20241104 140039.637    GH1ev enla ESTA_NOT_INUSE hayCambios=1 idNodo=2 enla=PrePro-CORP1 esta=NOT_INUSE inuse=0/0 ringing=0/0
 +
    20241104 140039.637    VIC var MDintzServicio='gh1'
 +
    20241104 140039.637    VIC var MDintzIdentif='gh_000'
 +
    20241104 140039.637    VIC var MDintzRes='OK'
 +
    20241104 140039.637    GH1ev enla ESTA_NOT_INUSE hayCambios=1 idNodo=1 enla=PrePro-CORP2 esta=NOT_INUSE inuse=0/0 ringing=0/0
 +
    20241104 140039.637    VIC var MDintzServicio='gh1'
 +
    20241104 140039.637    VIC var MDintzIdentif='gh_000'
 +
    20241104 140039.637    VIC var MDintzRes='OK'
 +
    20241104 140039.637    GH1ev RETRO_CANDIDATO exten_A=40716 exten_B=40702/'cana' esta=ESPERA_B caduca='20241104 140139'
 +
    20241104 140039.637    VIC var MDintzServicio='gh1'
 +
    20241104 140039.638    VIC var MDintzIdentif='gh_000'
 +
    20241104 140039.638    VIC var MDintzRes='OK'
 +
    20241104 140039.639    VIC(2/172.25.128.251) Desconectando conHilo=0
 +
    20241104 140039.639    VIC(1/172.25.128.254) Desconectando conHilo=0
 +
    20241104 140039.640    VIC(3/172.25.128.254) Desconectando conHilo=0
 +
    20241104 140039.640    VIC(4/172.25.128.251) Conectado ipFd=0
 +
    20241104 140039.643    VIC(5/172.25.128.254) Conectado ipFd=3
 +
    20241104 140039.689    VIC(4/0/172.25.128.251) solicitud:
 +
  identif='gh_000'
 +
  channel='(null)'
 +
  context='default'
 +
  exten='s'
 +
  priority=1
 +
  entorno='gh'
 +
  servicio='gh1'
 +
  numPar=6
 +
  par0='ESTA_NOT_INUSE'
 +
  par1='1'
 +
  par2='40702'
 +
  par3='99'
 +
    20241104 140039.689    VIC(5/3/172.25.128.254) solicitud:
 +
  identif='gh_000'
 +
  channel='(null)'
 +
  context='default'
 +
  exten='s'
 +
  priority=1
 +
  entorno='gh'
 +
  servicio='gh1'
 +
  numPar=6
 +
  par0='ESTA_NOT_INUSE'
 +
  par1='2'
 +
  par2='PrePro-CORP1'
 +
  par3='2147483647'
 +
    20241104 140039.689    GH1ev exten ESTA_NOT_INUSE hayCambios=1 idNodo=1 exten=40702 estaOld=RINGING esta=NOT_INUSE call_limit=99/99 inuse=0/0 ringing=0/0
 +
    20241104 140039.689    VIC var MDintzServicio='gh1'
 +
    20241104 140039.689    VIC var MDintzIdentif='gh_000'
 +
    20241104 140039.689    VIC var MDintzRes='OK'
 +
    20241104 140039.689    GH1ev enla ESTA_NOT_INUSE hayCambios=0 idNodo=2 enla=PrePro-CORP1 esta=NOT_INUSE inuse=0/0 ringing=0/0
 +
    20241104 140039.689    VIC var MDintzServicio='gh1'
 +
    20241104 140039.690    VIC var MDintzIdentif='gh_000'
 +
    20241104 140039.690    VIC var MDintzRes='OK'
 +
    20241104 140039.690    IAS(5) enviado a 172.25.128.251:8090 'GET /mdgh_rest?cmd=ESTA&exten_A_num=40702&exten_A_esta=NOT_INUSE& HTTP/1.0
 +
 
 +
  '
 +
    20241104 140039.690    VIC(4/172.25.128.251) Desconectando conHilo=0
 +
    20241104 140039.691    VIC(5/172.25.128.254) Desconectando conHilo=0
 +
    20241104 140039.693    VIC(6/172.25.128.251) Conectado ipFd=0
 +
    20241104 140039.740    VIC(6/0/172.25.128.251) solicitud:
 +
  identif='gh_000'
 +
  channel='(null)'
 +
  context='default'
 +
  exten='s'
 +
  priority=1
 +
  entorno='gh'
 +
  servicio='gh1'
 +
  numPar=6
 +
  par0='ESTA_NOT_INUSE'
 +
  par1='1'
 +
  par2='40702'
 +
  par3='99'
 +
    20241104 140039.742    GH1ev exten ESTA_NOT_INUSE hayCambios=0 idNodo=1 exten=40702 estaOld=NOT_INUSE esta=NOT_INUSE call_limit=99/99 inuse=0/0 ringing=0/0
 +
    20241104 140039.742    VIC var MDintzServicio='gh1'
 +
    20241104 140039.742    VIC var MDintzIdentif='gh_000'
 +
    20241104 140039.742    VIC var MDintzRes='OK'
 +
    20241104 140039.746    VIC(6/172.25.128.251) Desconectando conHilo=0
 +
    20241104 140039.786    VIC(7/172.25.128.254) Conectado ipFd=0
 +
    20241104 140039.790    VIC(7/0/172.25.128.254) solicitud:
 +
  identif='gh_000'
 +
  channel='(null)'
 +
  context='default'
 +
  exten='s'
 +
  priority=1
 +
  entorno='gh'
 +
  servicio='gh1'
 +
  numPar=6
 +
  par0='ESTA_NOT_INUSE'
 +
  par1='2'
 +
  par2='40716'
 +
  par3='99'
 +
    20241104 140039.790    GH1ev exten ESTA_NOT_INUSE hayCambios=1 idNodo=2 exten=40716 estaOld=INUSE esta=NOT_INUSE call_limit=99/99 inuse=0/0 ringing=0/0
 +
    20241104 140039.790    VIC var MDintzServicio='gh1'
 +
    20241104 140039.791    VIC var MDintzIdentif='gh_000'
 +
    20241104 140039.791    VIC var MDintzRes='OK'
 +
    20241104 140039.791    VIC(7/172.25.128.254) Desconectando conHilo=0
 +
    20241104 140039.890    IAS(5) recibido de 172.25.128.251:8090 'HTTP/1.0 200 OK
 +
 
 +
  {
 +
    "result": "OK"
 +
  }'
 +
    20241104 140039.896    IAS(0) enviado a 172.25.128.254:8090 'GET /mdgh_rest?cmd=ESTA&exten_A_num=40702&exten_A_esta=NOT_INUSE& HTTP/1.0
 +
 
 +
  '
 +
    20241104 140040.097    IAS(0) recibido de 172.25.128.254:8090 'HTTP/1.0 200 OK
 +
 
 +
  {
 +
    "result": "OK"
 +
  }'
 +
    20241104 140040.097    IAS(0) enviado a 172.25.128.252:8180 'GET //IntzPresence/Publish?cmd=ESTA&exten_A_num=40702&exten_A_esta=NOT_INUSE& HTTP/1.0
 +
 
 +
  '
 +
    20241104 140040.297    IAS(0) recibido de 172.25.128.252:8180 'HTTP/1.1 200
 +
  Content-Length: 0
 +
  Date: Mon, 04 Nov 2024 13:00:40 GMT
 +
  Connection: close
 +
 
 +
  '
 +
    20241104 140040.299    IAS(0) enviado a 172.25.128.252:8180 'GET //IntzPresence/Publish?cmd=ESTA&exten_A_num=40716&exten_A_esta=NOT_INUSE& HTTP/1.0
 +
 
 +
  '
 +
    20241104 140040.499    IAS(0) recibido de 172.25.128.252:8180 'HTTP/1.1 200
 +
  Content-Length: 0
 +
  Date: Mon, 04 Nov 2024 13:00:40 GMT
 +
  Connection: close
 +
 
 +
  '
 +
    20241104 140048.209    VIC(1/172.25.128.65) Conectado ipFd=0
 +
    20241104 140048.258    VIC(1/0/172.25.128.65) solicitud:
 +
  identif='gh_000'
 +
  channel='(null)'
 +
  context='default'
 +
  exten='s'
 +
  priority=1
 +
  entorno='gh'
 +
  servicio='gh1'
 +
  numPar=6
 +
  par0='ESTA_UNAVAILABLE'
 +
  par1='3'
 +
  par2='PrePro-Meet-16.04'
 +
  par3='0'
 +
    20241104 140048.258    GH1ev enla ESTA_UNAVAILABLE hayCambios=0 idNodo=3 enla=PrePro-Meet-16.04 esta=UNAVAILABLE inuse=0/0 ringing=0/0
 +
    20241104 140048.258    VIC var MDintzServicio='gh1'
 +
    20241104 140048.258    VIC var MDintzIdentif='gh_000'
 +
    20241104 140048.258    VIC var MDintzRes='OK'
 +
    20241104 140048.259    VIC(1/172.25.128.65) Desconectando conHilo=0
 +
    20241104 140048.262    VIC(2/172.25.128.65) Conectado ipFd=0
 +
    20241104 140048.309    VIC(2/0/172.25.128.65) solicitud:
 +
  identif='gh_000'
 +
  channel='(null)'
 +
  context='default'
 +
  exten='s'
 +
  priority=1
 +
  entorno='gh'
 +
  servicio='gh1'
 +
  numPar=6
 +
  par0='ESTA_UNAVAILABLE'
 +
  par1='3'
 +
  par2='PrePro-Meet'
 +
  par3='0'
 +
    20241104 140048.309    GH1ev enla ESTA_UNAVAILABLE hayCambios=0 idNodo=3 enla=PrePro-Meet esta=UNAVAILABLE inuse=0/0 ringing=0/0
 +
    20241104 140048.309    VIC var MDintzServicio='gh1'
 +
    20241104 140048.309    VIC var MDintzIdentif='gh_000'
 +
    20241104 140048.309    VIC var MDintzRes='OK'
 +
    20241104 140048.310    VIC(2/172.25.128.65) Desconectando conHilo=0
 +
    20241104 140054.863    VIC(3/172.25.128.254) Conectado ipFd=0
 +
    20241104 140054.892    VIC(3/0/172.25.128.254) solicitud:
 +
  identif='gh_000'
 +
  channel='(null)'
 +
  context='default'
 +
  exten='s'
 +
  priority=1
 +
  entorno='gh'
 +
  servicio='gh1'
 +
  numPar=6
 +
  par0='ESTA_INUSE'
 +
  par1='2'
 +
  par2='40716'
 +
  par3='99'
 +
    20241104 140054.893    GH1ev exten ESTA_INUSE hayCambios=1 idNodo=2 exten=40716 estaOld=NOT_INUSE esta=INUSE call_limit=99/99 inuse=1/1 ringing=0/0
 +
    20241104 140054.893    VIC var MDintzServicio='gh1'
 +
    20241104 140054.893    VIC var MDintzIdentif='gh_000'
 +
    20241104 140054.893    VIC var MDintzRes='OK'
 +
    20241104 140054.894    IAS(3) enviado a 172.25.128.252:8180 'GET //IntzPresence/Publish?cmd=ESTA&exten_A_num=40716&exten_A_esta=INUSE& HTTP/1.0
 +
 
 +
  '
 +
    20241104 140054.894    VIC(3/172.25.128.254) Desconectando conHilo=0
 +
    20241104 140055.012    VIC(4/172.25.128.254) Conectado ipFd=0
 +
    20241104 140055.043    VIC(4/0/172.25.128.254) solicitud:
 +
  identif='gh_000'
 +
  channel='Local/*43#@Cen_MARCAR_Grabar-000001b8;2'
 +
  context='Cen_Facilidad_30'
 +
  exten='*43#'
 +
  priority=10
 +
  entorno='gh'
 +
  servicio='gh1'
 +
  numPar=5
 +
  par0='RETRO_SOLICITAR'
 +
  par1='2'
 +
  par2='40716'
 +
  par3='40716'
 +
    20241104 140055.043    GH1ev RETRO_SOLICITAR nuevo ind=4 idNodo_A=2 idDispositivo_A=191 exten_A=40716/'40716' exten_B=40702/'cana' esta=ESPERA_B caduca='20241104 140555'
 +
    20241104 140055.043    VIC var MDintzServicio='gh1'
 +
    20241104 140055.044    VIC var MDintzIdentif='gh_000'
 +
    20241104 140055.044    VIC var MDintzRes='OK'
 +
    20241104 140055.046    VIC(4/172.25.128.254) Desconectando conHilo=0
 +
    20241104 140055.094    IAS(3) recibido de 172.25.128.252:8180 'HTTP/1.1 200
 +
  Content-Length: 0
 +
  Date: Mon, 04 Nov 2024 13:00:55 GMT
 +
  Connection: close
 +
 
 +
  '
 +
    20241104 140057.332    VIC(5/172.25.128.254) Conectado ipFd=0
 +
    20241104 140057.354    VIC(5/0/172.25.128.254) solicitud:
 +
  identif='gh_000'
 +
  channel='(null)'
 +
  context='default'
 +
  exten='s'
 +
  priority=1
 +
  entorno='gh'
 +
  servicio='gh1'
 +
  numPar=6
 +
  par0='ESTA_NOT_INUSE'
 +
  par1='2'
 +
  par2='40716'
 +
  par3='99'
 +
    20241104 140057.355    GH1ev exten ESTA_NOT_INUSE hayCambios=1 idNodo=2 exten=40716 estaOld=INUSE esta=NOT_INUSE call_limit=99/99 inuse=0/0 ringing=0/0
 +
    20241104 140057.355    VIC var MDintzServicio='gh1'
 +
    20241104 140057.355    VIC var MDintzIdentif='gh_000'
 +
    20241104 140057.355    VIC var MDintzRes='OK'
 +
    20241104 140057.355    IAS(5) enviado a 172.25.128.252:8180 'GET //IntzPresence/Publish?cmd=ESTA&exten_A_num=40716&exten_A_esta=NOT_INUSE& HTTP/1.0
 +
 
 +
  '
 +
    20241104 140057.360    VIC(5/172.25.128.254) Desconectando conHilo=0
 +
    20241104 140057.556    IAS(5) recibido de 172.25.128.252:8180 'HTTP/1.1 200
 +
  Content-Length: 0
 +
  Date: Mon, 04 Nov 2024 13:00:57 GMT
 +
  Connection: close
 +
<br><br>
 +
[[#Intz-GH| Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
 +
 +
=== PQCTI ===
 +
<br><br>
 +
 +
 +
<br><br>
 +
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
 +
=== Record ===
 +
<br><br>
  
=== Procesos propios ===
 
 
==== 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.
+
<br><br>
 +
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
 +
=== VCB ===
 +
<br><br>
  
  
Para mas información consultar la página de [[intz-nimitz|intz-nimitz]].
+
<br><br>
 +
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
 +
=== '''''VIVA'''it'' WebCall ===
 +
<br><br>
  
Desde un SSH ejecuta el comando “nc ip_maquina 1115”
 
  
'''root@vivait-acd:~# nc localhost 1115'''
+
<br><br>
intz-nimitz sis ver='V02.6' inic='20140401 110116' alarmas=21 ultAlar='20140414 171244'
+
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
intz-nimitz gmp msj=942/1024 buf=1024/1024 tarea=16/102
+
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
intz-nimitz tmp uptime=1816550 (21d 0h 35m 50s)
+
<br><br>
intz-nimitz vic identif='cms1' entorno='nimitz' conx=0/128 numConx=1018(0)
+
=== '''''VIVA'''it'' Call ===
intz-nimitz mys curro=80/0/0/0 soli=1012(0) soliErr=6(0) soliEncol=0(0/0)
+
<br><br>
intz-nimitz cache colas=128/10/0/0 vdn=128/8/0/0 usuExten=10/0/0/0
 
  
  
Donde cada parámetro monitorizado indica:
+
<br><br>
{| class="wikitable"
+
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
|-
+
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
!Parámetro!!Descripción
+
<br><br>
|-
+
=== '''''VIVA'''it'' Tracker ===
|sis/ver||Versión del proceso
+
<br><br>
|-
+
 
|sis/inic||Fecha de de arranque del proceso
+
 
|-
+
<br><br>
|Sis/alarmas||Alarmas desde arranque
+
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
|-
+
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
|Sis/ultAlar||Fecha de última alarma
+
<br><br>
|-
+
=== '''''VIVA'''it'' Supervisor ===
|Gmp/msj||
+
<br><br>
|-
 
|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'''
+
<br><br>
* Podremos examinar los logs del proceso en '''/var/log/intz-nimitz.log'''
+
[[#Descripción de los elementos del sistema VIVAit | Volver arriba]]
 +
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 +
<br><br>
  
'''Fichero de configuración:'''
+
== Descripción de los elementos, diagnósticos y operaciones ==
  
#
+
=== Funcionamiento en cluster ===
# Los nombres no pueden tener numeros
+
 
# Si el valor de una cadena contiene espacios, se pondra entre comillas dobles
+
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.
# Los valores comentados indican valores por defecto
+
 
+
De un clúster se espera que presente combinaciones de los siguientes servicios:
base
+
 
{
+
# Alto rendimiento
cfg
+
# Alta disponibilidad
{
+
# Balanceo de carga
soy_demonio = 1
+
# Escalabilidad
hay_syslog = 0
+
 
# Archivo con identificador de proceso: (-: /var/run/intz-nimitz.pid)
+
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.
archivo_pid = -
+
 
# Archivo_traza: (-: stdout o /var/log/intz-nimitz.log si soy_demonio)
+
Por lo que las máquinas balancean en los casos siguientes:
# No se usa si se activa hay_syslog
+
 
archivo_traza = -
+
* 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..
}
+
 
cfg_recarga
+
Y no balancea en los siguientes:
{
+
 
# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
+
* 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)
nivel_traza = 3
+
 
pruebas = 1
+
 
hay_flush_traza = 1
+
===== Píldoras =====
}
+
 
sis
+
 
{
+
====== Prevenir que un nodo vuelva a tomar el control tras volver a estar operativo ======
# No se usa. No modificar
+
 
subsistema = 0
+
 
}
+
Cuando queremos evitar que un recurso vuelva al nodo en el que estaba originalmente tras la recuperación del nodo, ejecutaremos la siguiente orden.
gmp
+
 
{
+
  pcs resource defaults resource-stickiness=100
# Numero de mensajes. No modificar
+
 
num_msj = 1024
+
====== Borrar un recurso ======
  # Numero de buffer. No modificar
+
 
num_buf = 1024
+
  pcs resource delete DRBDFs
}
+
 
}
+
====== Sincronización del drbd ======
+
 
  supervision
+
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
{
+
 
puerto_escucha = 1115
+
En el nodo que vamos a sobrescribir los datos ejecutaremos los siguientes comandos.
}
+
 
+
  drbdadm secondary all
supervision_recarga
+
  drbdadm disconnect all
{
+
  drbdadm invalidate all
to_periodo = 60
+
  drbdadm connect all
  }
+
 
   
+
 
  cache
+
Y en el nodo que tiene los datos correctos.
  {
+
 
        hay_cache = 1
+
  drbdadm connect all
}
+
 
   
+
 
cache_recarga
+
====== Mover un recurso de nodo ======
{
+
 
# to_vida = 0, no se almacenan entradas. to_vida > 0 en segundos
+
Para mover un recurso de nodo utilizaremos el siguiente comando.
        colas_to_vida = 300
+
 
        colas_num_entrada = 128
+
  pcs resource move IP-ASTER
        vdn_to_vida = 300
+
  pcs resource clear IP-ASTER
        vdn_num_entrada = 128
+
 
}
+
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).
   
+
 
  regexp
+
La restricción que crea banea el nodo para este recurso, si queremos quitar esta restricción creada.
{
+
 
hay_regexp = 1
+
  pcs resource clear DRBDfsASTER
}
+
 
+
<span style="color:#f32100">Mirar si existe alguna manera de mover un recurso sin que se creen estas restricciones locales</span>
regexp_recarga
+
 
  {
+
 
num_entradas = 32
+
====== Habilitar/deshabilitar recursos ======
inc_entradas = 128
+
 
max_entradas = 1024
+
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.
vivaitcall
+
 
{
+
pcs resource disable resource_id [--wait[=n]]
hay_vic = 1
+
 
puerto_escucha = 5555
+
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.
identif = cms1
+
 
entorno = nimitz
+
pcs resource enable resource_id [--wait[=n]]
max_conx = 128
+
pcs config show
}
+
pcs resource cleanup resource_id
+
  pcs resource clear
vivaitcall_recarga
+
  pcs resource refresh
{
+
 
to_solicitud = 3
+
Borra los Failed Actions de un recurso:
to_desconexion = 3
+
 
ip_valida
+
  pcs resource cleanup [recurso]
{
+
 
# Hasta 32 bloques de direcciones validas
+
====== Notas sincronismo ======
todas
+
 
{
+
Si tenemos este fallo:
ip = 0.0.0.0
+
 
msk = 0.0.0.0
+
  root@VC-PROC-SUMA-ALC-02:/tmp# cat /proc/drbd
}
+
  version: 8.4.10 (api:1/proto:86-101)
localhost
+
  srcversion: 7922D81D3881494EB149253
{
+
  0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r-----
ip = 127.0.0.1
+
  root@VC-PROC-SUMA-ALC-01:~# cat /proc/drbd
msk = 255.255.255.255
+
  version: 8.4.10 (api:1/proto:86-101)
}
+
srcversion: 7922D81D3881494EB149253
}
+
  0: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown  r-----
  }
+
 
   
+
 
  enrutamiento
+
En el nodo principal
{
+
 
hay_enrutamiento = 1
+
  drbdadm connect all
max_pre_ruta_regs = 4
+
 
max_ruta = 4
+
En el nodo secundario
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
 
}
 
  
   
+
  drbdadm -- --discard-my-data connect all
Los siguientes son los campos del fichero de configuración '''int-nimitz.conf''':
 
  
{| class="wikitable"
+
********* En secundario: **************
|-
+
drbdadm secondary drbdASTER
|Variable a modificar||Comentarios||Posibles valores (si aplica)
+
drbdadm disconnect drbdASTER
|-
+
drbdadm -- --discard-my-data connect drbdASTER
|soy_demonio||Si corro como demonio o como proceso||1 demonio – 0 proceso
+
 
|-
+
********* En primario: ****************
|hay_syslog||Si hay servidor de syslog||1 lo hay – 0 no lo hay
+
drbdadm primary drbdASTER
|-
+
drbdadm disconnect drbdASTER
|archivo_pid||# Archivo con identificador de proceso: (-: /var/run/intz-nimitz.pid)||
+
drbdadm connect drbdASTER
|-
+
 
|archivo_traza||# Archivo_traza: (-: stdout o /var/log/intz-nimitz.log si soy_demonio)||
+
 
|-
+
====== Configuración para KVM ======
|nivel_traza||# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)||
+
 
|-
+
'''vi /etc/multipath.conf'''
|pruebas||||
+
-----------------------------
|-
+
defaults {
|hay_flush_traza||||
+
    user_friendly_names yes
|-
+
}
|subsistema||# No se usa. No modificar||
+
blacklist {
|-
+
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]"
|num_msj||# Numero de mensajes. No modificar||
+
devnode "^vd[b-z]?[0-9]"
|-
+
devnode "vda"
|num_buf||# Numero de buffer. No modificar||
+
devnode "vda1"
|-
+
devnode "^drbd[0-9]*"
|puerto_escucha||Puerto de supervisión del demonio||
+
}
|-
+
 
|to_periodo||Timeout para reconectar||
+
systemctl restart multipathd.service
|-
+
 
|hay_cache||si guarda datos o no en cache||1 hay cache – 0 no hay cache
+
'''vi /etc/corosync/corosync.conf'''
|-
+
------------------------------------
|colas_to_vida||# to_vida = 0, no se almacenan entradas. to_vida > 0 en segundos||
+
totem {
|-
+
    version: 2
|colas_num_entrada||Número de entradas correspondiente a las colas||
+
    cluster_name: CLmdtel
|-
+
    transport: knet
|vdn_to_vida||# to_vida = 0, no se almacenan entradas. to_vida > 0 en segundos||
+
    crypto_cipher: aes256
|-
+
    crypto_hash: sha256
|vdn_num_entrada||Número de entradas correspondiente a los VDN||
+
    token: 12000
|-
+
}
|hay_regexp||||
+
nodelist {
|-
+
    node {
|num_entradas||||
+
        ring0_addr: nodo-vc-01
|-
+
        name: nodo-vc-01
|inc_entradas||||
+
        nodeid: 1
|-
+
    }
|max_entradas||||
+
    node {
|-
+
        ring0_addr: nodo-vc-02
|hay_vic||||
+
        name: nodo-vc-02
|-
+
        nodeid: 2
|puerto_escucha||Puerto de escucha a nivel de vivait-call||
+
    }
|-
+
}
|identif ||||
+
quorum {
|-
+
    provider: corosync_votequorum
|entorno||Nombre base de datos||
+
    two_node: 1
|-
+
}
|max_conx||Número máximo de conexiones a la base de datos||
+
logging {
|-
+
    to_logfile: yes
|to_solicitud||Timeout de solicitud||
+
    logfile: /var/log/corosync/corosync.log
|-
+
    to_syslog: yes
|to_desconexion||Timeout de desconexión||
+
    timestamp: on
|-
+
}
|ip||Dirección de red de escucha del intz-nimitz||
+
 
|-
+
systemctl restart corosync
|msk ||Máscara de red de escucha del intz-nimitz||
+
 
|-
+
'''Revisar que están arrancados después de reinicar:'''
|ip||IP localhost||
+
Corosync Pacemaker multipath
|-
+
 
|msk||Máscara localhost||
+
 
|-
+
===== Ejemplo de cluster con mysql y asterisk =====
|hay_enrutamiento||Hay fase de enrutamiento o no||1 hay enrutamiento – 0 no hay
+
 
|-
+
En este ejemplo vamos a crear un cluster que maneje mysql y Asterisk como servicios separados.
|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||
 
|-
 
|}
 
  
 +
Para lograr esto vamos a necesitar que el drbd maneje dos particiones separadas y tener dos ip flotantes, una para cada servicio.
  
 +
====== Requisitos previos ======
  
 +
Los requisitos previos antes de comenzar la instalación del cluster son:
  
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
+
• Nodos correctamente actualizados (update/upgrade).
  
 +
• Conexión a internet.
  
<!--
+
• NTP configurado.
==== intz-gh ====
 
  
intz-gh es un demonio que permite tanto la monitorizacion de extensiones (BLFs), como la activación de retrollamadas entre distintos nodos.
 
  
 +
'''''Creación de las particiones e instalación y configuración del drbd'''''
  
'''Comandos desde consola de asterisk'''
+
====== Particionado (En los 2 nodos) ======
  
mdgh show
+
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:
  
Uso: mdgh show [config | exten <exten_num> | enla <peer>]]
+
• Corporativo -> 50Gb
  
* '''Ejemplo'''
+
• BDTR -> 100Gb
  
mdgh show config
+
Lo siguiente es crear la partición en cada servidor:
mdgh Configuracion:  
+
 
+
 
  debug=no
+
[[File:cluster1.png|400px]]
  retro_hay=yes
+
 
  subscripcion_hay=yes
+
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.
  rest_red_ip=255.255.255.255
+
 
  rest_red_msk=255.255.255.255
+
parted /dev/vdc
  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
+
Una vez ejecutado el comando entraremos en una consola de la aplicación.
 
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
+
Ejecutando el comando
  
  mdgh Datos del enlace Trunk_MDtel:
+
  (parted) print free
 
  Datos en intz-gh:
 
    INUSE=0
 
    RINGING=0
 
    TS=1535610093
 
    HACE=834
 
  
 +
Obtenemos las particiones que tiene el dispositivo actualmente y el espacio libre que disponemos.
  
'''Fichero de log'''
+
[[File:cluster2.png|400px]]
  
/var/log/intz-gh.log
+
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.
  
'''Fichero de configuracion'''
+
(parted) mkpart
  
/etc/MDtel/intz-gh.conf
+
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.
  
  
'''Campos intz-gh.conf'''
+
[[File:cluster3.png|400px]]
  
# Los nombres no pueden tener numeros.
+
Realizaremos la segunda partición volviendo a ejecutar el mismo comando
# Si el valor de una cadena contiene espacios, se pondra entre comillas dobles.
 
# Los valores comentados indican valores por defecto.
 
  
  base
+
  (parted) mkpart
 
+
 
cfg
+
 
{
+
En este ejemplo el nombre para esta partición será '''DRBD-ASTER''' el tipo '''ext4''' y le daremos el espacio restante del disco.
soy_demonio = 1
+
 
hay_syslog = 0
+
[[File:cluster4.png|400px]]
  # Archivo con identificador de proceso: (-: /var/run/intz-nimitz.pid)
+
 
archivo_pid = -
+
 
  # Archivo_traza: (-: stdout o /var/log/intz-nimitz.log si soy_demonio)
+
Para ver el resultado de las particiones podemos ejecutar el comando.
# No se usa si se activa hay_syslog
+
 
archivo_traza = -
+
  lsblk
}
+
 
cfg_recarga
+
[[File:cluster5.png|400px]]
{
+
 
# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
+
  '''Realizamos este mismo proceso en el otro nodo del cluster.'''
nivel_traza = 3
+
 
pruebas = 1
+
 
hay_flush_traza = 1
+
====== Gestión de particiones con LVM (En los 2 nodos) ======
  # traza_milisegundos = 1
+
 
}
+
 
sis
+
Crearemos las 2 particiones lvm en los 2 servidores con los siguientes comandos.
{
+
 
  # No se usa. No modificar
+
En este ejemplo las particiones que queremos utilizar son /dev/sda5 para mysql y /dev/sda6 para Asterisk, esto podrá cambiar en las instalaciones.
subsistema = 0
+
 
}
+
[[File:cluster6.png|400px]]
gmp
+
 
{
+
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
# Numero de mensajes. No modificar
+
 
num_msj = 256
+
 
# Numero de buffer. No modificar
+
====== Instalación y configuración del drbd (En los 2 nodos) ======
num_buf = 256
+
 
}
+
Instalaremos el paquete drbd8-utils. En Ubuntu 20.04 drbd-utils
}
+
 
+
  apt-get install drbd-utils
supervision
+
 
  {
+
Ahora tenemos que editar los archivos de configuración del drbd, estos archivos están en el directorio /etc/drbd.d
puerto_escucha = 1116
+
 
}
+
Primero editaremos la configuración general, el archivo global_common.conf y le añadiremos en la sección net lo siguiente.
+
 
supervision_recarga
+
  vi /etc/drbd.d/global_common.conf
{
+
 
to_periodo = 60
+
[[File:cluster7.png|400px]]
 +
 
 +
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;
 
  }
 
  }
   
+
 
  regexp
+
 
{
+
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.
hay_regexp = 1
+
 
}
+
Creamos el archivo para el recurso mysql con el nombre drbd-mysql.res.
+
 
regexp_recarga
+
  vi drbd-mysql.res
{
+
 
num_entradas = 32
+
El contenido del archivo es:
inc_entradas = 128
+
 
max_entradas = 1024
+
  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;
 +
  }
 
  }
 
  }
   
+
 
  vivaitcall
+
 
  {
+
Ahora haremos lo mismo para el recurso Asterisk, el archivo se llamará: drbd-aster.res.
hay_vic = 1
+
 
puerto_escucha = 5556
+
  vi drbd-aster.res
identif = gh_000
+
 
entorno = gh
+
 
max_conx = 4
+
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;
 +
  }
 
  }
 
  }
 
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 =====
+
'''Realizamos este mismo proceso en el otro nodo del cluster.''' Los ficheros de configuración los podemos copiar de un nodo a otro.
 +
 
 +
 
 +
====== 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.
 +
 
 +
[[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.'''
 +
 
 +
 
 +
====== 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
  
Para las colas con extensiones multiterminal, se ha creado un ha creado un nuevo servicio en intz-nimitz 04.00.00.
+
touch /HDmysql/sinMontar
  
La descripción de nuevo servicio es:
+
mkdir HDaster
 +
touch /HDaster/sinMontar
  
    multiTermGrupoSaltoRing
+
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
    . 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 ====
+
====== Sincronización del drbd. (En 1 nodo) ======
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”
+
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.
 +
 
 +
[[File:cluster9.png|400px]]
  
'''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"
+
===== Pacemaker, corosync y pcs =====
|-
 
!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''':
 
  
#
+
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.
# 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
+
====== Parar y deshabilitar los servicios. (en los 2 nodos) ======
+
 
base
+
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.
{
+
 
cfg
+
/etc/init.d/asterisk stop
{
+
  /etc/init.d/mysql stop
soy_demonio = 1
+
  /etc/init.d/drbd stop
hay_syslog = 0
+
systemctl disable mysql
  # Archivo con identificador de proceso: (-: /var/run/motorSal.pid)
+
systemctl disable drbd
archivo_pid = -
+
  systemctl disable asterisk
  # Archivo_traza: (-: stdout o /var/log/motorSal.log si soy_demonio)
+
 
  # No se usa si se activa hay_syslog
+
 
archivo_traza = -
+
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
}
+
 
cfg_recarga
+
 
{
+
====== Instalación de los paquetes necesarios. (En los 2 nodos) ======
# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
+
 
nivel_traza = 2
+
Instalamos los paquetes necesarios.
pruebas = 0
+
 
hay_flush_traza = 1
+
  apt install corosync pacemaker pcs
# traza_milisegundos = 1
+
 
}
+
 
sis
+
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
{
+
 
  # No se usa. No modificar
+
 
subsistema = 0
+
====== Configuramos la clave del usuario hacluster. (En los 2 nodos) ======
}
+
 
gmp
+
Al instalar los paquetes se crea un usuario hacluster que tenemos que ponerle clave
{
+
 
# Numero de mensajes. No modificar
+
  passwd hacluster
num_msj = 256
+
 
# Numero de buffer. No modificar
+
La clave deberá ser la misma en los 2 nodos. '''ivivacluster'''
num_buf = 256
+
 
}
+
 
}
+
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
+
 
supervision
+
 
{
+
====== Autentificación del pcs. (En 1 nodo) ======
puerto_escucha = 1120
+
 
}
+
En uno de los nodos ejecutamos el siguiente comando para autenticar el pcs.
 
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
 
}
 
  
 +
pcs host auth nodo-vc-01 nodo-vc-02 -u hacluster -p ivivacluster
  
Los campos del fichero de configuración son los siguientes:
+
El resultado del comando tiene que ser:
  
{| class="wikitable"
+
<span style="color:#007bca">VC-CORP-Cetelem-Mad-cl1: Authorized
|-
+
VC-CORP-Cetelem-Mad-cl2: Authorized</span>
!Campo !!Descripción !!Posibles valores (si aplica)
+
 
|-
+
====== Creación y configuración del cluster. (En 1 nodo) ======
|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'''
+
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)
  
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
+
pcs cluster setup CLmutuaint  nodo-vc-01 nodo-vc-02 --start --enable --force
  
==== MyACDSuperv ====
+
Si todo ha ido bien la salida debería ser algo como esto.
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.
+
[[File:cluster10.png|500px]]
  
Es también el proceso que genera las llamadas en el marcador automático de '''''VIVA'''''it Suite.
+
Lo habilitamos '''''en todos los nodos'''''
  
A efectos de diagnósticos, desde un SSH se ejecuta el comando “nc ip_maquina 1112”.
+
pcs cluster enable --all
  
'''root@vivait-acd:~# nc localhost 1112'''
+
La salida será:
  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
+
  <span style="color:#007bca">VC-CORP-CDS-MAD-01: Cluster Enabled
myAcdSuperv MYSQL cnx=1 ms=316
+
  VC-CORP-CDS-MAD-02: Cluster Enabled</span>
  
Donde cada parámetro monitorizado indica:
+
Arrancamos el cluster '''en todos los nodos'''
{| 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
 
|-
 
|}
 
  
Como complemento a los diagnósticos:
+
pcs cluster start --all
  
* 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'''
 
  
 +
[[File:cluster11.png|500px]]
  
 +
Comprobamos que todo está correcto con el siguiente comando:
  
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
+
Nos mostrara el estado del cluster.
  
==== Proceso escoba ====
+
[[File:cluster12.png|700px]]
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'''''.
 
  
===== 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 =====
+
En la salida del comando, vemos que STONITH (Shoot The Other Node In The Head) esta activado, pero no hay dispositivos configurados.
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.
 
  
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
+
Quitamos el STONITH.
* 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 ====
+
pcs property set stonith-enabled=false --force
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:
+
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.
* Uno dedicado para las llamadas
+
 
* Uno dedicado para los segmentos
+
pcs property set no-quorum-policy=ignore --force
* Uno mixto para todas las llamadas y segmentos.
+
 
 +
 
 +
Vamos a ver la lista de propiedades del cluster para ver que hemos deshabilitado todo correctamente.
  
 +
pcs property list
  
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:
+
[[File:cluster13.png|500px]]
'''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:
+
====== 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.
# Configuracion de recordCentral.pl
+
 
#
+
Creamos la IP para el mysql.
# 0: Solo alarmas en archivo log - 1: alarmas y trazas
+
 
$depurar = 1;
+
  pcs resource create IP-MYSQL ocf:heartbeat:IPaddr2 ip=128.1.4.205 nic=eno1:0 cidr_netmask=16 op monitor interval=60s
+
 
# 0: Arranca como proceso - 1: arranca como demonio
+
Y la IP para el Asterisk
$soyDemonio = 1;
+
 
+
  pcs resource create IP-ASTER ocf:heartbeat:IPaddr2 ip=128.1.4.207 nic=eno1:1 cidr_netmask=16 op monitor interval=60s
# Archivo de log ('': salida estandar)
+
 
$logArch = '/var/log/record/recordCentral.log';
+
Comprobamos el estado del cluster.
 
# 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;
 
 
   
 
   
 +
pcs status
 +
 +
Nos mostrará los nuevos recursos creados y nos indicará en que nodo han sido arrancados.
 +
 +
 +
[[File:cluster14.png|600px]]
 +
 +
 +
 +
====== 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
  
*Los campos del fichero de configuración son los siguientes:
+
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.
  
{| class="wikitable"
+
[[File:cluster15.png|700px]]
|-
+
 
!Campo !!Descripción !!Posibles valores (si aplica)
+
 
|-
+
====== Montar las particiones del drbd. (En 1 nodo) ======
|recordCentral.pconf|| ||
+
 
|-
+
Formatearemos las particiones del drbd.
|Variable a modificar||Comentarios||
+
 
|-
+
mkfs.ext4 /dev/drbd1
|$depurar||# 0: Solo alarmas en archivo log - 1: alarmas y trazas||
+
mkfs.ext4 /dev/drbd0
|-
+
 
|$soyDemonio||# 0: Arranca como proceso - 1: arranca como demonio||
+
Una vez finalizado el proceso la pantalla mostrará a siguiente información (para cada comando).
|-
+
 
|$logArch =||# Archivo de log ('': salida estandar)||
+
[[File:cluster16.png|700px]]
|-
+
 
|$pidArch||# Archivo para el pid (eliminando el .pid final)||
+
 
|-
+
Ahora crearemos el recurso para montar la partición de mysql en el directorio que creamos.
|$unaVezSolo||# 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion)||
+
 
|-
+
Vamos a crear restricciones para asegurarnos que los recursos estén todos en el nodo correcto y que arrancan en orden.
|$toBucle||# Tiempo de espera en segundos cuando no hay conexion o cuando no hay llamadas||
+
 
|-
+
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.
|$bytesPorSegundo||# Bytes por segundo en archivos de grabaciones||
+
 
|-
+
pcs cluster cib fs_mysql_cfg
|$bytesLeerBuf||# Bytes a leer en cada accceso a disco||
+
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
|$db||Nombre de la base de datos||
+
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
|$dbHost||IP o HOST máquina base de datos de tiempo real||
+
pcs -f fs_mysql_cfg constraint order DRBDfsMYSQL then IP-MYSQL
|-
+
  pcs cluster cib-push fs_mysql_cfg
|$dbPort||Puerto de escucha de mysql||
+
  pcs status
|-
+
 
|$dbUsuario||Usuario acceso Base de datos de tiempo real||
+
La salida mostrará lo siguiente:
|-
 
|$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||
 
|-
 
|}
 
  
 +
[[File:cluster17.png|700px]]
  
<!--
+
Nos indica que el Filesystem está creado y montado en el nodo nodo-vc-01.
:Se explican a continuación las variables más importantes del proceso RecordCentral:
 
  
# Conexion de base de datos
+
Ahora haremos lo mismo para la partición de Asterisk.
$db='nimitz';
 
$dbHost = 'BDTR';
 
$dbPort = '3306';
 
$dbUsuario = 'nimitz';
 
$dbClave = 'ivivanimitz';
 
  
# Configuracion de archivos con grabaciones (Orig en nodo)
+
pcs cluster cib fs_aster_cfg
$grabHay = 0;
+
pcs -f fs_aster_cfg resource create DRBDfsASTER Filesystem device="/dev/drbd1" directory="/HDaster" fstype="ext4"
$grabAudioCalidad = 32;
+
pcs -f fs_aster_cfg constraint colocation add DRBDfsASTER with DRBDasterClone INFINITY with-rsc-role=Master
$grabAudioFormato = 'ogg';
+
pcs -f fs_aster_cfg constraint order promote DRBDasterClone then start DRBDfsASTER
$grabAudioExten = 'ogg';
+
pcs -f fs_aster_cfg constraint colocation add IP-ASTER with DRBDfsASTER INFINITY
$grabAudioCifrado = 0;
+
pcs -f fs_aster_cfg constraint order DRBDfsASTER then IP-ASTER
$grabRutaUsaTimestamp = 1;
+
pcs cluster cib-push fs_aster_cfg
$grabRutaOrig = '/var/lib/recordNodo/grabaciones';
+
pcs status
$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)
+
Vemos que ya tenemos las 2 particiones montadas.
$tiposSegmentoGrabar = '';
 
  
# Indica si se graba ring
+
[[File:cluster18.png|700px]]
$grabarRing = 0;
 
  
-->
 
  
* Podremos examinar los logs del proceso en '''/var/log/recordCentral.log'''
+
======  Copiar datos de Asterisk a partición drbd. (En nodo 1) ======
<!-- 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.
+
Esto hay que realizarlo en el nodo en el que está montada la partición drbd para asterisk. Estará montado en la carpeta /HDaster
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
 
-->
 
  
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
+
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
  
==== recordNodo ====
+
====== Borrar los directorios de asterisk y crear enlaces simbólicos. (En los 2 nodos) ======
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.
+
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
  
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'''.
+
  rm -rf /usr/lib/asterisk
 +
  ln -s /HDaster/usr/lib/asterisk /usr/lib/asterisk
  
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.
+
  rm -rf /var/spool/asterisk
 +
ln -s /HDaster/var/spool/asterisk /var/spool/asterisk
  
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:
+
======  Copiar datos de mysql a partición drbd. (En 1 nodo) ======
  
root@smadavgw5:~#nc localhost 1113
+
Esto hay que realizarlo en el nodo en el que está montada la partición drbd para mysql. Estará montado en la carpeta /HDmysql
recordNodo SIS ver='04.00.00' inic='20160326 105137' alarmas=2 ultAlar='20160326 105542'
 
recordNodo MYSQL cnx=1
 
recordNodo REC grabNum=0 grabErr=0
 
  
 +
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
  
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/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:
+
======  Borrar los directorios de mysql y crear enlaces simbólicos. (En los 2 nodos) ======
* 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:
+
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
  
{| class="wikitable"
+
rm -rf /var/lib/mysql
|-
+
ln -s /HDmysql/var/lib/mysql /var/lib/mysql
!Campo !!Descripción !!Posibles valores (si aplica)
+
rm -rf /etc/mysql
|-
+
ln -s /HDmysql/etc/mysql /etc/mysql
|$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).
 
|-
 
|}
 
  
<!--
 
: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
+
======  Modificar configuración de apparmor para mysql. (En los 2 nodos) ======
$miNodo = 1;
 
  
# Indica si se procesan segmentos de tipo tipoSegmEliminarGrabacion y patron eliminación
+
Debemos cambiar la configuración de apparmor para darle a mysql acceso a la nueva localización de los ficheros.
$segmEliminarGrabacionTrato = 1;
 
$patronEliminarGrabacion = '/etc/MDtel/null.bin';
 
  
 +
Debemos modificar el fichero /etc/apparmor.d/usr.sbin.mysqld
  
 +
vi /etc/apparmor.d/usr.sbin.mysqld
  
-->
 
* Podremos examinar los logs del proceso en '''/var/log/recordNodo.log'''
 
  
 +
Y dejarlo configurado con la nueva ubicación de los ficheros. Debe quedar así:
  
  
==== Sercen ====
+
[[File:cluster19.png|300px]]
  
Sercen (Servicios Centrales) es un demonio de VIVAit que provee servicios centralizados
+
[[File:cluster20.png|300px]]
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
 
  
 +
Aplicamos los cambios con:
  
Ejemplos de servicios:
+
apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
  
'''- Autenticación, de factor simple o doble factor'''
+
'''Realizamos este mismo proceso en el otro nodo del cluster.'''
  
'''- Integración con proveedores de autenticación'''
+
======  Modificar archivos de configuración de mysql. (En 1 nodo) ======
  
'''- Click2talk (Demonio dentro de Vivait)'''
+
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.
  
Sercen permite autenticar un usuario (simple factor o doble factor), utilizando para ello
+
Modificamos el fichero my.cnf.fallback
la base de datos de vivait y/u otro mecanismo externo, como puede ser el directorio
 
activo de Microsoft.
 
  
SerCen se relaciona con :
+
vi  /HDmysql/etc/mysql/my.cnf.fallback
  
  
'''- BBDD'''
+
Deberá quedar así.
  
'''- Asterisk (para el click2talk)'''
 
  
'''- VIVAit Meet (para por ejemplo las funciones “botón colaborar” y ”Recursos
+
[[File:cluster21.png|300px]]
compartidos”.'''
 
  
'''- Con los portales a los que proporciona los servicios vía webservice'''
+
Ahora el fichero mysql.cnf.
  
 +
vi /HDmysql/etc/mysql/mysql.cnf
  
 +
Y quedará así.
  
===== Interfaz para autenticación (app-webfon / serCen) =====
+
[[File:cluster22.png|400px]]
  
 +
El fichero mysqld.cnf.
  
 +
vi /HDmysql/etc/mysql/mysql.conf.d/mysqld.cnf
  
 +
[[File:cluster23.png|400px]]
  
  
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.
+
Y por último el fichero my.cnf.
  
 +
vi /HDmysql/etc/mysql/my.cnf
  
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.
+
Y quedara de la siguiente manera. (datadir / log_bin / includedir)
  
  
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.
+
[[File:cluster24.png|500px]]
  
  
 +
[[File:cluster25.png|500px]]
  
  
===== Comandos de SerCen =====
+
[[File:cluster26.png|400px]]
  
  
Los diferentes comandos de SerCen son:
+
======  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.
  
{| class="wikitable"
+
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
! COMANDOS !! DESCRIPCIÓN
+
pcs -f mysql_cfg constraint colocation add MYSQL with IP-MYSQL INFINITY
|-
+
pcs -f mysql_cfg constraint order IP-MYSQL then  MYSQL
| autenticar1 || Para autenticar en base al primer factor (usuario y clave).
+
pcs cluster cib-push mysql_cfg
|-
+
pcs status
| 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.
 
|}
 
  
  
 +
====== 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
  
====== Comandos autenticar1 ======
 
  
Comandos autenticar1 y respuestas posibles:
+
====== Mover los recursos a otra máquina. (En 1 nodo) ======
  
autenticar1. Autenticación primer factor.
+
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.
  
url (POST): https://<servidor_webfon>/sercen/postautenticar1
+
Para mover un recurso de nodo utilizaremos el siguiente comando en el nodo que está el recurso ejecutándose.
  
datos de entrada:    '''{"cuenta": "fulano","clave$1aA": "dificil","aplicacion": "webfon","expira": 7200,"clvCambiar": "masdificil$1aA"}'''
+
pcs resource move DRBDfsASTER
  
* "expira" es opcional y siempre posible. Permite solicitar un periodo de expiración (segs) para el token devuelto.
+
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).
  
*  "clvCambiar" es opcional y solo se tiene en cuenta si no hay doble factor. Permite cambiar la clave del usuario, si es autenticado.
+
La restricción que crea banea el nodo para este recurso, si queremos quitar la restricción creada.
  
 +
pcs resource clear DRBDFsAst
  
'''Ejemplos de posibles respuestas:'''
+
 
 +
-----------------------------------------------------------------------------------------------------------------------------
 +
 
 +
==== Instalación y configuración del Cluster hasta la versión '''''<span style="color:#144F9B">VIVA</span>'''''it 3.3 ====
 +
.
  
  
{| class="wikitable"
 
|-
 
! 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}
 
|}
 
  
 +
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:
  
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.
+
'''[[Instalación y configuración del Cluster hasta la versión VIVAit 3.3]]'''
  
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.
+
=== Servicios networking ===
 +
Son muy importantes las configuraciones adecuadas de los servicios de:
  
La clave es válida y hay doble factor en ejRes4.
+
* '''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
  
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
+
* '''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 '''''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
  
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
+
=== Bases de datos (BBDD)===
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 ======
 
  
 +
==== Diagnósticos y operaciones sobre bases de datos ====
  
Comandos autenticar2 y respuestas posibles:
+
=====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'''
  
autenticar2. Autenticación doble factor.
+
Si la base de datos está arrancada y funcionando correctamente se nos mostrará en el terminal:
 +
[[Archivo:Base_Datos_bien.png‎ |500px|center]]
  
url (POST): https://<servidor_webfon>/sercen/postautenticar2
+
Por el contrario, si la base de datos presenta algun problema el mensaje mostrado será:
  
datos de entrada: '''{"token": "1234567890","pin": "1234","expira": 7200,"clvCambiar": "masdificil$1aA"}'''
+
[[Archivo:Base_datos_mal.png |center]]
  
* "expira" es opcional.
+
=====Comprobación que la base de datos de réplica está sincronizada con la base de datos de tiempo real.=====
* "clvCambiar" es opcional. Permite cambiar la clave del usuario, si es autenticado.
 
  
 +
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'''.
  
'''Ejemplos de posibles respuestas:'''
+
Una vez introducido veremos:
  
 +
[[Archivo:Replica.png |980px|center]]
  
{| class="wikitable"
+
Comandos importantes, desde dentro consola de Mysql:
|-
 
! 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}
 
|}
 
  
 +
'''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.
 +
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
  
Este comando se invoca para autenticar en base a un segundo factor: pin enviado por un medio de transporte independiente.
+
=== Tabla Dat_Log ===
  
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.
+
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:
  
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.
+
[[BD.DAT_LOG]]
 
+
 
 
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:
 
  
 
+
En la siguiente tabla se especifican algunos de los posibles valores de los campos, en función del valor de E_ACCION.
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"
 
{| class="wikitable"
 
|-
 
|-
! Ejemplo !! Respuesta
+
!E_ACCION Nº!!E_ACCION TAccionLog!!Descripción de la acción!! `C_TABLA` !! `ID_REGISTRO` !! `N_PAR1` !! `N_PAR2` !! `C_PAR3` !! `C_PAR4`
 +
|-
 +
|10||accionLog_escuchar_seg||Escuchar segmento|| || || || || ||
 +
|-
 +
|20||accionLog_escuchar_lla||Escuchar llamada|| || || || || ||
 +
|-
 +
|30||accionLog_descargar_seg||Descargar segmento|| || || || || ||
 
|-
 
|-
| ejRes1 || {"errorNum": 101,"errorCad": "Token incorrecto"}
+
|40||accionLog_descargar_lla||Descargar llamada|| || || || || ||
 
|-
 
|-
| ejRes2 || {"errorNum": 0,"errorCad": "OK","token": "1234567890","dobleFactor": "email"}
+
|50||accionLog_generar_config||Generar configuración|| || || || || ||
 
|-
 
|-
| ejRes3 || {"errorNum": 0,"errorCad": "OK","token": "1234567890","dobleFactor": "no","token2": "0987654321","expira": 3600}
+
|60||accionLog_cambiar_clave_propia||Cambiar clave propia|| || || || || ||
|}
+
|-
 
+
|65||accionLog_login_correcto||Login correcto||||idUsuario||nivelSupervisor|| ||
 
 
====== 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
+
|70||accionLog_login_erroneo||Login erroneo|| || || || || ||
 
|-
 
|-
| ejRes1 || {"errorNum": 100,"errorCad": "Token expirado"}
+
|80||accionLog_login_multiple||Login multiple|| || || || || ||
 
|-
 
|-
| ejRes2 || {"errorNum": 103,"errorCad": "Token incorrecto"}
+
|90||accionLog_escuchar_ext||Escuchar Extensión|| || || || || ||
 
|-
 
|-
| ejRes3 || {"errorNum": 0,"errorCad": "OK","expira": 2538}
+
|100||accionLog_chg_objetivo_peso||Modificar nivel servicio|| ||idCola||objetivo||peso|| ||
|}
 
 
 
 
 
 
 
====== 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:
 
 
 
 
 
{| class="wikitable"
 
 
|-
 
|-
! Ejemplo !! Respuesta
+
|105||accionLog_add_agente_cola_bd||Añadir agente a grupo BD|| ||idCola||agente||prioridad||obligatorio||
 
|-
 
|-
| ejRes1 || {"errorNum": 100,"errorCad": "Token expirado"}
+
|115||accionLog_del_agente_cola_bd||Quitar agente de grupo BD|| ||idCola||agente|| ||
 
|-
 
|-
| ejRes2 || {"errorNum": 103,"errorCad": "Token incorrecto"}
+
|125||accionLog_prio_agente_cola_bd||Modificar prioridad agente en grupo BD|| ||idCola||agente||prioridad||obligatorio|| 
 
|-
 
|-
| ejRes3 || {"errorNum": 0,"errorCad": "OK","expira": 3600}
+
|135||accionLog_perfil_agente_bd||Asignar perfil a agente BD|| ||idAgente||perfil||  ||||
|}
 
 
 
 
 
 
 
====== Comando revocartoken ======
 
 
 
Permite revocar un token.
 
 
 
 
 
url (POST): https://<servidor_webfon>/sercen/postrevocartoken
 
 
 
 
 
datos de entrada: '''{"token": "1234567890","token2": "0987654321"}'''
 
 
 
 
 
Ejemplos de posibles respuestas:
 
 
 
 
 
{| class="wikitable"
 
 
|-
 
|-
! Ejemplo !! Respuesta
+
|140||accionLog_add_agente||Añadrid agente|| || ||  || || ||
 
|-
 
|-
| ejRes1 || {"errorNum": 103,"errorCad": "Token incorrecto"}
+
|145||accionLog_del_agente||Borrar agente|| || ||  || || ||
 
|-
 
|-
| ejRes2 || {"errorNum": 0,"errorCad": "OK"}
+
|150||accionLog_chg_agente||Modificar agente|| ||idAgente|| || ||nombre||cuenta
|}
 
 
 
 
 
====== 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:
 
 
 
 
 
{| class="wikitable"
 
 
|-
 
|-
! Ejemplo !! Respuesta
+
|155||accionLog_add_agenda_perfil||Añadir agenda a perfil|| ||idPerfil||idAgenda||  || ||
 
|-
 
|-
| ejRes1 || {"errorNum": 102,"errorCad": "Clave incorrecta"}
+
|160||accionLog_del_agenda_perfil||Borrar agenda de perfil|| ||idPerfil||idAgenda||  || ||
 
|-
 
|-
| ejRes2 || {"errorNum": 117,"errorCad": "Clave demasiado simple"}
+
|165||accionLog_add_entrada_agenda||Añadir entrada a agenda|| || ||idAgenda|| ||nombre||numero
 
|-
 
|-
| ejRes3 || {"errorNum": 118,"errorCad": "Clave con caracteres no soportados"}
+
|170||accionLog_del_entrada_agenda||Borrar entrada de agenda|| ||idEntrada||idAgenda|| ||nombre||numero
 
|-
 
|-
| ejRes4 || {"errorNum": 119,"errorCad": "Clave no admite cambio"}
+
|175||accionLog_chg_entrada_agenda||Modificar entrada de agenda|| ||idEntradaAgenda|| || ||nombre||numero
 
|-
 
|-
| ejRes5 || {"errorNum": 120,"errorCad": "Clave repetida"}
+
|180||accionLog_add_agenda||Añadir agenda|| || || || ||nombre||descripción
 
|-
 
|-
| ejRes6 || {"errorNum": 0,"errorCad": "OK","clvExpira": 86400}
+
|185||accionLog_del_agenda||Borrar agenda|| || ||  || || ||
 
|-
 
|-
|}
+
|190||accionLog_chg_agenda||Modificar agenda|| ||idAgenda|| || ||nombre||descripción
 
 
 
 
 
 
 
 
===== Posibles errores =====
 
 
 
 
 
{| class="wikitable"
 
 
|-
 
|-
! Número de error !! Descripción breve
+
|195||accionLog_add_etiqueta_agente||Añadir etiqueta agente|| || || || ||nombre||descripción
 
|-
 
|-
| 0 || OK
+
|200||accionLog_del_etiqueta_agente||Borrar etiqueta agente|| ||idEtiqueta|| ||  || ||
 
|-
 
|-
| 100 || Token expirado
+
|205||accionLog_chg_etiqueta_agente||Modificar etiqueta agente|| ||idEtiqueta|| || ||nombre||descripción
 
|-
 
|-
| 101 || Pin expirado
+
|210||accionLog_add_rel_etiqueta_agente||Añadir relación etiqueta agente|| ||idEtiqueta|| idUsuario||  || ||
 
|-
 
|-
| 102 || Clave incorrecta
+
|215||accionLog_del_rel_etiqueta_agente||Borrar relación etiqueta agente|| ||idEtiqueta|| idUsuario||  || ||
 
|-
 
|-
| 103 || Token incorrecto
+
|220||accionLog_chg_rel_etiqueta_agente||Modificar relación etiqueta agente|| ||idEtiqueta|| idUsuario||  || ||
 
|-
 
|-
| 104 || Token2 incorrecto
+
|225||accionLog_add_perfil||Añadir perfil|| || || ||  ||nombre||descripción
 
|-
 
|-
| 105 || Pin incorrecto
+
|230||accionLog_del_perfil||Borrar perfil|| ||idPerfil|| ||  || ||
 
|-
 
|-
| 106 || Token comprometido
+
|235||accionLog_chg_perfil||Modificar perfil|| ||idPerfil|| || ||nombre||descripción
 
|-
 
|-
| 107 || Token anulado
+
|240||accionLog_add_rel_cola_perfil_bd||Añadir relación grupo ACD/perfil BD|| ||idCola|| idPerfil||prioridad||obligatorio|| 
 
|-
 
|-
| 108 || Token inválido
+
|250||accionLog_del_rel_cola_perfil_bd||Borrar relación grupo ACD/perfil BD|| ||idCola|| idPerfil||prioridad||obligatorio|| 
 
|-
 
|-
| 115 || Clave caducada
+
|260||accionLog_chg_rel_cola_perfil_bd||Modificar relación grupo ACD/perfil BD|| ||idCola|| idPerfil||prioridad||obligatorio|| 
 +
|-
 +
|265||accionLog_add_cola||Añadir grupo ACD|| || || || ||nombre||descripción
 +
|-
 +
|270||accionLog_del_cola||Borrar grupo ACD|| || || || ||  ||
 +
|-
 +
|275||accionLog_chg_cola||Modificar grupo ACD|| ||idAgente|| || ||nombre||descripción
 +
|-
 +
|280||accionLog_add_campanna_cola_bd||Añadir campaña a grupo ACD BD|| ||idCola||idCampanna||  || ||
 
|-
 
|-
| 116 || Clave expirada
+
|285||accionLog_del_campanna_cola_bd||Borrar campaña de grupo ACD BD|| || ||  || || ||
 
|-
 
|-
| 117 || Clave demasiado simple
+
|290||accionLog_chg_cola_algor_predic||Cambiar algoritmo predictivo de grupo ACD|| || || || || ||
 
|-
 
|-
| 118 || Clave con caracteres no soportados
+
|300||accionLog_enviar_msj||Enviar mensaje ||tipo_msj||ambito||id_ambito||N_VAR1||N_VAR2||C_VAR3
 
|-
 
|-
| 119 || Clave no admite cambio
+
|305||accionLog_cerrar_sesion||Cerrar sesión|| ||idUsuario||forzado||segundos||fecha||motivo
 
|-
 
|-
| 120 || Clave repetida
+
|310||accionLog_activa_campanna_bd||Activar campaña|| ||idCampanna||activa|| ||  ||
 
|-
 
|-
| 400 || Error en datos de entrada
+
|320||accionLog_grabacion_sombra||Grabación en la sombra|| || ||  || || ||
 
|-
 
|-
| 401 || Error registro de extensión
+
|330||accionLog_add_filtro_contactos|| || || ||  || || ||
 
|-
 
|-
| 402 || Error en el estado del dispositivo
+
|335||accionLog_del_filtro_contactos|| || || ||  || || ||
 
|-
 
|-
| 403 || Error en el estado de la media con el navegador
+
|340||accionLog_chg_filtro_contactos|| || || ||  || || ||
 
|-
 
|-
| 404 || No hay línea libre
+
|350||accionLog_add_val_filtro_contactos|| || || ||  || || ||
 
|-
 
|-
| 405 || La línea no está libre
+
|355||accionLog_del_val_filtro_contactos|| || || ||  || || ||
 
|-
 
|-
| 406 || La línea es errónea
+
|400||accionLog_activar_contactos|| || ||idCampanna|| ||  || ||
 
|-
 
|-
| 407 || Línea en estado erróneo
+
|405||accionLog_cancelar_contactos|| || ||idCampanna|| ||  || ||
 
|-
 
|-
| 408 || JSEP obligatorio
+
|410||accionLog_orden_contactos|| || ||idCampanna|| ||  || ||
 
|-
 
|-
| 409 || JSEP ‘offer’ obligatorio
+
|415||accionLog_prioridad_contactos|| || ||idCampanna|| || || ||
 
|-
 
|-
| 410 || Cifrado extremo a extremo no soportado
+
!colspan="9"|ACCIÓN LOGS PORTAL: Faltan añadir en la BD (Datos versión) y Revisar si ya existen. Poner los parámetros
 
|-
 
|-
| 411 || Canal de datos no soportado
+
|5310||accionLog_chg_acd_configuracion|| || || || || || ||
 
|-
 
|-
| 412 || Comando desconocido
+
|5315||accionLog_add_acd_finales|| || || || || || ||
 
|-
 
|-
| 413 || No hay recursos
+
|5320||accionLog_chg_acd_finales|| || || || || || ||
 
|-
 
|-
| 414 || No hay conferencia libre
+
|5325||accionLog_del_acd_finales|| || || || || || ||
 
|-
 
|-
| 415 || Error conferencia
+
|5330||accionLog_add_acd_formularios|| || || || || || ||
 
|-
 
|-
| 416 || Línea no conectada
+
|5335||accionLog_chg_acd_formularios|| || || || || || ||
 
|-
 
|-
| 500 || Error interno
+
|5340||accionLog_del_acd_formularios||||||||||||||
|}
 
 
 
 
 
 
 
 
 
===== 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:
 
 
 
[[File:sercen1.png |1000px]]
 
 
 
Clave errónea:
 
 
 
[[File:sercen2.png |1000px]]
 
 
 
==== 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.
 
 
 
 
 
[[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.
 
 
 
 
 
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'''
 
 
 
 
 
 
 
 
 
===== Servicios web =====
 
 
 
 
 
Los servicios web que proporciona la aplicación son de dos tipos:
 
 
 
 
 
1. Operativos
 
 
 
 
 
 
 
{| class="wikitable sortable"
 
 
|-
 
|-
! Comando!! Descripción
+
|5345||accionLog_add_acd_pausas|| || || || || || ||
 +
|-
 +
|5350||accionLog_chg_acd_pausas|| || || || || || ||
 +
|-
 +
|5355||accionLog_del_acd_pausas|| || || || || || ||
 +
|-
 +
|5359||accionLog_add_cen_molticanal_texto_entrada|| || || || || || ||
 
|-
 
|-
| '''cmd_llamar''' || Inicia una llamada saliente desde una extensión vivait-call.
+
|5360||accionLog_add_acd_supercolas|| || || || || || ||
 
|-
 
|-
| '''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.
+
|5361||accionLog_del_cen_molticanal_texto_entrada|| || || || || || ||
 
|-
 
|-
|}
+
|5362||accionLog_udel_cen_molticanal_texto_entrada||||||||||||||
 
 
 
 
 
 
 
 
 
 
2. Informativos
 
 
 
 
 
 
 
{| class="wikitable sortable"
 
 
|-
 
|-
! Comando!! Descripción
+
|5363||accionLog_add_cen_molticanal_texto_salida|| || || || || || ||
 
|-
 
|-
| '''info_llamadas''' || Informa sobre las llamadas registradas en pqcti. Devuelve un array con la información de cada llamada.
+
|5364||accionccionLog_chg_cen_molticanal_texto_salida|| || || || || || ||
 
|-
 
|-
| '''info_llamadas_num''' || Devuelve el número de llamadas registradas en pqcti.
+
|5365||accionLog_chg_acd_supercolas|| || || || || || ||
 
|-
 
|-
| '''info_llamada''' || Devuelve la información de la llamada cuyo ucid se pasa como parámetro de invocación.
+
|5366||accionLog_udel_cen_molticanal_texto_salida|| || || || || || ||
 
|-
 
|-
|}
+
|5367||accionLog_chg_cen_molticanal_texto_entrada|| || || || || || ||
 
 
 
 
 
 
===== 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" ------
 
 
 
:{|
 
 
|-
 
|-
|
+
|5368||accionLog_del_cen_molticanal_texto_salida|| || || || || || ||
 
+
|-
------ Añadir debajo de "$(subst .c,.o,$(wildcard
+
|5370||accionLog_del_acd_supercolas|| || || || || || ||
confbridge/*.c)): _ASTCFLAGS+=$(call
+
|-
MOD_ASTCFLAGS,app_confbridge)" ------
+
|5375||accionLog_udel_acd_supercolas|| || || || || || ||
# wkw inicio
+
|-
$(if $(filter app_md_pqcti,$
+
|5380||accionLog_add_acd_vdn|| || || || || || ||
(EMBEDDED_MODS)),modules.link,app_md_pqcti.so): $(subst
+
|-
.c,.o,$(wildcard pqcti/*.c))
+
|5385||accionLog_chg_acd_vdn|| || || || || || ||
$(subst .c,.o,$(wildcard pqcti/*.c)): _ASTCFLAGS+=$
+
|-
(call MOD_ASTCFLAGS,app_md_pqcti)
+
|5390||accionLog_del_acd_vdn|| || || || || || ||
#wkw fin (mirar clean:)
+
|-
------
+
|5395||accionLog_udel_acd_vdn|| || || || || || ||
|} <br>
+
|-
 
+
|5396||accionLog_add_cen_vdn|| || || || || || ||
'''La compilación y despliegue se hace del modo habitual: "make" y "make install".'''
+
|-
 
+
|5397||accionLog_chg_cen_vdn|| || || || || || ||
 
 
 
 
====== 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.
 
 
 
:{|
 
 
|-
 
|-
|
+
|5398||accionLog_del_cen_vdn|| || || || || || ||
------
 
[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.
 
 
 
:{|
 
 
|-
 
|-
|
+
|5399||accionLog_udel_cen_vdn|| || || || || || ||
------
 
[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>
 
 
 
 
 
 
 
* '''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:
 
 
 
:{|
 
 
|-
 
|-
|
+
|5400||accionLog_add_campos|| || || || || || ||
 
+
|-
------
+
|5405||accionLog_chg_campos|| || || || || || ||
[pqcti_acl_comandos]
+
|-
deny=0.0.0.0/0.0.0.0
+
|5410||accionLog_del_campos|| || || || || || ||
permit=172.25.128.0/24
+
|-
permit=192.168.0.20/32
+
|5415||accionLog_add_categorias|| || || || || || ||
permit=127.0.0.1
 
------
 
 
 
|} <br>
 
 
 
 
 
 
 
* '''En /etc/asterisk/http.conf'''
 
 
 
:{|
 
 
|-
 
|-
|
+
|5420||accionLog_chg_categorias|| || || || || || ||
------
 
[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>
 
 
 
 
 
* '''En /etc/asterisk/pqcti.conf'''
 
 
 
:{|
 
 
|-
 
|-
|
+
|5425||accionLog_del_categorias|| || || || || || ||
------
+
|-
[general]
+
|5430||accionLog_chg_com_configuracion|| || || || || || ||
debug=false
+
|-
llamadas_registrar=true
+
|5435||accionLog_add_nodos|| || || || || || ||
<br>
+
|-
[comandos]
+
|5440||accionLog_chg_nodos|| || || || || || ||
url_comandos_v1=pqcti/v1/comandos
+
|-
acl=pqcti_acl_comandos
+
|5445||accionLog_del_nodos|| || || || || || ||
<br>
+
|-
[llamada_sale]
+
|5450||accionLog_udel_nodos|| || || || || || ||
canal_A_tech=sip
+
|-
canal_A_dial_cad_fmt=%s
+
|5455||accionLog_add_sedes|| || || || || || ||
contexto=pqcti_inicio_llamada_sale
+
|-
temporizador_segs=30
+
|5460||accionLog_chg_sedes|| || || || || || ||
------
+
|-
 
+
|5465||accionLog_del_sedes|| || || || || || ||
|} <br>
+
|-
 
+
|5470||accionLog_udel_sedes|| || || || || || ||
 
+
|-
 
+
|5475||accionLog_add_dat_sincroniza|| || || || || || ||
* '''En /etc/asterisk/ext_Subrutinas_BD.conf'''
+
|-
 
+
|5480||accionLog_chg_dat_sincroniza|| || || || || || ||
:{|
 
 
|-
 
|-
|
+
|5485||accionLog_add_extensiones|| || || || || || ||
 
+
|-
;------------------------------------------------------
+
|5490||accionLog_chg_extensiones|| || || || || || ||
[Cen_Sub_updateDatConxDesaten_Fin]
+
|-
;------------------------------------------------------
+
|5495||accionLog_del_extensiones|| || || || || || ||
-----------
+
|-
;------------------------------------------------------
+
|5500||accionLog_udel_extensiones|| || || || || || ||
-----------
+
|-
; ${ARG1}: C_UCID
+
|5505||accionLog_add_facilidades|| || || || || || ||
<br>
+
|-
exten => s,1,NoOp(MDSUBUPDDATCONXDESCON*)
+
|5510||accionLog_chg_facilidades|| || || || || || ||
<br>
+
|-
  same =>  n,ExecIf($["${SPRV}"="1"]?
+
|5515||accionLog_del_facilidades|| || || || || || ||
Return(SUPERVIVENCIA))
+
|-
<br>
+
|5520||accionLog_add_locuciones|| || || || || || ||
  same =>  n,ExecIf($["${ARG1}"=""]?Return(NO_UCID))
+
|-
<br>
+
|5525||accionLog_chg_locuciones|| || || || || || ||
  same =>  n,MDintz(nimitz|bd|sqlSinEspera|update
+
|-
DAT_CONX_DESATEN set D_HORA_FIN=now(),N_DURACION=now()-
+
|5530||accionLog_del_locuciones|| || || || || || ||
D_HORA_INICIO where C_UCID="${ARG1}")
+
|-
<br>
+
|5535||accionLog_add_musica|| || || || || || ||
  ;same =>  n,DumpChan
+
|-
  same =>  n,Return(OK)
+
|5540||accionLog_chg_musica|| || || || || || ||
<br>
+
|-
include => Cen_finLlamada
+
|5545||accionLog_del_musica|| || || || || || ||
<br>
+
|-
;------------------------------------------------------
+
|5550||accionLog_add_permisos|| || || || || || ||
-----------
+
|-
[Cen_Sub_updateDatConxDesaten_Contestada]
+
|5555||accionLog_chg_permisos|| || || || || || ||
;------------------------------------------------------
+
|-
-----------
+
|5560||accionLog_del_permisos|| || || || || || ||
;------------------------------------------------------
+
|-
-----------
+
|5565||accionLog_add_plantillas|| || || || || || ||
; ${ARG1}: C_UCID
+
|-
<br>
+
|5570||accionLog_chg_plantillas|| || || || || || ||
exten => s,1,NoOp(MDSUBUPDDATCONXDESCON*)
 
<br>
 
  same =>  n,ExecIf($["${SPRV}"="1"]?
 
Return(SUPERVIVENCIA))
 
<br>
 
  same =>  n,ExecIf($["${ARG1}"=""]?Return(NO_UCID))
 
<br>
 
  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>
 
---------------------------------------
 
 
 
 
 
|} <br>
 
 
 
 
 
* '''En /etc/asterisk/ext_MARCAR_Extension_Dial.conf'''
 
 
 
 
 
*En este fichero hay que añadir lo que está en negrita.
 
 
 
:{|
 
 
|-
 
|-
|
+
|5575||accionLog_del_plantillas|| || || || || || ||
 
+
|-
;------------------------------------------------------
+
|5580||accionLog_add_puestos_extensiones|| || || || || || ||
-----------
+
|-
[Cen_Marcar_Extension_Dial_Gosub]
+
|5585||accionLog_chg_puestos_extensiones|| || || || || || ||
;------------------------------------------------------
+
|-
-----------
+
|5590||accionLog_del_puestos_extensiones|| || || || || || ||
exten => s,1,NoOp(MDSUBMAREXTEN*)
+
|-
<br>
+
|5595||accionLog_des_puestos_extensiones|| || || || || || ||
  same =>  n,Gosub(Cen_Sub_updAnswer,s,1(${UCID},$
+
|-
{ID_DISPOSITIVO},${ENR_IDSEGMENTO}))
+
|5600||accionLog_add_usuarios|| || || || || || ||
<br>
+
|-
  same =>  n,ExecIf($[$[${MDDEBUG}-0] > 1]?DumpChan)
+
|5605||accionLog_chg_usuarios|| || || || || || ||
<br>
+
|-
  ;Declarar la variable PASARTONOS en el trunk que
+
|5610||accionLog_del_usuarios|| || || || || || ||
queramos
+
|-
  same => n,ExecIf($["${PASARTONOS}"="1"]?
+
|5615||accionLog_udel_usuarios|| || || || || || ||
SetChannelOption(14,0))
+
|-
<br>
+
|5620||accionLog_chg_licencias|| || || || || || ||
  ;Rellenar el historico de llamadas
+
|-
; same =>    n,Gosub(Cen_Sub_updDatHisLlam_tipo,s,1($
+
!colspan="9"|ACCIONES DE LOS EJES
{DIALEDPEERNUMBER},${TIPOLLAMHIST_ENTRANTE},${UCID}))
+
|-
  same =>    n,Gosub(Cen_Sub_updDatHisLlam_tipo_ID,s,1($
+
|5705||accionLog_chg_Eje|| || || || || || ||
{DIALEDPEERNUMBER},${TIPOLLAMHIST_ENTRANTE},$
+
|-
  {ID_HLL_S}))
+
|5710||accionLog_out_Eje_Padre|| || || || || || ||
  <br>
+
|-
  '''; Poner contestadas las llamadas de conexiones'''
+
|5715||accionLog_del_Eje|| || || || || || ||
'''desatendidas'''
+
|-
'''same =>    n,GosubIf($["${PQCTI_REGISTRAR()}"="SI"]?'''
+
|5720||accionLog_add_Eje|| || || || || || ||
'''Cen_Sub_updateDatConxDesaten_Contestada,s,1(${UCID}))'''
+
|-
<br>
+
|5725||accionLog_set_Eje_Padre|| || || || || || ||
same =>  n,Return()
 
 
 
|} <br>
 
 
 
 
 
 
 
'''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.
 
 
 
===== 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
+
|5730||accionLog_add_acd_pausas_usuarios|| || || || || || ||
 +
|-
 +
|5735||accionLog_del_acd_pausas_usuarios|| || || || || || ||
 +
|-
 +
|5740||accionLog_add_centros_dispositivos|| || || || || || ||
 +
|-
 +
|5745||accionLog_chg_centros_dispositivos|| || || || || || ||
 +
|-
 +
|5750||accionLog_del_centros_dispositivos|| || || || || || ||
 +
|-
 +
|5755||accionLog_add_centros_extensiones|| || || || || || ||
 +
|-
 +
|5760||accionLog_chg_centros_extensiones|| || || || || || ||
 +
|-
 +
|5765||accionLog_del_centros_extensiones|| || || || || || ||
 +
|-
 +
|5770||accionLog_add_acd_usuarios|| || || || || || ||
 
|-
 
|-
| '''pqcti show''' || Lista los datos de configuración y de las llamadas registradas.
+
|5775||accionLog_chg_acd_usuarios||||||||||||||
 
|-
 
|-
| '''pqcti reload''' || Recarga la configuración si se ha modificado "/etc/asterisk/pqcti.conf".
+
|5780||accionLog_add_relacion_campos|| || || || || || ||
 
|-
 
|-
| |'''pqcti debug [on|off]''' || Activa y desactiva la depuración del módulo.
+
|5785||accionLog_del_relacion_campos|| || || || || || ||
 
|-
 
|-
|}
+
|5786||accionLog_chg_grabacion_configuracion|| || || || || || ||
 
 
 
 
 
 
 
 
===== 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".
 
 
 
 
 
 
 
:{|
 
 
|-
 
|-
|
+
|5787||accionLog_add_campannas|| || || || || || ||
 
+
|-
------
+
|5788||accionLog_chg_campannas|| || || || || || ||
CREATE TABLE IF NOT EXISTS `nimitz`.`DAT_CONX_DESATEN`
+
|-
(
+
|5789||accionLog_del_campannas|| || || || || || ||
  `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)
 
------
 
 
 
|} <br>
 
 
 
 
 
 
 
===== 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.
 
 
 
 
 
 
 
 
 
 
 
===== 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 :
 
 
 
:{|
 
 
|-
 
|-
|
+
|5790||accionLog_udel_campannas|| || || || || || ||
cmd={
+
|-
  "comando": "cmd_llamar",
+
|5791||accionLog_add_lista_contactos|| || || || || || ||
  "extension": "201",
+
|-
  "ani_num": "201",
+
|5792||accionLog_chg_lista_contactos|| || || || || || ||
  "ani_name": "ext_201",
+
|-
  "dnis_num": "221",
+
|5793||accionLog_del_lista_contactos|| || || || || || ||
  "dnis_name": "ext_221"
 
}
 
resp={
 
  "comando": "cmd_llamar",
 
  "ucid": "20999000031643889797",
 
  "estado_actual": "llam_sale_espera",
 
  "resultado": "OK",
 
  "ahora": "20220203 130317.107"
 
}
 
 
 
|} <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.
 
 
 
 
 
 
 
 
 
*'''cmd_liberar -> Libera una llamada establecida, que haya sido registrada en pqcti.'''
 
 
 
:{|
 
 
|-
 
|-
|
+
|5794||accionLog_udel_lista_contactos|| || || || || || ||
 
 
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").
 
 
 
 
 
 
 
*'''info_llamadas -> Informa sobre las llamadas registradas en pqcti. Devuelve un array con la información de cada llamada.'''
 
 
 
:{|
 
 
|-
 
|-
|
+
|5795||accionLog_add_lista_llamames|| || || || || || ||
}
+
|-
resp={
+
|5796||accionLog_chg_lista_llamames|| || || || || || ||
  "comando": "info_llamadas",
+
|-
  "llamadas": [
+
|5797||accionLog_del_lista_llamames|| || || || || || ||
    {
+
|-
      "ucid": "20999000051643890188",
+
|5798||accionLog_udel_lista_llamames|| || || || || || ||
      "estado_actual": "llam_sale_iniciada",
+
|-
      "duracion_segundos": 8
+
|5799||accionLog_add_lista_robinson|| || || || || || ||
    }
+
|-
  ],
+
|5800||accionLog_chg_lista_robinson|| || || || || || ||
  "resultado": "OK",
+
|-
  "ahora": "20220203 130957.149"
+
|5801||accionLog_del_lista_robinson|| || || || || || ||
}
 
 
 
|} <br>
 
 
 
(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.'''
 
 
 
:{|
 
 
|-
 
|-
|
+
|5802||accionLog_udel_lista_robinson|| || || || || || ||
 
 
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.'''
 
 
 
:{|
 
 
|-
 
|-
|
+
|5803||accionLog_add_contacto|| || || || || || ||
 
 
resp={
 
  "comando": "info_llamada",
 
  "ucid": "20999000051643890188",
 
  "estado_actual": "llam_sale_iniciada",
 
  "duracion_segundos": 14,
 
  "resultado": "OK",
 
  "ahora": "20220203 131003.638"
 
}
 
|} <br>
 
 
 
(Este comando sólo puede invocarse si se ha configurado "llamadas_registrar=true").
 
 
 
 
 
<br>
 
 
 
==== Vivait-CTI ====
 
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"
 
 
|-
 
|-
!ver!!Versión del proceso
+
|5804||accionLog_chg_contacto|| || || || || || ||
 
|-
 
|-
|sis/inic||Fecha de arranque del proceso
+
|5805||accionLog_del_contacto|| || || || || || ||
 
|-
 
|-
|Sis/alarmas||Alarmas desde arranque
+
|5806||accionLog_udel_contacto|| || || || || || ||
 
|-
 
|-
|Sis/ultAlar||Fecha de última alarma
+
|5807||accionLog_import_contactos|| || || || || || ||
 
|-
 
|-
|Gmp/msj||
+
|5808'''(*)'''||accionLog_add_contacto_campanna|| || || || || || ||
 
|-
 
|-
|Gmp/buf||
+
|'''''5818'''''||accionLog_chg_contacto_campanna|| || || || || || ||
 
|-
 
|-
|Gmp/tarea||
+
|5809||accionLog_chk_exist_contacto_campanna|| || || || || || ||
 
|-
 
|-
|Tmp/uptime||
+
|5810||accionLog_add_contacto_lista|| || || || || || ||
 
|-
 
|-
|Cti/numConx||Número de conexiones actuales / Número de conexiones máximo
+
|5811||accionLog_chk_exist_contacto_lista|| || || || || || ||
 
|-
 
|-
|Cti/numPend||
+
|5812||accionLog_del_contacto_lista|| || || || || || ||
 
|-
 
|-
|Cti/numMakeCallPend||Llamadas pendientes de realizar
+
|5813||accionLog_add_estrategia|| || || || || || ||
 
|-
 
|-
|Cti/numcall||
+
|5814||accionLog_chg_estrategia|| || || || || || ||
 
|-
 
|-
|Cti/numChan||
+
|5815||accionLog_del_estrategia|| || || || || || ||
 
|-
 
|-
|Cti/numAuxStr||
+
|5816||accionLog_udel_estrategia|| || || || || || ||
 
|-
 
|-
|Cti/numMoniColas||Número de colas monitorizadas
+
|5817'''(*)'''||accionLog_chk_exist_contacto|| || || || || || ||
 
|-
 
|-
|Cti/numMoniDevice||
+
|'''''5818'''''||accionLog_add_telefono_robinson|| || || || || || ||
 
|-
 
|-
|Cti/numMoniCall||
+
|5819||accionLog_chg_telefono_robinson|| || || || || || ||
 
|-
 
|-
|Cti/numMoniCallAuto||
+
|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|| || || || || || ||
 
|-
 
|-
|Cti/numMoniCallByDevice||
+
|5828||accionLog_del_aplicaciones|| || || || || || ||
 
|-
 
|-
|Cti/numMoni||
+
|5829||accionLog_add_cen_destinos|| || || || || || ||
 
|-
 
|-
|Cti/auditCallErr||
+
|5830||accionLog_chg_cen_destinos|| || || || || || ||
 
|-
 
|-
|Cti/auditAuxStrErr||
+
|5831||accionLog_del_cen_destinos|| || || || || || ||
 
|-
 
|-
|Cti/ auditMsjReqErr||
+
|5832||accionLog_add_acd_monitores|| || || || || || ||
 
|-
 
|-
|Cti/ araChanID||
+
|5833||accionLog_chg_acd_monitores|| || || || || || ||
 
|-
 
|-
|Cti/ araUniqueID||
+
|5834||accionLog_del_acd_monitores|| || || || || || ||
 
|-
 
|-
|Cti/ araMoni||
+
|5835||accionLog_add_campos_monitor_8|| || || || || || ||
 
|-
 
|-
|Ami/esta||Estado de conexión contra manarger de asterisk
+
|5836||accionLog_chg_campos_monitor_8|| || || || || || ||
 
|-
 
|-
|Ami/resp||
+
|5837||accionLog_del_campos_monitor_8|| || || || || || ||
 
|-
 
|-
|Ami/evs||Número de eventos (último minuto)
+
|5838||accionLog_add_agendas|| || || || || || ||
 
|-
 
|-
||Ami/descar
+
|5839||accionLog_chg_agendas|| || || || || || ||
 
|-
 
|-
|Ami/err||Errores
+
|5840||accionLog_del_agendas|| || || || || || ||
 
|-
 
|-
|Ami/errConx||Errores de conexión
+
|5841||accionLog_add_agendas_telefonos|| || || || || || ||
 
|-
 
|-
|Ami/numAct||
+
|5842||accionLog_chg_agendas_telefonos|| || || || || || ||
 
|-
 
|-
|Ami/auditErrAct||
+
|5843||accionLog_del_agendas_telefonos|| || || || || || ||
 
|-
 
|-
|}
+
|5844||accionLog_add_agendas_campos_cliente|| || || || || || ||
 
+
|-
Como complemento a los diagnósticos:
+
|5845||accionLog_chg_agendas_campos_cliente|| || || || || || ||
 
+
|-
Podremos examinar el fichero de configuración del proceso en '''/etc/MDtel/vivait-cti.conf'''
+
|5846||accionLog_del_agendas_campos_cliente|| || || || || || ||
 
+
|-
*El fichero de configuración, '''vivait-cti.conf''', es el siguiente:
+
!colspan="9"|GRUPOS DE SALTO
 
+
|-
#
+
|5847||accionLog_add_grupos_salto|| || || || || || ||
# Los nombres no pueden tener numeros
+
|-
# Si el valor de una cadena contiene espacios, se pondra entre comillas dobles
+
|5848||accionLog_chg_grupos_salto|| || || || || || ||
# Los valores comentados indican valores por defecto
+
|-
+
|5849||accionLog_del_grupos_salto|| || || || || || ||
base
+
|-
{
+
|5850||accionLog_udel_grupos_salto|| || || || || || ||
cfg
+
|-
{
+
!colspan="9"|GRUPOS DE CAPTURA
soy_demonio = 1
+
|-
hay_syslog = 0
+
|5851||accionLog_add_grupos_captura|| || || || || || ||
# Archivo con identificador de proceso: (-: /var/run/vivait-cti.pid)
+
|-
archivo_pid = -
+
|5852||accionLog_chg_grupos_captura|| || || || || || ||
# Archivo_traza: (-: stdout o /var/log/vivait-cti.log si soy_demonio)
+
|-
# No se usa si se activa hay_syslog
+
|5853||accionLog_del_grupos_captura|| || || || || || ||
archivo_traza = -
+
|-
}
+
|5854||accionLog_udel_grupos_captura|| || || || || || ||
cfg_recarga
+
|-
{
+
|5855||accionLog_add_grupos_locuciones|| || || || || || ||
# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
+
|-
nivel_traza = 3
+
|5856||accionLog_chg_grupos_locuciones|| || || || || || ||
pruebas = 1
+
|-
hay_flush_traza = 1
+
|5857||accionLog_del_grupos_locuciones|| || || || || || ||
}
+
|-
sis
+
|5858||accionLog_udel_grupos_locuciones|| || || || || || ||
{
+
|-
# No se usa. No modificar
+
!colspan="9"|INFORMES DE CALIDAD
subsistema = 0
+
|-
}
+
|5859||accionLog_add_informes_calidad|| || || || || || ||
gmp
+
|-
{
+
|5860||accionLog_chg_informes_calidad|| || || || || || ||
# Numero de mensajes. No modificar
+
|-
num_msj = 1024
+
|5861||accionLog_del_informes_calidad|| || || || || || ||
# Numero de buffer. No modificar
+
|-
num_buf = 1024
+
|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
+
|-
supercolas
+
!colspan="9"|PREGUNTAS DE CALIDAD
{
+
|-
en_comandos = 0
+
|5863||accionLog_add_preguntas_calidad|| || || || || || ||
en_eventos = 0
+
|-
# archivo_conf = supercolas.conf
+
|5864||accionLog_chg_preguntas_calidad|| || || || || || ||
}
+
|-
+
|5865||accionLog_del_preguntas_calidad|| || || || || || ||
supervision
+
|-
{
+
|5866||accionLog_udel_preguntas_calidad|| || || || || || ||
puerto_escucha = 1111
+
|-
}
+
!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
+
|-
cti
+
!colspan="9"|SALAS MEET
{
+
|-
hay_cti = 1
+
|5867||accionLog_add_sala_meet|| || || || || || ||
# Dimensionamiento de recursos. Uno menos, ya que cero no vale
+
|-
max_conx = 512
+
|5868||accionLog_add_perfil_sala_meet|| || || || || || ||
max_call = 2048
+
|-
max_channel = 4096
+
|5869||accionLog_add_grupo_sala_meet|| || || || || || ||
max_monitor = 512
+
|-
max_str_aux = 512
+
|5870||accionLog_chg_sala_meet|| || || || || || ||
puerto_escucha = 4500
+
|-
link_id = 1
+
|5871||accionLog_chg_perfil_sala_meet|| || || || || || ||
#
+
|-
hay_vdn = 1
+
|5872||accionLog_chg_grupo_sala_meet|| || || || || || ||
hay_usuarios = 1
+
|-
usuarios
+
|5873||accionLog_del_sala_meet|| || || || || || ||
{
+
|-
vivait
+
|5874||accionLog_del_perfil_sala_meet|| || || || || || ||
{
+
|-
clave = 3RSMbPlTi61rG5pySx9hhUokz8Fyy3Nql2w8Jairfl8=
+
|5875||accionLog_del_grupo_sala_meet|| || || || || || ||
ip = 0.0.0.0
+
|-
msk = 0.0.0.0
+
|5876||accionLog_udel_sala_meet|| || || || || || ||
}
+
|-
}
+
|5877||accionLog_udel_perfil_sala_meet|| || || || || || ||
}
+
|-
+
|5878||accionLog_udel_grupo_sala_meet|| || || || || || ||
cti_recarga
+
|-
{
+
!colspan="9"|ALERTAS
makeCall_primero_dentro = 1
+
|-
makeCall_primero_fuera_agente_descuelga = 1
+
|7000||accionLog_add_ale_entidades|| || || || || || ||
temporizador_makeCall = 30
+
|-
fmt_canal_exten = SIP/%s
+
|7005||accionLog_chg_ale_entidades|| || || || || || ||
# contextos para llamadas salientes makeCall y makePredictiveCal
+
|-
contexto_makeCall_primeroFuera = Cen_MakeCallPrimeroFuera
+
|7010||accionLog_del_ale_entidades|| || || || || || ||
contexto_makeCall_primeroFueraDentro = Cen_MakeCallPrimeroFueraDentro
+
|-
contexto_makeCall_primeroDentro = Cen_MakeCallPrimeroDentro
+
|7015||accionLog_udel_ale_entidades|| || || || || || ||
# 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:
 
 
 
{| class="wikitable"
 
 
|-
 
|-
!Campo !!Descripción !!Posibles valores (si aplica)
+
|7020||accionLog_add_ale_servicios|| || || || || || ||
 
|-
 
|-
|soy_demonio||# 0: Arranca como proceso - 1: arranca como demonio||
+
|7025||accionLog_chg_ale_servicios|| || || || || || ||
 
|-
 
|-
|hay_syslog||Si hay servidor de syslog||1 lo hay – 0 no lo hay
+
|7030||accionLog_del_ale_servicios|| || || || || || ||
 
|-
 
|-
|archivo_pid||# Archivo con identificador de proceso: (-: /var/run/vivait-cti.pid)||
+
|7035||accionLog_udel_ale_servicios|| || || || || || ||
 
|-
 
|-
|archivo_traza||# Archivo_traza: (-: stdout o /var/log/vivait-cti.log si soy_demonio)||
+
|7040||accionLog_add_ale_destinos|| || || || || || ||
 
|-
 
|-
|nivel_traza||# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)||
+
|7045||accionLog_chg_ale_destinos|| || || || || || ||
 
|-
 
|-
|pruebas||||
+
|7050||accionLog_del_ale_destinos|| || || || || || ||
 
|-
 
|-
|hay_flush_traza||||
+
|7055||accionLog_udel_ale_destinos|| || || || || || ||
 
|-
 
|-
|subsistema||# No se usa. No modificar||
+
|7060||accionLog_add_ale_autorizadas|| || || || || || ||
 
|-
 
|-
|num_msj||# Numero de mensajes. No modificar||
+
|7065||accionLog_chg_ale_autorizadas|| || || || || || ||
 
|-
 
|-
|num_buf||# Numero de buffer. No modificar||
+
|7070||accionLog_del_ale_autorizadas|| || || || || || ||
 
|-
 
|-
|en_comandos||||
+
|7075||accionLog_udel_ale_autorizadas|| || || || || || ||
 
|-
 
|-
|en_eventos||||
+
!colspan="9"|Acciones comunes válidas para todas las situaciones si utilizamos el campo C_TABLA
 
|-
 
|-
|archivo_conf||Archivo configuracion de asterisk para las supercolas||
+
|50000||accionLog_add_registro|| || || || || || ||
 
|-
 
|-
|puerto_escucha||Puerto de supervision del demonio||
+
|50005||accionLog_chg_registro|| || || || || || ||
 
|-
 
|-
|hay_cti||hay cti||1 hay cti – o no hay
+
|50010||accionLog_del_registro|| || || || || || ||
 
|-
 
|-
|max_conx||Numero maximo de conexiones||
+
|50015||accionLog_udel_registro|| || || || || || ||
 +
|}
 +
 
 +
=== Procesos propios ===
 +
 
 +
==== 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"
 
|-
 
|-
|max_call||Numero maximo de llamadas||
+
!Parámetro!!Descripción
 
|-
 
|-
|max_channel||Numero maximo de canales||
+
|sis/ver||Versión del proceso
 
|-
 
|-
|max_monitor||Numero maximo de grabaciones||
+
|sis/inic||Fecha de de arranque del proceso
 
|-
 
|-
|max_str_aux||||
+
|Sis/alarmas||Alarmas desde arranque
 
|-
 
|-
|puerto_escucha||Puesto escucha del demonio||
+
|Sis/ultAlar||Fecha de última alarma
 
|-
 
|-
|link_id||||
+
|Gmp/msj||
 
|-
 
|-
|hay_vdn||Existen vdns||1 existen – o no existen
+
|Gmp/buf||
 
|-
 
|-
|hay_usuarios||Existen usuarios||1 existen – o no existen
+
|Gmp/tarea||
 
|-
 
|-
|clave||Clave usuario cti cifrada||
+
|Tmp/uptime||Tiempo que lleva el servicio activo
 
|-
 
|-
|ip||Direcion de red de escucha del cti||
+
|Vic/identif||Etiqueta de identificación del servicio
 
|-
 
|-
|msk||Mascara de red de escucha del cti||
+
|Vic/entorno||Entorno de base de datos
 
|-
 
|-
|makeCall_primero_dentro||||
+
|Vic/conx||Conexiones activas/conexiones máximas
 
|-
 
|-
|makeCall_primero_fuera_agente_descuelga||||
+
|Vic/numConx||Conexiones totales (último minuto)
 
|-
 
|-
|temporizador_makeCall||Tiempo maximo para realizar llamada||
+
|Mys/curro||Número de hilos contra la base de datos
 
|-
 
|-
|fmt_canal_exten||||
+
|Mys/soli||Conexiones solicitadas (último minuto)
 
|-
 
|-
|contexto_makeCall_primeroFuera||# contextos para llamadas salientes makeCall y makePredictiveCal||
+
|Mys/soliErr||Conexiones solicitadas con error (último minuto)
 
|-
 
|-
|contexto_makeCall_primeroFueraDentro||# contextos para llamadas salientes makeCall y makePredictiveCal||
+
|Mys/soliEncol||Conexiones encoladas
 
|-
 
|-
|contexto_makeCall_primeroDentro||# contextos para llamadas salientes makeCall y makePredictiveCal||
+
|Cache/cola|| Colas monitorizadas/
 
|-
 
|-
|contexto_myAcdSuperv_ProgreFuera||# contextos para llamadas salientes desde myAcdSuperv||
+
|Cache/vdn||VDN’s monitorizados
 
|-
 
|-
|contexto_myAcdSuperv_ProgreDentro||# contextos para llamadas salientes desde myAcdSuperv||
+
|Cache/usuExten||
 
|-
 
|-
|contexto_myAcdSuperv_PredicFuera||# contextos para llamadas salientes desde myAcdSuperv||
+
|}
|-
+
 
|contexto_myAcdSuperv_PredicDentro||# contextos para llamadas salientes desde myAcdSuperv||
+
Como complemento a los diagnósticos:
|-
+
 
|contexto_redirect||# contexto para transferencias||
+
* 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'''
|expr_esExtenLocal||# expresiones regulares. Se evaluan en el orden indicado||
+
 
|-
+
'''Fichero de configuración:'''
|expr_esExtenInterna ||# expresiones regulares. Se evaluan en el orden indicado||
+
 
|-
+
#
|expr_esCola||# 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_esPuntoDistribucion||# expresiones regulares. Se evaluan en el orden indicado||
+
# Los valores comentados indican valores por defecto
|-
+
|expr_esPuntoEnrutamiento||# expresiones regulares. Se evaluan en el orden indicado||
+
base
|-
+
{
|expr_esNumPrivateLocal||# expresiones regulares. Se evaluan en el orden indicado||
+
cfg
|-
+
{
|expr_esNumPrivateUnknown||# expresiones regulares. Se evaluan en el orden indicado||
+
soy_demonio = 1
|-
+
hay_syslog = 0
|expr_esNumPublicNational||# expresiones regulares. Se evaluan en el orden indicado||
+
# Archivo con identificador de proceso: (-: /var/run/intz-nimitz.pid)
|-
+
archivo_pid = -
|expr_esNumPublicInternational||# expresiones regulares. Se evaluan en el orden indicado||
+
# Archivo_traza: (-: stdout o /var/log/intz-nimitz.log si soy_demonio)
|-
+
# No se usa si se activa hay_syslog
|audit_hay_Call||||
+
archivo_traza = -
|-
+
}
|audit_call_minutContestada||||
+
cfg_recarga
|-
+
{
|audit_call_minutNoContestada||||
+
# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
|-
+
nivel_traza = 3
|audit_hay_AuxStr||||
+
pruebas = 1
|-
+
hay_flush_traza = 1
|audit_AuxStr_minut||||
+
}
|-
+
sis
|audit_hay_MsjReq||||
+
{
|-
+
# No se usa. No modificar
|audit_MsjReq_minut||||
+
subsistema = 0
|-
+
}
|max_action||Numero maximo de acciones en el manager de asterisk||
+
gmp
|-
+
{
|ip_asterisk||Ip del asterisk de ACD||
+
# Numero de mensajes. No modificar
|-
+
num_msj = 1024
|puerto_ami||Puerto del manager de asterisk ACD||
+
# Numero de buffer. No modificar
|-
+
num_buf = 1024
|usuario_ami||Usuario del manager de asterisk del ACD||
+
}
|-
+
}
|clave_ami||Clave del manager de asterisk del ACD||
+
|-
+
supervision
|to_inac||Timeout de inactividad||
+
{
|-
+
puerto_escucha = 1115
|to_audit||||
+
}
|-
+
|audit_max_resp||Tiempo maximo de respuesta||
+
supervision_recarga
|-
+
{
|}
+
to_periodo = 60
 
+
}
 
+
* Podremos examinar los logs del proceso en '''/var/log/vivait-cti.conf'''
+
cache
 
+
{
==== Introducción al aprovisionamiento ====
+
        hay_cache = 1
 
+
}
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.  
+
 
+
cache_recarga
 
+
{
===== ¿Qué es aprovisionar? =====
+
# to_vida = 0, no se almacenan entradas. to_vida > 0 en segundos
 
+
        colas_to_vida = 300
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.
+
        colas_num_entrada = 128
 
+
        vdn_to_vida = 300
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.
+
        vdn_num_entrada = 128
 
+
}
===== TFTP =====
+
 
+
regexp
'''TFTP''' son las siglas de '''T'''rivial '''F'''ile '''T'''ransfer '''P'''rotocol ''(Protocolo de transferencia de archivos trivial)''.
+
{
 
+
hay_regexp = 1
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:
+
regexp_recarga
 
+
{
* Utiliza UDP (puerto 69) como protocolo de transporte (a diferencia de FTP que utiliza los
+
num_entradas = 32
puertos 20 y 21 TCP).
+
inc_entradas = 128
* No puede listar el contenido de los directorios.
+
max_entradas = 1024
* 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”.
+
vivaitcall
 
+
{
===== Funcionamiento del servidor phoneprove-TFTP =====
+
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
 +
}
  
A continuación se muestra un esquema que facilita el entendimiento del funcionamiento del servidor phoneprove-TFTP:
+
 +
Los siguientes son los campos del fichero de configuración '''int-nimitz.conf''':
  
[[Archivo:Funcionamiento_Servidor.png‎ |center]]
+
{| class="wikitable"
 
+
|-
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.
+
|Variable a modificar||Comentarios||Posibles valores (si aplica)
 
+
|-
Desde phoneprove-TFTP se generara los archivos necesarios para cada teléfono y que sirven para ser aprovisionados automáticamente.
+
|soy_demonio||Si corro como demonio o como proceso||1 demonio – 0 proceso
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.
+
|-
 
+
|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)||
  '''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 =====
 
 
 
{|
 
 
|-
 
|-
|
+
|nivel_traza||# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)||
  '''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 [[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.
 
 
 
{|
 
 
|-
 
|-
|
+
|pruebas||||
  '''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
 
 
 
{|
 
 
|-
 
|-
|
+
|hay_flush_traza||||
  '''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.
+
|-
|}
+
|subsistema||# No se usa. No modificar||
 
+
|-
'''Archivos necesarios:'''
+
|num_msj||# Numero de mensajes. No modificar||
 
+
|-
/usr/local/sbin/phoneprov-tftp.pl
+
|num_buf||# Numero de buffer. No modificar||
/usr/local/sbin/phoneprov-tftp.pm
+
|-
/etc/MDtel/phoneprov-tftp.pconf
+
|puerto_escucha||Puerto de supervisión del demonio||
/etc/init/phoneprov-tftp.conf
+
|-
/etc/logrotate.d/phoneprov-tftp
+
|to_periodo||Timeout para reconectar||
 
+
|-
 
+
|hay_cache||si guarda datos o no en cache||1 hay cache – 0 no hay cache
'''Directorios a crear:'''
+
|-
 
+
|colas_to_vida||# to_vida = 0, no se almacenan entradas. to_vida > 0 en segundos||
/var/lib/phoneprov-tftp/plt
+
|-
/var/lib/phoneprov-tftp/bin
+
|colas_num_entrada||Número de entradas correspondiente a las colas||
 
+
|-
*El archivo de configuración, '''phoneprov-tftp''', es el siguiente:
+
|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||
# Configuracion de phoneprov-tftp.pl
+
|-
#
+
|hay_regexp||||
# 0: Solo alarmas en archivo log - 1: alarmas y trazas
+
|-
$depurar = 1;
+
|num_entradas||||
+
|-
# 0: Arranca como proceso - 1: arranca como demonio
+
|inc_entradas||||
$soyDemonio = 1;
+
|-
+
|max_entradas||||
# Archivo de log ('': salida estandar)
+
|-
$logArch = '/var/log/phoneprov-tftp.log';
+
|hay_vic||||
+
|-
# Archivo para el pid
+
|puerto_escucha||Puerto de escucha a nivel de vivait-call||
$pidArch = '/var/run/phoneprov-tftp';
+
|-
+
|identif ||||
# 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion)
+
|-
$unaVezSolo = 0;
+
|entorno||Nombre base de datos||
+
|-
# Conexion de base de datos
+
|max_conx||Número máximo de conexiones a la base de datos||
$db='nimitz';
+
|-
$dbHost = 'BDTR';
+
|to_solicitud||Timeout de solicitud||
$dbPort = 3306;
+
|-
$dbUsuario = 'nimitz';
+
|to_desconexion||Timeout de desconexión||
$dbClave = 'ivivanimitz';
+
|-
+
|ip||Dirección de red de escucha del intz-nimitz||
# Configuracion de la supervision
+
|-
$supPort = 1123;
+
|msk ||Máscara de red de escucha del intz-nimitz||
+
|-
# Configuracion de servidor TFTP
+
|ip||IP localhost||
#
+
|-
# Los archivos estaticos no tienen variables. Se sirven sin modificar.
+
|msk||Máscara localhost||
# Estan en el arbol de directorios a partir del indicado por '$dirEstatico'
+
|-
#
+
|hay_enrutamiento||Hay fase de enrutamiento o no||1 hay enrutamiento – 0 no hay
# Los archivos dinamicos soportan sustitucion de varibles.
+
|-
# Las plantillas con variables a sustituir estan en el arbol de directorios
+
|max_pre_ruta_regs||Número máximo de prerutas a cargar||
# a partir del indicado por '$dirPlantilla'.
+
|-
# Los archivos temporales con variables sustituidas estan en el arbol
+
|max_ruta||Número máximo de rutas a cargar||
# de directorios a partir del indicado por '$dirDinamico'.
+
|-
# Los archivos dinamicos se identifican porque contienen una mac.
+
|max_ruta_desvios||Número máximo de rutas de desvíos a cargar||
# 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.
+
|filtro_ancho_banda||Filtrar por ancho de banda||1 filtrar – 0 no filtrar
#
+
|-
$miDir = '';
+
|hay_mysql||Hay mysql||1 hay -0 no hay
$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"
 
 
|-
 
|-
!Campo !!Descripción !!Posibles valores (si aplica)
+
|host||IP o HOST máquina base de datos ||
 
|-
 
|-
|$depurar||# 0: Solo alarmas en archivo log - 1: alarmas y trazas||
+
|usuario||Usuario acceso Base de datos||
 
|-
 
|-
|$soyDemonio||# 0: Arranca como proceso - 1: arranca como demonio||
+
|clave||Clave usuario acceso base de datos||
 
|-
 
|-
|$logArch =||# Archivo de log ('': salida estandar)||
+
|base_datos||Nombre de la base de datos||
 
|-
 
|-
|$pidArch||# Archivo para el pid||
+
|bd_supervivencia||Hay o no base de datos de supervivencia||1 hay base de datos de supervivencia – 0 no hay
 
|-
 
|-
|$unaVezSolo||# 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion)||
+
|num_curro||Número de conexiones simultáneas a la base de datos||
 
|-
 
|-
|$db||Nombre de la base de datos||
+
|to_resp||Timeout de respuesta||
 
|-
 
|-
|$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||
+
 
|-
+
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
|$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||
 
|-
 
|}
 
  
==== 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:
+
==== intz-gh ====
  
{| class="wikitable" border="0" style="background:#ffffff" align="top"
+
intz-gh es un demonio que permite tanto la monitorizacion de extensiones (BLFs), como la activación de retrollamadas entre distintos nodos.
|-
 
|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
+
'''Comandos desde consola de asterisk'''
  
Tiene un fichero de configuración ubicado en /etc/asterisk/MDcrash.conf
+
mdgh show
  
{| class="wikitable" border="0" style="background:#ffffff" align="top"
+
Uso: mdgh show [config | exten <exten_num> | enla <peer>]]
|-
 
|Sección [perro]
 
||activo=yes (Si esta o no activo)
 
segs_dormir=1 (Un tick por segundo)
 
  
segs_inic=60
+
* '''Ejemplo'''
  
segs_guarda=30  
+
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
  
max_errores=3  
+
mdgh show exten 6146
|-
+
|Sección [sip_monitor_udp]
+
mdgh Datos de la extension 6146:
||segs_inic=60
+
   
 +
  Datos en intz-gh:
 +
    ESTADO=NOT_INUSE
 +
    INUSE=0
 +
    RINGING=0
 +
    TS=1535609682
 +
    HACE=1171
  
segs_guarda=30 (Cada 30 segundos si no reciba trafico SIP genera core)
+
mdgh show en la Trunk_MDtel
  
max_errores=5 (Número máximo de errores)
+
mdgh Datos del enlace Trunk_MDtel:
|-
+
|}
+
  Datos en intz-gh:
 +
    INUSE=0
 +
    RINGING=0
 +
    TS=1535610093
 +
    HACE=834
  
<!-- [[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]-->
 
  
==== Proceso de Backup ====
+
'''Fichero de log'''
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'''.
+
/var/log/intz-gh.log
  
Se ejecuta automaticamente mediante el uso de un cron
 
  
'''texto del cron:'''
+
'''Fichero de configuracion'''
  
SHELL=/bin/sh
+
/etc/MDtel/intz-gh.conf
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:
+
'''Campos intz-gh.conf'''
* 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'''.
+
# 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.
  
Para cambiar la ruta de destino del backup habrá que modificar el fichero backup.sh, en concreto modificar la variable MDTEL.
+
base
 
+
 
El fichero ''' backup.cfg''' que se genera incluye copia de la siguiente información:
+
cfg
* Ficheros de configuración de la aplicación.
+
{
* Base de Datos.
+
soy_demonio = 1
* Dialplan.
+
hay_syslog = 0
 
+
# Archivo con identificador de proceso: (-: /var/run/intz-nimitz.pid)
Se guardarán 10 copias del fichero ''' backup.cfg '''
+
archivo_pid = -
 
+
# Archivo_traza: (-: stdout o /var/log/intz-nimitz.log si soy_demonio)
Los campos disponibles en el fichero son los siguientes:
+
# No se usa si se activa hay_syslog
 
+
archivo_traza = -
{| class="wikitable"
+
}
|-
+
cfg_recarga
!Campo !!Descripción !!Posibles valores (si aplica)
+
{
|-
+
# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
|IP_BD ||IP o HOST máquina base de datos de tiempo real||
+
nivel_traza = 3
|-
+
pruebas = 1
|HAY_SMB ||Si hay o no servidor SAMBA||1 si existe servidor SAMBA o 0 si no existe
+
hay_flush_traza = 1
|-
+
# traza_milisegundos = 1
|HOST_SMB||IP o HOST servidor SAMBA||
+
}
|-
+
sis
|USU_SMB||Usuario acceso servidor SAMBA||
+
{
|-
+
# No se usa. No modificar
|CLAVE_SMB||Clave usuario acceso servidor SAMBA||
+
subsistema = 0
|-
+
}
|RUTA_SMB||Ruta donde se guardará el backup en el servidor SAMBA||
+
gmp
|-
+
{
|}
+
# Numero de mensajes. No modificar
 
+
num_msj = 256
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.
+
# Numero de buffer. No modificar
 
+
num_buf = 256
===== Información adicional: como funciona un cron =====
+
}
 
+
}
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]
+
 
+
supervision
<br><br>
+
{
==== CHAT ====
+
puerto_escucha = 1116
<br><br>
+
}
El CHAT es un servicio incuído en la plataforma VIVAit-Suite, que permite la comunicación con la plataforma VIVAit-Call para usuarios.
 
<br>
 
El esquema del servicio es el siguiente:
 
<br><br>
 
[[File:ESQUEMA CHAT.png|750px|center]]
 
<br><br>
 
El CHAT se inicia con una petición de un usuario desde VIVAit-Call y genera la apertura de un formulario de CHAT en la plataforma VIVAit-Suite.
 
<br>
 
Para que la comunicación se establezca es necesario que un agente de VIVAit-Suite esté logado en un grupo ACD al que se le haya asociado un formulario de CHAT.
 
<br>
 
El servicio permite establecer una comunicación entre un usuario y un agente.
 
<br>
 
Cuando sea necesario, el supervisor del agente podrá intervenir en la comunicación, ayudando únicamente al agente, o al agente y al usuario a la vez.
 
<br>
 
El servicio no permite que el supervisor envíe comunicaciones solo al usuario.
 
<br>
 
Aún cuando la comunicación esté establecida y el agente aparezca en estado ocupado, podrá recibir llamadas entrantes de los grupos ACD en los que está logado.
 
<br><br>
 
[[#CHAT | Volver arriba]]
 
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 
<br><br>
 
===== Configuración del servicio =====
 
<br><br>
 
Para configurar el servicio de CHAT es necesario realizar configuraciones a través del portal de administración siguiendo los siguientes pasos:
 
<br><br>
 
'''Paso 1''': Se crea una clase de dispositivo tipo '''"multicanalidad texto entrada"'''
 
<br><br>
 
[[File:1.jpg|800px|center]]
 
<br><br>
 
[[File:2.jpg|800px|center]]
 
<br><br>
 
'''Paso 2''': A continuación se crea un dispositivo de llamada tipo '''"multicanal texto entrada".'''
 
<br><br>
 
[[File:3.jpg|800px|center]]
 
<br><br>
 
[[File:4.jpg|800px|center]]
 
<br><br>
 
En los campos '''servidor''' y '''nodo''' se configuran los datos de la máquina en la que se ha instalado el webservice del CHAT en el tomcat.
 
<br>
 
Se utiliza la plantilla '''"multicanalidad texto entrada"'''.
 
<br><br>
 
[[File:5.jpg|800px|center]]
 
<br><br>
 
En los datos del nodo en el que tenemos instalado el tomcat con el webservice del CHAT tenemos que rellenar los datos de multinacalidad, con la IP del nodo ACD y como puerto por defecto 8888.
 
<br><br>
 
[[File:6.jpg|800px|center]]
 
<br><br>
 
En la plantilla '''General ACD''' hay que indicar dos parámetros nuevos:
 
<br><br>
 
: multicanalidad=yes
 
: factor_metrica_esfuerzo=0
 
<br><br>
 
[[File:7.jpg|800px|center]]
 
<br><br>
 
'''Paso 3''': En el menú ''VIVAit Suite ACD+'' se crea el grupo ACD en el que se logará el agente.
 
<br><br>
 
[[File:8.jpg|800px|center]]
 
<br><br>
 
Como se puede comprobar se ha indicado que el formulario es "CHAT" y el tipo de cola "llamada entrante".
 
<br><br>
 
'''Paso 4''': En el submenú ''VIVAit Suite ACD + --> CHAT'' se crea un servicio nuevo al que se le asocia el '''grupo ACD''' que se ha creado y en el campo canal el '''"multicanal texto entrada"''' que se creo previamente.
 
<br><br>
 
[[File:9.jpg|800px|center]]
 
<br><br>
 
[[File:10.jpg|800px|center]]
 
<br><br>
 
'''Paso 5''': De forma manual hay que hacer cambios en el fichero '''etc\asterisk\chan_sit.conf'''. Debe tener la siguiente estructura:
 
<br><br>
 
: [general]
 
: peer_out_default=out1
 
: esfuerzo_disponible=6
 
: esfuerzo_chat=3
 
: esfuerzo_sms=2
 
: esfuerzo_email=1
 
 
   
 
   
: [rest]
+
supervision_recarga
: port=8888
+
{
 +
to_periodo = 60
 +
}
 
   
 
   
: [chat1]
+
regexp
: channel_type_in=chat
+
{
: host_in=172.25.128.92
+
hay_regexp = 1
: ;host_in=172.25.2.130
+
}
: context_in=context_sit
 
: ;vdn_dest_in=6541
 
: ;cidname_in=name_chat1
 
: ;cidnum_in=1234
 
: timeout_first_in=60
 
: timeout_next_in=60
 
 
   
 
   
: [Facebook]
+
regexp_recarga
: channel_type_in=chat
+
{
: host_in=172.25.128.92
+
num_entradas = 32
: ;host_in=172.25.2.130
+
inc_entradas = 128
: context_in=context_sit
+
max_entradas = 1024
: ;vdn_dest_in=6541
+
}
: ;cidname_in=name_chat1
 
: ;cidnum_in=1234
 
: timeout_first_in=60
 
: timeout_next_in=60
 
 
   
 
   
: [sms1]
+
vivaitcall
: channel_type_in=sms
+
{
: ;host_in=10.255.178.46
+
hay_vic = 1
: context_in=context_sit
+
puerto_escucha = 5556
: ;vdn_dest_in=6541
+
identif = gh_000
: ;cidname_in=name_sms1
+
entorno = gh
: ;cidnum_in=1234
+
max_conx = 4
: timeout_first_in=60
+
}
: timeout_next_in=60
 
 
   
 
   
: [email1]
+
vivaitcall_recarga
: channel_type_in=email
+
{
: ;host_in=10.255.178.46
+
to_solicitud = 10
: context_in=context_sit
+
to_desconexion = 10
: ;vdn_dest_in=6541
+
ip_valida
: ;cidname_in=name_email1
+
{
: ;cidnum_in=1234
+
# Hasta 32 bloques de direcciones validas
: timeout_first_in=60
+
todas
: timeout_next_in=60
+
{
+
ip = 0.0.0.0
: [out1]
+
msk = 0.0.0.0
: netip_out=0.0.0.0
+
}
: netmsk_out=0.0.0.0
+
localhost
: timeout_transfer_out=60
+
{
: autoanswer_out=yes
+
ip = 127.0.0.1
<br><br>
+
msk = 255.255.255.255
En este fichero es imprescindible:
+
}
<br><br>
+
}
: * Indicar los esfuerzos
+
}
: * Indicar en [rest] el puerto
+
: * configurar los [chat1]... que se hayan creado
+
mysql
: * configurar [out1]
+
{
<br><br>
+
hay_mysql = 1
[[#CHAT | Volver arriba]]
+
host = BDTR
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
+
usuario = nimitz
<br><br>
+
clave = phikau3iwCe4O0PP5b09ng==
===== Funcionamiento =====
+
base_datos = nimitz
<br><br>
+
}
====== Agente ======
+
<br><br>
+
mysql_recarga
Cuando un agente de VIVAit Suite recibe una solicitud de CHAT se abre en la pantalla un formulario y su estado cambia a acupado.
+
{
<br><br>
+
to_resp = 5
[[File:Formulario_Chat_Desk.png|250|center]]
+
}
<br><br>
+
Las comunicaciones enviadas por el usuario aparecen en el área de CHAT.
+
gh1
<br>
+
{
El agente utiliza el área de escritura de texto para enviar y redacta la respuesta al usuario.
+
hay_gh1 = 1
<br>
+
# umbrales para el numero de digitos de una extension
El agente puede utilizar el despleglable con respuestas prediseñadas. Selecciona una respuesta, pulsar el botón para copiar ésta en el área superior y pocede a enviar el texto.
+
# sirve para saber si un peer es una extension o un enlace
<br>
+
exten_min_digi = 3
En la parte inferior de la ventana el agente cuenta con un botón para etiquetar la llamada y otro para colgarla.
+
exten_max_digi = 8
<br><br>
+
# numero maximo de extensiones soportadas
[[#CHAT | Volver arriba]]
+
exten_max = 500
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
+
# numero maximo de enlaces soportados
<br><br>
+
enla_max = 20
====== Supervisor ======
+
# numero maximo de retrollamadas activas concurrentes
<br><br>
+
retro_max = 50
Para acceder al CHAT el Supervisor accede al Menú MC de la barra superior, opción Chat/Activos.
+
# numero maximo de retrollamadas activas concurrentes para una extension como destino (max 31)
<br>
+
retro_max_b = 4
La nueva ventana muestra los CHAT's activos en la aplicación.
+
}
<br>
+
El Supervisor selecciona el que desea observar y pulsa el botón, tal y como se indica en la imagen.
+
gh1_recarga
<br>
+
{
El botón central de esta ventana refresca la información respecto a los CHAT's activos en cada momento.
+
# tiempo maximo en segs. para activar una retrollamada tras finalizar llamada
<br><br>
+
to_retro_candidato = 60
[[File:Acceso_Chat_Supervisor_Suite.png|250|center]]
+
# tiempo maximo en segs. que una retrollamada espera a que las extensiones esten libres
<br><br>
+
to_retro_activo = 300
La siguiente imagen muestra la ventana de CHAT del supervisor.
+
# temporizador de limpieza de tablas en segs.
<br><br>
+
to_limpiar = 10
[[File:Formulario_Chat_Supervisor.png|250|center]]
+
}
<br><br>
+
Como puede apreciarse en la imagen el Supervisor puede enviar mensajes de dos formas:
+
ias
: * Al agente
+
{
: * Al agente y al usuario.
+
hay_ias = 1
<br>
+
url = mdgh_rest
En la pantalla de CHAT el supervisor observará toda la información intercambiada entre el usuario y el agente.
+
puerto = 8090
<br><br>
+
}
[[#CHAT | Volver arriba]]
+
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
+
ias_recarga
<br><br>
+
{
====== Usuario de VIVAit Call ======
+
# tiempo maximo en segs. para conectar con asterisk para comandos
<br><br>
+
to_conx_cmd = 10
Cuando un usuario de VIVAit Call inicia la sesión se muestra en pantalla un botón de acceso al CHAT.
+
# periodo en horas para actualizar lista de id de nodos y sus direcciones ip
<br><br>
+
to_lista_nodos = 1
[[File:Ventana-Inicio.jpg|900px|center]]
+
}
<br><br>
+
-->
Este botón abre una ventana de solicitud del servicio.
 
<br><br>
 
[[File:Entrada a servicio de CHAT.jpg|900px|center]]
 
<br><br>
 
Si el usuario solicita el servicio, y existe un agente logado en VIVAit-Suite, se abre la ventana de CHAT, en la que el usuario establece la comunicación con el agente.
 
<br><br>
 
[[File:Servicio de CHAT iniciado.jpg|900px|center]]
 
<br><br>
 
El usuario escribe en la zona de mensaje y cuando pulsa el botón Enviar el texto aparece en la zona central de la ventana. Toda la comunicación que se intercambie entre agente y usuario quedará reflejada en esta zona central.
 
<br><br>
 
[[File:Ejemplo de pantalla con mensaje de usuario y agente.jpg|900px|center]]
 
<br><br>
 
Cuando el usuario lo desee puede pulsar el botón cerrar chat para dar por finalizada la comunicación.
 
<br>
 
Si no hay agentes logados en VIVAit-Suite, el sistema presenta la siguiente pantalla:
 
<br><br>
 
[[File:Sin agentes logados.jpg|900px|center]]
 
<br><br>
 
Cuando un agente se logue en un grupo ACD de CHAT se establecerá la comunicación de forma inmediata.
 
<br><br>
 
[[#CHAT | Volver arriba]]
 
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 
<br><br>
 
====== Configuración del grupo ACD ======
 
<br><br>
 
Para que entre un usuario y un agente se pueda establecer una comunicación de CHAT es necesario que el grupo ACD al que está logado el agente tenga asignado un formulario de CHAT.
 
<br><br>
 
[[File:Configuracion_Grupo_ACD_Desk.png|300px|center]]
 
<br><br>
 
[[File:Configuracion_Grupo_ACD.png|600px|center]]
 
<br><br>
 
[[Category:tecnico]]
 
[[Category:administrador]]
 
[[Category:VIVAit Call]]
 
[[Category:VIVAit Suite]]
 
<br><br>
 
[[#CHAT | Volver arriba]]
 
[[http://vivait-wiki.mdnova.local/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_2 Volver al índice]]
 
<br><br>
 
  
==== MEET ====
+
===== Nuevo servicio en intz-nimitz 04.00.00  =====
  
El esquema de conexión para el Meet es el siguiente:
 
  
[[File:Conexion.jpg|800px]]
 
  
 +
Para las colas con extensiones multiterminal, se ha creado un ha creado un nuevo servicio en intz-nimitz 04.00.00.
  
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]]
+
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').
  
Ficheros:
+
==== 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.
  
*El fichero config.json tiene la configuración necesaria para proporcionar el servicio.
+
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)
  
Fichero de configuracion MEET:
+
Donde cada parámetro monitorizado indica:
  
/etc/janus/janus.cfg
+
{| class="wikitable"
/etc/janus/janus.plugin.echotest.cfg
+
|-
/etc/janus/janus.transport.http.cfg
+
!Parámetro!!Descripción
/etc/janus/janus.transport.websockets.cfg
+
|-
/etc/janus/vivait.plugin.meet.cfg
+
|SIS/ver||Versión del proceso
/etc/janus/vivait.plugin.move.cfg
+
|-
 
+
|SIS/inic||Fecha de de arranque del proceso
En los archivos de configuracion, es obligatorio revisar:
+
|-
*janus.cfg
+
|SIS/alarmas||Alarmas desde arranque
interface = IP_NODO
+
|-
server_name = IP_NODO
+
|SIS/ultAlar||Fecha de última alarma
ice_enforce_list = IP_NODO (e ip publicas, si las hay)
+
|-
 
+
|Gmp/msj||
*vivait.plugin.meet.cfg
+
|-
meet_url = https://IP_NODO/meet#
+
|Gmp/buf||
local_nodo_id = ID_NODO
+
|-
local_ip = IP_NODO (escucha [sip])
+
|Gmp/tarea||
email_from_default_invitation = vivait-meet-18-04@mdtel.local
+
|-
smart_host = mdsmtp.mdtel.net
+
|Tmp/uptime||Tiempo que lleva corriendo
 
+
|-
*vivait.plugin.move.cfg
+
|mtr/mys||Si está conectado al MySQL
local_nodo_id = ID_NODO
+
|-
local_ip = IP_NODO (escucha [sip])
+
|mtr/ocup||Porcentaje de ocupación
 
+
|-
Fichero de logs:
+
|mtr/planif||Contactos planificados Totales (Último minuto)
 
+
|-
/var/log/janus.log
+
|mtr/intento||Intentos totales (Ültimo minuto)
 +
|-
 +
|}
  
 +
* Posee un fichero de configuración llamado ''motorSal.conf'' en la ruta '''/etc/MDtel/motorSal.conf''':
  
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 '''''VIVA'''''it Call se puede consultar en este [[Portal_de_administraci%C3%B3n_VIVAit#VIVAit_Meet_.28En_Construcci.C3.B3n.29|enlace]].
 
 
====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:
 
 
[[File:Gran hermano.png|800px |center]]
 
 
 
 
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.
 
 
 
===== 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
 
  # Los nombres no pueden tener numeros
 
  # Si el valor de una cadena contiene espacios, se pondra entre comillas dobles
 
  # Si el valor de una cadena contiene espacios, se pondra entre comillas dobles
 
  # Los valores comentados indican valores por defecto
 
  # Los valores comentados indican valores por defecto
 +
 
  base
 
  base
 
  {
 
  {
cfg
+
cfg
{
+
{
soy_demonio = 1
+
soy_demonio = 1
hay_syslog = 0
+
hay_syslog = 0
  # Archivo con identificador de proceso: (-: /var/run/intz-nimitz.pid)
+
  # Archivo con identificador de proceso: (-: /var/run/motorSal.pid)
archivo_pid = -
+
archivo_pid = -
  # Archivo_traza: (-: stdout o /var/log/intz-nimitz.log si soy_demonio)
+
  # Archivo_traza: (-: stdout o /var/log/motorSal.log si soy_demonio)
 
  # No se usa si se activa hay_syslog
 
  # No se usa si se activa hay_syslog
archivo_traza = -
+
archivo_traza = -
}
+
}
cfg_recarga
+
cfg_recarga
{
+
{
 
  # Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
 
  # Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
nivel_traza = 3
+
nivel_traza = 2
pruebas = 1
+
pruebas = 0
hay_flush_traza = 1
+
hay_flush_traza = 1
  # traza_milisegundos = 1
+
  # traza_milisegundos = 1
}
+
}
sis
+
sis
{
+
{
 
  # No se usa. No modificar
 
  # No se usa. No modificar
subsistema = 0
+
subsistema = 0
}
+
}
gmp
+
gmp
{
+
{
 
  # Numero de mensajes. No modificar
 
  # Numero de mensajes. No modificar
num_msj = 256# Numero de buffer. No modificar
+
num_msj = 256
num_buf = 256
+
# Numero de buffer. No modificar
 +
num_buf = 256
 +
}
 
  }
 
  }
  }
+
   
 
  supervision
 
  supervision
 
  {
 
  {
puerto_escucha = 1116
+
puerto_escucha = 1120
 
  }
 
  }
 +
 
  supervision_recarga
 
  supervision_recarga
 
  {
 
  {
to_periodo = 60
+
to_periodo = 60
 
  }
 
  }
  regexp
+
   
 +
mysql
 
  {
 
  {
hay_regexp = 1
+
hay_mysql = 1
 +
host = localhost
 +
usuario = nimitz
 +
clave = phikau3iwCe4O0PP5b09ng==
 +
base_datos = nimitz
 
  }
 
  }
  regexp_recarga
+
   
 +
motor
 
  {
 
  {
  num_entradas = 32
+
hay_motor = 1
  inc_entradas = 128
+
ciclos_campanna_activa = 30
max_entradas = 1024
+
  # Directorio donde se almacenan las librerias dinamicas con las estrategias
 +
  # Por defecto = '/usr/lib/motorSal/estrategias'
 +
dir_estrategias = /usr/lib/motorSal/estrategias
 
  }
 
  }
  vivaitcall
+
   
 +
motor_recarga
 
  {
 
  {
  hay_vic = 1
+
  # Periodo de ejecucion del ciclo del motor
puerto_escucha = 5556
+
to_ciclo = 10
identif = gh_000
 
entorno = gh
 
max_conx = 4
 
 
  }
 
  }
  vivaitcall_recarga
+
   
 +
muestreo
 
  {
 
  {
to_solicitud = 10
+
hay_muestreo = 1
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
+
Los campos del fichero de configuración son los siguientes:
msk = 255.255.255.255}
+
 
}
+
{| class="wikitable"
}
+
|-
mysql
+
!Campo !!Descripción !!Posibles valores (si aplica)
{
+
|-
hay_mysql = 1
+
|soy_demonio||Si corro como demonio o como proceso||1 demonio – 0 proceso
host = BDTR
+
|-
usuario = nimitz
+
|hay_syslog||Si hay servidor de syslog||1 lo hay – 0 no lo hay
clave = phikau3iwCe4O0PP5b09ng==
+
|-
base_datos = nimitz
+
|archivo_pid||# Archivo con identificador de proceso: (-: /var/run/motorSal.pid)||
}
+
|-
mysql_recarga
+
|archivo_traza||# Archivo_traza: (-: stdout o /var/log/motorSal.log si soy_demonio)||
{
+
|-
to_resp = 5
+
|nivel_traza||# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)||
}
+
|-
gh1
+
|pruebas||||
{
 
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:
 
 
 
 
 
{| class="wikitable"
 
|-  
 
!Campo!!Descripción
 
 
|-
 
|-
|soy_demonio || # 0: Arranca como proceso - 1: arranca como demonio
+
|hay_flush_traza||||
 
|-
 
|-
|hay_syslog || Si hay servidor de syslog
+
|traza_milisegundos||||
 
|-
 
|-
|archivo_pid || # Archivo con identificador de proceso: (-: /var/run/vivait-cti.pid)
+
|subsistema||# No se usa. No modificar||
 
|-
 
|-
|archivo_traza | |# Archivo_traza: (-: stdout o /var/log/vivait-cti.log si soy_demonio)
+
|num_msj||# Numero de mensajes. No modificar||
 
|-
 
|-
|nivel_traza || # Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
+
|num_buf ||# Numero de buffer. No modificar||
 
|-
 
|-
|pruebas ||
+
|puerto_escucha||Puerto de supervisión del demonio||
 
|-
 
|-
|hay_flush_traza ||
+
|to_periodo||Timeout para reconectar||
 
|-
 
|-
|traza_milisegundos ||
+
|hay_mysql||Hay mysql||1 hay -0 no hay
 
|-
 
|-
|subsistema || # No se usa. No modificar
+
|host||IP o HOST máquina base de datos de tiempo real||
 
|-
 
|-
|num_msj || # Numero de mensajes. No modificar
+
|usuario||Usuario acceso Base de datos de tiempo real||
 
|-
 
|-
|num_buf || # Numero de buffer. No modificar
+
|clave||Clave usuario acceso base de datos de tiempo real||
 
|-
 
|-
|puerto_escucha || Puesto escucha del demonio
+
|base_datos||Nombre de la base de datos||
 
|-
 
|-
|to_periodo || Timeout para reconectar
+
|hay_motor||Si hay campañas saliente o no||1 hay motor saliente – 0 no hay motor saliente
 
|-
 
|-
|hay_regexp ||
+
|ciclos_campanna_activa||||
 
|-
 
|-
|num_entradas ||
+
|dir_estrategias ||# Directorio donde se almacenan las librerias dinámicas con las estrategias||
 
|-
 
|-
|inc_entradas ||
+
|to_ciclo||# Periodo de ejecución del ciclo del motor||
 
|-
 
|-
|max_entradas ||
+
|hay_muestreo||||1 hay muestreo – 0 no hay muestreo
 
|-
 
|-
|hay_vic ||
+
|}
 +
 
 +
* Respecto a los logs del motorSal consultar el siguiente apartado: [[Trazas motorSal]]. Los logs pueden verse en la ruta '''/var/log/motorSal.log'''
 +
 
 +
 
 +
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
 +
 
 +
==== 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"
 
|-
 
|-
|puerto_escucha || Puerto de escucha a nivel de VIVAit Call
+
!Parámetro!!Descripción
 
|-
 
|-
|identif ||
+
|SIS/ver||Versión del proceso
 
|-
 
|-
|entorno || Nombre base de datos
+
|SIS/inic||Fecha de de arranque del proceso
 
|-
 
|-
|max_conx || Número máximo de conexiones a la base de datos
+
|SIS/alarmas||Alarmas desde arranque
 
|-
 
|-
|to_solicitud || Timeout de solicitud
+
|SIS/ultAlar||Fecha de última alarma
 
|-
 
|-
|to_desconexion || Timeout de desconexión
+
|AMI/cnx||Conectado (1) a asterisk
 
|-
 
|-
|ip || Dirección de red de escucha del intz-nimitz
+
|AMI/ocup||Porcentaje de ocupación de MyACDSuperv
 
|-
 
|-
|msk || Mascara de red de escucha del intz-nimitz
+
|AMI/exten||Extensiones/Extensiones/Extensiones monitorizadas|-
 
|-
 
|-
|ip || IP localhost
+
|AMI/asig||
 
|-
 
|-
|msk || mascara localhost
+
|MYSQL/cnx||Conectado (1) a MySQL
 
|-
 
|-
|hay_mysql || Hay mysql
+
|MYSQL/ms||Tiempo de última operación en ejecutarse
|-
 
|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
 
 
|}
 
|}
  
 +
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'''
  
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
+
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
  
===== mdgh.conf y Mdintz.conf =====
+
==== 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'''''.
  
Además existen dos ficheros de configuración de Asterisk: /etc/asterisk/'''mdgh.conf''':
+
===== 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.
[servicios]
+
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''.
retro_hay=yes
+
 
subscripcion_hay=yes
+
===== escobaGrabsBd.pl =====
[rest]
+
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:
rest_red_ip=172.25.126.21
+
* En DAT_SEGMENTOS obtiene todos aquellos segmentos con grabaciones que dieron error, su estado tendrá valor 120.
rest_red_msk=255.255.255.255
+
 
rest_puerto_escucha=8090
+
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
retro_exten_tech=SIP
+
* En DAT_LLAMADAS obtendremos todos los registros correspondiente al segmentos anteriores.
retro_contexto=Cen_InicioLlamada_GHRetro
+
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.
retro_to_descolgar=30
+
 
retro_A_cartel_fmt=retro: %s
+
==== 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.
  
Y /etc/asterisk/'''Mdintz.conf'''
 
  
[gh]
+
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).
host0=BDTR
+
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.  
port0=5556
 
toConx=5
 
  toRx=10
 
  
Los campos de los ficheros y su significado son los siguientes:
+
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"
|-
 
!Campo!!Descripción
 
 
|-
 
|-
|retro_hay || Si es YES, empleamos la retrollamada '''multinodo''' del '''GH''', si es no, utilizamos la retrollamada de Asterisk
+
! Parámetro !! Descripción
 
|-
 
|-
|subscripcion_hay || Si es YES, empleamos los BLFs del '''GH''', si es no, utilizamos los BLFs de Asterisk
+
| SIS/ver || Versión del proceso
 
|-
 
|-
|rest_red_ip || '''IP del servidor donde corre el intz-gh'''
+
| SIS/inic || Fecha de arranque del proceso
 
|-
 
|-
|rest_red_msk || Máscara de red donde corre el intz-gh
+
| SIS/alarmas || Alarmas desde arranque
 
|-
 
|-
|rest_puerto_escucha || Puerto de escucha a nivel de VIVAit  Call
+
| 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
 
|-
 
|-
|retro_exten_tech || Tecnología empleada en las extensiones
+
| REC/segmNum || Segmentos procesados
 
|-
 
|-
|retro_contexto || Contexto del GH
+
| REC/segmErr || Segmentos con error
 
|-
 
|-
|retro_to_descolgar || timeot retrollamada descolgar
+
| NODO/fase  || Número de proceso de recordCentral
 
|-
 
|-
|retro_A_cartel_fmt || Información aparece en el display si la llamada es una retrollamada
+
| NODO/cuarentena  || Lista de nodos en cuarentena, separada por comas
|}
 
 
 
 
 
{| class="wikitable"
 
|-
 
!Campo!!Descripción
 
 
|-
 
|-
|host0 || Base de datos de tiempo real
+
| NODO/descarga || Lista de nodos en descarga, separada por comas
 
|-
 
|-
|port0 || Puerto de escucha
+
| 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 comando para conocer el estado de los diferentes elementos en Asterisk es:
+
El fichero es el siguiente:
 
+
'''mdgh show
+
#
Uso: mdgh show [config | exten <exten_num> | enla <peer>]]'''
+
# Configuracion de recordCentral.pl
 
+
#
Por ejemplo:
+
# 0: Solo alarmas en archivo log - 1: alarmas y trazas
 
+
$depurar = 1;
'''mdgh show exten 6140'''
+
 
+
# 0: Arranca como proceso - 1: arranca como demonio
:* mdgh Datos de la extension 6140:
+
$soyDemonio = 1;
:* Datos en intz-gh:
+
:* ESTADO=NOT_INUSE
+
# Archivo de log ('': salida estandar)
:* INUSE=0
+
$logArch = '/var/log/record/recordCentral.log';
:* RINGING=0
+
:* TS=1538978766
+
# Archivo para el pid (eliminando el .pid final)
:* HACE=362
+
$pidArch = '/var/run/record/recordCentral';
:* SUBS_NODOS_NUM=1
+
:* Estado en cache local: NOT_INUSE
+
# 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;
 +
  
'''mdgh show enla Trunk_MDtel'''
 
  
* mdgh Datos del enlace Trunk_MDtel:
+
*Los campos del fichero de configuración son los siguientes:
:* Datos en intz-gh:
 
:* INUSE=0
 
:* RINGING=0
 
:* TS=1538978766
 
:* HACE=461
 
 
 
 
 
El fichero de logs es el:
 
/var/log/intz-gh.log
 
 
 
 
 
===== 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'''
 
  
 +
{| class="wikitable"
 +
|-
 +
!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||
 +
|-
 +
|}
  
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)
+
<!--
+
:Se explican a continuación las variables más importantes del proceso RecordCentral:
*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
 
  
 +
# Conexion de base de datos
 +
$db='nimitz';
 +
$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';
  
====== <big>Acuerdos de funcionamiento</big> ======
+
# Seleccion de tipos de segmento a grabar separados por comas ('' = todos)
 +
$tiposSegmentoGrabar = '';
  
*Un origen A solo tendrá programa una retrollamada a un destino B; si teniendo una programada decide programar otra, la primera se pierde.
+
# Indica si se graba ring
 +
$grabarRing = 0;
  
*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)
+
* 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:
  
 +
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
 +
-->
  
 +
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
  
====== <big>Cuestiones</big> ======
+
==== 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'''.
  
*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.
+
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.
  
*Si salta al buzón no puede haber retrollamada.
+
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'''.
  
==== GeneraConf ====
+
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.
  
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.
+
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.
  
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.
+
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:
  
El GeneraConf se instala en el mismo servidor que el Tomcat, normalmente con el portal de administración.
+
  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
  
GeneraConf lee de la tabla Dat_Sincroniza, genera los ficheros de configuración y los coloca en su sitio.
 
  
===== Fichero de configuración =====
+
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/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
 +
|}
  
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.
+
Como complemento a los diagnósticos:
 
+
* Podremos examinar el fichero de configuración del proceso en '''/etc/MDtel/recordNodo.pconf'''
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:
+
:Se muestra a continuación el fichero de configuración:
 
+
 
+
#
[[File:URL de sincronizacion.jpg]]
+
# Configuracion de recordNodo.pl
 
+
#
 
+
# 0: Solo alarmas en archivo log - 1: alarmas y trazas
 
+
$depurar = 1;
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:
+
 
+
# 0: Arranca como proceso - 1: arranca como demonio
*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.
+
$soyDemonio = 1;
*Si se indica con valor 20 (alcanceSincroniza=20), se sincroniza solo el entorno de Alertas.
+
 
+
# Archivo de log ('': salida estandar)
A tal efecto se ha creado el siguiente enumerado:
+
$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';
 +
  
public enum TAlcanceSincroniza  {
+
*A continuación se indican los campos del fichero:
        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.
+
{| class="wikitable"
 +
|-
 +
!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).
 +
|-
 +
|}
 +
 
 +
<!--
 +
: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';
 +
 
 +
 
 +
 
 +
-->
 +
* Podremos examinar los logs del proceso en '''/var/log/recordNodo.log'''
  
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.
+
==== Aplicación PQCTI ====
  
===== Ficheros de logs =====
 
  
El fichero con los log’s generado se encuentra en /var/log/Tomcat.x/generaConf.log.
+
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]]
  
==== Nodo WebRTC ====
 
  
Se adjunta la documentación del nodo WebRTC:
+
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.
  
  
<big>'''[[:medio:DOCUMENTO_WEBRTC_v9.pdf| Manual de instalación y operación del nodo WebRTC ]]'''</big>
+
Actualmente pqcti se utiliza para:
  
 +
'''- Las conexiones desatendidas'''
  
La arquitectura de WebRTC en VIVAit Call es la  siguiente:
+
'''- Para el click2talk'''
  
 +
'''- La funcionalidad de llamar desde agenda o historial en el portal de usuario VIVAit'''
  
  
  
  
[[File:webrtc.png|900px|center]]
+
===== Servicios web =====
  
  
 +
Los servicios web que proporciona la aplicación son de dos tipos:
  
  
Componentes Principales:
+
1. Operativos
  
  
  
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
+
{| class="wikitable sortable"
! 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'''
+
! Comando!! Descripción
|  | 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'''
+
| '''cmd_llamar''' || Inicia una llamada saliente desde una extensión vivait-call.
| | Sirve para identificar a los usuarios y garantizar que los mismos sean quienes dicen ser.
 
 
|-
 
|-
| font-weight: bold;" | '''JANUS'''
+
| '''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.
| | 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.
 
 
 
|}
 
|}
  
=== Requerimientos de conectividad ===
 
  
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)
 
  
[[Archivo:Flujos corporativa.png|cebter]]
 
  
En el entorno de <big>'''Contact Center'''</big>, encontramos los siguientes flujos <big>'''entre servicios'''</big> (comunicaciones entre servidores, ('''''VIVA'''''it Suite))
 
  
[[Archivo:Flujos Contact servicios.png|650px|center]]
+
2. Informativos
  
y <big>'''entre usuarios y servicios'''</big> los reflejados a continuación:
 
  
[[Archivo:Flujos Contact puestos.png|600px|center]]
 
  
{| class="wikitable"
+
{| class="wikitable sortable"
 
|-
 
|-
!Lado A!!Lado B!!Puertos!!Sentido!!Observ.
+
! Comando!! Descripción
 
|-
 
|-
|Terminal telefónico||Servidor||TCP 5060||A -> B||Señalización SIP
+
| '''info_llamadas''' || Informa sobre las llamadas registradas en pqcti. Devuelve un array con la información de cada llamada.
 
|-
 
|-
|Terminal telefónico||Servidor||UDP 5060||A -> B||Señalización SIP
+
| '''info_llamadas_num''' || Devuelve el número de llamadas registradas en pqcti.
 
|-
 
|-
|Terminal telefónico||Servidor||10000 a 20000||A -> B
+
| '''info_llamada''' || Devuelve la información de la llamada cuyo ucid se pasa como parámetro de invocación.
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||
+
===== Archivos relevantes y procedimientos de despliegue =====
|-
+
 
|'''''VIVA'''''it Desk||Servidor||TCP 4500||A -> B||Comunicación CTI
+
 
|-
+
Los archivos relevantes para construir la aplicación son:
|'''''VIVA'''''it Desk||Servidor||TCP 3306||A -> B||Acceso a Mysql Base de datos
+
 
|-
+
 
|'''''VIVA'''''it Desk||Servidor Syslog||UDP 514||A -> B||Para envio de logs de agente
+
Fuentes (directorio referenciado en donde se encuentren los fuentes de asterisk):
|-
+
 
|'''''VIVA'''''it Supervisor||Servidor||TCP 3306||A -> B||Acceso a Mysql Base de datos
+
 
|-
+
* '''apps/app_md_pqcti.c'''
|'''''VIVA'''''it Tracker||Servidor||TCP 3306||A -> B||Acceso a Mysql Base de datos
+
|-
+
* '''apps/pqcti/*.c y apps/pqcti/*.h'''
|'''''VIVA'''''it Tracker||Servidor||TCP 8180||A -> B||
 
|-
 
|Actualizador||Servidor||TCP 80||A -> B||Necesario para actualizaciones de versiones de aplicaciones de agente y supervisores
 
|-
 
|Portal de administración||Servidor||TCP 8180||A -> B||Acceso al portal de administración '''''VIVA'''''it Suite
 
|-
 
|'''''VIVA'''''it Tracker Web||Servidor||TCP 8180||A -> B||
 
|-
 
|Monitor||Servidor||TCP 8180||A -> B||Wallboard
 
|-
 
|Monitorización||Servidor||TCP 80||A -> B||Acceso a portal monitorización (Zabbix)
 
|-
 
|}
 
  
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
+
* '''apps/Makefile''' (Que requiere de ser modificado para compilar la aplicación)
  
=== Gateways ===
 
El concepto de gateway como tal no existe en la plataforma '''''VIVA'''''it; 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
+
------ Añadir al final de "clean:" "pqcti/*.o" ------
  
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'''
+
------ 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:)
 +
------
 +
|} <br>
  
Al ejecutar este comando obtenemos la salida:
+
'''La compilación y despliegue se hace del modo habitual: "make" y "make install".'''
  
[[Archivo:Enlace_Exterior.png |center]]
 
  
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:
+
====== Configuración de archivos relevantes: ======
  
  
[[Archivo:Ejemplo_no_conexion.png |center]]
 
  
<!--
 
<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.
+
* '''En el Dialplan. Llamada saliente''' (en el archivo que se considere adecuado)
*Fuera de línea (20): las grabaciones se encuentran en una ubicación externa.
 
  
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
+
A continuación se ofrece un dialplan de inicio de llamada. Conviene analizar si los contextos de transferencia son distintos a los habituales.
  
=== 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
+
|
|-
+
------
| colspan="3"| Selección de registros
+
[pqcti_inicio_llamada_sale]
|-
+
  exten => _X.,1,NoOp(ID_DISPOSITIVO=${ID_DISPOSITIVO})
| SQL_selec || Expresión SQL que se añadirá al where a la SQL principal. || C_ORIGEN like '6%' and C_COD_CLIENTE= '023'
+
same =>      n,NoOp(UCID=${UCID})
|-
+
same =>      n,NoOp(PQCTI_SAL_EXTEN=${PQCTI_SAL_EXTEN})
| SQL_select_leido || Filtro de selección legible
+
  same =>      n,NoOp(PQCTI_SAL_ANI_NUM=$
  || Skill igual a 60310
+
{PQCTI_SAL_ANI_NUM})
|-
+
same =>      n,NoOp(PQCTI_SAL_ANI_NAME=$
| 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
+
{PQCTI_SAL_ANI_NAME})
|-
+
same =>      n,NoOp(PQCTI_SAL_DNIS_NUM=$
| colspan="3"| Salida
+
{PQCTI_SAL_DNIS_NUM})
|-
+
same =>      n,NoOp(PQCTI_SAL_DNIS_NAME=$
| FIC_extension || Extensión de fichero de salida: PDF, XLSX, CSV || PDF
+
{PQCTI_SAL_DNIS_NAME})
|-
+
same =>      n,Set(__TRANSFER_CONTEXT=pqcti_transferir_llamada)
| FIC_tipo_entrega || 'P': Pantalla, 'D': Directorio, 'C': Correo || D
+
  same =>      n,Set(__FORWARD_CONTEXT=pqcti_desviar_llamada)
|-
+
same =>      n,Set(CALLERID(name)=$
| FIC_destino || Si 'C', dirección de correo, si 'D', ruta del directorio || D:\informes\
+
{PQCTI_SAL_ANI_NAME})
|-
+
same =>      n,Set(CALLERID(num)=${PQCTI_SAL_ANI_NUM})
| colspan="3"| Plantilla
+
same =>      n,Set(CHANNEL(hangup_handler_wipe)=$
|-
+
{CONTEXT},fin,1())
| INF_modelo || Ruta del fichero de plantilla || C:\Modelos\llamadas.rep
+
same =>      n,pqctiLlamSaleIniciada
|-
+
  same =>      n,NoOp(INSERT en BD)
| INF_descripción || Descripción del informe || Informe detallado de llamadas
+
same =>      n,Goto(Cen_Inicio_SIP,${EXTEN},1)
|-
+
exten => fin,1,pqctiLlamLiberada
| colspan="3"| Base de datos
+
same =>      n,NoOp(UPDATE en BD)
|-
+
same =>      n,Return
| 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 ||
 
|-
 
| colspan="3"| 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 ||
 
|}
 
  
 +
|} <br>
  
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 llamada entrante'''
{| class="wikitable"
 
|-
 
| SQL_selec=(DAT_ACUMULADOS_COLAS.ID_COLA in (11))
 
  
SQL_select_leido=Skill igual a 60310
 
  
SQL_orden=
+
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.
FIC_extension=pdf
 
  
FIC_tipo_entrega=P
+
:{|
 +
|-
 +
|
 +
------
 +
[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
 +
------
  
FIC_destino=C:\
+
|} <br>
  
INF_modelo=skill_setsi.rep
 
  
INF_descripcion=Skill. SETSI
 
  
BD_ip=172.25.1.2
+
* '''En /etc/asterisk/acl.conf'''
  
BD_puerto=3306
 
  
BD_base_datos=nimitz
 
  
BD_usuario=nimitz
+
Debe configurarse el acl que limita el acceso al servicio desde direcciones ip conocidas.
  
BD_clave=UIk5jNY9PVX5ogg=
+
Un ejemplo en que se permite una red de servidores y un equipo:
  
PAR_desde_vis=-
+
:{|
 +
|-
 +
|
  
PAR_hasta_vis=-
+
------
 +
[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
 +
------
  
PAR_01=
+
|} <br>
|}
 
  
  
==== 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
+
* '''En /etc/asterisk/http.conf'''
  
<!--
+
:{|
===== Agente,asistencia diaria y agente. Asistencia diaria del grupo =====
+
|-
 
+
|
'''• Tiempo con personal:''' Tiempo que ha estado conectado el agente.<br/>
+
------
'''• Tiempo ACD:''' Tiempo de conversación ACD de las llamadas contestadas
+
[general]
o realizadas por el agente excluido el tiempo de retención.<br/>
+
servername=vcall-nodo
'''• Tiempo ACW:''' Tiempo dedicado por el agente a tareas administrativas
+
enabled=yes
tras finalizar las llamadas contestadas por el agente.<br/>
+
bindaddr=0.0.0.0
'''• Tiempo de llamado:''' Tiempo de ring en llamadas ACD.<br/>
+
bindport=8088
'''• Tiempo disponible:''' Tiempo que el agente estuvo conectado y no está
+
prefix=vcall-nodo
incluido en ninguno de los anteriores.<br/>
+
sessionlimit=100
'''• Tiempo AUX:''' Tiempo que el agente estuvo en pausa<br/>
+
session_inactivity=30000
'''• Tiempo retención:''' Tiempo que las llamadas estuvieron retenidas por
+
session_keep_alive=15000
el agente.<br/>
+
enablestatic=no
'''• Llamadas ACD:''' Número de llamadas ACD contestadas o realizadas por
+
;redirect = / /static/config/index.html
el agente.<br/>
+
tlsenable=no
'''• Llamadas transferidas:''' Número de llamadas ACD que fueron
+
;tlsbindaddr=0.0.0.0:8089
transferidas por el agente.
+
;tlscipher=
 +
;tlsdisablev1=yes
 +
;tlsdisablev11=yes
 +
;tlsdisablev12=yes
 +
;tlsservercipherorder=yes
 +
;[post_mappings]
 +
;uploads = /var/lib/asterisk/uploads/
 +
------
  
===== Agente. Aux y Grupo Aux =====
+
|} <br>
  
'''• 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 =====
+
* '''En /etc/asterisk/pqcti.conf'''
  
'''• 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/>
+
[general]
'''• Tiempo de llamado:''' Tiempo de ring en llamadas ACD.<br/>
+
debug=false
'''• Tiempo AUX:''' Tiempo que el agente estuvo en pausa.<br/>
+
llamadas_registrar=true
'''• Tiempo disponible:''' Tiempo que el agente estuvo conectado y no está
+
<br>
incluido en ninguno de los anteriores.<br/>
+
[comandos]
'''• Tiempo retención:''' Tiempo que las llamadas estuvieron retenidas.<br/>
+
url_comandos_v1=pqcti/v1/comandos
'''• Llamadas ACD:''' Número de llamadas ACD contestadas o realizadas por
+
acl=pqcti_acl_comandos
el agente.<br/>
+
<br>
'''• Llamadas entrada Ext:''' Número de llamadas entrantes NO ACD a la
+
[llamada_sale]
extensión.<br/>
+
canal_A_tech=sip
'''• Llamadas salida Ext:''' Número de llamadas salientes NO ACD desde la
+
canal_A_dial_cad_fmt=%s
extensión.<br/>
+
contexto=pqcti_inicio_llamada_sale
'''• Llamadas transferidas:''' Número de llamadas ACD que fueron
+
temporizador_segs=30
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 =====
+
|} <br>
  
  
'''• 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 =====
+
* '''En /etc/asterisk/ext_Subrutinas_BD.conf'''
  
'''• 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 =====
+
  ;------------------------------------------------------
 
+
[Cen_Sub_updateDatConxDesaten_Fin]
'''• 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/>
+
; ${ARG1}: C_UCID
'''• Llamadas ofrecidas:''' Número de llamadas entrantes al grupo
+
<br>
ACD(Llamadas ACD+ Abandonadas+ Desbordadas).<br/>
+
exten => s,1,NoOp(MDSUBUPDDATCONXDESCON*)
'''• Llamadas ACD:''' Número de llamadas contestadas por los agentes.<br/>
+
<br>
'''• Llamadas abandonadas:''' Número de llamadas colgadas por el cliente
+
  same =>   n,ExecIf($["${SPRV}"="1"]?
en el grupo ACD antes de ser contestadas o desbordadas.<br/>
+
Return(SUPERVIVENCIA))
'''• Desconectadas por ACD:''' Número de llamadas desbordadas que al
+
<br>
salir del grupo ACD se cuelgan.<br/>
+
  same =>   n,ExecIf($["${ARG1}"=""]?Return(NO_UCID))
'''• Desbordadas por ACD:''' Número total de llamadas desbordadas(incluye
+
<br>
las desconectadas).<br/>
+
  same =>  n,MDintz(nimitz|bd|sqlSinEspera|update
'''• Llamadas atendidas en < 20s:'''Número de llamadas contestadas con
+
DAT_CONX_DESATEN set D_HORA_FIN=now(),N_DURACION=now()-
tiempo de respuesta menor a 20 segundos.<br/>
+
D_HORA_INICIO where C_UCID="${ARG1}")
'''• Tiempo total de espera:''' Tiempo total que las llamadas estuvieron
+
<br>
esperando antes de ser atendidas.<br/>
+
  ;same =>   n,DumpChan
'''• % N.A.:''' Llamadas ACD/(Llamadas ACD+ Llamadas abandonadas).<br/>
+
  same =>  n,Return(OK)
'''• % N.D.S.:''' (Llamadas atendidas en < 20s/Llamadas ofrecidas)* 100.<br/>
+
<br>
'''• T.M.O:''' (Tiempo ACD+ Tiempo ACW+ Tiempo retención)/Llamadas
+
include => Cen_finLlamada
ACD.(Tiempo Medio Operación)
+
<br>
 
+
;------------------------------------------------------
===== Informe conducción (VDN Conducción) =====
+
-----------
 
+
[Cen_Sub_updateDatConxDesaten_Contestada]
'''•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/>
+
; ${ARG1}: C_UCID
'''•Abandonadas:''' Número de llamadas abandonadas, colgadas por el cliente
+
<br>
antes de ser contestadas por un agente o desbordadas.<br/>
+
exten => s,1,NoOp(MDSUBUPDDATCONXDESCON*)
'''•Desconectadas:''' Número de llamadas desbordadas que fueron colgadas al
+
<br>
salir del grupo ACD.<br/>
+
  same =>  n,ExecIf($["${SPRV}"="1"]?
'''•Desbordadas:''' Número total de llamadas desbordadas (incluye desconectadas)<br/>
+
Return(SUPERVIVENCIA))
'''•Llamadas retenidas:''' Número de retenciones que el agente realizó sobre las
+
<br>
llamadas ACD contestadas.<br/>
+
  same =>  n,ExecIf($["${ARG1}"=""]?Return(NO_UCID))
'''•% N.A.:''' (Llamadas contestadas/(Llamadas contestadas+ Abandonadas+
+
<br>
Desbordadas))* 100.<br/>
+
  same =>  n,MDintz(nimitz|bd|sqlSinEspera|update
'''•% N.D.S.:''' (Contestadas NDS/(Llamadas contestadas+ Abandonadas + Desbordadas))*100<br/>
+
DAT_CONX_DESATEN set B_CONTESTADA=1 where C_UCID="$
'''•% Abandonadas:''' (Abandonadas/(Llamadas contestadas+ Abandonadas+ Desbordadas))* 100.<br/>
+
{ARG1}")
'''•Acum. RING:''' Tiempo de ring en llamadas ACD(entrantes).<br/>
+
<br>
'''•ACDTIME:''' Tiempo de conversación ACD de las llamadas contestadas o
+
  ;same =>n,DumpChan
realizadas por el agente excluido el tiempo de retención de un grupo ACD.<br/>
+
  same =>n,Return(OK)
'''•Acum. ACW:''' Tiempo dedicado por el agente a tareas administrativas tras
+
include => Cen_finLlamada
finalizar las llamadas.<br/>
+
<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
+
[Cen_Sub_insertDatConxDesaten]
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
+
; ${ARG1}: ID_NODO
conectado el agente).<br/>
+
; ${ARG2}: C_UCID
'''•Acum. AUX:''' Suma del Tiempo en pausa de todos los agentes que estén
+
; ${ARG3}: C_ORIGEN_NUM
conectados al grupo ACD(Este tiempo se repercute en todos los grupos ACD a
+
; ${ARG4}: C_ORIGEN_NAME
los que esta conectado el agente).<br/>
+
; ${ARG5}: C_ORIGEN_EXTEN
'''•Prom. ACD:''' ACDTIME/Llamadas contestadas.<br/>
+
; ${ARG6}: C_DESTINO_NUM
'''•Prom. ACW:''' Acum. ACW/Llamadas contestadas.<br/>
+
; ${ARG7}: C_DESTINO_NAME
'''•Prom. HOLD:''' Acum. HOLD/Llamadas retenidas.<br/>
+
; ${ARG8}: ID_DISPOSITIVO
'''•AHT:''' (ACDTIME+ Acum. ACW+ Acum. HOLD)/Llamadas contestadas.<br/>
+
;
'''•Vel. prom. de resp.:''' Tiempo total de espera de llamadas antes de ser
+
<br>
atendidas/Llamadas ACD.<br/>
+
exten => s,1,NoOp(MDSUBINSERTDATCONXDES*)
'''•Tiempo máx. de espera:''' Tiempo de la llamada que estuvo mas tiempo en el
+
<br>
grupo ACD hasta que fue atendida.<br/>
+
  same =>n,ExecIf($["${SPRV}"="1"]?
'''•Agentes en PH:''' (Acum. Staff- Acum. AUX)/1800(Agentes conectados que no
+
Return(SUPERVIVENCIA))
están en pausa en el intervalo).<br/>
+
<br>
'''•Agentes Staff:''' Acum. Staff/1800(Agentes conectados en el intervalo)<br/>
+
  same =>  n,ExecIf($["${ARG1}"=""]?Return(NO_IDNODO))
'''•Desglose de tiempos AUX:''' Tiempo que el agente estuvo en cada uno de los
+
  same =>  n,ExecIf($["${ARG2}"=""]?Return(NO_UCID))
motivos de pausa.
+
  same =>  n,ExecIf($["${ARG3}"=""]?Set(ARG3=NULL))
 
+
  same =>  n,ExecIf($["${ARG4}"=""]?Set(ARG4=NULL))
===== Informe de producción =====
+
  same =>   n,ExecIf($["${ARG5}"=""]?Set(ARG5=NULL))
 
+
  same =>   n,ExecIf($["${ARG6}"=""]?Set(ARG6=NULL))
'''• LL. ACD:'''Número de llamadas contestadas por ese agente para ese
+
  same =>   n,ExecIf($["${ARG7}"=""]?Set(ARG7=NULL))
grupo ACD.<br />
+
  same =>   n,ExecIf($["${ARG8}"=""]?Set(ARG8=NULL))
'''• LL. HOLD:''' Número de retenciones efectuadas para las llamadas
+
<br>
contestadas en ese grupo ACD.<br />
+
  same =>   n,MDintz(nimitz|bd|sqlSinEspera|insert into
'''• LL. Redir.:''' Número de llamadas no contestadas por un agente que
+
DAT_CONX_DESATEN
fueron redirigidas de nuevo a la cola.<br />
+
(D_HORA_INICIO,ID_NODO,C_UCID,C_ORIGEN_NUM,C_ORIGEN_NAM
'''• LL. No colgadas cliente:''' Número de llamadas que terminaron sin el
+
E,C_ORIGEN_EXTEN,C_DESTINO_NUM,C_DESTINO_NAME,ID_DISPOS
colgado del cliente.<br />
+
ITIVO) VALUES(now(),${ARG1},"${ARG2}","${ARG3}","$
'''• LL. Aband.:''' Número de llamadas abandonadas en ese grupo ACD, este
+
{ARG4}","${ARG5}","${ARG6}","${ARG7}",${ARG8}))
valor es independiente del agente por tanto se repite el valor para todos
+
<br>
los agentes en un mismo grupo ACD.<br />
+
  ;same =>n,DumpChan
'''• LL. Transfer.:''' Número de llamadas ACD que fueron transferidas por el
+
  same =>n,Return(OK)
agente.<br />
+
<br>
'''• LL. Conf:''' Número de llamadas ACD en las que el agente estableció
+
include => Cen_finLlamada
conferencia.<br />
+
<br>
'''• S. Extensión:''' Número de llamadas salientes de extensión, este valor es
+
<br>
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.
+
|} <br>
  
''* Ejemplo:''
 
  
-Llamada: Duración 15 minutos Hora fin de la llamada 13:01
+
* '''En /etc/asterisk/ext_MARCAR_Extension_Dial.conf'''
-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.
 
  
  
 +
*En este fichero hay que añadir lo que está en negrita.
  
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
+
:{|
 +
|-
 +
|
  
== Otros Diagnósticos y operaciones básicas ==
+
;------------------------------------------------------
=== Arranque y apagado de la plataforma ===
+
-----------
 +
[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()
  
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
+
|} <br>
  
  
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
 
  
 +
'''Descripción de campos del archivo pqcti.conf:'''
  
Al respecto del orden de apagado de nodos, es el siguiente:
+
'''• general'''
# 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
 
  
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
+
*'''debug'''. Activa la depuración desde el inicio, aunque puede activarse mediante comando "pqcti debug on"
<!--
 
=== Nivel matriz de conmutación ===
 
-->
 
  
=== Grabación ===
+
*'''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.
  
==== 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
+
'''• comandos'''
* Prerutas
 
* Objetos: que son las extensiones, usuarios, grupos corporativos, etc.
 
  
Tenemos tres formas de grabar:
+
*''' 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
  
* Grabar con beep periódico
+
*''' acl.''' Configura el "acl" a utilizar en el archivo "/etc/asterisk/acl.conf"
* 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.
+
'''• llamada_sale'''
  
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.
+
*''' canal_A_tech.''' Configura la tecnología de los canales de extensiones. Típicamente "sip". Podría ser "local", pero:
  
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.
+
  '''¡¡¡CUIDADO !!! si se usase un canal local, se perdería la función de "setvar" en el "peer": se pierde ID_DISPOSITIVO.'''
  
  
==== Como configurar la grabación bajo demanda ====
+
* '''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".
  
Para activar la grabación bajo demanda es necesario activar el '''MixMonitor'''.
+
* '''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".
  
En el Nodo hay que identificar '''Grabar por enrutamiento''' = '''Sin grabación'''.
+
* '''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 =====
  
  
[[File:Ejemplo activacion grabacion en nodo CORP-2.jpg|centro]]
 
  
 +
* '''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".
  
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'''.
 
  
 +
* '''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".
  
  
  
[[File:NODO ACD-2.jpg|centro]]
 
  
  
  
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'''.
+
===== Comandos de asterisk =====
  
  
  
[[File:MODO DE GRABACION EN CAMPAÑA-2.jpg|centro]]
+
A continuación se muestran varios comandos de pqcti para asterisk.
  
  
  
 +
{| class="wikitable sortable"
 +
|-
 +
! 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.
 +
|-
 +
|}
  
El formulario de '''''VIVA'''''it  Desk que se abra cuando entre la llamada que queremos grabar ha de tener los botones de grabación.
 
  
  
[[File:Ejemplo de formulario con botones de grabacion.jpg|centro]]
 
  
 +
===== Tabla en base de datos =====
  
  
Trazas '''''VIVA'''''it  Desk:
+
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.
  
gre evliniciarGrabacion infra=20 modo=10 esta=”6/Demanda sin grabar”
+
Dicha tabla integra todos los registros de todos los nodos vivait y será mantenida por el dialplan.
  
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'''.
 
  
 +
Por supuesto, esa tabla sólo tiene sentido cuando "llamadas_registrar=true".
  
'''<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]]
+
------
 
+
CREATE TABLE IF NOT EXISTS `nimitz`.`DAT_CONX_DESATEN`
 
+
(
Además indicamos en el modo de grabación: Grabación bajo demanda inicio sin grabar.
+
  `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)
 +
------
  
 +
|} <br>
  
[[File:cap_2.jpg|600px]]
 
  
  
En la consola vemos los siguientes datos:
+
===== Interfaz para los servicios =====
  
  
[[File:cap_3.jpg|600px]]
+
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.
  
==== Comprobar que el servidor de grabación está activo ====
+
En ambos casos, el json es un objeto con campos.
  
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.
+
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.
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 ====
+
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.
  
Debemos fijarnos en la linea de respuesta del comando '''''nc ip_maquina 1114''''', que seria:
+
Todas las respuestas contienen un campo denominado "resultado" (de la ejecución) que puede tomar los siguientes valores:
{| 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
+
* '''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.
  
'''recordCentral NODO fase=0 cuarentena='' descarga='8,6,4,7,10,9' gestion='4,6,7,8,9,10''''
+
* '''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.
|}
 
  
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.
+
* '''NO_EJECUTADO.''' Hay un problema no achacable a quién invoca y no se puede ejecutar el comando.
  
==== 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"
+
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.
|-
 
| 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.
+
===== Descipción de comandos y respuestas de json =====
  
==== 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"
 
|-
 
| root@smadavacdrecord1:~# nc localhost 1114
 
recordCentral SIS ver='01.2' inic='20140423 094058' alarmas=11041 ultAlar='20140423
 
160112'
 
  
recordCentral MYSQL cnx=1
+
A partir de aquí se describen los comandos y respuestas en base a json de ejemplo, ya que los campos son triviales y autoexplicativos:
  
recordCentral NAS llamadas=1 segmentos=1
 
  
recordCenral REC llamNum=24901 llamErr=0 segmNum=38906 segmErr=0 retraso=305
+
*'''cmd_llamar -> Inicia una llamada saliente desde una extensión vivait-call.'''
  
'''recordCentral NODO fase=0 cuarentena='' descarga='8,6,4,7,10,9' gestion='4,6,7,8,9,10''''
+
Resultado esperado :
|}
 
  
Fijándonos en el campo "cuarentena=''" indica que ninguno de los nodos tiene problemas.
+
:{|
 +
|-
 +
|
 +
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"
 +
}
  
==== Comprobación del estado de ocupación del almacenamiento temporal de grabaciones en un nodo. ====
+
|} <br>
  
Desde un SSH ejecuta el comando '''''df - h''''' en la maquina donde creamos que debe estar ejecutando el proceso recordNod:
+
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.
  
{|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
 
  
|}
 
  
Nos fijaríamos en la línea marcada en negrita, el campo "Use%" indicara el porcentaje de almacenamiento temporal de grabaciones en un nodo.
 
  
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
+
*'''cmd_liberar -> Libera una llamada establecida, que haya sido registrada en pqcti.'''
  
===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 ====
 
{|
 
 
|-
 
|-
|  
+
|
  '''Nota:''' Como mucho se pueden tener a dieciséis personas al mismo tiempo usando esta aplicació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").
 +
 
 +
 
  
Como hemos mencionado anteriormente, esta aplicación permite la escucha de llamadas y,
+
*'''info_llamadas -> Informa sobre las llamadas registradas en pqcti. Devuelve un array con la información de cada llamada.'''
opcionalmente, realiza la función de intrusión. Tiene tres opciones de configuración obligatorios
 
que mostramos a continuación:
 
  
{|
+
:{|
 
|-
 
|-
 
|
 
|
  CallSpy(<tipoEspiado>,<expRegEspiado>,<parametrosConf>)
+
  }
 +
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").
 +
 
  
|}
+
*'''info_llamadas_num -> IDevuelve el número de llamadas registradas en pqcti.'''
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:  
+
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.'''
 +
 
 +
:{|
 
|-
 
|-
 
|
 
|
exten => s,n,CallSpyee(,,,${EXTENSION})
 
|}
 
  
====Cambios para el dialplan de asterisk====
+
resp={
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.
+
  "comando": "info_llamada",
Pasos a seguir:  
+
  "ucid": "20999000051643890188",
*Paso 1. Creación de un código de intrusión para cada tipo según necesidad (cola, VDN, agente y
+
  "estado_actual": "llam_sale_iniciada",
extensión).
+
  "duracion_segundos": 14,
{|
+
  "resultado": "OK",
|-
+
  "ahora": "20220203 131003.638"
|
+
  }
Ejemplo '''MD'''tel: declaramos como código de intrusión a Agente *44*NUMERO
+
|} <br>
;==========================================
 
;======== 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.
+
(Este comando sólo puede invocarse si se ha configurado "llamadas_registrar=true").
{|
 
|-
 
|
 
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
 
|}
 
  
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
 
  
=== Calendarios ===
+
<br>
  
{| class="wikitable"
+
==== Vivait-CTI ====
| Nota: '''En la versión de VIVAit 3.5 , Se tiene que instalar el nuevo servidor de DaviCal. '''
+
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).
|}
 
  
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.
+
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
  
Se adjunta un manual para su instalación:
+
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:
  
<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>
+
{| class="wikitable"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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: [[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}
 
 
 
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:
 
 
 
[[Archivo:Captura de pantalla de 2016-07-21 12_43_58.png || 1020px|center]]
 
 
 
 
 
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)
 
 
 
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
 
 
 
=== 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 ''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"
 
|-
 
| 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
+
!ver!!Versión del proceso
 
|-
 
|-
|Ubicación del proceso||Script arranque: /etc/init/ rsyslog.conf
+
|sis/inic||Fecha de arranque del proceso
Configuración :
 
/etc/rsyslog.d/30-vivait-
 
desk.conf
 
 
|-
 
|-
|Arranque||service rsyslog start
+
|Sis/alarmas||Alarmas desde arranque
 
|-
 
|-
|Parada||service rsyslog stop
+
|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||
 
|-
 
|-
|Reinicio||service rsyslog reload
+
|Cti/numMoniCallByDevice||
 
|-
 
|-
!colspan="2" width="60 px" style="background:Lavender; color:Black"|Diagnostico
+
|Cti/numMoni||
 
|-
 
|-
|Registro de logs||/var/log/MDtel/vivait-desk.log
+
|Cti/auditCallErr||
Fichero del día actual. se guardan los 30
+
|-
anteriores comprimidos en tar.g
+
|Cti/auditAuxStrErr||
|}
+
|-
 
+
|Cti/ auditMsjReqErr||
 
+
|-
 
+
|Cti/ araChanID||
'''Ejemplo 30-vivait-desk.conf:'''
+
|-
+
|Cti/ araUniqueID||
#  Default rules for rsyslog.
+
|-
#
+
|Cti/ araMoni||
#            For more information see rsyslog.conf(5) and /etc/rsyslog.conf
+
|-
+
|Ami/esta||Estado de conexión contra manarger de asterisk
#
+
|-
# First some standard log files.  Log by facility.
+
|Ami/resp||
#
+
|-
local4.*            -/var/log/MDtel/vivait-desk.log
+
|Ami/evs||Número de eventos (último minuto)
local5.*              -/var/log/MDtel/rastreo.log
+
|-
 
+
||Ami/descar
 
+
|-
Es muy importante comprobar que el servidor de '''syslog''' escucha por el puerto '''514''':
+
|Ami/err||Errores
+
|-
#################
+
|Ami/errConx||Errores de conexión
#### MODULES ####
+
|-
#################
+
|Ami/numAct||
+
|-
module(load="imuxsock") # provides support for local system logging
+
|Ami/auditErrAct||
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 ===
+
Como complemento a los diagnósticos:
Un Core es la memoria de un programa.
 
  
Para generar un Core rápido con Asterisk hay que hacer lo siguiente:
+
Podremos examinar el fichero de configuración del proceso en '''/etc/MDtel/vivait-cti.conf'''
  
    Ejecutar ps aux | grep asterisk y coger el PID del programa
+
*El fichero de configuración, '''vivait-cti.conf''', es el siguiente:
    gdb /usr/sbin/asterisk [PID]
 
    gcore [file]
 
  
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
+
#
 
+
# Los nombres no pueden tener numeros
==Funcionalidades específicas ==
+
# Si el valor de una cadena contiene espacios, se pondra entre comillas dobles
=== Mecanismo de prioridad adaptativa ===
+
# Los valores comentados indican valores por defecto
 
+
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
+
base
 
+
{
==== Introducción ====
+
cfg
 
+
{
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,
+
soy_demonio = 1
sino en un factor de corrección de prioridad derivado del tiempo de espera de una llamada
+
hay_syslog = 0
 
+
# Archivo con identificador de proceso: (-: /var/run/vivait-cti.pid)
==== Terminología ====
+
archivo_pid = -
 
+
# Archivo_traza: (-: stdout o /var/log/vivait-cti.log si soy_demonio)
* '''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.
+
# No se usa si se activa hay_syslog
* '''Prioridad de grupo ACD:''' Los agentes del ''Call Center'' tendrán configurada una prioridad para cada grupo ACD al que pertenecen
+
archivo_traza = -
* '''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
+
cfg_recarga
 
+
{
  '''Nota.-''' ''En terminología Asterisk el aumento de prioridad corresponde con números descendentes, es decir,<br />
+
# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
  prioridad 50 es mejor que prioridad 70''
+
nivel_traza = 3
 
+
pruebas = 1
==== Mecanismo de asignación de llamadas ====
+
hay_flush_traza = 1
 
+
}
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:
+
sis
 
+
{
- 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
+
# No se usa. No modificar
 
+
subsistema = 0
'''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.'''
+
}
 
+
gmp
- Agentes con prioridad de colas de 100 en adelante; se utilizará el siguiente mecanismo de prioridad ponderada:
+
{
 
+
# Numero de mensajes. No modificar
:*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)
+
num_msj = 1024
 
+
# Numero de buffer. No modificar
:*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:
+
num_buf = 1024
 
+
}
[[Archivo:Formula.png |center]]
+
}
 
+
   
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
+
  supercolas
función del peso) en la asignación de la siguiente llamada
+
{
El peso podrá adquirir tres posibles valores: 0, 1 y 10
+
en_comandos = 0
 
+
en_eventos = 0
[[Archivo:Esquema.png |center]]
+
# archivo_conf = supercolas.conf
 
+
}
  <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>
+
supervision
 
+
{
 
+
puerto_escucha = 1111
<!--
+
}
[[Medio:Asignación de llamadas por prioridad adaptativa.pdf|Asignación de llamadas por prioridad adaptativa]]-->
+
 
+
cti
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
+
{
 
+
hay_cti = 1
=== Marcación saliente ===
+
# Dimensionamiento de recursos. Uno menos, ya que cero no vale
Dentro del ACD hay un comportamiento especial que es la marcación saliente. Esta puede ser de tres tipos:
+
max_conx = 512
* '''Vista previa''': El agente demanda la siguiente llamada a realizar.
+
max_call = 2048
* '''Progresivo''': Se llama al agente y se lanza la llamada al contacto.
+
max_channel = 4096
* '''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.
+
max_monitor = 512
 
+
max_str_aux = 512
 
+
puerto_escucha = 4500
====Esquema de funcionamiento====
+
link_id = 1
[[Archivo:esquema funcionamiento marcador.jpg|center|500px]]
+
#
 
+
hay_vdn = 1
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.
+
hay_usuarios = 1
 
+
usuarios
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.
+
vivait
 
+
{
====Flujo de estados====
+
clave = 3RSMbPlTi61rG5pySx9hhUokz8Fyy3Nql2w8Jairfl8=
 
+
ip = 0.0.0.0
El flujo de estados es el reflejado en la figura siguiente:
+
msk = 0.0.0.0
 
+
}
[[Archivo:diagrama de flujo motorsal.png|center|800px]]
+
}
 
+
}
Los diferentes estados de un contacto son:
+
{| class="wikitable sortable"
+
cti_recarga
|-
+
{
! Estado !! ID_Estado!! Descripción
+
makeCall_primero_dentro = 1
|-
+
makeCall_primero_fuera_agente_descuelga = 1
| 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
+
temporizador_makeCall = 30
|-
+
fmt_canal_exten = SIP/%s
|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.
+
# contextos para llamadas salientes makeCall y makePredictiveCal
|-
+
contexto_makeCall_primeroFuera = Cen_MakeCallPrimeroFuera
|Intento||20||El control pasa a myAcdSuperv, que a su vez genera la llamada en Asterisk. Cuando termina, se pasa a Planificable o Finalizado.
+
contexto_makeCall_primeroFueraDentro = Cen_MakeCallPrimeroFueraDentro
|-
+
contexto_makeCall_primeroDentro = Cen_MakeCallPrimeroDentro
|Finalizado||100||Las gestiones con este contacto han terminado.
+
# contextos para llamadas salientes desde myAcdSuperv
|-
+
contexto_myAcdSuperv_ProgreFuera = Cen_myAcdSuperv_ProgreFuera
|Abortado||110||
+
contexto_myAcdSuperv_ProgreDentro = Cen_myAcdSuperv_ProgreDentro
|-
+
contexto_myAcdSuperv_PredicFuera = Cen_myAcdSuperv_PredicFuera
|Obsoleto||200||Se ha agotado el tiempo para contactar sin agotar todos los intentos. No se le vuelve a llamar nunca.
+
contexto_myAcdSuperv_PredicDentro = Cen_myAcdSuperv_PredicDentro
|-
+
# contexto para transferencias
|Cancelado||300||
+
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
 +
}
 +
  
====Carga de contactos====
 
  
===== Descripción =====
+
Los siguientes son los campos del fichero de configuración:
  
A continuación se explica la configuración y funcionamiento de la utilidad encargada de asignar contactos a campañas.
+
{| class="wikitable"
 
+
|-
===== Configuración =====
+
!Campo !!Descripción !!Posibles valores (si aplica)
 
+
|-
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.
+
|soy_demonio||# 0: Arranca como proceso - 1: arranca como demonio||
 
+
|-
{| class="wikitable" style="text-align:center;"
+
|hay_syslog||Si hay servidor de syslog||1 lo hay – 0 no lo hay
|-  
+
|-
! Parámetro !! Valor !! Obligatorio !! Defecto
+
|archivo_pid||# Archivo con identificador de proceso: (-: /var/run/vivait-cti.pid)||
|-  
+
|-
| db|| Nombre de la base de datos|| SI || nimitz
+
|archivo_traza||# Archivo_traza: (-: stdout o /var/log/vivait-cti.log si soy_demonio)||
|-  
+
|-
| dbHost|| Host MySQL || SI || localhost
+
|nivel_traza||# Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)||
|-  
+
|-
| dbPort|| Puerto MySQL || NO || 3306
+
|pruebas||||
|-  
+
|-
| dbUsuario || Usuario de acceso a la base de datos|| SI ||
+
|hay_flush_traza||||
|-  
+
|-
| dbClave || Clave del usuario || SI ||
+
|subsistema||# No se usa. No modificar||
|-  
+
|-
| rutaContactos || Ruta hasta el archivo de contactos || NO || /var/spool/MDtel/contactos
+
|num_msj||# Numero de mensajes. No modificar||
|-  
+
|-
| obsoletos || Si vale 1, marcar como obsoletos los contactos anteriores || NO || 0
+
|num_buf||# Numero de buffer. No modificar||
|-  
+
|-
| diasCaducidad || Número de dias a partir de los cuales caducarán los contactos || SI ||
+
|en_comandos||||
|-  
+
|-
| idCampanna || Número de columna que contiene el ID de la campaña || SI||
+
|en_eventos||||
|-  
+
|-
| idLista || Numero de columna que contiene el ID de la lista || SI ||
+
|archivo_conf||Archivo configuracion de asterisk para las supercolas||
|-  
+
|-
| 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''')
+
|puerto_escucha||Puerto de supervision del demonio||
|-
+
|-
| 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
+
|hay_cti||hay cti||1 hay cti – o no hay
|-  
+
|-
| codCli || Número de columna del CSV que contiene el código de cliente || SI ||
+
|max_conx||Numero maximo de conexiones||
|-  
+
|-
| nombreCon || Número de columna del CSV que contiene el nombre || NO ||
+
|max_call||Numero maximo de llamadas||
|-  
+
|-
| apellido1 || Número de columna del CSV que contiene el primer apellido|| NO ||
+
|max_channel||Numero maximo de canales||
|-  
+
|-
| apellido2 || Número de columna del CSV que contiene el segundo apellido || NO ||
+
|max_monitor||Numero maximo de grabaciones||
|-  
+
|-
| empresa || Número de columna del CSV que contiene la empresa || NO ||
+
|max_str_aux||||
|-  
+
|-
| direccion1 || Número de columna del CSV que contiene la dirección || NO ||
+
|puerto_escucha||Puesto escucha del demonio||
|-  
+
|-
| direccion2 || Número de columna del CSV que contiene la dirección 2 || NO ||
+
|link_id||||
|-  
+
|-
| codPostal || Número de columna del CSV que contiene el código postal || NO ||
+
|hay_vdn||Existen vdns||1 existen – o no existen
|-  
+
|-
| localidad || Número de columna del CSV que contiene la localidad || NO ||
+
|hay_usuarios||Existen usuarios||1 existen – o no existen
|-  
+
|-
| provin || Número de columna del CSV que contiene la provincia || NO ||
+
|clave||Clave usuario cti cifrada||
|-  
+
|-
| email || Número de columna del CSV que contiene el email || NO ||
+
|ip||Direcion de red de escucha del cti||
|-  
+
|-
| valFijo_1 || Número de columna del CSV que contiene el primer número fijo del contacto || SI ||
+
|msk||Mascara de red de escucha del cti||
|-  
+
|-
| valFijo_2 || Número de columna del CSV que contiene el segundo número fijo del contacto || NO ||
+
|makeCall_primero_dentro||||
|-  
+
|-
| valFijo_3 || Número de columna del CSV que contiene el tercer número fijo del contacto || NO ||
+
|makeCall_primero_fuera_agente_descuelga||||
|-  
+
|-
| valFijo_4 || Número de columna del CSV que contiene el cuarto número fijo del contacto || NO ||
+
|temporizador_makeCall||Tiempo maximo para realizar llamada||
|-  
+
|-
| valMovil_1 || Número de columna del CSV que contiene el primer número móvil del contacto || SI ||
+
|fmt_canal_exten||||
|-  
+
|-
| valMovil_2 || Número de columna del CSV que contiene el segundo número móvil del contacto || NO ||
+
|contexto_makeCall_primeroFuera||# contextos para llamadas salientes makeCall y makePredictiveCal||
|-
+
|-
| valMovil_3 || Número de columna del CSV que contiene el tercer número móvil del contacto || NO ||
+
|contexto_makeCall_primeroFueraDentro||# contextos para llamadas salientes makeCall y makePredictiveCal||
|-  
+
|-
| valMovil_4 || Número de columna del CSV que contiene el CUARTO número móvil del contacto || NO ||
+
|contexto_makeCall_primeroDentro||# contextos para llamadas salientes makeCall y makePredictiveCal||
|-
+
|-
| edad || Número de columna del CSV que contiene la edad || NO ||
+
|contexto_myAcdSuperv_ProgreFuera||# contextos para llamadas salientes desde myAcdSuperv||
|-  
+
|-
| nOpc1|| Número de columna del CSV que contiene dato numérico opcional || NO ||
+
|contexto_myAcdSuperv_ProgreDentro||# contextos para llamadas salientes desde myAcdSuperv||
|-  
+
|-
| nOpc2 || Número de columna del CSV que contiene dato numérico opcional || NO ||
+
|contexto_myAcdSuperv_PredicFuera||# contextos para llamadas salientes desde myAcdSuperv||
|-  
+
|-
| nOpc3 || Número de columna del CSV que contiene dato numérico opcional || NO ||
+
|contexto_myAcdSuperv_PredicDentro||# contextos para llamadas salientes desde myAcdSuperv||
|-  
+
|-
| nOpc4 || Número de columna del CSV que contiene dato numérico opcional || NO ||
+
|contexto_redirect||# contexto para transferencias||
|-  
+
|-
| nOpc5 || Número de columna del CSV que contiene dato numérico opcional || NO ||
+
|expr_esExtenLocal||# expresiones regulares. Se evaluan en el orden indicado||
|-  
+
|-
| nOpc6 || Número de columna del CSV que contiene dato numérico opcional || NO ||
+
|expr_esExtenInterna ||# expresiones regulares. Se evaluan en el orden indicado||
|-  
+
|-
| nOpc7 || Número de columna del CSV que contiene dato numérico opcional || NO ||
+
|expr_esCola||# expresiones regulares. Se evaluan en el orden indicado||
|-  
+
|-
| nOpc8 || Número de columna del CSV que contiene dato numérico opcional || NO ||
+
|expr_esPuntoDistribucion||# expresiones regulares. Se evaluan en el orden indicado||
|-  
 
| 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 ||
+
|expr_esPuntoEnrutamiento||# expresiones regulares. Se evaluan en el orden indicado||
 
|-
 
|-
|}
+
|expr_esNumPrivateLocal||# expresiones regulares. Se evaluan en el orden indicado||
 
+
|-
===== Funcionamiento =====
+
|expr_esNumPrivateUnknown||# expresiones regulares. Se evaluan en el orden indicado||
 
+
|-
Para ejecutar la utilidad se debe teclear la siguiente orden en la línea de comandos:
+
|expr_esNumPublicNational||# expresiones regulares. Se evaluan en el orden indicado||
 
+
|-
'''cmd# cargaContactos.pl /<ruta hasta el conf>/cargaContactos.pconf <archivo CSV>'''
+
|expr_esNumPublicInternational||# expresiones regulares. Se evaluan en el orden indicado||
 
+
|-
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.'''
+
|audit_hay_Call||||
 
+
|-
La utilidad crea un log en '''/var/log/cargaContactos.log''' en el que vuelca toda la operativa.
+
|audit_call_minutContestada||||
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.
+
|-
 
+
|audit_call_minutNoContestada||||
Un ejemplo de fichero de carga de contactos sería el siguiente:
+
|-
 +
|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'''
 +
 
 +
==== 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 '''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.  
 +
 
 +
 
 +
===== ¿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.  
# Configuracion de cargaContactos.pconf
+
 
#
+
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.
# Conexion de base de datos
+
 
$db='nimitz';
+
===== TFTP =====
$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';
 
  
====Comportamiento de reprogramaciones de llamadas en función del estado del agente====
+
'''TFTP''' son las siglas de '''T'''rivial '''F'''ile '''T'''ransfer '''P'''rotocol ''(Protocolo de transferencia de archivos trivial)''.
  
Se ha preparado la siguiente maqueta:
+
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.
  
Campaña saliente.
+
Algunos detalles del TFTP:
Cola saliente progresiva.
 
Dos agentes logados en VIVAit Suite.
 
  
En el formulario de la llamada se indica: llamada redirigida
+
* Utiliza UDP (puerto 69) como protocolo de transporte (a diferencia de FTP que utiliza los
Se selecciona el "check dirigida"
+
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”.
  
Las posibilidades de prueba son dos: "'''Cualquier agente'''" y "'''Solo agente'''"
+
===== Funcionamiento del servidor phoneprove-TFTP =====
  
Resultados son los siguientes:
+
A continuación se muestra un esquema que facilita el entendimiento del funcionamiento del servidor phoneprove-TFTP:
  
{| class="wikitable sortable"
+
[[Archivo:Funcionamiento_Servidor.png‎ |center]]
|-
 
| '''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.
 
|-
 
|}
 
  
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
+
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.  
  
=== Movilidad ===
+
Desde phoneprove-TFTP se generara los archivos necesarios para cada teléfono y que sirven para ser aprovisionados automáticamente.
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.
+
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.
  
==== 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]].
+
|
 +
  '''Nota:''' En instalaciones grandes habrá más de uno, quizás uno por sede grande; depende de la infraestructura de DHCP.
 +
|}
  
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]]
+
===== 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]]
  
'''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 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]].
  
<!--parte daniel-->
+
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 .
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? ====
 
  
Primeramente el usuario debe tener los ejes apropiados en la tabla '''COM_USUARIOS_APLICACION''' (aplicación centralita).
+
====== Parámetros de Aprovisionamiento globales ======
  
La extensión debe de tener ''un teléfono'' y por tanto ''un modelo de teléfono asociado.''
+
* Configuración de la red y MAC.
 +
* Zona horaria.  
  
Es tan simple como especificar '''la extensión, el usuario y la clave de este.'''
+
====== Parámetros de Aprovisionamiento Personales ======
  
Para corroborar el funcionamiento de esta hay ''dos métodos'':
+
Además de los parámetros de aprovisionamiento globales, el teléfono también obtendrá información de configuración individual, tales como:  
  
'''* CLI asterisk:'''
+
*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.
  
'''mdintz qry * nimitz bd extenEntraUsuarioMovil 25001 20001 1234'''
+
===== Aprovisionamiento de teléfonos nivel usuario =====
  
Y como resultado obtenemos lo siguiente:
+
{|
 +
|-
 +
|
 +
  '''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. 
 +
|}
  
mdintz Variables:<br/>
+
Los pasos a seguir son los siguientes:  
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
+
'''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]].
  
Ahora ''nos quitamos de esa extensión mediante el siguiente comando:''
+
'''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]].
  
'''mdintz qry * nimitz bd extenSaleUsuarioMovil 25001'''
+
'''3)''' Conectar el teléfono a la red LAN informática (conectarlo al router o switch) para que tenga acceso a Internet:
  
Resultado del comando:
+
:*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.
  
mdintz Variables:<br/>
+
'''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.
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
+
'''5)''' Asegúrese de que el teléfono encuentren el servidor TFTP, para ello esperar un tiempo adecuado para que termine el aprovisionamiento.
propietario.'''
 
  
Ahora las realizamos '''con extensiones sin movilidad'''
 
  
'''mdintz qry * nimitz bd extenEntraUsuarioMovil 25002 20001 1234'''
+
'''6)''' Finalmente aparecerá  como registrado en la centralita, obtendrá una dirección IP y podra funcionar según la configuración establecida.
  
Obteniendo:
+
{|
 +
|-
 +
 +
  '''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.
 +
|}
  
mdintz Variables:<br/>
+
===== Aprovisionamiento de teléfonos nivel técnico =====
MdintzIdentif='cms1'<br/>
 
MdintzRes='movil_error_datos'
 
  
Como era lo previsible no nos deja "movernos" a esa extensión ya que no tiene movilidad.
+
====== Plantilla de configuración ======
<!--
 
'''<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:
+
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.  
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>'''
+
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.  
  
'''mdintz qry * nimitz bd extenEntraUsuarioMovil 21000 20001 1234'''
+
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
  
Con salida:
+
====== Ficheros y paquetes necesarios ======
  
mdintz Variables:<br/>
+
'''Paquetes previos:''' libnet-tftpd-perl, tftp-hpa, libnet-address-ip-local-perl
MdintzIdentif='cms1'<br/>
+
'''Usuario de funcionamiento:''' root
MOVIL_EXTEN='25001'<br/>
 
MDintzRes='movil_ya_login'
 
  
'''* Dialplan'''
+
{|
 +
|-
 +
|
 +
  '''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.
 +
|}
  
Para llamar a la función de movilidad hay que marcar el '''9992.'''
+
'''Archivos necesarios:'''  
  
  Nota.- Para comprobar que se realiza todo correctamente habría que mirar las trazas de Asterisk
+
  /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
  
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
 
  
 +
'''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
 
+
#
=== Desvío por calendario ===
+
# 0: Solo alarmas en archivo log - 1: alarmas y trazas
 
+
$depurar = 1;
 
+
Se ha desarrollado una nueva funcionalidad para VIVAit Call que permite
+
# 0: Arranca como proceso - 1: arranca como demonio
establecer desvíos de extensiones y usuarios en base a una programación
+
$soyDemonio = 1;
horaria.
+
Una vez puesta en marcha esta funcionalidad , el orden de desvíos de usuarios o
+
# Archivo de log ('': salida estandar)
extensión en VIVAit Call será:
+
$logArch = '/var/log/phoneprov-tftp.log';
 
+
 
+
# Archivo para el pid
* Primero se atiende si el usuario o extensión tiene desvío incondicional a
+
$pidArch = '/var/run/phoneprov-tftp';
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).
 
 
 
 
 
 
 
 
 
 
 
[[Archivo:Captura de pantalla de 2022-11-16 07-58-38.png|center|900px]]
 
 
 
 
 
 
 
 
 
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).
+
# 0: El programa se ejecuta indefinidamente - 1: solo una vez (util en depuracion)
 
+
$unaVezSolo = 0;
 
+
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.
+
# Conexion de base de datos
 
+
$db='nimitz';
  '''Baikal se ubicará por defecto en el mismo nodo en el que se encuentre el portal de administración de VIVAit.'''
+
$dbHost = 'BDTR';
 
+
$dbPort = 3306;
 
+
$dbUsuario = 'nimitz';
 
+
$dbClave = 'ivivanimitz';
 
 
 
 
===== 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.
+
# Configuracion de la supervision
 +
$supPort = 1123;
 
   
 
   
* 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.
+
# Configuracion de servidor TFTP
 
+
#
 
+
# Los archivos estaticos no tienen variables. Se sirven sin modificar.
'''Si se instala Vivait 3.6 desde repositorio , habría que realizar los siguientes pasos en Mysql:'''
+
# Estan en el arbol de directorios a partir del indicado por '$dirEstatico'
 
+
#
'''Configuración de Mysql'''
+
# 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'.
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:
+
# Los archivos temporales con variables sustituidas estan en el arbol
 
+
# de directorios a partir del indicado por '$dirDinamico'.
  Baikal usa su propia base de datos (diferente a la de VIVAit)
+
# 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.
'''1.Configuración inicial Mysql'''
+
#
 
+
  $miDir = '';
 
+
$bindDir = '';
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.
+
$bindPuerto = 69;
 
+
$dirPlantilla = '/var/lib/phoneprov-tftp/plt';
  '''Acceder a Mysql y cambiar clave de root'''
+
$dirEstatico = '/var/lib/phoneprov-tftp/bin';
  -------------------------
+
$dirDinamico = '/tmp';
  mysql_secure_installation
+
$toRRQ = 10;
  mysql -u root -p
+
$toACK = 5;
  mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘ LACLAVEDEVIVAITPARAMYSQL ’;
+
$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';
  
*'''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
 
  
 +
*Los campos del fuchero de configuración y su significado se muestran en la su¡iguiente tabla:
  
 +
{| class="wikitable"
 +
|-
 +
!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||
 +
|-
 +
|}
 +
 +
==== Watchdog ====
  
'''A nivel de base de datos'''
+
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:
  
 +
{| class="wikitable" border="0" style="background:#ffffff" align="top"
 +
|-
 +
|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
  
[[Archivo:calendario1.png|center|700px]]
+
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
  
Donde:
+
Tiene un fichero de configuración ubicado en /etc/asterisk/MDcrash.conf
  
* '''MySQL host''' - Nombre del host de mysql.
+
{| class="wikitable" border="0" style="background:#ffffff" align="top"
* '''MySQL database name''' - Nombre de la base de datos creada.
+
|-
* '''MySQL username''' - Nombre de usuario de acceso.
+
|Sección [perro]
* '''MySQL password''' - Contraseña de acceso.
+
||activo=yes (Si esta o no activo)
 +
segs_dormir=1 (Un tick por segundo)
  
 +
segs_inic=60
  
 +
segs_guarda=30
  
'''En ajuste de sistema'''
+
max_errores=3 
 +
|-
 +
|Sección [sip_monitor_udp]
 +
||segs_inic=60
  
 +
segs_guarda=30 (Cada 30 segundos si no reciba trafico SIP genera core)
  
[[Archivo:calendario2.png|center|500px]]
+
max_errores=5 (Número máximo de errores)
 +
|-
 +
|}
  
Donde:
+
<!-- [[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]-->
  
+
==== Proceso de Backup ====
* '''Zona horaria''' – Seleccionar la región que corresponda (típicamente Europe/Madrid).
+
Las plataformas '''''VIVA'''''it Call y '''''VIVA'''''it Suite incluyen un script para realizar un proceso de backup.
 
* '''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.
+
Se utilizará el script '''backup.sh''', que se encuentra en el directorio '''etc/MDTel'''.
 
* '''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.
 
  
 +
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
  
'''Desde Baikal + Cliente Caldav'''
+
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'''.
  
La administración desde Baikal solo será necesaria en caso de no poder utilizar los frontales desarrollados para la gestión de la funcionalidad.
+
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.
  
Consideraciones relevantes:
+
Se guardarán 10 copias del fichero ''' backup.cfg '''
  
*Desde la administración de Baikal si podremos crear:
+
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||
 +
|-
 +
|}
  
- usuarios (en caso de la funcionalidad en VIVAit solo usuario único de VIVAit).
+
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.
  
- calendarios (existirá uno por extensión o usuario).
+
===== Información adicional: como funciona un cron =====
  
 +
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]
  
*Desde la administración de Baikal no podremos gestionar eventos de calendario; para ello deberemos usar un cliente CalDav (p. ej Thunderbird).
+
<br><br>
 +
==== MEET ====
  
 +
El esquema de conexión para el Meet es el siguiente:
  
'''Ejemplo de una consulta de intz-Nimitz a Baikal en los ficheros log:'''
+
[[File:Conexion.jpg|800px]]
  
  
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:
+
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]]
  
  
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:
+
Ficheros:  
  
 +
*El fichero config.json tiene la configuración necesaria para proporcionar el servicio.
  
  
[[Archivo:calendario5.png|center|700px]]
+
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)
  
2. En caso de no existir programación de desvío, devolverá vacío:
+
*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:
  
[[Archivo:captura6.png|center|700px]]
+
/var/log/janus.log
  
=== Grabación ===
 
  
La grabación en '''''VIVA'''''it Call está diseñada para ser lo mas flexible posible.
+
Los posibles problemas de conexión de los usuarios al portal habrá que analizarlos en la consola para analistas del  navegador.
  
====Configuración====
+
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 deseamos grabar, debemos activar que alguno de los dispositivos/elementos que intervienen en la llamada se grabe.
+
====Gran Hermano (GH)====
  
Estos dispositivos/elementos son:
+
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,…
  
* Nodo.
+
Esquema de instalación:
* 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á.
+
[[File:Gran hermano.png|800px |center]]
  
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.
+
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.
  
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.
+
===== 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:
  
''''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)
 
|}
 
 
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''''
 
 
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 [[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]].
 
 
 
''''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.
 
 
====Vivait Tracker====
 
<!--
 
::<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)
 
 
<!--
 
::<span style="background:#FFAA00"> DANIEL FIN EXPLICACIÓN. </span>
 
 
 
::<span style="background:#FFAA00"> DANIEL De la documentacion creada por ivan. </span>
 
-->
 
Esquematico actual del proyecto tracker
 
[[Archivo:Esquematico_tracker_1.jpg|center]]
 
 
 
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.
 
<!--
 
::<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]]
 
 
 
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).
+
{| class="wikitable"
 
+
|-
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.
+
!Campo!!Descripción
 
+
|-
[[#Grabación_(Vivait_Tracker)| Volver arriba]]
+
|soy_demonio || # 0: Arranca como proceso - 1: arranca como demonio
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operación_plataforma_VIVAit Volver al indice]]
+
|-
 
+
|hay_syslog || Si hay servidor de syslog
=== Enrutamiento ===
+
|-
 
+
|archivo_pid || # Archivo con identificador de proceso: (-: /var/run/vivait-cti.pid)
[[Archivo:Enrutamiento.png|885px |center]]
+
|-
 
+
|archivo_traza | |# Archivo_traza: (-: stdout o /var/log/vivait-cti.log si soy_demonio)
 
+
|-
==== Enfoque inicial ====
+
|nivel_traza || # Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
 
+
|-
[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Enfoque_inicial Acceso]
+
|pruebas ||
 
+
|-
==== Funcionamiento ====
+
|hay_flush_traza ||
El proceso de enrutamiento, como vimos en el esquemático, se compone de dos fases:
+
|-
 
+
|traza_milisegundos ||
# Preenrutameinto, que se encarga de tratar todas las llamadas
+
|-
# Enrutamiento externo, que tiene módulos dedicados al enrutamiento hacia:
+
|subsistema || # No se usa. No modificar
:*Enlaces externos.  
+
|-
:*Extensiones.
+
|num_msj || # Numero de mensajes. No modificar
:*Usuarios de telefonía corporativa.  
+
|-
:*Facilidades.
+
|num_buf || # Numero de buffer. No modificar
:*Salas de conferencia.
+
|-
:*Agentes de grupos ACD.
+
|puerto_escucha || Puesto escucha del demonio
:*Grupos ACD.
+
|-
:*Vdn.
+
|to_periodo || Timeout para reconectar
:*Buzones para dejar mensaje.
+
|-
:*Buzones para su gestión.
+
|hay_regexp ||
 
+
|-
Se asume que existen rutas directas entre todos los nodos de la red.
+
|num_entradas ||
 
+
|-
Se asume que están directamente enrutadas todas las direcciones IP involucradas, tanto nodos, como terminales.
+
|inc_entradas ||
 
+
|-
Se asume que todas las facilidades están disponibles en todos los nodos, aunque es posible que la implementación sea diferente entre ellos.
+
|max_entradas ||
 
+
|-
Los datos de entrada básicos al proceso de enrutamiento (pdEntr) son:
+
|hay_vic ||
* Dispositivo
+
|-
* Cola
+
|puerto_escucha || Puerto de escucha a nivel de VIVAit Call
* Origen
+
|-
* Nodo entrada
+
|identif ||
* UCID
+
|-
* CALLER_ID_NAME
+
|entorno || Nombre base de datos
* CALLER_ID_NUM
+
|-
* DNIS
+
|max_conx || Número máximo de conexiones a la base de datos
* Desvío por dialplan
+
|-
 
+
|to_solicitud || Timeout de solicitud
 
+
|-
A partir de los datos de entrada básicos anteriores se pueden deducir los siguientes valores:
+
|to_desconexion || Timeout de desconexión
* Sede del dispositivo de entrada
+
|-
* Sede del nodo de entrada
+
|ip || Dirección de red de escucha del intz-nimitz
* Ancho de banda disponible en la sede del dispositivo
+
|-
* Ancho de banda disponible en la sede del nodo
+
|msk || Mascara de red de escucha del intz-nimitz
* Categoría entrante
+
|-
* Valor del eje1 asignado a la llamadas
+
|ip || IP localhost
* CALLER_ID_NUM_EXTERNO
+
|-
 
+
|msk || mascara localhost
 
+
|-
Los datos de salida globales del proceso de enrutamiento (pdSale) son:
+
|hay_mysql || Hay mysql
* Categoría saliente
+
|-
* Código de cliente (opcional)
+
|host || IP o HOST maquina base de datos
* Tipo de destino:
+
|-
:* No existe
+
|usuario || Usuario acceso Base de datos
:* Ruta externa
+
|-
:* Extensión
+
|clave || Clave usuario acceso base de datos
:* Usuario de telefonía corporativa
+
|-
:* Facilidad
+
|base_datos||Nombre de la base de datos
:* Salas de conferencia
+
|-
:* Agentes de grupos ACD
+
|to_resp || Timeout de respuesta
:* Grupos ACD
+
|-
:* VDN
+
|hay_gh1 || Hay intz-gh
:* Buzón para dejar mensaje.
+
|-
:* Buzón para dejar mensaje por ocupado.
+
|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
:* Buzón para dejar mensaje por no contestación.
+
|-
:* Buzón para su gestión.
+
|exten_max_digi ||
* Destinatario (cuando se trata de un usuario o de un agente)
+
|-
* Valor del eje1 asignado a la llamada
+
|exten_max || # numero máximo de extensiones soportadas
* Buzón de las extensiones y usuarios que los tengan asignados
+
|-
* Si el buzón está en nodo distinto al de entrada
+
|enla_max || # numero máximo de enlaces soportados
* 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)
+
|retro_max || # numero máximo de retrollamadas activas concurrentes. '''Valor por defecto --> 50'''
* 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)
+
|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'''
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).
+
|to_retro_activo || # tiempo máximo en segs. que una retrollamada espera a que las extensiones estén libres. '''Valor por defecto --> 300'''
* 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).
+
|to_limpiar || # temporizador de limpieza de tablas en segs.
* 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.
+
|hay_ias ||
* 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. 
+
|url ||
* 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
+
|puerto ||
:* Extensión: cadena marcación.
+
|-
:* Facilidad: E_CODIGO_FACILIDAD obtenido de la tabla CEN_FACILIDADES.
+
|to_conx_cmd || # tiempo máximo en segs. para conectar con Asterisk para comandos
:* 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.
+
|to_lista_nodos || # periodo en horas para actualizar lista de id de nodos y sus direcciones ip
:* Ruta externa: contexto que gestiona la llamada saliente.
+
|}
  
=====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.
+
Para saber si GH funciona correctamente usaremos el comando '''nc localhost 1116''', obteniendo resultados similares a los siguientes:
  
Los datos de salida de la fase de preenrutamiento:
+
* intz-gh sis ver='00.01.00' inic='20181007 081237' alarmas=0 ultAlar='00000000 000000'
* D_CATEGORIA_SAL
+
* intz-gh gmp msj=252/256 buf=256/256 tarea=95/102
* COD_CLIENTE (opcional)
+
* intz-gh tmp uptime=86503 (1d 0h 1m 43s)
* TIPO_DESTINO_SAL
+
* intz-gh vic identif='gh_000' entorno='gh' conx=0/4 numConx=2349(7)
:* No existe.  
+
* intz-gh regExpr entr=32/32/1024 numRegExpr=0 consul=0(0)
:* Volver a preenrutar.  
+
* intz-gh ias nodos=3 cmd=11(0) cmdErr=0 tresp=0
:* Ruta externa. 
+
* intz-gh gh1 exten=9/500 enla=1/20 retro=0/0/50
:* Extensión. 
+
* intz-gh gh1 soli=2349(0) soliErr=0(0) soliEncol=0(0)
:* 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.
+
Los '''log's''' que genera el sistema se encuentran en: /var/log/intz-gh.log
  
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.
+
===== mdgh.conf y Mdintz.conf =====
  
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:  
+
Además existen dos ficheros de configuración de Asterisk: /etc/asterisk/'''mdgh.conf''':
* ID_CATEGORIA_ENT igual a la del dispositivo de entrada.  
+
   
* CALLER_NUM de entrada  
+
  [servicios]
:* 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.  
+
retro_hay=yes
:* 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.   
+
subscripcion_hay=yes
:* 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.   
+
[rest]
:* Debe cumplir la expresión regular C_ORIGEN_ENT_EXPR, si ésta no es NULL.  
+
rest_red_ip=172.25.126.21
* 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.   
+
  rest_red_msk=255.255.255.255
* 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.  
+
  rest_puerto_escucha=8090
* 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.  
+
  retro_exten_tech=SIP
* 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.  
+
  retro_contexto=Cen_InicioLlamada_GHRetro
* DNIS cumpla la expresión regular C_DESTINO_ENT_EXPR, si ésta no es NULL.
+
  retro_to_descolgar=30
 +
retro_A_cartel_fmt=retro: %s
  
Si no se encuentra ninguna entrada adecuada, quiere decir que es una llamada prohibida y se devuelve el tipo de destino "No existe".
+
Y /etc/asterisk/'''Mdintz.conf'''
  
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.
+
[gh]
 +
host0=BDTR
 +
port0=5556
 +
toConx=5
 +
toRx=10
  
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.
+
Los campos de los ficheros y su significado son los siguientes:
  
Si ID_CATEGORIA_SAL es cero, se propaga a la salida el valor de la entrada. En caso contrario, se sustituye.
+
{| 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
 +
|}
  
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:
+
{| class="wikitable"
* "=" 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.
+
!Campo!!Descripción
* "-" 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.
+
|host0 || Base de datos de tiempo real
* cualquier otro valor del primer carácter determina que es una constante que sustituye el valor a la entrada.
+
|-
 +
|port0 || Puerto de escucha
 +
|}
  
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 comando para conocer el estado de los diferentes elementos en Asterisk es:
  
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.
+
'''mdgh show
Con este mecanismo de N_CONTA y N_UMBRAL, se pretende facilitar el discriminar a los llamantes reincidentes, cuando sea necesario.
+
Uso: mdgh show [config | exten <exten_num> | enla <peer>]]'''
  
Un proceso periódico externo debe encargarse de poner a cero o decrementar el valor de N_CONTA.
+
Por ejemplo:
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:
+
'''mdgh show exten 6140'''
* "=" 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.
+
:* 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
  
===== Fase de enrutamiento en casos en que el destino no es externo =====
+
'''mdgh show enla Trunk_MDtel'''
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).
+
* mdgh Datos del enlace Trunk_MDtel:
 +
:* Datos en intz-gh:
 +
:* INUSE=0
 +
:* RINGING=0
 +
:* TS=1538978766
 +
:* HACE=461
  
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.  
+
El fichero de logs es el:
 +
/var/log/intz-gh.log
  
En el resto de tipos de destino, sólo se prevé una ruta que puede incluir o no un enlace internodal.
 
  
 +
===== Retrollamadas =====
  
 +
El funcionamiento será el siguiente:
  
===== Fase de enrutamiento en el caso de destino externo =====
+
*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.
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:  
+
*El número llamado "B" podrá ser derivado de varias causas:
* 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.  
+
::"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"  
 +
::...
  
Una vez que un registro es válido, se descartan todos los registros cuyo C_DESTINO_ENT_PREF es diferente del primero seleccionado.
+
*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--> )
  
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.
+
'''Solo podremos programar la retrollamada si el sistema devuelve: extensión ocupada o no contesta'''
  
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:
+
Estas dos últimas casuísticas son iguales a efectos de usuario, pero no a efectos internos...
* "=" 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.
+
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
  
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.
 
  
  
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
+
====== <big>Acuerdos de funcionamiento</big> ======
  
=== Control de ancho de banda ===
+
*Un origen A solo tendrá programa una retrollamada a un destino B; si teniendo una programada decide programar otra, la primera se pierde.
  
Para el control de ancho de banda, primero hemos de tener en consideración que una llamada puede tener asociadas hasta cuatro sedes
+
*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.
:* Sede del terminal origen (terminal A)
+
 
:* Sede del nodo de registro del terminal origen (nodo A)
+
*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)
:* 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:
+
====== <big>Cuestiones</big> ======
  
{| class="wikitable"  
+
*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.
|-
 
! 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:
+
*Si salta al buzón no puede haber retrollamada.
:* '''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
+
==== GeneraConf ====
  
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
+
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.
  
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
+
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.
  
=== MDflow ===
+
GeneraConf lee de la tabla Dat_Sincroniza, genera los ficheros de configuración y los coloca en su sitio.
  
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).
+
===== Fichero de configuración =====
  
Los términos que usaremos para la explicación de la funcionalidad y que son relevantes
+
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.
para comprender, implantar, mantener e interpretar la misma son:
 
  
 +
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:
  
  
* '''Nodo VIVAit''': Un nodo VIVAit es cualquier elemento dado de alta en el sistema
+
[[File:URL de sincronizacion.jpg]]
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
+
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:
  
* '''TIC''': Unidad básica de medida de tiempo de md flow; por defecto el valor es
+
*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.
500ms; nótese que los valores devueltos por el sistema siempre estarán medidos
+
*Si se indica con valor 20 (alcanceSincroniza=20), se sincroniza solo el entorno de Alertas.
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
+
A tal efecto se ha creado el siguiente enumerado:
establecerse por nodo VIVAit.
 
  
* '''Medición:''' Capacidad de md flow para determinar el número de llamadas por
+
public enum TAlcanceSincroniza  {
segundo que se están estableciendo en un determinado flujo. Nótese que no se
+
        ALCANCESSINC_VIVAITCALL("10"),
hace referencia a duración de las mismas o medición de llamadas previamente
+
        ALCANCESSINC_ALERTAS("20");
establecidas
+
       
 +
        private TAlcanceSincroniza(String text) {
 +
            this.text = text;
 +
        }  
 +
        private final String text;  
 +
        @Override
 +
        public String toString() {
 +
            return text;
 +
        }
 +
    }
  
* '''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
+
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.
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
+
Nuevo fichero /etc/MDtel/generaConf.properties :
  
* '''Congestión''': Estado del nodo VIVAit cuando se sobrepasa una determinada tasa
+
root@Homologacion-Corp1:~# cat /etc/MDtel/generaConf.properties
de llamadas por segundo; el mecanismo md flow entrará en funcionamiento cuando
+
el sistema entre en estado de congestión.
+
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
  
* '''Llamada desbordada:''' Llamada que en el tratamiento de la congestión se
+
El valor 1 indica que GeneraConf simula el fichero asociado, cuando el valor es “0” no se genera la simulación.
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
+
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.
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:
+
===== Ficheros de logs =====
  
- Solo medir . En este caso md flow se encontrará en paso.
+
El fichero con los log’s generado se encuentra en /var/log/Tomcat.x/generaConf.log.
  
- 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.
+
==== Nodo WebRTC ====
  
 +
Se adjunta la documentación del nodo WebRTC:
  
  
 +
<big>'''[[:medio:DOCUMENTO_WEBRTC_v9.pdf| Manual de instalación y operación del nodo WebRTC ]]'''</big>
  
  
 +
La arquitectura de WebRTC en VIVAit Call es la  siguiente:
  
La aplicación está diseñada para '''controlar el flujo de llamadas entrantes''' → '''El sistema cuenta llamadas en cada periodo TIC.'''
 
  
El módulo permite difinir distintas cajas de medida y control ('''FLUJO''').
 
  
Se pueden definir n cajas y ubicarlas en Asterisk (por ejemplo en un enlace externo, una caja que agrupe todos los enlaces, en los enlaces interiores y en extensiones).
 
  
Cada una de las cajas, o flujos, mide y controla la tasa de llamadas en cada TIC → Se mostrará en llamadas/segundo.
 
  
El '''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.
+
[[File:webrtc.png|900px|center]]
  
El '''FLUJO'''permite 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).
+
Componentes Principales:
  
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.
+
{| 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.
  
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.
+
=== Requerimientos de conectividad ===
  
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...
+
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)
  
 +
[[Archivo:Flujos corporativa.png|cebter]]
  
Mdflow se invoca dentro del dialplan del sistema. Por
+
En el entorno de <big>'''Contact Center'''</big>, encontramos los siguientes flujos <big>'''entre servicios'''</big> (comunicaciones entre servidores, ('''''VIVA'''''it Suite))
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.
 
  
 +
[[Archivo:Flujos Contact servicios.png|650px|center]]
  
 +
y <big>'''entre usuarios y servicios'''</big> los reflejados a continuación:
  
[[Archivo:mdflow.png|885px |center]]
+
[[Archivo:Flujos Contact puestos.png|600px|center]]
  
Como se puede apreciar en el diagrama de flujo:
+
{| class="wikitable"
 +
|-
 +
!Lado A!!Lado B!!Puertos!!Sentido!!Observ.
 +
|-
 +
|Terminal telefónico||Servidor||TCP 5060||A -> B||Señalización SIP
 +
|-
 +
|Terminal telefónico||Servidor||UDP 5060||A -> B||Señalización SIP
 +
|-
 +
|Terminal telefónico||Servidor||10000 a 20000||A -> B
 +
B -> A
 +
||RTP
 +
|-
 +
|Terminal telefónico||Servidor TFTP||UDP 69||A -> B
 +
B -> A
 +
||Para actualización de terminales por TFTP
 +
|-
 +
|Terminal telefónico||Servidor NTP||UDP 123||A -> B||
 +
|-
 +
|'''''VIVA'''''it Desk||Servidor||TCP 4500||A -> B||Comunicación CTI
 +
|-
 +
|'''''VIVA'''''it Desk||Servidor||TCP 3306||A -> B||Acceso a Mysql Base de datos
 +
|-
 +
|'''''VIVA'''''it Desk||Servidor Syslog||UDP 514||A -> B||Para envio de logs de agente
 +
|-
 +
|'''''VIVA'''''it Supervisor||Servidor||TCP 3306||A -> B||Acceso a Mysql Base de datos
 +
|-
 +
|'''''VIVA'''''it Tracker||Servidor||TCP 3306||A -> B||Acceso a Mysql Base de datos
 +
|-
 +
|'''''VIVA'''''it Tracker||Servidor||TCP 8180||A -> B||
 +
|-
 +
|Actualizador||Servidor||TCP 80||A -> B||Necesario para actualizaciones de versiones de aplicaciones de agente y supervisores
 +
|-
 +
|Portal de administración||Servidor||TCP 8180||A -> B||Acceso al portal de administración '''''VIVA'''''it Suite
 +
|-
 +
|'''''VIVA'''''it Tracker Web||Servidor||TCP 8180||A -> B||
 +
|-
 +
|Monitor||Servidor||TCP 8180||A -> B||Wallboard
 +
|-
 +
|Monitorización||Servidor||TCP 80||A -> B||Acceso a portal monitorización (Zabbix)
 +
|-
 +
|}
  
*mdflow siempre cuenta las llamadas para establecer la tasa de llamadas por segundo.
+
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
  
* Solo hace control de flujo si no está en paso.
+
=== Gateways ===
 +
El concepto de gateway como tal no existe en la plataforma '''''VIVA'''''it; existen nodos de ACD y nodos de corporativa.
  
* Solo hace control de flujo si hay congestión (tasa de llamadas por segundo superior a la máxima configurada).
+
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
  
* Estando en congestión:
+
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
  
'''- Si entra una llamada nueva'''
+
Para verificar los enlaces establecidos ejecutamos el siguiente comando en el terminal: '''sip show peers'''  
  
Y existe otra encolada para el DNIS se encola en dicha cola.
+
Al ejecutar este comando obtenemos la salida:
  
Y no existe cola para el DNIS se crea la cola y encola SI quedan colas disponibles.
+
[[Archivo:Enlace_Exterior.png |center]]
  
Si no quedan colas disponibles la llamada sale con etiqueta “agujero”.
+
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:
  
'''- Al respecto de colas'''
 
  
Una cola se crea cuando hay una llamada con un DNIS no encolado y si existen aún colas disponibles.
+
[[Archivo:Ejemplo_no_conexion.png |center]]
  
Una cola se libera de un DNIS cuando no quedan llamadas en cola para ese DNIS.
+
<!--
 +
<span style="background:#00FF00">FALTA AQUI DIAGNOSTICOS Y OPERACIONES DE ENLACES EXTERNOS</span>
 +
-->
  
Las colas no tienen una profundidad máxima.
+
===  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:
  
Las colas tienen un tiempo de permanencia.
+
*$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.
  
Las llamadas se van atendiendo equitativamente en cada cola, todas tienen el mismo peso, saliendo con etiqueta “Ok”
+
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.
  
 +
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
  
'''- Al respecto de llamadas'''
+
=== 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”.
  
Una llamada se saca de la cola con etiqueta “desborda” si pasa el máximo tiempo configurado en cola
+
==== Formato de fichero de intercambio para '''''VIVA'''''it Reporting ====
 
+
{| class="wikitable"
 
+
|-
'''- Si se produce un error en el sistema las llamadas podrán salir con etiqueta “error”.
+
! 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
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
+
| 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
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
+
| colspan="3"|  Salida
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
+
| FIC_extension || Extensión de fichero de salida: PDF, XLSX, CSV || PDF
por realizar un buen dimensionamiento del máximo de colas (que debiera ser muy
+
|-
parecido al número de DNIS masivos)
+
| 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\
 +
|-
 +
| colspan="3"|  Plantilla
 +
|-
 +
| INF_modelo || Ruta del fichero de plantilla || C:\Modelos\llamadas.rep
 +
|-
 +
| INF_descripción || Descripción del informe || Informe detallado de llamadas
 +
|-
 +
| colspan="3"|  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 ||
 +
|-
 +
| colspan="3"|  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:
 +
{| class="wikitable"
 +
|-
 +
| SQL_selec=(DAT_ACUMULADOS_COLAS.ID_COLA in (11))
  
 +
SQL_select_leido=Skill igual a 60310
  
 +
SQL_orden=
 +
FIC_extension=pdf
  
[[Archivo:mdflow2.png|655px |center]]
+
FIC_tipo_entrega=P
  
 +
FIC_destino=C:\
  
 +
INF_modelo=skill_setsi.rep
  
 +
INF_descripcion=Skill. SETSI
  
 +
BD_ip=172.25.1.2
  
==== Proceso de instalación de mdflow en una instalación existente; → como se "añade" mdflow en un VIVAit existente ====
+
BD_puerto=3306
   
 
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
+
BD_base_datos=nimitz
  
Para que el asterisk cargue el nuevo módulo entrarems en la consola de asterisk (asterisk -r) y ejecutaremos '''module load app_mdflow.so'''
+
BD_usuario=nimitz
  
 +
BD_clave=UIk5jNY9PVX5ogg=
  
 +
PAR_desde_vis=-
  
==== Parámetros de configuración ====
+
PAR_hasta_vis=-
  
 +
PAR_01=
 +
|}
  
  
*'''Parámetros generales'''
+
==== 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
  
'''- tick_ms:''' duración de un TIC.
+
<!--
 +
===== Agente,asistencia diaria y agente. Asistencia diaria del grupo =====
  
'''- estad_interv_seg:''' define intervalo de medida, si bien las informaciones siempre las proporcionará en tasa de llamadas/s.
+
'''• 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 =====
  
*'''Parámetros por flujo'''
+
'''• 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 =====
  
'''-Flujo:''' nombre del flujo (solo para la salida de estadísticas); no conecta con nada en dialplan o similar.
+
'''• Tiempo con personal:''' Tiempo que ha estado conectado el agente.<br/>
 
+
'''• Tiempo ACD:''' Tiempo de conversación ACD de las llamadas contestadas
'''-En_paso:''' (0 o 1); si está a 1 solo mide, siempre devuelve OK; si “en_paso” es 0 hay control de flujo.
+
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.
  
'''-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”.
+
===== Agente. Grupo ACD diario =====
  
'''-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.'''
+
'''• 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.
  
'''-to_desborda_seg:''' Tiempo máximo en cola de una llamada; pasado el tiempo sale
+
===== Grupo ACD. Reporte diario con AHT =====
con "desborda"
 
 
 
 
 
 
 
==== Fichero de configuración ====
 
  
 +
'''• 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/>
  
El fichero de configuración se ubica en '''/etc/Asterisk/MDflow.conf''' ; su contenido por defecto es el
+
===== Grupo ACD. QOS  =====
siguiente:
 
  
 +
'''• 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) =====
  
[general]
+
'''•Entrantes al grupo ACD:''' Número de llamadas ofrecidas al grupo
; Periodo de tiempo para medidas de tasa de llamadas
+
ACD(Contestadas+ Abandonadas+ Desbordadas).<br/>
tick_ms=500
+
'''•Llamadas contestadas:''' Número de llamadas contestadas por un agente.<br/>
; Periodo de tiempo para calculos estadísticos
+
'''•Contestadas NDS:''' Número de llamadas contestadas en nivel de servicio,
estad_interv_seg=10
+
tiempo de respuesta< 20 segundos.<br/>
; Máximo 9 flujos ([flujo_1] a [flujo_9])
+
'''•Abandonadas:''' Número de llamadas abandonadas, colgadas por el cliente
; Tiene que empezar en [flujo_1] y ser correlativos
+
antes de ser contestadas por un agente o desbordadas.<br/>
[flujo_1]
+
'''•Desconectadas:''' Número de llamadas desbordadas que fueron colgadas al
; Nombre asignado al flujo. Se usa en las salidas de los comandos
+
salir del grupo ACD.<br/>
flujo=Cen_Inicio_SIP
+
'''•Desbordadas:''' Número total de llamadas desbordadas (incluye desconectadas)<br/>
; "En paso"
+
'''•Llamadas retenidas:''' Número de retenciones que el agente realizó sobre las
; 1: No se controla el flujo (siempre etiqueta OK), sólo se mide
+
llamadas ACD contestadas.<br/>
; 0: Se controla la tasa de llamadas y se hacen medidas
+
'''•% N.A.:''' (Llamadas contestadas/(Llamadas contestadas+ Abandonadas+
en_paso=0
+
Desbordadas))* 100.<br/>
; Tasa máxima de llamadas (expresada en llamadas/seg) que etiquetadas OK
+
'''•% N.D.S.:''' (Contestadas NDS/(Llamadas contestadas+ Abandonadas + Desbordadas))*100<br/>
; Para un tick de 500 ms, este valor debe ser par
+
'''•% Abandonadas:''' (Abandonadas/(Llamadas contestadas+ Abandonadas+ Desbordadas))* 100.<br/>
tasa_sal_seg=4
+
'''•Acum. RING:''' Tiempo de ring en llamadas ACD(entrantes).<br/>
; Número máximo de dnis a encolar. Resto se etiquetan como AGUJERO
+
'''•ACDTIME:''' Tiempo de conversación ACD de las llamadas contestadas o
dnis_max=2
+
realizadas por el agente excluido el tiempo de retención de un grupo ACD.<br/>
; Umbral para el número de llamadas encoladas en un dnis, que hace que
+
'''•Acum. ACW:''' Tiempo dedicado por el agente a tareas administrativas tras
; éste sea calificado como "masivo"
+
finalizar las llamadas.<br/>
; El valor mínimo es 2
+
'''•Acum HOLD:''' Tiempo que las llamadas contestadas ACD estuvieron retenidas
dnis_umbral_masivo=8
+
por el agente.<br/>
; Límite de tiempo en segundos, transcurrido el cuál se etiqueta DESBORDA
+
'''•Acum. OTHER:''' Tiempo total que las llamadas estuvieron esperando en el
to_desborda_seg=5
+
grupo ACD antes de ser atendidas.<br/>
[flujo_2]
+
'''•Acum. AVAIL:''' Acum. STAFF- (ACDTIME+ Acum. ACW+ Acum. RING+ Acum.
flujo=Cen_Inicio_TrunkSip
+
HOLD+ Acum. AUX).<br/>
en_paso=1
+
'''•Acum. Staff:''' Suma del Tiempo conectado de todos los agentes al grupo
tasa_sal_seg=20
+
ACD(Este tiempo se repercute en todos los grupos ACD a los que esta
dnis_max=100
+
conectado el agente).<br/>
dnis_umbral_masivo=10
+
'''•Acum. AUX:''' Suma del Tiempo en pausa de todos los agentes que estén
to_desborda_seg=5
+
conectados al grupo ACD(Este tiempo se repercute en todos los grupos ACD a
[flujo_3]
+
los que esta conectado el agente).<br/>
flujo=Cen_TrunkInternos
+
'''•Prom. ACD:''' ACDTIME/Llamadas contestadas.<br/>
en_paso=1
+
'''•Prom. ACW:''' Acum. ACW/Llamadas contestadas.<br/>
tasa_sal_seg=20
+
'''•Prom. HOLD:''' Acum. HOLD/Llamadas retenidas.<br/>
dnis_max=100
+
'''•AHT:''' (ACDTIME+ Acum. ACW+ Acum. HOLD)/Llamadas contestadas.<br/>
dnis_umbral_masivo=10
+
'''•Vel. prom. de resp.:''' Tiempo total de espera de llamadas antes de ser
to_desborda_seg=5
+
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.
 +
-->
  
==== Ejemplo claro de invocación de mdflow desde dialplan y posterior tratamiento en función de las etiquetas de salida ====
+
===== Consideraciones adicionales =====
  
Por defecto el MDflow se pondrá en los siguientes ficheros de Asterisk:  
+
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.
* ext_InicioLlamada_ExtSIP.conf  
+
 
* ext_InicioLlamada_TrunkSIP.conf  
+
''* Ejemplo:''
* ext_TrunkInternos.conf
+
 
ya que son los diferentes contextos de entrada de llamadas.
+
-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.
  
;--------------------------------------------------------------------------------
 
[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'''
 
  
+
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
[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)'''
 
  
 +
== Otros Diagnósticos y operaciones básicas ==
 +
=== 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
  
==== Comandos básicos de diagnóstico ====
 
  
  Comandos básicos (dentro de la consola asterisk)
+
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
  
*'''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
+
Al respecto del orden de apagado de nodos, es el siguiente:
+
# En primer lugar se apagarán, en cualquier orden, los nodos que NO CONTENGAN bases de datos de tiempo real ni bases de datos de réplica
mdflow Estadística global:
+
# Una vez apagados totalmente todos los nodos del punto 1, apagaremos el nodo (o nodos) con bases de datos de réplica
  activo=1
+
# Una vez apagados totalmente todos los nodos del punto 2, se apagará el nodo con la base de datos de tiempo real
  supervEjecutando=1
 
  tickMs=500
 
  estadIntervSeg=10
 
  flowNum=3
 
  
mdflow flujo=[flujo_1]/Cen_Inicio_TrunkSip:
+
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
  flowInd=1 enPaso=0
+
<!--
  flowInd=1 tasaUltIntervMs=10003
+
=== Nivel matriz de conmutación ===
  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:
+
=== Grabación ===
  flowInd=2 enPaso=1
+
 
  flowInd=2 tasaUltIntervMs=10003
+
==== Configuración de la grabación en la plataforma corporativa ====
  flowInd=2 tasaUltEntra=0
+
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:
  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:
+
* El nodo, es decir todo lo que el nodo enrute
  flowInd=3 enPaso=0
+
* Prerutas
  flowInd=3 tasaUltIntervMs=10003
+
* Objetos: que son las extensiones, usuarios, grupos corporativos, etc.
  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
+
Tenemos tres formas de grabar:
  
Preproduccion-Corp0*CLI> mdflow show dnis
+
* Grabar con beep periódico
 +
* Grabar sin beep periódico
 +
* Descartar grabación
  
mdflow Estado global:
+
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.
  activo=1
 
  supervEjecutando=1
 
  tickMs=500
 
  estadIntervSeg=10
 
  flowNum=3
 
  
mdflow flujo=[flujo_1]/Cen_Inicio_TrunkSip:
+
Al igual pasa si tenemos que un elemento tenga descartar la grabación. La grabación no se inicia.
  flowInd=1 enPaso=0
 
  flowInd=1 dnisColaNum=1 no se controlan dnis
 
  
mdflow flujo=[flujo_2]/Cen_Inicio_SIP:
+
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.
  flowInd=2 enPaso=1
 
  flowInd=2 dnisColaNum=2
 
  flowInd=2 dnisUltMasivoMax=0
 
  
mdflow flujo=[flujo_3]/Cen_TrunkInternos:
+
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.
  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
+
==== Como configurar la grabación bajo demanda ====
  
mdflow Configuración global:
+
Para activar la grabación bajo demanda es necesario activar el '''MixMonitor'''.
  activo=1
+
 
  supervEjecutando=1
+
En el Nodo hay que identificar '''Grabar por enrutamiento''' = '''Sin grabación'''.
  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:
+
[[File:Ejemplo activacion grabacion en nodo CORP-2.jpg|centro]]
  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
 
  
 +
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'''.
  
*'''mdflow debug:''' Muestra estadísticas por pantalla a intervalos regulares; no se
 
recomienda su uso sistemático.
 
  
Preproduccion-Corp0*CLI> mdflow debug
 
  
==== 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.
+
[[File:NODO ACD-2.jpg|centro]]
  
  
  
==== Asignación de flujos ====
+
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'''.
  
  
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.
+
[[File:MODO DE GRABACION EN CAMPAÑA-2.jpg|centro]]
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
 
  
  
 +
El formulario de '''''VIVA'''''it  Desk que se abra cuando entre la llamada que queremos grabar ha de tener los botones de grabación.
  
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.
 
  
 +
[[File:Ejemplo de formulario con botones de grabacion.jpg|centro]]
  
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
+
Trazas '''''VIVA'''''it  Desk:
proveedores externos en los nodos de procesamiento, etc.
 
  
 +
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'''.
  
==== Configuración de cola única ====
 
  
 +
'''<big><sup><big>'''**'''</big></sup> Hemos visto que la grabación Bajo demanda en los Grupos ACD si funciona.</big>'''
  
La configuración de colas es útil cuando el número de DNIS es finito y queremos priorizar
+
Para activarla hay que entrar en la configuración del Grupo ACD que queremos grabar y activar la grabación por enrutamiento:
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,
+
[[File:cap_1.jpg|600px]]
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
+
Además indicamos en el modo de grabación: Grabación bajo demanda inicio sin grabar.
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 ====
 
  
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))
+
[[File:cap_2.jpg|600px]]
  
  
 +
En la consola vemos los siguientes datos:
  
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
 
  
=== Estadísticas en '''''<span style="color:#144F9B">VIVA</span>'''''it Call ===
+
[[File:cap_3.jpg|600px]]
  
[[:medio:Estadisticas_VIVAIT_ Call.pdf|Como configurar estadísticas para '''''VIVA'''''it Call ]]
+
==== 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.
  
=== Desvío por calendario ===
+
==== 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"
 +
|-
 +
| root@smadavacdrecord1:~# nc localhost 1114
 +
recordCentral SIS ver='01.2' inic='20140423 094058' alarmas=11041 ultAlar='20140423
 +
160112'
  
 +
recordCentral MYSQL cnx=1
  
El uso desde el portal de administración de VIVAit pasa por:
+
recordCentral NAS llamadas=1 segmentos=1
  
 +
recordCenral REC llamNum=24901 llamErr=0 segmNum=38906 segmErr=0 retraso=305
  
'''Crear la conexión entre VIVA it y Baikal'''
+
'''recordCentral NODO fase=0 cuarentena='' descarga='8,6,4,7,10,9' gestion='4,6,7,8,9,10''''
 +
|}
  
Tener correctamente configurado en la tabla WEB_CONFIGURACION el usuario y clave de labase de datos de Baikal; esto permitirá configurar Baikal (usuario, calendarios…) sin tener que acceder a su interfaz de administración.
+
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.
  
Se configura:
+
==== 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.
  
* Host
+
==== Comprobar que un nodo está subiendo archivos de grabación al servidor ====
* Puerto (defecto 3306)
+
Debemos fijarnos en la linea de respuesta del comando '''''nc ip_maquina 1114''''', que seria:
* Driver con el que se conecta (Mysql)
 
* Usuario de BBDD Baikal
 
* Clave de BBDD Baikal
 
  
 +
{| class="wikitable"
 +
|-
 +
| root@smadavacdrecord1:~# nc localhost 1114
 +
recordCentral SIS ver='01.2' inic='20140423 094058' alarmas=11041 ultAlar='20140423
 +
160112'
  
'''Crear usuario de Baikal en VIVA it'''
+
recordCentral MYSQL cnx=1
  
 +
recordCentral NAS llamadas=1 segmentos=1
  
Para ello, en la pestaña (General / Configuración común) del portal de administración de VIVA it realizaremos la configuración de calendarios de desvíos:
+
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''''
 +
|}
  
[[Archivo:calendario7.png|800px|center]]
+
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"
 +
|-
 +
| root@smadavacdrecord1:~# nc localhost 1114
 +
recordCentral SIS ver='01.2' inic='20140423 094058' alarmas=11041 ultAlar='20140423
 +
160112'
  
Donde:
+
recordCentral MYSQL cnx=1
  
* '''Url''' – La URL es donde está el servidor de calendarios
+
recordCentral NAS llamadas=1 segmentos=1
* '''Protocolo''' – baikal usa el protocolo caldav
 
* '''Usuario''' – Usuario creado en Baikal
 
* '''Clave''' – Contraseña del usuario creado
 
  
 +
recordCenral REC llamNum=24901 llamErr=0 segmNum=38906 segmErr=0 retraso=305
  
'''Configurar extensiones o usuarios'''
+
'''recordCentral NODO fase=0 cuarentena='' descarga='8,6,4,7,10,9' gestion='4,6,7,8,9,10''''
 +
|}
  
Tanto en extensiones como en usuarios desde la ventana correspondiente podremos configurar:
+
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. ====
  
* Si una extensión o usuario usan desvío programado (desvío incondicional por calendario); por defecto NO estará activado y deberá activarse solo en aquellos usuarios o extensiones en los que sea necesario; esto es importante para proteger la capacidad del sistema:
+
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
  
[[Archivo:calendario8.png|800px|center]]
+
|}
  
 +
Nos fijaríamos en la línea marcada en negrita, el campo "Use%" indicara el porcentaje de almacenamiento temporal de grabaciones en un nodo.
  
 +
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
  
* Al posicionar el cursor sobre el campo “Desvío incondicional por calendario:”, el sistema crea automáticamente un calendario (que comienza por USU para el caso de usuarios y por EXT en el caso de extensiones) que será el asociado al usuario o extensión y pulsando sobre el botón accederemos a dicho calendario.
+
===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 ====
 +
{|
 +
|-
 +
|
 +
'''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>)
  
[[Archivo:calendario9.png|700px|center]]
+
|}
 +
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})
 +
|}
  
Seleccionando un día (pulsando sobre el), y pulsando de nuevo saldrán opciones para crear un nuevo evento. El formulario que aparece tiene los siguientes campos:
+
====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 '''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>
 +
|}
  
- El campo “Asunto” describe el evento.
+
*Paso 2.Llamar a CallSpy con la configuración deseada.
- El campo “Destino” es hacía donde se quiera desvíar la llamada.
+
{|
- El campo “Descripción” no se contempla.
+
|-
 +
|
 +
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
 +
|}
 +
 
 +
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
 +
 
 +
=== Calendarios ===
 +
 
 +
{| 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.
  
 +
Se adjunta un manual para su instalación:
  
[[Archivo:calendario10.png|400px|center]]
 
  
  
 +
<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>
  
En esta ventana tendremos como opciones:
 
  
* Programar el evento como repetitivo, botón “Repetir”
 
* Programar el evento para todo el día, botón “Todo el día”
 
* Disponer de componente gráfico para programación de intervalos
 
  
  
  
[[Archivo:calendario11.png|400px|center]]
 
  
=== Multiterminal ===
 
<br><br>
 
==== Arquitectura del nodo WebRTC ====
 
<br><br>
 
[[File:webrtc.png |900px]]
 
<br><br>
 
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
 
<br><br>
 
==== Arquitectura del nodo STG ====
 
<br><br>
 
[[File:Arquitectura nodo STG.png |900px]]
 
<br><br>
 
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
 
<br><br>
 
==== Arquitectura de Multiterminal ====
 
<br><br>
 
[[File:multiterminal.png|900px|center]]
 
<br><br>
 
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
 
<br><br>
 
==== Configuración de Multiterminal ====
 
<br><br>
 
El uso desde el portal de administración de VIVAit para configurar la funcionalidad de multiterminal pasa por:
 
<br><br>
 
•      '''A nivel de usuario →''' Si el webcall es multidispositivo o sustitutivo.
 
  
•      '''A nivel de extensión →''' varios teléfonos por extensión.
+
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: [[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Calendarios |Calendarios]]
  
•      '''A nivel de teléfono →''' definir orden y posición (puede haber posición 0 y posición 2 sin que exista una posición 1).
+
http://${NODO.HOST}/dav/html/cal.php/calendars/${DAV.CUENTA}/${DAV.CALENDARIO}
  
•      '''Controlar que si webcall es de pool no puede ser multidispositivo.'''
+
donde,
Para configurar la funcionalidad a nivel de usuario, hay que acceder a la pestaña General > Administrar usuarios, seleccionar un usuario y pulsar la pestaña Centralita
 
  
 +
* '''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
  
Para configurar la funcionalidad a nivel de usuario, hay que acceder a la pestaña '''General > Usuarios > Administrar usuarios''', seleccionar un usuario y pulsar la pestaña Centralita
+
Una vez que se carga la url sabremos que el servidor funciona correctamente si visualizamos lo siguiente:
  
En la pestaña Centralita se encuentran las opciones de configuración, que son:
+
[[Archivo:Captura de pantalla de 2016-07-21 12_43_58.png || 1020px|center]]
<br><br>
 
[[File:multiterminal-adm1.png|600px|center]]
 
<br><br>
 
'''Extensiones webphone → ''' En esta opción hay que seleccionar la extensión que va a tener asociada el usuario.
 
  
'''Posición terminal webphone → ''' Esta opción sirve para seleccionar la posición a la que estará asignado el portal webphone. Se puede seleccionar la posición del 1 al 8, ya que el número 0  está reservado para teléfonos convencionales que permiten la compatibilidad.
 
  
'''Modo funcionamiento webfone → ''' Esta opción sirve para seleccionar si el portal webphone es multidispositivo (Recepción multiterminal) o sustitutivo (Recepción exclusiva, modo compatible con versiones anteriores)
+
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)
  
  '''IMPORTANTE → El usuario tiene que tener asignada una categoría en su perfil.'''
+
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
  
 +
=== 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 :
  
Para configurar la funcionalidad a nivel de extensión, hay que acceder a la pestaña '''VIVAIT CALL < Dispositivos < extensiones''', seleccionar una extensión existente o crear una nueva y acceder a la pestaña de “Teléfonos”.
+
* 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.
<br><br>
+
* Una serie de pares clave-valor con metadatos.
[[File:multiterminal-adm2.png|900px|center]]
+
* El texto del mensaje.
<br><br>
 
En esta pestaña se crean y se configuran los diferentes terminales asociados a una extensión. Las opciones de configuración de la funcionalidad de multiterminal son:
 
<br><br>
 
[[File:multiterminal-adm3.png|800px|center]]
 
<br><br>
 
'''Modelo de teléfono →''' Se despliega la lista de modelos de teléfonos previamente configurados que permite seleccionar el modelo o tipo de terminal. Si se trata de la app en Smartphone existen dos opciones para configurarla dependiendo del sistema operativo (VIVAit Call Business Android o VIVAit Call Business IOS).
 
  
 +
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  ]].
  
'''Plantilla →''' Se despliega la lista de plantillas previamente configuradas que permite seleccionar el tipo de plantilla para el dispositivo. Para configurar el terminal con la app del smartphone, seleccionar “Plantilla para VCB”.
+
{| class="wikitable" border="0"  align="top"
 +
|-
 +
| 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
 +
|}
  
  
'''Orden →''' Sirve para seleccionar el orden en el que van a sonar los teléfonos cuando se marca la extensión a la que están asociados.
 
  
 +
'''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
  
'''Posición terminal →''' Esta opción sirve para seleccionar la posición a la que estará asignada la extensión.
 
  
 +
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 ####
 +
###########################
  
'''Es seguro →''' Si se configure en “SI”, implicará que tenga una clave segura, no conocida y con fecha de expiración.
+
=== Generación de un Core ===
 
+
Un Core es la memoria de un programa.
 
 
'''Es publicable →''' Si se configure en SI, se podrá registrar el terminal desde fuera vía FlexiSIP y será necesario que sea seguro.
 
 
 
 
 
'''Clave de registro →''' Clave para el registro de la extensión en Asterisk.
 
 
 
  
'''Número de días de validez de la clave '''
+
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]
  
 +
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
  
 +
==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
  
        '''IMPORTANTE  → Webphone no puede ser seguro ni publicable'''
+
==== Introducción ====
  
=== BLF ===
+
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
  
 +
==== Terminología ====
  
Para la funcionalidad BLF, además de incluirlo en el fichero de provisión del teléfono, para la tecla correspondiente que va a tener el BLF, es necesario añadir un campo subscribe en la extensión
+
* '''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
  
En '''Menu > VIVAIT Call > Dispositivos > Extensiones''', seleccionar '''añadir Campo > Tipo SIP > subscribe'''. En el campo "subscribe" hay que introducir el valor de la extensión a supervisar.
+
'''Nota.-''' ''En terminología Asterisk el aumento de prioridad corresponde con números descendentes, es decir,<br />
 +
prioridad 50 es mejor que prioridad 70''
  
 +
==== Mecanismo de asignación de llamadas ====
  
[[File:blf-adm1.png|800px|center]]
+
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:
  
== Configuración de los diferentes Portales de Usuario ==
+
- 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.'''
  
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.
+
- 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)
  
Existen varias opciones del portal de usuario según las necesidades del cliente , las diferentes opciones en base a la configuración son:
+
:*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:
  
* Portal de usuario
+
[[Archivo:Formula.png |center]]
* Portal Webcall
 
* Portal para integración con Teams
 
  
 +
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]]
  
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/'''
+
  <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>
  
  
[[File:p-usuario1.png|center|600px]]
+
<!--
 +
[[Medio:Asignación de llamadas por prioridad adaptativa.pdf|Asignación de llamadas por prioridad adaptativa]]-->
  
 +
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
  
*'''webphoneLink :''' Configuración del link de la web con solo el dialpad.
+
=== Marcación saliente ===
*'''IsWebPhoneDisabled:''' Configuración para habilitar (false) o deshabilitar (true) la aparición de webphone al iniciar el portal.
+
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.
  
  
=== Portal de usuario ===
+
====Esquema de funcionamiento====
 +
[[Archivo:esquema funcionamiento marcador.jpg|center|500px]]
  
Para configurar el portal de usuario solo para terminales telefónicos (sin webphone) se tendría que hacer de la siguiente forma:
+
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.
  
[[File:p-usuario2.png|center|300px]]
+
====Flujo de estados====
  
 +
El flujo de estados es el reflejado en la figura siguiente:
  
 +
[[Archivo:diagrama de flujo motorsal.png|center|800px]]
  
*'''webphoneLink :''' Comentar la línea con ( // ) al comienzo de esta.
+
Los diferentes estados de un contacto son:
*'''IsWebPhoneDisabled:''' Deshabilitar (true) para que no aparezca webphone al iniciar el portal.
+
{| 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||
 +
|-
 +
|}
  
 +
====Carga de contactos====
  
 +
===== Descripción =====
  
Al terminar la configuración , en el portal se deshabilitará el botón de webphone:
+
A continuación se explica la configuración y funcionamiento de la utilidad encargada de asignar contactos a campañas.
  
 +
===== 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.
  
[[File:p-usuario3.png|center|700px]]
+
{| class="wikitable" style="text-align:center;"
 
+
|-
=== Portal Webcall ===
+
! Parámetro !! Valor !! Obligatorio !! Defecto
 
+
|-  
 
+
| db|| Nombre de la base de datos|| SI || nimitz
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:
+
|-
 
+
| dbHost|| Host MySQL || SI || localhost
 
+
|-
 
+
| dbPort|| Puerto MySQL || NO || 3306
[[File:p-usuario4.png|center|300px]]
+
|-
 
+
| dbUsuario || Usuario de acceso a la base de datos|| SI ||
 
+
|-
 
+
| dbClave || Clave del usuario || SI ||
*'''webphoneLink :''' Comentar la línea con ( // ) al comienzo de esta.
+
|-
*'''IsWebPhoneDisabled:''' Habilitar (false) para que aparezca webphone al iniciar el portal.
+
| rutaContactos || Ruta hasta el archivo de contactos || NO || /var/spool/MDtel/contactos
 
+
|-
 
+
| obsoletos || Si vale 1, marcar como obsoletos los contactos anteriores || NO || 0
 
+
|-
Al terminar la configuración , en el portal aparecerá el dialpad de webphone:
+
| 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||
[[File:p-usuario5.png|center|800px]]
+
|-
 
+
| 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''')
=== Portal para integración con Teams ===
+
|-
 
+
| 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
 
+
|-
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:
+
| 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 ||
[[File:p-usuario6.png|center|300px]]
+
|-
 
+
| 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 ||
*'''webphoneLink :''' Poner el link del enlace a webphone
+
|-
*'''IsWebPhoneDisabled:''' Deshabilitar (true) para que no aparezca webphone al iniciar el portal.
+
| 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 ||
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 :
+
|-  
 
+
| direccion2 || Número de columna del CSV que contiene la dirección 2 || NO ||
 
+
|-
[[File:p-usuario7.png|center|800px]]
+
| 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 ||
 
+
|-
=== Varios portales en una sola instalación ===
+
| provin || Número de columna del CSV que contiene la provincia || NO ||
 
+
|-
 
+
| email || Número de columna del CSV que contiene el email || NO ||
 
+
|-  
Existe la posibilidad de tener varios portales en una misma instalación de VIVAit Call con diferentes url’s para cada portal .
+
| 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 ||
 
+
|-
[[File:p-usuario8.png|center|600px]]
+
| 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 ||
Un ejemplo de las url’s de los portales sería:
+
|-
 
+
| valMovil_2 || Número de columna del CSV que contiene el segundo número móvil del contacto || NO ||
https://servidor/webs/vivait-user/ → Portal usuario
+
|-
https://servidor/webs/webfon2-solo → DialPad
+
| valMovil_3 || Número de columna del CSV que contiene el tercer número móvil del contacto || NO ||
https://servidor/webs/webfon3 → Portal webphone
+
|-
 
+
| valMovil_4 || Número de columna del CSV que contiene el CUARTO número móvil del contacto || NO ||
== Funcionamiento de la plataforma en modo emergencia ==
+
|-
== Accesos Web ==
+
| edad || Número de columna del CSV que contiene la edad || NO ||
 
+
|-  
{| class="wikitable"
+
| 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 ||
 
|-
 
|-
! Aplicación !! Enlace
+
| Idioma || Idioma del contacto || NO ||
|-
 
|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 ===
+
===== Funcionamiento =====
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:
 
  
 +
Para ejecutar la utilidad se debe teclear la siguiente orden en la línea de comandos:
  
[[File:Permisos-Portal_Administracion.jpg|center]]
+
'''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 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 ]].
+
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.
  
== Elementos monitorizados del sistema ==
+
Un ejemplo de fichero de carga de contactos sería el siguiente:
===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.
+
  #
 +
  # 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';
  
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.
+
====Comportamiento de reprogramaciones de llamadas en función del estado del agente====
{|
 
|-
 
|
 
Direccion.IP.Zabbix.Server/zabbix
 
|}
 
  
Zabbix posee documentación tanto en wiki, foros y comunidades.Para ampliar la información se puede visitar:
+
Se ha preparado la siguiente maqueta:
[[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'''
+
Campaña saliente.
: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.
+
Cola saliente progresiva.
 +
Dos agentes logados en VIVAit Suite.
  
* '''item'''
+
En el formulario de la llamada se indica: llamada redirigida
: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.
+
Se selecciona el "check dirigida"
  
* '''trigger'''
+
Las posibilidades de prueba son dos: "'''Cualquier agente'''" y "'''Solo agente'''"
: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=====
+
Resultados son los siguientes:
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:
+
{| class="wikitable sortable"
{|
+
|-
 +
| '''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.
 
|-
 
|-
|
 
'''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 [[https://www.zabbix.com/documentation/2.2/manual/discovery/network_discovery/rule | Zabbix detección de redes]].
 
  
=====Notificaciones=====
+
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
  
Necesariamente, debe darse de alta al usuario y darse de alta el servidor de correo electrónico para poder ser capaz de enviar correos.
+
=== 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.
  
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]]
+
==== 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]].
  
=====Usuarios=====
+
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]]
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======
+
'''La movilidad permite''' disponer de las extensiones telefónicas empresariales en cualquier lugar. Por
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.
+
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.
  
[[File:EjemploScreen.png|center|750px]]
 
  
======Maps======
+
<!--parte daniel-->
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.
+
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]]
[[File:EjemploMaps.png|center|750px]]
 
[[File:EstadosMaps.png|center|750px]]
 
  
 +
==== ¿Cómo funcionan las extensiones? ====
  
======Monitorizar el estado de los raid======
+
Primeramente el usuario debe tener los ejes apropiados en la tabla '''COM_USUARIOS_APLICACION''' (aplicación centralita).
Los siguientes comandos son necesarios para poder monitorizar el estado de los raid.
 
La orden:
 
  
>hpacucli "ctrl slot=1 logicaldrive 1 show status"
+
La extensión debe de tener ''un teléfono'' y por tanto ''un modelo de teléfono asociado.''
  
nos proporciona el estado de un raid (p.e. logicaldrive 1 (931.5 GB, 1): Interim Recovery Mode).
+
Es tan simple como especificar '''la extensión, el usuario y la clave de este.'''
  
La orden:
+
Para corroborar el funcionamiento de esta hay ''dos métodos'':
>hpacucli "ctrl slot=1 logicaldrive all show status"
 
  
nos proporciona el estado de todos los raid.
+
'''* CLI asterisk:'''
  
p.e.:
+
'''mdintz qry * nimitz bd extenEntraUsuarioMovil 25001 20001 1234'''
logicaldrive 1 (931.5 GB, 1): Interim Recovery Mode
 
  
logicaldrive 2 (1.8 TB, 1): OK.
+
Y como resultado obtenemos lo siguiente:
  
Para conseguir información genérica el comando
+
mdintz Variables:<br/>
   
+
MdintzIdentif='cms1'<br />
  ctrl all show config detail
+
MOVIL_TIPO_RESET='10'<br />
 +
  MOVIL_CAD_RESET='notify_yealink'<br />
 +
  MdintzRes='OK'
  
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".
+
El usuario con el login numérico 20001 se ha "movido" a la extensión 25001
  
===Zabbix en '''MD'''tel===
+
Ahora ''nos quitamos de esa extensión mediante el siguiente comando:''
  
 +
'''mdintz qry * nimitz bd extenSaleUsuarioMovil 25001'''
  
==== Configuraciones de Zabbix ====
+
Resultado del comando:
  
===== Agentes Zabbix =====
+
mdintz Variables:<br/>
{|-
+
MdintzIdentif='cms1'<br/>
|
+
  MOVIL_TIPO_RESET='10'<br/>
|
+
MOVIL_CAD_RESET='notify_yealink'<br/>
  '''Nota:''' Hay que instalar un agente Zabbix en cada maquina que se quiera monitorizar.
+
MdintzRes='OK'
|}
 
  
El agente de Zabbix puede recoger datos:
+
Las pruebas anteriores han sido '''con extensiones con movilidad y con usuario con/sin
*'''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'''.
+
propietario.'''
*'''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''''''.
 
  
 +
Ahora las realizamos '''con extensiones sin movilidad'''
  
 +
'''mdintz qry * nimitz bd extenEntraUsuarioMovil 25002 20001 1234'''
  
====== Configurar agente de forma pasiva======
+
Obteniendo:
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.
 
  
{|
+
  mdintz Variables:<br/>
|-
+
  MdintzIdentif='cms1'<br/>
|
+
  MdintzRes='movil_error_datos'
##### 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
 
|}
 
  
====== Configurar agente de forma activa ======
+
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>'''
  
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.
+
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>'''
|-
 
|
 
##### 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:
+
'''mdintz qry * nimitz bd extenEntraUsuarioMovil 21000 20001 1234'''
{|
 
|-
 
|
 
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.
+
Con salida:
Tras la configuración del fichero, debemos reiniciar el servicio de los agentes.
 
{|
 
|-
 
|
 
sudo service zabbix-agent restart
 
|}
 
  
===== Scripts del Servidor Zabbix =====
+
mdintz Variables:<br/>
{|
+
  MdintzIdentif='cms1'<br/>
|
+
MOVIL_EXTEN='25001'<br/>
|
+
MDintzRes='movil_ya_login'
  '''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.
+
'''* Dialplan'''
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.
+
Para llamar a la función de movilidad hay que marcar el '''9992.'''
  
Si visualizo que "............" aparece:
+
Nota.- Para comprobar que se realiza todo correctamente habría que mirar las trazas de Asterisk
  
*****  root zabbix
+
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
  
======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
 
  
{|
 
|-
 
|
 
<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>
 
|}
 
  
 +
=== Desvío por calendario ===
  
======zabbixSenderACD.pl======
 
  
'''Uso:''' Obtener el PID de Asterisk para revisar si se ha reiniciado en caso de que cambie.
+
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á:
  
'''Ubicación:''' Servidor ACD.
 
  
'''Parámetros:''' Ruta al archivo de configuración (Por ejemplo: ''/etc/MDtel/zabbixSenderACD.pconf'').
+
* Primero se atiende si el usuario o extensión tiene desvío incondicional a
 +
mensajería.
  
'''Archivo de configuración:''' zabbixSenderACDBD.pconf.
+
* 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.
|
 
<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======
+
* Posteriormente se tratarán resto de desvíos condicionales (por no
 +
conectado, por ocupado o por no contesta).
  
'''Uso:''' Obtener estado y los distintos valores de vivait-cti.
 
  
'''Ubicación:''' Servidor donde se ejecute vivait-cti. Normalmente el servidor ACD.
 
  
'''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>
 
|}
 
  
  
======zabbixSender-intz-nimitz.pl======
+
[[Archivo:Captura de pantalla de 2022-11-16 07-58-38.png|center|900px]]
  
'''Uso:''' Obtener estado y los distintos valores de intz-nimitz.
 
  
'''Ubicación:''' Servidor donde se ejecute intz-nimitz.
 
  
'''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======
+
Los componentes principales de la arquitectura son:
  
'''Uso:''' Obtener estado y los distintos valores de motorSal.
 
  
'''Ubicación:''' Servidor donde se ejecute motorSal.
+
*'''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)
  
'''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>
 
|}
 
  
======zabbixSenderMyACDSuperv.pl======
+
*'''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.
  
'''Uso:''' Obtener estado y los distintos valores de myAcdSuperv.
 
  
'''Ubicación:''' Servidor donde se ejecute myAcdSuperv.
+
*'''Frontales''' : Para la administración por parte de los usuarios de los desvíos programados se ofrecen los siguientes frontales:
  
'''Parámetros:'''
+
- '''Portal de usuario:''' Cada usuario podrá definir desvíos programados en el mismo entorno en el que define el resto de desvíos.
{|
 
|-
 
|
 
<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======
+
- '''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.
  
'''Uso:''' Obtener estado y los distintos valores de recordNodo.
+
- '''Portal de administración de Baikal''': Desde dicho portal se podrán gestionar el servidor de calendarios.
  
'''Ubicación:''' Servidor donde se ejecute recordNodo.
+
- '''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).
  
'''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>
 
|}
 
  
 +
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.
  
======zabbixSenderRecordCentral.pl======
+
  '''Baikal se ubicará por defecto en el mismo nodo en el que se encuentre el portal de administración de VIVAit.'''
'''Uso:''' Obtener estado y los distintos valores de recordCentral.
 
  
'''Ubicación:''' Servidor donde se ejecute recordCentral.
 
  
'''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>
 
|}
 
  
  
A continuación se muestra una tabla resumen de los distintos scripts y sus funcionalidades:
 
  
[[Archivo:Zabbix_scripts.png |960px]]
+
===== Baikal =====
  
====== Dimensionamiento del servidor (Startpollers) ======
+
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.
{|
 
|
 
|
 
'''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.
+
Baikal es un servidor CalDAV ligero. Los datos se almacenan en una base de datos Mysql (diferente a la base de datos de VIVAit).
  
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.
+
En el caso de su uso en VIVAit Call:
  
=====Templates=====
+
* 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.
  
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.
+
'''Si se instala Vivait 3.6 desde repositorio ,  habría que realizar los siguientes pasos en Mysql:'''
  
Automáticamente, cada template rellena por item las aplicaciones, trigers, alarmas,gráficos,... etc.
+
'''Configuración de Mysql'''
  
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;"
+
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:
|-
 
! 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
 
|-
 
|}
 
  
 +
Baikal usa su propia base de datos (diferente a la de VIVAit)
  
  
{| class="wikitable" style="text-align:center;"
+
'''1.Configuración inicial Mysql'''
|+ '''Dependiendo del tipo de nodo:'''
+
 
|-  
+
 
! Templates !! ACD !! Corporativo/GW
+
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.
|-  
+
 
| DRBD|| - || -
+
'''Acceder a Mysql y cambiar clave de root'''
|-  
+
-------------------------
| motorSal|| - || -
+
mysql_secure_installation
|-  
+
mysql -u root -p
| Vivait-Suite ACD|| Si || -
+
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘ LACLAVEDEVIVAITPARAMYSQL ’;
|-  
+
-------------------------
| Vivait-Suite BBDD|| - || -
+
 
|-  
+
*'''No realizar la configuración inicial de Mysql si el nodo ya dispone de base de datos VIVAit'''
| 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|| - || -
 
|-
 
|}
 
  
 +
'''2.Configuración de Base de datos Baikal'''
  
  
{| class="wikitable" style="text-align:center;"
+
'''Crear base de datos de baikal'''
|+ '''Dependiendo del tipo de Base de dato'''s:
+
-------------------------
|-  
+
mysql> create database baikal;
! Templates !! BBDD <br />Tiempo Real !! BBDD<br /> Réplica !! BBDD Copia
+
-------------------------
|-  
+
'''2. Crear usuario baikal'''
| DRBD|| - || - || -
+
-------------------------
|-  
+
create user 'baikal'@'localhost' identified by 'ivivabaikal';
| motorSal|| Si(si ACD) || - || -
+
-------------------------
|-  
+
'''3. Asignar privilegios a usuario baikal
| Vivait-Suite ACD|| - || - || -
+
-------------------------
|-  
+
grant all on baikal.* to ‘baikal'@'localhost’;
| 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|| - || - || -
 
|-
 
|}
 
  
  
 +
'''Configuración de Baikal'''
  
{| 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|| -
 
|-
 
|}
 
  
 +
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:
  
{| class="wikitable" style="text-align:center;"
+
* Host
|-
+
* Puerto (defecto 3306)
! Templates !! Servidor de grabaciones
+
* Driver con el que se conecta (Mysql)
|-
+
* Usuario de BBDD Baikal
| DRBD|| -
+
* Clave de BBDD Baikal
|-
 
| 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|| -
 
|-
 
|}
 
  
  
  
{| class="wikitable" style="text-align:center;"
+
'''A nivel de base de datos'''
|+ '''Monitorización'''
+
 
|-
+
 
! Templates !! General !! Contact Center
+
[[Archivo:calendario1.png|center|700px]]
|-
+
 
| DRBD|| - || -
+
 
|-
+
Donde:
| motorSal|| - || -
+
 
|-
+
* '''MySQL host''' - Nombre del host de mysql.
| Vivait-Suite ACD|| - || -
+
* '''MySQL database name''' - Nombre de la base de datos creada.
|-  
+
* '''MySQL username''' - Nombre de usuario de acceso.
| Vivait-Suite BBDD|| - || -
+
* '''MySQL password''' - Contraseña de acceso.
|-  
+
 
| Vivait-Suite Record|| - || -
+
 
|-
+
 
| Vivait-Suite GW|| - || -  
+
'''En ajuste de sistema'''
|-
+
 
| Vivait-Call Asterisk|| - || -
 
|-
 
| Vivait-Call bdCentral|| - || -
 
|-
 
| Vivait-Call bdNodo|| - || -
 
|-
 
| cambiarPerfil_Cal|| - || -
 
|-
 
| Template App Zabbix Server|| si || -
 
|-
 
| Template_OS_Linux*|| - || -
 
|-
 
| Template_App_MySQL|| - || -
 
|-
 
|}
 
  
 +
[[Archivo:calendario2.png|center|500px]]
  
 +
Donde:
  
======'''Resumen'''======
+
 +
* '''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:
  
{| class="wikitable"
 
|-
 
!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||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.
 
|-
 
|}
 
  
 +
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:
  
* 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
 
  
====== Importar templates======
 
  
Las plantillas propias de '''md'''tel se encuentran en la ruta "'''/usr/src/nimitz/archivos'''" y empiezan con el nombre de "TemplateXXX.xml".
+
[[Archivo:calendario5.png|center|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'''
 
  
|}
 
  
 +
2. En caso de no existir programación de desvío, devolverá vacío:
  
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.
 
  
[[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".
+
[[Archivo:captura6.png|center|700px]]
  
===Configuración para un primer funcionamiento de Zabbix===
+
=== Grabación ===
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====
+
La grabación en '''''VIVA'''''it Call está diseñada para ser lo mas flexible posible.
{|
 
|-
 
|
 
'''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.
 
  
 +
====Configuración====
  
[[File:CreacionHost.png|750px|center]]
+
Si deseamos grabar, debemos activar que alguno de los dispositivos/elementos que intervienen en la llamada se grabe.
  
Las opciones basicas para configurar un host son las siguientes:
+
Estos dispositivos/elementos son:
{| 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.
+
* 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.
  
Templates.
+
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á.
  
Templates MDtel.
+
Al configurar un nodo existen cuatro campos que intervienen en la grabación.
  
Zabbix servers.
+
''''Grabador''''
  
Linux Servers.
+
Se configura en el portal en la sección general/nodos.
  
Hypervisors.
+
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.
  
Virtual machines.
+
Es un campo booleano los posibles valores en el portal son si/no y en la base de datos 1/0.
  
O crear uno nuevo en '''New group'''.
 
  
|-
 
| 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.
+
''''Modo grabación infraestructura''''
  
 +
<!--Su configuración se realiza en el portal, en la sección general/nodos.
  
===== Comprobación de disponibilidad del host=====
+
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.
Para saber si todo esta bien debemos ver la Z de disponibilidad.  
 
  
 +
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]].
  
[[File:EstadosZHost.png|750px|center]]
+
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)
 +
|}
  
 +
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]]
  
Indicacion de los colores del icono Z:
 
  
* Si el icono Z en la columna de disponibilidad es de color rojo, indica que hay un error en la comunicación - mueva el cursor del ratón sobre él para ver el mensaje de error.
+
''''Grabar enrutamiento''''
  
* 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.
+
Se configura en el portal en la sección general/nodos.
  
* Si el icono es verde, esta funcionando correctamente.
+
Este campo define si van a grabar las llamadas que se enruten en este nodo.
  
 +
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]].
  
====Indicar que plantilla (template) tendra el host [opcional]====
 
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.
 
  
====Asignar items al host ====
+
''''RecordCentral''''
{|
 
|-
 
|
 
'''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".
+
Se configura en el portal en la sección general/nodos.
  
[[File:CrearItemEjemplo.png|750px|center]]
+
Define que instancia del recordCentral es la encargada de tratar las grabaciones de este nodo.
  
Parametros o campos a rellenar para una configuración básica :
+
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.
  
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
+
====Vivait Tracker====
! 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'''''
+
::<span style="background:#FFAA00"> DANIEL LA ÚNICA REFERENCIA A VIVAIT TRACKER EN LA DOCUMENTACIÓN "Vivait supervisor" QUE TENGO DICE LO SIGUIENTE. </span>
! align=center ;border:0.05pt solid #000000;padding:0cm;color:#ffffff;" | '''''Valores posibles'''''
+
-->
|-
+
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)
| 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.
+
<!--
||
+
::<span style="background:#FFAA00"> DANIEL FIN EXPLICACIÓN. </span>
|-
+
 
| font-weight: bold;" | '''Type'''
+
 
|| Indicar de que entidad queremos recibir informacion.
+
::<span style="background:#FFAA00"> DANIEL De la documentacion creada por ivan. </span>
||Puede ser al "Agente Zabbix" o a el Hardware como impresoras, switch o routers. 
+
-->
|-
+
Esquematico actual del proyecto tracker
| font-weight: bold;" | '''Key'''
+
[[Archivo:Esquematico_tracker_1.jpg|center]]
|  | 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.
 
Para mas informacion [[http://entation/1.8/manual/config/items#zabbix_agent. ver documentación Zabbix]]
 
  
 +
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.
  
===== Ver la información recolectada por el item =====
+
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.
{|
 
|-
 
|
 
<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>
 
|}
 
  
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".
+
3º Si la ubicación de la grabación es remota, entra en escena el proxy. Es el que realiza la petición.
  
[[File:VerInfoITEM.png|750px|center]]
+
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.
  
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".
+
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]]
  
[[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"
 
  
====Configurar los Triggers para los host====
+
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
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.
 
|}
 
  
 +
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.
  
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.
+
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)
  
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".
+
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).
  
Parametros o campos a rellenar para una configuración básica :
+
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.
  
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
+
[[#Grabación_(Vivait_Tracker)| Volver arriba]]
! 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'''''
+
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operación_plataforma_VIVAit Volver al indice]]
! 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'''''
+
=== Enrutamiento ===
|-
+
 
| font-weight: bold;" | '''Name'''
+
[[Archivo:Enrutamiento.png|885px |center]]
|  | 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.
+
 
||
+
 
|-
+
==== Enfoque inicial ====
| 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...'''''
+
[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Portal_de_administraci%C3%B3n_VIVAit#Enfoque_inicial Acceso]
||Ejemplo: {New host:system.cpu.load.avg(180)}>2
+
 
|-
+
==== Funcionamiento ====
| font-weight: bold;" | '''Key'''
+
El proceso de enrutamiento, como vimos en el esquemático, se compone de dos fases:
|  | 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.
+
 
||
+
# Preenrutameinto, que se encarga de tratar todas las llamadas
|-
+
# Enrutamiento externo, que tiene módulos dedicados al enrutamiento hacia:
| font-weight: bold;" | '''Descripción'''
+
:*Enlaces externos.  
|  | Una descripción breve sobre el trigger.
+
:*Extensiones.  
||
+
:*Usuarios de telefonía corporativa.  
|-
+
:*Facilidades.  
| font-weight: bold;" | '''Severity'''
+
:*Salas de conferencia.  
|  | everidad distinguida por colores,
+
:*Agentes de grupos ACD.  
|| No classified
+
:*Grupos ACD.  
Information
+
:*Vdn.
Warning
+
:*Buzones para dejar mensaje.  
Average
+
:*Buzones para su gestión.
High
 
Disaster
 
|}
 
  
 +
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.
  
===== Comprobar el estado del trigger =====
+
Se asume que todas las facilidades están disponibles en todos los nodos, aunque es posible que la implementación sea diferente entre ellos.
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.
 
  
[[File:EstadoTrigger.png|center|750px]]
+
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
  
====Asociar un Action al trigger====
 
  
Una action(acción) sirve para configurar un mensaje de alerta o una accion para Zabbix, ante un problema. Hay varias formas de gestionar un problema a través de una acción:
+
A 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
  
# A través de mensajes simples, alertando al instante.
 
# Escalar los mensajes hacia el jefe y/o otros grupos.
 
# Ejecución de commandos remotos.
 
# Notificaciones repetidas hasta que se resuelve el problema.
 
# Notificaciones y comandos retardados.
 
# Escenario complejo, la combinación de todo lo anterior.
 
  
Para crear una configuración en "Configuration-Actions". La explicación esta en la [[ https://www.zabbix.com/documentation/2.0/manual/config/notifications/action documentación de Zabbix]].
+
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.
 +
 
 +
=====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.
 +
 
 +
===== 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.
 +
 
 +
 
 +
 
 +
===== 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.
 +
 
 +
 
 +
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
 +
 
 +
=== 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
 +
|-
 +
|}
 +
 
 +
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
 +
 
 +
 
 +
=== 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 Servic'''e; 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 entrantes''' → '''El sistema cuenta llamadas en cada periodo TIC.'''
 +
 
 +
El módulo permite difinir distintas cajas de medida y control ('''FLUJO''').
 +
 
 +
Se pueden definir n cajas y ubicarlas en Asterisk (por ejemplo en un enlace externo, una caja que agrupe todos los enlaces, en los enlaces interiores y en extensiones).
 +
 
 +
Cada una de las cajas, o flujos, mide y controla la tasa de llamadas en cada TIC → Se mostrará en llamadas/segundo.
 +
 
 +
El '''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.
 +
 
 +
El '''FLUJO'''permite 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.
 +
 
 +
 
 +
 
 +
[[Archivo:mdflow.png|885px |center]]
 +
 
 +
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)
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
[[Archivo:mdflow2.png|655px |center]]
 +
 
 +
 
 +
 
 +
 
 +
 
 +
==== 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'''
 +
 
 +
 
 +
 
 +
==== 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"
 +
 
 +
 
 +
 
 +
==== 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
 +
 
 +
==== 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)'''
 +
 
 +
 
 +
 
 +
==== 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
 +
 
 +
==== 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.
 +
 
 +
 
 +
 
 +
==== 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.
 +
 
 +
 
 +
 
 +
==== 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.
 +
 
 +
==== 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))
 +
 
 +
 
 +
 
 +
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
 +
 
 +
=== Estadísticas en '''''<span style="color:#144F9B">VIVA</span>'''''it Call ===
 +
 
 +
[[:medio:Estadisticas_VIVAIT_ Call.pdf|Como configurar estadísticas para '''''VIVA'''''it Call ]]
 +
 
 +
 
 +
=== Desvío por calendario ===
 +
 
 +
 
 +
 
 +
El uso desde el portal de administración de VIVAit pasa por:
 +
 
 +
 
 +
'''Crear la conexión entre VIVA it y Baikal'''
 +
 
 +
Tener correctamente configurado en la tabla WEB_CONFIGURACION el usuario y clave de labase 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
 +
 
 +
 
 +
'''Crear usuario de Baikal en VIVA it'''
 +
 
 +
 
 +
Para ello, en la pestaña (General / Configuración común) del portal de administración de VIVA it realizaremos la configuración de calendarios de desvíos:
 +
 
 +
 
 +
[[Archivo:calendario7.png|800px|center]]
 +
 
 +
 
 +
Donde:
 +
 
 +
* '''Url''' – La URL es donde está el servidor de calendarios
 +
* '''Protocolo''' – baikal usa el protocolo caldav
 +
* '''Usuario''' – Usuario creado en Baikal
 +
* '''Clave''' – Contraseña del usuario creado
 +
 
 +
 
 +
'''Configurar extensiones o usuarios'''
 +
 
 +
Tanto en extensiones como en usuarios desde la ventana correspondiente podremos configurar:
 +
 
 +
 
 +
* Si una extensión o usuario usan desvío programado (desvío incondicional por calendario); por defecto NO estará activado y deberá activarse solo en aquellos usuarios o extensiones en los que sea necesario; esto es importante para proteger la capacidad del sistema:
 +
 
 +
 
 +
[[Archivo:calendario8.png|800px|center]]
 +
 
 +
 
 +
 
 +
* Al posicionar el cursor sobre el campo “Desvío incondicional por calendario:”, el sistema crea automáticamente un calendario (que comienza por USU para el caso de usuarios y por EXT en el caso de extensiones) que será el asociado al usuario o extensión y pulsando sobre el botón accederemos a dicho calendario.
 +
 
 +
 
 +
 
 +
 
 +
[[Archivo:calendario9.png|700px|center]]
 +
 
 +
 
 +
Seleccionando un día (pulsando sobre el), y pulsando de nuevo saldrán opciones para crear un nuevo evento. El formulario que aparece tiene los siguientes campos:
 +
 
 +
 
 +
- El campo “Asunto” describe el evento.
 +
- El campo “Destino” es hacía donde se quiera desvíar la llamada.
 +
- El campo “Descripción” no se contempla.
 +
 
 +
 
 +
 
 +
[[Archivo:calendario10.png|400px|center]]
 +
 
 +
 
 +
 
 +
En esta ventana tendremos como opciones:
 +
 
 +
* Programar el evento como repetitivo, botón “Repetir”
 +
* Programar el evento para todo el día, botón “Todo el día”
 +
* Disponer de componente gráfico para programación de intervalos
 +
 
 +
 
 +
 
 +
[[Archivo:calendario11.png|400px|center]]
 +
 
 +
=== Multiterminal ===
 +
<br><br>
 +
==== Arquitectura del nodo WebRTC ====
 +
<br><br>
 +
[[File:webrtc.png |900px]]
 +
<br><br>
 +
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
 +
<br><br>
 +
==== Arquitectura del nodo STG ====
 +
<br><br>
 +
[[File:Arquitectura nodo STG.png |900px]]
 +
<br><br>
 +
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
 +
<br><br>
 +
==== Arquitectura de Multiterminal ====
 +
<br><br>
 +
[[File:multiterminal.png|900px|center]]
 +
<br><br>
 +
[[http://vivait-wiki.mdtel.net/wiki/vivait/index.php/Manual_de_operaci%C3%B3n_plataforma_VIVAit | Volver al índice]]
 +
<br><br>
 +
==== Configuración de Multiterminal ====
 +
<br><br>
 +
El uso desde el portal de administración de VIVAit para configurar la funcionalidad de multiterminal pasa por:
 +
<br><br>
 +
•      '''A nivel de usuario →''' Si el webcall es multidispositivo o sustitutivo.
 +
 
 +
•      '''A nivel de extensión →''' varios teléfonos por extensión.
 +
 
 +
•      '''A nivel de teléfono →''' definir orden y posición (puede haber posición 0 y posición 2 sin que exista una posición 1).
 +
 
 +
•      '''Controlar que si webcall es de pool no puede ser multidispositivo.'''
 +
Para configurar la funcionalidad a nivel de usuario, hay que acceder a la pestaña General > Administrar usuarios, seleccionar un usuario y pulsar la pestaña Centralita
 +
 
 +
 
 +
Para configurar la funcionalidad a nivel de usuario, hay que acceder a la pestaña '''General > Usuarios > Administrar usuarios''', seleccionar un usuario y pulsar la pestaña Centralita
 +
 
 +
En la pestaña Centralita se encuentran las opciones de configuración, que son:
 +
<br><br>
 +
[[File:multiterminal-adm1.png|600px|center]]
 +
<br><br>
 +
'''Extensiones webphone → ''' En esta opción hay que seleccionar la extensión que va a tener asociada el usuario.
 +
 
 +
'''Posición terminal webphone → ''' Esta opción sirve para seleccionar la posición a la que estará asignado el portal webphone. Se puede seleccionar la posición del 1 al 8, ya que el número 0  está reservado para teléfonos convencionales que permiten la compatibilidad.
 +
 
 +
'''Modo funcionamiento webfone → ''' Esta opción sirve para seleccionar si el portal webphone es multidispositivo (Recepción multiterminal) o sustitutivo (Recepción exclusiva, modo compatible con versiones anteriores)
 +
 
 +
 
 +
 
 +
  '''IMPORTANTE → El usuario tiene que tener asignada una categoría en su perfil.'''
 +
 
 +
 
 +
 
 +
Para configurar la funcionalidad a nivel de extensión, hay que acceder a la pestaña '''VIVAIT CALL < Dispositivos < extensiones''', seleccionar una extensión existente o crear una nueva y acceder a la pestaña de “Teléfonos”.
 +
<br><br>
 +
[[File:multiterminal-adm2.png|900px|center]]
 +
<br><br>
 +
En esta pestaña se crean y se configuran los diferentes terminales asociados a una extensión. Las opciones de configuración de la funcionalidad de multiterminal son:
 +
<br><br>
 +
[[File:multiterminal-adm3.png|800px|center]]
 +
<br><br>
 +
'''Modelo de teléfono →''' Se despliega la lista de modelos de teléfonos previamente configurados que permite seleccionar el modelo o tipo de terminal. Si se trata de la app en Smartphone existen dos opciones para configurarla dependiendo del sistema operativo (VIVAit Call Business Android o VIVAit Call Business IOS).
 +
 
 +
 
 +
'''Plantilla →''' Se despliega la lista de plantillas previamente configuradas que permite seleccionar el tipo de plantilla para el dispositivo. Para configurar el terminal con la app del smartphone, seleccionar “Plantilla para VCB”.
 +
 
 +
 
 +
'''Orden →''' Sirve para seleccionar el orden en el que van a sonar los teléfonos cuando se marca la extensión a la que están asociados.
 +
 
 +
 
 +
'''Posición terminal →''' Esta opción sirve para seleccionar la posición a la que estará asignada la extensión.
 +
 
 +
 
 +
'''Es seguro →''' Si se configure en “SI”, implicará que tenga una clave segura, no conocida y con fecha de expiración.
 +
 
 +
 
 +
'''Es publicable →''' Si se configure en SI, se podrá registrar el terminal desde fuera vía FlexiSIP y será necesario que sea seguro.
 +
 
 +
 
 +
'''Clave de registro →''' Clave para el registro de la extensión en Asterisk.
 +
 
 +
 
 +
'''Número de días de validez de la clave '''
 +
 
 +
 
 +
 
 +
 
 +
 
 +
        '''IMPORTANTE  → Webphone no puede ser seguro ni publicable'''
 +
 
 +
=== BLF ===
 +
 
 +
 
 +
Para la funcionalidad BLF, además de incluirlo en el fichero de provisión del teléfono, para la tecla correspondiente que va a tener el BLF, es necesario añadir un campo subscribe en la extensión
 +
 
 +
En '''Menu > VIVAIT Call > Dispositivos > Extensiones''', seleccionar '''añadir Campo > Tipo SIP > subscribe'''. En el campo "subscribe" hay que introducir el valor de la extensión a supervisar.
 +
 
 +
 
 +
[[File:blf-adm1.png|800px|center]]
 +
 
 +
== Configuración de los diferentes Portales de Usuario ==
 +
 
 +
 
 +
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
 +
 
 +
 
 +
 
 +
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/'''
 +
 
 +
 
 +
[[File:p-usuario1.png|center|600px]]
 +
 
 +
 
 +
*'''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.
 +
 
 +
 
 +
=== 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:
 +
 
 +
 
 +
[[File:p-usuario2.png|center|300px]]
 +
 
 +
 
 +
 
 +
*'''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:
 +
 
 +
 
 +
 
 +
[[File:p-usuario3.png|center|700px]]
 +
 
 +
=== 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:
 +
 
 +
 
 +
 
 +
[[File:p-usuario4.png|center|300px]]
 +
 
 +
 
 +
 
 +
*'''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:
 +
 
 +
 
 +
[[File:p-usuario5.png|center|800px]]
 +
 
 +
 
 +
 
 +
=== 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:
 +
 
 +
 
 +
[[File:p-usuario6.png|center|300px]]
 +
 
 +
 
 +
 
 +
*'''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 :
 +
 
 +
 
 +
[[File:p-usuario7.png|center|800px]]
 +
 
 +
 
 +
 
 +
=== 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 .
 +
 
 +
 
 +
 
 +
[[File:p-usuario8.png|center|600px]]
 +
 
 +
 
 +
 
 +
 
 +
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
 +
 
 +
== Funcionamiento de la plataforma en modo emergencia ==
 +
== 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
 +
|}
 +
 
 +
=== 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:
 +
 
 +
 
 +
[[File:Permisos-Portal_Administracion.jpg|center]]
 +
 
 +
 
 +
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 ]].
  
 
== Integraciones con servicios externos ==
 
== Integraciones con servicios externos ==

Revisión actual del 13:13 5 nov 2024

Producto: VIVAit Call

VIVAit Suite



Sumario

1 Introducción



En este documento se describe la arquitectura general de la plataforma VIVAit, detallando aquellos procesos principales que componen cada uno de los elementos del sistema, y sus principales elementos de diagnóstico. Quedan fuera del ámbito de este documento:

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



Volver arriba [Volver al índice]



2 Sistema VIVAit



El sistema VIVAit es un software de comunicaciones unificadas de MDtel que actúa como el núcleo central de un sistema telefónico empresarial. Es el encargado de gestionar y controlar todas las llamadas de voz y vídeo, así como otros servicios de colaboración, dentro de una organización.
Las funciones principales de VIVAit son:

* Enrutamiento de llamadas determina la ruta más eficiente para cada llamada, conectando a los usuarios internos y externos.
* Gestión de usuarios crea y administra cuentas de usuario, asignando extensiones, buzones de voz y otros servicios.
* Configuración de llamadas permite configurar características como desvío de llamadas, conferencia, grabación de llamadas y más.
* Integración con otros sistemas se integra con otros productos de MDtel y de terceros, como sistemas de correo electrónico, aplicaciones de colaboración y plataformas de contact center, servidores de directorio, etc.
* Alta disponibilidad ofrece opciones de alta disponibilidad para garantizar la continuidad del servicio en caso de fallas.



2.1 Arquitectura del sistema VIVAit



El esquema que describe la arquitectura del sistema VIVAit de MDtel se muestra en la siguiente figura:

Esquema general.png



Volver arriba [Volver al índice]

2.2 Elementos del sistema VIVAit



Las partes individuales que componen el sistema VIVAit son:

COMPONENTES DE SOFTWARE LIBRE

- Conmutador de voz: se basa en el software Asterisk modulado por un dial plan diseñado específicamente por MDtel para dar respuesta a las necesidades especificas del cliente.
- FlexiSIP: utilizado para integrar funcionalidades de VoIP en aplicaciones móviles.
- Janus: servidor WebRTC concebido para ser de propósito general que implementar los medios para configurar una comunicación de medios WebRTC con un navegador.
- BBDD: la base de datos es relacional gestionado por el sistema MySQL.
- Zabbix: software de monitorización de redes para controlar el estado de los servidores, aplicaciones y dispositivos de red.



COMPONENTES DE DESARROLLO PROPIO

- SerCen: identifica a los usuarios y garantiza su autenticidad. 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.
- VIVAit-direct: permite buscar directamente y de forma ágil un contacto introduciendo directamente el nombre de la persona en directorios o agendas externas al sistema.
- Intz-nimitz: integra el dialplan de Asterisk con la base de datos.
- PQCTI: webservice que permite interactuar con Asterisk para establecer comunicaciones.
- Record: servidor de grabaciones de las comunicaciones de voz del sistema.
- Intz-GH: controla el estado de las extensiones del sistema.



APP DE DESARROLLO PROPIO

- VCB: Vivait Call Bussines es una app para ios y android que integra un smartphone en VIVAit.
- Portales: permite que determinadas funcionalidades del sistema puedan ser accesibles por los usuarios finales desde una interfaz cómoda y amigable.
Existen los siguientes portales en el sistema:
- WebCall: portal de usuario con diversas funcionalidades integradas: telefónica, colaborativa, agenda, traducción simultanea, etc.
- VIVAit Call: portal de administración para la configuración del sistema, con diferentes perfiles de acceso.
- VIVAit Tracker: portal para postproceso de llamadas; permite informes, escucha de grabaciones, etc.
- VIVAit Supervisor: portal para monitorización de diferentes objetos del sistema utilizando una herramienta visual que te permite analizar datos de forma rápida y eficiente.



Volver arriba [Volver al índice]

2.3 Relaciones en el sistema VIVAit



Los elementos del sistema interactuan de la siguiente forma:

- Conmutador de voz: recibe peticiones de los elementos finales, previamente registrado en él (extensiones, enlaces, aplicaciones) y en base a ellas gestiona las conexiones dentro del sistema. Genera información que sirve a otros elementos como datos de llamada, elementos que intervienen, resultado del proceso, etc.
- FlexiSIP: es el interfaz entre la app VCB (situada en internet) y el conmutador de voz.
- Janus: es el interfaz entre la aplicación de usuario html WebCall con el conmutador de voz.
- BBDD: base de datos relacional en cuyas tablas se guarda toda la información del sistema. Recibe peticiones de diferentes elementos para crear registros, consultarlos, modificarlos o borrarlos.
- Del conmutador de voz para gestionar la llamada y crear los registros de las mismas.
- De SerCen para validación local de los usuarios.
- De los portales para: administración (portal VIVAit-Call), para informes de llamadas y escucha de grabaciones (portal VIVAit-Tracker) y para monitorización de elementos (portal VIVAit-Supervisor).
- Zabbix: servidor de supervisión, implementado en el sistema o centralizado vía proxy, que recibe la información de los elementos que necesitan ser supervisados para reportar su estado al SAT (Servicio de Atención Técnica) de MDTel.
- SerCen: recibe peticiones de diferentes elementos para controlar el acceso al sistema de diferentes usuarios: WebCall, portales,
- VIVAit-direct: recoge peticiones de los diferentes tipos de usuarios para la búsqueda de contactos en directorios externos al sistema.
- Intz-nimitz: recoge peticiones del conmutador de voz hacia la base de datos para gestionar las comunicaciones.
- PQCTI: webservice que recoge peticiones de elementos externos para establecer comunicaciones en el conmutador de voz.
- Record: servidor de grabaciones que recoge la información de la conversación (RTP), genera los ficheros de audio correspondiente y los indexa en la BBDD para su posterior postproceso.
- Intz-GH: recibe información del estado de las extensiones del sistema desde el conmutador de voz para gestionar diferentes servicios: movilidad avanzada, retrollamada, BLFs, etc.



Volver arriba [Volver al índice]

2.4 Entorno del sistema VIVAit



Las siguientes tablas definen los principales elementos software de la plataforma VIVAit, que son detallados en apartados siguientes:

Nivel de sistema operativo
Elemento Instancias Propósito Observaciones
Ubuntu Server LTS 64 bits Uno por servidor Actualmente (ago-2024) Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-119-generic x86_64)

Bajo proyecto puede cambiarse

Almacenamiento de grabaciones Uno por sistema Almacenamiento de las grabaciones 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


Nivel de conmutación de voz
Elemento Instancias Propósito Observaciones
Asterisk 18 Certified by MDtel Uno por servidor corporativo/gateway Actualmente asterisk estándar

La instalación contempla descargar de la red el más actualizado, siempre CERTIFIED.

Dialplan corporativo Uno por servidor corporativo/gateway Configuración de voz


Nivel de base de datos
Elemento Instancias Propósito Observaciones
MySQL 8.0 Donde haya BBDD de cualquier tipo (incluso zabbix) Motor de Base de Datos A efectos prácticos va a ser en todos los servidores con casi total seguridad
BBDD tiempo real: DBTR Una por sistema Base de Datos sobre la que trabaja todo el entorno de tiempo real
BBDD réplica: DBHIST Una por sistema multinodo Base de Datos para acceso a información de reporting y similar Bajo proyecto puede existir más de una

En el nodo en el que exista réplica existirá además copia

BBDD copia Uno por servidor corporativo/gateway Copias de tablas de configuración para respaldo de la misma Local en cada nodo


Nivel de procesos VIVAit
Elemento Instancias Propósito Observaciones
Intz-Nimitz Donde haya una BBDD de tiempo real o copia Interfaz entre el dialplan y la base de datos No donde haya BBDD de réplica

Sistemas grandes pueden contemplar mas de un intz-nimitz central

Intz-gh En el nodo con menos carga Conocer el estado de las extensiones de diferentes nodos Solo va en un nodo. Se recomienda instalar en el nodo con menos carga.

Si se desconoce, instalarlo en la maquina con BDHIST.

recordCentral Uno por sistema Servidor de grabaciones, se conectan los agentes a él 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
bdCentral Uno, en el nodo con la DBTR Genera la base de datos que se copiará para respaldo a otros nodos
bdNodo En cada nodo con BBDD de copia Recoge la base de datos del servidor central con el objeto de tener el respaldo


phoneProv-tftp Uno por sistema Se encarga del aprovisionamiento masivo de terminales En instalaciones grandes habrá más de uno, quizás uno por sede grande; depende de la infraestructura de DHCP


Administración
Elemento Instancias Propósito Observaciones
Tomcat 9 Uno por servidor con portales Servidor de aplicaciones JAVA
Portal de administración Uno por sistema Portal de administración del sistema Bajo proyecto puede existir más de uno
Portal webfon Uno por sistema Portal de usuario para VIVAit WebCall Bajo proyecto puede existir más de uno
Tracker web Uno por sistema Portal de seguimiento de llamadas Debe instalarse en un servidor que tenga los ficheros de grabación montados en su sistema de archivos

Ligado a recordCentral
Bajo proyecto puede existir más de uno

Supervisor Uno por sistema Portal de supervisión para elementos del sistema Bajo proyecto puede existir más de uno
Apache 2.4 Uno por servidor de calendarios Servidor de portales WEB
Servidor de calendarios Uno por sistema Aloja calendarios para su uso en diferentes entornos de NIMITZ Bajo proyecto puede existir más de uno


Monitorización
Elemento Instancias Propósito Observaciones
Servidor Zabbix Uno por instalación Monitorización elementos del sistema Actualmente el servidor se instala centralizado y en cada nodo se instala Agente Zabbix

Típicamente irá o en BBDD replica o en nodo de gestión en instalaciones grandes

Templates zabbix Uno por instalación Adaptaciones específicas
Agente Zabbix Uno por servidor Agente de monitorización Se trata de un scripts monitorización Zabbix



Volver arriba [Volver al índice]

2.4.1 Versiones de módulos



Módulo VIVAit V.3.0.0 VIVAit V.3.1.0 VIVAit V.3.2 VIVAit V.3.4 VIVAit V.3.5 VIVAit V.3.6 VIVAit V.4.0
Sistema Operativo --- Ubuntu 14.0.4 Server 64 Kb Ubuntu 16.0.4 Ubuntu 16.0.4 y Ubuntu 18.04 Ubuntu 20 Ubuntu 20 Ubuntu 22
MySQL --- 5.5 5.7 5.7 8.0 8.0 8.0
Tomcat --- 7 8 8 9 9 9
PHP --- 5 7 7 7.4 7.4 ---
OpenJDK --- 7 8 8 11 11.0.17 ---
Asterisk (*) 13 13 13 13 13 13.21 18
Asterisk Cisco 3.3.4 3.4.4 3.5.1 3.5.4 3.5.5 3.5.5 18
Instalación BD 3.6.0 3.8.0 3.9.0 3.11.0 3.11.1 3.11.2 3.11.3
Dialplan Corp. 3.3.1 3.5.0 3.6.0 3.8.1 3.8.2 3.8.3 3.8.4
Generaconf 3.4.0 3.5.0 3.6.0 3.8.0 3.8.1 3.8.2 3.8.3
Instalador 3.4.0 3.5.0 3.6.0 3.8.0 3.9.0 3.10.0 3.11.0
Intz-gh 0.1.0 0.1.1 0.1.2 0.1.3 0.1.4
Intz-nimitz 3.4.1 3.4.2 3.4.4 3.5.0 3.7.1 3.08 4.0.0
Janus --- --- --- --- --- --- 0.0.8
Lazarus común 3.4.0 3.5.0 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4
Phone_prov 3.0.1 3.0.3 3.0.3 3.0.3 3.0.4 3.0.4 3.0.4
Portal de administración 3.4.0 3.5.0 3.6.0 3.8.0 3.8.3 3.8.5 3.8.6
Portal usuario 3.0.0 3.1.0 4.0.0 4.1.0 4.1.0 4.1.1 4.1.2
Portal webfon --- --- --- --- 1.0.0 1.0.1 1.0.2
recordCentral --- 4.0.0 4.0.1 4.0.2 4.0.3 4.0.3 4.0.4
recordgwd --- --- --- --- --- --- ---
recordNodo 4.0.0 4.0.0 4.0.0 4.0.3 4.0.3 4.0.4 4.0.5
recordprocesad --- --- --- --- --- --- ---
Sercen 0.03.01 0.03.04
Tracker Web 3.3.0 3.4.0 3.5.0 3.7.0 3.7.1 3.7.3 3.7.8
Tracker windows 3.3.0 3.4.0 3.4.0 --- --- --- ---
VIVAit Call Business --- --- --- --- --- --- ---
VIVAit Call Cloud --- --- --- --- --- --- ---
WebRTC --- --- --- --- 1.0.0 0.0.6 0.0.7



(*) La información sobre las versiones disponibles de asterisk se puede encontrar en: https://docs.asterisk.org/. Siendo la figura siguiente un resumen del estado de las últimas versiones.

Asterisk1.PNG



Volver arriba [Volver al índice]

2.4.2 Sistema Operativo



Los sistemas operativos de la plataforma VIVAit se corresponden a las versiones de Ubuntu Server LTS.
Las versiones LTS son las versiones liberadas de Ubuntu, con un soporte continuado y más estables para actualizaciones, esto se valida desde la salida de Ubuntu 14.04.1.
En la actualidad el sistema operativo utilizado para la plataforma VIVAit es Ubuntu Server 22 LTS:

     Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-94-generic x86_64)


Para más información https://releases.ubuntu.com/.

Ubuntu versions.png



Volver arriba [Volver al índice]

2.4.3 Servicios de networking



Dentro del sistema operativo (Ubuntu 22) es muy importantes la configuración adecuada de los siguientes servicios:

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



NOTA Toda esta configuración es general en la gestión de redes y no específica del sistema VIVAit, por lo que no se entra en destalles de como gestionar los diferentes servicios.
Solo se indica las funcionalidades mínimas que necesita VIVAit de ellos para funcionar correctamente.

Volver arriba [Volver al índice]

3 Descripción de los elementos del sistema VIVAit



3.1 Conmutador de voz



Para configurar el núcleo de conmutación en la plataforma VIVAit se utiliza como núcleo central la aplicación Asterisk 18.9-cert4.
https://docs.asterisk.org/Asterisk_18_Documentation/
Este software es modificado por MDtel para adaptarlo a las necesidades especificas que imponen las funcionalidades ofrecidas por VIVAit

3.1.1 Modificaciones realizadas por MDTel sobre asterisk



MDTel realiza una serie de modificaciones sobre asterisk preparando un paquete software, disponible en el proceso de provisión de VIVAit. En el siguiente documento se describen, a nivel esquemático, las modificaciones realizadas.

Actuaciones sobre asterisk de MDTel

Este paquete autoinstalable sirve al personal técnico del Dpto. de Provisión para instalar la matriz de conmutación que se modulara incluyento el dialplan que se describe a continuación.

3.1.1.1 Nueva función de asterisk: app_cli.so



Esta función permite ejecutar desde los ficheros del dialplan un comando de línea de consola de asterisk (CLI).
Su primer uso será para lanzar los notify que los teléfonos necesitan para el reaprovisionamiento posterior al reinicio desde el portal o desde la facilidad de movilidad avanzada de usuario.
Básicamente ejecuta un comando y devuelve su salida. Se utiliza un archivo intermedio, definido en [Arguments] 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 de borrarlo cuando proceda.



INSTALACIÓN

Para instalar la función basta copiar apps/app_cli.c en el directorio "apps" de los fuentes (por ejemplo: /usr/src/MDtel/MDASTCOR_Desarrollo_18.9-cert4/apps/) y luego ejecutar "make" y "make install" desde la consola del sistema operativo.
A continuación se comprueba el resultado desde la consola asterisk con el comando

           "core show function CLI" 


Resultado posible:

[Synopsis]
 Lanza un comando CLI desde dialplan
[Description] 
- CLI(nomArchSal,cmd)
- Si 'nomArchSal' está vacio, se usa '/dev/null' y no se recupera resultado
- Si 'nomArchSal'=TEMP, Se crea un archivo temporal que se borra al final
- En otro caso, se crea el archivo y no se borra
[Syntax]
CLI(nomArchSal,cmd)
[Arguments]
nomArchSal Archivo de salida (si se omite, /dev/null) cmd Comando a ejecutar via CLI
[See Also]
Not available



Volver arriba [Volver al índice]

3.1.1.2 Parche Cisco para Asterisk 18



Esta función permite a los terminales CIPT de Cisco con versión SIP registrarse y funcionar en VIVAit.
Se ha adaptado el parche Cisco existente en Asterisk 13 para la nueva versión.
Se mantienen las mismas prestaciones que existían: BLF, desvío, adaptación del plan de marcación (%23 como #), etc.

GESTIÓN
Para la funcionalidad BLF se trabaja en dos frentes:

- Incluir la función BLF en la tecla correspondiente en el fichero de provisión del teléfono, este fichero depende del modelo de terminal y suele encontrarse en el directorio /var/lib/phoneprov-tftp/plt del servidor de provisión TFTP. La generación de esta plantilla de plrovisión se realiza en el momento de homologación del terminal cisco en VIVAit por parte del Dpto. de Desarrollo de MDTel.
- Añadir el campo subscribe en la extensión desde el portal de administración



PROCEDIMIENTO
En el portal de administración:
Paso 1: Ir a Menu > VIVAIT Call > Dispositivos > Extensiones
Paso 2: Añadir Campo > Tipo SIP > Subscribe
Paso 3: Introducir en el nuevo campo el valor de la extensión a supervisar.

BLF cisco.png


Para más información [Ver extensiones]

Volver arriba [Volver al índice]

3.1.2 Dialplan



El dialplan podría considerarse la columna vertebral del sistema Asterisk.
Es una colección ordenada de acciones que se llevan a cabo cuando un usuario marca una serie de números. Hace la función de una tabla de enrutamiento de llamadas.
Todas las configuraciones generales de Asterisk están accesibles en la ruta /etc/asterisk

3.1.2.1 Conceptos básicos



EXTENSIONES

Una extensión es una marcación en el teclado de un teléfono. Dicha configuración se encuentra en el fichero 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 se deben relacionar las extensiones únicamente con números.
Algunas reglas que sería interesante conocer son 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 que se pueden marcar.

PRIORIDADES

Las acciones definidas en un script (fichero de ordenes) 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 se debe indicar el orden en el que se llevarán a cabo.


CONTEXTOS

Este mecanismo permite variar el comportamiento del sistema en función del número que se marque.
Su misión es aumentar la seguridad del sistema ofreciendo servicios diferenciados en función del usuario.
La sintaxis típica es el nombre del contexto englobado entre corchetes [nombre_contexto].
Si un dispositivo no tiene un contexto definido se redirige directamente al contexto por defecto.

Los ficheros que conforman el dialplan se clasifican en:

* Generales
* Particulares
* Web



Fichero Función
Generales Se encuentran los ficheros de propios de MDtel y Asterisk. Es importante remarcar que estos ficheros NO pueden ser modificados por el usuario.
Particular Estos ficheros son los únicos que puede modificar el usuario
Web Se encierran aquí los archivos generados automáticamente por la plataforma, a través del portal



A continuación se muestran las tablas con los ficheros correspondientes a cada dialplan.

Ficheros de configuración Dialplan Corporativo
GENERALES PARTICULARES WEB
ext_Grabaciones.conf
ext_InicioLlamada.conf
ext_InicioLlamada_Dahdi.conf
ext_InicioLlamada_ExtSIP.conf
ext_InicioLlamada_TrunkSIP.conf
ext_MARCAR_ColaCentralita.conf
ext_MARCAR_ColaCentralita_Dial.conf
ext_MARCAR_Cola.conf
ext_MARCAR_Cola_Dial.conf
ext_MARCAR.conf
ext_MARCAR_DejarMensaje.conf
ext_MARCAR_DejarMensaje_Dial.conf
ext_MARCAR_Extension.conf
ext_MARCAR_Extension_Dial.conf
ext_MARCAR_Externo.conf
ext_MARCAR_Externo_Dial.conf
ext_MARCAR_Facilidad.conf
ext_MARCAR_Facilidad_Dial.conf
ext_MARCAR_Facilidad_nimitz.conf
ext_MARCAR_Interno.conf
ext_MARCAR_LeerMensaje.conf
ext_MARCAR_LeerMensaje_Dial.conf
ext_MARCAR_Nodo.conf
ext_MARCAR_Nodo_Dial.conf
ext_MARCAR_SalasConf.conf
ext_MARCAR_SalasConf_Dial.conf
ext_MARCAR_Servicios.conf
ext_MARCAR_VDN.conf
MARCAR_VDN_Dial.conf
ext_MDtel.conf
ext_MDtel_Var.conf
ext_Subrutinas_AnchoBanda.conf
ext_Subrutinas_BD.conf
ext_Subrutinas_BD_Facilidad.conf
ext_Subrutinas_BD_Facilidad.conf
ext_Subrutinas_Colas.conf
ext_Subrutinas.conf
ext_Subrutinas_Enrutamiento.conf
ext_Subrutinas_finLlamada.conf
ext_Subrutinas_Grabacion.conf
ext_Subrutinas_nimitz.conf
ext_Subrutinas_Varias.conf
ext_Subscribe.conf
ext_Transfer.conf
ext_Transfer_ExtSIP.conf
ext_Transfer_TrunkInternos.conf
ext_TrunkInternos.conf
ext_TrunkInternos_Dial.conf
sip_Estatico.conf
sip_GENCUST.conf
sip_notify.conf
queues.conf
queues_GENERAL.conf
queues_PLANTILLACOLAS.conf
ext_Enrutador_Particular.conf
ext_InicioLlamada_Dahdi_Particular.conf
ext_InicioLlamada_ExtSIP_Particular.conf
ext_InicioLlamada_Particular.conf
ext_InicioLlamada_TrunkSIP_Particular.conf
ext_MARCAR_Extension_Particular.conf
ext_MARCAR_Externo_Particular.conf
ext_MARCAR_Facilidad_Particular.conf
ext_MARCAR_VDN_Particular.conf
ext_MDtel_Particular.conf
ext_TrunkInternos_Particular.conf
asterisk_WEB.conf
ext_MDtel_WEB.conf
sip_trunkExt_WEB.conf
sip_trunkInt_WEB.conf
sip_trunk_WEB.conf
sip_WEB.conf
queues_WEB.conf



Volver arriba [Volver al índice]

3.2 FlexiSIP



3.2.1 Introducción



Flexisip es una suite de servidores SIP completa, modular y escalable escrita en C++11, que incluye funciones de proxy, presencia y conferencia. También incluye un servicio push para enviar llamadas entrantes o mensajes de texto SIP a plataformas de dispositivos móviles donde se requieren notificaciones push para recibir información cuando la aplicación no está activa en primer plano.

MDTel utiliza FlexiSIP (Copyright © Comunicaciones Belledonne) bajo licencia GNU Affero GPLv3 para la funcionalidad VIVAit Bussiness Call (VCB), app para entornos Android e IOS integra con el asterisk de VIVAit.

Flexisip comprende los siguientes servidores, controlados como servicios del sistema:

3.2.1.1 Proxy



Incluyendo las siguientes prestacioens:

- Protocolos de transporte: SIP/UDP, SIP/TCP y SIP/TLS
- Autenticación de certificado de cliente TLS y Digest
- Enrutamiento basado en una base de datos de registro o un archivo de ruta estática, con bifurcación
- Interconectado con sistemas de notificaciones push para notificar de manera confiable a las aplicaciones móviles sobre llamadas o mensajes entrantes
- Lógica de “almacenamiento y reenvío” para SIP MESSAGE (IM) para que los mensajes de texto puedan entregarse cuando el destinatario se conecta a la red
- Compatible con NAT con un módulo de retransmisión de medios integrado y compatibilidad con ICE/STUN para registro de eventos de alto nivel para monitoreo de actividad
- Estadísticas en tiempo real disponibles a través de una interfaz de línea de comandos
- Alta disponibilidad y modo clúster para implementaciones de gran tamaño



3.2.1.2 Presencia



Flexisip gestiona SIP SUBSCRIBE y PUBLISH desde las aplicaciones del cliente, con el fin de

- Identificar a los usuarios del servicio dentro de la libreta de direcciones
- Proporcionar a los usuarios el estado de presencia en tiempo real



3.2.1.3 Conferencia



El servidor de conferencia aporta las siguientes funciones:

- Conferencia IM, audio y video.
- Solución totalmente basada en SIP
- Gestión eficiente de grupos y participantes
- Compatibilidad con múltiples dispositivos
- Notificaciones de eventos grupales (usuarios que se unen o abandonan, nuevos administradores, etc.)
- Las conferencias de audio y video son compatibles a partir de la versión 2.3. Las versiones anteriores solo realizan conferencias de mensajería instantánea (chat grupal).



3.2.1.4 B2BUA



El servidor de agente de usuario back-to-back proporciona servicios de señalización y medios a nivel de llamada específicos que no pueden ser prestados por el proxy, como son:

- transcodificación de protocolos de cifrado de medios
- SIP trunking

El objetivo de FlexiSIP es ofrecer de manera inmediata todos los comportamientos necesarios para implementar un servicio SIP adaptado a aplicaciones móviles.

3.2.2 Configuración y funcionamiento



La configuración de FlexiSIP se define mediante un único archivo de configuración:

               /etc/flexisip/flexisip.conf.

Se suministra una plantilla de configuración con documentación completa de secciones y claves, y sus valores predeterminados, invocando:

               flexisip --dump-default all

y se instala en

               /etc/flexisip/flexisip.conf.sample

para que pueda ser ajustado por el administrador.
Además del archivo de configuración, se encuentran disponibles una línea de comandos denominada flexisip_stats.py y una interfaz SNMP que permiten la administración remota o la reconfiguración en tiempo de ejecución del servidor.
Tanto flexisip_stats.py como SNMP permiten listar y obtener en tiempo real estadísticas internas del proceso Flexisip.

Nota debido a la complejidad de la configuración del demonio SNMP y las herramientas en Linux, la herramienta flexisip_stats.py es la forma recomendada de interactuar con las estadísticas y la configuración de Flexisip (como el nivel de detalle de los registros) en tiempo de ejecución. Esta herramienta simplemente utiliza un socket UNIX para conectarse al demonio Flexisip.

Flexisip genera registros de aviso, error o depuración a través de syslog, que se envían a los registros en los sistemas compatibles con systemd.

Además, se pueden habilitar registros de eventos para registrar llamadas, mensajes y actividad de registro, por usuario, en una base de datos MySQL.

Volver arriba [Volver al índice]

3.2.3 Interfuncionalidad FlexiSIP - Asterisk



3.2.3.1 VIVAit Business Call (VCB)



MDTel ha desarrollado una aplicación móvil para VIVAit (VIVAit Call Business, en adelante VCB). Desarrollo basado en software libre Linphone de Belledonne Communications.
Es una aplicación que permite la comunicación entre usuarios mediante llamadas de audio/vídeo y chat. Sus principales funciones son:

- Llamadas de audio y vídeo con calidad seleccionable.
- Conferencia entre múltiples participantes.
- Chat entre participantes con texto simple, texto enriquecido, emojis, ficheros...
- Posibilidad de cifrado. El dispositivo se comunica a través de redes de comunicaciones 3G/4G/5G y WiFi, y contempla la gestión de memoria y batería del sistema operativo.



REGISTRO DE VCB

Para obtener la aplicación VCB:

- Descargar e instalar la aplicación: desde Play Store para sistemas operativos Android o App Store en caso de sistemas operativos IOS .

Para registra la aplicación en asterisk:

- Usar cuenta SIP, opción para configurar una cuenta de forma manual, hay que introducir el nombre de usuario, la contraseña de usuario, dominio, el nombre a mostrar en la aplicación (es opcional) y seleccionar el protocolo de transporte (UDP, TCP o TLS).
- Buscar la configuración remota, opción de configuración en la que asocia el usuario con la aplicación VCB mediante escaneo de un código QR. Al seleccionar el botón de “Código QR”, el asistente abrirá la cámara del móvil para escanear el código que aparece en el portal de usuario.



VCB 1.png



INTERFAZ DE VCB

VCB es válida para móviles IOS y Android y permite gestionar las comunicaciones de voz con una amigable interfaz de usuario.
La pestaña principal de la aplicación se compone de:

VCB 2.png



Pestaña de opciones
La pestaña de opciones se compone de:

VCB 3.png



Pestaña de configuración
La pestaña de configuración sirve para modificar los diferentes elementos de la aplicación. (Audio, video, Llamadas, red de conexión, contactos o ajustes avanzados).

VCB 4.png



Llamada entrante
En una llamada entrante, aparece una ventana emergente similar a la que se muestra a continuación:

VCB 5.png



A continuación se muestra un ejemplo de la pantalla tras seleccionar el botón de despliegue de llamada:

VCB 6.png



En conversación
En una llamada establecida, aparece una pestaña con:

VCB 7.png



En una llamada establecida, al seleccionar el botón de Menú de opciones se muestra una pestaña con las siguientes opciones:

VCB 8.png



Volver arriba [Volver al índice]

3.2.3.2 Servicio PUSH llamadas desde VCB



El servicio push de FlexiSIP sirve para enviar llamadas entrantes SIP o mensajes de texto en el dispositivo móvil del usuario en el que está instalda la app VCB, ya que se requieren notificaciones push para recibir información cuando VCB no está activa en primer plano.
En este entorno FlexiSIp actúa como proxy en el registro de los terminales cuando estos inician actividad. A partir de este momento el terminal puede realizar llamadas.

Flexisip push.png



Volver arriba [Volver al índice]

3.2.3.3 Servicio PUSH llamadas a VCB



El nodo asterisk inicia una llamada hacia VCB vía nodo FlexiSIP, este retrasmite la petición al terminal que puede responder o no según su estado.
En el caso de ausencia de respuesta se incia el servicio push para activar el terminal desde FlexiSIP con la secuencia descrita a continuación:

Flexisip push 1.png



Flexisip push 2.png



Volver arriba [Volver al índice]

3.3 Janus



Janus es un servidor WebRTC de propósito general.
Este programa es software libre, distribuido bajo los términos de la Licencia Pública General GNU versión 3.
El servidor WebRTC Janus v0.10.10 ©2014-2024 Meetecho (https://www.meetecho.com/
Meetecho Janus (WebRTC Server) v0.10.10 no proporciona ninguna funcionalidad en sí, salvo implementar los medios para establecer una comunicación multimedia WebRTC con un navegador, intercambiar mensajes JSON con él y retransmitir RTP/RTCP y mensajes entre los navegadores y la lógica de la aplicación del lado del servidor a la que están conectados.
Cualquier característica o aplicación específica debe implementarse en complementos del lado del servidor, con los que los navegadores pueden comunicarse a través del núcleo de Janus para aprovechar la funcionalidad que proporcionan.

Algunos ejemplos de estos complementos pueden ser:

- las implementaciones de aplicaciones como pruebas de eco,
- puentes de conferencia,
- grabadoras multimedia,
- puertas de enlace SIP y
- similares.



Volver arriba [Volver al índice]

3.3.1 Arquitectura y API




El núcleo del servidor se especifica en la sección Núcleo . Los protocolos implementados en el núcleo de Janus se enumeran en el grupo Protocolos . En la página de documentación de complementos se incluye una lista de complementos que Meetecho proporciona de forma predeterminada : estos complementos se pueden cambiar o ampliar para que se ajusten a sus requisitos, o simplemente se pueden usar como una simple referencia si está interesado en escribir un nuevo complemento desde cero (¡y definitivamente es bienvenido a hacerlo!). También se incluye una API de complementos para crear nuevos complementos o comprender cómo se conciben. En las páginas de API de JavaScript y API de RESTful, WebSockets, RabbitMQ, MQTT , Nanomsg y UnixSockets se puede encontrar documentación sobre los transportes de API disponibles y la API de JavaScript HTTP/WebSocket para usar Janus y los complementos que pone a disposición en su aplicación web. Se puede encontrar documentación sobre los transportes de API disponibles y la API de JavaScript HTTP/WebSockets para usar Janus y los complementos que pone a disposición en su aplicación web . Se pueden crear nuevos transportes de API haciendo referencia a la página de API de transporte . Si está interesado en monitorear los recursos de Janus, puede consultar la página de API de administración/monitorización . También se pueden utilizar complementos de controladores de eventos para este propósito: consulte la documentación de controladores de eventos y, para obtener más información orientada al desarrollador, consulte la página de la API de controladores de eventos si está interesado en crear su propio. En lo que respecta al registro, Janus admite de forma predeterminada la impresión de la salida y su almacenamiento en un archivo local, pero el registro también se puede ampliar a través de complementos adicionales: consulte la API de registrador para obtener más detalles y aprender a escribir su propio código. Puede consultar la página Escritura de código para Janus para obtener algunos detalles sobre cómo configurar su entorno de desarrollo local para Janus.stdout Janus también admite grabaciones de fábrica, así que consulte la documentación relacionada para obtener más información sobre cómo funciona.

Volver arriba [Volver al índice]

3.3.2 Janus y VIVAit



Por último, en la página Implementación de Janus se proporciona información sobre cómo implementar Janus y las aplicaciones web que quieran utilizarlo . Si está interesado en iniciar Janus como un servicio/demonio en lugar de iniciarlo de forma normal, consulte la información proporcionada en la página Janus como demonio/servicio . También se incluyen algunos recursos adicionales en caso de que esté interesado en hablar con Janus desde diferentes lenguajes y plataformas.

CONFIGURACIÓN

Una vez instalado el servicio en el nodo correspondiente la configuración se encuentra en el fichero:

      /etc/janus/vivait.plugin.webfon.jcfg

Entre otros parámetros que se muestran en este fichero los más importantes para la funcionalidad WEB Call son:

- local_nodo_id = 4 -> ID NODO EN BDTR
- colas_limpiar_siempre = false -> SI SE TRABAJA CON POLL DE CONEXIONES a true
- local_ip = "172.25.0.22" -> IP PRIVADA RED DE VOZ
- max_digi_llam_sal = 10 -> NUMERO MAXIMO DE DIGITOS EN LLAMADAS SALIENTES DE LA EXTENSION



Volver arriba [Volver al índice]

3.3.3 VIVAit Call Web






Volver arriba [Volver al índice]

3.4 Base de datos (BBDD)



La base de datos del sistema esta constituida por el motor de base de datos MySQL.
Es un elemento crítico del sistema, ya que:

- En la BBDD insertan y obtienen información múltiples procesos.
- Muchas comunicaciones entre procesos se realizan vía BBDD.

Pueden existir distintas instancias de base de datos que se explican en las siguientes secciones.
La base de datos de VIVAit se llama nimit y está estructura en tablas. Estas tablas se puede consultar en la descripción completa de la BD.
Se puede ampliar más información en la página de documentación mysql

3.4.1 BBDD Tiempo Real (DBTR)



DBTR es única en el sistema y se despliega y configura en le proceso de instalación de un cliente a partir de un paquete ya preparado por el Dpto. de Desarrollo de MDTel.
En DBTR tienen lugar dos procesos fundamentales:

- Operaciones básicas de creación, lectura, modificación y borrado de información (CDRU) por parte de todos los procesos del sistema y desde el portal de administración.
- De DBTR leen los procesos y aplicaciones que requieren información de manera inmediata:
* VIVAit Supervisor (para reporting de tiempo real)
* PanelWeb
* VIVAit Call Web
* Datos de sesión de VIVAit Desk
* Monitorización Zabbix
* Otros


Existe un script que borra el contenido de ciertas tablas de la BBDD (tablas DAT_) dejando solo información de un número determinado de días (configurable).
Esto se realiza para evitar el colapso de estas tablas por número masivo de registros.
Este script se llama

   borraRegistrosNimitz.pl

Para más información Ver Howto's.

Por defecto, en la versión 4.0 de la plataforma, los registros se mantienen 2 meses.

Volver arriba [Volver al índice]

3.4.2 BBDD Réplica (DBHIST)



DBHIST se despliega, configura y sincroniza con DBTR en le proceso de instalación de un cliente a partir de un paquete ya preparado por el Dpto. de Desarrollo de MDTel.
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 consultan 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 réplica
Algunos procesos que utilizan la base de datos de réplica son:

* VIVAit Reporting
* VIVAit Tracker
* Histórico en tiempo real de VIVAit Supervisor



IMPORTANTE: Ningún proceso, programa, aplicación, etc. escribe en la base de datos de réplica; tan solo se extrae información

Volver arriba [Volver al índice]

3.4.3 BBDD Copia (DBCOPIA)



A efectos de asegurar el funcionamiento y como medida de contingencia ante un problema puntual de comunicación con la DBTR (no accesible por algunas partes del sistema), en cada nodo disponemos de una BD de copia local. Posiblemente de un tamaño menor que la BDTR, dependiendo de cuanto tiempo pase hasta la próxima sincronización con la base de tiempo real.
Esta base de datos llamada nimitzCopia.
Solo entrará en funcionamiento, cuando se produzca el problema mencionado, dejando acceder a los datos y poder dar servicio a la empresa mientras se soluciona el problema.


3.4.3.1 Backup y restore



Se utilizan dos script, para realizar la copia de seguridad y restaurar en la base de datos de copia local que son:

* El proceso bdCentral.sh que es el encargado de realizar la copia de seguridad.
Tiene un archivo de configuración bdCentral.conf. En este archivo hay un parámetro (IGNORE_TABLAS) que indica las tablas de las que NO se realizará copia de seguridad. Toda tabla que no se indique formará parte de la copia de seguridad. Vuelca los resultados en:
         /var/log/bdCentral.log
* El proceso bdNodo.sh que es el encargado de descargar la copia de seguridad y restaurarla en local, siempre que DBTR este disponible.
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".

Volver arriba [Volver al índice]

3.4.3.1.1 Proceso bdCentral



El proceso bdCentral.sh es el encargado de realizar la copia de seguridad. Se ejecuta en los nodos en los que se desea tener un backup de la BDTR.
Tiene un archivo de configuración bdCentral.conf en la ruta /etc/MDtel/bdCentral.conf. En este archivo hay un parámetro (IGNORE_TABLAS) que indica las tablas de la DBTR de las que NO se realizará copia de seguridad. Toda tabla que no se indique formará parte de la copia de seguridad.
Se puede seguir la ejecución del proceso consultando el fichero:

         /var/log/bdCentral.log

En caso de producirse algún error, se marcará dicho error en el fichero .log con una línea que comienza con la cadena "*ERROR".


EJECUCIÓN DEL PROCESO bdCentral

Este proceso se puede ejecutar de dos formas diferentes:

- Manualmente ejecutando, en los nodos en los que se desea tener un backup de la BDTR, el comando:
        bdCentral.sh /etc/MDtel/bdCentral.conf
- Automáticamente copiando el fichero bdCentral a:
        /etc/cron.d
en los nodos en los que se desea tener un backup de la BDTR.



FICHEROS LOG de bdCentral

Para que se roten los logs hay que copiar el fichero bdCentral.logrotate a:

          /etc/logrotate.d/

renombrándolo como bdCentral.
El contenido del fichero bdCentral es similar a este:

 root@preproduccioncorp0:/# cat /etc/logrotate.d/bdCentral
 /var/log/bdCentral.log {
     daily
     missingok
     rotate 31
     compress
     copytruncate
 }

root@preproduccioncorp0:/#
La explicación de este fichero es la siguiente:

- Esta configuración hará que el fichero log rote diariamente (daily),
. se comprima (compress),
- realiza una copia del fichero original y luego vacía el fichero para que los procesos que estaban trabajando con ese fichero puedan seguir haciéndolo a pesar de la rotación, (copytruncate),
- se conserve durante un máximo de 31 días (rotate 31),
- si el archivo de registro no existe, se creará sin generar ningún error (missingok).
- indicando la ruta donde se almacenará bdCentral.log (/var/log/).



FICHERO DE CONFIGURACIÓN de bdCentral

Por defecto la programación vienen comentada por lo que será necesario activarla.
El contenido del fichero /etc/MDtel/bdCentral.conf es la siguiente:

ARCH_LOG=/var/log/bdCentral.log

BDHOST=DBTR
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 de la máquina o HOST donde se encuentra la DBTR
BDUSU Usuario de acceso a DBTR
BDCLAVE Clave del usuario para acceso a DBTR
BDRUTA Ruta donde se depositará el volcado de la base de datos
IGNORE_TABLAS Tablas de las que no se desea hacer backup



Volver arriba [Volver al índice]

3.4.3.1.2 Proceso bdNodo



El proceso bdNodo.sh es el encargado de descargar la copia de seguridad de DBTR y restaurarla en local a DBCOPIA.
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".

EJECUCIÓN DEL PROCESO bdNodo

Este proceso se puede ejecutar de dos formas diferentes:

- Manualmente ejecutando en cada nodo en el que se desee una DBCOPIA el comando:
        bdNodo.sh /etc/MDtel/bdNodo.conf
- Automáticamente copiando el fichero bdNodo a:
        /etc/cron.d
en cada servidor en el que se desee una DBCOPIA .



FICHEROS LOG de bdNodo

Para que se roten los logs hay que copiar el fichero bdNodo.logrotate a:

          /etc/logrotate.d/

renombrándolo como bdNodo.
El contenido del fichero /etc/logrotate.d/dbNodo es similar a este:

 /var/log/bdNodo.log {
     daily
     missingok
     rotate 31
     compress
     copytruncate
   }


La explicación de este fichero es la siguiente:

- Esta configuración hará que el fichero .log rote diariamente (daily),
. se comprima (compress),
- realiza una copia del fichero original y luego vacía el fichero para que los procesos que estaban trabajando con ese fichero puedan seguir haciéndolo a pesar de la rotación, (copytruncate),
- se conserve durante un máximo de 31 días (rotate 31),
- si el archivo de registro no existe, se creará sin generar ningún error (missingok).
- indicando la ruta donde se almacenará bdNodo.log (/var/log/).



FICHERO DE CONFIGURACIÓN de bdNodo

Por defecto la programación vienen comentada por lo que será necesario activarla.
El contenido del fichero /etc/MDtel/bdNodo.conf es la siguiente:

ARCH_LOG=/var/log/bdNodo.log

BDHOST=DBTR
BDUSU=adminNimitz
BDCLAVE=imdtelnimitz
BDRUTA=/var/lib/MDtel/backupBDnimitz

SCPHOST=BDTR


  • A continuación se explica los campos mas relevantes del fichero de configuración bdNodo.conf.
Campo Descripción Posibles valores (si aplica)
ARCH_LOG /RUTA/FICHERO de log del proceso
BDHOST IP de la máquina o HOST donde se encuentra la DBTR
BDUSU Usuario de acceso a DBTR
BDCLAVE Clave del usuario para acceso a DBTR
BDRUTA Ruta donde se depositará el volcado de la base de datos
SCPHOST Servidor de donde se transferirán de forma segura los ficheros para crear DBCOPIA



Volver arriba [Volver al índice]

3.4.4 Diagnósticos y operaciones sobre bases de datos



3.4.4.1 Diagnóstico sobre la BBDD



* Comando ps

Para comprobar si la base de datos está arrancada se puede usar la consola de ubuntu en el servidor donde esté instalada:

   ps aux | grep mysql

Si la base de datos está arrancada y funcionando correctamente se mostrará en el terminal:

   root@preproducciongestion:~# ps aux | grep mysql
   mysql        829  0.9  2.4 2862880 96188 ?       Ssl  Oct08  88:14 /usr/sbin/mysqld
   root       48497  0.0  0.0   4028  1980 pts/1    S+   12:41   0:00 grep --color=auto mysql
   root@preproducciongestion:~# /mysqld



Cualquier otro resultado del comando indica que existe un problema que es necesario analizar.


* Comando systemctl



Con este comando se puede comprobar, arrancar, parar o reiniciar el servicio mysql en los nodos con BBDD (DBTR, DBTHIST).

  systemctl status/stop/start/reboot mysql.service



EJEMPLO

 root@vm-gestion:~# systemctl status mysql.service
 ● mysql.service - MySQL Community Server
      Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
      Active: active (running) since Tue 2024-10-15 10:35:50 CEST; 8min ago
     Process: 525030 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
    Main PID: 525038 (mysqld)
      Status: "Server is operational"
       Tasks: 42 (limit: 2220)
      Memory: 361.9M
         CPU: 10.449s
      CGroup: /system.slice/mysql.service
              └─525038 /usr/sbin/mysqld
 Oct 15 10:35:39 vm-gestion systemd[1]: Starting MySQL Community Server...
 Oct 15 10:35:50 vm-gestion systemd[1]: Started MySQL Community Server.
 root@vm-gestion:~#



3.4.4.2 Comprobación que DBHIST está sincronizada con DBTR



Si se necesita verificar que la base de réplica (DBHIST) está sincronizada con la base de datos en tiempo real (DBTR) se seguirá el siguiente proceso:

Paso 1: Iniciar sesión en la consola mysql desde la consola ubuntua tras introducir las credenciales correspondientes:

 root@vm-gestion:~# mysql -u root -p
 Enter password:
 Welcome to the MySQL monitor.  Commands end with ; or \g.
 Your MySQL connection id is 19
 Server version: 8.0.36-0ubuntu0.22.04.1 (Ubuntu)
 
 Copyright (c) 2000, 2024, Oracle and/or its affiliates.
 
 Oracle is a registered trademark of Oracle Corporation and/or its
 affiliates. Other names may be trademarks of their respective
 owners.
 
 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
 mysql>



Paso 2: Desde la consola mysql utilizar el comando:

  show slave status\G

Paso 3: Analizar el resultado:
A modo de ejemplo se muestra el resultado de una sincronización correcta entre ambas DDBD:

 mysql> show slave status\G
 *************************** 1. row ***************************
                Slave_IO_State: Waiting for source to send event
                   Master_Host: 172.25.128.94
                   Master_User: replicador
                   Master_Port: 3306
                 Connect_Retry: 60
               Master_Log_File: mysql-bin.000369
           Read_Master_Log_Pos: 12922458
                Relay_Log_File: vm-gestion-relay-bin.000314
                 Relay_Log_Pos: 530906
         Relay_Master_Log_File: mysql-bin.000369
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes
               Replicate_Do_DB:
           Replicate_Ignore_DB:
            Replicate_Do_Table:
        Replicate_Ignore_Table:
       Replicate_Wild_Do_Table: nimitz.%
   Replicate_Wild_Ignore_Table:
                    Last_Errno: 0
                    Last_Error:
                  Skip_Counter: 0
           Exec_Master_Log_Pos: 12922458
               Relay_Log_Space: 12094628
               Until_Condition: None
                Until_Log_File:
                 Until_Log_Pos: 0
            Master_SSL_Allowed: No
            Master_SSL_CA_File:
            Master_SSL_CA_Path:
               Master_SSL_Cert:
             Master_SSL_Cipher:
                Master_SSL_Key:
         Seconds_Behind_Master: 0
 Master_SSL_Verify_Server_Cert: No
                 Last_IO_Errno: 0
                 Last_IO_Error:
                Last_SQL_Errno: 0
                Last_SQL_Error:
   Replicate_Ignore_Server_Ids:
              Master_Server_Id: 3
                   Master_UUID: 8f237349-80ca-11eb-9526-5254003dbcdb
              Master_Info_File: mysql.slave_master_info
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
            Master_Retry_Count: 86400
                   Master_Bind:
       Last_IO_Error_Timestamp:
      Last_SQL_Error_Timestamp:
                Master_SSL_Crl:
            Master_SSL_Crlpath:
            Retrieved_Gtid_Set:
             Executed_Gtid_Set:
                 Auto_Position: 0
          Replicate_Rewrite_DB:
                  Channel_Name:
            Master_TLS_Version:
        Master_public_key_path:
         Get_master_public_key: 0
             Network_Namespace:
 1 row in set, 1 warning (0.01 sec)


mysql>



Comandos importantes, desde consola de mysql

- show master status: desde el servidor con DBTR
- show slave status: desde el esclavo con DBHIST
El valor del parámetro seconds behind master indica cuanto está retrasada DBHIST con respecto a DBTR.
Si el valor de este campo es elevado indicará que DBHIST no está sincronizada con DBTRcon la réplica no estará sincronizada.
Si el valor es NULL indica que la sincronización está parada.
Interesa que este valor sea lo más pequeño posible.



Volver arriba [Volver al índice]

3.4.5 Tabla Dat_Log



En la tabla Dat_log se encuentra el histórico de las operaciones realizadas por las aplicaciones en la BBDD.
En ella se registran todos los cambios que realizan los usuarios a través de las diferentes aplicaciones (Portal de administración, Supervisor, Meet, Alertas, ...).

La tabla está formada por los siguientes campos: BD.DAT_LOG
A continuación se especifican algunos de los posibles valores de los campos, en función del valor de E_ACCION.

E_ACCION Nº E_ACCION TAccionLog Descripción de la acción `C_TABLA` `ID_REGISTRO` `N_PAR1` `N_PAR2` `C_PAR3` `C_PAR4`
10 accionLog_escuchar_seg Escuchar segmento
20 accionLog_escuchar_lla Escuchar llamada
30 accionLog_descargar_seg Descargar segmento
40 accionLog_descargar_lla Descargar llamada
50 accionLog_generar_config Generar configuración
60 accionLog_cambiar_clave_propia Cambiar clave propia
65 accionLog_login_correcto Login correcto idUsuario nivelSupervisor
70 accionLog_login_erroneo Login erroneo
80 accionLog_login_multiple Login multiple
90 accionLog_escuchar_ext Escuchar Extensión
100 accionLog_chg_objetivo_peso Modificar nivel servicio idCola objetivo peso
105 accionLog_add_agente_cola_bd Añadir agente a grupo BD idCola agente prioridad obligatorio
115 accionLog_del_agente_cola_bd Quitar agente de grupo BD idCola agente
125 accionLog_prio_agente_cola_bd Modificar prioridad agente en grupo BD idCola agente prioridad obligatorio
135 accionLog_perfil_agente_bd Asignar perfil a agente BD idAgente perfil
140 accionLog_add_agente Añadrid agente
145 accionLog_del_agente Borrar agente
150 accionLog_chg_agente Modificar agente idAgente nombre cuenta
155 accionLog_add_agenda_perfil Añadir agenda a perfil idPerfil idAgenda
160 accionLog_del_agenda_perfil Borrar agenda de perfil idPerfil idAgenda
165 accionLog_add_entrada_agenda Añadir entrada a agenda idAgenda nombre numero
170 accionLog_del_entrada_agenda Borrar entrada de agenda idEntrada idAgenda nombre numero
175 accionLog_chg_entrada_agenda Modificar entrada de agenda idEntradaAgenda nombre numero
180 accionLog_add_agenda Añadir agenda nombre descripción
185 accionLog_del_agenda Borrar agenda
190 accionLog_chg_agenda Modificar agenda idAgenda nombre descripción
195 accionLog_add_etiqueta_agente Añadir etiqueta agente nombre descripción
200 accionLog_del_etiqueta_agente Borrar etiqueta agente idEtiqueta
205 accionLog_chg_etiqueta_agente Modificar etiqueta agente idEtiqueta nombre descripción
210 accionLog_add_rel_etiqueta_agente Añadir relación etiqueta agente idEtiqueta idUsuario
215 accionLog_del_rel_etiqueta_agente Borrar relación etiqueta agente idEtiqueta idUsuario
220 accionLog_chg_rel_etiqueta_agente Modificar relación etiqueta agente idEtiqueta idUsuario
225 accionLog_add_perfil Añadir perfil nombre descripción
230 accionLog_del_perfil Borrar perfil idPerfil
235 accionLog_chg_perfil Modificar perfil idPerfil nombre descripción
240 accionLog_add_rel_cola_perfil_bd Añadir relación grupo ACD/perfil BD idCola idPerfil prioridad obligatorio
250 accionLog_del_rel_cola_perfil_bd Borrar relación grupo ACD/perfil BD idCola idPerfil prioridad obligatorio
260 accionLog_chg_rel_cola_perfil_bd Modificar relación grupo ACD/perfil BD idCola idPerfil prioridad obligatorio
265 accionLog_add_cola Añadir grupo ACD nombre descripción
270 accionLog_del_cola Borrar grupo ACD
275 accionLog_chg_cola Modificar grupo ACD idAgente nombre descripción
280 accionLog_add_campanna_cola_bd Añadir campaña a grupo ACD BD idCola idCampanna
285 accionLog_del_campanna_cola_bd Borrar campaña de grupo ACD BD
290 accionLog_chg_cola_algor_predic Cambiar algoritmo predictivo de grupo ACD
300 accionLog_enviar_msj Enviar mensaje tipo_msj ambito id_ambito N_VAR1 N_VAR2 C_VAR3
305 accionLog_cerrar_sesion Cerrar sesión idUsuario forzado segundos fecha motivo
310 accionLog_activa_campanna_bd Activar campaña idCampanna activa
320 accionLog_grabacion_sombra Grabación en la sombra
330 accionLog_add_filtro_contactos
335 accionLog_del_filtro_contactos
340 accionLog_chg_filtro_contactos
350 accionLog_add_val_filtro_contactos
355 accionLog_del_val_filtro_contactos
400 accionLog_activar_contactos idCampanna
405 accionLog_cancelar_contactos idCampanna
410 accionLog_orden_contactos idCampanna
415 accionLog_prioridad_contactos idCampanna
ACCIÓN LOGS PORTAL: Faltan añadir en la BD (Datos versión) y Revisar si ya existen. Poner los parámetros
5310 accionLog_chg_acd_configuracion
5315 accionLog_add_acd_finales
5320 accionLog_chg_acd_finales
5325 accionLog_del_acd_finales
5330 accionLog_add_acd_formularios
5335 accionLog_chg_acd_formularios
5340 accionLog_del_acd_formularios
5345 accionLog_add_acd_pausas
5350 accionLog_chg_acd_pausas
5355 accionLog_del_acd_pausas
5359 accionLog_add_cen_molticanal_texto_entrada
5360 accionLog_add_acd_supercolas
5361 accionLog_del_cen_molticanal_texto_entrada
5362 accionLog_udel_cen_molticanal_texto_entrada
5363 accionLog_add_cen_molticanal_texto_salida
5364 accionccionLog_chg_cen_molticanal_texto_salida
5365 accionLog_chg_acd_supercolas
5366 accionLog_udel_cen_molticanal_texto_salida
5367 accionLog_chg_cen_molticanal_texto_entrada
5368 accionLog_del_cen_molticanal_texto_salida
5370 accionLog_del_acd_supercolas
5375 accionLog_udel_acd_supercolas
5380 accionLog_add_acd_vdn
5385 accionLog_chg_acd_vdn
5390 accionLog_del_acd_vdn
5395 accionLog_udel_acd_vdn
5396 accionLog_add_cen_vdn
5397 accionLog_chg_cen_vdn
5398 accionLog_del_cen_vdn
5399 accionLog_udel_cen_vdn
5400 accionLog_add_campos
5405 accionLog_chg_campos
5410 accionLog_del_campos
5415 accionLog_add_categorias
5420 accionLog_chg_categorias
5425 accionLog_del_categorias
5430 accionLog_chg_com_configuracion
5435 accionLog_add_nodos
5440 accionLog_chg_nodos
5445 accionLog_del_nodos
5450 accionLog_udel_nodos
5455 accionLog_add_sedes
5460 accionLog_chg_sedes
5465 accionLog_del_sedes
5470 accionLog_udel_sedes
5475 accionLog_add_dat_sincroniza
5480 accionLog_chg_dat_sincroniza
5485 accionLog_add_extensiones
5490 accionLog_chg_extensiones
5495 accionLog_del_extensiones
5500 accionLog_udel_extensiones
5505 accionLog_add_facilidades
5510 accionLog_chg_facilidades
5515 accionLog_del_facilidades
5520 accionLog_add_locuciones
5525 accionLog_chg_locuciones
5530 accionLog_del_locuciones
5535 accionLog_add_musica
5540 accionLog_chg_musica
5545 accionLog_del_musica
5550 accionLog_add_permisos
5555 accionLog_chg_permisos
5560 accionLog_del_permisos
5565 accionLog_add_plantillas
5570 accionLog_chg_plantillas
5575 accionLog_del_plantillas
5580 accionLog_add_puestos_extensiones
5585 accionLog_chg_puestos_extensiones
5590 accionLog_del_puestos_extensiones
5595 accionLog_des_puestos_extensiones
5600 accionLog_add_usuarios
5605 accionLog_chg_usuarios
5610 accionLog_del_usuarios
5615 accionLog_udel_usuarios
5620 accionLog_chg_licencias
ACCIONES DE LOS EJES
5705 accionLog_chg_Eje
5710 accionLog_out_Eje_Padre
5715 accionLog_del_Eje
5720 accionLog_add_Eje
5725 accionLog_set_Eje_Padre
5730 accionLog_add_acd_pausas_usuarios
5735 accionLog_del_acd_pausas_usuarios
5740 accionLog_add_centros_dispositivos
5745 accionLog_chg_centros_dispositivos
5750 accionLog_del_centros_dispositivos
5755 accionLog_add_centros_extensiones
5760 accionLog_chg_centros_extensiones
5765 accionLog_del_centros_extensiones
5770 accionLog_add_acd_usuarios
5775 accionLog_chg_acd_usuarios
5780 accionLog_add_relacion_campos
5785 accionLog_del_relacion_campos
5786 accionLog_chg_grabacion_configuracion
5787 accionLog_add_campannas
5788 accionLog_chg_campannas
5789 accionLog_del_campannas
5790 accionLog_udel_campannas
5791 accionLog_add_lista_contactos
5792 accionLog_chg_lista_contactos
5793 accionLog_del_lista_contactos
5794 accionLog_udel_lista_contactos
5795 accionLog_add_lista_llamames
5796 accionLog_chg_lista_llamames
5797 accionLog_del_lista_llamames
5798 accionLog_udel_lista_llamames
5799 accionLog_add_lista_robinson
5800 accionLog_chg_lista_robinson
5801 accionLog_del_lista_robinson
5802 accionLog_udel_lista_robinson
5803 accionLog_add_contacto
5804 accionLog_chg_contacto
5805 accionLog_del_contacto
5806 accionLog_udel_contacto
5807 accionLog_import_contactos
5808(*) accionLog_add_contacto_campanna
5818 accionLog_chg_contacto_campanna
5809 accionLog_chk_exist_contacto_campanna
5810 accionLog_add_contacto_lista
5811 accionLog_chk_exist_contacto_lista
5812 accionLog_del_contacto_lista
5813 accionLog_add_estrategia
5814 accionLog_chg_estrategia
5815 accionLog_del_estrategia
5816 accionLog_udel_estrategia
5817(*) accionLog_chk_exist_contacto
5818 accionLog_add_telefono_robinson
5819 accionLog_chg_telefono_robinson
5820 accionLog_del_telefono_robinson
5821 accionLog_chk_exist_robinson_lista
5822 accionLog_add_dat_click2call
5823 accionLog_chg_dat_click2call
5824 accionLog_del_dat_click2call
5825 accionLog_chk_exist_dat_click2call
5826 accionLog_add_aplicaciones
5827 accionLog_chg_aplicaciones
5828 accionLog_del_aplicaciones
5829 accionLog_add_cen_destinos
5830 accionLog_chg_cen_destinos
5831 accionLog_del_cen_destinos
5832 accionLog_add_acd_monitores
5833 accionLog_chg_acd_monitores
5834 accionLog_del_acd_monitores
5835 accionLog_add_campos_monitor_8
5836 accionLog_chg_campos_monitor_8
5837 accionLog_del_campos_monitor_8
5838 accionLog_add_agendas
5839 accionLog_chg_agendas
5840 accionLog_del_agendas
5841 accionLog_add_agendas_telefonos
5842 accionLog_chg_agendas_telefonos
5843 accionLog_del_agendas_telefonos
5844 accionLog_add_agendas_campos_cliente
5845 accionLog_chg_agendas_campos_cliente
5846 accionLog_del_agendas_campos_cliente
GRUPOS DE SALTO
5847 accionLog_add_grupos_salto
5848 accionLog_chg_grupos_salto
5849 accionLog_del_grupos_salto
5850 accionLog_udel_grupos_salto
GRUPOS DE CAPTURA
5851 accionLog_add_grupos_captura
5852 accionLog_chg_grupos_captura
5853 accionLog_del_grupos_captura
5854 accionLog_udel_grupos_captura
5855 accionLog_add_grupos_locuciones
5856 accionLog_chg_grupos_locuciones
5857 accionLog_del_grupos_locuciones
5858 accionLog_udel_grupos_locuciones
INFORMES DE CALIDAD
5859 accionLog_add_informes_calidad
5860 accionLog_chg_informes_calidad
5861 accionLog_del_informes_calidad
5862 accionLog_udel_informes_calidad
En todas se inserta el idUsuario, TAplicacion.CALL_CENTER, TComponentes.PORTAL_DE_ADMINISTRADOR, Código de la acción, "ACD_INFORME_CALIDAD", el id del informe
PREGUNTAS DE CALIDAD
5863 accionLog_add_preguntas_calidad
5864 accionLog_chg_preguntas_calidad
5865 accionLog_del_preguntas_calidad
5866 accionLog_udel_preguntas_calidad
En todas se inserta el idUsuario, TAplicacion.CALL_CENTER, TComponentes.PORTAL_DE_ADMINISTRADOR, Código de la acción, "ACD_PREGUNTAS_CALIDAD", el id de la pregunta
SALAS MEET
5867 accionLog_add_sala_meet
5868 accionLog_add_perfil_sala_meet
5869 accionLog_add_grupo_sala_meet
5870 accionLog_chg_sala_meet
5871 accionLog_chg_perfil_sala_meet
5872 accionLog_chg_grupo_sala_meet
5873 accionLog_del_sala_meet
5874 accionLog_del_perfil_sala_meet
5875 accionLog_del_grupo_sala_meet
5876 accionLog_udel_sala_meet
5877 accionLog_udel_perfil_sala_meet
5878 accionLog_udel_grupo_sala_meet
ALERTAS
7000 accionLog_add_ale_entidades
7005 accionLog_chg_ale_entidades
7010 accionLog_del_ale_entidades
7015 accionLog_udel_ale_entidades
7020 accionLog_add_ale_servicios
7025 accionLog_chg_ale_servicios
7030 accionLog_del_ale_servicios
7035 accionLog_udel_ale_servicios
7040 accionLog_add_ale_destinos
7045 accionLog_chg_ale_destinos
7050 accionLog_del_ale_destinos
7055 accionLog_udel_ale_destinos
7060 accionLog_add_ale_autorizadas
7065 accionLog_chg_ale_autorizadas
7070 accionLog_del_ale_autorizadas
7075 accionLog_udel_ale_autorizadas
Acciones comunes válidas para todas las situaciones si utilizamos el campo C_TABLA
50000 accionLog_add_registro
50005 accionLog_chg_registro
50010 accionLog_del_registro
50015 accionLog_udel_registro



Volver arriba [Volver al índice]

3.5 Zabbix



3.5.1 Generalidades



Zabbix es una solución de código abierto que ofrece características de monitorización avanzada de sistemas constituidos por todo tipo de servidores, aplicaciones y equipos.
La versión actual de Zabbix en VIVAit es la 6.0. Para más información ver Zabbix 6.0
Zabbix monitoriza los recursos de un equipo en forma remota, permitiendo centralizar la información que se recoge en un servidor desde el que se puede visualizar.
Zabbix cuenta con una interfaz de administración vía web y utiliza un mecanismo flexible de notificaciones que permita que los usuarios reciban las alarmas. Estas notificaciones están basadas e_mail, SMS, Jabber, etc. e informan de la aparición de cualquier evento. Esto permite una reacción rápida ante problemas en el elemento supervisado.
Para acceder al servidor Zabbix se invoca, desde un navegador, la dirección IP de la máquina donde se encuentra instalado el servidor Zabbix seguido de "/zabbix.

IP_address_Zabbix_Server/zabbix



Zabbix login.png



Zabbix posee documentación tanto en wiki, foros y comunidades. Para ampliar la información se puede visitar el sitio oficial de Zabbix

3.5.1.1 Glosario Zabbix



La terminología básica de Zabbix es la siguiente, en su web oficial se puede ampliar información sobre otros términos, definiciones de Zabbix.

  • Host
Es una entidad que define el elemento en red que del que se desea monitorizar/supervisar activamente sus recursos. Este puede ser una impresora, router, switch, un servidor, un ordenador, etc. La característica de un host es que debe poseer una dirección de red (IP).
  • Host group
Es una agrupación lógica de hosts, 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
Es una medida especifica que se obtiene de un host. Este parámetro se recoge en el servidor Zabbix remitida por el agente Zabbix instalado en los host.
  • Trigger
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
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
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: notificacion, comandos remotos) y condiciones (cuando la operación se lleva a cabo).
  • Notification
Es la entidad con que Zabbix puede notificar (e_mail, SMS, Jabber, ...).
  • Template
Una plantilla es un conjunto de módulos ya configurados y que están listos para ser aplicados al host a supervisar. Agrupa items, triggers, graphs, ... para monitorizar cualquier servicio o aplicación. Permiten configurar la supervisión de un host en base a su tipo o a los elementos que comparten los mismos parámetros de medición. Cuando se instala Zabbix server se proporciona una conjunto de plantillas preconfiguradas, estas se pueden utilizar directamente, si procede, o adaptarlas a las necesidades específicas. También existe la posibilidad de crear una plantilla desde cero.
  • Zabbix server
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
Es un proceso desplegado en los host que son supervisados, funciona como un servicio y puede funcionar de forma activa o pasiva según su configuración.



Volver arriba [Volver al índice]

3.5.1.2 Funcionalidad Discovery



Permite descubrir y mostrar los dispositivos que se integran en una red supervisada y el tipo de servicios que proporcionan.


Ejemplo

Un cliente con 100 colas ACDs, y 25 VDNS, y en cada cola 25 medidas, seria muy laborioso registrarlos uno por uno. Discovery descubre automáticamente todas las interfaces de red que existen, tanto para colas, nodos o IVR.
Para utilizar esta funcionalidad, se hace el uso de dos script, que se activan en el momento de instalación de Zabbix en el directorio:

 /usr/local/sbin

Estos script 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 de Zabbix [Zabbix detección de redes].

Volver arriba [Volver al índice]

3.5.1.3 Notificaciones



Para recibir notificaciones del servidor Zabbix es necesario dar de alta al usuario que vaya a recibirlas y su servidor de correo electrónico para poder enviarle las notificaciones mediante mensajes de correo.

Zabbix notificación.png



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 6.0

Volver arriba [Volver al índice]

3.5.1.4 Usuarios



Zabbix permite la organización de usuarios en grupos para establecer los permisos adecuados de acuerdo al tipo de perfil que se desea 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.

Zabbix usuarios.png



Cada usuario Zabbix se le asigna un nombre de usuario único, una contraseña y se puede indicar que tipo de comunicación posee, normalmente es vía email, pero puede ser vía otro tipo de medios.
Para mas información ver el manual oficial .

3.5.1.5 Visualización



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

3.5.1.5.1 Graphs



Nota
Debe crearse algún item dentro del host para poder utilizar una gráfica.

En Zabbix una gráfica sirve para representar visualmente los resultados obtenidos de uno o varios items.

Zabbix gráficos.png



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

3.5.1.5.2 Screens



Las pantallas refiere otra característica adaptable de Zabbix la cual permite que los usuarios creen vistas personalizadas dentro de Zabbix para mostrar la información suministrada por la supervisió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,
- texto plano tal como los 5 valores pasados de un item particular,
- entre otros.

La información se muestra de forma dinámica.

Zabbix pantallas.png



3.5.1.5.3 Maps



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

Zabbix mapas.png



3.5.1.5.4 Monitorizar el estado de los raid



Los siguientes comandos son necesarios para poder monitorizar el estado de los raid.

El comando:

   >hpacucli "ctrl slot=1 logicaldrive 1 show status"

proporciona el estado de un raid (p.e. logicaldrive 1 (931.5 GB, 1): Interim Recovery Mode).

El comando:

  >hpacucli "ctrl slot=1 logicaldrive all show status"

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 se utiliza el comando:

   ctrl all show config detail

muestra mucha información, permite conocer el modelo de disco físico instalado para poder sustituirle, si procede.

Volver arriba [Volver al índice]

3.5.2 Configuraciones de Zabbix en MDtel



3.5.2.1 Agentes Zabbix



Nota: Hay que instalar un agente Zabbix en cada máquina que se quiera monitorizar.


El agente Zabbix puede recoger datos:

* De forma pasiva: el server contacta con el 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 se la llama 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 el que de forma periódica recogerá datos sobre esos ítems y se los hará llegar al server. A esta acción del agente se la llama 'Agente pasivo'.



3.5.2.1.1 Configurar el agente Zabbix de forma pasiva



Para configurar el agente Zabbix es necesario acceder a la maquina que actuará como agente, y en el directorio

   /etc/zabbix

modificar el fichero

   zabbix_agentd.conf

indicando 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.5.2.1.2 Configurar el agente Zabbix de forma activa



Para configurar el agente 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.


La variable NombreMedida se refiere al nombre que se de a la aplicación, no hace falta que exista una aplicación con ese nombre en Zabbix,
y comando, es el comando remoto que tiene que ejecutar el servidor Zabbix. Posiblemente se necesita dar permisos para ejecutar el comando y siempre debe devolver un valor (un número o un tiempo) que el servidor Zabbix pueda manejar.
Tras la configuración del fichero, debemos reiniciar el servicio de los agentes.

   sudo service zabbix-agent restart



Volver arriba [Volver al índice]

3.5.2.2 Templates servidor Zabbix



El uso de plantillas sirve para reducir la carga de trabajo y agilizar la configuración de Zabbix, facilitando la tarea de:

- Registrar equipos y dispositivos,
- Agregarles métricas,
- Acelerar el despliegue de las tareas de supervisión en un host,
- Aplicar cambios masivos a tareas de supervisión,
- Etc.



Cada template está compuesta por entidades: items, trigers, alarms, graphs,... etc.
Las plantillas están vinculados directamente a los hosts específicos, por tanto es necesario utilizarlas individualmente en cada host.
Cuando una plantilla se vincula a un host todas las entidades de esta se agregan al host.
Cuando se debe cambiar algo en todos los hosts, si se cambia algo en el nivel de plantilla una vez, el cambio se propagará a todos los hosts vinculados.
En MDtel se han creado plantillas propias que facilitan estos procesos, las cuales es necesario importar.
A continuación, se muestran los distintos bloques funcionales 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.5.2.2.1 Resumen de plantillas MDTel



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.5.2.2.2 Importar templates



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

 ls /usr/src/nimitz/archivos | grep Template
 Template DRBD.xml
 Template motorSal.xml
 Templates Vivait-Suite_GW.xml
 Templates Vivait-Suite.xml
 Template Vivait-Call Asterisk.xml
 Template Vivait-Call bdCentral.xml
 Template Vivait-Call bdNodo.xml
 Template Vivait-Call cambiarPerfil_Cal.xml



La importación se realizará desde cualquier computadora con acceso al portal web de Zabbix.

Zabbix importar.png



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

Volver arriba [Volver al índice]

3.5.3 Configuración inicial de Zabbix



A continuación se describe una configuración básica de Zabbix para cualquier equipo que utilice Windows o Linux.
Mediante la definición de hosts, items, triggers y acciones, Zabbix permite efectuar un monitoreo efectivo de plataformas IT heterogéneas.

3.5.3.1 Configuración de los equipos (host) para la monitorización



Nota
Debe tenerse en cuenta que debe 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 se registra en Zabbix, corresponde al dispositivo que se desea monitorizar.
* Host virtual: es una dirección IP virtual, que puede relacionarse con un servidor Web, clusters, etc.



Zabbix host.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 al que pertenecerá el host. Seleccionar uno o varios de los valores que aparecen tras pulsar el botón Seleccionar.

El cuadro desplegado se muestra más abajo.

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



Zabbix grupos.png



Pulsar el botón Guardar el nuevo "Host" se mostrará en la lista de "Host registrados".
Después el Zabbix se conectará a la IP configurada, repitiendo el proceso según un tiempo programado.

3.5.3.1.1 Comprobación de disponibilidad del host



Para comprobar el estado del host solo es necesario comprobar en el listado de host la columna Disponibilidad (Availability).

Zabbix disponibilidad.png



Los colores del botón ZBX de la columna Availability indican el estado del host:

* Si el botón ZBX en la columna de disponibilidad es de color rojo, indica que hay un error en la comunicación. Posicionando el cursor del ratón sobre él permite ver un mensaje de error informativo.
* Si el botón ZBX es gris, significa que el host está en proceso de comunicación con el "Agente Zabbix". Comprobar que el servidor Zabbix está en marcha, y proceder a actualizar la página más tarde. El tiempo estimado para revisar si existe problemas es de 5 minutos.
* Si el botón ZBX es verde indica que está funcionando correctamente.



3.5.3.2 Asignar Templates (plantilas) al host



Tras importar templates y de forma opcional se pueden al host ya creado.
Para ello se edita el host ya configurado, y en su pestaña Templates y pulsando Select se añaden las plantillas adecuadas.

Zabbix template.png



Una vez seleccionados las plantillas correspondientes pulsar el botón Update para activar los cambios.

3.5.3.3 Asignar Items al host



Nota
Un host puede tener un item sin necesitad de tener template.



Todos lo items se agrupan por host, esto significa que cada host tiene sus propios "Módulos que recogen datos del Host".
Para agregar un nuevo módulo se selecciona en la lista del host el host deseado al cual se le va a añadir un nuevo Item.
Al seleccionar el host se selecciona la pestaña Items y se pulsa el botón Create Item en la parte superior derecha de la pantalla.

Zabbix items.png



Campos necesarios para una configuración básica:

Campos Explicación Valores posibles
Name Define el nombre para el item.

Va a ser el identificador para todas la gestiones en donde lo involucremos como el caso de Triggers.

Type Indica de que entidad se quiere recibir información. Puede ser al "Zabbix agent" o hardware como impresoras, switch o routers.
Key Parámetros de Zabbix.

Permiten indicar específicamente que tipo de información se va a solicitara a la entidad.
Se puede considerar también como el nombre de alguna aplicación.

Host interface Dirección de red del host (puede ser uno o mas)
Type of information Tipo de datos almacenados en la BBDD después de la conversión adecuada, si la hay. Valores posibles:
- Numeric (unsigned) - número entero de 64-bit
- Numeric (float) - número entero de coma flotande de 64-bit. Este tipo permitirá una precisión de 15 dígitos y un rango aproximado de -1.79E+308 a 1.79E+308. Este tipo soporta notación científica. P.e., 1.23E+7, 1e308, 1.1E-4.
- Character - texto corto
- Log - texto largo con propiedades relativas a log (timestamp, source, severity, logeventid)
- Text - texto largo.

Para las items que devuelven datos solo en un formato específico, el tipo de información coincidente se selecciona automáticamente.



Para una información más detallada consultar items

Para validar el nuevo item a añadir al host hacer clic en el botón Add. El nuevo item debe aparecer en la lista de items asociados al host.

3.5.3.3.1 Ver la información recolectada por el item



Nota
Normalmente para ver la información se encontrará en "Monitoring → Latest data", se despliega el host y se elige el item deseado,
siempre que no pertenezca a una aplicación en cuyo caso estará bajo el nombre de la aplicación.



Después de definir el "Item" es conveniente revisar la información que se está recolectando.
La información comenzará a ser recolectada según el tiempo que se ha indicado en el campo Timeout del Item.

Zabbix item timeout.png



La espera para recibir información varía dependiendo del tiempo de recolección del item, la mayoría suele ser aproximadamente al minuto de crearlo.
Zabbix ofrece la opción de visualizar la información en forma gráfica (sencilla). En la lista de item de un host, dentro del menú Monitoring - Latest Data, se puede invocar el botón Graph.
Aparece una ventana donde se muestra de forma gráfica la información disponible, pudiendo en la parte superior derecha de la misma elegir el periodo que se desea mostrar.

Zabbix item graph.png



Si no se observa información se pueden realizar las siguientes acciones:

* Comprobar que el host tiene un item con el campo Key = system.cpu.load.
* Verificar que el agente esta funcionando en el host monitorizado y que el servidor Zabbix está funcionando.
* El icono "ZXB" en el host debe estar en color verde.
* Asegurarse que se está monitoreando el servidor correcto.



3.5.3.4 Configurar Triggers para un 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 (iniciador) 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 se crean en uno o múltiples items para evaluar o comparar los valores recolectados por estos con las condiciones establecidas para el sistema.
Estas condiciones pueden ser de tipo aritmético y lógico.

Para configurar un trigger o iniciador se siguen los siguientes pasos:

Paso 1: Seleccionar "Configuration → Hosts".
Paso 2: Elegir el "Host" deseado y luego hacer clic en "Trigger".
Paso 3: Pulsar el botón "Create Trigger". Aparece una ventana mostrando los campos necesarios para configurar un nuevo iniciador.

Zabbix triggers.png



Si lo que se desea es editar un trigger se selecciona en la lista que se muestra asociada al host elegido.

Zabbix triggers editar.png



Parámetros o campos a rellenar para una configuración básica:

Campos Explicación Valores posibles
Name Nmbre para el trigger. Este nombre va a ser el identificador para todas la gestiones en donde se invoque, como el caso de los eventos.
Severity Gravedad que se desea que tenga el trigger, distinguida por colores, Elegir uno de los siguientes niveles de gravedad para el trigger:
Not Classified
Information
Warning
Average
High
Disaster
Expression En este campo se indica para que medida se crea (item) y sus funciones con los parámetros adecuados.

Se recomienda usar el enlace Expression constructor junto con el botón ADD y que permite crear las condiciones necesarias.

Ejemplo: {New host:system.cpu.load.avg(180)}>2
Descripción Una descripción breve sobre el trigger.
Enable Activa o desactiva el trigger.



3.5.3.4.1 Comprobar el estado de un trigger



Se puede ver el estado del trigger para un host en Configuration -> Host -> Triggers.
El color en caso de que se active depende de la severidad definida.
Por ejemplo observando la columna Value y con un trigger numérico:

- Si el trigger está OK de color verde indica que el resultado de la métrica se mantiene por debajo de la condición de disparo que se ha indicado.
- Si el trigguer está en PROBLEM de color rojo indica que el resultado de la métrica está por encima de la condición de disparo configurada.



Zabbix triggers severity.png



Si el trigger es lógico la indicación verde advierte que se cumple la condición lógica definida, si la indicación es roja la condición lógica no coincide con lo definido en el trigger.
La forma más habitual de supervisar el estado de un host es desde el menú Monitoring, eligiendo el Host y con el botón derecho sobre él indicar lo que se desea obtener del mismo.

Zabbix triggers monitoring.png



Para más información sobre trigger consultar iniciadores en el manual de Zabbix 6.0

3.5.3.5 Asociar una Action a triggers



Si desea que algunas operaciones se lleven a cabo como resultado de eventos informados por los trigger (por ejemplo, notificaciones enviadas), es necesario configurar acciones asociadas a la información que reportan los trigger.
Las acciones se pueden definir en respuesta a eventos de todos los tipos admitidos:

- Acciones de activación: para eventos cuando el estado de activación cambia de OK a PROBLEMA y viceversa,
- Acciones de servicio: para eventos cuando el estado del servicio cambia de OK a PROBLEMA y viceversa,
- Acciones de descubrimiento: para eventos cuando se lleva a cabo el descubrimiento de la red,
- Acciones de registro automático: para eventos cuando nuevos agentes activos registro automático (o cambios de metadatos de host para los registrados),
- Acciones internas: para eventos cuando los elementos dejan de ser compatibles o los disparadores entran en un estado desconocido.



Para crear una configuración se utiliza el menú Configuration - Actions.

Zabbix trigger actions.png



En MDtel la acción que se activa, según la información aportada por el trigger, es el envío de un mensaje de correo al Centro del Servicio Técnico VIVAit (SAT).
En este email se informa el problema detectado en el elemento supervisado para su diagnóstico y solución.
Para más información sobre acciones consultar el manual Zabbix 6.0.

Volver arriba [Volver al índice]

3.6 SerCen



Servicios Centrales ( ©SerCen MDtel) es un software desarrollado por MDtel que provee servicios centralizados a muchos elementos de la arquitectura VIVAit.
La función principal de SerCen es identificar a los usuarios y garantizar que los mismos sean quienes dicen ser aportando seguridad en el acceso a la plataforma.
SerCen es un proceso en segundo plano que se ejecuta automáticamente sobre el sistema operativo (demonio) en la plataforma VIVAit
Dentro de la arquitectura VIVAit pueden existir varias instancias SerCen y cada una de ellas soportar diferentes servicios.
Ejemplos de servicios:

- Autenticación de doble o simple factor,
- Integración con proveedores de autenticación,
- Click2talk demonio dentro de VIVAit.

Sercen permite autenticar un usuario mediante doble o simple factor, utilizando para ello la BBDD de VIVAit y/u otro mecanismo externo, como puede ser el Active Directory de Microsoft.
SerCen se relaciona con:

- BBDD,
- Asterisk para la funcionalidad Click2talk,
- VIVAit Meet para por ejemplo las funciones botón Colaborar y Recursos compartidos,
- Portales a los que proporciona los servicios vía webservice.



3.6.1 Autenticación mediante SerCen



Este proceso permite autenticar un usuario, bien mediante autenticación simple factor o doble factor, utilizando para ello la BBDD de VIVAit
Además de SerCen puede existir otro mecanismo externo, como puede ser el Active Directory de Microsoft.
El despliegue de SerCen en VIVAit tiene como objetivo que un usuario que intenta acceder al sistema mediante un portal (Administración, Tracker, WebCall, ...) obtenga una cadena de caracteres aleatoria (tokern) que reemplaza información confidencial, como contraseñas, 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 ser invocadas desde los portales, como es el caso de WebCall, y no se requiera de un proceso específico de autenticación para cada aplicación.
De modo recíproco estos portales, como WebCall, deben soportar el ser invocados con un token y, en tal caso, considerar que el usuario ya está autenticado.
Para todo esto 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 BBDD de 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.

Volver arriba [Volver al índice]

3.6.2 Comandos de SerCen



Los diferentes comandos que utiliza SerCen, y que se pueden analizar para diagnóstico en la consola del navegador (tecla F12) 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.2.1 Comando autenticar1



Este comando se utiliza por SerCen para autenticación de primer factor.
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.

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



Datos de entrada

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



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



Respuestas

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.


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}



* 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, WebCall 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.
En el caso de WebCall es responsabilidad de la aplicación efectuar una solicitud para revalidar el token, mediante un procedimiento que se describirá posteriormente, tantas veces como considere necesario.


3.6.2.2 Comandos autenticar2



Este comando se utiliza por SerCen para autenticación doble factor.
Este comando se invoca para autenticar en base a un segundo factor: pin enviado por un medio de transporte independiente.


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



Datos de entrada

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



  • El campo "expira" es opcional y siempre posible. Permite solicitar un periodo de expiración (seg.) para el token devuelto.
  • El campo "clvCambiar" es opcional. Permite cambiar la clave del usuario, si es autenticado.



Respuestas

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.



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}



* 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 seg. 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 WebCall.
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".

3.6.2.3 Comando autenticartokenaad



ESte comando se utiliza por SerCen para 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).

Respuestas

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

- Se produce un error: ejRes1.
- Respuesta correcta con o sin doble factor: ejRes2 y ejRes3.



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.2.4 Comando validartoken



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

- Se produce un error: ejRes1 y ejRes2.
- Respuesta correcta: ejRes3 indica validez del token y su tiempo de expiración en segundos.



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



3.6.2.5 Comando revalidartoken



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

- Se produce un error: ejRes1 y ejRes2.
- Respuesta correcta: ejRes3 indica validez del token y su tiempo de expiración en segundos.



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



3.6.2.6 Comando revocartoken



Este comando permite revocar un token.

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



Datos de entrada

{"token": "1234567890","token2": "0987654321"}



Ejemplos de posibles respuestas

- Se ha producido un error, token incorrecto, ejResp1.
- Respuesta correcta, ejeResp2.



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



3.6.2.7 Comando cambiarClave



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

- Clave no adecuada: ejRes1, ejRes2, ejRes3, ejRes4, ejRes5.
- Clave correcta: ejeRes6.



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.2.8 Posibles errores



A continuación se muesta la lista de posibles respuestas que proporciona SerCen cuando se le invoca con el comando correspondiente:

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



Volver arriba [Volver al índice]

3.6.3 Diagnóstico en SerCen



En SerCen se puede monitorizar, mediante log y comandos, el funcionamiento del servicio, esto permite realizar un diagnostico ante un posible mal funcionamiento de la funcionalidad de autenticación de usuarios.

3.6.3.1 Comandos en SerCen



Diagnóstico del servicio

Se puede monitorizar el funcionamiento del proceso de login de los usuarios. Para ello se invoca el siguiente comando en la consola del nodo donde este corriendo SerCen:

systemctl status serCen.service



Resultado esperado

root@preproducciongestion:~# systemctl status serCen.service
● serCen.service - LSB: Start/stop serCen
    Loaded: loaded (/etc/init.d/serCen; generated)
    Active: active (running) since Fri 2024-09-20 03:01:08 CEST; 2 weeks 3 days ago
      Docs: man:systemd-sysv-generator(8)
     Tasks: 10 (limit: 4556)
    Memory: 5.3M
       CPU: 5min 45.154s
    CGroup: /system.slice/serCen.service
            └─749 /usr/sbin/serCen - /etc/MDtel/serCen.conf
Sep 20 03:01:08 preproducciongestion systemd[1]: Starting LSB: Start/stop serCen...
Sep 20 03:01:08 preproducciongestion serCen[654]: Starting serCen
Sep 20 03:01:08 preproducciongestion systemd[1]: Started LSB: Start/stop serCen.



Información del servicio

Este comando permite obtener información de SerCen. Para ello se invoca el siguiente comando en la consola del nodo donde este corriendo SerCen:

nc localhost 1125



Resultado esperado:

root@preproducciongestion:~# nc localhost 1125
serCen sis ver='00.03.01' inic='20240920 030108' alarmas=44 ultAlar='20241007 080921'
serCen gmp msj=254/256 buf=256/256 tarea=6/15
serCen tmp uptime=1501066 (17d 8h 57m 46s)
serCen wws conxNum=0 conxMaxPeriodo=0 hilos=4/4 wsi mysCnx=1 appSecretExpire=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=0/0



Reinciar/parar/arrancar el servicio

Se puede reiniciar SerCen. Para ello se invocan el siguiente comando en la consola del nodo donde este corriendo SerCen:

systemctl restart/stop/start serCen.service



Resultado esperado

Por ejemplo parando el servicio:

root@preproducciongestion:~# systemctl stop serCen.service
root@preproducciongestion:~# systemctl status serCen.service
○ serCen.service - LSB: Start/stop serCen
     Loaded: loaded (/etc/init.d/serCen; generated)
     Active: inactive (dead) since Mon 2024-10-07 12:08:01 CEST; 2s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 199591 ExecStart=/etc/init.d/serCen start (code=exited, status=0/SUCCESS)
    Process: 199615 ExecStop=/etc/init.d/serCen stop (code=exited, status=0/SUCCESS)
        CPU: 101ms
Oct 07 12:07:38 preproducciongestion systemd[1]: Starting LSB: Start/stop serCen...
Oct 07 12:07:38 preproducciongestion serCen[199591]: Starting serCen
Oct 07 12:07:38 preproducciongestion systemd[1]: Started LSB: Start/stop serCen.
Oct 07 12:08:00 preproducciongestion systemd[1]: Stopping LSB: Start/stop serCen...
Oct 07 12:08:00 preproducciongestion serCen[199615]: Shutting down serCen
Oct 07 12:08:01 preproducciongestion systemd[1]: serCen.service: Deactivated successfully.
Oct 07 12:08:01 preproducciongestion systemd[1]: serCen.service: Unit process 199598 (serCen) remains run>
Oct 07 12:08:01 preproducciongestion systemd[1]: Stopped LSB: Start/stop serCen.



3.6.3.2 Log en SerCem



El log del SerCen se encuentra en el fichero serCen.log situada en el directorio /var/log/serCen/.
Para monitorizar en tiempo real la actividad de SerCen se puede utilizar el comando:

   tail -f /var/log/serCen/serCen.log



Ejemplos del log de serCen

Acceso correcto

 20241007 122443.524     SIS Convertido hilo (lwp=1844) en tarea (cod=13) codResp=4 codSalir=30000 evSalir=16
 20241007 122443.524     MYQ[WSIaut/00] qryParResFin Memoria 1119 bytes
 20241007 122443.524     MYQ[WSIaut/01] qryParResFin Memoria 133 bytes
 20241007 122443.524     MYQ[WSIaut/02] qryParResFin Memoria 524 bytes
 20241007 122443.524     MYQ[WSIaut/03] qryParResFin Memoria 734 bytes
 20241007 122443.524     MYQ[WSIaut/04] qryParResFin Memoria 30 bytes
 20241007 122443.524     MYQ[WSIaut/05] qryParResFin Memoria 142 bytes
 20241007 122443.524     MYQ[WSIaut/06] qryParResFin Memoria 8 bytes
 20241007 122443.524     MYQ[WSIaut/07] qryParResFin Memoria 8 bytes
 20241007 122443.524     MYQ[WSIaut/08] qryParResFin Memoria 8 bytes
 20241007 122443.524     MYQ[WSIaut/09] qryParResFin Memoria 8 bytes
 20241007 122443.525     MYQ[WSIaut/10] qryParResFin Memoria 184 bytes
 20241007 122443.525     MYQ[WSIaut/11] qryParResFin Memoria 53 bytes
 20241007 122443.525     MYQ[WSIaut/12] qryParResFin Memoria 1123 bytes
 20241007 122443.525     MYQ[WSIaut/13] qryParResFin Memoria 1059 bytes
 20241007 122443.525     MYQ[WSIaut/14] qryParResFin Memoria 276 bytes
 20241007 122443.525     MYQ[WSIaut/15] qryParResFin Memoria 216 bytes
 20241007 122443.525     MYQ[WSIaut/16] qryParResFin Memoria 216 bytes
 20241007 122443.525     MYQ[WSIaut/17] qryParResFin Memoria 136 bytes
 20241007 122443.525     MYQ[WSIaut/18] qryParResFin Memoria 136 bytes
 20241007 122443.544     MYQ[WSIaut] dameNuevaConexion cnxCharset=utf8mb4
!20241007 122443.544 MYQ[WSIaut] Conectado: "BDTR:nimitz:nimitz"
 20241007 122443.546     MYQ[WSIaut/00] preparada qry numPar=1 numRes=23
 20241007 122443.547     MYQ[WSIaut/01] preparada qry numPar=2 numRes=1
 20241007 122443.548     MYQ[WSIaut/02] preparada qry numPar=19 numRes=0
 20241007 122443.549     MYQ[WSIaut/03] preparada qry numPar=1 numRes=22
 20241007 122443.550     MYQ[WSIaut/04] preparada qry numPar=0 numRes=6
 20241007 122443.550     MYQ[WSIaut/05] preparada qry numPar=4 numRes=0
 20241007 122443.552     MYQ[WSIaut/06] preparada qry numPar=2 numRes=0
 20241007 122443.553     MYQ[WSIaut/07] preparada qry numPar=2 numRes=0
 20241007 122443.554     MYQ[WSIaut/08] preparada qry numPar=2 numRes=0
 20241007 122443.555     MYQ[WSIaut/09] preparada qry numPar=2 numRes=0
 20241007 122443.555     MYQ[WSIaut/10] preparada qry numPar=1 numRes=4
 20241007 122443.556     MYQ[WSIaut/11] preparada qry numPar=3 numRes=1
 20241007 122443.557     MYQ[WSIaut/12] preparada qry numPar=2 numRes=23
 20241007 122443.559     MYQ[WSIaut/13] preparada qry numPar=1 numRes=23
 20241007 122443.560     MYQ[WSIaut/14] preparada qry numPar=1 numRes=8
 20241007 122443.561     MYQ[WSIaut/15] preparada qry numPar=1 numRes=8
 20241007 122443.562     MYQ[WSIaut/16] preparada qry numPar=1 numRes=8
 20241007 122443.563     MYQ[WSIaut/17] preparada qry numPar=3 numRes=0
 20241007 122443.564     MYQ[WSIaut/18] preparada qry numPar=3 numRes=0
 20241007 122443.564     WSI(13) Iniciado mysql=1
 20241007 122443.566     WSI(13) usuarioPorCuenta ok cuenta=sat id=1 modoLogin=10 usuMultiIp=0 tipo2Factor=no pinIntentosMax=0 clvExpiradaSegs=0 pinExpira=0
 20241007 122443.567     WSI(13) postAutenticar1 bd_Ok cuenta=sat id=1 clvExpiradaSegs=0
 20241007 122443.577     WSI(13) tokenBdInsertar token=usiELn apli=VivaitCall ipOrig=172.25.2.119 esta=200 tokenExpira=3600 pinExpira=0
 20241007 122443.579     WSI(13) usuBdClaveComplejidad diasValidezNueva=90 longiMin=4 requiereNumeros=0 requiereMayusculas=0 requiereMinusculas=0 requiereCarsEspeciales=0



Clave errónea

 20241007 122815.947     WSI(12) usuarioPorCuenta ok cuenta=sat id=1 modoLogin=10 usuMultiIp=0 tipo2Factor=no pinIntentosMax=0 clvExpiradaSegs=0 pinExpira=0
!20241007 122815.948 WSI TRUCO_KO [172.25.2.119] postAutenticar1_bd_mal_clave
 20241007 122815.949     WSI(12) postAutenticar1 no_clave cuenta=sat id=1
3.6.3.3 Herramientas del navegador



Desde la ventana del navegador utilizado para abrir sesión de usuario también se puede monitorizar el diálogo con SerCen y controlar los resultados de los comandos invocados.
Para ello se utilizan las herramientas de desarrollador invocándolas mediante la tecla F12:
En este ejemplo se comprueba la respuesta de SerCen al comando autenticar1 :

Sercen navegador.png



Volver arriba [Volver al índice]

3.7 VIVAit-direct






Volver arriba [Volver al índice]

3.8 MDintz



3.8.1 Introducción



Aplicación de asterisk, desarrollada por MDtel (©MDintz MDtel), que permite invocar desde el dialplan distintos servicios propietarios.
Cada uno de estos servicios está accesible desde un entorno diferente.
Los diferentes entornos que puede invocar MDintz se definen en el archivo de configuración como secciones.
Se puede consultar los entornos desplegados consultado el fichero MDintz.conf en el directorio /etc/asterisk/:

 root@preproduccioncorp0:/# cat /etc/asterisk/MDintz.conf
 [nimitz]
 host0=BDTR
 port0=5555
 host1=172.25.128.254
 port1=5555
 toConx=5
 toRx=10

 [gh]
 host0=GH
 port0=5556
 toConx=5
 toRx=10
 [srvBasico]
 host0=172.25.128.252
 port0=8180
 protocolo=http2
 url=/intzJava
 toConx=5
 toRx=10
 [srvPepephone]
 host0=172.25.128.252
 port0=8180
 protocolo=http2
 url=/intzJavaPepePhone
 toConx=5
 toRx=10
 [tap]
 host0=127.0.0.1
 port0=5557
 protocolo=nimitz
 toConx=5
 toRx=10
 root@preproduccioncorp0:/#



Cada uno de los entornos proporciona diferentes servicios y cada uno de los servicios tiene comandos.
Por ejemplo, el entorno nimitz tiene varios servicios (ping, BD, regExpr)
El servicio BD del entorno nimit tienen diferentes comandos (sqlDato, enrutar, ...)
Para más información consultar MDintz

Volver arriba [Volver al índice]

3.8.2 Aplicación de asterisk



Para comprobar si asterisk tiene activa la aplicación MDintz se puede preguntar por ella, desde la consola de asterisk, con el comando:

    core show applications      



 root@vm-corp:~# asterisk -rx"core show applications"|grep mdintz
                 mdintz: V03.1 Se conecta con servidor de procesos MDtel para solicitar servicios
 root@vm-corp:~#



Volver arriba [Volver al índice]

3.8.3 Entornos de MDintz



Los entornos, suministradores de servicios, más habituales en VIVAit se muestran a continuación.

3.8.3.1 Intz-nimitz



3.8.3.1.1 Introducción



Software desarrollado por MDtel (©intz-nimitz MDtel) que implementa el entorno para integrar procesos del dialplan (asterisk) con la base de datos de VIVAit.
Los procesos del dialplan invocan a la aplicación MDintz, MDintz utiliza el entorno intz-nimitz para dialogar con la BBDD, que en VIVAit se llama nimitz.
Por ejemplo, el proceso por el que se incluye el registro de una llamada en la BBDD (tabla DAT_LLAMADAS) de VIVAit sería:

 root@vm-corp:~# asterisk -rvvvv|grep DAT_LLA
     -- Executing [s@Cen_Sub_insertDatLlamada:15] mdintz("SIP/2060-000004c8", "nimitz|bd|sqlSinEspera|insert into DAT_LLAMADAS 
 (D_HORA_INICIO,C_ORIGEN,C_DESTINO,C_UCID,E_GRABACION,N_PRIMARIO,N_CANAL_PRIMARIO,E_TIPO_LLAMADA,E_TIPO_CANAL,ID_RUTA_ENT,ID_NODO_GW,C_COD_CLIENTE) 
 VALUES(now(),"2060","06389","10002023101728994565",0,NULL,NULL,NULL,10,1012,2,NULL)") in new stack
     -- Executing [s@Cen_Sub_updDatLlamada_dispout:5] mdintz("SIP/Trunk_GW_corporativo-000004c9", "nimitz|bd|sqlSinEspera|update DAT_LLAMADAS set ID_RUTA_SAL=1006 where C_UCID="10002023101728994565"") in new 
 stack
     -- Executing [s@Cen_Sub_updDatLlamada:5] mdintz("SIP/2060-000004c8", "nimitz|bd|sqlSinEspera|update DAT_LLAMADAS set D_HORA_FIN=now(),N_DURACION=UNIX_TIMESTAMP()- 
UNIX_TIMESTAMP(D_HORA_INICIO),E_TIPO_LLAMADA=10 where C_UCID="10002023101728994565"") in new stack



Intz-nimitz es un proceso en segundo plano que se ejecuta automáticamente sobre el sistema operativo (demonio) en la plataforma VIVAit. La estabilidad de este es importante para el funcionamiento del sistema, si bien las llamadas progresan en caso de no estar disponible si se configura con redundancia.
Para mas información consultar la página de intz-nimitz.


Volver arriba [Volver al índice]

3.8.3.1.2 Diagnóstico en Intz-nimitz



Para monitorizar el funcionamiento del entorno intz-nimitz se pueden usar comandos y consultar ficheros log y de configuración.
Esto permitirá realizar un diagnostico ante un posible mal funcionamiento de la funcionalidad de integrar la BBDD en asterisk.

3.8.3.1.3 Comandos de Intz-nimitz



Información del servicio

Se puede obtener información del proceso intz-nimitz. Para ello se invoca el siguiente comando en la consola de ubuntu:

     nc ip_máquina 1115



Resultado esperado

 root@preproduccioncorp0:~# nc localhost 1115
 intz-nimitz sis ver='04.00.00' inic='20241008 083913' alarmas=10 ultAlar='20241008 083918'
 intz-nimitz gmp msj=1012/1024 buf=1024/1024 tarea=14/31
 intz-nimitz tmp uptime=701565 (8d 2h 52m 45s)
 intz-nimitz vic identif='cms1' entorno='nimitz' conx=0/128 numConx=1218(0)
 intz-nimitz mys curro=10/0/0/0 soli=1218(0) soliErr=0(0) soliEncol=0(0/0)
 intz-nimitz cache colas=128/0/0/0 vdn=128/0/0/0
 intz-nimitz regExpr entr=32/32/1024 numRegExpr=1 consul=41(0)



La información obtenida se puede interpretar en la siguiente tabla:

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 Numero de mensajes. Cada llamada en curso requiere de un mensaje
gmp/buf Numero de buffer
gmp/tarea Numero de tareas
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
regExpr/entr
regExpr/numRegExpr
regExpr/consul



Gestión del servicio

Se puede monitorizar/parar/iniciar/reiniciar el funcionamiento del proceso intz-nimitz. Para ello se invoca el siguiente comando en la consola de ubuntu en el nodo donde esté instalado:

    systemctl status/stop/start/reboot intz-nimitz.service



Resultado esperado del estado

 root@vm-corp:~# systemctl status intz-nimitz.service
 ● intz-nimitz.service - LSB: Start/stop intz-nimitz
      Loaded: loaded (/etc/init.d/intz-nimitz; generated)
      Active: active (running) since Wed 2024-10-16 11:00:13 CEST; 36min ago
        Docs: man:systemd-sysv-generator(8)
     Process: 498322 ExecStart=/etc/init.d/intz-nimitz start (code=exited, status=0/SUCCESS)
       Tasks: 18 (limit: 2220)
      Memory: 13.3M
         CPU: 4.981s
      CGroup: /system.slice/intz-nimitz.service
              └─498327 /usr/sbin/intz-nimitz - /etc/MDtel/intz-nimitz.conf
 Oct 16 11:00:11 vm-corp intz-nimitz[498322]: Starting intz-nimitz
 Oct 16 11:00:13 vm-corp intz-nimitz[498323]:  20241016 110013     CFG recargado base.cfg_recarga.nivel_traza='nDepuBajo'
 Oct 16 11:00:13 vm-corp intz-nimitz[498323]:  20241016 110013     CFG recargado base.cfg_recarga.pruebas=1
 Oct 16 11:00:13 vm-corp intz-nimitz[498323]:  20241016 110013     CFG recargado base.cfg_recarga.hay_flush_traza=1
 Oct 16 11:00:13 vm-corp intz-nimitz[498323]:  20241016 110013.934     CFG recargado base.cfg_recarga.traza_milisegundos=1
 Oct 16 11:00:13 vm-corp intz-nimitz[498323]:  20241016 110013.934     CFG leido tipo=natu grp=sis nom=subsistema val=0
 Oct 16 11:00:13 vm-corp intz-nimitz[498323]:  20241016 110013.934     CFG leido tipo=natu grp=sis nom=tareas_max_num val=32
 Oct 16 11:00:13 vm-corp intz-nimitz[498323]:  20241016 110013.934     CFG leido tipo=natu grp=gmp nom=num_msj val=1024
 Oct 16 11:00:13 vm-corp intz-nimitz[498323]:  20241016 110013.934     CFG leido tipo=natu grp=gmp nom=num_buf val=1024
 Oct 16 11:00:13 vm-corp systemd[1]: Started LSB: Start/stop intz-nimitz.



Volver arriba [Volver al índice]

3.8.3.1.4 Ficheros de Intz-nimitz



Como complemento a los comandos se pueden visualizar los siguientes ficheros relativos al proceso:

* Fichero de configuración del proceso en /etc/MDtel/intz-nimitz.conf
* Fichero log del proceso en /var/log/intz-nimitz.log



Ficheros de configuración:

  root@preproduccioncorp0:~# cat /etc/MDtel/intz-nimitz.conf
  #
  # Los nombres no pueden tener números
  # Si el valor de una cadena contiene espacios, se pondrá entre comillas dobles
  # Los valores comentados indican valores por defecto


 base =
 {
         cfg =
         {
                 soy_demonio = true
                 hay_syslog = false
                 archivo_pid = ""       // "": /var/run/vivait-mcan.pid
                 archivo_traza = ""     // "": stdout o /var/log/vivait-mcan.log si soy_demonio
         }
         cfg_recarga =
         {
                 pruebas = true
                 nivel_traza = 3        // 0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo
                 hay_flush_traza = true
                 traza_milisegundos = true
         }
         sis =
         {
                 subsistema = 0         // No modificar
                 tareas_max_num = 32
         }
         gmp =
         {
                 num_msj = 1024         // Numero de mensajes. Cada llamada en curso requiere de un mensaje
                 num_buf = 1024         // Numero de buffer
         }
 }
 
 supervision =
 {
         puerto_escucha = 1115
 }
 
 supervision_recarga =
 {
         to_periodo = 60
 }
 
 cache =
 {
         hay_cache = true
 }
 
 cache_recarga =
 {
         colas_to_vida = 300     // si 0, no se alamacenan entradas
         colas_num_entrada = 128
         vdn_to_vida = 300       // si 0, no se alamacenan entradas
         vdn_num_entrada = 128
 }
 
 regexp =
 {
         hay_regexp = true
 }
 
 regexp_recarga =
 {
         num_entradas = 32
         inc_entradas = 128
         max_entradas = 1024
 }
 
 vivaitcall =
 {
         hay_vic = true
         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 = true
         ejecutar_desvio_incondicional = false
         ejecutar_desvio_mensa_incondicional = false
         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 = true
         host = "BDTR"
         usuario = "nimitz"
         clave = "phikau3iwCe4O0PP5b09ng=="
         base_datos = "nimitz"
         charset = "utf8mb4"
         bd_supervivencia = false
         hisllam_insertar = true
         hisllam_dnis_regexp_excluir = "^0?016$"
         num_curro = 10
 }
 
 mysql_recarga =
 {
         to_resp = 5
 }
 
 @include "/etc/MDtel/intz-nimitz_MDtel.conf"
 @include "/etc/MDtel/intz-nimitz_Particular.conf"
 
 root@preproduccioncorp0:~# cat /etc/MDtel/intz-nimitz_MDtel.conf
 sql_comun =
 {
         hora =
         {
                 num_par = 0
                 tam_par = 32
                 num_res = 1
                 tam_res = 32
                 sql = "select now()"
         }
 
         tiempoDial =
         {
                 num_par = 1
                 tam_par = 32
                 num_res = 1
                 tam_res = 32
                 sql = "select N_PRIORIDAD from CEN_EXTENSIONES where C_NOMBRE=?"
         }
 }
 
 root@preproduccioncorp0:~# cat /etc/MDtel/intz-nimitz_Particular.conf
 sql_particular =
 {
 }



Los siguientes son los campos significativos de los fichero de configuración:

Para el fichero intz-nimitz.conf

Variable a modificar Comentarios Posibles valores (si aplica)
soy_demonio Si se ejecuta como demonio o como proceso true: demonio – false: proceso
hay_syslog Si hay servidor de syslog true: lo hay – false: 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=true)
pruebas
nivel_traza # Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
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_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
todas/ip Dirección de red de escucha del intz-nimitz
todas/msk Máscara de red de escucha del intz-nimitz
localhost/ip IP localhost
localhost/msk Máscara localhost
hay_enrutamiento Hay fase de enrutamiento o no true: hay enrutamiento – false: no hay
ejecutar_desvio_incondicional
ejecutar_desvio_mensa_incondicional
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 true: hay - false: 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 true: hay base de datos de supervivencia – false: no hay
hisllam_insertar
hisllama_dnis_regexp_excluir
num_curro Número de conexiones simultáneas a la base de datos
to_resp Timeout de respuesta



Para el fichero intz-nimitz_MDtel.conf

Variable a modificar Comentarios Posibles valores (si aplica)
hora/num_par
hora/tam_par
hora/num_res
hora/tam_res
hora/sql
tiempoDial/num_par
tiempoDial/tam_par
tiempoDial/num_res
tiempoDial/tam_res
tiempoDial/sql



Volver arriba [Volver al índice]

3.8.3.2 Intz-GH



3.8.3.2.1 Introducción



Software desarrollado por MDtel (©intz-GH MDtel) que implementa el entorno para integrar la funcionalidad Gran Hermano en VIVAit.
Gran Hermano (GH) controla el estado de las extensiones de diferentes nodos. Los servicios que permite gestionar son:

- La retrollamada entre extensiones de diferentes nodos,
- Estado de extensiones de VIVAit, implementa la funcionalidad BLF interno.
- EStado de extensiones externas, de momento disponible para extensiones VORA; implementa la funcionalidad BLF externo.



Esquema funcional

Gran hermano.png



GH solo se instala en un nodo. Se recomienda instalarlo en el nodo con menos carga del sistema, por defecto se instala en la maquina con BDHIST.
VORA es el servicio de presencia de Vodafone para extensiones on-net de una VPN. Permite la supervisión de extensiones on-net pero no la captura de sus llamadas.
Para VORA se necesita un nodo de presencia. Este nodo es un servicio instalado en cualquier servidor del sistema.

Volver arriba [Volver al índice]

3.8.3.2.2 Retrollamadas



La funcionalidad retrollamada controlada por Gran Hermano se comportará de la siguiente forma:

  • 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 se pueda programar una retrollamada cuando se ha llamado a una numeración de usuario, pero queda programada sobre la extensión física en la que está ese usuario en el momento de activarla.
  • La retrollada sobre un número llamado "B" se puede canalizar por varias situaciones de tráfico telefónico:
"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 puede activar una retrollamada sobre la extensión "B" son:
"B" está ocupada
"B" no contesta
"B" está ocupada y no contesta (ha sonado en línea 2--> )

Estas dos últimas casuísticas son iguales a efectos de usuario, pero no a efectos del sistema.
Solo se puede activar la retrollamada si el sistema devuelve: extensión ocupada o extensión no contesta
Si una llamada va a buzón, salta a un grupo ACD, a una IVR, etc. entonces NO se puede activar la retrollamada (porque se considera contestada)

Uso de la funcionalidad retrollamda

* Para programar una retrollamada se digita el código de facilidad de tipo Activar retrollamada definido en Vivait una vez informada la llamada;
el sistema recuerda la última llamada durante un período de tiempo configurable; aunque entre una llamada en "A" o esta extensión realice una llamada, se podrá programar retrollamada a la última saliente candidata si sigue dentro del período configurado.
* Se podrá abortar una retrollamada activa digitando el código de facilidad de tipo Cancelar retrollamada definido en Vivait
Esto no borrará la última llamada se puede reactivar después de haber abortado la retrollamada.
* En 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 sobre una extensión "B". Esta sera la última.
* Si la ultima llamada saliente es, por ejemplo exterior --> No hay posibilidad de programar ninguna retrollamada.



Acuerdos de funcionamiento

* Un origen "A" solo tendrá activar una retrollamada a un destino "B"; si teniendo una retrollamada activada se decide programar otra a otro destino, la primera retrollamada 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 al siguiente y así hasta responder a todas las activaciones.
* Si se trata de programar una "n+1" retrollamada desde una extensión "A" para un destino "B" con "n" retrollamadas ya activas, el sistema le informará de que la retrollamada no ha podido programarse mediante la locución correspondiente.



Cuestiones

* Se prevé que la retrollamada suene en una extensión desviada; si "A" llama a "B" y esta está desviada a "C", si suena "C" la retrollamada se activa sobre "C".
* Si salta al buzón no puede haber retrollamada.



Volver arriba [Volver al índice]

3.8.3.2.3 Diagnóstico en intz-GH



Para monitorizar el funcionamiento del entorno intz-GH se pueden usar comandos y consultar ficheros log y de configuración.
Esto permitirá realizar un diagnostico ante un posible mal funcionamiento de las funcionalidades que ofrece Gran Hermano.

3.8.3.2.4 Comandos de intz-gh



Información del servicio

Se puede obtener información del proceso intz-gh. Para ello se invoca el siguiente comando en la consola de ubuntu:

     nc ip_máquina 1116



Resultado esperado

  root@preproducciongestion:~# nc localhost 1116
  intz-gh sis ver='00.01.05' inic='20241018 030221' alarmas=651 ultAlar='20241028 130310'
  intz-gh gmp msj=252/256 buf=256/256 tarea=7/15
  intz-gh tmp uptime=986091 (11d 9h 54m 51s)
  intz-gh vic identif='gh_000' entorno='gh' conx=0/8 numConx=175424(8)
  intz-gh regExpr entr=32/32/1024 numRegExpr=0 consul=0(0)
  intz-gh ias nodos=11 nodosPres=1 cmd=1722(0) cmdErr=0 tresp=0
  intz-gh gh1 exten=36/300 enla=18/20 retro=0/0/50
  intz-gh gh1 soli=175419(8) soliErr=5(0) soliEncol=1345(0)
  intz-gh wws conxNum=0 conxMaxPeriodo=0 hilos=0/2 wsi



La información obtenida se puede interpretar en la siguiente tabla:

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 Numero de mensajes. Cada llamada en curso requiere de un mensaje
gmp/buf Numero de buffer
gmp/tarea Numero de tareas
tmp/uptime Tiempo que lleva el servicio activo
vic/identif Etiqueta de identificación del servicio
vic/entorno Entorno de gran hermano
vic/conx Conexiones activas/conexiones máximas
vic/numConx Conexiones totales (último minuto)
mys/curro Número de hilos contra la base de datos
regExpr/entr
regExpr/numRegExpr
regExpr/consul
ias/nodos
ias/nodosPres
ias/cmd
ias/cmdErr
ias/tresp
gh1/exten
gh1/eenla
gh1/retro
gh1/soli
gh1/soliErr
gh1/soliEncol
wws/conxNum
wws/conxMaxPeriodo
wws/hilos
wws/wsi



Gestión del servicio

Se puede monitorizar/parar/iniciar/reiniciar el funcionamiento del proceso intz-gh. Para ello se invoca el siguiente comando en la consola de ubuntu en el nodo donde esté instalado:

    systemctl status/stop/start/reboot intz-gh.service



Resultado esperado del estado

  root@preproducciongestion:~# systemctl status intz-gh.service
  ● intz-gh.service - LSB: Start/stop intz-gh
       Loaded: loaded (/etc/init.d/intz-gh; generated)
       Active: active (running) since Fri 2024-10-18 03:02:21 CEST; 1 week 4 days ago
         Docs: man:systemd-sysv-generator(8)
        Tasks: 11 (limit: 4556)
       Memory: 9.5M
          CPU: 26min 12.345s
       CGroup: /system.slice/intz-gh.service
               └─674 /usr/sbin/intz-gh - /etc/MDtel/intz-gh.conf
  Oct 18 03:02:21 preproducciongestion systemd[1]: Starting LSB: Start/stop intz-gh...
  Oct 18 03:02:21 preproducciongestion intz-gh[621]: Starting intz-gh
  Oct 18 03:02:21 preproducciongestion intz-gh[621]: .
  Oct 18 03:02:21 preproducciongestion systemd[1]: Started LSB: Start/stop intz-gh.



Elementos de asterisk

El comando para conocer el estado de los diferentes elementos en Asterisk referentes a Gran Hermano es:

   mdgh show



El comando se invoca desde la consola de asterisk con las siguientes opciones:

   mdgh show [config | exten <exten_num> | enla <peer>]]



Ejemplo configuración:

  preproduccioncorp1*CLI> mdgh show config
  mdgh Configuracion:
    debug=no
    retro_hay=yes
    subscripcion_hay=yes
    estado_enlace_hay=yes
    rest_red_ip=172.25.0.0
    rest_red_msk=255.255.0.0
    rest_puerto_escucha=8090
    retro_exten_tech=SIP
    retro_contexto=Cen_InicioLlamada_GHRetro
    retro_to_descolgar=30 s
    retro_A_cartel_fmt='retro: %s'



Ejemplo estado de extensión:

  preproduccioncorp1*CLI> mdgh show exten 40702
  mdgh Datos de la extension 40702:
  Datos en intz-gh:
    ESTADO=NOT_INUSE
    INUSE=0
    RINGING=0
    TS=1730801824
    HACE=20
    RETRO_B_CONT=1
    RETRO_B_EXTEN=40716
    RETRO_B_HACE=3
    SUBS_NODOS_NUM=2
  Estado en cache local: NOT_INUSE



Ejemplo estado de enlace:

  preproduccioncorp1*CLI> mdgh show enla Trunk_MDtel
   mdgh Datos del enlace Trunk_MDtel:
      Datos en intz-gh:
      INUSE=0
      RINGING=0
      TS=1538978766
      HACE=461



Volver arriba [Volver al índice]

3.8.3.2.5 Ficheros de intz-gh



Como complemento a los comandos se pueden visualizar los siguientes ficheros relativos al proceso:

* Fichero de configuración del proceso gran hermano en /etc/MDtel/intz-gh.conf
* Fichero de configuración de la aplicación MDintz de asterisk para gran hermano en /etc/asterisk/mdgh.conf
* Fichero log del proceso gran hermano en /var/log/intz-gh.log



Ficheros de configuración del proceso gran hermano

El demonio gran hermano tiene un fichero de configuración intz-gh.conf.
Este fichero se puede consultar con el comando:

  cat /etc/MDtel/intz-gh.conf



  root@preproducciongestion:~# cat /etc/MDtel/intz-gh.conf
  base =
  {
          cfg =
          {
                  soy_demonio = true
                  hay_syslog = false
                  archivo_pid = ""       // "": /var/run/vivait-mcan.pid
                  archivo_traza = ""     // "": stdout o /var/log/vivait-mcan.log si soy_demonio
          }
          cfg_recarga =
          {
                  pruebas = true
                  nivel_traza = 3        // 0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo
                  hay_flush_traza = true
                  traza_milisegundos = true
          }
          sis =
          {
                  subsistema = 0         // No modificar
                  tareas_max_num = 16
          }
          gmp =
          {
                  num_msj = 256          // Numero de mensajes. Cada llamada en curso requiere de un mensaje
                  num_buf = 256          // Numero de buffer
          }
  }
  
  supervision =
  {
          puerto_escucha = 1116
  }
  
  supervision_recarga =
  {
          to_periodo = 60
  }
  
  regexp =
  {
          hay_regexp = true
  }
  
  regexp_recarga =
  {
          num_entradas = 32
          inc_entradas = 128
          max_entradas = 1024
  }
  
  vivaitcall =
  {
          hay_vic = true
          puerto_escucha = 5556
          identif = "gh_000"
          entorno = "gh"
          max_conx = 8
  }
  
  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 = true
          host = "BDTR"
          usuario = "nimitz"
          clave = "phikau3iwCe4O0PP5b09ng=="
          base_datos = "nimitz"
          charset = "utf8mb4"
  }
  
  mysql_recarga =
  {
          to_resp = 5
  }
  
  gh1 =
  {
          hay_gh1 = true
  // 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 = 9
  // numero maximo de extensiones soportadas
          exten_max = 300
  // 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 = true
          url = "mdgh_rest"
          puerto = 8090
          url_presencia = "/IntzPresence/Publish"
          puerto_presencia = 8180
  }
  
  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
  }
  
  wws =
  {
          hay_wws = true
          ip_escucha = "127.0.0.1"
          puerto_escucha = 7667
          hilos_max = 2
          conx_max = 2
          conxt_to_seg = 10
          arch_subir_max_M = 1
          arch_subir_tmp_prefijo = "/tmp/intz-gh_wws_"
  }
  
  wws_recarga =
  {
          access_control_allow_origin = ""
          filtro_00_ip = "0.0.0.0"
          filtro_00_msk = "0.0.0.0"
          filtro_01_ip = ""
          filtro_01_msk = ""
          filtro_02_ip = ""
          filtro_02_msk = ""
          filtro_03_ip = ""
          filtro_03_msk = ""
  }



Los campos del fichero de configuración y su significado son los siguientes:

Variable a modificar Comentarios Posibles valores (si aplica)
soy_demonio Si se ejecuta como demonio o como proceso true: demonio – false: proceso
hay_syslog Si hay servidor de syslog true: hay syslog– false: no hay syslog
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=true)
pruebas
nivel_traza # Nivel_traza: (0: alarma, 1: aviso, 2: info, 3: depuAlto o 4: depuBajo)
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 Tiempo en segundos
hay_regexp true: hay cache – false: no hay cache
num_entradas
inc_entradas
max_entradas
hay_vic
puerto_escucha Puerto de escucha a nivel de vivait-call
identif
entorno Nombre en el fichero de configuración de la aplicación MDintz Valor = "gh"
max_conx Número máximo de conexiones a la base de datos
to_solicitud Timeout de solicitud Tiempo en segundos
to_desconexion Timeout de desconexión Tiempo en segundos
ip_valida
todas/ip
todas/msk
localhost/ip IP localhost
localhost/msk Máscara localhost
hay_mysql Hay mysql true: hay BBDD - false: no hay BBDD
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 "nimitz"
charset
mysql_recarga/to_resp
hay_gh1 hay gran hermano true: hay gh1 - false: no hay gh1
exten_min_digi mínimo número de dígitos de una extensión
exten_max_digi máximo número de dígitos de una extensión
exten_max número máximo de extensiones soportadas
enla_max número máximo de enlaces soportadas
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 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 maximo 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 true: hay ias - false: no hay ias
url
puerto
url_presencia
puerto_presencia
to_conex_cmd tiempo maáimo 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
hay_wws true: hay ias - false: no hay ias
ip_escucha
puerto_escucha
hilos_max
conx_max
conxt_to_seg
arch_subir_max_M
arch_subir_tmp_prefijo
access_control_allow_origin
filtro_00_ip
filtro_00_msk
filtro_01_ip
filtro_01_msk
filtro_02_ip
filtro_02_msk
filtro_03_ip
filtro_03_msk



Volver arriba [Volver al índice]

Ficheros de configuración de la aplicación MDintz

Existe un fichero de configuración de gran hermano para la aplicación MDintz de asterisk.
Este fichero se puede consultar con el comando:

    cat /etc/asterisk/mdgh.conf



 root@preproduccioncorp1:~# cat /etc/asterisk/mdgh.conf
 [servicios]
 retro_hay=yes
 subscripcion_hay=yes
 estado_enlace_hay=yes
 [rest]
 rest_red_ip=172.25.0.0
 rest_red_msk=255.255.0.0
 rest_puerto_escucha=8090
 retro_exten_tech=SIP
 retro_contexto=Cen_InicioLlamada_GHRetro
 retro_to_descolgar=30
 retro_A_cartel_fmt=retro: %s



Los campos del fichero de configuración y su significado son los siguientes:

Campo Descripción
retro_hay YES -> se activa la retrollamada multinodo de GH; NO -> se utiliza la retrollamada de Asterisk
subscripcion_hay YES -> se utilizan los BLFs de GH; NO -> se utilizan los BLFs de Asterisk
estado_enlace_hay YES -> se utilizan la supervisión de enlaces de GH; NO -> se utiliza la supervisión de enlaces de Asterisk
rest_red_ip IP del servidor donde se ejecuta 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 para retrollamada
retro_to_descolgar timeot retrollamada descolgar
retro_A_cartel_fmt Información que aparece en el display si la llamada es una retrollamada



Volver arriba [Volver al índice]

Fichero LOG del proceso gran hermano

Existe un fichero log donde se guarda la actividad del proceso en el servidor donde se ejecuta gran hermano.
Este fichero se puede consultar en tiempo real con el comando:

    tail -f /var/log/intz-gh.log



Ejemplo: Activación de una retrollamada por no contesta (parte "A" = 40716, parte "B" = 40702)

  root@preproducciongestion:/tmp# tail -f /var/log/intz-gh.log
  '
   20241104 140039.637     VIC(3/5/172.25.128.254) solicitud:
  identif='gh_000'
  channel='Local/40702@Cen_MARCAR_Grabar-000001b6;2'
  context='Cen_Marcar_Extension_Dial'
  exten='%-NOANSWER'
  priority=33
  entorno='gh'
  servicio='gh1'
  numPar=6
  par0='RETRO_CANDIDATO'
  par1='2'
  par2='40716'
  par3='40702'
   20241104 140039.637     GH1ev enla ESTA_NOT_INUSE hayCambios=1 idNodo=2 enla=PrePro-CORP1 esta=NOT_INUSE inuse=0/0 ringing=0/0
   20241104 140039.637     VIC var MDintzServicio='gh1'
   20241104 140039.637     VIC var MDintzIdentif='gh_000'
   20241104 140039.637     VIC var MDintzRes='OK'
   20241104 140039.637     GH1ev enla ESTA_NOT_INUSE hayCambios=1 idNodo=1 enla=PrePro-CORP2 esta=NOT_INUSE inuse=0/0 ringing=0/0
   20241104 140039.637     VIC var MDintzServicio='gh1'
   20241104 140039.637     VIC var MDintzIdentif='gh_000'
   20241104 140039.637     VIC var MDintzRes='OK'
   20241104 140039.637     GH1ev RETRO_CANDIDATO exten_A=40716 exten_B=40702/'cana' esta=ESPERA_B caduca='20241104 140139'
   20241104 140039.637     VIC var MDintzServicio='gh1'
   20241104 140039.638     VIC var MDintzIdentif='gh_000'
   20241104 140039.638     VIC var MDintzRes='OK'
   20241104 140039.639     VIC(2/172.25.128.251) Desconectando conHilo=0
   20241104 140039.639     VIC(1/172.25.128.254) Desconectando conHilo=0
   20241104 140039.640     VIC(3/172.25.128.254) Desconectando conHilo=0
   20241104 140039.640     VIC(4/172.25.128.251) Conectado ipFd=0
   20241104 140039.643     VIC(5/172.25.128.254) Conectado ipFd=3
   20241104 140039.689     VIC(4/0/172.25.128.251) solicitud:
  identif='gh_000'
  channel='(null)'
  context='default'
  exten='s'
  priority=1
  entorno='gh'
  servicio='gh1'
  numPar=6
  par0='ESTA_NOT_INUSE'
  par1='1'
  par2='40702'
  par3='99'
   20241104 140039.689     VIC(5/3/172.25.128.254) solicitud:
  identif='gh_000'
  channel='(null)'
  context='default'
  exten='s'
  priority=1
  entorno='gh'
  servicio='gh1'
  numPar=6
  par0='ESTA_NOT_INUSE'
  par1='2'
  par2='PrePro-CORP1'
  par3='2147483647'
   20241104 140039.689     GH1ev exten ESTA_NOT_INUSE hayCambios=1 idNodo=1 exten=40702 estaOld=RINGING esta=NOT_INUSE call_limit=99/99 inuse=0/0 ringing=0/0
   20241104 140039.689     VIC var MDintzServicio='gh1'
   20241104 140039.689     VIC var MDintzIdentif='gh_000'
   20241104 140039.689     VIC var MDintzRes='OK'
   20241104 140039.689     GH1ev enla ESTA_NOT_INUSE hayCambios=0 idNodo=2 enla=PrePro-CORP1 esta=NOT_INUSE inuse=0/0 ringing=0/0
   20241104 140039.689     VIC var MDintzServicio='gh1'
   20241104 140039.690     VIC var MDintzIdentif='gh_000'
   20241104 140039.690     VIC var MDintzRes='OK'
   20241104 140039.690     IAS(5) enviado a 172.25.128.251:8090 'GET /mdgh_rest?cmd=ESTA&exten_A_num=40702&exten_A_esta=NOT_INUSE& HTTP/1.0
  
  '
   20241104 140039.690     VIC(4/172.25.128.251) Desconectando conHilo=0
   20241104 140039.691     VIC(5/172.25.128.254) Desconectando conHilo=0
   20241104 140039.693     VIC(6/172.25.128.251) Conectado ipFd=0
   20241104 140039.740     VIC(6/0/172.25.128.251) solicitud:
  identif='gh_000'
  channel='(null)'
  context='default'
  exten='s'
  priority=1
  entorno='gh'
  servicio='gh1'
  numPar=6
  par0='ESTA_NOT_INUSE'
  par1='1'
  par2='40702'
  par3='99'
   20241104 140039.742     GH1ev exten ESTA_NOT_INUSE hayCambios=0 idNodo=1 exten=40702 estaOld=NOT_INUSE esta=NOT_INUSE call_limit=99/99 inuse=0/0 ringing=0/0
   20241104 140039.742     VIC var MDintzServicio='gh1'
   20241104 140039.742     VIC var MDintzIdentif='gh_000'
   20241104 140039.742     VIC var MDintzRes='OK'
   20241104 140039.746     VIC(6/172.25.128.251) Desconectando conHilo=0
   20241104 140039.786     VIC(7/172.25.128.254) Conectado ipFd=0
   20241104 140039.790     VIC(7/0/172.25.128.254) solicitud:
  identif='gh_000'
  channel='(null)'
  context='default'
  exten='s'
  priority=1
  entorno='gh'
  servicio='gh1'
  numPar=6
  par0='ESTA_NOT_INUSE'
  par1='2'
  par2='40716'
  par3='99'
   20241104 140039.790     GH1ev exten ESTA_NOT_INUSE hayCambios=1 idNodo=2 exten=40716 estaOld=INUSE esta=NOT_INUSE call_limit=99/99 inuse=0/0 ringing=0/0
   20241104 140039.790     VIC var MDintzServicio='gh1'
   20241104 140039.791     VIC var MDintzIdentif='gh_000'
   20241104 140039.791     VIC var MDintzRes='OK'
   20241104 140039.791     VIC(7/172.25.128.254) Desconectando conHilo=0
   20241104 140039.890     IAS(5) recibido de 172.25.128.251:8090 'HTTP/1.0 200 OK
  
  {
    "result": "OK"
  }'
   20241104 140039.896     IAS(0) enviado a 172.25.128.254:8090 'GET /mdgh_rest?cmd=ESTA&exten_A_num=40702&exten_A_esta=NOT_INUSE& HTTP/1.0
  
  '
   20241104 140040.097     IAS(0) recibido de 172.25.128.254:8090 'HTTP/1.0 200 OK
  
  {
    "result": "OK"
  }'
   20241104 140040.097     IAS(0) enviado a 172.25.128.252:8180 'GET //IntzPresence/Publish?cmd=ESTA&exten_A_num=40702&exten_A_esta=NOT_INUSE& HTTP/1.0
  
  '
   20241104 140040.297     IAS(0) recibido de 172.25.128.252:8180 'HTTP/1.1 200
  Content-Length: 0
  Date: Mon, 04 Nov 2024 13:00:40 GMT
  Connection: close
  
  '
   20241104 140040.299     IAS(0) enviado a 172.25.128.252:8180 'GET //IntzPresence/Publish?cmd=ESTA&exten_A_num=40716&exten_A_esta=NOT_INUSE& HTTP/1.0
  
  '
   20241104 140040.499     IAS(0) recibido de 172.25.128.252:8180 'HTTP/1.1 200
  Content-Length: 0
  Date: Mon, 04 Nov 2024 13:00:40 GMT
  Connection: close
  
  '
   20241104 140048.209     VIC(1/172.25.128.65) Conectado ipFd=0
   20241104 140048.258     VIC(1/0/172.25.128.65) solicitud:
  identif='gh_000'
  channel='(null)'
  context='default'
  exten='s'
  priority=1
  entorno='gh'
  servicio='gh1'
  numPar=6
  par0='ESTA_UNAVAILABLE'
  par1='3'
  par2='PrePro-Meet-16.04'
  par3='0'
   20241104 140048.258     GH1ev enla ESTA_UNAVAILABLE hayCambios=0 idNodo=3 enla=PrePro-Meet-16.04 esta=UNAVAILABLE inuse=0/0 ringing=0/0
   20241104 140048.258     VIC var MDintzServicio='gh1'
   20241104 140048.258     VIC var MDintzIdentif='gh_000'
   20241104 140048.258     VIC var MDintzRes='OK'
   20241104 140048.259     VIC(1/172.25.128.65) Desconectando conHilo=0
   20241104 140048.262     VIC(2/172.25.128.65) Conectado ipFd=0
   20241104 140048.309     VIC(2/0/172.25.128.65) solicitud:
  identif='gh_000'
  channel='(null)'
  context='default'
  exten='s'
  priority=1
  entorno='gh'
  servicio='gh1'
  numPar=6
  par0='ESTA_UNAVAILABLE'
  par1='3'
  par2='PrePro-Meet'
  par3='0'
   20241104 140048.309     GH1ev enla ESTA_UNAVAILABLE hayCambios=0 idNodo=3 enla=PrePro-Meet esta=UNAVAILABLE inuse=0/0 ringing=0/0
   20241104 140048.309     VIC var MDintzServicio='gh1'
   20241104 140048.309     VIC var MDintzIdentif='gh_000'
   20241104 140048.309     VIC var MDintzRes='OK'
   20241104 140048.310     VIC(2/172.25.128.65) Desconectando conHilo=0
   20241104 140054.863     VIC(3/172.25.128.254) Conectado ipFd=0
   20241104 140054.892     VIC(3/0/172.25.128.254) solicitud:
  identif='gh_000'
  channel='(null)'
  context='default'
  exten='s'
  priority=1
  entorno='gh'
  servicio='gh1'
  numPar=6
  par0='ESTA_INUSE'
  par1='2'
  par2='40716'
  par3='99'
   20241104 140054.893     GH1ev exten ESTA_INUSE hayCambios=1 idNodo=2 exten=40716 estaOld=NOT_INUSE esta=INUSE call_limit=99/99 inuse=1/1 ringing=0/0
   20241104 140054.893     VIC var MDintzServicio='gh1'
   20241104 140054.893     VIC var MDintzIdentif='gh_000'
   20241104 140054.893     VIC var MDintzRes='OK'
   20241104 140054.894     IAS(3) enviado a 172.25.128.252:8180 'GET //IntzPresence/Publish?cmd=ESTA&exten_A_num=40716&exten_A_esta=INUSE& HTTP/1.0
  
  '
   20241104 140054.894     VIC(3/172.25.128.254) Desconectando conHilo=0
   20241104 140055.012     VIC(4/172.25.128.254) Conectado ipFd=0
   20241104 140055.043     VIC(4/0/172.25.128.254) solicitud:
  identif='gh_000'
  channel='Local/*43#@Cen_MARCAR_Grabar-000001b8;2'
  context='Cen_Facilidad_30'
  exten='*43#'
  priority=10
  entorno='gh'
  servicio='gh1'
  numPar=5
  par0='RETRO_SOLICITAR'
  par1='2'
  par2='40716'
  par3='40716'
   20241104 140055.043     GH1ev RETRO_SOLICITAR nuevo ind=4 idNodo_A=2 idDispositivo_A=191 exten_A=40716/'40716' exten_B=40702/'cana' esta=ESPERA_B caduca='20241104 140555'
   20241104 140055.043     VIC var MDintzServicio='gh1'
   20241104 140055.044     VIC var MDintzIdentif='gh_000'
   20241104 140055.044     VIC var MDintzRes='OK'
   20241104 140055.046     VIC(4/172.25.128.254) Desconectando conHilo=0
   20241104 140055.094     IAS(3) recibido de 172.25.128.252:8180 'HTTP/1.1 200
  Content-Length: 0
  Date: Mon, 04 Nov 2024 13:00:55 GMT
  Connection: close
  
  '
   20241104 140057.332     VIC(5/172.25.128.254) Conectado ipFd=0
   20241104 140057.354     VIC(5/0/172.25.128.254) solicitud:
  identif='gh_000'
  channel='(null)'
  context='default'
  exten='s'
  priority=1
  entorno='gh'
  servicio='gh1'
  numPar=6
  par0='ESTA_NOT_INUSE'
  par1='2'
  par2='40716'
  par3='99'
   20241104 140057.355     GH1ev exten ESTA_NOT_INUSE hayCambios=1 idNodo=2 exten=40716 estaOld=INUSE esta=NOT_INUSE call_limit=99/99 inuse=0/0 ringing=0/0
   20241104 140057.355     VIC var MDintzServicio='gh1'
   20241104 140057.355     VIC var MDintzIdentif='gh_000'
   20241104 140057.355     VIC var MDintzRes='OK'
   20241104 140057.355     IAS(5) enviado a 172.25.128.252:8180 'GET //IntzPresence/Publish?cmd=ESTA&exten_A_num=40716&exten_A_esta=NOT_INUSE& HTTP/1.0
  
  '
   20241104 140057.360     VIC(5/172.25.128.254) Desconectando conHilo=0
   20241104 140057.556     IAS(5) recibido de 172.25.128.252:8180 'HTTP/1.1 200
  Content-Length: 0
  Date: Mon, 04 Nov 2024 13:00:57 GMT
  Connection: close



Volver arriba [Volver al índice]

3.9 PQCTI






Volver arriba [Volver al índice]

3.10 Record






Volver arriba [Volver al índice]

3.11 VCB






Volver arriba [Volver al índice]

3.12 VIVAit WebCall






Volver arriba [Volver al índice]

3.13 VIVAit Call






Volver arriba [Volver al índice]

3.14 VIVAit Tracker






Volver arriba [Volver al índice]

3.15 VIVAit Supervisor






Volver arriba [Volver al índice]

4 Descripción de los elementos, diagnósticos y operaciones

4.1 Funcionamiento en cluster

Un clúster es un grupo de múltiples ordenadores unidos mediante una red de alta velocidad, de tal forma que el conjunto es visto como un único ordenador.

De un clúster se espera que presente combinaciones de los siguientes servicios:

  1. Alto rendimiento
  2. Alta disponibilidad
  3. Balanceo de carga
  4. Escalabilidad

Tal y como esta definido el cluster de MDtel, este comprueba conectividad con la otra máquina que lo forma y con un punto de confianza. Si la máquina no tiene conectividad con la otra y si con el punto de confianza es que el servidor está vivo, mientas que si no tengo conectividad ni con la otra máquina ni con el punto de confianza es que el muerto soy yo, por lo que balanceo.

Por lo que las máquinas balancean en los casos siguientes:

  • Todo lo que tenga que ver con la red, es decir, caída de la tarjeta de red, apagado de la máquina, corte en la red..

Y no balancea en los siguientes:

  • No balancea en los demás casos, es decir, todo lo que tenga que ver con procesos de una máquina (caída asterisk, base de datos, intz-nimitz)


4.1.1 Píldoras
4.1.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
4.1.1.2 Borrar un recurso
pcs resource delete DRBDFs
4.1.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


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


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


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


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

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

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


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


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


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


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

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


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


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


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


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


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


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


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


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


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


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


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


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

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


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


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


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



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




.

4.2 Servicios networking

Son muy importantes las configuraciones adecuadas de los servicios de:

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

4.3 Bases de datos (BBDD)

4.3.1 Diagnósticos y operaciones sobre bases de datos

4.3.1.1 Comprobación que una base de datos está arrancada

Para comprobar si la base de datos está arrancada debemos poner en el terminal : ps aux | grep mysql

Si la base de datos está arrancada y funcionando correctamente se nos mostrará en el terminal:

Base Datos bien.png

Por el contrario, si la base de datos presenta algun problema el mensaje mostrado será:

Base datos mal.png
4.3.1.2 Comprobación que la base de datos de réplica está sincronizada con la base de datos de tiempo real.

Si se necesita verificar que la base de réplica está sincronizada con la base de datos en tiempo real basta con acudir al comando : show slave status\G.

Una vez introducido veremos:

Replica.png

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.

[| Volver al índice]

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


E_ACCION Nº E_ACCION TAccionLog Descripción de la acción `C_TABLA` `ID_REGISTRO` `N_PAR1` `N_PAR2` `C_PAR3` `C_PAR4`
10 accionLog_escuchar_seg Escuchar segmento
20 accionLog_escuchar_lla Escuchar llamada
30 accionLog_descargar_seg Descargar segmento
40 accionLog_descargar_lla Descargar llamada
50 accionLog_generar_config Generar configuración
60 accionLog_cambiar_clave_propia Cambiar clave propia
65 accionLog_login_correcto Login correcto idUsuario nivelSupervisor
70 accionLog_login_erroneo Login erroneo
80 accionLog_login_multiple Login multiple
90 accionLog_escuchar_ext Escuchar Extensión
100 accionLog_chg_objetivo_peso Modificar nivel servicio idCola objetivo peso
105 accionLog_add_agente_cola_bd Añadir agente a grupo BD idCola agente prioridad obligatorio
115 accionLog_del_agente_cola_bd Quitar agente de grupo BD idCola agente
125 accionLog_prio_agente_cola_bd Modificar prioridad agente en grupo BD idCola agente prioridad obligatorio
135 accionLog_perfil_agente_bd Asignar perfil a agente BD idAgente perfil
140 accionLog_add_agente Añadrid agente
145 accionLog_del_agente Borrar agente
150 accionLog_chg_agente Modificar agente idAgente nombre cuenta
155 accionLog_add_agenda_perfil Añadir agenda a perfil idPerfil idAgenda
160 accionLog_del_agenda_perfil Borrar agenda de perfil idPerfil idAgenda
165 accionLog_add_entrada_agenda Añadir entrada a agenda idAgenda nombre numero
170 accionLog_del_entrada_agenda Borrar entrada de agenda idEntrada idAgenda nombre numero
175 accionLog_chg_entrada_agenda Modificar entrada de agenda idEntradaAgenda nombre numero
180 accionLog_add_agenda Añadir agenda nombre descripción
185 accionLog_del_agenda Borrar agenda
190 accionLog_chg_agenda Modificar agenda idAgenda nombre descripción
195 accionLog_add_etiqueta_agente Añadir etiqueta agente nombre descripción
200 accionLog_del_etiqueta_agente Borrar etiqueta agente idEtiqueta
205 accionLog_chg_etiqueta_agente Modificar etiqueta agente idEtiqueta nombre descripción
210 accionLog_add_rel_etiqueta_agente Añadir relación etiqueta agente idEtiqueta idUsuario
215 accionLog_del_rel_etiqueta_agente Borrar relación etiqueta agente idEtiqueta idUsuario
220 accionLog_chg_rel_etiqueta_agente Modificar relación etiqueta agente idEtiqueta idUsuario
225 accionLog_add_perfil Añadir perfil nombre descripción
230 accionLog_del_perfil Borrar perfil idPerfil
235 accionLog_chg_perfil Modificar perfil idPerfil nombre descripción
240 accionLog_add_rel_cola_perfil_bd Añadir relación grupo ACD/perfil BD idCola idPerfil prioridad obligatorio
250 accionLog_del_rel_cola_perfil_bd Borrar relación grupo ACD/perfil BD idCola idPerfil prioridad obligatorio
260 accionLog_chg_rel_cola_perfil_bd Modificar relación grupo ACD/perfil BD idCola idPerfil prioridad obligatorio
265 accionLog_add_cola Añadir grupo ACD nombre descripción
270 accionLog_del_cola Borrar grupo ACD
275 accionLog_chg_cola Modificar grupo ACD idAgente nombre descripción
280 accionLog_add_campanna_cola_bd Añadir campaña a grupo ACD BD idCola idCampanna
285 accionLog_del_campanna_cola_bd Borrar campaña de grupo ACD BD
290 accionLog_chg_cola_algor_predic Cambiar algoritmo predictivo de grupo ACD
300 accionLog_enviar_msj Enviar mensaje tipo_msj ambito id_ambito N_VAR1 N_VAR2 C_VAR3
305 accionLog_cerrar_sesion Cerrar sesión idUsuario forzado segundos fecha motivo
310 accionLog_activa_campanna_bd Activar campaña idCampanna activa
320 accionLog_grabacion_sombra Grabación en la sombra
330 accionLog_add_filtro_contactos
335 accionLog_del_filtro_contactos
340 accionLog_chg_filtro_contactos
350 accionLog_add_val_filtro_contactos
355 accionLog_del_val_filtro_contactos
400 accionLog_activar_contactos idCampanna
405 accionLog_cancelar_contactos idCampanna
410 accionLog_orden_contactos idCampanna
415 accionLog_prioridad_contactos idCampanna
ACCIÓN LOGS PORTAL: Faltan añadir en la BD (Datos versión) y Revisar si ya existen. Poner los parámetros
5310 accionLog_chg_acd_configuracion
5315 accionLog_add_acd_finales
5320 accionLog_chg_acd_finales
5325 accionLog_del_acd_finales
5330 accionLog_add_acd_formularios
5335 accionLog_chg_acd_formularios
5340 accionLog_del_acd_formularios
5345 accionLog_add_acd_pausas
5350 accionLog_chg_acd_pausas
5355 accionLog_del_acd_pausas
5359 accionLog_add_cen_molticanal_texto_entrada
5360 accionLog_add_acd_supercolas
5361 accionLog_del_cen_molticanal_texto_entrada
5362 accionLog_udel_cen_molticanal_texto_entrada
5363 accionLog_add_cen_molticanal_texto_salida
5364 accionccionLog_chg_cen_molticanal_texto_salida
5365 accionLog_chg_acd_supercolas
5366 accionLog_udel_cen_molticanal_texto_salida
5367 accionLog_chg_cen_molticanal_texto_entrada
5368 accionLog_del_cen_molticanal_texto_salida
5370 accionLog_del_acd_supercolas
5375 accionLog_udel_acd_supercolas
5380 accionLog_add_acd_vdn
5385 accionLog_chg_acd_vdn
5390 accionLog_del_acd_vdn
5395 accionLog_udel_acd_vdn
5396 accionLog_add_cen_vdn
5397 accionLog_chg_cen_vdn
5398 accionLog_del_cen_vdn
5399 accionLog_udel_cen_vdn
5400 accionLog_add_campos
5405 accionLog_chg_campos
5410 accionLog_del_campos
5415 accionLog_add_categorias
5420 accionLog_chg_categorias
5425 accionLog_del_categorias
5430 accionLog_chg_com_configuracion
5435 accionLog_add_nodos
5440 accionLog_chg_nodos
5445 accionLog_del_nodos
5450 accionLog_udel_nodos
5455 accionLog_add_sedes
5460 accionLog_chg_sedes
5465 accionLog_del_sedes
5470 accionLog_udel_sedes
5475 accionLog_add_dat_sincroniza
5480 accionLog_chg_dat_sincroniza
5485 accionLog_add_extensiones
5490 accionLog_chg_extensiones
5495 accionLog_del_extensiones
5500 accionLog_udel_extensiones
5505 accionLog_add_facilidades
5510 accionLog_chg_facilidades
5515 accionLog_del_facilidades
5520 accionLog_add_locuciones
5525 accionLog_chg_locuciones
5530 accionLog_del_locuciones
5535 accionLog_add_musica
5540 accionLog_chg_musica
5545 accionLog_del_musica
5550 accionLog_add_permisos
5555 accionLog_chg_permisos
5560 accionLog_del_permisos
5565 accionLog_add_plantillas
5570 accionLog_chg_plantillas
5575 accionLog_del_plantillas
5580 accionLog_add_puestos_extensiones
5585 accionLog_chg_puestos_extensiones
5590 accionLog_del_puestos_extensiones
5595 accionLog_des_puestos_extensiones
5600 accionLog_add_usuarios
5605 accionLog_chg_usuarios
5610 accionLog_del_usuarios
5615 accionLog_udel_usuarios
5620 accionLog_chg_licencias
ACCIONES DE LOS EJES
5705 accionLog_chg_Eje
5710 accionLog_out_Eje_Padre
5715 accionLog_del_Eje
5720 accionLog_add_Eje
5725 accionLog_set_Eje_Padre
5730 accionLog_add_acd_pausas_usuarios
5735 accionLog_del_acd_pausas_usuarios
5740 accionLog_add_centros_dispositivos
5745 accionLog_chg_centros_dispositivos
5750 accionLog_del_centros_dispositivos
5755 accionLog_add_centros_extensiones
5760 accionLog_chg_centros_extensiones
5765 accionLog_del_centros_extensiones
5770 accionLog_add_acd_usuarios
5775 accionLog_chg_acd_usuarios
5780 accionLog_add_relacion_campos
5785 accionLog_del_relacion_campos
5786 accionLog_chg_grabacion_configuracion
5787 accionLog_add_campannas
5788 accionLog_chg_campannas
5789 accionLog_del_campannas
5790 accionLog_udel_campannas
5791 accionLog_add_lista_contactos
5792 accionLog_chg_lista_contactos
5793 accionLog_del_lista_contactos
5794 accionLog_udel_lista_contactos
5795 accionLog_add_lista_llamames
5796 accionLog_chg_lista_llamames
5797 accionLog_del_lista_llamames
5798 accionLog_udel_lista_llamames
5799 accionLog_add_lista_robinson
5800 accionLog_chg_lista_robinson
5801 accionLog_del_lista_robinson
5802 accionLog_udel_lista_robinson
5803 accionLog_add_contacto
5804 accionLog_chg_contacto
5805 accionLog_del_contacto
5806 accionLog_udel_contacto
5807 accionLog_import_contactos
5808(*) accionLog_add_contacto_campanna
5818 accionLog_chg_contacto_campanna
5809 accionLog_chk_exist_contacto_campanna
5810 accionLog_add_contacto_lista
5811 accionLog_chk_exist_contacto_lista
5812 accionLog_del_contacto_lista
5813 accionLog_add_estrategia
5814 accionLog_chg_estrategia
5815 accionLog_del_estrategia
5816 accionLog_udel_estrategia
5817(*) accionLog_chk_exist_contacto
5818 accionLog_add_telefono_robinson
5819 accionLog_chg_telefono_robinson
5820 accionLog_del_telefono_robinson
5821 accionLog_chk_exist_robinson_lista
5822 accionLog_add_dat_click2call
5823 accionLog_chg_dat_click2call
5824 accionLog_del_dat_click2call
5825 accionLog_chk_exist_dat_click2call
5826 accionLog_add_aplicaciones
5827 accionLog_chg_aplicaciones
5828 accionLog_del_aplicaciones
5829 accionLog_add_cen_destinos
5830 accionLog_chg_cen_destinos
5831 accionLog_del_cen_destinos
5832 accionLog_add_acd_monitores
5833 accionLog_chg_acd_monitores
5834 accionLog_del_acd_monitores
5835 accionLog_add_campos_monitor_8
5836 accionLog_chg_campos_monitor_8
5837 accionLog_del_campos_monitor_8
5838 accionLog_add_agendas
5839 accionLog_chg_agendas
5840 accionLog_del_agendas
5841 accionLog_add_agendas_telefonos
5842 accionLog_chg_agendas_telefonos
5843 accionLog_del_agendas_telefonos
5844 accionLog_add_agendas_campos_cliente
5845 accionLog_chg_agendas_campos_cliente
5846 accionLog_del_agendas_campos_cliente
GRUPOS DE SALTO
5847 accionLog_add_grupos_salto
5848 accionLog_chg_grupos_salto
5849 accionLog_del_grupos_salto
5850 accionLog_udel_grupos_salto
GRUPOS DE CAPTURA
5851 accionLog_add_grupos_captura
5852 accionLog_chg_grupos_captura
5853 accionLog_del_grupos_captura
5854 accionLog_udel_grupos_captura
5855 accionLog_add_grupos_locuciones
5856 accionLog_chg_grupos_locuciones
5857 accionLog_del_grupos_locuciones
5858 accionLog_udel_grupos_locuciones
INFORMES DE CALIDAD
5859 accionLog_add_informes_calidad
5860 accionLog_chg_informes_calidad
5861 accionLog_del_informes_calidad
5862 accionLog_udel_informes_calidad
En todas se inserta el idUsuario, TAplicacion.CALL_CENTER, TComponentes.PORTAL_DE_ADMINISTRADOR, Código de la acción, "ACD_INFORME_CALIDAD", el id del informe
PREGUNTAS DE CALIDAD
5863 accionLog_add_preguntas_calidad
5864 accionLog_chg_preguntas_calidad
5865 accionLog_del_preguntas_calidad
5866 accionLog_udel_preguntas_calidad
En todas se inserta el idUsuario, TAplicacion.CALL_CENTER, TComponentes.PORTAL_DE_ADMINISTRADOR, Código de la acción, "ACD_PREGUNTAS_CALIDAD", el id de la pregunta
SALAS MEET
5867 accionLog_add_sala_meet
5868 accionLog_add_perfil_sala_meet
5869 accionLog_add_grupo_sala_meet
5870 accionLog_chg_sala_meet
5871 accionLog_chg_perfil_sala_meet
5872 accionLog_chg_grupo_sala_meet
5873 accionLog_del_sala_meet
5874 accionLog_del_perfil_sala_meet
5875 accionLog_del_grupo_sala_meet
5876 accionLog_udel_sala_meet
5877 accionLog_udel_perfil_sala_meet
5878 accionLog_udel_grupo_sala_meet
ALERTAS
7000 accionLog_add_ale_entidades
7005 accionLog_chg_ale_entidades
7010 accionLog_del_ale_entidades
7015 accionLog_udel_ale_entidades
7020 accionLog_add_ale_servicios
7025 accionLog_chg_ale_servicios
7030 accionLog_del_ale_servicios
7035 accionLog_udel_ale_servicios
7040 accionLog_add_ale_destinos
7045 accionLog_chg_ale_destinos
7050 accionLog_del_ale_destinos
7055 accionLog_udel_ale_destinos
7060 accionLog_add_ale_autorizadas
7065 accionLog_chg_ale_autorizadas
7070 accionLog_del_ale_autorizadas
7075 accionLog_udel_ale_autorizadas
Acciones comunes válidas para todas las situaciones si utilizamos el campo C_TABLA
50000 accionLog_add_registro
50005 accionLog_chg_registro
50010 accionLog_del_registro
50015 accionLog_udel_registro

4.5 Procesos propios

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


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

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

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

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

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

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

4.5.6 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


4.5.7 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



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


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


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




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



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


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



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



4.5.8 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

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


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

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


4.5.9.4.1 Parámetros de Aprovisionamiento globales
  • Configuración de la red y MAC.
  • Zona horaria.
4.5.9.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.
4.5.9.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.
4.5.9.6 Aprovisionamiento de teléfonos nivel técnico
4.5.9.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
4.5.9.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

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


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

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



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

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


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

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


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


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


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

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

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

4.5.14.2 Ficheros de logs

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


4.5.15 Nodo WebRTC

Se adjunta la documentación del nodo WebRTC:


Manual de instalación y operación del nodo WebRTC


La arquitectura de WebRTC en VIVAit Call es la siguiente:



Webrtc.png



Componentes Principales:


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.

4.6 Requerimientos de conectividad

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

cebter

En el entorno de Contact Center, encontramos los siguientes flujos entre servicios (comunicaciones entre servidores, (VIVAit Suite))

Flujos Contact servicios.png

y entre usuarios y servicios los reflejados a continuación:

Flujos Contact puestos.png
Lado A Lado B Puertos Sentido Observ.
Terminal telefónico Servidor TCP 5060 A -> B Señalización SIP
Terminal telefónico Servidor UDP 5060 A -> B Señalización SIP
Terminal telefónico Servidor 10000 a 20000 A -> B

B -> A

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

B -> A

Para actualización de terminales por TFTP
Terminal telefónico Servidor NTP UDP 123 A -> B
VIVAit Desk Servidor TCP 4500 A -> B Comunicación CTI
VIVAit Desk Servidor TCP 3306 A -> B Acceso a Mysql Base de datos
VIVAit Desk Servidor Syslog UDP 514 A -> B Para envio de logs de agente
VIVAit Supervisor Servidor TCP 3306 A -> B Acceso a Mysql Base de datos
VIVAit Tracker Servidor TCP 3306 A -> B Acceso a Mysql Base de datos
VIVAit Tracker Servidor TCP 8180 A -> B
Actualizador Servidor TCP 80 A -> B Necesario para actualizaciones de versiones de aplicaciones de agente y supervisores
Portal de administración Servidor TCP 8180 A -> B Acceso al portal de administración VIVAit Suite
VIVAit Tracker Web Servidor TCP 8180 A -> B
Monitor Servidor TCP 8180 A -> B Wallboard
Monitorización Servidor TCP 80 A -> B Acceso a portal monitorización (Zabbix)

[| Volver al índice]

4.7 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


4.8 Servidor de grabación

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

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

4.9.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=


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


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

5 Otros Diagnósticos y operaciones básicas

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

5.2.1 Configuración de la grabación en la plataforma corporativa

Para que una llamada se grabe, lo primero de todo es que alguien tenga la capacidad de grabar. Esto se consigue diciendo al nodo que sea grabador. Esto provoca que el nodo llame al mixmonitor para grabar y se inserte un registro en el DAT_GRABACIONES. Esto no significa que ya las llamadas se vayan a grabar, ya que para eso tiene que ser procesadas por un nodo que sea grabador. Hay tres, llamémosle elementos, que se pueden grabar:

  • El nodo, es decir todo lo que el nodo enrute
  • Prerutas
  • Objetos: que son las extensiones, usuarios, grupos corporativos, etc.

Tenemos tres formas de grabar:

  • Grabar con beep periódico
  • Grabar sin beep periódico
  • Descartar grabación

Si de los tres elementos tenemos que uno grabe, ya sea con o sin beep periódico, esa llamada se va a grabar ya que son OR, en cuanto haya un elemento que diga que grabe se va a grabar.

Al igual pasa si tenemos que un elemento tenga descartar la grabación. La grabación no se inicia.

Referente al campo de Modo de grabación en infraestructura, este no se emplea para la grabación de corporativo, sino que solo tiene validez en ACD. Para grabación en el ACD hay que, como se ha dicho anteriormente poner un nodo que sea grabador y especificar un elemento de los tres que hay cual es el que se va a grabar.

Para que exista una grabación ha de existir un segmento asociado a esta. Los segmentos se tratan en las prerutas. Hay un campo es las prerutas que es Generar segmento al enrutar. Si está se generará el segmento del tipo de la preruta y su correspondiente grabación si esta está configurada. Si le decimos que no genere segmentos al enrutar y el sistema está configurado para que grabe, el recordCentral creará un tipo de segmento llamado externo para esa grabación. Podemos configurar si queremos que se cree o no ese segmento, para eso hay que modificar el fichero de configuración del recordCentral y poner un tiempo muy alto al campo $segmExternoMinSegs. También podemos configurar que segmentos queremos que se graben. Por defecto el recordCentral va configurado para que se graben todos los segmentos. Para decirle que solo grabe cierto tipo de segmentos hay que ponerlos los que queramos que si se graben en la variable $tiposSegmentoGrabar del fichero de configuración del recordCentral.


5.2.2 Como configurar la grabación bajo demanda

Para activar la grabación bajo demanda es necesario activar el MixMonitor.

En el Nodo hay que identificar Grabar por enrutamiento = Sin grabación.


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.2.3 Comprobar que el servidor de grabación está activo

Si al ejecutar el comando nc ip_maquina 1114,si no se recibe ninguna respuesta, significa el servidor de grabación no estaría activo. También usando el comando ps aux | grep recordCentral , donde si no escribe ningún resultado implica que tampoco esta activo.

5.2.4 Comprobar que los nodos están conectados al servidor de grabación

Debemos fijarnos en la linea de respuesta del comando nc ip_maquina 1114, que seria:

root@smadavacdrecord1:~# nc localhost 1114

recordCentral SIS ver='01.2' inic='20140423 094058' alarmas=11041 ultAlar='20140423 160112'

recordCentral MYSQL cnx=1

recordCentral NAS llamadas=1 segmentos=1

recordCenral REC llamNum=24901 llamErr=0 segmNum=38906 segmErr=0 retraso=305

recordCentral NODO fase=0 cuarentena= descarga='8,6,4,7,10,9' gestion='4,6,7,8,9,10'

Sabiendo que el parámetro "fase=0" es el numero que identifica el recordCentral, los demás parámetros nos indicaran los nodos disponibles , que funcionan o no en el servidor. Entonces "gestión=4,6,7,8,9,10" indica el id de los nodos que maneja el proceso.

5.2.5 Comprobar que un nodo tiene activo el agente de grabación

Si al ejecutar el comando nc ip_maquina 1113, no se recibe ninguna respuesta, significa que el nodo no tiene activo el agente de grabación. También usando el comando ps aux | grep recordNodo, donde si no escribe ningun resultado implica que tampoco esta activo.

5.2.6 Comprobar que un nodo está subiendo archivos de grabación al servidor

Debemos fijarnos en la linea de respuesta del comando nc ip_maquina 1114, que seria:

root@smadavacdrecord1:~# nc localhost 1114

recordCentral SIS ver='01.2' inic='20140423 094058' alarmas=11041 ultAlar='20140423 160112'

recordCentral MYSQL cnx=1

recordCentral NAS llamadas=1 segmentos=1

recordCenral REC llamNum=24901 llamErr=0 segmNum=38906 segmErr=0 retraso=305

recordCentral NODO fase=0 cuarentena= descarga='8,6,4,7,10,9' gestion='4,6,7,8,9,10'

Fijándonos en "descarga=8,6,4,7,10,9" nos confirma que todos los nodos que maneja el proceso funcionan perfectamente y el servidor puede manejar las grabaciones.

5.2.7 Comprobación de grabaciones que se hayan quedado enganchadas en un nodo

Podemos fijarnos en los dos comandos, para nc ip_maquina 1114:

root@smadavacdrecord1:~# nc localhost 1114

recordCentral SIS ver='01.2' inic='20140423 094058' alarmas=11041 ultAlar='20140423 160112'

recordCentral MYSQL cnx=1

recordCentral NAS llamadas=1 segmentos=1

recordCenral REC llamNum=24901 llamErr=0 segmNum=38906 segmErr=0 retraso=305

recordCentral NODO fase=0 cuarentena= descarga='8,6,4,7,10,9' gestion='4,6,7,8,9,10'

Fijándonos en el campo "cuarentena=" indica que ninguno de los nodos tiene problemas.

5.2.8 Comprobación del estado de ocupación del almacenamiento temporal de grabaciones en un nodo.

Desde un SSH ejecuta el comando df - h en la maquina donde creamos que debe estar ejecutando el proceso recordNod:

Filesystem Size Used Avail Use% Mounted on
udev 486M 4,0K 486M 1,00% /dev
tmpfs 100M 416K 99M 1,00% /run
/dev/vda1 236M 68M 156M 31,00% /boot
tmpfs 100M 48K 100M 1,00% /var/spool/asterisk/monitor

Nos fijaríamos en la línea marcada en negrita, el campo "Use%" indicara el porcentaje de almacenamiento temporal de grabaciones en un nodo.

[| Volver al índice]

5.3 Escuchas e intrusiones en asterisk

CallSpy es una aplicación elaborada para asterisk que permite a un usuario realizar escuchas e intrusiones en llamadas. En realidad tenemos dos aplicaciones en asterisk, CallSpy y CallSpyee.

5.3.1 CallSpy

Nota: Como mucho se pueden tener a dieciséis personas al mismo tiempo usando esta aplicación. 

Como hemos mencionado anteriormente, esta aplicación permite la escucha de llamadas y, opcionalmente, realiza la función de intrusión. Tiene tres opciones de configuración obligatorios que mostramos a continuación:

CallSpy(<tipoEspiado>,<expRegEspiado>,<parametrosConf>)

La opción <tipoEspiado> se refiere a que tipo de objeto que podemos espiar correspondiente, solo debe elegirse un único tipo:

  • c: escuchar una cola
  • v: escuchar un vdn
  • a: escuchar a un agente
  • e: escuchar extensión

La opción <expRegEspiado> representa el número de la cola, VDN, agente o extensión que queremos escuchar. Tiene que ser una expresión regular. La opción <parametrosConf> se refiera a los parámetros de configuración para la llamada que podemos espiar, se pueden combinar o juntar :

  • q: Desactiva el 'beep' al comienzo de cada nueva llamada.
  • v([value]): Ajusta el volumen en el rango -4 a 4 (más alto, mas volumen).
  • e: Habilita el que se pueda cambiar a otra llamada de la misma extensión.
  • w: Habilita el que se pueda activar la intrusión (whisper).

Una vez iniciada la escucha, solo falta que entre una llamada al objetivo que estemos espiando. Al iniciar la escucha, se puede hacer lo siguiente:

  • Pulsando # modifica el volumen de escucha.
  • Pulsando * cambia a una nueva llamada.
  • Pulsando 1 si esta habilitado, cambia a otra llamada de la misma extensión.
  • Pulsando 2 si esta habilitado, inicia la función de intrusión.
  • Pulsando 3 desactiva la función de intrusión.

5.3.2 CallSpyee (espiado)

Mediante esta aplicación indicamos los parámetros que permite a una llamada ser seleccionada para escuchar. Las opciones de configuración son:

CallSpyee([CID_NUM],[cola],[vdn],[agen],[exten]) 
Nota:No son parámetros obligatorios, por lo que no hace falta rellenar todos los campos pero si respetar sus posiciones separadas por comas.

La explicación de los parámetros es la siguiente:

  • CID_NUM: representa el call ID de la llamadas
  • cola:representa el número de la cola que se quiere espiar (${QUEUE} ).
  • vdn: representa el número del VDN que se quiere espiar (${VDN} ).
  • agen: representa el número del agente que se quiere espiar.
  • exten: representa el número de la extensión que se quiere espiar (${EXTENSION}) .

Por ejemplo si queremos escuchar todas las llamadas en las que participa una extensión determinada pondremos en la macro de extensiones:

exten => s,n,CallSpyee(,,,${EXTENSION}) 

5.3.3 Cambios para el dialplan de asterisk

El funcionamiento de este tipo de servicio conlleva un cambio en el dialplan de asterisk. En cada macro correspondiente se pondrá los diferentes CallSpyee para VDN, colas , extensiones y agentes. Pasos a seguir:

  • Paso 1. Creación de un código de intrusión para cada tipo según necesidad (cola, VDN, agente y

extensión).

Ejemplo MDtel:  declaramos como código de intrusión a Agente *44*NUMERO 
;========================================== 
;======== Intrusion a Agente 
;========================================== 
exten => _*44*X.,1,set(CadMarcar=intrusionEspiado) 
exten => _*44*X.,n,set(DesL=SERVICIO) 
exten => _*44*X.,n,set(datoServicio=^${EXTEN:4}) 
exten => _*44*X.,n,Goto(finMacro,1) 
Nota: En la tercera línea podemos observar la expresión regular que se le pasara al CallSpy correspondiente con el número marcado por el espia. 
  • Paso 2.Llamar a CallSpy con la configuración deseada.
Ejemplo MDtel:  llamada a CallSpy especificando que vamos a espiar una cola (la c del primer parámetro, con la
extensión introducida en el código de intrusión y con whisper, es decir, función de intrusión habilitada. 
;------------------------------------------------------------------------ 
; Intrusion a Espiado 
;------------------------------------------------------------------------ 
exten => intrusionEspiado,1,NoOp 
exten => intrusionEspiado,n,GotoIf($["${datoServicio}"=""]?colgar) 
exten => intrusionEspiado,n,CallSpy(c,${datoServicio},w) 
exten => intrusionEspiado,n(colgar),Hangup 
  • Paso 3. Llamar a CallSpyee con la configuración de las llamadas candidatas a ser escuchadas.
Ejemplo MDtel: 
exten => s,n,CallSpyee(,,,,${EXTENSION}) → Para extensiones 
exten => s,n,CallSpyee(,${QUEUE},,,) → Llamadas espiadas por cola 
exten => s,n,CallSpyee(,,${VDN},,) → Llamadas espiadas por VDN 

[| Volver al índice]

5.4 Calendarios

Nota: En la versión de VIVAit 3.5 , Se tiene que instalar el nuevo servidor de DaviCal.

Para la configuración de los calendarios en la versión VIVAit 3.5 , se tiene que instalar el nuevo servidor DaviCal en una máquina aparte.

Se adjunta un manual para su instalación:


Manual de instalación de servidor de calendarios para VIVAit 3.5




Para la configuración de los Calendarios se hace uso de CalDAV, estándar de Internet que permite a un cliente acceder a información de planificación en un servidor remoto. Permite que varios clientes accedan a la misma información, facilitando la cooperación. Muchas aplicaciones, tanto clientes como servidores, son compatibles con este protocolo.

Si deseamos crear un calendario en la plataforma VIVAit podemos hacerlo siguiendo el siguiente enlace: Para comprobar que el servidor de calendarios funciona correctamente bastaría con cargar en la barra de direcciones la siguiente url: [|Calendarios]

http://${NODO.HOST}/dav/html/cal.php/calendars/${DAV.CUENTA}/${DAV.CALENDARIO}

donde,

  • NODO.HOST: es la ip del servidor calendar
  • DAV.CUENTA: hace referencia a la cuenta de usuario
  • DAV.CALENDARIO: hace referencia el nombre de la cuenta

Una vez que se carga la url sabremos que el servidor funciona correctamente si visualizamos lo siguiente:

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.5 Syslog de agentes

Syslog es un estándar para el envío de mensajes de registro en una red informática IP. Por Syslog se conoce tanto al protocolo de red como a la aplicación o biblioteca que envía los mensajes de registro. Se lanza automáticamente al arrancar un sistema Unix, y es el encargado de guardar informes sobre el funcionamiento de la máquina (eventos, seguridad del sistema, etc) pero puede contener también cualquier información como mensajes de las diferentes partes del sistema (núcleo, programas...) y los envía y/o almacena en diferentes localizaciones transmitiéndose mediante un puerto UDP. Esto permite concentrar los registros de múltiples máquinas en un único punto simplificando la labor de gestión al administrador siendo habitual que múltiples dispositivos lo soporten.

El formato del mensaje se compone de tres campos :

  • La cabecera contiene la prioridad, fecha y hora del mensaje, máquina, proceso (nombre e identificador) que lo ha generado y la versión del protocolo utilizado.
  • Una serie de pares clave-valor con metadatos.
  • El texto del mensaje.

Si es necesario podemos activar el registro de todos los eventos telefónicos que realiza un agente ACD llamado Syslog de agentes. Su activación se realiza mediante el portal de administración VIVAit configurando unos parámetros para un usuario llamado Rastreo BBDD" y Rastreo Syslog. Para más información[| ver sección Portal de administración - General - Usuarios - Pestaña ACD ].

Elemento Procedimiento
Operacion
Ubicación del proceso Script arranque: /etc/init/ rsyslog.conf

Configuración : /etc/rsyslog.d/30-vivait- desk.conf

Arranque service rsyslog start
Parada service rsyslog stop
Reinicio service rsyslog reload
Diagnostico
Registro de logs /var/log/MDtel/vivait-desk.log

Fichero del día actual. se guardan los 30 anteriores comprimidos en tar.g


Ejemplo 30-vivait-desk.conf:

#  Default rules for rsyslog.
#
#            For more information see rsyslog.conf(5) and /etc/rsyslog.conf

#
# First some standard log files.  Log by facility.
#
local4.*            -/var/log/MDtel/vivait-desk.log
local5.*              -/var/log/MDtel/rastreo.log


Es muy importante comprobar que el servidor de syslog escucha por el puerto 514:

#################
#### MODULES ####
#################

module(load="imuxsock") # provides support for local system logging
module(load="imklog")   # provides kernel logging support
#module(load="immark")  # provides --MARK-- message capability

# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")

# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")

# Enable non-kernel facility klog messages
$KLogPermitNonKernelFacility on

###########################
#### GLOBAL DIRECTIVES ####
###########################

5.6 Generación de un Core

Un Core es la memoria de un programa.

Para generar un Core rápido con Asterisk hay que hacer lo siguiente:

   Ejecutar ps aux | grep asterisk y coger el PID del programa
   gdb /usr/sbin/asterisk [PID]
   gcore [file]

[| Volver al índice]

6 Funcionalidades específicas

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

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

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

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

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


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

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

6.2.3 Carga de contactos

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

6.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
6.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';

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

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

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

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




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



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

6.5 Grabación

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

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

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

6.6 Enrutamiento

Enrutamiento.png


6.6.1 Enfoque inicial

Acceso

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

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


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

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


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



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


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


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

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


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

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


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


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

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

6.9 Estadísticas en VIVAit Call

Como configurar estadísticas para VIVAit Call


6.10 Desvío por calendario

El uso desde el portal de administración de VIVAit pasa por:


Crear la conexión entre VIVA it y Baikal

Tener correctamente configurado en la tabla WEB_CONFIGURACION el usuario y clave de labase 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


Crear usuario de Baikal en VIVA it


Para ello, en la pestaña (General / Configuración común) del portal de administración de VIVA it realizaremos la configuración de calendarios de desvíos:


Calendario7.png


Donde:

  • Url – La URL es donde está el servidor de calendarios
  • Protocolo – baikal usa el protocolo caldav
  • Usuario – Usuario creado en Baikal
  • Clave – Contraseña del usuario creado


Configurar extensiones o usuarios

Tanto en extensiones como en usuarios desde la ventana correspondiente podremos configurar:


  • Si una extensión o usuario usan desvío programado (desvío incondicional por calendario); por defecto NO estará activado y deberá activarse solo en aquellos usuarios o extensiones en los que sea necesario; esto es importante para proteger la capacidad del sistema:


Calendario8.png


  • Al posicionar el cursor sobre el campo “Desvío incondicional por calendario:”, el sistema crea automáticamente un calendario (que comienza por USU para el caso de usuarios y por EXT en el caso de extensiones) que será el asociado al usuario o extensión y pulsando sobre el botón accederemos a dicho calendario.



Calendario9.png


Seleccionando un día (pulsando sobre el), y pulsando de nuevo saldrán opciones para crear un nuevo evento. El formulario que aparece tiene los siguientes campos:


- El campo “Asunto” describe el evento. - El campo “Destino” es hacía donde se quiera desvíar la llamada. - El campo “Descripción” no se contempla.


Calendario10.png


En esta ventana tendremos como opciones:

  • Programar el evento como repetitivo, botón “Repetir”
  • Programar el evento para todo el día, botón “Todo el día”
  • Disponer de componente gráfico para programación de intervalos


Calendario11.png

6.11 Multiterminal



6.11.1 Arquitectura del nodo WebRTC



Webrtc.png

[| Volver al índice]

6.11.2 Arquitectura del nodo STG



Arquitectura nodo STG.png

[| Volver al índice]

6.11.3 Arquitectura de Multiterminal



Multiterminal.png



[| Volver al índice]

6.11.4 Configuración de Multiterminal



El uso desde el portal de administración de VIVAit para configurar la funcionalidad de multiterminal pasa por:

A nivel de usuario → Si el webcall es multidispositivo o sustitutivo.

A nivel de extensión → varios teléfonos por extensión.

A nivel de teléfono → definir orden y posición (puede haber posición 0 y posición 2 sin que exista una posición 1).

Controlar que si webcall es de pool no puede ser multidispositivo. Para configurar la funcionalidad a nivel de usuario, hay que acceder a la pestaña General > Administrar usuarios, seleccionar un usuario y pulsar la pestaña Centralita


Para configurar la funcionalidad a nivel de usuario, hay que acceder a la pestaña General > Usuarios > Administrar usuarios, seleccionar un usuario y pulsar la pestaña Centralita

En la pestaña Centralita se encuentran las opciones de configuración, que son:

Multiterminal-adm1.png



Extensiones webphone → En esta opción hay que seleccionar la extensión que va a tener asociada el usuario.

Posición terminal webphone → Esta opción sirve para seleccionar la posición a la que estará asignado el portal webphone. Se puede seleccionar la posición del 1 al 8, ya que el número 0 está reservado para teléfonos convencionales que permiten la compatibilidad.

Modo funcionamiento webfone → Esta opción sirve para seleccionar si el portal webphone es multidispositivo (Recepción multiterminal) o sustitutivo (Recepción exclusiva, modo compatible con versiones anteriores)


 IMPORTANTE → El usuario tiene que tener asignada una categoría en su perfil.


Para configurar la funcionalidad a nivel de extensión, hay que acceder a la pestaña VIVAIT CALL < Dispositivos < extensiones, seleccionar una extensión existente o crear una nueva y acceder a la pestaña de “Teléfonos”.

Multiterminal-adm2.png



En esta pestaña se crean y se configuran los diferentes terminales asociados a una extensión. Las opciones de configuración de la funcionalidad de multiterminal son:

Multiterminal-adm3.png



Modelo de teléfono → Se despliega la lista de modelos de teléfonos previamente configurados que permite seleccionar el modelo o tipo de terminal. Si se trata de la app en Smartphone existen dos opciones para configurarla dependiendo del sistema operativo (VIVAit Call Business Android o VIVAit Call Business IOS).


Plantilla → Se despliega la lista de plantillas previamente configuradas que permite seleccionar el tipo de plantilla para el dispositivo. Para configurar el terminal con la app del smartphone, seleccionar “Plantilla para VCB”.


Orden → Sirve para seleccionar el orden en el que van a sonar los teléfonos cuando se marca la extensión a la que están asociados.


Posición terminal → Esta opción sirve para seleccionar la posición a la que estará asignada la extensión.


Es seguro → Si se configure en “SI”, implicará que tenga una clave segura, no conocida y con fecha de expiración.


Es publicable → Si se configure en SI, se podrá registrar el terminal desde fuera vía FlexiSIP y será necesario que sea seguro.


Clave de registro → Clave para el registro de la extensión en Asterisk.


Número de días de validez de la clave



        IMPORTANTE  → Webphone no puede ser seguro ni publicable

6.12 BLF

Para la funcionalidad BLF, además de incluirlo en el fichero de provisión del teléfono, para la tecla correspondiente que va a tener el BLF, es necesario añadir un campo subscribe en la extensión

En Menu > VIVAIT Call > Dispositivos > Extensiones, seleccionar añadir Campo > Tipo SIP > subscribe. En el campo "subscribe" hay que introducir el valor de la extensión a supervisar.


Blf-adm1.png

7 Configuración de los diferentes Portales de Usuario

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


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.


7.1 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

7.2 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


7.3 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


7.4 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

8 Funcionamiento de la plataforma en modo emergencia

9 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

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

10 Integraciones con servicios externos

10.1 Presencia con Openfire

VIVAit se integra con servidor XMPP Openfire en su versión 3.10.2 (última probada)

Además del servidor, es necesario instalar un plugin de integración con asterisk 13, denominado "asterisk IM", versión 1.4.1

La instalación del servidor Openfire es una instalación estándar, realizada de paquete

La instalación del plugin es un "jar" que se carga desde la pagina de plugins de openfire

Con esto conseguiremos comunicar asterisk y OPenfire de manera que:

  • Los estados telefónicos de una extensión VIVAit se reflejen en Openfire
  • Poder marcar desde los clientes de IM instalados en los puestos
  • Ver en el cliente llamadas entrantes al teléfono

Enlaces de interes:

Página proyecto openfire

Página proyecto "asterisk IM"


10.2 Reuniones virtuales con Openmeetings

OpenMeetings es un sistema de vídeo web-conferencia en tiempo real. Usando recursos como audio (micrófono), vídeo (cámara web), posibilidad de subir y convertir presentaciones (en PDF , PPT o ODP que se convierten a Flash), compartición de la pantalla de tu ordenador, o pizarra digital compartida, panel de administración, posibilidad de grabar las sesiones… y completo soporte multiplataforma, es decir, que aparte de poder grabar las sesiones, se puede compartir un escritorio también desde una máquina Linux.

Para instalar OpenMettings debe seguir el [| manual de Instalación de Openmeetings]


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