비상 연락 알림 채널 생성

  • 릴리스 버전: Xanadu
  • 업데이트 날짜 2024년 08월 01일
  • 소요 시간: 7분
  • Slack 또는 Microsoft Teams 협업 플랫폼 등 회사가 선호하는 커뮤니케이션 방법을 사용하여 건강 상태 요청을 보낼 알림 채널을 생성합니다. 스크립트나 하위 플로우를 사용하여 알림 채널을 생성합니다.

    시작하기 전에

    필요한 역할: sn_imt_checkin.checkin_admin 또는 admin

    이 태스크 정보

    알림 채널을 생성한 후에는 알림을 보낼 때 채널을 선택할 수 있습니다. 채널은 지정된 제목과 본문을 사용하며, 건강 상태 요청을 보내면 선택한 사용자에게 알림을 전송합니다.

    예를 들어 회사의 IT 네트워크 그룹에는 이메일보다도 더욱 면밀하게 모니터링하는 Slack 채널이 있습니다. Slack 알림 채널을 생성합니다. IT 네트워크 그룹 구성원과 커뮤니케이션하려면 그룹을 대상으로 선택하고 Slack 알림 채널을 선택합니다.

    이메일 알림Now Mobile 푸시 알림 확인란을 선택하면 세 가지의 알림이 모두 전송됩니다. Slack 알림 채널만 사용하려면 이 두 확인란의 선택을 취소하십시오.

    프로시저

    1. 다음으로 이동 모두 > Emergency Outreach > 채널.
    2. 새로 만들기를 클릭합니다.
      스크립트 옵션이 선택되고 기본 스크립트가 있는 새 채널 기록입니다.
    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의 기록)

          모드가 acknowledgements인 경우 acknowledgements는 유효한 GlideRecord로 설정되며 survey_instancesnull입니다.

        • survey_instances(asmt_assessment_instance의 기록)

          모드가 survey_instances인 경우 service_instances는 유효한 GlideRecord로 설정되며 acknowledgementsnull입니다.

        • channel(sn_imt_checkin_channels의 참조)
        다음 출력은 선택 사항입니다.
        • total_count(정수)
        • sent_count(정수)

        이러한 출력을 검토하려면 총 확인 또는 설문 조사 개수와 성공적인 확인 또는 설문 조사에 대한 개수를 포함하십시오.

      2. 하위 플로우 알림 유형을 선택합니다.
        스크립트 섹션이 플로우로 바뀌고 하위 플로우 참조 필드가 표시됩니다.
      3. 생성한 하위 플로우를 선택하십시오.
    8. 제출을 클릭합니다.

    사용자 지정 알림 채널을 사용하여 지원이 전송되면 지원 메시지에 제공 로그 관련 목록이 표시됩니다.

    그림 1. 제공 로그 관련 목록
    실패한 로그 상태를 보여주는 배달 로그 관련 목록입니다.
    1. 지원 메시지 알림 채널을 테스트한 다음 실패 기록을 열어 오류 메시지를 검토합니다.
    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);