Auto Assign Incidents to Agents using Schedules based Round Robin technique
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-20-2025 03:33 AM
Below is the script to assign incidents automatically to teammates based on their schedule.
This assignment is based on Round robin algorithm.
>Create a Business Rule
Add the below script
(function executeRule(current, previous /*null when async*/) {
gs.info("BR Triggered");
var usrArr = [];
var grMember = new GlideRecord('sys_user_grmember');
grMember.addQuery('group', current.assignment_group);
grMember.query();
//var groupCount = grMember.getRowCount();
while(grMember.next()) {
usrArr.push(grMember.user.user_name);
}
gs.info(usrArr.length+" "+usrArr);
// Get the current time
var curTime = new GlideDateTime();
gs.info(curTime);
var availableMembers = [];
// Check if any member is available during the current time
for (var j = 0; j < usrArr.length; j++) {
var gr = new GlideRecord('sys_user');
gr.addQuery('user_name', usrArr[j]);
gr.query();
if (gr.next()) {
var userSchedule = new GlideSchedule(gr.schedule);
if (userSchedule.isInSchedule(curTime)) {
availableMembers.push(gr.sys_id.toString());
}
}
}
gs.info("availa:" +availableMembers);
var lastTwoAssignedUsers = [];
var recentRecords = new GlideRecord(current.getTableName());
recentRecords.addQuery('assignment_group', current.assignment_group);
recentRecords.orderByDesc('sys_created_on');
recentRecords.setLimit(availableMembers.length); //Limit the query the number of members in the group
recentRecords.query();
//gs.info(recentRecords.getRowCount());
while (recentRecords.next()) {
if (recentRecords.assigned_to) {
lastTwoAssignedUsers.push(recentRecords.assigned_to.sys_id.toString());
}
}
gs.info("Recently assigned users"+lastTwoAssignedUsers);
gs.info("array length"+availableMembers.length);
var nextAssignedUser;
for (var i = 0; i < availableMembers.length; i++) {
gs.info(lastTwoAssignedUsers.indexOf(availableMembers[i]));
gs.info("available member index:"+availableMembers[i]);
if (lastTwoAssignedUsers.indexOf(availableMembers[i]) === -1) {
nextAssignedUser = availableMembers[i];
break;
}
}
if (!nextAssignedUser) {
nextAssignedUser = availableMembers[0];
}
current.assigned_to = nextAssignedUser;
})(current, previous);
Mark Helpful if meets your requirement.
Thanks😊
Labels:
- Labels:
-
Incident Management
0 REPLIES 0