logo

NJP

Asignación de incidencias a técnicos del Help-Desk de forma automática mediante round-robin

Import · Feb 26, 2018 · article

Buenas a todos,

Objetivo

Este artículo es para compartir con vosotros la implementación de una solución que se nos planteó en nuestra compañía respecto de la asignación automática de incidencias (podríamos ampliarla a cualquier "task") a técnicos del Help-Desk con algún algoritmo, tipo round-robin.

Escenario

Existen incidencias que son asignadas a un grupo de Help-Desk pero no a un técnico. Un usuario tipo "coordinador" debe asignar manualmente esas incidencias a los técnicos disponibles.

Solución propuesta

  • Mediante reglas de asignación asignamos las incidencias a grupos de resolución de diferentes Help-Desk distribuidos (greográficamente en algunos casos, por funcionalidades en otros)
  • Una vez las incidencias están asignadas a esos grupos, el mecanismo que implementamos fue el siguiente:
  • Para cada usuario del Help-Desk agregamos 2 columnas en la tabla sys_user
  • * Round Robin Active (True/False)
    • Last Ticket Assigned (DateTime)
  • Creamos este script include
var GLOIncidentUtil = Class.create();
GLOIncidentUtil.prototype = {
    initialize: function() {
    },


    /*
    Query the incident table without assigned_to tech of the groupIN parameter
    and assign one using round robin algoritm
    */
    roundRobinTechIncident: function(groupIN)
    {
        gs.log('RR groupIN ' + groupIN);
        //Incidents without assigned_to tech
        var grINC = new GlideRecord("incident");
        grINC.addQuery('assignment_group', groupIN);
        grINC.addQuery('assigned_to','');
        grINC.addActiveQuery();
        grINC.query();

        //loop
        while (grINC.next()) {
            gs.log('RR INC ' + grINC.number);

            //Tech round robin pool
            var group = new GlideRecord('sys_user_grmember');
            group.addQuery('group', groupIN);
            group.addQuery('user.u_round_robin_active',true);
            group.orderBy('user.u_last_ticket_assigned');
            group.query();

            //Assigned Tech
            if (group.next()) {
                gs.log('RR tech ' + group.user.name);
                //Update round robin tech data
                var nowdt = gs.nowDateTime();
                var updateDate = new GlideRecord('sys_user');
                updateDate.addQuery('sys_id', group.user);
                updateDate.query();

                while(updateDate.next())
                    {
                    updateDate.u_last_ticket_assigned = nowdt;
                    updateDate.update();
                }

                //Incident update
                grINC.comments = 'Incidencia asignada de forma automática por ServiceNow al técnico: ' + group.user.name;
                grINC.assigned_to = group.user;
                grINC.u_round_robin_assigned = true;
                grINC.update();
            }
        }
    },

    type: 'GLOIncidentUtil'
};
  • Creamos un scheduled job con las siguientes características: ejecución cada minuto, que simplemente llama al Script Include y le pasa como parámetro el sys_id del grupo de Help-Desk que queremos hacer el "reparto round-robin" de incidencias
var obj = new GLOIncidentUtil();
obj.roundRobinTechIncident('f9950e98dbbee200b1ff73200f9619ee');

Conclusiones

Con este simple mecanismo, logramos que se asigne de forma totalmente automática incidencias a técnicos de un grupo de Help-Desk sin que haya un coordinador por ejemplo que lo haga de forma manual.

Algunas consideraciones

  • El procedimiento permite que un usuario de Help-Desk que pertenezca a más de un grupo reciba incidencias de todos los grupos que pertenece, puesto las columnas se agregaron a "nivel de usuario" en sys_user
  • Se podría modificar la lógica para hacer este cambio a nivel de "miembros del grupo" en sys_user_grmember y hacerlo aún más específico
  • Se podría integrar esta lógica con la "Delegación", pero decidimos no hacerlo puesto si un usuario "Delega" en otro, aunque esté "activo" para recibir por round-robin incidencias (y está "fuera") el usuario "delegado" verá las asignaciones del técnico y todo seguirá funcionando. Esto quita trabajo al coordinador de tener que "poner/quitar" del pool de round-robin a los técnicos
  • Podríamos (y en ello estamos ;-)) ampliar el alcance de la funcionalidad a cualquier "task", para la asignación, por ejemplo, de tareas de catálogo (SCTASK) a técnicos que se encarguen de completarlas.

Agradecimientos

Como suele ser habitual, para montar este tipo de soluciones me he valido de ideas que ya había en la "Comunidad" y las he modificado/adaptado a nuestra necesidad, por tanto, vaya mi agradecimiento a todos aquellos que aportáis contenido a la comunidad.

View original source

https://www.servicenow.com/community/spain-snug/asignaci%C3%B3n-de-incidencias-a-t%C3%A9cnicos-del-help-desk-de-forma/ta-p/2328379