
- Post History
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
on 02-26-2018 09:11 AM
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.
- 7,421 Views