Giter VIP home page Giter VIP logo

servicenow-rest-api's Introduction

ServiceNow REST API

MIT

Node.JS wrapper library for ServiceNow REST API.

NPM

Missing a feature? Raise a github issue here

Updates

v1.2.2

  • New method to fetch change tasks
  • Bumped axios version

Table of Contents

Installing

Run npm install servicenow-rest-api to install the package.

Basic Usage

Request

  1. Get reference to servicenow package.
  2. Initialize servicenow object.
  3. Call authenticate function.
  4. You can now access Servicenow data by calling functions.
const sn=require('servicenow-rest-api');

const ServiceNow=new sn('_INSTANCE','_USERID','_PASSWORD');

ServiceNow.Authenticate();

ServiceNow.getSampleData('change_request',(res)=>{    // 
    console.log(res);
});
Proxy Settings
const sn=require('servicenow-rest-api');

const ServiceNow=new sn('_INSTANCE','_USERID','_PASSWORD');

const HttpsProxyAgent = require('https-proxy-agent');

// Your Proxy details
let agent = new HttpsProxyAgent({host: "123.252.137.238", port: "54107"});

// Call this method before Authenticate
ServiceNow.setNetworkOptions({
    httpsAgent: agent
})

ServiceNow.Authenticate();

ServiceNow.getSampleData('change_request',(res)=>{    // 
    console.log(res);
});

Response

[ { parent: '',
    reason: '',
    made_sla: 'false',
    backout_plan: 'Current prod environment to be snapshotted with VmWare\n            prior to change.\n        ',
    watch_list: '',
    upon_reject: '',
    sys_updated_on: '2017-08-10 12:42:23',
    type: 'normal',
    conflict_status: '',
    approval_history: '',
    number: 'CHG0000001',
    test_plan: 'Multi-User testing on Sunday night',
    cab_delegate: '',
    sys_updated_by: 'admin',
    .
    .
    .

Supported REST API calls

In this package, wrappers are available for below REST interfaces.

API GET POST PUT DELETE
Table API /now/v2/table/{tableName} now/v2/table/{tableName} now/v2/table/{tableName}/{sys_id} now/v2/table/{tableName}/{sys_id}
/now/v2/table/{tableName}/{sys_id}
Attachment API /now/attachment/{sys_id}
/now/attachment/{sys_id}/file

Functions

1. ServiceNow.Authenticate

If you need to set custom network options, call this method before Authenticate.

Parameters
Callback function

Request

ServiceNow.Authenticate(res=>{
    console.log(res.status);
});

Response

res.status

200

For complete response use res.raw

{ status: 200,
  statusText: 'OK',
  headers:
   { 'set-cookie':
      [_cookieinfo],
     'x-is-logged-in': 'true',
     'x-total-count': '1',
     pragma: 'no-store,no-cache',
     'cache-control': 'no-cache,no-store,must-revalidate,max-age=-1',
     expires: '0',
     'content-type': 'application/json;charset=UTF-8',
     'transfer-encoding': 'chunked',
     .
     .
     .

2. ServiceNow.getSampleData

This function can be used as a reference to get sample data for tables in ServiceNow. This can be used to check the fields in a table.

Parameters Description
type Table type in ServiceNow (incident,change_request)
Callback function Response will be available as a parameter to callback function

Request

ServiceNow.getSampleData('change_request',(res)=>{
    console.log(res);
});

Response

[ { parent: '',
    made_sla: 'false',
    caused_by: '',
    watch_list: '',
    upon_reject: '',
    sys_updated_on: '2017-08-10 20:16:07',
    child_incidents: '',
    hold_reason: '',
    approval_history: '',
    number: 'INC0000001',

3. ServiceNow.getTableData

Access ServiceNow table data using this function.

Parameters Description
fields Fields that you want from ServiceNow table. Pass an empty array if you want to get all the fields
filters Filters that has to be applied on ServiceNow table. Pass an empty array if filters are not required.
type type of table - incident, change_request
callback function Response will be available as a parameter to this function

Request

const fields=[
    'number',
    'short_description',
    'assignment_group',
    'priority'
];

const filters=[
    'urgency=1'
];

ServiceNow.getTableData(fields,filters,'incident',function(res){
    console.log(res);
});

Response

https://devserver.service-now.com/api/now/v2/table/incident?sysparm_display_value=true&sysparm_fields=number,short_description,assignment_group,p
riority&sysparm_query=urgency=1
[ { number: 'INC0000025',
    short_description: 'Need to add more memory to laptop',
    assignment_group: '',
    priority: '1 - Critical' },
  { number: 'INC0000016',
    short_description: 'Rain is leaking on main DNS Server',
    assignment_group:
     { display_value: 'Hardware',
       link: 'https://dev16219.service-now.com/api/now/v2/table/sys_user_group/8a5055c9c61122780043563ef53438e3' },
    priority: '1 - Critical' },
    .
    .
    .

4. ServiceNow.getSysId

Used as a reference to get sys_id of a record in ServiceNow.

Parameters Description
type type of table - incident, change_request
number Ticket number in ServiceNow
callback function Response will be available as a parameter to this function

Request

ServiceNow.getSysId('incident','INC0000016',res=>{
    console.log(res);
});

Response

46e3e949a9fe19810069b824ba2c761a

5. ServiceNow.createNewTask

This is used to create a new task in ServiceNow.

Parameters Description
data Object that contains data for your record
type type of table - incident, change_request
callback function Response will be available as a parameter to this function

Request

const data={
    'short_description':'Need urgent attention!!',
    'urgency':'1',
    'priority':'1',
    'assignment_group':'Hardware'
};

ServiceNow.createNewTask(data,'incident',res=>{
    console.log(res);
});

Response

{ parent: '',
  made_sla: 'true',
  caused_by: '',
  watch_list: '',
  upon_reject: 'Cancel all future Tasks',
  sys_updated_on: '2017-10-30 22:24:30',
  child_incidents: '0',
  hold_reason: '',
  approval_history: '',
  number: 'INC0010006',
  resolved_by: '',
  sys_updated_by: 'admin',
  .
  .
  .

6. ServiceNow.UpdateTask

This is used to update existing record in ServiceNow.

Parameters Description
type type of table - incident, change_request
number Ticket number in ServiceNow
data Object that contains data for your record
callback function Response will be available as a parameter to this function

Request

const data={
    'work_notes':'Assigning this to different team',
    'assignment_group':'Network'
};

ServiceNow.UpdateTask('incident','INC0010006',data,res=>{
    console.log(res);
});

Response

{ parent: '',
  made_sla: 'true',
  caused_by: '',
  watch_list: '',
  upon_reject: 'Cancel all future Tasks',
  sys_updated_on: '2017-10-30 22:31:49',
  child_incidents: '0',
  hold_reason: '',
  approval_history: '',
  number: 'INC0010006',
  .
  .
  .
  work_notes: '2017-10-30 22:31:49 - System Administrator (Work notes)\nAssigning this to different team\n\n',
  short_description: 'Need urgent attention!!',
  close_code: null,
  correlation_display: '',
  delivery_task: '',
  work_start: '',
  assignment_group:
   { display_value: 'Network',
   .
   .
   .
   

7. ServiceNow.DeleteTask

To delete an existing record in ServiceNow table.

Parameters Description
type type of table - incident, change_request
number Ticket number in ServiceNow
callback function Response will be available as a parameter to this function

Request

ServiceNow.DeleteTask('incident','INC0010006',res=>{
    console.log(res.status);
});

Response

204

8. ServiceNow.setNetworkOptions

To set custom network options like proxy.

Call this method before ServiceNow.Authenticate

Parameters Description
options network options

Request

ServiceNow.setNetworkOptions({
    httpsAgent: agent
})

9. ServiceNow.getAttachmentMetaData

This is used to get metadata of attachments

Parameters Description
sys_id sys_id of file
callback function Response will be available as a parameter to this function

Request

ServiceNow.getAttachmentMetaData('0254de0c4f889200086eeed18110c74c', (res => console.log(res)));

Response

{
  size_bytes: '9753',
  file_name: 'picture',
  sys_mod_count: '1',
  average_image_color: '',
  image_width: '',
  sys_updated_on: '2021-01-12 15:50:49',
  sys_tags: '',
  table_name: 'ZZ_YYpc_hardware_cat_item',
  sys_id: '0254de0c4f889200086eeed18110c74c',
  image_height: '',
  sys_updated_by: 'admin',
  download_link: 'https://dev99226.service-now.com/api/now/attachment/0254de0c4f889200086eeed18110c74c/file',
  content_type: 'image/png',
  sys_created_on: '2015-11-26 00:28:31',
  size_compressed: '9369',
  compressed: 'true',
  state: 'available',
  table_sys_id: 'ba5b8f9d182a1d001017ed13c02bcc29',
  chunk_size_bytes: '',
  hash: '',
  sys_created_by: 'mnewton'
}
   

10. ServiceNow.getAttachment

This is used to download attachment. Response contains headers and binary data of attachment. Refer this example on how to use these fields to download attachment.

Parameters Description
sys_id sys_id of file
callback function Response will be available as a parameter to this function

Request

ServiceNow.getAttachment('bae385672f6120102fefd5f62799b668', (result => {console.log(result)}))

Response

{
  status: 200,
  statusText: 'OK',
  headers: {
    'set-cookie': [
      'JSESSIONID=5F1455AB65A01DF31C91E5DD6D26E71F; Path=/; HttpOnly;Secure',
      'glide_user=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly;Secure',
      'glide_user_session=; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/; HttpOnly;Secure',
      'glide_user_route=glide.01101b80d2b7bd3808ce2bf759d058b7; Max-Age=2147483647; Expires=Sun, 30-Jan-2089 22:05:11 GMT; Path=/; HttpOnly;Secure',
      'glide_session_store=401481E32F6120102FEFD5F62799B6F1; Max-Age=1800; Expires=Tue, 12-Jan-2021 19:21:04 GMT; Path=/; HttpOnly;Secure',
      'BIGipServerpool_dev99226=2659473418.45632.0000; path=/; Httponly; Secure'
    ],
    'x-is-logged-in': 'true',
    'x-transaction-id': '841481e32f61',
    'content-disposition': 'attachment;filename=picture',
    'x-attachment-metadata': '{  "size_bytes" : "9753",  "file_name" : "picture",  "sys_mod_count" : "1",  "average_image_color" : "",  "image_width" : "",  "sys_updated_on" : "2021-01-12 15:50:49",  "sys_tags" : "",  "table_name" : "ZZ_YYpc_hardware_cat_item",  "sys_id" : "0254de0c4f889200086eeed18110c74c",  "image_height" : 
"",  "sys_updated_by" : "admin",  "content_type" : "image/png",  "sys_created_on" : "2015-11-26 00:28:31",  "size_compressed" : "9369",  "compressed" : "true",  "state" : "available",  "table_sys_id" : "ba5b8f9d182a1d001017ed13c02bcc29",  "chunk_size_bytes" : "",  "hash" : "",  "sys_created_by" : "mnewton"}',
    'content-type': 'image/png;charset=UTF-8',
    'transfer-encoding': 'chunked',
    date: 'Tue, 12 Jan 2021 18:51:04 GMT',
    server: 'ServiceNow',
    connection: 'close',
    'strict-transport-security': 'max-age=63072000; includeSubDomains'
  },
  .
  .
  .
  data: '�PNG\r\n' +
    '\u001a\n' +
    '\u0000\u0000\u0000\rIHDR\u0000\u0000\u0001�\u0000\u0000\u0001,\b\u0003\u0000\u0000\u0000�i\u0015�\u0000\u0000\u0000\u0003sBIT\b\b\b��O�\u0000\u0000\u0001�PLTE���������������������������������Ľ������������������������������������}��������������w�����������w~⌂��~m�~e�z��
   

11. ServiceNow.getAllAttachmentsMetaData

This is used to get metadata of all attachments of a specific table

Parameters Description
table_sys_id table_sys_id of table
callback function Response will be available as a parameter to this function

Request

ServiceNow.getAllAttachmentsMetaData('a83820b58f723300e7e16c7827bdeed2', (res) => {
    console.log(res);
})

Response

[
  {
    size_bytes: '23',
    file_name: 'test123.txt',
    sys_mod_count: '1',
    average_image_color: '',
    image_width: '',
    sys_updated_on: '2021-01-19 14:12:02',
    sys_tags: '',
    table_name: 'incident',
    sys_id: '1857c8f12f3120102fefd5f62799b6cb',
    image_height: '',
    sys_updated_by: 'system',
    download_link: 'https://dev99226.service-now.com/api/now/attachment/1857c8f12f3120102fefd5f62799b6cb/file',
    ...
  },
  {
    ...
    table_name: 'incident',
    sys_id: 'bae385672f6120102fefd5f62799b668',
    image_height: '',
    sys_updated_by: 'system',
    download_link: 'https://dev99226.service-now.com/api/now/attachment/bae385672f6120102fefd5f62799b668/file',
    content_type: 'text/plain',
    sys_created_on: '2021-01-12 18:50:25',
    size_compressed: '37',
    compressed: 'true',
    state: 'available',
    table_sys_id: 'a83820b58f723300e7e16c7827bdeed2',
    chunk_size_bytes: '700000',
    hash: '5881707e54b0112f901bc83a1ffbacac8fab74ea46a6f706a3efc5f7d4c1c625',
    sys_created_by: 'admin'
  }
]
   

12. ServiceNow.getChangeTasks

This is used to get change tasks from a change request in ServiceNow. (#12-getchangetasks)

Parameters Description
type type of table - change_task
changeNumber Change request number
callback function Response will be available as a parameter to this function

Request

ServiceNow.getChangeTasks('change_task', 'CHG0000001', (res) =>
    console.log(res)
);

Response

{ number: 'CTASK0010006',
  sys_id: '0254de0c4f889200086eeed18110c74c'
  .
  .

Examples

1. Get critical incidents which are open for last 6 months.

Request

const sn = require('servicenow-rest-api');
const ServiceNow = new sn('devserver','admin','password');

ServiceNow.Authenticate();

const fields =[
    'number',
    'short_description',
    'assignment_group',
    'assigned_to'
];

const filters=[
    'priority=1',
    'state=In Progress',
    'opened_atONLast 6 months@javascript:gs.beginningOfLast6Months()@javascript:gs.endOfLast6Months()' //Opened on last 6 months
];

ServiceNow.getTableData(fields,filters,'incident',res=>{
    console.log(res);
});

Response

[ { number: 'INC0000003',
    short_description: 'Wireless access is down in my area',
    assignment_group:
     { display_value: 'Network',
       link: 'https://devserver.service-now.com/api/now/v2/table/sys_user_group/287ebd7da9fe198100f92cc8d1d2154e' },
    assigned_to:
     { display_value: 'Beth Anglin',
       link: 'https://devserver.service-now.com/api/now/v2/table/sys_user/46d44a23a9fe19810012d100cca80666' } },
  { number: 'INC0000050',
    short_description: 'Can\'t access Exchange server - is it down?',
    assignment_group:
     { display_value: 'Hardware',
       link: 'https://devserver.service-now.com/api/now/v2/table/sys_user_group/8a5055c9c61122780043563ef53438e3' },
       .
       .
       .       

2. Create an Emergency change to reboot server

Request

const sn = require('servicenow-rest-api');
const ServiceNow = new sn('devserver','admin','password');

ServiceNow.Authenticate();

const changeData={
    'short_description':'Reboot Server',
    'priority':'1',
    'risk':'High',
    'type':'Emergency',
    'assignment_group':'Hardware'
};
     

ServiceNow.createNewTask(changeData,'change_request',res=>{
    console.log(res);
});

Response

{ parent: '',
  reason: null,
  made_sla: 'true',
  backout_plan: '',
  watch_list: '',
  upon_reject: 'Cancel all future Tasks',
  sys_updated_on: '2017-11-03 07:37:23',
  type: 'Emergency',
  conflict_status: 'Not Run',
  approval_history: '',
  number: 'CHG0030003',
  .
  .
  .
  short_description: 'Reboot Server',
  close_code: null,
  correlation_display: '',
  delivery_task: '',
  work_start: '',
  assignment_group:
   { display_value: 'Hardware',
   .
   .
   .

3. Elevate priority of ticket

Request

const sn = require('servicenow-rest-api');
const ServiceNow = new sn('devserver','admin','password');

ServiceNow.Authenticate();

const incidentData={
    'work_notes':'Elevating priority of ticket as per business request',
    'urgency':'1',
    'impact':'1'
};
     
ServiceNow.UpdateTask('incident','INC0010007',incidentData,res=>{
    console.log(res);
});

Response

{ parent: '',
  made_sla: 'true',
  caused_by: '',
  watch_list: '',
  upon_reject: 'Cancel all future Tasks',
  sys_updated_on: '2017-11-03 08:25:17',
  child_incidents: '0',
  hold_reason: '',
  approval_history: '',
  number: 'INC0010007',
  .
  .
  .
  impact: '1 - High',
  active: 'true',
  work_notes_list: '',
  business_service: '',
  priority: '1 - Critical',
  .
  .
  .
   work_notes: '2017-11-03 08:25:17 - System Administrator (Work notes)\nElevating priority of ticket as per business request\n',
  short_description: 'Cannot connect to internet',

4. Set Custom Proxy

Request

const sn = require('servicenow-rest-api');
const ServiceNow = new sn('devserver','admin','password');
const HttpsProxyAgent = require('https-proxy-agent');

let agent = new HttpsProxyAgent({host: "123.252.137.238", port: "54107"});

ServiceNow.setNetworkOptions({
    httpsAgent: agent
})

ServiceNow.Authenticate();

5. Download Attachment

Request

This example uses express server

const express = require('express');
const app = express();
const sn = require('servicenow-rest-api');
const ServiceNow = new sn('devserver','admin','password');

app.listen(3000);

ServiceNow.Authenticate();

app.get('/', (req, res) => {
    ServiceNow.getAttachment('bae385672f6120102fefd5f62799b668', (result => {
        if(result['headers']){
            if(result['headers']['content-disposition']){
                res.setHeader('content-disposition', result['headers']['content-disposition'])
            }
            if(result['headers']['content-type']){
                res.setHeader('content-type', result['headers']['content-type'])
            }
            if(result['headers']['x-attachment-metadata']){
                res.setHeader('x-attachment-metadata', result['headers']['x-attachment-metadata'])
            }
        }
        res.send(result.data);
    }));
})

Response

File can be downloaded when you visit url, in this example, http://localhost:3000/

License

This project is licensed under the MIT License - see the LICENSE file for details

Version

1.2.1

servicenow-rest-api's People

Contributors

chaitanyakaranam avatar chovanecm avatar xmariopereira avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

servicenow-rest-api's Issues

Get RITM variables

Greetings,

love the library! I do manage to authenticate and get details for a RITM, but in the webinterface I see a section called 'variables' and I do not know how to retrieve them.

I read on one forum that I have to query sc_item_option_mtom with the sys_id of the RITM, but nothing comes back.

Hoping you can at worst tell me how to get this done with this library or at best add a feature to get it for me ;)

Unhandled Promise Rejection Warning

Receiving an unhandled promise rejection warning for every function call.
In servicenow.js, you're sending callback(err) in the axios req catch statements, would that need to change? - Reference axios/axios#18

(node:11476) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: callback is not a function

Authenticate() issue

No callback is available for Authenticate function in servicenow.js

the below is not working. Not able to know if authentication is successful or not.

ServiceNow.Authenticate(res=>{
console.log(res.status);
});

Updating Change Tasks

Hi,

So in servicenow you have change requests and incidents. But inside of change_requests, you have change_tasks.

Change requests are parents of change_tasks.

Do you think you will ever implement update Change_Tasks?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.