Capturez les messages Gmail dans une feuille Google

0
223


Avec Google Apps Script, les spécialistes du marketing peuvent capturer les messages Gmail, les analyser pour en extraire les informations pertinentes et les ajouter ligne par ligne à une feuille de calcul Google.

Cela peut être particulièrement utile pour capturer des pistes ou des contacts.

comment créer une société offshore?

Voici un scénario. Imaginez que votre entreprise de commerce électronique ait décidé de travailler avec une organisation caritative. Les participants soumettent des propositions via le site web de l’organisation caritative. Votre tâche consiste à lire ces propositions, à sélectionner les personnes que votre entreprise peut aider et à les contacter pour démarrer.

Le problème est que le site web de l’organisation caritative a été construit dans les années 1990 sur une plateforme propriétaire et verrouillée. Les contributions présentées sur le site ne peuvent pas être ajoutées à une base de données ou stockées d’une autre manière. Elles ne peuvent vous être envoyées par courrier électronique qu’en format texte.

La solution ? Capturer et analyser ces courriels pour faciliter l’interaction en les ajoutant à une feuille Google. Dans cet article, je vais vous expliquer comment faire.

Feuille et scénario

Le travail commence par la création d’une nouvelle fiche Google. Je la nommerai « Exemple de courriel de charité ».

Commencez par une nouvelle fiche Google.

Commencez par une nouvelle fiche Google.

Allez dans le menu « Outils » de la feuille et sélectionnez l’élément de menu « Éditeur de script ».

Associer des feuilles de calcul Google à des scripts personnalisés via le

Associer des feuilles de calcul Google à des scripts personnalisés via l' »éditeur de scripts ».

Ce lien ouvrira un nouvel éditeur de script Google, dans lequel nous ferons notre travail. J’ai nommé ce script « Exemple de courriel de charité ». L’éditeur de script nous permet d’écrire des fonctions JavaScript qui s’exécuteront sur notre tableur.

Utilisez l'éditeur de script pour écrire des fonctions JavaScript à exécuter sur la feuille de calcul.

Utilisez l’éditeur de script pour écrire des fonctions JavaScript à exécuter sur la feuille de calcul.

Il existe de nombreuses façons d’écrire un script pour récupérer des messages Gmail et les ajouter à une feuille de calcul Google. Dans cet exemple, j’utiliserai quatre fonctions : onOpen, rassemblez, getGmailet parseEmail.

onOpen

Le onOpen est unique dans Google Apps Scripts. Elle s’exécute toujours lorsqu’une feuille est ouverte. Ainsi, le nom doit être onOpen. Vous pouvez cependant lui faire faire à peu près tout ce que vous voulez. Dans notre cas, nous ajouterons un nouveau menu et un nouvel élément de menu à la fiche.

function onOpen() {
    const spreadsheet = SpreadsheetApp.getActive();
    let menuItems = [
        {name: 'Gather emails', functionName: 'gather'},
    ];
    spreadsheet.addMenu('Charity', menuItems);
}

Cette fonction comporte trois parties.

Tout d’abord, nous utiliserons le SpreadsheetApp pour obtenir la feuille active, c’est-à-dire la feuille que l’utilisateur regarde. Cet objet feuille est affecté à la constante JavaScript « feuille de calcul ».

const spreadsheet = SpreadsheetApp.getActive();

Ensuite, je vais créer un ensemble d’éléments de menu. Dans cet exemple, notre tableau n’a qu’un seul élément de menu, mais il pourrait en avoir plusieurs. En l’écrivant de cette façon, il sera plus facile d’ajouter des éléments de menu selon les besoins.

Il convient de noter que functionName décrit la fonction de rappel qui s’exécute lorsqu’un utilisateur clique sur l’élément de menu « Recueillir les courriels ». Dans ce cas, j’appellerai une fonction nommée rassemblez.

let menuItems = [
    {name: 'Gather emails', functionName: 'gather'},
];

La documentation de Google décrit en détail comment ajouter un menu. Pour nos besoins, il vous suffit d’utiliser le addMenu en le passant, d’abord, au nom du menu et, ensuite, à l’ensemble des éléments du menu.

spreadsheet.addMenu('Charity', menuItems);

Dans l’éditeur de script, nous pouvons exécuter cette fonction en cliquant sur le bouton « Exécuter », le triangle noir qui ressemble à un bouton de lecture d’une vidéo. Nous pouvons également rafraîchir la feuille de calcul, mais cela fermerait l’éditeur de script. S’il se ferme, nous pouvons le rouvrir à partir du menu Outils.

Le bouton

Le bouton « Exécuter » nous permet d’exécuter une fonction sélectionnée dans l’éditeur de script.

La première fois que vous lancerez l’application, vous devrez lui accorder la permission d’accéder à votre compte Google.

Autorisez le script à accéder à votre compte Google.

Autorisez le script à accéder à votre compte Google.

Après l’exécution de cette fonction, nous passerons à un nouveau menu et à un nouvel élément de menu dans la feuille de calcul de la charité.

Un nouveau menu et un nouvel élément de menu apparaîtront sur la feuille de calcul.

Un nouveau menu et un nouvel élément de menu apparaîtront sur la feuille de calcul.

rassemblez

Ensuite, écrivons le rassemblez fonction.

Ici, le nom doit être logique. Pour moi, « rassembler » traduit l’idée de rassembler et d’organiser. Cependant, vous pouvez nommer la fonction comme vous le souhaitez.

function gather() {
    let messages = getGmail();

    let curSheet = SpreadsheetApp.getActive();

    messages.forEach(message => {curSheet.appendRow(parseEmail(message))});
}

La fonction remplit trois tâches.

Tout d’abord, il récupère tous les messages électroniques de bienfaisance en appelant le getGmail fonction, que j’écrirai ensuite.

let messages = getGmail();

Ensuite, il utilise le SpreadsheetApp pour obtenir la feuille active.

let curSheet = SpreadsheetApp.getActive();

Enfin, la fonction itère à travers tous les messages, en ajoutant le contenu souhaité de chacun d’eux dans le tableur après l’avoir envoyé à l parseEmail fonction que nous n’avons pas encore écrite.

messages.forEach(message => {curSheet.appendRow(parseEmail(message))});

Il se passe beaucoup de choses dans cette dernière étape, alors passons-la en revue.

Pour chaque message dans messagesla fonction obtient la feuille actuelle, curSheet.

Il utilise ensuite le moteur de recherche de Google appendRow méthode pour ajouter une ligne à la feuille. Cette méthode prend normalement un objet de type tableau. Mais dans ce cas, nous fournissons le résultat d’une autre fonction, parseEmailqui, à son tour, fournira l’ensemble requis.

getGmail

Le getGmail est la fonction qui fonctionne le mieux.

Tout d’abord, nous avons fixé la valeur d’une constante JavaScript appelée « query » à une chaîne de recherche Gmail.

const query = "from:a@e.com AND subject:Charity Example NOT label:done";

Cette chaîne de recherche est exactement celle que vous utiliseriez pour une recherche avancée dans Gmail. Notez que nous spécifions l’adresse « de » et le « sujet » de l’e-mail. Nous veillons également à ce que le message électronique ne comporte pas l’étiquette « fait ».

La chaîne de recherche est identique à une recherche avancée dans Gmail.

La chaîne de recherche est identique à une recherche avancée dans Gmail.

Ensuite, nous utilisons le système Google GmailApp pour effectuer une recherche sur la boîte de réception de l’utilisateur. Le résultat de cette recherche sera tous les fils de l’organisation caritative avec le sujet correct.

let threads = GmailApp.search(query);

Si votre compte Gmail contient de nombreux messages, vous pouvez obtenir des lots de dix. Cela permettra d’accélérer le script.

let threads = GmailApp.search(query,0,10);

Les deux lignes suivantes de la fonction permettent d’éviter qu’un courriel soit ajouté deux fois à notre tableur.

N’oubliez pas que dans la requête de recherche, nous avons exclu les messages portant l’étiquette « done ». Nous ajoutons donc maintenant le label « done » aux messages que nous venons de récupérer. Lorsque le script s’exécutera ensuite, il ignorera ces messages.

La première ligne utilise le moteur de recherche Google getUserLabelByName pour trouver le label « done » et l’attribuer à la variable « label ». Si ce label n’existe pas encore dans le compte Gmail de l’utilisateur, la ligne suivante le créera.

let label = GmailApp.getUserLabelByName("done");
if (!label) {label = GmailApp.createLabel("done")}

La dernière section de cette fonction collecte chaque message électronique, l’ajoute au tableau des « messages » et l’étiquette « fait ».

threads.forEach(thread => {
    messages.push(thread.getMessages()[0].getPlainBody());
    label.addToThread(thread);
});

Enfin, la fonction renvoie l’ensemble des messages.

return messages;

Ce qui suit est le formulaire rempli getGmail fonction.

function getGmail() {
    const query = "from:roggio@yahoo.com AND subject:Charity Example NOT label:done";

    let threads = GmailApp.search(query);

    let label = GmailApp.getUserLabelByName("done");
    if (!label) {label = GmailApp.createLabel("done")}

    let messages = [];

    threads.forEach(thread => {
        messages.push(thread.getMessages()[0].getPlainBody());
        label.addToThread(thread);
    });

    return messages;
}

parseEmail

La dernière fonction « analyse » le message électronique et le met en forme pour qu’il s’adapte à notre tableur.

Cette fonction doit être spécifique au format de texte simple du message. Voyons donc ce que le site web de l’organisation caritative nous envoie.

date: Thu, April 16, 2020

first_name: Olga
last_name: Razcok
email: oraxcok@example.com
phone: 202-456-1111
ip: 35.138.107.243
comment: I would really like to participate in this program.
fav_color: brown

Je vais appliquer des expressions régulières JavaScript pour nettoyer et formater cette copie de message. J’utiliserai Regex Pal, un outil d’expressions régulières, pour déterminer quelles expressions feraient ce dont j’ai besoin.

Regex Pal vous permet de voir à quelles parties du texte une expression régulière particulière correspondra.

Regex Pal vous permet de voir à quelles parties du texte une expression régulière particulière correspondra.

J’utiliserai des virgules plus tard pour séparer les éléments de la liste. Je supprimerai donc les virgules dans la date pour éviter toute confusion.

date: Thu, April 16, 2020

Cette expression régulière remplacera les virgules par une chaîne vide, qui n’est en fait rien.

let parsed = message.replace(/,/g,'')

Dans ce cas, le « message » est le message transmis à la parseEmail de la fonction rassemblez fonction que j’ai écrite plus tôt.

L’expression régulière suivante est puissante car elle supprime la plupart des caractères de saut de ligne (n) de notre message électronique en texte clair et supprime tous les caractères précédents, y compris les deux points.

Par exemple, il transforme « prénom : Olga » en « , Olga, » (oui, c’est une virgule, un espace et le mot « Olga »).

let parsed = message.replace(/,/g,'')
    .replace(/n*.+:/g,',')

L’étape précédente laissera une virgule non désirée avant la date. Ainsi, la prochaine remplacer la déclaration le supprime.

let parsed = message.replace(/,/g,'')
    .replace(/n*.+:/g,',')
    .replace(/^,/,'')

Il reste encore quelques caractères de soulignement. La déclaration suivante les supprime.

let parsed = message.replace(/,/g,'')
    .replace(/n*.+:/g,',')
    .replace(/^,/,'')
    .replace(/n/g,'')

Nous avons maintenant une chaîne de caractères séparés par des virgules qui ressemble à ce qui suit :

Thu April 16 2020, Olga, Razcok, oraxcok@...

Nous pouvons transformer cela en un tableau avec JavaScript intégré split méthode.

let parsed = message.replace(/,/g,'')
    .replace(/n*.+:/g,',')
    .replace(/^,/,'')
    .replace(/n/g,'')
    .split(',');

Maintenant, notre message électronique est compartimenté, si vous voulez, sous forme de tableau.

["Thu April 16 2020", "Olga", "Razcok", "oraxcok@..."]

Vous pourriez presque vous arrêter maintenant. Ajoutez une simple déclaration de retour, et le script fonctionnerait.

return message;

Il y a cependant une autre amélioration que nous pouvons apporter. Le message électronique contient des informations dont nous n’avons pas besoin, telles que l’adresse IP (protocole Internet) de la personne qui l’a envoyé et sa couleur préférée.

ip: 35.138.107.243
fav_color: brown

Nous pouvons les retirer de notre gamme avec cartela méthode des tableaux JavaScript. Ici, le résultat de la carte est attribuée à la variable « résultat ».

let result = [0,1,2,3,4,6].map(index => parsed[index]);

Cette ligne est dense, alors prenons-la morceau par morceau. Tout d’abord, nous avons un tableau de chiffres.

[0,1,2,3,4,6]

Les chiffres de ce tableau représentent les positions dans le message de l’ensemble. N’oubliez pas que les tableaux sont basés sur le zéro. Lorsque vous comptez les positions dans un tableau, vous commencez à zéro.

  • Date – position 0
  • Prénom – poste 1
  • Nom de famille – poste 2
  • Courriel – position 3
  • Téléphone – position 4
  • IP – position 5
  • Commentaire – position 6
  • Couleur préférée – position 7

Le carte prendra chaque nombre du tableau et l’affectera à la valeur « index », créant ainsi un nouveau tableau moins l’adresse IP indésirable et les données de couleur favorite.

[0,1,2,3,4,6].map(index => parsed[index]);

Voici ce qu’a donné le parseEmail fonction ressemble.

function parseEmail(message){
    let parsed = message.replace(/,/g,'')
        .replace(/n*.+:/g,',')
        .replace(/^,/,'')
        .replace(/n/g,'')
        .split(',');

    let result = [0,1,2,3,4,6].map(index => parsed[index]);

    return result;
}

Essayez-le

En supposant que l’organisme de bienfaisance a envoyé un courriel en texte clair ayant le même format que ci-dessus, lorsque vous cliquez sur l’élément de menu « Rassembler les courriels », vous obtenez une nouvelle ligne.

Le script a ajouté une ligne au tableur. Il ajoutera une ligne pour chaque courriel que l’organisme de bienfaisance envoie chaque fois que l’on cliquera sur l’élément de menu « Rassembler les courriels ».