APIs integracion
Producto: | VIVAit Call
VIVAit Suite |
---|
Sumario
- 1 Webservice ClicktoCall
- 2 Webservice CargaContactos
- 3 Script Cargacontactos
- 4 Script ImportaContactos
- 5 Webservice Chat
- 6 MDflow
- 6.1 Proceso de instalación de mdflow en una instalación existente; → como se "añade" mdflow en un VIVAit existente
- 6.2 Ejemplo claro de invocación de mdflow desde dialplan y posterior tratamiento en función de las etiquetas de salida
- 6.3 Comandos básicos de diagnóstico (si existen); ¿como sé si MDflow está activo?, ¿como sé cuantas colas están funcionando? (no me refiero a mirar la configuración)...¿que comandos de diagnóstico existen?
- 6.4 Comandos básicos de diagnóstico
- 6.5 mdflow y las trazas...¿como, en que circunstancias obtenemos trazas de mdflow?, ¿tenemos que poner el nivel de asterisk en un determinado nivel, las trazas de mdflow empiezan por una cadena?
- 7 Conexión externa a tracker
1 Webservice ClicktoCall
Versión 1.0
1.1 Introducción
A través de este webservice, se podrán añadir contactos a las listas “llamame” del cliente. Estas listas serán gestionadas para la generación de campañas utilizadas en el marcador.
1.2 Invocación y parámetros
Para poder invocar a dicho webservice, se deberá hacer una petición http a la siguiente url:
http://xxx.xxx.xxx.xxx:xxxx/ClicktoCall/CreateClicktoCall
siendo xxx.xxx.xxx.xxx:xxxx la ip y el puerto donde haya sido desplegado el webservice
Se deberán pasar los parámetros a través de post.
Un ejemplo de invocación sería la siguiente
Los distintos parámetros que podemos indicar en dicha invocación son los siguientes:
Nombre | Tipo | Obligatorio | Descripción |
---|---|---|---|
date | String | No | Fecha en la que se realizará la llamada, si el parámetro no se indica, se fija fecha actual.El formato del string que se debe enviar es
yyyy-MM-dd HH:mm:ss |
idLista | Integer | Si | Identificador de la lísta “llamame” en la que el contacto será insertado |
codCliente | String | No | Código del cliente |
nombre | String | Si | Nombre del cliente |
apellido1 | String | No | Primer apellido del cliente |
apellido2 | String | No | Segundo apellido del cliente |
empresa | String | No | Empresa del cliente |
direccion1 | String | No | Campo de dirección del cliente |
direccion2 | String | No | Campo de dirección del cliente |
cp | String | No | Código postal del cliente |
localidad | String | No | Localidad del cliente |
provincia | String | No | Provincia del cliente |
idpais | Integer | No | Identificador del país, si no se indica, será España |
String | No | E-mail del cliente | |
msisdn | String | Si | Número de teléfono del cliente |
gender | Integer | No | Indicador del género del cliente, si no se indica, sera masculino |
lang | Integer | Sí | Indicador del lenguaje a utilizar, si no se indica, será lenguaje español |
treatment | Integer | No | Indicador del tipo de tratamiento del cliente. |
op1int | Integer | No | Parámetro opcional 1 |
op2int | Integer | No | Parámetro opcional 2 |
op3int | Integer | No | Parámetro opcional 3 |
op4int | Integer | No | Parámetro opcional 4 |
op1 | String | No | Parámetro opcional 1 |
op2 | String | No | Parámetro opcional 2 |
op3 | String | No | Parámetro opcional 3 |
op4 | String | No | Parámetro opcional 4 |
1.3 Resultado y códigos de error
Si el webservice se ejecuta correctamente enviará el código de respuesta 200.
Si el webservice no se ejecuta de forma correcta, puede devolver los siguientes códigos de error:
Error | Código | Descripción |
---|---|---|
SC_NOT_FOUND | 404 | |
SC_BAD_REQUEST | 400 | Not enough parameters |
SC_CONFLICT | 409 | Internal process error |
SC_INTERNAL_SERVER_ERROR | 500 | e.getMessage() |
2 Webservice CargaContactos
Versión 1.0
2.1 Introducción
A través de este webservice, se podrán añadir contactos a cualquiera de las campañas que se tenga definidas.
2.2 Invocación y párametros
Para poder invocar a dicho webservice, se deberá hacer una petición http a la siguiente url:
http://xxx.xxx.xxx.xxx:xxxx/CargaContactos/CreateCargaContactos
siendo xxx.xxx.xxx.xxx:xxxx la ip y el puerto donde haya sido desplegado el webservice
Se deberán pasar los parámetros a través de post.
Un ejemplo de invocación sería la siguiente
Los distintos parámetros que podemos indicar en dicha invocación son los siguientes:
Nombre | Descripción | Obligatorio | Tipo |
---|---|---|---|
date | Fecha en la que se realizará la llamada, si el parámetro no se indica, se fija fecha actual. El formato del string que se debe enviar es yyyy-MM-dd HH:mm:ss | No | Date |
obsoletos | Si vale 1, marcar como obsoletos los contactos anteriores, el valor por defecto es 0 | No | Integer |
diasCaducidad | Número de días a partir de los cuales caducarán los contactos, el valor por defecto es 30 días (este parámetro puede cambiarse en el fichero web.xml) | No | Integer |
idCampana | Identificador de la campaña en la que se insertará el contacto | Si | Integer |
idLista | Identificador de lista asociada a la campaña | Si | Integer |
prioridad | El valor es de 0 a 99. A mayor número mayor prioridad (se le llamará ANTES), por defecto se asigna valor 0 | No | Integer |
tipoTarea | Los posibles valores de la columna son:
Por defecto el valor es A |
No | String |
codCli | Identificador del código del cliente | No | String |
nombreCon | Nombre del cliente | No | String |
apellido1 | Primer apellido | No | String |
apellido2 | Segundo apellido | No | String |
empresa | Empresa | No | String |
direccion1 | Dirección 1 | No | String |
direccion1 | Dirección 1 | No | String |
direccion2 | Dirección 2 | No | String |
codPostal | Código postal | No | String |
localidad | Localidad | No | String |
provin | Provincia | No | String |
No | String | ||
valFijo_1 | Primer número fijo del contacto. | Si | Integer |
valFijo_2 | Segundo número fijo del contacto. | No | Integer |
valFijo_3 | Tercer número fijo del contacto. | No | Integer |
valFijo_4 | Cuarto número fijo del contacto. | No | Integer |
valMovil_1 | Primer número móvil del contacto. | Si | Integer |
valMovil_2 | Segundo número móvil del contacto. | No | Integer |
valMovil_3 | Tercer número móvil del contacto. | No | Integer |
valMovil_4 | Cuarto número móvil del contacto. | No | Integer |
edad | Edad. | No | Integer |
nOpc1 | Dato numérico opcional | No | Integer |
nOpc2 | Dato numérico opcional | No | Integer |
nOpc3 | Dato numérico opcional | No | Integer |
nOpc4 | Dato numérico opcional | No | Integer |
nOpc5 | Dato numérico opcional | No | Integer |
nOpc6 | Dato numérico opcional | No | Integer |
nOpc7 | Dato numérico opcional | No | Integer |
nOpc8 | Dato numérico opcional | No | Integer |
cOpc1 | Cadena opcional | No | String |
cOpc2 | Cadena opcional | No | String |
cOpc3 | Cadena opcional | No | String |
cOpc4 | Cadena opcional | No | String |
cOpc5 | Cadena opcional | No | String |
cOpc6 | Cadena opcional | No | String |
cOpc7 | Cadena opcional | No | String |
cOpc8 | Cadena opcional | No | String |
id_idioma | Idioma del contacto. Por defecto el valor es 0, no se asigna idioma al contacto | No | String |
2.3 Resultado y códigos de error
Si el webservice se ejecuta correctamente enviará el código de respuesta 200. Si el webservice no se ejecuta de forma correcta, puede devolver los siguientes códigos de error:
Error | Código | Descripción |
---|---|---|
SC_NOT_FOUND | 404 | |
SC_BAD_REQUEST | 400 | Not enough parameters |
SC_FORBIDDEN | 403 | Client in Robinson List |
SC_CONFLICT | 409 | Internal process error |
SC_INTERNAL_SERVER_ERROR | 500 | Problems in SQL querys
e.getMessage() |
El CargaContactos verifica que los campos obligatorios IDcampanna e IDlista existen en la Base de Datos.
En caso contrario retornará error:
No existe campanna ó No existe lista
2.4 Configuración del fichero web.xml
En este fichero, se deben fijar los valores de despliegue correctos de la aplicación. Este fichero se encuentra en la ruta de despliegue del WAR (/var/lib/tomcatx/webapps/CargaContactos/WEB-INF/web.xml)
<context-param> <description>Servidor BBDD</description> <param-name>bd_acd_servidor</param-name> <param-value>xxx.xxx.xxx.xxx</param-value> </context-param> <context-param> <description>BBDD</description> <param-name>bd_acd_bd</param-name> <param-value>xxxxxxx</param-value> </context-param> <context-param> <description>Usuario BBDD</description> <param-name>bd_acd_usuario</param-name> <param-value>xxxxxx</param-value> </context-param> <context-param> <description>Usa Clave</description> <param-name>bd_usa_clave</param-name> <param-value>0</param-value> </context-param> <context-param> <description>Clave BBDD</description> <param-name>bd_acd_clave</param-name> <param-value>xxxxxxxx</param-value> </context-param> <context-param> <description>Dias Caducidad</description> <param-name>caducidad</param-name> <param-value>30</param-value> </context-param>
Parámetro | Descripción |
---|---|
bd_acd_servidor | IP donde se encuentre ubicada la base de datos |
bd_acd_bd | Nombre de la base de datos a utilizar |
bd_acd_usuario | Usuario de la base de datos |
bd_usa_clave | Parámetro que indica si el password esta cifrado o no, por defecto el valor es 0 (No cifrado) |
bd_acd_clave | Clave para la conexión a base de datos. |
caducidad | Días de caducidad del contacto, por defecto se asignan 30 días |
3 Script Cargacontactos
3.1 Descripción
A continuación se explica la configuración y funcionamiento de la utilidad encargada de asignar contactos a campañas.
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 | Por defecto la script está configurada con 300 días |
idCampanna | Número de columna que contiene el ID de la campaña | SI | |
idLista | Numero de columna que contiene el ID de la lista | SI | |
prioridad | Número de columna que contiene la prioridad | NO | Nota: El valor es de 0 a 99. A mayor número mayor prioridad (se le llamará ANTES) |
tipoTarea | Número de columna que contiene el tipo de tarea | NO | Nota: los posibles valores de la columna son : *A: Alta *M: Modificación *B: Baja Por defecto el valor es A |
codCli | Número de columna del CSV que contiene el código de cliente | SI | |
nombreCon | Número de columna del CSV que contiene el nombre | NO | |
apellido1 | Número de columna del CSV que contiene el primer apellido | NO | |
apellido2 | Número de columna del CSV que contiene el segundo apellido | NO | |
empresa | Número de columna del CSV que contiene la empresa | NO | |
direccion1 | Número de columna del CSV que contiene la dirección | NO | |
direccion2 | Número de columna del CSV que contiene la dirección 2 | NO | |
codPostal | Número de columna del CSV que contiene el código postal | NO | |
localidad | Número de columna del CSV que contiene la localidad | NO | |
provin | Número de columna del CSV que contiene la provincia | NO | |
Número de columna del CSV que contiene el email | NO | ||
valFijo_1 | Número de columna del CSV que contiene el primer número fijo del contacto | SI | |
valFijo_2 | Número de columna del CSV que contiene el segundo número fijo del contacto | NO | |
valFijo_3 | Número de columna del CSV que contiene el tercer número fijo del contacto | NO | |
valFijo_4 | Número de columna del CSV que contiene el cuarto número fijo del contacto | NO | |
valMovil_1 | Número de columna del CSV que contiene el primer número móvil del contacto | SI | |
valMovil_2 | Número de columna del CSV que contiene el segundo número móvil del contacto | NO | |
valMovil_3 | Número de columna del CSV que contiene el tercer número móvil del contacto | NO | |
valMovil_4 | Número de columna del CSV que contiene el CUARTO número móvil del contacto | NO | |
edad | Número de columna del CSV que contiene la edad | NO | |
nOpc1 | Número de columna del CSV que contiene dato numérico opcional | NO | |
nOpc2 | Número de columna del CSV que contiene dato numérico opcional | NO | |
nOpc3 | Número de columna del CSV que contiene dato numérico opcional | NO | |
nOpc4 | Número de columna del CSV que contiene dato numérico opcional | NO | |
nOpc5 | Número de columna del CSV que contiene dato numérico opcional | NO | |
nOpc6 | Número de columna del CSV que contiene dato numérico opcional | NO | |
nOpc7 | Número de columna del CSV que contiene dato numérico opcional | NO | |
nOpc8 | Número de columna del CSV que contiene dato numérico opcional | NO | |
cOpc1 | Número de columna del CSV que contiene cadena opcional | NO | |
cOpc2 | Número de columna del CSV que contiene cadena opcional | NO | |
cOpc3 | Número de columna del CSV que contiene cadena opcional | NO | |
cOpc4 | Número de columna del CSV que contiene cadena opcional | NO | |
cOpc5 | Número de columna del CSV que contiene cadena opcional | NO | |
cOpc6 | Número de columna del CSV que contiene cadena opcional | NO | |
cOpc7 | Número de columna del CSV que contiene cadena opcional | NO | |
cOpc8 | Número de columna del CSV que contiene cadena opcional | NO |
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.
4 Script ImportaContactos
4.1 Descripción
Creación del script importaContactos.pl para la importación de contactos a las campañas de marcación saliente.
El script incorpora las siguientes caracteristicas:
- Uso del webService cargaContactos.
- Configuración de posición del campo en el archivo de importación.
- Configuración de parámetros por defecto.
- Uso de mascaras para la importación de archivos.
- Uso de SFTP para los archivos a importar.
- Configuración del formato de fecha.
4.2 Fichero de Configuración
El archivo de configuración es el siguiente: Esta autocomentado el uso de los campos de configuración.
# Configuracion de importaContactos.pl # 0: Solo alarmas en archivo log - 1: alarmas y trazas defecto 1 $depurar = 1; Archivo de log (: salida estandar) defecto $logArch = ; $logArch = '/var/log/importaContactos.log'; Directorio donde se encuentran los ficheros de contactos a importar $dirFicheros = '/tmp/contactos'; Directorio donde se dejaran los ficheros ya tratados $dirFicherosTratados = '/tmp/contactosTratados'; #Patron de archivos a tratar defecto $patronArchivos = "csv\$"; #Número de archivos a tratar en cada invocacion 0 todos los archivos defecto 0 $numArchivosTratar = 0; #Separador de campos del archivo de contactos defecto ';' #$separadorCampos = ";"; Formato de fecha defecto '%d-%m-%Y' http://search.cpan.org/~drolsky/DateTime-Format-Strptime-1.75/lib/DateTime/Format/Strptime.pm #$formatoFecha = "%d-%m-%Y"; url del webService para cargar contactos la url es completa con el puerto defecto: http://localhost:yyyy/CargaContactos/CreateCargaContactos $urlWebService='http://xxx.xx.xxx.xxx:yyyy/CargaContactos/CreateCargaContactos'; Configuracion SFTP SFTPhay - Si existe SFTP (0 - no, 1 - si) defecto 0 $SFTPhay = 1; $SFTPhost = 'xxx.xx.xxx.xxx'; $SFTPport = 'xx'; $SFTPusuario = 'user'; $SFTPclave = 'password'; $SFTPdir = '/data';
4.3 Campos
Los campos que pueden rellenarse de un contacto
Si el valor del campo empíeza por # y luego un número es la posición del campo en el fichero de importación el valor del primer campo es el 0.
Si el valor no empieza por # es el valor por defecto que se incluirá en todos los contactos.
Campo | Valor | Tipo | Obligatorio | Defecto | Observaciones | Ejemplo |
---|---|---|---|---|---|---|
$campoDate | Fecha en la que se realizará la lamada | Date | NO | Fecha actual (Ahora) | El formato del string que se debe enviar es yyyy-MM-dd HH:mm:ss | $campoDate = '#1'; |
#$campoObsoletos | Si vale 1, marca como obsoletos los contactos anteriores | Integer | NO | 0 | #$campoObsoletos = 0; | |
#$campoDiasCaducidad | Número de días a partir de los cuales caducarán los contactos | Integer | NO | 30 | #$campoDiasCaducidad = 30; | |
$campoIdCampana | Identificador de la campaña en la que se insertará el contacto | Integer | SI | $campoIdCampana = '#2'; | ||
$campoIdLista | Identificador de la lista en la que se insertará el contacto | Integer | SI | $campoIdLista = 1; | ||
#$campoPrioridad | El valor es de 0 a 99. A mayor número mayor prioridad (se le llamará ANTES) | Integer | NO | 0 | ||
#$campoTipoTarea | Tipo de tarea que se ejecutara al insertar el contacto | Cadena | NO | A | Los posibles valores de la columna son: A: Alta, M: Modificación, B: Baja | |
#$campoCodCli | Identificador del código del cliente | Cadena | NO | |||
#$campoNombreCon | Nombre del cliente | Cadena | NO | |||
#$campoApellido1 | Primer apellido | Cadena | NO | |||
#$campoApellido2 | Segundo apellido | Cadena | NO | |||
#$campoEmpresa | Empresa | Cadena | NO | |||
#$campoDireccion1 | Dirección 1 | Cadena | NO | |||
#$campoDireccion2 | Dirección 2 | Cadena | NO | |||
#$campoCodPostal | Código postal | Cadena | NO | |||
#$campoLocalidad | Localidad | Cadena | NO | |||
#$campoProvin | Provincia | Cadena | NO | |||
#$campoEmail | Cadena | NO | ||||
#$campoValFijo_1 | Primer número fijo del contacto | Integer | SI | ó este ó el primer móvil | ||
#$campoValFijo_2 | Segundo número fijo del contacto | Integer | NO | |||
#$campoValFijo_3 | Tercer número fijo del contacto | Integer | NO | |||
#$campoValFijo_4 | Cuarto número fijo del contacto | Integer | NO | |||
$campoValMovil_1 | Primer número móvil del contacto | Integer | SI | ó este ó el primer fijo | $campoValMovil_1 = '#0'; | |
$campoValMovil_2 | Segundo número móvil del contacto | Integer | NO | |||
$campoValMovil_3 | Tercer número móvil del contacto | Integer | NO | |||
$campoValMovil_4 | Cuarto número móvil del contacto | Integer | NO | |||
#$campoEdad | Edad | Integer | NO | |||
#$campoNOpc1 | Dato numérico opcional | Integer | NO | |||
#$campoNOpc2 | Dato numérico opcional | Integer | NO | |||
#$campoNOpc3 | Dato numérico opcional | Integer | NO | |||
#$campoNOpc4 | Dato numérico opcional | Integer | NO | |||
#$campoNOpc5 | Dato numérico opcional | Integer | NO | |||
#$campoNOpc6 | Dato numérico opcional | Integer | NO | |||
#$campoNOpc7 | Dato numérico opcional | Integer | NO | |||
#$campoNOpc8 | Dato numérico opcional | Integer | NO | |||
#$campoCOpc1 | Cadena opcional | Cadena | NO | |||
#$campoCOpc2 | Cadena opcional | Cadena | NO | |||
#$campoCOpc3 | Cadena opcional | Cadena | NO | |||
#$campoCOpc4 | Cadena opcional | Cadena | NO | |||
#$campoCOpc5 | Cadena opcional | Cadena | NO | |||
#$campoCOpc6 | Cadena opcional | Cadena | NO | |||
#$campoCOpc7 | Cadena opcional | Cadena | NO | |||
#$campoCOpc8 | Cadena opcional | Cadena | NO | |||
#$campoId_idioma | Idioma del contacto | Cadena | NO | 0 | Por defecto el valor es 0, no se asigna idioma al contacto |
5 Webservice Chat
6 MDflow
MDflow es una aplicación Asterisk que se basa en la unidad de medida TIC (un TIC, por defecto, corresponde a 500ms, pero es configurable).
La aplicación está diseñada para controlar el flujo de llamadas entrantes → El sistema cuenta llamadas en cada periodo TIC.
El módulo permite difinir distintas cajas de medida y control (FLUJO).
Se pueden definir n cajas y ubicarlas en Asterisk (por ejemplo en un enlace externo, una caja que agrupe todos los enlaces, en los enlaces interiores y en extensiones).
Cada una de las cajas, o flujos, mide y controla la tasa de llamadas en cada TIC → Se mostrará en llamadas/segundo.
El FLUJOmide lo que está pasando en un determinado punto del dialplan; un ejemplo claro será la primera línea de éste, cuando se crea una llamada de un enlace externo.
El FLUJOpermite controlar y medir, y está pensado para enviar información a Zbbix.
Desde el punto de vista del Dialplan, se trata de una aplicación con dos parámetros:
- Que caja se utiliza (número del 1 al 9).
- DNIS que permite controlar para que destino queremos hacer el control de flujo.
Para encolar internamente cada FLUJO tiene un número de colas definidas y cada DNIS está en una cola. Cuando entra una llamada y se invoca a la caja con el DNIS de esa llamada, o se crea nueva cola, o se encola en una existente para ese DNIS si la hubiera. El número de colas deberá ser el numero de DNIS masivo.
Una cola de un DNIS se libera de ese DNIS cuando queda vacia (por eso los ocasionales no tendrán cola habitualmente y los masivos si).
Cuando entra una llamada si el DNIS tiene cola se encola, si no tiene y hay libres se crea una nueva y si no hay colas libres (maximo configurable), la llamada pasa. (se asume que las masivas quedarán en colas y que las ocasionales pasarán).
Para sacar llamadas (desencolar), saco una de cada cola (fair queues). No podemos configurar que de unas colas se atiendan mas llamadas que de otras.
En control de flujo se indica para cada caja la tasa de entrada en llamadas/s.
El mecanismo de control de flujo entra en funcionamiento cuando el sistema entra en congestión.
Las llamadas que se encolan tienen un retardo adicional tipico de un TIC.
Cuando una llamada entra en cola se define un tiempo máximo en cola (por defecto 5 segundo); si se alcanza ese tiempo se considera llamada desbordada, la aplicación la saca con una etiqueta y sigue con el dialplan que podrá tirarla, podrá derivarla...
6.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.2 Ejemplo claro de invocación de mdflow desde dialplan y posterior tratamiento en función de las etiquetas de salida
Por defecto el MDflow se pondrá en los siguientes ficheros de Asterisk:
- ext_InicioLlamada_ExtSIP.conf
- ext_InicioLlamada_TrunkSIP.conf
- ext_TrunkInternos.conf
ya que son los diferentes contextos de entrada de llamadas.
;-------------------------------------------------------------------------------- [Cen_TrunkInternos] ;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- exten => _[*#%0-9a-zA-Z].,1,NoOp(MDENTTR_X****EXTEN=${EXTEN}**CID=${CALLERID(NUM)}*) same => n,Set(__ENR_PEER_ORIGEN=${CHANNEL(peername)}) ;------------------------- ; Control de flujo ;------------------------- same => n,Set(HORAINI=${EPOCH}) same => n,MDflow(3,${EXTEN}) same => n,Log(NOTICE,MDFLOWTRUNKINT**RES=${MDflowRes}**SEG=$[${EPOCH}-${HORAINI}]**PEER=${ENR_PEER_ORIGEN}**CID=${CALLERID(NUM)}*) same => n,ExecIf($["${MDflowRes}"="DESBORDA"]?HangUp(1)) same => n,Set(GROUP()=TrunkInternos) same => n,Set(valor=) same => n,ExecIf($["${LlamTrunkInternos}" = ""]?Set(valor=300):Set(valor=${LlamTrunkInternos})) same => n,ExecIf($[${GROUP_COUNT(TrunkInternos)} > ${valor}]?HangUp(1)) same => n,Log(NOTICE,MDGROUPTRUNKINT**GROUPCOUNT=${GROUP_COUNT(TrunkInternos)}**PEER=${ENR_PEER_ORIGEN}**CID=${CALLERID(NUM)}*) [Cen_Inicio_TrunkSip] ;exten => _[*#%0-9a-zA-Z].,1,NoOp(MDINITRUNKSIP**EXTEN=${EXTEN}**CID=${CALLERID(NUM)}*) exten => _[*#%0-9].,1,NoOp(MDINITRUNKSIP**EXTEN=${EXTEN}**CID=${CALLERID(NUM)}*) ; TTipoIdEnrutamiento = ( ; tipoIdEnrutamiento_ninguno=0, // quitar no sabemos ; tipoIdEnrutamiento_dispositivo=10, ; tipoIdEnrutamiento_cola=20 ; ); same => n,Set(ENR_PEER_ORIGEN=) same => n,Set(__ENR_TIPO_ORIGEN=10) same => n,Set(__ENR_ORIGEN=${ID_DISPOSITIVO}) ;same => n,Set(__SPAN_IN=) ;same => n,Set(__CANAL_IN=) ;same => n,Set(__TIPO_LLAMADA=${TIPOLLAMADAENT}) same => n,NoOp(ENR_TIPO_ORIGEN=${ENR_TIPO_ORIGEN}***ENR_ORIGEN=${ENR_ORIGEN}) ;------------------------- ; Control de flujo ;------------------------- same => n,Set(HORAINI=${EPOCH}) same => n,MDflow(1,${EXTEN}) same => n,Log(NOTICE,MDFLOWTRUNKSIP**RES=${MDflowRes}**SEG=$[${EPOCH}-${HORAINI}]**CID=${CALLERID(NUM)}*) same => n,ExecIf($["${MDflowRes}"="DESBORDA"]?HangUp(1)) same => n,Set(GROUP()=${CHANNEL(peername)}) same => n,Set(valor=) same => n,ExecIf($["${maxLlam}" = ""]?Set(valor=300):Set(valor=${maxLlam})) same => n,ExecIf($[${GROUP_COUNT(${CHANNEL(peername)})} > ${valor}]?HangUp(1)) same => n,Log(NOTICE,MDFLOWTRUNKSIP**GROUPCOUNT=${GROUP_COUNT(${CHANNEL(peername)})}**PEER=${CHANNEL(peername)}**CID=${CALLERID(NUM)}*)
Esto desaparecera cuando el dialplan sea unificado ahora es necesartio para que pase el ucid del acd
[Cen_Inicio_SIP] exten => _[*#%0-9].,1,NoOp(MDINIEXTENSIP**EXTEN=${EXTEN}**CID=${CALLERID(NUM)}*) same => n,Set(ENR_PEER_ORIGEN=) same => n,Set(__ENR_TIPO_ORIGEN=10) same => n,Set(__ENR_ORIGEN=${ID_DISPOSITIVO}) same => n,Set(__SPAN_IN=) same => n,Set(__CANAL_IN=) ;same => n,Set(__TIPO_LLAMADA=${TIPOLLAMADASAL}) ;------------------------- ; Control de flujo ;------------------------- same => n,Set(HORAINI=${EPOCH}) same => n,MDflow(2,${EXTEN}) same => n,Log(NOTICE,MDFLOWEXTSIP**RES=${MDflowRes}**SEG=$[${EPOCH}-${HORAINI}]**CID=${CALLERID(NUM)}*) same => n,ExecIf($["${MDflowRes}"="DESBORDA"]?HangUp(1)) same => n,NoOp(ENR_TIPO_ORIGEN=${ENR_TIPO_ORIGEN}***ENR_ORIGEN=${ENR_ORIGEN})
Para recibir el UCID de otros vivait (move,meet)
6.3 Comandos básicos de diagnóstico (si existen); ¿como sé si MDflow está activo?, ¿como sé cuantas colas están funcionando? (no me refiero a mirar la configuración)...¿que comandos de diagnóstico existen?
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
6.4 Comandos básicos de diagnóstico
El MDflow está activo si los comandos anteriormente mencionados devuleven datos, si no devuelven nada es que ha ocurrido un error al cargar el módulo en asterisk. Los comandos de diagnostico empleados son los mismos que hemos mencionado anteriormente más el mdflow debug on, que muestra lo mismo que el mdflow show stats pero lo hace para cada llamada que pase por la parte del dialplan que hemos mencionado antes.
6.5 mdflow y las trazas...¿como, en que circunstancias obtenemos trazas de mdflow?, ¿tenemos que poner el nivel de asterisk en un determinado nivel, las trazas de mdflow empiezan por una cadena?
El diaplan devulelve trazas del mdflow mdiante mensajes NOTICE, por lo que filtrando en el full de asterisk por la cadena MDFLOW iran apareciendo los diferentes retornos de ejecucion del MDFLOW (cuanto tiempo a tardado en ejecutarse, que me devuelve el MDflow para esa llamada (agujero, desbordada, ok o error))
7 Conexión externa a tracker
7.1 Introducción
A través de los distintos webservices incluidos dentro de la aplicación web Vivait-Tracker, cualquier aplicación externa podrá descargar o reproducir las grabaciones disponibles en el entorno Vivait-Suite.
7.2 Webservices desplegados
7.2.1 Login en la plataforma
7.2.1.1 Introducción
Este webservice permitirá logarse en la plataforma para la posterior descarga o reproducción de grabaciones. Para poder utilizar las funcionalidades de la aplicación Vivait-Tracker es necesario disponer de un usuario dado de alta en la plataforma Vivait-Suite con los permisos correspondientes.
Una vez este webservice sea invocado, se asociará una sesión al usuario, permitiéndole realizar la descarga o reproducción de grabaciones.
7.2.1.2 Invocación
Para poder invocar a dicho webservice, se deberá hacer una petición POST http a la siguiente url:
http://xxx.xxx.xxx.xxx:xxxx/Vivait-Tracker/remotelogin
siendo xxx.xxx.xxx.xxx:xxxx la ip y el puerto donde haya sido desplegado la aplicación Vivait-Tracker.
Se deberán pasar los parámetros a través de post.
Un ejemplo de invocación sería la siguiente
https://xxx.xx.xxx.xxx:8443/Vivait-Tracker/remotelogin?param1=demo01¶m2=00448311
Los distintos parámetros que podemos indicar en dicha invocación son los siguientes:
Nombre | Tipo | Obligatorio | Descripción |
---|---|---|---|
param1 | String | Si | Cuenta del usuario dado de alta en Vivait-Suite |
param2 | String | Si | Contraseña del usuario |
7.2.1.3 Resultado y códigos de error
Si el webservice se ejecuta correctamente enviará el código de respuesta 200.
Si el webservice no se ejecuta de forma correcta, puede devolver los siguientes códigos de error:
Error | Código | Descripción |
---|---|---|
SC_NOT_FOUND | 404 | |
SC_BAD_REQUEST | 400 | Sólo acepta parámetros por post |
SC_FORBIDDEN | 403 | Los parámetros son incorrectos |
7.2.2 Solicitud de segmentos pertenecientes al UCID
7.2.2.1 Introducción
Este webservice permitirá conocer los distintos segmentos que conforman la llamada identificada con el UCID facilitado.
7.2.2.2 Invocación
Para poder invocar a dicho webservice, se deberá hacer una petición POST https a la siguiente url:
https://xxx.xxx.xxx.xxx:xxxx/Vivait-Tracker/infoSegmentos
siendo xxx.xxx.xxx.xxx:xxxx la ip y el puerto donde haya sido desplegado la aplicación Vivait-Tracker.
Se deberán pasar los parámetros a través de post.
Un ejemplo de invocación sería la siguiente
https://xxx.xx.xxx.xxx:8180/Vivait-Tracker/infoSegmentos?param1=10201643591470126599
Los distintos parámetros que podemos indicar en dicha invocación son los siguientes:
Nombre | Tipo | Obligatorio | Descripción |
---|---|---|---|
param1 | String | Si | Identificador UCID de la llamada |
7.2.2.3 Resultado y códigos de error
Si el webservice se ejecuta correctamente enviará el código de respuesta 200, acompañado de un JSON con los siguientes datos:
Si, el UCID facilitado no tuviera ningún segmento asociado, el webservices devolvería el código de respuesta 200, acompañado del siguiente JSON
Si el webservice no se ejecuta de forma correcta, puede devolver los siguientes códigos de error:
Error | Código | Descripción |
---|---|---|
SC_NOT_FOUND | 404 | |
SC_INTERNAL_SERVER_ERROR | 500 |
7.2.3 Descarga de grabaciones
7.2.3.1 Introducción
Este webservice permitirá descargarse cualquier grabación disponible en el entorno de grabaciones de Vivait-Suite, siempre y cuando, el usuario logado con anterioridad, tenga los permisos necesarios para poder descargar dichas locuciones.
7.2.3.2 Invocación
Para poder invocar a dicho webservice, se deberá hacer una petición GET https a la siguiente url:
https://xxx.xxx.xxx.xxx:xxxx/Vivait-Tracker/downloadWindows/xxxxxxx
siendo xxx.xxx.xxx.xxx:xxxx la ip y el puerto donde haya sido desplegado la aplicación Vivait-Tracker.
El nombre del fichero a descargar “xxxxxx” debe ser el identificador del segmento de la llamada que se quiere descargar.
Un ejemplo de invocación sería la siguiente
https://xxx.xxx.xxx.xxx:xxxx/Vivait-Tracker/downloadWindows/2214536
7.2.3.3 Resultado y códigos de error
Si el webservice se ejecuta correctamente enviará el código de respuesta 200. Si el webservice no se ejecuta de forma correcta, puede devolver los siguientes códigos de error:
Error | Código | Descripción |
---|---|---|
SC_NOT_FOUND | 404 | |
SC_INTERNAL_SERVER_ERROR | 500 |
7.2.4 Reproducción de fichero mp3
7.2.4.1 Introducción
Este webservice permitirá reproducir cualquier grabación disponible en el entorno de grabaciones de Vivait-Suite, siempre y cuando, el usuario logado con anterioridad, tenga los permisos necesarios para poder reproducir dichas locuciones.La aplicación está preparada para facilitar archivos en formato ogg o mp3.
7.2.4.2 Invocación
Para poder invocar a dicho webservice, se deberá hacer una petición GET http a la siguiente url:
https://xxx.xxx.xxx.xxx:xxxx/Vivait-Tracker/audio/xxxxxxx
siendo xxx.xxx.xxx.xxx:xxxx la ip y el puerto donde haya sido desplegado la aplicación Vivait-Tracker.
El nombre del fichero a reproducir “xxxxxx” debe ser el identificador del segmento de la llamada que se quiere reproducir.
Un ejemplo de invocación sería la siguiente
https://xxx.xxx.xxx.xxx:xxxx/Vivait-Tracker/audio/2214536
7.2.4.3 Resultado y códigos de error
Si el webservice se ejecuta correctamente enviará el código de respuesta 200 o el código 206 (SC_PARTIAL_CONTENT) si se reproduce sólo parte de la grabación disponible (segmentada por rangos)
Si el webservice no se ejecuta de forma correcta, puede devolver los siguientes códigos de error:
Error | Código | Descripción |
---|---|---|
SC_NOT_FOUND | 404 | |
SC_INTERNAL_SERVER_ERROR | 500 | |
SC_NOT_MODIFIED | 304 | |
SC_PRECONDITION_FAILED | 412 | |
SC_REQUESTED_RANGE_NOT_SATISFIABLE | 416 |
7.2.5 Reproducción de fichero mp3 en extensión telefónica
7.2.5.1 Introducción
Este webservice permitirá reproducir cualquier grabación disponible en el entorno de grabaciones de Vivait-Suite en una extensión o teléfono que se indique, siempre y cuando, el usuario logado con anterioridad, tenga los permisos necesarios.
7.2.5.2 Invocación
Para poder invocar a dicho webservice, se deberá hacer una petición POST http a la siguiente url:
http://xxx.xxx.xxx.xxx:xxxx/Vivait-Tracker/SpoolService
siendo xxx.xxx.xxx.xxx:xxxx la ip y el puerto donde haya sido desplegado la aplicación Vivait-Tracker.
Se deberán pasar los parámetros a través de post.
Un ejemplo de invocación sería la siguiente
https://xxx.xxx.xxx.xxx:xxxx/Vivait-Tracker/SpoolService?idSegmento= 2214536&extension=6214&pin=1111
Los distintos parámetros que podemos indicar en dicha invocación son los siguientes:
Nombre | Tipo | Obligatorio | Descripción |
---|---|---|---|
idSegmento | String | Si | Identificador del segmento de llamada a reproducir |
extension | String | Si | Extensión o número de teléfono al que se realizará la llamada para la reproducción de la grabación |
pin | String | Si | Contraseña a facilitar en la operadora automática para la reproducción de la grabación |
7.2.5.3 Resultado y códigos de error
Si el webservice se ejecuta correctamente enviará el código de respuesta 200 o el código 206 (SC_PARTIAL_CONTENT) si se reproduce sólo parte de la grabación disponible (segmentada por rangos)
Si el webservice no se ejecuta de forma correcta, puede devolver los siguientes códigos de error:
Error | Código | Descripción |
---|---|---|
SC_NOT_FOUND | 404 | |
SC_BAD_REQUEST | 400 | Parámetros pin, extension, ruta Incorrectos |
SC_INTERNAL_SERVER_ERROR | 500 |