Auto Assign Incidents to Agents using Schedules based Round Robin technique

Durga Vinay
Tera Contributor

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

GangumallaD_0-1747737039557.png

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😊

0 REPLIES 0