Lector de ficheros binarios generados por el CMS de Avaya en Java
Recientemente mi empresa ha comprado el CMS de Avaya para que los supervisores del Call Center puedan monitorizar el estado de sus agentes. Aunque los informes que trae por defecto son bastante potentes, si queremos poder rizar el rizo con ellos tendremos que leer y tratar la información que genera el CMS de Avaya en unos ficheros binarios, los denominados ficheros ECHI (External Call History Interface).
Existe un software propietario de Avaya que permite gestionar esos ficheros e insertar la información en una base de datos para su tratamiento posterior, pero el coste de su licencia es muy elevado. Hay una alternativa de software libre realizada en Ruby (http://echi-converter.rubyforge.org/) que se puede adaptar a nuestras necesidades.
No obstante, he preparado un sencillo código en Java que interpreta un fichero binario del CMS de Avaya e inserta la información en una tabla de la base de datos para quien le pueda ser de utilidad. El código se basa principalmente en 3 clases: La clase “CallRecord” que contiene todos los atributos que nos podemos encontrar en el fichero ( version, talktime, callID, etc); la clase “CMSReader” que se encarga de ir leyendo cada uno de los ficheros generados por el CMS en el directorio FTP configurado a tal efecto y que va generando objetos CallRecord que serán insertados en la base de datos. La última clase es la que sirve de conexión con la base de datos “DataBase“.
public CallRecord readCallRecord(RandomAccessFile in, boolean firstRecord){ try{ CallRecord cr = new CallRecord(); if (firstRecord){ cr.setVersion(readIntBytes(in, 4)); log("Version:" + cr.getVersion()); cr.setSequenceNumber(readIntBytes(in, 4)); log("SequenceNumber:" + cr.getSequenceNumber()); } cr.setCallID (readIntBytes(in, 4)); cr.setACWTime (readIntBytes(in, 4)); cr.setAnsholdTime (readIntBytes(in, 4)); cr.setConsultTime (readIntBytes(in, 4)); cr.setDisptime (readIntBytes(in, 4)); cr.setDuration (readIntBytes(in, 4)); cr.setSegstart (readIntBytes(in, 4)); cr.setSegstartUTC (readIntBytes(in, 4)); cr.setSegstop (readIntBytes(in, 4)); cr.setSegstopUTC (readIntBytes(in, 4)); cr.setTalktime (readIntBytes(in, 4)); cr.setNetintime (readIntBytes(in, 4)); cr.setOrigholdtime (readIntBytes(in, 4)); cr.setQueuetime (readIntBytes(in, 4)); cr.setRingtime (readIntBytes(in, 4)); ... |
El código fuente lo podéis descargar desde AQUÍ.