ServiceNow Integration | Jeli

Connect Jeli and ServiceNow | Jeli Part of PagerDuty

ServiceNow + Jeli Benefits

Integrate Jeli and ServiceNow using the power of Jeli's webhooks and public API. With this integration you can:

  • Automatically create a ticket in ServiceNow when an incident opens in Jeli.
  • Trigger the creation of a Jeli incident from ServiceNow, moving from queue to coordination quickly and easily.

Requirements

📘

Availability

Jeli is available on the Enterprise plan for Incident Management. Please contact our Sales Team to upgrade to an account plan with Jeli.

To Configure the Integration

In Jeli

  • You will need a Jeli API access token to configure the integration. Only a Jeli Admin can generate an API access token.

In ServiceNow

  • You must have a ServiceNow Administrator role to configure the integration.

How it Works

When a Jeli incident opens, it automatically sends a webhook to the ServiceNow instance. ServiceNow processes this webhook via the script included below, and creates a ServiceNow ticket. The Jeli incident details map to the ServiceNow ticket as follows:

  • Short description: Jeli incident name
  • Description: Jeli incident number and Slack Channel URL
  • Jeli Incident ID: Jeli incident number

Users in ServiceNow can also create a Jeli incident from a ServiceNow ticket by using the Coordinate with Jeli button. ServiceNow then sends a request to the Jeli API to create a new Jeli incident.

Integration Walkthrough

Create a ServiceNow Ticket From a Jeli Incident

In ServiceNow

📘

ServiceNow Version

The following instructions are based on ServiceNow Vancouver. Configuration in your specific ServiceNow version and instance may vary.

  1. Create a new Jeli Incident ID field for your Incident object in ServiceNow: Navigate to System Definition Tables. Search for and select Incident from the Tables list.
  2. Click New to add a new field to the Incident table and enter the following:
    • Type: Integer
    • Column label: Jeli incident ID
    • Column name: u_jeli_incident_id
  3. Click Submit to create the field.
  4. Navigate to System Web Services Scripted REST APIs and click New.
  5. Create a new Scripted REST Service by providing a Name and API ID (e.g., "Jeli Incoming Webhooks").
  6. Click Submit to save.
  7. From your new Scripted REST Service, under the Resources tab, click New.
  1. Enter the following information:

    • Name: Open Incident
    • ​HTTP Method: POST
    • Relative path: /open
    • Security tab: Uncheck Requires authentication
    • Script: Copy and paste the following script. You must replace <YOUR JELI API KEY> in the jeliApiKey variable with your Jeli API key.
(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {

    var jeliApiKey = '<YOUR JELI API KEY>';

    var requestData = request.body.data;
    var jeliIncidentId = requestData.incidentId;
    var responseMessage = '';

    // Optionally make an API call to get additional incident details
    jeliApiRequest = new sn_ws.RESTMessageV2();
    jeliApiRequest.setEndpoint('https://api.jeli.io/v0/incident/' + jeliIncidentId);
    jeliApiRequest.setHttpMethod('GET');
    jeliApiRequest.setRequestHeader('Accept','application/json');
    jeliApiRequest.setRequestHeader('Content-Type','application/json');
    jeliApiRequest.setRequestHeader('Authorization', 'Bearer ' + jeliApiKey);
    jeliApiResponse = jeliApiRequest.execute();
    var jeliApiResponseJSON = new global.JSON().decode(jeliApiResponse.getBody());

    var slackChannel = 'https://app.jeli.io/api/slack?channel=' + jeliApiResponseJSON.channel.id + '&team=' + jeliApiResponseJSON.slack_team_id;
  
    // Look for an existing ticket in ServiceNow
    var existingIncident = new GlideRecord('incident');
    existingIncident.addQuery('u_jeli_incident_id', jeliIncidentId);
    existingIncident.query();
    
    // Update existing ticket
    if(existingIncident.next()) {
		existingIncident.description = 'Jeli Incident: ' + jeliIncidentId + '\n' + 'Slack Channel: ' + slackChannel;
        existingIncident.u_jeli_incident_id = jeliIncidentId;
        responseMessage = 'Ticket number ' + existingIncident.number + ' has been updated.';
	}
    else {
        // Create new ticket
        var newIncident = new GlideRecord('incident');
        newIncident.initialize();
        newIncident.short_description = requestData.name;
        newIncident.description = 'Jeli Incident: ' + jeliIncidentId + '\n' + 'Slack Channel: ' + slackChannel;
        newIncident.u_jeli_incident_id = jeliIncidentId;
        newIncident.insert();
        responseMessage = 'Ticket number ' + newIncident.number + ' has been created.';
    }

    response.setStatus(200);

    var response_body = {
        'response': responseMessage,
    };
    
    var writer = response.getStreamWriter();
    writer.writeString(JSON.stringify(response_body));response.setContentType('application/json');

})(request, response);
  1. Click Submit to save.
  2. Navigate back to your newly created Scripted REST Service and copy the Resource path for your Open Incident resource (you’ll need this to configure the webhook in Jeli).

In Jeli

  1. In the Jeli web app, navigate to Settings Webhooks and select Add webhook.
  2. Create a new webhook with the following settings:
    • Webhook URL: https://<url of your servicenow instance>/<resource path from Step 8 above>
      • For example, your webhook URL will look something like: https://dev00000.service-now.com/api/1124078/jeli_incoming_webhooks/open
    • Enabled Upon Creation: Enabled
    • Event Type Filtering: Select incident.created
  3. Click Add to save the webhook configuration.

You can test the webhook by creating an incident in Jeli. You should see a newly created ServiceNow ticket.

Create a Jeli Incident From a ServiceNow Ticket

In ServiceNow

  1. Navigate to System UI UI Actions and select New.
  2. Configure the UI Action as follows:
FieldValue
NameCoordinate with Jeli
TableIncident
Action NameCoordinate_with_Jeli
Show insertDisabled
Show updateEnabled
ClientEnabled
Form buttonEnabled
OnclickOpenJeliIncident()
  1. In the Script field, copy and paste the following script. You must replace <YOUR JELI API KEY> in the jeliApiKey variable with your Jeli API key. You will also need to update the values identified in the script below to set the desired Slack channel and incident opener.

🚧

Incident Opener

The email address used for the email_of_incident_opener variable must exist as a user in Jeli.

function OpenJeliIncident(){
    gsftSubmit(null, g_form.getFormElement(), 'Coordinate_With_Jeli');//MUST call the 'Action name' set in this UI Action
}
    
if(typeof window == 'undefined')
    callJeliAPI();

//Server-side function
function callJeliAPI(){

    var jeliApiKey = '<YOUR JELI API KEY>'; // https://docs.jeli.io/en/articles/8295161-the-jeli-api

    // The values below are examples. You can hard code values here or 
    // you may use current.* to pull these values from the ServiceNow incident object
    var email_of_incident_opener = '[email protected]';
    var broadcast_channel = 'C032EFJTQ10';
    var severity = '0';
    var slack_team_id = 'T01NUHLDWC9';
    var incident_stage = 'Investigating'; 

    var requestBody = {};
    requestBody.incident_name = current.short_description.toString();
	requestBody.incident_stage = incident_stage;
	requestBody.start_zoom = true;
	requestBody.start_google_meet = false;
	requestBody.email_of_incident_opener = email_of_incident_opener;
	requestBody.broadcast_channels = [];
	requestBody.broadcast_channels.push(broadcast_channel);
	requestBody.severity_slack_command = severity;
	requestBody.summary = 'TBD';
	requestBody.slack_team_id = slack_team_id;
	requestBody = new global.JSON().encode(requestBody);

    incApiRequest = new sn_ws.RESTMessageV2();
    incApiRequest.setEndpoint('https://api.jeli.io/v0/incident/');
    incApiRequest.setHttpMethod('POST');
    incApiRequest.setRequestHeader('Accept','application/json');
    incApiRequest.setRequestHeader('Content-Type','application/json');
    incApiRequest.setRequestHeader('Authorization', 'Bearer ' + jeliApiKey);
    incApiRequest.setRequestBody(requestBody);
    incApiResponse = incApiRequest.execute();

    var responseJSON = new global.JSON().decode(incApiResponse.getBody());

    current.u_jeli_incident_id = responseJSON.open_incident.vanity_id;
    current.update();
    action.setRedirectURL(current);	
}
  1. Click Submit to save.

You will now see a Coordinate with Jeli button on your ServiceNow incident form. You can click this button to create an incident in Jeli and Slack. The Jeli incident ID will automatically populate in the ServiceNow record.

FAQ

Do updates from Jeli automatically appear in the ServiceNow ticket?

No, the provided script only creates a ServiceNow ticket when a Jeli incident is created.


Learn more