Créer un canal de notification Sensibilisation d'urgence

  • Rversion finale: Yokohama
  • Mis à jour 30 janv. 2025
  • 4 minutes de lecture
  • Créez un canal de notification pour envoyer des demandes d'état de santé à l'aide de la méthode de communication préférée de votre entreprise, telle que les plateformes de collaboration Slack ou Microsoft Teams. Créez le canal de notification à l'aide d'un script ou d'un flux secondaire.

    Avant de commencer

    Rôle requis : sn_imt_checkin.checkin_admin ou admin

    Pourquoi et quand exécuter cette tâche

    Une fois que vous avez créé un canal de notification, vous pouvez sélectionner le canal lors de l'envoi d'une notification. Le canal utilise l'objet et le corps spécifiés et envoie des notifications aux utilisateurs que vous sélectionnez lorsque vous envoyez la demande d'état de santé.

    Par exemple, le groupe de réseaux informatiques de votre entreprise possède un canal Slack qu'il surveille plus étroitement que les e-mails. Créez un canal de notification Slack. Pour communiquer avec les membres du groupe de réseaux informatiques, sélectionnez le groupe en tant qu'audience cible et sélectionnez le canal de notification Slack.

    Si les cases à cocher Notification par e-mail et Notifications push Now Mobile sont sélectionnées, les trois notifications sont envoyées. Pour utiliser uniquement le canal de notification Slack, désactivez ces deux cases à cocher.

    Procédure

    1. Accédez à la Tout > Emergency Outreach > Canaux.
    2. Cliquez sur Nouveau.
      Nouvel enregistrement de canal avec l’option de script sélectionnée et le script par défaut.
    3. Saisissez le nom de votre canal de notification.
      Utilisez un nom court qui indique la méthode de communication pour faciliter le choix du canal correct pour le demandeur.
    4. Dans le champ Objet, saisissez l'objet de votre canal de notification.
    5. Dans le champ Corps, saisissez le corps du message.
    6. Créez un canal de notification de script.
      1. Dans le champ Type de notification, laissez le type de notification par défaut de Script.
      2. Dans le champ Script, remplacez le code dans le commentaire par le script à connecter à votre canal.
        {
                    // sendNotification(responses.acknowledgementsGr.user.email, 
        channelGr.subject, channelGr.body);
                }
        Pour plus d’informations sur les API JavaScript pour GlideRecord, consultez GlideRecord : champ d’application.
      3. Cliquez sur Envoyer.

      L'exemple suivant inclut du code pour compter le nombre d'accusés de réception et d'instances d'enquête générés lors de l'envoi de la notification. Il affiche le nombre de confirmations et d'instances d'enquête qui ont réussi. Utilisez ces informations pour examiner et gérer les erreurs qui s'affichent dans la liste connexe du journal de livraison dans l'enregistrement de sensibilisation.

      (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. Créez un canal de notification de flux secondaire.
      1. Créez un flux secondaire à utiliser dans la notification de sensibilisation.
        Pour plus d’informations sur la création, la publication et le test de flux secondaires, voir Flux secondaires.
        Utilisez les entrées suivantes dans le flux secondaire que vous créez :
        • mode (chaîne)
        • acknowledgements (enregistrements de sn_imt_checkin_check_in_acknowledgement)

          Si le mode est acknowledgements, les confirmations sont définies sur un GlideRecord valide et survey_instances est null.

        • survey_instances (enregistrements de asmt_assessment_instance)

          Si le mode est survey_instances, survey_instances est défini sur un GlideRecord valide et acknowledgements est null.

        • channel (référence de sn_imt_checkin_channels)
        Les sorties suivantes sont facultatives :
        • total_count (entier)
        • sent_count (entier)

        Pour passer en revue ces sorties, incluez le nombre total de confirmations ou d'enquêtes par rapport aux confirmations ou enquêtes réussies.

      2. Sélectionnez le type de notification Flux secondaire.
        La section Script passe à Flux et le champ de référence Flux secondaire s'affiche.
      3. Sélectionnez le flux secondaire que vous avez créé.
    8. Cliquez sur Envoyer.

    Lorsqu'une action de sensibilisation est envoyée à l'aide d'un canal de notification personnalisé, une liste connexe Journaux de livraison s'affiche dans le message de sensibilisation.

    Figure 1. Liste connexe Journaux de livraison
    Liste connexe des journaux de livraison affichant un état d’échec du journal.
    1. Testez le canal de notification pour un message de sensibilisation, puis ouvrez l'enregistrement ayant échoué pour examiner le message d'erreur.
    2. Corrigez les erreurs qui ont provoqué l'échec de la notification.
    3. Continuez à tester le canal de notification jusqu'à ce qu'il n'échoue plus.

    Script de canal Slack

    Remarque :
    Le script suivant est fourni à titre de référence uniquement. Consultez-le lorsque vous développez un script de canal de notification pour votre environnement.
    (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);