Intz-nimitz
Sumario
- 1 Descripción
- 2 Servicio ping
- 3 Servicio BD
- 3.1 dameModoSupervivencia
- 3.2 segmInsertColaVDN
- 3.3 llamGwInsert
- 3.4 llamGwUpdateIn
- 3.5 llamGwUpdateOut
- 3.6 agenAexten
- 3.7 colaConfig
- 3.8 sqlDato
- 3.9 sqlModiDato
- 3.10 sqlSinEspera
- 3.11 validaDato
- 3.12 validaAcceso
- 3.13 modificaClaveBuzon
- 3.14 extenEntraUsuarioMovil
- 3.15 extenSaleUsuarioMovil
- 3.16 enrutar
- 3.17 enrutarReal
- 4 Servicio regExpr
- 5 Proceso de enrutamiento
1 Descripción
1.1 Formato invocación
Formato de comando en dialplan de asterisk (el separador ',' puede ser sustituido por '|'):
MDintz(<entorno(nimitz)>,<servicio>,<comando>,<par1>,<par2>,...,<parN>)
Formato de comando en CLI de asterisk:
mdintz qry <nHostFijo(*,0..3)> <entorno(nimitz)> <servicio> <comando> <par1> <par2>...<parN>
1.2 Retornos generales
Cuando un retorno comienza por el caracter "+", indica a app_mdintz que debe reintentar en otro intz-nimitz.
Retornos genericos en ${MDintzRes}:
+curro_congestion Hay demasiados trabajos encolados a la espera de ejecucion.
curro_error_param El numero de parametros es incorrecto o el comando es desconocido.
curro_cmd_desconocido El comando solicitado es desconocido.
curro_supervivencia No se puede ejecutar en modo supervivencia.
+mysql_fuera_servicio No hay conexion con la base de datos.
mysql_error_ejec Se ha producido algun error en la ejecucion de sentencias SQL.
+mysql_temporizador Cumplido temporizador sin recibir respuesta de la base de datos.
2 Servicio ping
Servicio de prueba "ping" (no requiere de comando):
. Retornos en ${MDintzRes}: "pong".
3 Servicio BD
Comandos del servicios "bd" soportados por intz-nimitz:
3.1 dameModoSupervivencia
Devuelve si el servicio trabaja en modo supervivencia. Espera resultado. Retorno en ${MDintzRes}: .. OK El servicio no esta en modo supervivencia. .. curro_supervivencia El servicio esta en modo supervivencia.
3.2 segmInsertColaVDN
Inserta un registro en DAT_SEGMENTOS de tipo "grupoACD" y actualiza acumulados mediante ACD_PROC_ACUMULADO. No espera resultado.
3.2.1 Parámetros
. par1 (QUEUESTATUS). ${QUEUESTATUS} de retorno de comando "Queue": .. CONNECT .. ABANDONED .. TIMEOUT .. FULL .. JOINEMPTY .. JOINUNAVAIL .. LEAVEEMPTY .. LEAVEUNAVAIL . par2 (N_DURACION). . par3 (C_ORIGEN). . par4 (C_DESTINO). . par5 (C_UCID). . par6 (C_COLA). . par7 (C_VDN). . par8 (C_VDN_DESDE). . par9 (C_VDN_HACIA). . par10 (C_EXTENSION). . par11 (SERA_DESCONECTADA). . par12 (DESDE_OTRO_GRUPO_ACD). . par13 (C_EJE1_MASCARA).
3.2.2 Retornos
Retornos posibles (además del los genéricos) en ${MDintzRes}:
.. OK Todo correcto.
3.3 llamGwInsert
. Servicio de insercion en DAT_LLAMADAS para gateway. . Lo primero se comprueba si el registro ya existe en base a C_UCID. . Si ya existe y es saliente, se acutaliza. . Si no existe, se inserta un nuevo registro. . No espera resultado.
3.3.1 Parámetros
. par1 (C_ORIGEN). . par2 (C_DESTINO). . par3 (C_UCID). . par4 (E_TIPO_LLAMADA). . par5 (ID_NODO_GW). . par6 (N_PRIMARIO). . par7 (N_CANAL_PRIMARIO). . par8 (C_CALLERID).
3.3.2 Retornos
. Retornos posibles (ademas del los genericos) en ${MDintzRes}: .. OK Todo correcto.
3.4 llamGwUpdateIn
. Cierra un registro en DAT_LLAMADAS desde la gateway en el caso de llamada entrante. . No espera resultado. . par1 (C_UCID). . Retornos posibles (ademas del los genericos) en ${MDintzRes}: .. OK Todo correcto.
3.5 llamGwUpdateOut
. Cierra un registro en DAT_LLAMADAS desde la gateway en el caso de llamada saliente. . No espera resultado. . par1 (ID_NODO_GW). . par2 (N_PRIMARIO). . par3 (N_CANAL_PRIMARIO). . par4 (C_UCID). . Retornos posibles (ademas del los genericos) en ${MDintzRes}: .. OK Todo correcto.
3.6 agenAexten
. Traduce un identificador numerico que es un posible agente ACD . al identificador de la extension en que esta conectado. . Si no es un agente o no esta conectado, devuelve el mismo valor sin traducir. . Espera resultado. . par1 (agente): Identificador numerico del agente. . Retornos posibles (ademas del los genericos) en ${MDintzRes}: .. OK Todo correcto. Se devuelve el dato solicitado en ${extAgen}. . Retorno en ${extAgen} (solo si ${MDintzRes}=OK): .. Extension en que se encuentra conectado el agente o el valor de entrada sin traducir.
3.7 colaConfig
. Devuelve datos de configuracion de una cola. Lo usa app_queue. . Esta funcion es utilizada por app_queue. Por ello es muy importante el orden en que se generan las variables resultado. . Espera resultado. . par1 (COLA). . Retornos posibles (ademas del los genericos) en ${MDintzRes}: .. OK Todo correcto. Se devuelven los datos solicitados. . Retorno en ${objServ} (solo si ${MDintzRes}=OK): Objetivo de servicio configurado. . Retorno en ${pesoObjServ} (solo si ${MDintzRes}=OK): Peso configurado.
3.8 sqlDato
. Devuelve el primer campo del primer registro obtenido en una consulta SQL. . Espera resultado. . par1 (sql): consulta SQL. . Retornos posibles (ademas del los genericos) en ${MDintzRes}: .. OK Todo correcto. Se devuelve el dato solicitado en ${sqlDato}. . Retorno en ${sqlDato}: .. Valor del primer campo del primer registro resultado de la consulta SQL (solo si OK).
3.9 sqlModiDato
. Igual al anterior. Debe usarse cuando la sentencia sql llama funcion que modifica datos.
3.10 sqlSinEspera
. Ejecuta una sentencia SQL y devuelve el control sin esperar ni devolver el resultado. . No espera resultado. . par1 (sql): consulta SQL. . Retornos posibles (ademas del los genericos) en ${MDintzRes}: .. OK Todo correcto.
3.11 validaDato
. Se valida una clave contra una clave cifrada. . par1 (clave) . par2 (clave_cifrada) . Retornos posibles (ademas del los genericos) en ${MDintzRes}: .. OK: Todo correcto. .. KO: Clave erronea.
3.12 validaAcceso
. Se valida un acceso a un objeto del tipo que se indica del modo previsto para el dialplan. . par1 (tipo_objeto): .. buzon: se valida con la clave de buzon o la del usuario, si lo tiene asignado. .. usuario: se valida con el login numerico del usuario. .. conferencia_usuario: se valida con el pin de usuario. .. conferencia_admin: se valida con el pin de administracion. .. agente . par2 (login) . par3 (clave) . Retornos posibles (ademas del los genericos) en ${MDintzRes}: .. OK: Todo correcto. .. KO: Login o clave erroneo. .. error_tipo_objeto: Tipo de objeto desconocido.
3.13 modificaClaveBuzon
. Se modifica la clave de un buzon para invocar desde mensajeria. Esta puede estar en: .. CEN_USUARIOS.C_CLAVE_NUMERICA si: ... MEN_BUZONES.ID_USUARIO>0, existe y ya tiene clave; y ... MEN_BUZONES.C_CLAVE is NULL .. MEN_BUZONES.C_CLAVE en el caso de que no se de alguna de las condiciones anteriores y ... MEN_BUZONES.C_CLAVE is not NULL . O sea, nunca modifica una clave que previamente tenga un valor NULL . No se puede ejecutar si esta en modo supervivencia. . par1 (buzon) . par2 (clave_nueva) . Retornos posibles (ademas del los genericos) en ${MDintzRes}: .. OK: Todo correcto. .. error_buzon: No se encuentra el buzon indicado. .. error_no_clave: El buzon no tiene clave y no tiene usuario o este no tiene clave.
3.14 extenEntraUsuarioMovil
. Un usuario de centralita ejerce la movilidad sobre una extension. . Espera resultado. . No se puede ejecutar si esta en modo supervivencia. . par1 (extension). . par2 (login). Identificador numerico del usuario de centralita. . par3 (clave). Clave numerica del usuario de centralita. . par4 (auto_desconexion). Si el usuario esta en movilidad en otra extension, lo desconecta. . Retornos posibles (ademas del los genericos) en ${MDintzRes}: .. OK Todo correcto. Se devuelven datos de reaprovisionamiento. .. movil_error_login El identificador numerico de usuario no es valido. .. movil_error_datos Falta algun dato imprescindible en la base de datos. .. movil_ya_login El usuario ya ha ejercido la movilidad en la extension ${MOVIL_EXTEN}. .. movil_usu_no_ejes No se encuentran valores para los ejes asignados al usuario. .. movil_error_clave La clave numerica no es correcta. .. movil_error_exten No existe la extension indicada. .. movil_exten_no_movil La extension indicada no esta configurada para movilidad. .. movil_exten_ya_asignada El usuario ya ha ejercido la movilidad en la extension indicada. .. movil_exten_propietario El usuario es el propietario de la extension y no tiene asignado usuario en movilidad. .. movil_exten_error_ejes El usuario no puede ejercer la movilidad en la extension por asignacion de ejes. . Retorno en ${MOVIL_EXTEN} (solo si ${MDintzRes}=movil_ya_login): .. Indica la extension en la que el usuario ya ha ejercido la movilidad. . Retorno en ${MOVIL_TIPO_RESET} (solo si ${MDintzRes}=OK): .. Devuelve el procedimiento de reaprovisionamiento. Posibles valores: ... 10: Noficacion SIP. . Retorno en ${MOVIL_CAD_RESET} (solo si ${MDintzRes}=OK): .. Devuelve una cadena que tiene un significado relacionado con el procedimiento de reaprovisionamiento.
3.15 extenSaleUsuarioMovil
. Desde una extension, se anula la situacion de movilidad previamente establecida. . Espera resultado. . No se puede ejecutar si esta en modo supervivencia. . par1 (extension). . Retornos posibles (ademas del los genericos) en ${MDintzRes}: .. OK Todo correcto. Se devuelven datos de reaprovisionamiento. .. movil_error_datos Falta algun dato imprescindible en la base de datos. .. movil_error_exten No existe la extension indicada. .. movil_exten_propietario La extension no tiene asignado usuario en movilidad. . Retorno en ${MOVIL_TIPO_RESET} (solo si ${MDintzRes}=OK): .. Devuelve el procedimiento de reaprovisionamiento. Posibles valores: ... 10: Noficacion SIP. . Retorno en ${MOVIL_CAD_RESET} (solo si ${MDintzRes}=OK): .. Devuelve una cadena que tiene un significado relacionado con el procedimiento de reaprovisionamiento.
3.16 enrutar
(simulacion por comando y sin grabar segmentos de preenrutamiento)
3.17 enrutarReal
(se generan segmentos de preenrutamiento)
. El dialplan envia una solicitud de enrutamiento al iniciarse una llamada desde dispositivo (llamada entrante) o desde un grupo ACD de llamadas salientes. . Espera resultado. . par1 (TIPO_ORIGEN): Enumerado TTipoEnrutamiento. .. tipoEnrutamiento_idDispositivo = 10. .. tipoEnrutamiento_idCola = 20. . par2 (ORIGEN): En funcion del valor anterior, el origen de la llamada. .. Si TIPO_ORIGEN=tipoEnrutamiento_idDispositivo, ORIGEN=idDispositivo. .. Si TIPO_ORIGEN=tipoEnrutamiento_idCola, ORIGEN=idCola. . par3 (ID_NODO_ENT): ID del nodo de entrada de la llamada. Se simplifican consultas. Podria deducirse del dispositivo o del grupo ACD, pero seria indeterminado si: .. El origen es una extension y la llamada se efectua desde el nodo secundario. . par4 (UCID). . par5 (callerIdName). . par6 (callerIdNum). . par7 (DNIS). . par8 (desvioDialPlan). Permite solicitar datos para un desvio cuando es requerido.
. Retornos posibles para ${MDintzRes}: .. enru_error_dispositivo .. enru_no_destino .. enru_no_pre_ruta .. enru_no_pre_nodo .. enru_bucle_pre_ruta .. enru_bucle_ruta .. enru_no_nodo .. enru_no_ruta .. enru_no_extension .. enru_no_usuario .. enru_no_agente .. enru_no_facilidad .. enru_no_vdn .. enru_no_cola .. enru_no_buzon .. enru_no_conferencia .. enru_no_cola_cen
. Variables de retorno comunes: .. R_TIP_DESTINO .. R_PARA: indica el destino solicitado cuando es distinto del alcanzado (ej.: usuario) .. R_CODCLI: codigo de cliente .. R_EJE1 .. R_DESV_NC (MENSA si desvio a mensajeria) (solo si destino extension o usuario) .. R_DESV_OCUP (MENSA si desvio a mensajeria) (solo si destino extension o usuario) .. R_DESV_FSER (MENSA si desvio a mensajeria) (solo si destino extension o usuario) .. R_BUZON (solo si destino extension o usuario) .. R_RUT_NODO_BUZON (solo si destino extension o usuario)
. Variables de ruta nn: .. R_ABDE_nn: ancho de banda del dispositivo de entrada. .. R_ABNE_nn: ancho de banda del nodo de entrada. .. R_ABDS_nn: ancho de banda del dispositico de salida. .. R_ABNS_nn: ancho de banda del nodo de salida. .. R_CID_NAME_nn .. R_CID_NUM_nn .. R_DEST_nn .. R_RUT_NODO_nn .. R_RUT_SAL_nn
4 Servicio regExpr
Comandos del servicios "regExpr" soportados por intz-nimitz:
4.1 sinSubCad
. Empareja una expresion regular extendida con una cadena sin obtener subcadenas. . par1 (noCache). 0: se almacena la expresion regular en el cache. 1: no se almacena. . par2 (exprReg). Expresion regular. . par3 (cad). Cadena a verificar emparejamiento. . Espera resultado. . Retornos posibles (ademas del los genericos) en ${MDintzRes}: .. OK Todo correcto y se verifica el emparejamiento. .. rxp_no_empareja Todo correcto, pero la cadena no se empareja. .. rxp_error Se produce algun tipo de error (ej.: la expresion no compila).
4.2 conSubCad
. Empareja una expresion regular extendida con una cadena, obteniendo un maximo de 8 subcadenas. . Espera resultado. . par1 (noCache). 0: se almacena la expresion regular en el cache. 1: no se almacena. . par2 (exprReg). Expresion regular. . par3 (cad). Cadena a verificar emparejamiento. . Retornos posibles (ademas del los genericos) en ${MDintzRes}: .. OK Todo correcto y se verifica el emparejamiento. Se obtienen subcadenas en otras variables. .. rxp_no_empareja Todo correcto, pero la cadena no se empareja y no hay subcadenas. .. rxp_error Se produce algun tipo de error (ej.: la expresion no compila). . Retorno en ${RXP_SUB_nn}: valor de la subexpresion enesima. Solo se da si antes OK.
5 Proceso de enrutamiento
- Globalmente, el proceso de enrutamiento se compone de dos fases:
. La primera es el preenrutamiento, que trata toda clase de llamadas. . La segunda es el 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. .. grupo de salto. .. operadora. .. cola de centralita. . Puede ser realizado por un servicio que tiene conexión con la base de datos en tiempo real o, cuando se den problemas de disponibilidad de ésta o del servicio primario, en otro servicio que trabaja en "modo supervivencia" sobre una copia no actual de la base de datos.
- Se asume que existen rutas directas entre todos los nodos de red.
- Se asume que estan directamente enrutadas todas las direcciones IP involucradas, tanto nodos, como terminales.
- Se asume que todas las facilidades estan 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:
. TIPO_ORIGEN (TTipoEnrutamiento) .. TIPO_ID_DISPOSITIVO .. TIPO_ID_COLA . ID_ORIGEN . ID_NODO_ENT (no sirve el del dispositivo si se trata de una extensión en nodo secundario) . UCID . CALLER_ID_NAME . CALLER_ID_NUM . DNIS . DESVIO_DIALPLAN
- Datos deducidos a partir de los anteriores
. ID_SEDE_DISP_ENT (sede del dispositivo de entrada) . ID_SEDE_NODO_ENT (sede del nodo de entrada) . ANCHO_DE_BANDA_DISP (ancho de banda disponible en la sede del dispositivo) . ANCHO_DE_BANDA_NODO (ancho de banda disponible en la sede del nodo) . ID_CATEGORIA_ENT . EJE1_MSK (valor del eje1 asignado a la llamada) . CALLER_ID_NUM_EXTERNO (uso potencial en llamadas con destino externo) . HAY_GRABAR (en base a cola, extension, nodo o usuario origen)
- Los datos de salida globales del proceso de enrutamiento (pdSale) son (todos los nombres tienen prefijo "__"):
. SPRV (Si el proceso se ha realizado en modo supervivencia) . ID_SEGM (ID del segmento generado) . ID_CATEGORIA_SAL . COD_CLIENTE (opcional) . TIPO_DESTINO_SAL ( /* TTipoDestinoEnrutamiento */) .. No existe. .. Ruta externa. .. Extensión. .. Extension o (si falla la extensión) usuario. .. Usuario de telefonía corporativa. .. Usuario o (si falla el usuario) extensión. .. 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. .. Grupo de salto. .. Operadora. .. Cola de centralita. .. VDN de centralita. . TIP_LLAM (tipo de llamada) .. Saliente .. Entrante .. Interior .. Transito . PARA (destinatario cuando se trata de un usuario o de un agente) . PARA_NAME . COD_CLIENTE . EJE1_MSK (valor del eje1 asignado a la llamada) . BUZON (sólo extensiones y usuarios que tengan buzón asignado) . RUTA_NODO_BUZON (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). . GB_nn (modo de grabacion). . 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 (dependiendo de TIPO_DESTINO_SAL) .. 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 table 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.
- Datos de entrada al proceso de preenrutamiento (pdPreEntr): iguales que los del proceso global de enrutamiento, excepto en que este proceso no usa ID_NODO_ENT ya que es independiente de éste.
- Datos de salida de la fase de preenrutamiento (pdPreSal):
. GB (modo de grabacion) . ID_CATEGORIA_SAL . COD_CLIENTE (opcional) . TIPO_DESTINO_SAL ( /* TTipoDestinoEnrutamiento */) .. 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. .. Grupo de salto. .. Operadora. .. Cola de centralita. . COD_CLIENTE . EJE1_MSK (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 condicion 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. . El campo N_PCT_LLAMADAS define un porcentaje de llamadas aleatorio al que se puede aplicar el registro. Obviamente, si el valor es 100, se aplica siempre y si es 0 el registro no se usa nunca (deshabilitado).
- 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 un registro de CEN_PRE_RUTA, 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 condicion 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.
. VDN de Centralita: A partir de las tablas CEN_VDN y CEN_NODOS, se devolverán los valores que permiten alcanzar al VDN en su nodo.
. Cola de Centralita: A partir de las tablas CEN_COLAS y CEN_NODOS, se devolverán los valores que permiten alcanzar al grupo ACD en su nodo.
- El campo B_ENRU_SEGMENTO de la tabla CEN_PRE_RUTA indica al proceso de preenrutamiento que es preciso generar un segmento en DAT_SEGMENTOS y CEN_SEGMENTOS. 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álidod 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.
- Variables de salida globales para el dialplan (todos los nombres tienen prefijo "__"):
. SPRV: 0/1 indica si el proceso se ejecuta en modo supervivencia. . ID_SEGM: ID del segmento generado. . R_TIP_DESTINO . R_TIP_LLAM: (10: saliente, 20: entrante, 30: interior, 40: transito). . R_PARA: indica el destino solicitado cuando es distinto del alcanzado (ej.: usuario). . R_PARA_NAME: nombre del destino solicitado. . R_CODCLI: codigo de cliente. . R_EJE1 . R_DESV_NC (MENSA si desvio a mensajeria) (solo si destino extension o usuario). . R_DESV_OCUP (MENSA si desvio a mensajeria) (solo si destino extension o usuario). . R_DESV_FSER (MENSA si desvio a mensajeria) (solo si destino extension o usuario). . R_BUZON (solo si destino extension o usuario). . R_RUT_ND_BZ (solo si destino extension o usuario).
- Variables de ruta nn para el dialplan:
. R_ABDE_nn: ancho de banda del dispositivo de entrada. . R_ABNE_nn: ancho de banda del nodo de entrada. . R_ABDS_nn: ancho de banda del dispositico de salida. . R_ABNS_nn: ancho de banda del nodo de salida. . R_GB_nn: 0(no) 1(sinPito) 2(conPito) 1000(descartar) modo grabacion. . R_CID_NAME_nn . R_CID_NUM_nn . R_DEST_nn . R_RUT_NODO_nn . R_RUT_SAL_nn