Automatisation Gmail : Extraction des détails de commandes avec Google Apps Script

Gérer des commandes reçues par email peut vite devenir fastidieux si vous devez extraire manuellement les informations pertinentes. Heureusement, avec Google Apps Script, il est possible d’automatiser ce processus pour gagner du temps et réduire les erreurs.

Dans cet article, je vous montre comment créer un script capable de lire les emails d’un label spécifique dans Gmail et d’extraire automatiquement des informations clés telles que le numéro de commande, le nom du client, et la date de livraison.

Pourquoi automatiser l’extraction des commandes ?

L’automatisation de l’extraction des commandes présente plusieurs avantages :

  • Gain de temps : Plus besoin de parcourir manuellement chaque email.
  • Réduction des erreurs : L’extraction via des expressions régulières garantit une uniformité des données.
  • Intégration fluide : Les données extraites peuvent être directement utilisées dans Google Sheets ou d’autres outils de gestion.

Présentation du script

Voici le script utilisé pour automatiser cette tâche. Il fonctionne de la manière suivante :

  1. Lit les emails associés à un label Gmail (par exemple, “Commandes”).
  2. Identifie les emails non lus pour éviter de retraiter les mêmes messages.
  3. Analyse le contenu des emails avec des expressions régulières pour extraire les informations nécessaires.
  4. Stocke les données dans un tableau (donneesExtraites) qui peut être intégré à d’autres outils.

Code source

Voici le code 

function lireEmails() {
  // Modifier ce nom pour correspondre à celui de votre label Gmail
  const filsDeDiscussion = GmailApp.getUserLabelByName("Commandes").getThreads();
  // Tableau pour stocker les données extraites
  const donneesExtraites = [];
  filsDeDiscussion.forEach(fil => {
    if (!fil.isUnread()) return; // Ignorer les fils déjà lus
    fil.getMessages().forEach(email => {
      if (!email.isUnread()) return; // Ignorer les emails déjà lus
      const corpsTexte = email.getPlainBody();
      // Expression régulière pour extraire les détails des commandes
      const regexDetailsCommande = /(\*Order ID: \*.*\r\n\r\n\*Details:\*.*\r\n\r\nName: .*\r\n\r\nOrder Date: .*\r\nDelivery By: .*\r\n\*Country:\* .*)/g;
      // Extraction des détails des commandes
      const detailsCommandes = corpsTexte.match(regexDetailsCommande) || [];
      detailsCommandes.forEach(commande => {
        const commandeId = commande.match(/(?<=\*Commande n°: \*).*/)?.[0] || null;
        const details = commande.match(/(?<=\*Details:\* ).*/)?.[0] || null;
        const nom = commande.match(/(?<=Nom: ).*/)?.[0] || null;
        const dateCommande = commande.match(/(?<=Date commande: ).*/)?.[0] || null;
        const livraisonPar = commande.match(/(?<=Délivré par: ).*/)?.[0] || null;
        const pays = commande.match(/(?<=\*Pays:\* ).*/)?.[0] || null;
        // Ajouter les informations au tableau de données extraites
        donneesExtraites.push([
          commandeId,
          details,
          nom,
          dateCommande,
          livraisonPar,
          pays
        ]);
      });
      // Marquer l'email comme lu (désactiver cette ligne pour tester sans marquer comme lu)
      // email.markRead();
    });
  });

  // Afficher les données extraites dans la console pour vérification
  console.log(donneesExtraites);
}

Comment fonctionne le script ?

  1. Récupération des emails :

Le script commence par récupérer tous les fils de discussion liés à un label Gmail spécifique.

const filsDeDiscussion = GmailApp.getUserLabelByName("Commandes").getThreads();
  1. Filtrage des emails non lus :

Seuls les emails marqués comme non lus sont analysés pour éviter de retraiter les anciens messages.

if (!email.isUnread()) return; // Ignorer les emails déjà lus
  1. Extraction des données avec des regex :

Les détails des commandes sont extraits grâce à une expression régulière. Cette méthode garantit que seuls les éléments pertinents sont récupérés.

const regexDetailsCommande = /(\*Commande n°: \*.*\r\n\r\n\*Details:\*.*\r\n\r\nNom: .*\r\n\r\nOrder Date: .*\r\nDélivré par: .*\r\n\*Pays:\* .*)/g;
const detailsCommandes = corpsTexte.match(regexDetailsCommande) || [];
  1. Stockage des données :

Chaque commande est ajoutée à un tableau sous forme structurée.

donneesExtraites.push([
  commandeId,
  details,
  nom,
  dateCommande,
  livraisonPar,
  pays
]);
  1. (Optionnel) Marquer les emails comme lus :

Une fois le traitement terminé, les emails peuvent être marqués comme lus pour ne plus être réanalysés.

Étape suivante : Intégration avec Google Sheets

Une fois les données extraites, elles peuvent être insérées dans un Google Sheet pour faciliter leur exploitation. Voici un aperçu de l’intégration possible :

const feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
feuille.clear(); // Nettoyer les anciennes données
feuille.appendRow(["Commande N°", "Détails", "Nom", "Date de commande", "Livraison", "Pays"]);
donneesExtraites.forEach(ligne => feuille.appendRow(ligne));

Ce script est un excellent point de départ pour automatiser la gestion des commandes dans Gmail. Vous pouvez l’étendre pour répondre à vos besoins spécifiques, comme envoyer des notifications ou mettre à jour un tableau de bord.

Si cet article vous a aidé ou si vous avez des suggestions, n’hésitez pas à laisser un commentaire. Vous pouvez également explorer d’autres articles sur l’automatisation avec Google Apps Script sur mon blog.

L’atelier informatique, votre partenaire pour simplifier votre quotidien numérique !