Automatisation d’un mailing ciblé avec Google Apps Script et Mailmeteor

Dans le cadre de la communication interne d’une entreprise, atteindre efficacement les bons interlocuteurs est crucial, en particulier lorsqu’il s’agit d’envoyer des informations importantes aux employés ayant des responsabilités managériales. La tâche de cibler ces responsables pour un mailing peut rapidement devenir complexe et chronophage. Heureusement, l’automatisation offre une solution élégante et efficace à ce défi. Voici comment un script Google Apps Script, en conjonction avec Mailmeteor, peut transformer cette tâche ardue en un processus fluide et sans erreur.

Le contexte

Notre objectif était de réaliser un mailing ciblé vers tous les salariés ayant des équipes sous leur responsabilité. Le défi résidait dans l’identification précise de ces responsables au sein d’une grande organisation, puis dans l’envoi d’un courriel personnalisé et pertinent à chacun d’eux. La solution devait non seulement être précise mais également suffisamment flexible pour s’adapter aux changements dynamiques de la structure organisationnelle.

La solution: un script en deux phases

La solution que nous avons développée se déploie en deux phases principales, exploitant la puissance de Google Apps Script et l’intégration avec Mailmeteor, un outil populaire pour les campagnes d’emailing directement depuis Google Sheets.

Phase 1 : Identification des responsables

Le cœur de notre script réside dans son aptitude à identifier automatiquement les salariés ayant des postes de responsabilité. En utilisant l’API Admin Directory de Google, le script parcourt tous les comptes utilisateurs, identifiant ceux qui ont des relations marquées comme « manager ». Ces emails sont ensuite collectés et stockés, assurant que seuls les responsables d’équipes soient ciblés.

// Récupération et traitement des utilisateurs pour identifier les responsables
do {
  // ...
  utilisateurs.forEach(function(utilisateur) {
    if (utilisateur.relations) {
      utilisateur.relations.forEach(function(relation) {
        if (relation.type === 'manager') {
          emailsDesResponsables.add(relation.value.toLowerCase());
        }
      });
    }
  });
  // ...
} while (jetonDePage);

Phase 2 : Envoi du mailing avec Mailmeteor

Après avoir identifié les responsables, la prochaine étape est de préparer et d’envoyer les emails. Ici, nous intégrons Mailmeteor, un add-on pour Google Sheets permettant d’envoyer des emails personnalisés à grande échelle. Les responsables identifiés sont inscrits dans une feuille Google Sheets, où Mailmeteor est ensuite utilisé pour concevoir et envoyer le message ciblé.

// Écriture des responsables dans la feuille Google Sheets pour l'utilisation avec Mailmeteor
ecrireDansLaFeuille(responsables);

Avec les informations désormais en place dans Google Sheets, le mailing peut être personnalisé et envoyé via Mailmeteor, offrant une interface simple pour gérer le contenu du courriel, les destinataires, et suivre les ouvertures et les clics, garantissant ainsi une communication efficace et mesurable.

Avantages de l’approche automatisée

  • Précision accrue: En automatisant l’identification des responsables, nous éliminons les erreurs manuelles et assurons que seuls les destinataires pertinents sont contactés.
  • Efficacité opérationnelle: Le temps économisé en évitant la saisie manuelle des données et la sélection des destinataires est considérable, permettant aux équipes de se concentrer sur des tâches à plus haute valeur ajoutée.
  • Adaptabilité: La structure de l’entreprise évoluant, le script s’adapte automatiquement aux changements, garantissant que le mailing reste pertinent et à jour.
  • Personnalisation et suivi: L’utilisation de Mailmeteor permet une personnalisation avancée des emails et offre des outils de suivi, essentiels pour évaluer l’efficacité de la communication.

Le code complet

// Fonction principale pour lister les responsables et les écrire dans une feuille Google Sheets
function listerLesResponsablesEtEcrireDansLaFeuille() {
  // Initialisation des variables
  var tousLesUtilisateurs = []; // Pour stocker tous les utilisateurs récupérés
  var emailsDesResponsables = new Set(); // Pour stocker les emails des responsables, en évitant les doublons
  var responsables = []; // Pour stocker les informations finales des responsables à écrire dans la feuille
  var jetonDePage; // Pour la pagination des résultats de l'API
  var page; // Pour stocker temporairement les données de chaque page récupérée
 
  // Boucle pour récupérer tous les utilisateurs, page par page
  do {
    // Récupération d'une page d'utilisateurs
    page = AdminDirectory.Users.list({
      customer: 'IDENTIFIANT', // Identifiant du client
      maxResults: 100, // Nombre maximal d'utilisateurs par page
      pageToken: jetonDePage, // Jeton pour la pagination
      projection: "full" // Demande de toutes les informations des utilisateurs
    });
   
    // Traitement des utilisateurs de la page courante
    var utilisateurs = page.users;
    if (utilisateurs) {
      // Ajout des utilisateurs de la page au tableau total
      tousLesUtilisateurs = tousLesUtilisateurs.concat(utilisateurs);
      // Pour chaque utilisateur, vérifier s'il a des relations marquées comme "manager"
      utilisateurs.forEach(function(utilisateur) {
        if (utilisateur.relations) {
          utilisateur.relations.forEach(function(relation) {
            if (relation.type === 'manager') {
              // Si la relation est de type "manager", ajouter l'email au Set des responsables
              emailsDesResponsables.add(relation.value.toLowerCase());
            }
          });
        }
      });
    }
   
    // Mise à jour du jeton de pagination pour la prochaine itération
    jetonDePage = page.nextPageToken;
  } while (jetonDePage); // Continuer tant qu'il y a des pages
 
  // Identification et préparation des informations des responsables pour l'écriture dans la feuille
  tousLesUtilisateurs.forEach(function(utilisateur) {
    // Vérifier si l'email de l'utilisateur est dans le Set des responsables
    if (emailsDesResponsables.has(utilisateur.primaryEmail.toLowerCase())) {
      // Récupération du statut du responsable, avec gestion de l'absence d'information
      var statut = (utilisateur.customSchemas && utilisateur.customSchemas.Ressources_humaines && utilisateur.customSchemas.Ressources_humaines.Statut) ? utilisateur.customSchemas.Ressources_humaines.Statut : "Non spécifié";
      // Ajout de l'utilisateur au tableau des responsables
      responsables.push([utilisateur.name.givenName, utilisateur.name.familyName, utilisateur.primaryEmail, statut]);
    }
  });
 
  // Écriture des responsables dans la feuille Google Sheets
  ecrireDansLaFeuille(responsables);
}

// Fonction pour écrire les données dans la feuille Google Sheets
function ecrireDansLaFeuille(donnees) {
  var feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Accès à la feuille active
 
  // Définition et écriture des en-têtes
  var enTetes = ["Prénom", "Nom", "Email", "Statut"];
  feuille.getRange(1, 1, 1, enTetes.length).setValues([enTetes]).setFontWeight("bold");
  feuille.setFrozenRows(1); // Gel de la première ligne pour les en-têtes
 
  // Préparation pour l'écriture des données
  var debutEcriture = 2; // La ligne à partir de laquelle écrire les données
  var derniereLigne = feuille.getLastRow();
  var nbLignes = derniereLigne - debutEcriture + 1;
  if (nbLignes > 0) {
    // Effacement du contenu précédent si nécessaire
    feuille.getRange(debutEcriture, 1, nbLignes, enTetes.length).clearContent();
  }

  // Écriture des nouvelles données si disponibles
  if (donnees.length > 0) {
    feuille.getRange(debutEcriture, 1, donnees.length, donnees[0].length).setValues(donnees);
  } else {
    Logger.log("Aucune donnée à écrire."); // Log si aucune donnée à écrire
  }
}

// Fonction exécutée lors de l'ouverture de la feuille, ajoutant un menu personnalisé
function onOpen(e) {
  var ui = SpreadsheetApp.getUi(); // Accès à l'interface utilisateur
  // Création d'un nouveau menu avec un item pour exécuter la fonction principale
  ui.createMenu('Gestion Workspace')
      .addItem('Lister les Responsables', 'listerLesResponsablesEtEcrireDansLaFeuille')
      .addToUi();
}

Conclusion

L’automatisation de l’envoi de mailings ciblés vers les responsables d’équipes via Google Apps Script et Mailmeteor représente une avancée significative dans la gestion de la communication interne. Cette approche non seulement rationalise un processus potentiellement laborieux mais ouvre également la voie à une communication plus efficace, personnalisée et adaptative au sein des organisations modernes. Pour les administrateurs système et les professionnels de l’IT cherchant à optimiser les opérations internes, l’adoption de telles solutions automatisées marque un pas en avant vers une gestion plus efficace des ressources humaines et de la communication.

2 réflexions au sujet de “Automatisation d’un mailing ciblé avec Google Apps Script et Mailmeteor”

  1. I have been browsing on-line greater than three hours these
    days, yet I by no means found any fascinating article like
    yours. It is pretty value sufficient for me. Personally, if all web owners and
    bloggers made excellent content material as you did, the
    net shall be a lot more helpful than ever before.

    • Thank you so much for your kind words! I am truly touched to learn that my article resonated with you to such an extent. Your comment is a wonderful reward for the effort and passion I put into creating my content. My aim is always to provide useful, interesting, and engaging information, and knowing that this has been appreciated by someone makes all the difference. I hope to continue offering you articles that enrich your online experience. Please feel free to share your thoughts or topics you would like to see addressed in the future. Once again, thank you for being part of my reader community. Looking forward to continuing to share with you!

Laisser un commentaire