Howto's

De VIVAitwiki
Ir a la navegaciónIr a la búsqueda
Producto: VIVAit Call

VIVAit Suite

VIVAit Fax

Sumario

1 Como parar asterisk

En situaciones límite en el que es necesario parar el asterisk y volver a arrancarlo hay que realizar los siguientes pasos:

Entrar en la consola de asterisk e introducir el comando core stop now
Si esto no funciona, tendremos que matar el proceso a mano. Esto es, primero el safe asterisk y luego el asterisk mediante el comando 
kill -9 nºPID

Tras estos pasos, volveremos a arrancar el servicio asterisk mediante /etc/init.d/asterisk start

2 Como configurar la megafonía

El servicio de megafonía se basa en el protocolo multicast.

Para configurar la megafonía tenemos que activar en los teléfonos que para que estén "escuchando" en una dirección multicast y tener un emisor en esa dirección multicast.

Los teléfonos suelen tener en su configuración un apartado para configurar el multicast. Por ejemplo en los yealink está en la pestaña directory sección multicast IP.

En los teléfonos se puede configurar manualmente o incluirlo en las plantillas de aprovisionamiento.

El asterisk tiene un canal para hacer multicast. Este canal es MulticastRTP.

Para esto podemos crear un VDN que contenga la siguiente línea. (en el ejemplo la dirección multicast es 239.0.126.1 y el puerto es el 10001).

[Cen_VDN_90000]
exten => _X.,1,NoOp(MDVDN_90000*****EXTEN=${EXTEN}**CID=${CALLERID(NUM)}**UCID=${UCID}*)
 same =>     n,Answer
 same =>     n,Dial(MulticastRTP/basic/239.0.126.1:10001)
include => Cen_finLlamada

3 Como configurar el candado

El candado permite prohibir temporalmente la posibilidad de realizar llamadas hacia fuera. Sí se pueden seguir haciendo llamadas a extensiones fijas de la plataforma, es decir, llamadas sin coste.

Para configurar dicha funcionalidad basta con crear extensiones con la categoría mas restrictiva posible y habilitar la movilidad, con lo que la extensión solo tendrá "permisos" para realizar llamadas internas.

Para permitir llamadas externas solo hay que "mover" a un usuario con categoría suficiente a la extensión deseada.

4 Como crear un grupo de captura y que se vea en cada teléfono el número que llama

ATENCIÓN: SE CREAN CONFIGURACIONES NO REFLEJADAS EN PORTAL DE ADMINISTRACIÓN

Para la simulación de grupos de captura y conseguir que todos los terminales vean el ANI del llamante:

- Hacen falta teléfonos con dos líneas

- Cada teléfono del grupo tiene en la línea 1 su extensión habitual (por ejemplo 40000)

- Además, en el fichero "sip_Estatico.conf", creamos una segunda extensión para cada teléfono, que le ocupará la segunda línea (por ejemplo 42000)

- En esta segunda linea ponemos que cuando se llame tenga otro tono de llamada (un beep o nada...) que se asemeje en funcionamiento al de un mensaje de llamada en otra extension de mi grupo de captura

- Se ha creado una variable global por cada teléfono en el fichero de variables "ext_MDtel_Particular.conf" de nombre EXTxxxxx (por ejemplo EXT40000); esa variable contiene las otras extensiones virtuales del grupo por ejemplo EXT40000=>SIP/42001&SIP/42005

- Hemos creado en el dialplan programación para que cuando exista esa variable global se añada a la marcación el contenido

5 Como crear supletorios

ATENCIÓN: SE CREAN CONFIGURACIONES NO REFLEJADAS EN PORTAL DE ADMINISTRACIÓN

Igual que el caso anterior pero en la variable ponemos números reales. Debido a un bug en el enrutador, que no devuelve la variable R_PARA, en el fichero ext_MARCAR_Extension.conf hay que sustituir la siguiente linea:

;same =>                   n,ExecIf($["${EXT${R_PARA}}"=""]?NoOp:Set(ENR_CADMARCAR=${ENR_CADMARCAR}&${EXT${R_PARA}}))

Por esta otra:

 same =>                   n,ExecIf($["${EXT${R_DEST_${ENR_RUTA_CAD}}}"=""]?NoOp:Set(ENR_CADMARCAR=${ENR_CADMARCAR}&${EXT${R_DEST_${ENR_RUTA_CAD}}}))

ATENCIÓN !!! en las llamadas salientes cada uno presenta su número

Para emplear números externos en los supletorios hay que poner, al crear la variable que hemos explicado en el apartado anterior en el ext_MDtel_Particular.conf:

EXT335=>SIP/0999999999@Trunk_Movil ;En este caso suena en la ext 335 y en el móvil 999999999

6 Generación de llamada automática

Para activar la funcionalidad es necesario lo siguiente:

  • Definir una variable ID_LISTA_LLAMAME con el ID de la lista que se va a usar para generar la llamada. Cuando se cree la lista hay que asegurarse que el campo "Nº segundos límite" tiene un valor lo suficientemente amplio para evitar que la llamada caduque antes de ejecutarse.
  • Establecer un timeout para la cola (en el Gosub Cen_Sub_GrupoACD se indica justo después de ${COLA})
  • Llamar a la función de MySQL ACD_FUNC_LLAMAME_CREAR a través de MDintz
  • En la función se usan los siguientes elementos variables:
       ${ID_LISTA_LLAMAME}: Definida antes clienteTOCola: 
       Nombre del cliente. Al no tener ningún nombre, se usa un denominador genérico
       ${CALLERID}: Número llamante, donde se dirigirá la llamada.

Ejemplo:

[Cen_VDN_99001]
;----------------------------------------------------------------------------------------------------------------
;----------------------- VDN 99001 ------------------------------------------------------------
;----------------------------------------------------------------------------------------------------------------
exten => _X.,1,NoOp(MDENTGW_99001*****EXTEN=${EXTEN}**CID=${CALLERID(NUM)}**UCID=${UCID}*)
 same =>     n,Set(__COLA=89001)
 same =>     n,Set(ctiDiriTrato=0)
 same =>     n,Set(ctiDiriInterface=)
 same =>     n,Set(ID_LISTA_LLAMAME=2)
 same =>     n(cola),Gosub(Cen_Sub_GrupoACD,${EXTEN},1(${COLA},10,,Si,))
 same =>     n,GotoIf($["${QUEUESTATUS}"!="TIMEOUT"]?colgar)
 same =>     n,MDintz(nimitz|bd|sqlDato|select ACD_FUNC_LLAMAME_CREAR(CURRENT_TIMESTAMP\,${ID_LISTA_LLAMAME}\,""\,"clienteTOCola"\,""\,""\,""\,""\,""\,""\,""\,""\,1\,""\,"${CALLERID(NUM)}"\,1\,3\,1\,""\,0\,0\,0\,""\,""\,""\,""))
 same =>     n,GotoIf($["${MDintzRes}"="OK"]?colgar)
 same =>     n,NoOp(ACD_FUNC_LLAMAME_CREAR ${MDintzRes})
 same =>     n(colgar),Hangup


7 Cancelación de eco en la plataforma

Comprobar que el chan_dahdi.conf este configurado los parametros:

echocancel=yes
echocancelwhenbridged=yes
Jugar con los valores txgain y rxgain 

Si esto no es suficiente el siguiente paso sería emplear una canceladora de echo por hardware.

8 Como "dar paso" a través de un enlace exterior si hay una llamada para una extensión creada en el sistema pero no registrada

Este procedimiento es de utilidad en procesos de migración, en los que recibimos las llamadas de la RTC, nos las quedamos si la extensión ya está registrada en VIVAit y la mandamos hacia la plataforma a migrar si aún sigue migrada ahí

El procedimiento es:

  • Activar desvío por no contesta en la extensión (portal de administración - VIVAit Call - Dispositivos - Extensiones - campo "Desvio no contesta", indicando como destino un prefijo (por ejemplo "99") seguido de la extensión destino
  • Creamos una preruta en vivait-call - rutas -prerutas con origen "99", le quitamos el prefijo en campo "Destino saliente 1" (valor -2) e indicamos en campo "Tipo destino sal. 1" como "Ruta externa"
  • Debera existir una ruta externa para esa numeración

9 Comprobación de versiones de elementos de la plataforma

Aplicaciones

  • Botón derecho del ratón, Acerca De


Portales

  • En el Vivait-Call, en la pantalla de inicio de sesión pone el número de versión del portal.
  • Tanto en el Monitor como en el Tracker no se puede saber.


Demonios

  • Mediante el comando nc localhost <Puerto demonio>. Ejemplo:
nc localhost 1120
motorSal sis ver='03.02.00' inic='20150427 123457' alarmas=0 ultAlar='00000000000000'
motorSal gmp msj=253/256 buf=256/256 tarea=99/102
motorSal tmp uptime=12624 (0d 3h 30m 24s)
motorSal mtr mys=1 ocup=0% planif=13(0) intento=11(0)


Ejemplos puertos demonios:
  • 1111: vivait-cti
  • 1112: myAcdSuperv
  • 1113: recordNodo
  • 1114: recordCentral
  • 1115: intz-nimitz
  • 1120: motorSal
  • 1123: phoneprov-tftp


Base de datos

  • No se puede saber la versión a no ser que se comparen esquemáticos con los subidos en el redmine

10 Añadir Auto-Answer a la cabecera SIP

Si queremos que un teléfono tenga autoanswer:

  • En el peer poner: headeraa=Call-Info: answer-after=0, esto tiene que ir en la plantilla de la extensión o como campo en la extensión. Dependiendo del terminal que utilicemos el valor de este campo variará:
   Aastra: Alert-Info: info=alert-autoanswer
   Grandstream: Call-Info: answer-after=0
   Linksys: Call-Info:\;Answer-After=0
   Polycom: Alert-Info: Ring Answer
   Snom: Call-Info: answer-after=0
   Snom (nuevo firmware): Call-Info: <sip:IP>\;answer-after=0
   Yealink: Call-Info: answer-after=0
  • Luego en el diaplan añadir lo siguiente: exten => _[*#%0-9a-zA-Z].,n,set(__AutoAnswer=AA) (Esto tendremos que ver como ponerlo de manera automática). De manera provisional si queremos que sea para llamadas salientes pondremos esto en el ext_n_marcador.conf. Si queremos que sea llamadas entrantes lo pondremos en ext_n_MARCAR.conf

11 Configuración de los portales web en HTTPS

Desde /usr/lib/jvm/default-java/bin/ ejecutamos:

keytool -genkey -alias tomcat -keyalg RSA -keystore /usr/share/tomcat7/.keystore

Escriba la contraseña del almacén de claves: (t0mc4t)

Volver a escribir la contraseña nueva: (t0mc4t)
*Personalizar para el cliente
¿Cuáles son su nombre y su apellido?
[Unknown]: VIVAit Suite
¿Cuál es el nombre de su unidad de organización?
[Unknown]: Desarrollo
¿Cuál es el nombre de su organización?
[Unknown]: MDtel
¿Cuál es el nombre de su ciudad o localidad?
[Unknown]: Madrid
¿Cuál es el nombre de su estado o provincia?
[Unknown]: Madrid
¿Cuál es el código de país de dos letras de la unidad?
[Unknown]: es
¿Es correcto CN=VIVAit Suite, OU=Desarrollo, O=MDtel, L=es, ST=Madrid,
C=Unknown?
[no]: si
Escriba la contraseña clave para <tomcat>
(INTRO si es la misma contraseña que la del almacén de claves)

nano /var/lib/tomcat7/conf/server.xml

Descomentar la línea:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"/>

Añadir después de sslProtocol="TLS":

keystorePass="t0mc4t"


12 Crear un motivo desconexión para el Supervisor en VIVAit Suite

Para crear motivos de desconexión adicionales a los que ya ofrece la aplicación tendremos que añadir una nueva entrada en la BD. El comando que emplearíamos seria el siguiente:

INSERT INTO `nimitz`.`COM_ENUMERADOS` (`ID`, `C_NOMBRE`, `C_TEXTO`, `N_POSICION`, `C_OBSERV`) VALUES(1000700, 'TSesAgMotDesc', 'Nombre Motivo de desconexión', 60, ' ');

El ID debe ser mayor o igual a 1000700 y menor a 1000800. El N_POSICION debe ser mayor o igual a 60 y menor que 100.

13 Envío de variables CTI al ACD ante un GW con asterisk 13

Dado que para un GW con asterisk 13 un nodo ACD es considerado un elemento externo, por defecto, no se envían variables CTI (UCID, ...). En una fututa versión del nodo ACD, ya no se considerará un elemento externo por lo que si se enviarán dichas variables. Para lograrlo en la versión 3.0 de la plataforma Vivait hay que modificar el fichero ext_MARCAR_Externo_Particular.conf del GW. Deberemos poner la siguiente linea.

same => n,Macro(escribirDatosCti)

14 Script para cambio automático de claves en salas de conferencia estáticas

Para cambiar la clave de las salas de conferencias crear un script llamado cambioClaveConfe.sh con el siguiente contenido:

#!/bin/bash
CLAVE=$(shuf -i 1111-9999 -n 1)

echo $CLAVE

echo "update CEN_SALAS_CONFERENCIAS set C_PIN='$CLAVE' WHERE C_NOMBRE='$1'" | mysql -u nimitz -pivivanimitz nimitz

FROM=sat@mdtel.es
FECHA=`date +"%Y%m%d%H%M%S"`
CLIENTE=<PONER EL CLIENTE>
TO=<DESTINATARIOS>
ASUNTO="Nueva clave en sala $1"
CUERPO="La nueva clave para la sala $1 es: $CLAVE"
/usr/sbin/sendmail -oi -t -v -f $FROM <<EOF
From: $FROM
To: $TO
Bcc: $BCC
Subject: $ASUNTO

$CUERPO
EOF

El script cambiará la clave de la sala pasada por parámetro por una aleatoria de 4 dígitos y la enviará por correo a los <DESTINATARIOS> (direcciones de correo electrónico separadas por coma).

Hay que crear una tarea en /etc/crontab añadiendo una linea como la siguiente:

30 6	* * 7	root	cambioClaveConfe.sh 6173

Esto ejecutará el script todos los domingos a las 6:30 horas cambiando la clave de la sala 6173. Añadir tantas linéas como salas.

15 ZABBIX

15.1 Como crear un TRIGGER en Zabbix

1. Hay dos posibilidades dependiendo si el trigger es para un solo host o es para varios, los cuales tienen en común un template:

  1. Si es para un host: Ir a Configuración/Hosts
  2. Si es para un template: Ir a Configuración/Templates

2. En la fila correspondiente al host/template al que queramos añadirle el trigger, pulsar sobre la columna triggers.
3. En la ventana de triggers, pulsar sobre el botón Create trigger, situado en la esquina superior derecha.
4. Aparecerá la ventana de creación de triggers, que tiene los siguientes campos:

1. Name: Nombre del trigger, que deberá ser lo suficientemente descriptivo. Aparecerá cuando se

active, en la ventana principal de Zabbix así como en los correos de aviso.

2. Expression: Define la fórmula cuyo resultado activará el trigger. Hay que pulsar el botón Add. Se mostrará una

nueva ventana donde habrá que elegir el item (medida) sobre el que se basará el trigger (evidentemente la medida deberá existir previamente) y la función necesaria para el cálculo. Para una descripción de las disponibles dirigirse a https://www.zabbix.com/documentation/2.2/manual/appendix/triggers/functions.
Tras rellenar los campos anteriores y dar a la función los valores que necesite pulsar el botón Insert.

3. Expression constructor: Permite crear expresiones complejas, uniendo varias.
4. Description: Una explicación del trigger
5. Severity: Criticidad el trigger
6. Para una descripción del resto de campos visitar la página: https://www.zabbix.com/documentation/2.2/manual/config/triggers/trigger

5. Tras rellenar los campos, pulsar el botón Save.
6. Si el trigger se ha añadido en un template, aparecerá en todos los hosts que tienen el template configurado.
7. El trigger por si solo no envía ningún aviso, solo se activa si se cumple la expresión definida. Para enviar un aviso (normalmente un correo electrónico) cuando se active el trigger, será necesario definir una acción (Configuración/Actions).

NOTA.- Para consultar cualquier cuestión relativa a Zabbix, se encuentra a su disposición el manual: 
https://www.zabbix.com/documentation/2.2/manual

15.2 Monitorización en Zabbix de un trunk caído

Para monitorizar un o varios trunk por separado y saber el estado de cada uno es necesario lo siguiente:

  • Añadir el UserParameter adjunto que contiene el siguiente texto:
UserParameter=asterisk.trunkEstado[*],sudo /usr/sbin/asterisk -rx 'sip show peers' | grep  --text -i '$1' |  grep OK >/dev/null; if [ $? -eq 0 ]; then echo 1; else echo 0; fi
  • Añadir en el portal de zabbix un item por cada trunk. En el campo Key se pondrá "asterisk.trunkEstado[nombre_trunk]", donde nombre_trunk es el nombre del trunk tal y como se ve en Asterisk.

Zabbix item trunkEstado.png


  • Crear un trigger que avise cuando el último valor sea 0. Por ejemplo:
{corp-bdtr:asterisk.trunkEstado[PrePro-ACD].last()}=0


Zabbix trigger trunkEstado.png

16 Agendas en terminales Yealink

En la agenda se mostrará como nombre lo que contenga el campo CEN_AGENDAS.C_NOMBRE_MOSTRAR y como teléfono el indicado en CEN_AGENDAS_TELEFONOS.C_TELEFONO Para hacer funcionar la agenda:

  • En el archivo de aprovisionamiento correspondiente (Yealink-XXXX-comun.cfg) establecer los siguientes parámetros:
   remote_phonebook.data.1.url = http://<direc IP>/vivait-agenda/yealink/contactData1.xml 
   remote_phonebook.data.1.name = NOMBRE DE LA AGENDA EN EL TELEFONO
  • En el archivo /etc/apache2/apache2.conf añadir tras el último Directory:
   <Directory /var/www/html/vivait-agenda/>
            AddType application/x-httpd-php .xml
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
   </Directory>
  • Ejecutar el comando:
   /etc/init.d/apache2 reload

17 Calendarios

17.1 Enrutamiento inteligente

Ante una llamada a un destino, si hay cita de ocupado en el calendario se desvia al número indicado en el campo "location" del calendario o a su buzon de voz si hay valor en dicho campo

same => n,Set(CalendarBusy=${CALENDAR_BUSY(GoogleCalendar)})
same => n,Set(id=${CALENDAR_QUERY(GoogleCalendar)})
same => n,NoOP(hay ${CALENDAR_QUERY_RESULT(${id},getnum)} eventos)
same => n,Verbose(3,The state of GoogleCalendar is $
{DEVICE_STATE(Calendar:GoogleCalendar)})
same => n,Set(CalendarLocation=${CALENDAR_QUERY_RESULT(GoogleCalendar,location)})
same => n,GotoIf($["${CalendarBusy}"=="1"]?:conCategoria)
same => n,GotoIf($["${CalendarLocation}"==""]?buzon)
same => n,Goto(Cen_iniLlam,${CalendarLocation},1)
same => n(buzon),Playback(Particular/buzon)
same => n,Hangup
same=> n(conCategoria),Goto(Cen_iniLlam,${EXTEN},1)

17.2 Conexión de cliente Outlook a calendarios VIVAit mediante Caldav

Por defecto, el cliente outlook no soporta Caldav; si queremos disponer de calendarios de VIVAit en Outlook tendríamos dos opciones:

  1. Tener los calendarios en el servidor Exchange
  2. Instalar un plugin en el cliente outlook que permita conectar vía Caldav los calendarios que estén ubicados en el servidor de calendarios de VIVAit

Este howto se centra en esta segunda posibilidad

Procedimiento:

1.- Instalar Calldavsincronizer (valdrían otros plugin de Caldav para Outlook)

https://sourceforge.net/projects/outlookcaldavsynchronizer/

2.- Entrar en Synchronization Profiles en la nueva pestaña Calldav Syncronizer de outlook Syncronizer.png


3.- Añadir nuevo perfil (tecla +)


Nuevo.png


A tener en cuenta:

  • Crear un nuevo “Outlook folder”, entendemos que es adecuado (quizás necesario) para que las entradas de calendario de VIVAit queden diferenciadas.
  • Lo mejor es haber creado antes el calendario en el servidor para que al darlo de alta en oulook comprobemos que se conecta.
  • Dando al botón “Test or discover settings” se nos muestran todos los calendarios del servidor y elegimos el que queramos; en “elementos de la carpeta” diremos “elementos de calendario”.


Calendario.png

18 Uso de reloj hardware en nodos de procesamiento

18.1 En nodo de procesamiento ACD

En un nodo de procesamiento ACD es obligatorio instalar dahdi y una tarjeta de primario para emplear reloj hardware, ya que el reloj software que va en el asterisk 1.4 es defectuoso. Para configurarlo basta con instalar la tarjeta en el servidor, instalar dahdi y posteriormente ejecutar el siguiente comando:

dahdi_cfg

Este comando generaŕa el fichero /etc/dahdi/system.conf

Para comprobar que el comando se ha ejecutado satisfactoriamente lo abriremos y tendrá que tener un formato semejante al siguiente ejemplo:

# Autogenerated by /usr/sbin/dahdi_genconf on Tue Oct 22 17:42:59 2013
# If you edit this file and execute /usr/sbin/dahdi_genconf again,
# your manual changes will be LOST.
# Dahdi Configuration File
#
# This file is parsed by the Dahdi Configurator, dahdi_cfg
#
# Span 1: WCT1/0 "Digium Wildcard TE110P T1/E1 Card 0" HDB3/CCS/CRC4
span=1,1,0,ccs,hdb3,crc4
# termtype: te
bchan=1-15,17-31
dchan=16
echocanceller=oslec,1-15,17-31
# Global data
loadzone        = es
defaultzone     = es

18.2 En nodo de procesamiento de corporativa

En un nodo de procesamiento de corporativa no obligatorio instalar dahdi y una tarjeta de primario para emplear reloj hardware, ya que el no se han detectado errores en el reloj por software. Sin embargo si instalamos dahdi y una tarjeta de primario para emplear reloj hardware, el sistema funcionará mejor. Para configurarlo basta con instalar la tarjeta en el servidor, instalar dahdi y posteriormente ejecutar el siguiente comando:

dahdi_cfg

Este comando generaŕa el fichero /etc/dahdi/system.conf

Para comprobar que el comando se ha ejecutado satisfactoriamente lo abriremos y tendrá que tener un formato semejante al siguiente ejemplo:

# Autogenerated by /usr/sbin/dahdi_genconf on Tue Oct 22 17:42:59 2013
# If you edit this file and execute /usr/sbin/dahdi_genconf again,
# your manual changes will be LOST.
# Dahdi Configuration File
#
# This file is parsed by the Dahdi Configurator, dahdi_cfg
#
# Span 1: WCT1/0 "Digium Wildcard TE110P T1/E1 Card 0" HDB3/CCS/CRC4
span=1,1,0,ccs,hdb3,crc4
# termtype: te
bchan=1-15,17-31
dchan=16
echocanceller=oslec,1-15,17-31
# Global data
loadzone        = es
defaultzone     = es

19 Aprovisionamiento terminales Cisco

19.1 Configurar protocolo SIP TCP o UDP en terminal Cisco

Configuración de terminal Cisco para para funcionar bajo TCP o UDP: Modificar parámetro

<transportLayerProtocol>X</transportLayerProtocol>

Donde X es:

   1: TCP
   2: UDP
   4: Valor por defecto del firmware (al menos en la última versión equivale a TCP)

19.2 Habilitar/Deshabilitar llamada en espera en terminales Cisco

En el fichero de aprovisionamiento del terminal añadiremos la siguiente linea

<callWaiting>X</callWaiting>

Donde X es:

  0=off but can be changed through the settings menu.
  1=on but can be changed through the settings menu.
  2=off and locked so it can't be changed through the settings menu.
  3=on and locked so it can't be changed through the settings menu.

20 Como configurar servicio DHCP en Ubuntu Linux

¿Que es un servicio DHCP?

Un servidor Dynamic Host Configuration Protocol (DHCP) asigna dinámicamente las direcciones IP y otras configuraciones de red a otros terminales que están conectados a la red.

Instalar un servicio DHCP

Para instalar el servidor de asignacion automatica de direccion IP ejecutamos el comando:

sudo apt-get install isc-dhcp-server

Configurando el servicio DHCP

Editamos el archivo /etc/dhcp/dhcpd.conf creando primero un backup del mismo:

mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.original
nano /etc/dhcp/dhcpd.conf

El archivo debe quedar de una forma muy similar a esta:

authoritative
subnet  10.254.239.0 netmask 255.255.255.254
{
range dynamic-bootp  10.254.239.40 10.254.239.60;
option domain-name-servers ns1.example.org, ns2.example.org;
option domain-name "example.org";
option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org ;
option broadcast-address 10.254.239.255;
default-lease-time 3600;
max-lease-time 7200;
option option-150 10.254.239.25
}

Donde los campos:

  • subnet: Direccion de red
  • netmask: Máscara de red
  • range dynamic-bootp: Rango de IPs que va a proporcionar el DHCP
  • option domain-name-servers: Direcciones IPs de los DNS
  • option domain-name: Nombre de dominio
  • option routers:IPs de las puertas de enlace
  • option broadcast-address: Dirección de broadcast
  • default-lease-time: Tiempo de concesión por defecto
  • max-lease-time: Valor máximo del tiempo de concesión
  • option option-150: IPs de los servidores TFTPs que tiene la red

Reiniciamos el servicio

service isc-dhcp-server restart

Direcciones IP estáticas basadas en la MAC

Pueden conocerse las MAC de las máquinas conectadas a la red ejecutando el comando arp desde la terminal.

host ejemplo {
       hardware ethernet 00:0B:82:19:A8:04;
       option option-150 10.254.239.0;
#      fixed-address 10.254.239.52;
}

21 Protocolo Skinny en VIVAit Call mediante uso de Chan-SCCP

Instalación de chan_sccp

  • Copiar el fichero chan-sccp-4.2.1.1.tar.gz en el directorio donde estén los fuentes de Asterisk (normalmente /usr/src/MDtel)
  • Descomprimir
  • Entrar al directorio chan-sccp-4.2.1.1
  • Ejecutar: ./configure --with-asterisk=../DIRECTORIO_ASTERISK --enable-conference. Donde DIRECTORIO_ASTERISK es el nombre del directorio donde están los fuentes de asterisk.
  • Tras el ejecutar el configure (si todo va bien al final se verá un resumen con el S.O, arquitectura, etc), ejecutar make y make install
  • El nuevo módulo chan_sccp.so se generará dentro del DIRECTORIO_ASTERISK en lib/asterisk/modules/ y se deberá copiar en /usr/lib/asterisk/modules/
  • Copiar el fichero sccp.conf a /etc/asterisk
  • Entra a Asterisk y ejecutar: module load chan_sccp.so
  • Si se ha cargado correctamente, desde dentro de Asterisk, si se teclea sccp show version deberá devolver: "Skinny Client Control Protocol (SCCP). Release: 4.3.0 4.3.0 - unknown (built by 'root' on '2016-06-01 10:42:32 UTC')"

Crear extensiones

  • En el portal crear una nueva clase de dispositivo (Vivait-Call/Dispositivos/Clases de dispositivos), donde la clase sea extensión la subclase H323 (todavía no existe la subclase SCCP) y el formato SCCP/${DEST}
  • Crear la nueva extensión, pero el dispositivo debe ser el creado en el campo anterior.
  • Las extensiones creadas habrá que añadirlas al fichero sccp.conf así como los teléfonos que las usarán. En el fichero sccp.conf incluido hay ejemplos.

Aprovisionamiento Los terminales se aprovisionan de la misma manera que los SIP, exceptuando que las plantillas XML no tiene referencias a SIP. Se incluye un xml genérico con todas las opciones. Dentro del directorio chan-sccp-4.2.1.1 hay un directorio conf con todos los archivos de configuración necesarios. Las versiones annotated contienen todas las opciones posibles comentadas.

22 Instalación y configuración Postfix en RedHat7

Postfix es un servidor de correo de software libre/código abierto, un programa informático para el enrutamiento y envío de correo electrónico.

Instalación

yum install postfix

Configuración

Sobre la configuración de postfix por defecto (recién instalado): Editar el fichero /etc/postfix/main.cf

inet_protocols = ipv4
relayhost = smtp.renfe.es

Revisar la configuración:

postfix check

Configurar postfix como servicio (sólo en redhat y similares)

chkconfig postfix on

Iniciar postfix:

service postfix start

Instalar mailx para disponer de los comandos mail y sendmail:

yum install mailx

Probar configuración:

echo "Prueba de correo" | mail -vs "Prueba" correo@destino.soy

23 FOP2

23.1 Como mostrar callername queues FOP2

Es necesario añadir el siguiente código al contexto de entrada:

exten => _X.,n,MYSQL(Connect connid localhost usuario clave bd)
exten => _X.,n,MYSQL(Query resultid ${connid} SELECT\ firstname\,lastname\ from\ fop2\ where\ phone1=${CALLERID(num)}\ OR\ phone2=${CALLERID(num)})
exten => _X.,n,MYSQL(Fetch fetchid ${resultid} nombre apellidos)
exten => _X.,n,GotoIf($[${fetchid} = 1]?:noExiste)
exten => _X.,n,Set(CALLERID(name)=${nombre}${apellidos})
exten => _X.,n(noExiste),Continuar

En la primera línea cambiar según lo necesario:

  • localhost: Dirección IP del servidor de MySQL donde está la BBDD de FOP2
  • usuario: Usuario con permisos de acceso a la bbdd de FOP2
  • clave: Clave del usuario
  • bd: Nombre de la BBDD

23.2 FOP2. Problemas en transferencias asistidas

Para habilitar la transferencia atendida del asterisk (funcion atxfer), hay que poner la opción tT en el queue() si la llamada origen 
la realiza a una cola o  al dial() de las extensiones.
Con eso vemos como al intentar hacer la llamada de consulta ya se va a nuestro dialplan. Sin embargo la llamada no funciona ya que 
el enrutador nos da error de  enrutamiento porque no tenemos ID_DISPOSITIVO origen ya que el fop no es un elemento creado desde el portal.
Por lo que se propone como solución crear un contexto de inicio del fop y asignarle un ID_DISPOSITIVO para que así se enrute la llamada. 
El contexto tienen que ser similar a ext_InicioLlamada_Chrome.conf

Para que funcione las transferencias supervisadas desde el fop2 hay que realizar lo siguiente:

  • El usuario del manager debe tener permisos Atxfer para poder realizar transferencias.
  • Habilitar la transferencia atxfer en el fuatures.conf del asterisk. atxfer => *2
  • Crear el fichero ext_InicioLlamada_FOP.conf con el siguiente contenido:
[Cen_Inicio_FOP]
exten => [*#%0-9].,1,NoOp(MDINICHR**EXTEN=${EXTEN}**CID=${CHROME_ANI}*)
same => n,dumpchan()
;same => n,Set(CALLERID=${CHROME_ANI})
same => n,Gosub(Cen_Sub_getIdExtension,s,1(${R_CID_NUM_00}))
same => n,ExecIf($["${GOSUB_RETVAL}"!="OK" | "${sqlDato}"=""]?HangUp)
same => n,Set(ID_DISPOSITIVO=${sqlDato})
; . Modificar MARCAR en funcion de reglas de marcacion saliente (prefijo 0, ...)
; Esto se modificara en el contexto Cen_Inicio_Chrome_Particular
same => n,Set(MARCAR=${EXTEN})
;---------------------------------


;--- Llamada a contexto particular
;---------------------------------
; Esta llamada es para hacer cosas especificas del cliente (cambiar callerid...)
; La subrutina Cen_Inicio_Chrome_Particular esta en el archivo ext_InicioLlamada_Chrome_Particular.conf
; Si no existe el archivo copiar el archivo ext_InicioLlamada_Chrome_Particular.conf.ejemplo como ext_Inicio_Chrome_Particular.conf
; y realizar las modificaciones necesarias
; El fichero ext_InicioLlamada_Chrome_Particular.conf se carga automaticamente al ser creado con el include de ext_InicioLlamada.conf
; #include "ext_InicioLlamada*.conf"
;
same => n,GosubIf($[${DIALPLAN_EXISTS(Cen_Inicio_FOP_Particular,${EXTEN},1)}>0]?Cen_Inicio_FOP_Particular,${EXTEN},1)
same => n,Goto(Cen_Inicio_SIP,${MARCAR},1)
  • En el fichero /usr/local/fop2/buttons.cfg poner como contexto de las extensiones el creado anteriormente (Cen_Inicio_FOP)
  • Modificar el fichero /usr/local/fop2/fop2.cfg:
blind_transfer = 0
supervised_transfer = 1

Para realizar la transferencia con consulta, hay que pulsar el supervised transfer del FOP2 y una vez se haya establecido la llamada, seleccionar la extensión que "sobra" en la conversación y pulsar la tecla de hangup y colgar la llamada.


24 Como ver los directorios de un NAS a montar con NFS

Con el siguiente comando vemos los diferentes volúmenes de un NAS:

showmount -e IP_NAS

Ejemplo de salida:

Export list for 192.168.10.10:
/Backup/backup       *
/DISCOS_1/VOL1_AUDIO *


25 Instalación de ActivaSTP con VIVAit Call 3 y marcación desde Outlook

Instalamos ActivaSTP desde:

(http://activa.sourceforge.net/)


La configuración necesaria se muestra en la siguiente imagen:

Ventana ActivaTSP.jpg

El usuario del manager debe tener permisos originate para poder realizar llamadas.

Se han realizado pruebas con Outlook 2013.

Se ha comprobado la correcta realización de pruebas utilizando ActivaSTP, realizadon llamadas desde la pestaña "personas" con la vista en modo tarjeta de Pesentación, tarjeta, teléfono o lista.

Outlook 2013 no da la opción de llamar si la vista está en modo personas.


26 Como volver a procesar grabaciones con error

Las grabaciones con error son aquellas que tienen el valor E_GRABACION=120 en la tabla DAT_GRABACIONES.

Las grabaciones con error se producen normalmente por la pérdida de conexión entre el nodo servidor de grabaciones y el resto.

Para reprocesar la grabación hay que modificar el campo E_GRABACION de la tabla DAT_GRABACIONES y ponerlo con valor 20 para que así el recordCentral la vuelva a procesar.


27 Como borrar contenido de la tabla BDTR con el script borraRegistrosNimitz.pl

Este script se ejecuta mediante una tarea del crontab, tal como la siguiente:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user  command
00 01     * * *   root    /usr/local/sbin/borraRegistrosNimitz.pl --hDB localhost

Para establecer el número de días que vamos a dejar en la base de datos debemos editar el archivo borraRegistrosNimitz.pl, el campo my $numDias.


28 Ocasionalmente No saltan los formularios en VIVAit Suite cuando existen marcadores

En los sistemas con marcadores, se ha observado que, en un porcentaje muy bajo, cuando entra una llamada a un agente no se presenta el formulario. En una traza del vivait-desk se pudo comprobar que no había eventos CTI de la llamada, pero telefónicamente la llamada si quedaba establecida.

El problema viene ocasionado porque el CTI tiene auditorías para descartar llamadas,evitando que se queden enganchadas.

Una de esas auditorías es el tiempo máximo de las llamadas no contestadas.

El marcador tiene puesto a fuego que el tiempo que permanece una llamada en cola a la espera de un agente libre es de 10 minutos.

Hay que poner el tiempo de auditoría en un valor superior (por ejemplo 12 minutos)

En el archivo de configuración vivait-cti.conf

audit_call_minutNoContestada = 12

El paŕametro audit_call_minutContestada, es el tiempo que el cti "conserva" una llamada, dado que el dialplan tiene puesto el timeout absolute a 7200 (120 minutos), deberiamos modificar este parámetro para que esté sincronizado

audit_call_minutContestada = 120

Estos cambios se implementarán en el instalador de la próxima versión.

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

30 Activación de la movilidad para un usuario

Una vez configurada la movilidad e intentar activarla nos da error cuando le ponemos el usuario y la contraseña.

La configuración del usuario es la siguiente:

Problema.jpg


Para que la movilidad funcione hay que asignar un teléfono a la extensión, quedando la configuración de esta manera:


Asignacion de telefono.jpg


31 Como se muestra el número llamante en transferencia desde operadora

Para tener el número ANI en las transferencias con consulta hay que realizar lo siguiente:

Copiar el archivo adjunto (app_esConsulta.c) en el directorio apps de Asterisk (normalmente /usr/src/vivait-call/asterisk/apps).
   Situarse en el directorio raiz de Asterisk (normalmente /usr/src/vivait-call/asterisk/).
   Compilar: make
   Instalar: make install
   Habilitar el nuevo módulo: asterisk -rx 'module load app_esConsulta.so'
   Si la carga del módulo no funcionara, hay que el reiniciar Asterisk para que cargue el módulo.

Posteriormente modificar el fichero ext_Enrutador_Particular.conf de la siguiente forma:

[Cen_Enrutador_Particular]
exten => [*#%0-9].,1,NoOp(MDENRUPAR**EXTEN=${EXTEN}**CID=${CALLERID(NUM)}*)
same =>           n,NoOp(calleridAntes=${CALLERID(num)})
same =>           n,esConsulta
same =>           n,GotoIf($["${consultaANI}"=""]?noConsulta)
;same =>           n,Set(CALLERID(name)=\Transfer:${consultaANI}\)
same =>            n,Set(_R_CID_NUM_00=${consultaANI})
same =>           n,GotoIf($["${consultaNOM}"=""]?noNom)
;same =>           n,Set(CALLERID(name)=\Transfer:${consultaNOM}\)
same =>            n,Set(_R_CID_NAME_00=${consultaNOM})
same =>           n(noNom),Set(_R_CID_NUM_00=${consultaANI})
same =>           n,NoOp(callerIDdespues=${CALLERID(num)})
same =>           n(noConsulta),NoOP(noConsulta)
;same =>           n,Set(CALLERID(num)=${consultaANI})
same =>            n,Return

En caso de que ya haya algo añadido en el fichero, hay que analizar en que posición se pondrá el contenido anterior para que no se vea modificado el funcionamiento de la centralita

32 Como conseguir que los tonos dtmf no sean regenerados por Asterisk

Para que los tonos dtmf no sean regenerados por Asterisk hay que:

cd /usr/src/MDtel/asterisk/apps/
cp /tmp/app_setoption.c .
ls -l app_setoption.c
cd ..
make menuconfig (comprobar que todo está bien)
make (comprobar que compila la nueva app)
make install


EJEMPLO: los tonos dtmf entran por "Trunk_GW_MAQUETAS" y va a la extensión 4175.

Creamos un nuevo contexto por el trunk de entrada que queremos activar esta opción (o lo aplicamos a todos si procede, dependerá de cada instalación)

PARA LA ENTRADA:

   sip_trunkExt_WEB.conf
       Trunk_GW_MAQUETAS
           context=Cen_Inicio_TrunkSip_Maqueta
           dtmfmode=inband
           directmedia=no
           disallow=all
           allow=alaw
   ext_InicioLlamada_TrunkSIP_Particular.conf
       [Cen_Inicio_TrunkSip_Maqueta]
           exten => _X.,1,NoOp(MDINITRUNSIPPAR**EXTEN=${EXTEN}**CID=${CALLERID(NUM)}*)
           same =>            n,SetChannelOption(14,0)
           same =>            n,Goto(Cen_Inicio_TrunkSip,${EXTEN},1)
           same =>            n,Return()
           

PARA LA SALIDA:

   ext_MARCAR_Extension_Dial.conf
       [Cen_Marcar_Extension_Dial_Gosub]
            same =>  n,ExecIf($["${PASARTONOS}"="1"]?SetChannelOption(14,0))    (AÑADIMOS)
            
    sip_WEB.conf
       El peer debe tener:
           PASARTONOS => 1     ;Variable declarada para el contexto ext_MARCAR_Externo_Dial en la macro
           dtmfmode=inband
           directmedia=no
           disallow=all
           allow=alaw
            

Paramos y arrancamos Asterisk (ya que hemos compilado y aprovechamos para recargar DialPlan)

Para comprobar el funcionamiento:

En Asterisk:

   core set debug 1
       Hacer llamada descolgando la misma
   core set debug 0

Revisar el log de Asterisk y comprobar que en ambos canales de la llamada aparece "Disabling digit detection" (si no aparece, algo falta por configurar):

   chan_sip.c: Disabling digit detection on SIP/4175-00000031
   chan_sip.c: Disabling digit detection on SIP/Trunk_GW_MAQUETAS-00000030

33 Problemas en la bbdd de replica, tabla COM_COMUNICADOS

De forma intermitente en esta tabla se generan registros duplicados y hay que borrar registros y arrancar la Réplica para que todo vuelva a funcionar.

El problema consiste en el el script borraRegistrosNimitz.pl borra la tabla entera, sin tener en cuenta el número de días que queremos dejar de backup; esto provoca que se vuelvan a repetir los índices de la BD.

Hay que modificar el script de la siguiente forma:


dentro de la sentencia elsif($tablas[$i] eq "COM_COMUNICADOS")

Hay que sustituir la sentencia

$query = "DELETE FROM $tablas[$i;

Por esta otra:

$query = "DELETE FROM $tablas[$i] where D_HORA_FIN < DATE_SUB(NOW, INTERVAL $numDias DAY) LIMIT 100";


34 Simple_bridge y native_rtp

Para ver en que modo de funcionamiento esta la llamada escribiremos el siguiente comando.

homologacion-corp0*CLI> bridge show all

 Bridge-ID                            Chans Type            Technology
 b40f41e3-0028-46d4-8c7c-34999090680f     2 basic           native_rtp

El simple_bridge es el peor funcionamiento posible en el asterisk, hay que intentar estar siempre en native_rtp.

El native_rtp tiene dos modos de funcionamiento que se ve al ejecutar el comando siguiente:

 homologacion-corp0*CLI> sip show channel 6d7c7a13176fc340180528281d4bcc3a@172.25.128.91:5060
 Audio IP:               172.25.129.102 (Outside bridge)

En el campo Auidio Bridge podemos ver el valor Local o Outside bridge. En el modo local no se maneja al el audio por lo que no hay RTP directo entre teléfonos y pasa a través del asterisk, mientras que en modo Outside bridge si que hay rtp directo.