mcpField
N
notifications

notifications

github.com/happy-technologies-llc開発4142 回インストール2 日前に更新
リポジトリ

notifications について

ServiceNowの通知を設計・管理する開発スキルです。レコード変更、承認、SLA、業務イベントの通知を構築するチーム向けに、イベント、テンプレート、宛先ロジック、SMS・プッシュ、配信調査を扱います。

主な機能

  1. 01イベント型と条件型通知の設定
  2. 02再利用可能なメールテンプレートの作成
  3. 03固定および動的な宛先の設定
  4. 04SMSとプッシュ通知の設定
  5. 05通知の絞り込み、優先順位付け、調査

活用シーン

  1. 01インシデント変更時の担当者通知
  2. 02承認やSLAのアラート送信
  3. 03動的な宛先を使う通知の構築
  4. 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.assignedincidentインシデントがユーザー/グループに割り当てられた
incident.commentedincidentコメントが追加された
incident.resolvedincidentインシデントが解決された
incident.reopenedincidentインシデントが再開された
change.approval.rejectedchange_request変更の承認が却下された
change.itil.approval.rejectedchange_requestITIL 変更が却下された
sc_request.approvedsc_requestリクエストが承認された
sla.warningtask_slaSLA の警告しきい値に達した
sla.breachedtask_slaSLA に違反した
approval.insertedsysapproval_approver承認レコードが作成された
task.assignedtaskタスクが割り当てられた
ステップ 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_1gs.eventQueue の 1 番目のパラメーター
send_to_event_parm_2gs.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!=6P1、未解決
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
よくある問題
通知が発火しない

症状: レコードの変更後にメールが生成されない
原因:

  1. 通知が非アクティブ
  2. 条件に一致していない
  3. イベントが登録されていない
  4. 受信者が定義されていない

解決策:

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
受信者がメールを受信できない

症状: メールは送信済みと表示されますが、ユーザーに届きません
原因:

  1. ユーザーのメールアドレスが無効、または未登録です
  2. ユーザーの通知設定が無効になっています
  3. メールが迷惑メールフィルターによってブロックされています
  4. 受信者の設定が正しくありません

解決方法:

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と表示される

症状: メールがエラーステータスで失敗します
原因:

  1. SMTP サーバーの設定
  2. 無効なメールアドレス
  3. メールサーバーによる拒否
  4. 添付ファイルが大きすぎます

解決方法: sys_email レコードの error フィールドを確認して、具体的なエラーメッセージを調べます。

変数が解決されない

症状: メールに値ではなく ${field_name} がそのまま表示されます
原因:

  1. 変数の構文が正しくありません
  2. テーブルにフィールドが存在しません
  3. フィールドの値が 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_actionGET/POST通知を照会/作成します
/api/now/table/sysevent_email_templateGET/POSTテンプレートを照会/作成します
/api/now/table/sys_script_emailPOSTメールスクリプトを作成します
/api/now/table/sys_emailGETメールログを確認します
/api/now/table/sysevent_registerGET/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 - スクリプトによる通知のテスト

参考資料

コメント