---
sourceDocument: Yokohama 従業員サービス管理 (ESM)
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/ja-JP/yokohama/employee-service-management

 Release :

    - yokohama

ft:locale :

    - ja-JP

ft:publication_title :

    - Yokohama 従業員サービス管理 (ESM)

ft:clusterId :

    - emplsm

bundleId :

    - emplsm

workflow :

    - Employee


---

# 通知チャネル エマージェンシーアウトリーチ を作成する

# 通知チャネル エマージェンシーアウトリーチ を作成する {#ariaid-title1}

* リリースバージョン: Yokohama
* 
* 更新日 2025年01月30日
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 所要時間：8分

Slack または Microsoft Teams コラボレーションプラットフォームなど、会社の優先コミュニケーション方法を使用して、健康状態要求を送信するための通知チャネルを作成し ます。スクリプトまたはサブフローを使用して、通知チャネルを作成します。

## 始める前に

必要なロール：sn_imt_checkin.checkin_admin または admin

## このタスクについて

通知チャネルを作成したら、通知を送信するときにチャネルを選択できます。チャネルでは、指定された件名と本文を使用し、健康状態要求を送信するときに選択したユーザーに通知を送信します。

たとえば、会社の IT ネットワークグループには、メールよりも綿密に監視する Slack チャネルがあります。Slack 通知チャネルを作成します。IT ネットワークグループメンバーと通信するには、グループをターゲット対象者として選択し、Slack 通知チャネルを選択します。

\[メール通知\] と \[Now Mobile プッシュ通知\] のチェックボックスが選択されている場合、3 つの通知がすべて送信されます。Slack 通知チャネルのみを使用するには 、これらの 2 つのチェックボックスをオフにします。

## 手順

1. 移動先 すべてエマージェンシーアウトリーチチャネル.
2. \[新規\] をクリックします。  
3. 通知チャネルの名前を入力します。  
   要求者が簡単に正しいチャネルを選択できるように、コミュニケーション方法を示す短い名前を使用します。
4. \[件名\] フィールドに、通知チャネルの件名を入力します。
5. \[本文\] フィールドに本文メッセージを入力します。
6. スクリプト通知チャネルを作成します。
   1. \[通知タイプ\] フィールドで、デフォルトの通知タイプである \[スクリプト\] のままにします。
   2. \[スクリプト\] フィールドで、コメント内のコードをスクリプトに置き換えて、チャネルに接続します。  

          {
                      // sendNotification(responses.acknowledgementsGr.user.email, 
          channelGr.subject, channelGr.body);
                  }

      GlideRecord の JavaScript API の詳細については、「[GlideRecord - スコープ対象](https://www.servicenow.com/docs/access?context=c_GlideRecordScopedAPI&version=yokohama&pubname=yokohama-api-reference&ft:locale=en-US)」を参照してください。
   3. \[送信\] をクリックします。

   {#create-emer-outreach-notif-channel__substeps_tlr_wqp_plb}  
   次の例には、通知が送信されたときに生成された確認応答とサーベイインスタンスの数をカウントするコードが含まれています。成功した確認応答とサーベイインスタンスの数が表示されます。この情報を使用して、アウトリーチレコードの \[配送ログ\] 関連リストに表示されるエラーを確認し、処理します。  

       (function notify(responses, channelGr) {
           var record = responses.mode === 'acknowledgements' 
               ? responses.acknowledgementsGr 
               : responses.surveyInstancesGr;
           var totalCount = record.getRowCount();
           var numSent = 0;
           while (record.next()) {
               try {
                   // sendNotification(record.user.email, channelGr.subject, channelGr.body)
                   numSent += 1;
               } catch (err) {
                   gs.error('Error occurred: ' + err.message);
               }
           }
           return { total_count: totalCount, sent_count: numSent };
       })(responses, channelGr);

7. サブフロー通知チャネルを作成します。
   1. アウトリーチ通知で使用するサブフローを作成します。  
      サブフローの作成、公開、およびテストの詳細については、「[サブフロー](https://www.servicenow.com/docs/access?context=subflows&version=yokohama&pubname=yokohama-build-workflows&ft:locale=en-US)」を参照してください。  
      作成するサブフローで以下の入力を使用します。
      * <var class="keyword varname">mode</var> (文字列)
      * <var class="keyword varname">acknowledgements</var> (sn_imt_checkin_check_in_acknowledgement のレコード)

        mode が <var class="keyword varname">acknowledgements</var> である場合、acknowledgements は有効な GlideRecord に設定され、 <var class="keyword varname">survey_instances</var> は `null` です。
      * <var class="keyword varname">survey_instances</var> (asmt_assessment_instance のレコード)

        mode が <var class="keyword varname">survey_instances</var> の場合、survey_instances は有効な GlideRecord に設定され、<var class="keyword varname">acknowledgements</var> は `null` です。
      * <var class="keyword varname">channel</var>(sn_imt_checkin_channels の参照)
      {#create-emer-outreach-notif-channel__ul_zg2_2rm_rlb}  
      次の出力はオプションです。
      * <var class="keyword varname">total_count</var> (整数)
      * <var class="keyword varname">sent_count</var> (整数)
      {#create-emer-outreach-notif-channel__ul_zmy_csm_rlb}

      これらの出力をレビューするには、成功した確認応答またはサーベイに対する合計の確認応答またはサーベイの数を含めます。
   2. \[サブフロー\] 通知タイプを選択します。  
      \[スクリプト\] セクションがフローに変わり、\[サブフロー\] 参照フィールドが表示されます。
   3. 作成したサブフローを選択します。
   {#create-emer-outreach-notif-channel__substeps_qn5_ytp_plb}
8. \[送信\] をクリックします。
カスタム通知チャネルを使用して Outreach が送信されると、\[配送ログ\] 関連リストが Outreach メッセージに表示されます。  
図 : 1. \[配送ログ\] 関連リスト  
1. Outreach メッセージに対して通知チャネルをテストし、失敗したレコードを開いてエラーメッセージを確認します。
2. 通知の失敗の原因になったエラーを修正します。
3. 失敗がなくなるまで、通知チャネルのテストを続行します。
{#create-emer-outreach-notif-channel__ol_o5x_33d_vlb}

## Slack チャネルスクリプト

注:  
次のスクリプトは参照専用です。お使いの環境向けの通知チャネルスクリプトを開発する場合は、それを参照してください。

    (function notify(responses, channelGr) {
        var createClient = function () {
            var client = new sn_ws.RESTMessageV2();      
            client.setRequestHeader('Authorization', 'Bearer xoxb-222222222222-1111111111111-000000000000000000000000');
            client.setRequestHeader("Accept", "application/json");
            client.setRequestHeader('Content-type', 'application/json');
            return client;
        };

        var getEmailToSlackIdMap = function (users) {
            var emailToSlackIdMap = {};
            for (var i = 0; i < users.length; i++) {
                var email = users[i].profile.email;
                if (email) {
                    emailToSlackIdMap[email] = users[i].id;
                }
            }
            return emailToSlackIdMap;
        };

        var runSlackCommand = function (method, params) {
            var client = createClient();
            client.setHttpMethod('post');
            client.setEndpoint('https://slack.com/api/' + method);
            client.setRequestBody(JSON.stringify(params));
            var response = client.execute();
            if (response.getStatusCode() < 200 || response.getStatusCode() > 299) {
                throw new Error('Failure running ' + method + ':\n' + response.getBody());
            }

            var body = JSON.parse(response.getBody());
            if (!body.ok) {
                throw new Error(body.error);
            }

            return body;
        };

        var sendMessage = function (userId, message) {
            var openConversationResponse = runSlackCommand('conversations.open', { users: userId });
            var channel = openConversationResponse.channel.id;
            runSlackCommand('chat.postMessage', { channel: channel, text: message });
        };

        var users = runSlackCommand('users.list').members;
        var emailToSlackIdMap = getEmailToSlackIdMap(users);
        var body = channelGr.getValue('body') || '<p></p>';
        var record = responses.mode === 'acknowledgements' ? responses.acknowledgementsGr : responses.surveyInstancesGr;
        var numSent = 0;

        while (record.next()) {
            var email = record.user.email + '';

            var link = responses.mode === 'acknowledgements'
                ? gs.getProperty('glide.servlet.uri') + record.getLink(true)
                : gs.getProperty('glide.servlet.uri') + 'sp?id=take_survey&instance_id=' + record.getUniqueValue();

            var message = body + '\n' + link;

            var slackId = emailToSlackIdMap[email];
            if (slackId) {
                sendMessage(slackId, message);
                numSent += 1;
            }
        }

        return { sent_count: numSent };
    })(responses, channelGr);


