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

  • リリースバージョン: Zurich
  • 更新日 2025年07月31日
  • 所要時間:8分
  • Slack または Microsoft Teams コラボレーションプラットフォームなど、会社の優先コミュニケーション方法を使用して、健康状態要求を送信するための通知チャネルを作成し ます。スクリプトまたはサブフローを使用して、通知チャネルを作成します。

    始める前に

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

    このタスクについて

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

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

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

    手順

    1. 移動先 すべて > エマージェンシーアウトリーチ > チャネル.
    2. [New] をクリックします。
      スクリプトオプションが選択されている新しいチャネルレコードとデフォルトのスクリプト。
    3. 通知チャネルの名前を入力します。
      要求者が簡単に正しいチャネルを選択できるように、コミュニケーション方法を示す短い名前を使用します。
    4. [件名] フィールドに、通知チャネルの件名を入力します。
    5. [本文] フィールドに本文メッセージを入力します。
    6. スクリプト通知チャネルを作成します。
      1. [通知タイプ] フィールドでは、デフォルトの通知タイプである [スクリプト] のままにします。
      2. [スクリプト] フィールドで、コメント内のコードをスクリプトに置き換えて、チャネルに接続します。
        {
                    // sendNotification(responses.acknowledgementsGr.user.email, 
        channelGr.subject, channelGr.body);
                }
        GlideRecord の JavaScript API の詳細については、「GlideRecord - スコープ対象」を参照してください。
      3. [送信] をクリックします。

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

      (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. アウトリーチ通知で使用するサブフローを作成します。
        サブフローの作成、公開、およびテストの詳細については、「サブフロー」を参照してください。
        作成するサブフローで以下の入力を使用します。
        • mode (文字列)
        • acknowledgements (sn_imt_checkin_check_in_acknowledgement のレコード)

          mode が acknowledgements である場合、acknowledgements は有効な GlideRecord に設定され、 survey_instancesnull です。

        • survey_instances (asmt_assessment_instance のレコード)

          mode が survey_instances の場合、survey_instances は有効な GlideRecord に設定され、acknowledgementsnull です。

        • channel(sn_imt_checkin_channels の参照)
        次の出力はオプションです。
        • total_count (整数)
        • sent_count (整数)

        これらの出力をレビューするには、成功した確認応答またはサーベイに対する合計の確認応答またはサーベイの数を含めます。

      2. [サブフロー] 通知タイプを選択します。
        [スクリプト] セクションがフローに変わり、[サブフロー] 参照フィールドが表示されます。
      3. 作成したサブフローを選択します。
    8. [送信] をクリックします。

    カスタム通知チャネルを使用して Outreach が送信されると、[配送ログ] 関連リストが Outreach メッセージに表示されます。

    図 : 1. [配送ログ] 関連リスト
    失敗したログのステータスを示す [配送ログ 関連 リスト。
    1. Outreach メッセージに対して通知チャネルをテストし、失敗したレコードを開いてエラーメッセージを確認します。
    2. 通知の失敗の原因になったエラーを修正します。
    3. 失敗がなくなるまで、通知チャネルのテストを続行します。

    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);