The CreatorCon Call for Content is officially open! Get started here.

Inbound action to avoid duplicate incident.

Meenal Gharat
Tera Guru

Hi,

Inbound email action to avoid duplicate incident.

If the incident is created using inbound emai action with the same CI name it's state is Resolved/closed it should create new incident.

if the state is open/active it should not create new incident rather it should update the same incident

I have tried writting the below code,kindly assist.

 

current.caller_id = gs.getUserID();
current.comments = "received from: " + email.origemail + "\n\n" + email.body_text;
//current.short_description = email.subject;
current.short_description = email.body.short_description;

//current.category = "inquiry";
current.incident_state = IncidentState.NEW;
current.notify = 2;
current.contact_type = "email";

if(email.body.category!= undefined)
current.category = email.body.category;

//gs.log('email'+ email.direct.toString());

//if(email.body.subcategory!=undefined)
current.subcategory=email.body.subcategory;

if (email.body.assign != undefined)
current.assigned_to.setDisplayValue(email.body.assign_to);

// if (email.subject.toLowerCase().indexOf("configuration item") >= 0
// && email.subject.toLowerCase().indexOf("device ip address") > 0
// && email.subject.toLowerCase().indexOf("severity: critical") > 0 )
if (email.subject.indexOf("configuration item") >= 0
&& email.subject.indexOf("device ip address") > 0
&& email.subject.indexOf("severity: critical") > 0 ) {

var subjectSplit = email.subject.split('item:');
var theName = subjectSplit[1].split(',');
var res = theName[0];
gs.log('meen gharat 1'+ res);
var op = res.replace(/ /g,'');
gs.log('meen gharat'+op);

var cmdbci = new GlideRecord("cmdb_ci");
cmdbci.addQuery('name',op);
cmdbci.query();
gs.log('row count '+ cmdbci.getRowCount());
if(cmdbci.next())
{
gs.log('ci getting' +cmdbci.sys_id);
current.cmdb_ci = cmdbci.sys_id;
}
if(!cmdbci.next())
{
current.cmdb_ci.setDisplayValue('Dummy');
}
if(cmdbci.next())
{
var inc = new Gliderecord("incident");
inc.addQuery('active',true);
inc.addQuery('state','!=',4);
inc.addQuery('state','!=', 5);
inc.addQuery('cmdb_ci','=',cmdbci.sys_id);
inc.query();

if(!inc.next())
{
current.incident_state = IncidentState.NEW;
current.notify = 2;
current.comments = "received from: " + email.origemail + "\n\n" + email.body_text;
current.short_description = email.body.short_description;
current.category = email.body.category;
current.subcategory=email.body.subcategory;
//current.cmdb_ci.setDisplayValue(cmdbci.sys_id);
current.insert();

}
}
else
{
gs.addErrorMessage('Incident Already Exist');
}

}

current.insert();

1 ACCEPTED SOLUTION

Meenal Gharat
Tera Guru

Hi all

 I have used below code and it works fine for me.

 


var eSubject = email.subject;
var grInc = new GlideRecord('incident');
var grEmail = new GlideRecord('sys_email');
var incUpdated = false;
grEmail.addEncodedQuery('sys_created_onONToday@javascript:gs.daysAgoStart(0)@javascript:gs.daysAgoEnd(0)^subject=' + eSubject);
grEmail.query();
if(grEmail.getRowCount != 0){
while(grEmail.next() && incUpdated != true){
grInc.get(grEmail.instance);


if(grInc.active == true && grInc.state < 6){ //is the existing incident active and not in closed or resolved state

incUpdated = true;

gs.log('Incident already exists');
grInc.work_notes = '\nFrom: ' + email.from + '\nTo: ' + email.to + '\nSubject: ' + email.subject + '\n\n' + email.body_text;
grInc.update();
}
}
}

//if(!gr.next());
if(incUpdated == false)

{
current.caller_id = gs.getUserID();
current.comments = "received from: " + email.origemail + "\n\n" + email.body_text;
//current.short_description = email.subject;
current.short_description = email.body.short_description;

//current.category = "inquiry";
current.incident_state = IncidentState.NEW;
current.notify = 2;
current.contact_type = "email";

if(email.body.category!= undefined)
current.category = email.body.category;

//gs.log('email'+ email.direct.toString());

//if(email.body.subcategory!=undefined)
current.subcategory=email.body.subcategory;

if (email.body.assign != undefined)
current.assigned_to.setDisplayValue(email.body.assign_to);

var subjectSplit = email.subject.split('item:');
var theName = subjectSplit[1].split(',');
var res = theName[0];
gs.log('meen gharat 1'+ res);
var op = res.replace(/ /g,'');
gs.log('meen gharat'+op);

var cmdbci = new GlideRecord("cmdb_ci");
cmdbci.addQuery('name',op);
cmdbci.query();
gs.log('row count '+ cmdbci.getRowCount());
if(cmdbci.next())
{
gs.log('ci getting' +cmdbci.sys_id);
current.cmdb_ci = cmdbci.sys_id;
}
//if(!cmdbci.next())
else
{
current.cmdb_ci.setDisplayValue('Dummy');
}


current.insert();
//your code to create an incident
}


})(current, event, email, logger, classifier);

 

Thank you for relpying my query.

Regards,

Meenal

View solution in original post

37 REPLIES 37

Hi asifnoor,

I tried the above code, still it is creating duplicate incident.

Can u suggest?

Thank you,

Meenal

Hi Meenal,

As requested, if it does not work.. kindly share the log statements till where does your code has executed?

Hi asifnoor,

code is executing correctly till here.

gs.log('row count '+ cmdbci.getRowCount())

But this doesn't achieve my requirement.

I'm able to create incident and also able to set values from email on specific fields what I want to achieve here is whenever some other user triggers email with subject containing same CI, IP address and Severity it should not create a new incident if the state is active instead it should update into the same incident.

PS: Here we do not check watermark as the email type will be new.

Kindly suggest.

 

Thanks,

Meenal

Undestood

So what is the output of this line?

    gs.log('row count '+ cmdbci.getRowCount());

Do you get the rowcount as 1 or 0?

0