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

Meenal Gharat
Tera Guru

Hi Alok,

 

Still it is creating a new incident when the state is open.

It should update the same incident.

 

Regards,

Meenal

Hi Meenal,

Can you share your latest script once.

Please check.

 

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.addEncodedQuery("active=true^state!=4^ORstate!=5^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');
inc.update();
}

}
}



// if (email.importance != undefined) {
// if (email.importance.toLowerCase() == "high")
// current.priority = 1;
// }

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

current.insert();

Hi ashifnoor,

 

Any suggestions on the above scripts would be helpful.

 

Kind regards,

Meenal

 

Try this code. And if it does not work, let me know till where will the logs be generated?

current.caller_id = gs.getUserID();
current.comments = "received from: " + email.origemail + "\n\n" + email.body_text;
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;
 
  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.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;
    } else {
       current.cmdb_ci.setDisplayValue('Dummy');
    }
    if(cmdbci.next())
    {
     var inc = new Gliderecord("incident"); 
     inc.addEncodedQuery("active=true^state!=4^ORstate!=5^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');
       inc.update();
     }
   }
}