Criar um Contato para situação emergencial canal de notificação

  • Versão de lançamento: Xanadu
  • Atualizado 1 de ago. 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 Slack canal de notificação. 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 a escolha do canal correto pelo solicitante.
    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 - com escopo.
      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 ao 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 criado:
        • 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 seguintes saídas são opcionais:
        • total_count (inteiro)
        • sent_count (inteiro)

        Para revisar essas saídas, inclua o número total de confirmações ou pesquisas versus as confirmações ou pesquisas bem-sucedidas.

      2. Selecione o tipo de notificação de 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 um contato é enviado usando um canal de notificação personalizado, uma lista relacionada a Logs de entrega aparece na mensagem do Outreach.

    Figura 1. Lista relacionada de logs de entrega
    Logs de entrega [ lista relacionada mostrando um status de log com falha.
    1. Teste o canal de notificação de uma mensagem de divulgação e abra o registro com falha para revisar a mensagem de erro.
    2. Corrija os 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 é somente para referência. Consulte-o ao desenvolver um script de canal de notificação para 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);