notifications について
ServiceNowの通知を設計・管理する開発スキルです。レコード変更、承認、SLA、業務イベントの通知を構築するチーム向けに、イベント、テンプレート、宛先ロジック、SMS・プッシュ、配信調査を扱います。
主な機能
- 01イベント型と条件型通知の設定
- 02再利用可能なメールテンプレートの作成
- 03固定および動的な宛先の設定
- 04SMSとプッシュ通知の設定
- 05通知の絞り込み、優先順位付け、調査
活用シーン
- 01インシデント変更時の担当者通知
- 02承認やSLAのアラート送信
- 03動的な宛先を使う通知の構築
- 04メール配信失敗の調査
MCP 対応
ServiceNow MCPツールでイベントを検索し、通知、テンプレート、メールスクリプトのレコードを作成・更新する例を示します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill notificationsインストール後、Claude Code で/notificationsを入力して読み込まれたか確認します。
詳細
メール通知の開発
概要
このスキルでは、ServiceNow のメール通知を作成、管理する一連のプロセスを扱います。
- 通知の種類(イベントベースと直接通知)を理解する
- 適切なトリガーを使用してメール通知を作成する
- 動的なコンテンツを含むメールテンプレートを作成する
- 高度な宛先ロジック用のメールスクリプトを作成する
- SMS 通知とプッシュ通知を設定する
- 配信に関する問題をトラブルシューティングする
使用する場面: レコードの変更、承認、SLA 違反、ワークフローのアクティビティ、またはカスタムビジネスイベントに対する自動通知を構築するとき。
前提条件
- ロール:
admin、notification_admin、またはitil(閲覧用) - アクセス権: sysevent_email_action、sysevent_email_template、sys_script_email テーブル
- 知識: GlideRecord の基本、メールの概念、イベントレジストリ
- 関連スキル: ワークフローでトリガーされる通知を作成する場合は、
admin/workflow-creationを完了してください
通知アーキテクチャ
コアテーブル
sysevent_register (Event Registry)
|
+-- sysevent_email_action (Email Notifications)
|
+-- sysevent_email_template (Email Templates)
+-- sys_script_email (Mail Scripts)
+-- cmn_notif_message (Notification Messages)
通知の種類
| 種類 | トリガー | 使用例 |
|---|---|---|
| イベントベース | システムイベント/カスタムイベント | 標準的な方法 — 疎結合で再利用可能 |
| 直接通知 | レコードの条件 | すばやく設定 — 条件に強く結合 |
| ワークフロー | ワークフローのアクティビティ | ワークフローオーケストレーションの一部 |
| スクリプト | GlideEmailOutbound | プログラムによる制御 — 全面的な制御が可能 |
主要テーブルの一覧
| テーブル | 目的 |
|---|---|
| sysevent_email_action | メール通知の定義 |
| sysevent_email_template | メール本文のテンプレート |
| sysevent_register | イベントの定義 |
| sys_script_email | 宛先用のメールスクリプト |
| sys_email | メールログ(送信済み/失敗) |
| cmn_notif_message | 通知メッセージストア |
| cmn_notif_device | ユーザー通知デバイス |
手順
ステップ 1:イベントベースの通知と直接通知を理解する
イベントベースの通知(推奨):
- イベントによってトリガーされます(例:
incident.assigned、change.approval.rejected) - ビジネスルールから切り離されています
- 1 つのイベントに複数の通知を設定できます
- 複雑で再利用可能な通知ロジックに適しています
直接通知:
- レコードの条件によって直接トリガーされます
- 設定が簡単です
- 特定の条件に強く結合されています
- 単発の通知に適しています
ステップ 2:既存のイベントを照会する
通知を作成する前に、利用できるイベントを確認してください。
イベントレジストリを照会する:
Tool: SN-Query-Table
Parameters:
table_name: sysevent_register
query: table=incident
fields: sys_id,event_name,table,description,fired_by
limit: 50
一般的なシステムイベント:
| イベント | テーブル | トリガー |
|---|---|---|
| incident.assigned | incident | インシデントがユーザー/グループに割り当てられた |
| incident.commented | incident | コメントが追加された |
| incident.resolved | incident | インシデントが解決された |
| incident.reopened | incident | インシデントが再開された |
| change.approval.rejected | change_request | 変更の承認が却下された |
| change.itil.approval.rejected | change_request | ITIL 変更が却下された |
| sc_request.approved | sc_request | リクエストが承認された |
| sla.warning | task_sla | SLA の警告しきい値に達した |
| sla.breached | task_sla | SLA に違反した |
| approval.inserted | sysapproval_approver | 承認レコードが作成された |
| task.assigned | task | タスクが割り当てられた |
ステップ 3:カスタムイベントを作成する(任意)
ニーズに合う既存のイベントがない場合は、カスタムイベントを作成します。
イベント登録を作成する:
Tool: SN-Create-Record
Parameters:
table_name: sysevent_register
data:
event_name: "x_custom.incident.escalated"
table: "incident"
description: "Fired when incident is escalated to management"
fired_by: "Business Rule: Incident Escalation"
ビジネスルールからイベントを発火する:
// In business rule script
if (current.escalation.changes() && current.escalation > 0) {
gs.eventQueue('x_custom.incident.escalated', current, current.assigned_to, current.assignment_group);
}
バックグラウンドスクリプトからイベントを発火する:
Tool: SN-Execute-Background-Script
Parameters:
script: |
var inc = new GlideRecord('incident');
inc.get('number', 'INC0010001');
if (inc.isValidRecord()) {
gs.eventQueue('x_custom.incident.escalated', inc, inc.assigned_to.toString(), inc.assignment_group.toString());
gs.info('Event fired for: ' + inc.number);
}
description: "Fire custom escalation event for testing"
ステップ 4:メール通知を作成する
基本的なイベントベースの通知:
Tool: SN-Create-Record
Parameters:
table_name: sysevent_email_action
data:
name: "Incident Escalation Alert"
event_name: "x_custom.incident.escalated"
sys_domain: "global"
collection: "incident"
active: true
# Subject
subject: "URGENT: Incident ${number} Escalated - ${short_description}"
# Recipients
send_to_event_creator: false
recipient_users: [user_sys_id] # Specific users
recipient_groups: [group_sys_id] # Groups
send_to_event_parm_1: true # gs.eventQueue parm1 (assigned_to)
send_to_event_parm_2: true # gs.eventQueue parm2 (assignment_group)
# Content
content_type: "text/html"
message_html: |
<html>
<body>
<h2>Incident Escalated</h2>
<p>The following incident has been escalated and requires immediate attention:</p>
<table border="1" cellpadding="5">
<tr><td><b>Number:</b></td><td>${number}</td></tr>
<tr><td><b>Priority:</b></td><td>${priority}</td></tr>
<tr><td><b>Description:</b></td><td>${short_description}</td></tr>
<tr><td><b>Assigned To:</b></td><td>${assigned_to}</td></tr>
<tr><td><b>Assignment Group:</b></td><td>${assignment_group}</td></tr>
<tr><td><b>Escalation Level:</b></td><td>${escalation}</td></tr>
</table>
<p><a href="${URI_REF}">View Incident</a></p>
</body>
</html>
直接通知(条件ベース):
Tool: SN-Create-Record
Parameters:
table_name: sysevent_email_action
data:
name: "High Priority Incident Created"
# No event_name - uses conditions instead
sys_domain: "global"
collection: "incident"
action_insert: true
action_update: false
action_delete: false
condition: "priority=1^state=1" # P1, New state
active: true
subject: "P1 Incident Created: ${number}"
send_to_event_parm_1: true
content_type: "text/html"
message_html: |
<h2>Priority 1 Incident Created</h2>
<p>A new Priority 1 incident requires immediate attention.</p>
<p><b>Number:</b> ${number}</p>
<p><b>Description:</b> ${short_description}</p>
<p><a href="${URI_REF}">View Incident</a></p>
ステップ 5:受信者を設定する
sysevent_email_action の受信者オプション:
| フィールド | 目的 |
|---|---|
recipient_users | 特定のユーザーの sys_id(カンマ区切り) |
recipient_groups | グループの sys_id — すべてのメンバーにメールを送信します |
send_to_event_creator | イベントをトリガーしたユーザー |
send_to_event_parm_1 | gs.eventQueue の 1 番目のパラメーター |
send_to_event_parm_2 | gs.eventQueue の 2 番目のパラメーター |
recipient_fields | ユーザー参照を含むレコードフィールド |
send_self | 変更を行ったユーザーに送信します |
exclude_delegates | 代理ユーザーを除外します |
email_template | 再利用可能なテンプレートへの参照 |
フィールドベースの受信者:
Tool: SN-Update-Record
Parameters:
table_name: sysevent_email_action
sys_id: [notification_sys_id]
data:
recipient_fields: "assigned_to,opened_by,caller_id" # Comma-separated fields
グループ受信者:
Tool: SN-Update-Record
Parameters:
table_name: sysevent_email_action
sys_id: [notification_sys_id]
data:
recipient_groups: [group1_sys_id],[group2_sys_id]
ステップ 6:動的な受信者用のメールスクリプトを作成する
メールスクリプトを使うと、単純なフィールド参照では対応できない複雑な受信者ロジックを設定できます。
メールスクリプトを作成する:
Tool: SN-Create-Record
Parameters:
table_name: sys_script_email
data:
name: "Get On-Call Manager"
description: "Returns the on-call manager for the assignment group"
script: |
// Mail script to find on-call manager
// 'current' is the record, 'email' is the GlideEmailOutbound object
(function runMailScript(current, template, email, email_action, event) {
// Get on-call rotation for assignment group
var oncall = new GlideRecord('on_call_rotation');
oncall.addQuery('group', current.assignment_group);
oncall.addQuery('active', true);
oncall.query();
if (oncall.next()) {
// Add on-call user as recipient
var user = new GlideRecord('sys_user');
user.get(oncall.user);
if (user.isValidRecord() && user.email) {
email.addAddress('to', user.email, user.name);
gs.info('Mail script: Added recipient ' + user.email);
}
}
// Optionally add escalation manager
if (current.escalation > 1) {
var manager = current.assignment_group.manager;
if (manager && manager.email) {
email.addAddress('cc', manager.email, manager.name);
}
}
})(current, template, email, email_action, event);
メールスクリプトを通知に関連付ける:
Tool: SN-Update-Record
Parameters:
table_name: sysevent_email_action
sys_id: [notification_sys_id]
data:
sys_script_mail: [mail_script_sys_id]
高度なメールスクリプト — マネージャー階層:
Tool: SN-Create-Record
Parameters:
table_name: sys_script_email
data:
name: "Get Manager Chain"
description: "Adds manager hierarchy up to specified levels"
script: |
(function runMailScript(current, template, email, email_action, event) {
var MAX_LEVELS = 3;
var userId = current.assigned_to.toString();
for (var level = 0; level < MAX_LEVELS && userId; level++) {
var user = new GlideRecord('sys_user');
user.get(userId);
if (user.isValidRecord() && user.manager) {
var manager = new GlideRecord('sys_user');
manager.get(user.manager);
if (manager.isValidRecord() && manager.email) {
email.addAddress('cc', manager.email, manager.name);
userId = manager.sys_id.toString();
} else {
break;
}
} else {
break;
}
}
})(current, template, email, email_action, event);
ステップ 7:メールテンプレートを作成する
メールテンプレートを使うと、HTML/テキスト形式を再利用できます。
メールテンプレートを作成する:
Tool: SN-Create-Record
Parameters:
table_name: sysevent_email_template
data:
name: "Incident Alert Template"
description: "Standard template for incident notifications"
subject: "${number}: ${short_description}"
message_html: |
<!DOCTYPE html>
<html>
<head>
<style>
body { font-family: Arial, sans-serif; }
.header { background-color: #1a73e8; color: white; padding: 20px; }
.content { padding: 20px; }
.details { border-collapse: collapse; width: 100%; }
.details td { border: 1px solid #ddd; padding: 10px; }
.label { background-color: #f5f5f5; font-weight: bold; width: 30%; }
.footer { background-color: #f5f5f5; padding: 15px; font-size: 12px; }
.button { background-color: #1a73e8; color: white; padding: 10px 20px; text-decoration: none; border-radius: 4px; }
</style>
</head>
<body>
<div class="header">
<h1>Incident Alert</h1>
</div>
<div class="content">
<p>An incident requires your attention:</p>
<table class="details">
<tr>
<td class="label">Number</td>
<td>${number}</td>
</tr>
<tr>
<td class="label">Priority</td>
<td>${priority}</td>
</tr>
<tr>
<td class="label">State</td>
<td>${state}</td>
</tr>
<tr>
<td class="label">Description</td>
<td>${short_description}</td>
</tr>
<tr>
<td class="label">Assigned To</td>
<td>${assigned_to}</td>
</tr>
<tr>
<td class="label">Assignment Group</td>
<td>${assignment_group}</td>
</tr>
<tr>
<td class="label">Opened</td>
<td>${opened_at}</td>
</tr>
</table>
<p style="margin-top: 20px;">
<a href="${URI_REF}" class="button">View Incident</a>
</p>
</div>
<div class="footer">
<p>This is an automated notification from ServiceNow.</p>
<p>Do not reply to this email.</p>
</div>
</body>
</html>
message: |
Incident Alert
Number: ${number}
Priority: ${priority}
State: ${state}
Description: ${short_description}
Assigned To: ${assigned_to}
Assignment Group: ${assignment_group}
View Incident: ${URI_REF}
This is an automated notification.
collection: "incident"
テンプレートを通知に関連付ける:
Tool: SN-Update-Record
Parameters:
table_name: sysevent_email_action
sys_id: [notification_sys_id]
data:
email_template: [template_sys_id]
# Clear inline content if using template
message_html: ""
message: ""
ステップ 8:メールの変数構文
標準フィールド変数:
${field_name} - Display value of field
${field_name.name} - Reference field's name
${field_name.email} - Reference field's email
${field_name.sys_id} - Reference field's sys_id
${number} - Incident number
${short_description} - Short description
${priority} - Priority display value
${state} - State display value
特殊変数:
${URI} - Record URI path only
${URI_REF} - Full URL to record
${mailto:email} - Mailto link
${event.parm1} - First event parameter
${event.parm2} - Second event parameter
${current} - Current record reference
${gs.getProperty('name')} - System property value
条件付きコンテンツ(メールスクリプトが必要):
// In notification body script or template script
if (current.priority == 1) {
template.print('<span style="color: red; font-weight: bold;">CRITICAL</span>');
} else {
template.print('<span>' + current.priority.getDisplayValue() + '</span>');
}
関連レコードの反復処理:
// Show related tasks in notification
template.print('<h3>Related Tasks:</h3>');
template.print('<ul>');
var tasks = new GlideRecord('sc_task');
tasks.addQuery('request_item', current.sys_id);
tasks.query();
while (tasks.next()) {
template.print('<li>' + tasks.number + ' - ' + tasks.short_description + '</li>');
}
template.print('</ul>');
ステップ 9:添付ファイルを追加する
レコードの添付ファイルを含める:
Tool: SN-Update-Record
Parameters:
table_name: sysevent_email_action
sys_id: [notification_sys_id]
data:
include_attachments: true
メールスクリプトを使ったプログラムによる添付:
Tool: SN-Create-Record
Parameters:
table_name: sys_script_email
data:
name: "Attach Report PDF"
description: "Attaches a generated report to the email"
script: |
(function runMailScript(current, template, email, email_action, event) {
// Get attachment from related record
var attach = new GlideRecord('sys_attachment');
attach.addQuery('table_name', 'incident');
attach.addQuery('table_sys_id', current.sys_id);
attach.addQuery('content_type', 'CONTAINS', 'pdf');
attach.query();
while (attach.next()) {
// Add each PDF attachment
var gsa = new GlideSysAttachment();
var content = gsa.getContentBase64(attach);
email.addAttachment(attach.file_name, attach.content_type, content);
}
})(current, template, email, email_action, event);
ステップ 10:SMS 通知を設定する
SMS 通知には、SMS プラグインとキャリア設定が必要です。
SMS 対応状況を確認する:
Tool: SN-Query-Table
Parameters:
table_name: sys_plugins
query: name=com.snc.sms
fields: sys_id,name,active
SMS 通知を作成する:
Tool: SN-Create-Record
Parameters:
table_name: sysevent_email_action
data:
name: "P1 Incident SMS Alert"
event_name: "incident.assigned"
sys_domain: "global"
collection: "incident"
condition: "priority=1"
active: true
# SMS specific
sms_alternate: true # Enable SMS option
subject: "P1: ${number}" # SMS subject (carrier dependent)
message: "P1 Incident ${number}: ${short_description}. Priority: ${priority}. View: ${URI_REF}"
content_type: "text/plain"
# Recipients
send_to_event_parm_1: true
ユーザーの SMS を設定する:
Tool: SN-Query-Table
Parameters:
table_name: cmn_notif_device
query: user=[user_sys_id]^type=SMS
fields: sys_id,phone_number,carrier,active
ステップ 11:プッシュ通知を設定する
プッシュ通知には、モバイルプラグインとデバイス登録が必要です。
プッシュ通知を作成する:
Tool: SN-Create-Record
Parameters:
table_name: sysevent_email_action
data:
name: "Approval Required Push"
event_name: "approval.inserted"
collection: "sysapproval_approver"
active: true
# Push specific
push_message_only: true # Send push only, no email
subject: "Approval Required"
message: "You have a new approval request: ${document_id.short_description}"
# Recipients
recipient_fields: "approver"
ユーザーのプッシュデバイスをクエリする:
Tool: SN-Query-Table
Parameters:
table_name: cmn_notif_device
query: user=[user_sys_id]^type=Push
fields: sys_id,device_name,active,last_registration
ステップ 12:通知の条件とフィルタリング
高度な条件の例:
| 条件 | 目的 |
|---|---|
priority=1^state!=6 | P1、未解決 |
active=true^assigned_toISEMPTY | アクティブ、未割り当て |
sys_created_onONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday() | 今日作成 |
priority.changes()=true | 優先度フィールドが変更された |
state.changesFrom(1)^state.changesTo(2) | 状態が「新規」から「進行中」に変更された |
条件スクリプト(高度):
Tool: SN-Update-Record
Parameters:
table_name: sysevent_email_action
sys_id: [notification_sys_id]
data:
advanced_condition: |
// Return true to send notification, false to skip
function advancedCondition() {
// Don't notify if CI is in maintenance window
if (current.cmdb_ci && current.cmdb_ci.maintenance) {
return false;
}
// Only notify during business hours
var now = new GlideDateTime();
var hour = now.getLocalTime().getHourOfDayLocalTime();
if (hour < 8 || hour > 18) {
return false; // Outside business hours
}
// Check if user has opted out
var prefs = new GlideRecord('sys_user_preference');
prefs.addQuery('user', current.assigned_to);
prefs.addQuery('name', 'notification.incident.optout');
prefs.addQuery('value', 'true');
prefs.query();
if (prefs.next()) {
return false;
}
return true;
}
advancedCondition();
ステップ 13:重みと優先度
通知の頻度と重要度を制御します。
通知の重みを設定する:
Tool: SN-Update-Record
Parameters:
table_name: sysevent_email_action
sys_id: [notification_sys_id]
data:
weight: 10 # Higher weight = higher priority
digest: false # true = batch into digest
digest_interval: "" # hourly, daily if digest=true
omit_watermark: false # Watermark prevents duplicates
ダイジェストを設定する:
Tool: SN-Create-Record
Parameters:
table_name: sysevent_email_action
data:
name: "Daily Incident Summary"
event_name: "incident.created"
collection: "incident"
active: true
digest: true
digest_interval: "daily"
digest_template: [digest_template_sys_id]
subject: "Daily Incident Summary - ${digest.count} incidents"
メール配信のトラブルシューティング
ステップ 1:メールログを確認する
最近のメールをクエリする:
Tool: SN-Query-Table
Parameters:
table_name: sys_email
query: type=send-ready^ORtype=sent^ORtype=send-error^sys_created_onONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()
fields: sys_id,type,recipients,subject,sys_created_on,error,mailbox
limit: 50
orderBy: sys_created_on
orderByDesc: true
メールのステータスの種類:
| 種類 | 意味 |
|---|---|
| send-ready | 送信待ちのキューに登録されています |
| sent | 正常に送信されました |
| send-error | 送信に失敗しました |
| received | 受信メール |
| received-error | 受信メールの処理エラー |
| draft | 承認待ち |
| ignored | ルールによってスキップされました |
送信に失敗したメールを検索する:
Tool: SN-Query-Table
Parameters:
table_name: sys_email
query: type=send-error^sys_created_onONLast 7 days@javascript:gs.daysAgoStart(7)@javascript:gs.daysAgoEnd(0)
fields: sys_id,recipients,subject,error,sys_created_on
limit: 100
ステップ 2:イベントキューを確認する
イベントキューをクエリする:
Tool: SN-Query-Table
Parameters:
table_name: sysevent
query: name=x_custom.incident.escalated^sys_created_onONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()
fields: sys_id,name,instance,parm1,parm2,state,sys_created_on
limit: 50
イベントの状態:
| 状態 | 意味 |
|---|---|
| ready | 処理待ちのキューに登録されています |
| processed | 正常に処理されました |
| error | 処理に失敗しました |
ステップ 3:通知設定を確認する
通知がアクティブか確認する:
Tool: SN-Query-Table
Parameters:
table_name: sysevent_email_action
query: sys_id=[notification_sys_id]
fields: name,active,event_name,condition,recipient_users,recipient_groups,recipient_fields
イベント登録を確認する:
Tool: SN-Query-Table
Parameters:
table_name: sysevent_register
query: event_name=[your_event_name]
fields: sys_id,event_name,table,description
ステップ 4:通知をテストする
テストイベントを発行する:
Tool: SN-Execute-Background-Script
Parameters:
script: |
// Test notification by firing event
var inc = new GlideRecord('incident');
inc.addQuery('active', true);
inc.setLimit(1);
inc.query();
if (inc.next()) {
gs.eventQueue('x_custom.incident.escalated', inc, inc.assigned_to.toString(), inc.assignment_group.toString());
gs.info('Test event fired for: ' + inc.number);
}
description: "Fire test notification event"
メールの生成を確認する:
Tool: SN-Query-Table
Parameters:
table_name: sys_email
query: recipients=[test_email]^ORsubjectLIKE[incident_number]^sys_created_onONLast hour@javascript:gs.hoursAgoStart(1)@javascript:gs.hoursAgoEnd(0)
fields: sys_id,type,recipients,subject,body,error
よくある問題
通知が発火しない
症状: レコードの変更後にメールが生成されない
原因:
- 通知が非アクティブ
- 条件に一致していない
- イベントが登録されていない
- 受信者が定義されていない
解決策:
Tool: SN-Query-Table
Parameters:
table_name: sysevent_email_action
query: collection=incident^active=true
fields: name,event_name,condition,active,recipient_users,recipient_groups
受信者がメールを受信できない
症状: メールは送信済みと表示されますが、ユーザーに届きません
原因:
- ユーザーのメールアドレスが無効、または未登録です
- ユーザーの通知設定が無効になっています
- メールが迷惑メールフィルターによってブロックされています
- 受信者の設定が正しくありません
解決方法:
Tool: SN-Query-Table
Parameters:
table_name: sys_user
query: sys_id=[user_sys_id]
fields: email,notification,active
ユーザーの通知設定を確認します:
Tool: SN-Query-Table
Parameters:
table_name: cmn_notif_message
query: user=[user_sys_id]
fields: notification,device,state
メールのステータスがsend-errorと表示される
症状: メールがエラーステータスで失敗します
原因:
- SMTP サーバーの設定
- 無効なメールアドレス
- メールサーバーによる拒否
- 添付ファイルが大きすぎます
解決方法: sys_email レコードの error フィールドを確認して、具体的なエラーメッセージを調べます。
変数が解決されない
症状: メールに値ではなく ${field_name} がそのまま表示されます
原因:
- 変数の構文が正しくありません
- テーブルにフィールドが存在しません
- フィールドの値が null または空です
解決方法: フィールドが存在することを確認します:
Tool: SN-Get-Table-Schema
Parameters:
table_name: incident
ツールの使用概要
MCP ツール(推奨)
| ツール | 用途 |
|---|---|
SN-Query-Table | 通知、イベント、メールログを照会します |
SN-Create-Record | 通知、テンプレート、メールスクリプトを作成します |
SN-Update-Record | 通知設定を変更します |
SN-Get-Table-Schema | 変数に使用可能なフィールドを確認します |
SN-Execute-Background-Script | テストイベントを発生させ、デバッグします |
REST API(代替手段)
| エンドポイント | メソッド | 用途 |
|---|---|---|
/api/now/table/sysevent_email_action | GET/POST | 通知を照会/作成します |
/api/now/table/sysevent_email_template | GET/POST | テンプレートを照会/作成します |
/api/now/table/sys_script_email | POST | メールスクリプトを作成します |
/api/now/table/sys_email | GET | メールログを確認します |
/api/now/table/sysevent_register | GET/POST | イベントを管理します |
ベストプラクティス
- イベントを使用: 疎結合にするため、直接通知するよりイベントベースの通知を優先します
- テンプレートを再利用: 通知間で一貫した書式にするため、テンプレートを作成します
- 本番以外の環境でテスト: まず開発/テスト環境で必ず通知をテストします
- メールキューを監視: sys_email を定期的に確認し、send-error レコードがないか調べます
- ユーザー設定: ユーザーの通知オプトアウト設定を尊重します
- 営業時間: 重要度の低いアラートでは、タイムゾーンと営業時間を考慮します
- HTML +プレーンテキスト: 互換性を最大限に高めるため、両方を用意します
- スパムを回避: 頻繁に発生するイベントにはダイジェストを使用します
- ウォーターマーク: 通知の重複を防ぐため、ウォーターマークを有効にしておきます
- イベントを文書化: 保守性を高めるため、カスタムイベントに説明を追加します
例
例 1:P1 インシデント通知の全体例
# 1. Register custom event
Tool: SN-Create-Record
Parameters:
table_name: sysevent_register
data:
event_name: "incident.p1.created"
table: "incident"
description: "Fired when Priority 1 incident is created"
# 2. Create notification
Tool: SN-Create-Record
Parameters:
table_name: sysevent_email_action
data:
name: "P1 Incident Alert - All Hands"
event_name: "incident.p1.created"
collection: "incident"
active: true
weight: 100
subject: "[URGENT] P1 Incident: ${number} - ${short_description}"
content_type: "text/html"
message_html: |
<h1 style="color: #d32f2f;">Priority 1 Incident Created</h1>
<p>A critical incident requires immediate attention.</p>
<table>
<tr><td><b>Number:</b></td><td>${number}</td></tr>
<tr><td><b>Description:</b></td><td>${short_description}</td></tr>
<tr><td><b>Caller:</b></td><td>${caller_id}</td></tr>
<tr><td><b>Assignment Group:</b></td><td>${assignment_group}</td></tr>
</table>
<p><a href="${URI_REF}">View Incident Now</a></p>
recipient_groups: [incident_managers_group_sys_id]
send_to_event_parm_1: true
send_to_event_parm_2: true
# 3. Create business rule to fire event
# (Create via UI or background script)
例 2:メールスクリプトを使用した承認リクエスト通知
# 1. Create mail script for manager chain
Tool: SN-Create-Record
Parameters:
table_name: sys_script_email
data:
name: "CC Manager Chain"
script: |
(function runMailScript(current, template, email, email_action, event) {
// Get requested_for user
var reqFor = current.document_id.requested_for;
if (reqFor) {
var user = new GlideRecord('sys_user');
user.get(reqFor);
// Add manager as CC
if (user.manager && user.manager.email) {
email.addAddress('cc', user.manager.email.toString(), user.manager.name.toString());
}
}
})(current, template, email, email_action, event);
# 2. Create notification with mail script
Tool: SN-Create-Record
Parameters:
table_name: sysevent_email_action
data:
name: "Approval Request - With Manager CC"
event_name: "approval.inserted"
collection: "sysapproval_approver"
active: true
subject: "Approval Required: ${document_id.number}"
recipient_fields: "approver"
sys_script_mail: [mail_script_sys_id]
message_html: |
<h2>Approval Request</h2>
<p>You have a pending approval request.</p>
<p><b>Request:</b> ${document_id.number}</p>
<p><b>Requested By:</b> ${document_id.requested_for}</p>
<p><a href="${URI_REF}">Approve/Reject</a></p>
例 3:SLA 違反の警告
Tool: SN-Create-Record
Parameters:
table_name: sysevent_email_action
data:
name: "SLA Warning - 75% Elapsed"
event_name: "sla.warning"
collection: "task_sla"
active: true
condition: "percentage>=75^percentage<100"
subject: "SLA Warning: ${task.number} at ${percentage}%"
recipient_fields: "task.assigned_to"
content_type: "text/html"
message_html: |
<h2 style="color: #ff9800;">SLA Warning</h2>
<p>The following task is approaching SLA breach:</p>
<table>
<tr><td><b>Task:</b></td><td>${task.number}</td></tr>
<tr><td><b>SLA:</b></td><td>${sla.name}</td></tr>
<tr><td><b>Percentage:</b></td><td>${percentage}%</td></tr>
<tr><td><b>Time Remaining:</b></td><td>${business_time_left}</td></tr>
</table>
<p><a href="${task.URI_REF}">View Task</a></p>
関連スキル
admin/workflow-creation- ワークフローによってトリガーされる通知catalog/approval-workflows- 承認通知itsm/incident-lifecycle- インシデント通知のトリガーadmin/script-execution- スクリプトによる通知のテスト