notification-events

Notification Events for ServiceNow

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "notification-events" with this command: npx skills add groeimetai/snow-flow/groeimetai-snow-flow-notification-events

Notification Events for ServiceNow

Events trigger notifications, scripts, and workflows in ServiceNow.

Event Architecture

gs.eventQueue() → Event Queue (sysevent) ↓ Event Registry (sysevent_register) ↓ Script Actions (sysevent_script_action) Notifications (sysevent_email_action)

Key Tables

Table Purpose

sysevent

Event queue

sysevent_register

Event registry

sysevent_script_action

Script actions

sysevent_email_action

Email notifications

Creating Events (ES5)

Register Event

// Register event in sysevent_register (ES5 ONLY!) var event = new GlideRecord("sysevent_register") event.initialize()

event.setValue("event_name", "x_myapp.incident.escalated") event.setValue("table", "incident") event.setValue("description", "Fired when an incident is escalated") event.setValue("fired_by", "Business Rules, Scripts")

// Parameters event.setValue("parm1", "escalation_level") event.setValue("parm2", "previous_group")

event.insert()

Queue Event

// Queue event from script (ES5 ONLY!) // gs.eventQueue(event_name, gr, parm1, parm2)

// In a Business Rule ;(function executeRule(current, previous) { // Check if escalated if (current.escalation.changesTo("1")) { gs.eventQueue( "x_myapp.incident.escalated", current, current.getValue("escalation"), previous.assignment_group.getDisplayValue(), ) } })(current, previous)

Event Parameters

// Access event parameters in script action (ES5 ONLY!) // event.parm1 = first parameter // event.parm2 = second parameter

// In Script Action ;(function executeEvent(event) { var escalationLevel = event.parm1 var previousGroup = event.parm2

var incident = event.getGlideRecord()

gs.info( "Incident " + incident.getValue("number") + " escalated to level " + escalationLevel + " from " + previousGroup, )

// Perform action based on event if (escalationLevel === "1") { notifyManager(incident) } else if (escalationLevel === "2") { notifyDirector(incident) } else if (escalationLevel === "3") { notifyVP(incident) } })(event)

Script Actions (ES5)

Create Script Action

// Create script action for event (ES5 ONLY!) var action = new GlideRecord("sysevent_script_action") action.initialize()

action.setValue("name", "Handle Incident Escalation") action.setValue("event_name", "x_myapp.incident.escalated") action.setValue("active", true)

// Condition (optional) action.setValue("condition", "event.parm1 >= 2")

// Script (ES5 ONLY!) action.setValue( "script", "(function executeEvent(event) {\n" + " var incident = event.getGlideRecord();\n" + " var escalationLevel = event.parm1;\n" + " \n" + " // Create escalation task\n" + ' var task = new GlideRecord("task");\n' + " task.initialize();\n" + " task.parent = incident.getUniqueValue();\n" + ' task.short_description = "Review escalated incident";\n' + " task.assignment_group = getEscalationGroup(escalationLevel);\n" + " task.insert();\n" + " \n" + ' gs.info("Created escalation task for " + incident.number);\n' + "})(event);", )

action.insert()

Delayed Event

// Queue event with delay (ES5 ONLY!) // Will be processed after specified time

var delay = new GlideDateTime() delay.addSeconds(3600) // 1 hour delay

var event = new GlideRecord("sysevent") event.initialize() event.setValue("name", "x_myapp.reminder.send") event.setValue("instance", recordSysId) event.setValue("table", "incident") event.setValue("parm1", "first_reminder") event.setValue("parm2", "") event.setValue("claimed", false) event.setValue("process_on", delay) event.insert()

Email Notifications (ES5)

Create Email Action

// Create notification for event (ES5 ONLY!) var notification = new GlideRecord("sysevent_email_action") notification.initialize()

notification.setValue("name", "Incident Escalation Notification") notification.setValue("event_name", "x_myapp.incident.escalated") notification.setValue("active", true)

// Recipients notification.setValue("recipient_users", "") notification.setValue("recipient_groups", getGroupSysId("IT Management")) notification.setValue("send_self", false)

// Use event.parm1 to get escalation manager notification.setValue("recipient_fields", "assignment_group.manager")

// Email content notification.setValue("subject", "Incident ${number} Escalated - Level ${event.parm1}") notification.setValue( "message_html", "<p>Incident <b>${number}</b> has been escalated.</p>" + "<p>Short Description: ${short_description}</p>" + "<p>Escalation Level: ${event.parm1}</p>" + "<p>Previous Group: ${event.parm2}</p>" + '<p><a href="${URI_REF}">View Incident</a></p>', )

notification.insert()

Conditional Notification

// Notification with advanced condition (ES5 ONLY!) var notification = new GlideRecord("sysevent_email_action") notification.initialize() notification.setValue("name", "VIP Incident Alert") notification.setValue("event_name", "incident.created")

// Advanced condition script notification.setValue("advanced_condition", true) notification.setValue("condition", "current.caller_id.vip == true && current.priority <= 2")

// Send to specific recipients for VIP notification.setValue("recipient_groups", getGroupSysId("VIP Support"))

notification.insert()

Common Event Patterns (ES5)

Reminder Event

// Schedule reminder events (ES5 ONLY!) function scheduleReminder(tableName, recordSysId, reminderType, delayMinutes) { var eventTime = new GlideDateTime() eventTime.addSeconds(delayMinutes * 60)

var reminder = new GlideRecord("sysevent") reminder.initialize() reminder.setValue("name", "x_myapp.reminder") reminder.setValue("instance", recordSysId) reminder.setValue("table", tableName) reminder.setValue("parm1", reminderType) reminder.setValue("process_on", eventTime) reminder.insert()

return reminder.getUniqueValue() }

// Cancel scheduled reminder function cancelReminder(eventSysId) { var reminder = new GlideRecord("sysevent") if (reminder.get(eventSysId)) { reminder.deleteRecord() return true } return false }

Batch Processing Event

// Queue batch processing (ES5 ONLY!) // Business Rule: after, insert, u_import_batch

;(function executeRule(current, previous) { // Queue processing for each record in batch var record = new GlideRecord("u_import_record") record.addQuery("batch", current.getUniqueValue()) record.query()

while (record.next()) { gs.eventQueue("x_myapp.import.process_record", record, current.getUniqueValue(), "") }

// Queue completion check var delay = new GlideDateTime() delay.addSeconds(300) // Check in 5 minutes

var event = new GlideRecord("sysevent") event.initialize() event.setValue("name", "x_myapp.import.check_complete") event.setValue("instance", current.getUniqueValue()) event.setValue("table", "u_import_batch") event.setValue("process_on", delay) event.insert() })(current, previous)

State Change Event

// Generic state change event (ES5 ONLY!) // Business Rule: after, update

;(function executeRule(current, previous) { if (current.state.changes()) { gs.eventQueue( "x_myapp." + current.getTableName() + ".state_change", current, previous.getValue("state"), current.getValue("state"), ) } })(current, previous)

Event Debugging (ES5)

Check Event Queue

// Query pending events (ES5 ONLY!) function getPendingEvents(eventName) { var events = []

var event = new GlideRecord("sysevent") event.addQuery("name", eventName) event.addQuery("claimed", false) event.orderByDesc("sys_created_on") event.setLimit(100) event.query()

while (event.next()) { events.push({ sys_id: event.getUniqueValue(), name: event.getValue("name"), instance: event.getValue("instance"), parm1: event.getValue("parm1"), parm2: event.getValue("parm2"), process_on: event.getValue("process_on"), created: event.getValue("sys_created_on"), }) }

return events }

MCP Tool Integration

Available Tools

Tool Purpose

snow_create_event

Queue events

snow_query_table

Query event queue

snow_find_artifact

Find event configurations

snow_execute_script_with_output

Test event scripts

Example Workflow

// 1. Queue an event await snow_create_event({ name: "x_myapp.test.event", table: "incident", instance: incidentSysId, parm1: "test_value", })

// 2. Check event queue await snow_query_table({ table: "sysevent", query: "name=x_myapp.test.event^claimed=false", fields: "name,instance,parm1,parm2,process_on", })

// 3. Find script actions await snow_query_table({ table: "sysevent_script_action", query: "event_nameLIKEx_myapp", fields: "name,event_name,active,condition", })

Best Practices

  • Namespace Events - Use app prefix (x_myapp.*)

  • Register Events - Document in sysevent_register

  • Meaningful Names - Clear event purpose

  • Parameters - Use parm1/parm2 wisely

  • Conditions - Filter before processing

  • Async Processing - Don't block transactions

  • Error Handling - Handle script failures

  • ES5 Only - No modern JavaScript syntax

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

predictive-intelligence

No summary provided by upstream source.

Repository SourceNeeds Review
General

scheduled-jobs

No summary provided by upstream source.

Repository SourceNeeds Review
General

document-management

No summary provided by upstream source.

Repository SourceNeeds Review
General

reporting-dashboards

No summary provided by upstream source.

Repository SourceNeeds Review