Criar um Emergency Outreach canal de notificação

  • Versão de lançamento: Washingtondc
  • Atualizado 1 de fev. de 2024
  • 4 min. de leitura
  • Crie um canal de notificação para enviar solicitações de status de integridade usando o método de comunicação preferencial da sua empresa, como as plataformas de colaboração Slack ou Microsoft Teams. Crie o canal de notificação usando um script ou um subfluxo.

    Antes de Iniciar

    Função necessária: sn_imt_checkin.checkin_admin ou admin

    Por Que e Quando Desempenhar Esta Tarefa

    Depois de criar um canal de notificação, você pode selecionar o canal ao enviar uma notificação. O canal usa o assunto e o corpo especificados e envia notificações para os usuários que você seleciona ao enviar a solicitação de status de integridade.

    Por exemplo, o grupo de rede de TI da sua empresa tem um canal Slack que eles monitoram mais de perto do que o e-mail. Crie um canal de notificação Slack. Para se comunicar com membros do grupo de rede de TI, selecione o grupo como público-alvo e selecione o canal de notificação Slack.

    Se as caixas de seleção Notificação por e -mail e Notificação porpush do Now Mobile estiverem marcadas, todas as três notificações serão enviadas. Para usar somente o canal de notificação Slack, desmarque essas duas caixas de seleção.

    Procedimento

    1. Navegar até Todos > Emergency Outreach > Canais.
    2. Clique em Nova.
      Novo registro de canal com a opção de script selecionada e o script padrão.
    3. Insira o nome do seu canal de notificação.
      Use um nome curto que indique o método de comunicação para facilitar para o solicitante escolher o canal correto.
    4. No campo Assunto, insira o assunto do seu canal de notificação.
    5. No campo Corpo, insira a mensagem do corpo.
    6. Crie um canal de notificação de script.
      1. No campo Tipo de notificação, deixe o tipo de notificação padrão de Script.
      2. No campo Script, substitua o código no comentário pelo script para se conectar ao seu canal.
        {
                    // sendNotification(responses.acknowledgementsGr.user.email, 
        channelGr.subject, channelGr.body);
                }
        Para obter informações sobre APIs JavaScript para GlideRecord, consulte GlideRecord - Scoped.
      3. Clique em Enviar.

      O exemplo a seguir inclui o código para contar o número de confirmações e instâncias de pesquisa geradas quando a notificação é enviada. Exibe o número de confirmações e instâncias de pesquisa que foram bem-sucedidas. Use essas informações para revisar e lidar com erros que aparecem na lista relacionada Log de entrega no registro do Outreach.

      (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. Crie um canal de notificação de subfluxo.
      1. Crie um subfluxo para usar na notificação de divulgação.
        Para obter informações sobre como criar, publicar e testar subfluxos, consulte Subfluxos.
        Use as seguintes entradas no subfluxo que você criar:
        • modo (cadeia de caracteres)
        • akcnowledgements (registros de sn_imt_checkin_check_in_acknowledgement)

          Se o modo for confirmações, as confirmações serão definidas como um GlideRecord válido e survey_instances será nulo.

        • survey_instances (registros de asmt_assessment_instance)

          Se o modo for survey_instances, survey_instances será definido como um GlideRecord válido e as confirmações serão nulas.

        • canal (referência de sn_imt_checkin_channels)
        As saídas a seguir são opcionais:
        • total_count (inteiro)
        • sent_count (inteiro)

        Para revisar essas saídas, inclua o número total de confirmações ou pesquisas em relação às confirmações ou pesquisas bem-sucedidas.

      2. Selecione o tipo de notificação Subfluxo.
        A seção Script muda para Fluxo e o campo de referência Subfluxo é exibido.
      3. Selecione o subfluxo que você criou.
    8. Clique em Enviar.

    Quando uma divulgação é enviada usando um canal de notificação personalizado, uma lista relacionada de logs de entrega aparece na mensagem de divulgação.

    Figura 1. Lista relacionada de logs de entrega
    Lista de logs de entrega relacionada mostrando um status de log com falha.
    1. Teste o canal de notificação para uma mensagem de divulgação e abra o registro com falha para revisar a mensagem de erro.
    2. Corrija erros que causaram a falha da notificação.
    3. Continue testando o canal de notificação até que ele não falhe mais.

    Slack script de canal

    Nota:
    O script a seguir é apenas para referência. Consulte-o ao desenvolver um script de canal de notificação para o seu ambiente.
    (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);