Comment j'ai trié, archivé et répondu à 14219 mails automatiquement avec l'IA (Gmail)
Avec Make & ChatGPT.
Note 1 : Autorise les images pour profiter de cette newsletter et ajoute cette adresse en contact pour m’aider à ce qu’elle ne finisse pas en spam. Si cette newsletter t’a été transféré, tu peux t’abonner ici.
Note 2 : Cette newsletter est trop longue et sera tronquée, tu devras cliquer sur “Voir le message en entier”.
Cela fait des années que j’empile les mails dans ma boîte Gmail. L’arrivée de la version GPT-4o Mini change beaucoup de choses. Avec sa puissance et son coût quasi inexistant, il devient tout de suite envisageable de laisser gérer ma boîte mail de manière 100 % automatisée avec l’IA.
Et j’ai pensé à toi, toi qui n’utilises pas de code. Habituellement, j’aurais écrit un script en 20 minutes pour régler le problème. Mais là, non.
Je sais qu’une bonne partie des gens qui me suivent ne voudra jamais modifier et adapter un script Python. J’ai donc passé 10 fois plus de temps à le réaliser avec Make.
Pour que toi, qui que tu sois, d’où que tu viennes, tu puisses aussi profiter de la puissance de l’IA et enfin avoir l’inbox 0 en automatique dont tu rêves 😎.
Alors, que fait donc ce scénario Make tentaculaire ?
Son objectif est simple : trier votre inbox dans vos propres catégories, archiver les mails qui ne demandent pas de réponse et préparer une réponse aux mails qui en demandent. La réponse se trouvera en brouillon, prête à être envoyée.
Voici mes propres catégories de mails pour te donner un point de référence :
Il s’agit d’une boîte mail principalement perso, mais que j’utilise aussi partiellement pour du pro. Oui, je sais, c’est le bordel.
C’est bien pour ça que j’ai besoin de l’IA.
Je sais qu’une part importante d’entre vous ne suivra pas ce guide alors même que tout est là, prêt à l’emploi. Vous préférerez :
Continuer à perdre de 30 minutes à 2 heures par jour à gérer votre boîte mail, sans compter le dé-focus que ça crée.
Liker cet article, le ranger dans votre to-do list, retourner sur les réseaux sociaux et oublier.
Vous émerveiller de l’IA mais ne pas l’utiliser dans votre intérêt.
Peut-être que les pensées suivantes vous traverseront l’esprit :
“Il va falloir payer Make & OpenAI, flemme”. 8€ / mois pour Make et un coût négligeable pour OpenAI avec GPT-4o Mini. En partant du principe que cette automatisation vous fera gagner 1h / j, ce qui est probable, si votre taux horaire est supérieur à 30 centimes, vous êtes gagnant.
“Ça va être compliqué, je ne sais pas si je peux le faire”. J’ai détaillé toutes les étapes pour que ça soit accessible à tous.
“Ça va prendre longtemps à implémenter”. Quelques heures, tout au plus. Qui vous rapporteront 30h / mois, voire plus.
Vous avez devant vous la meilleure automatisation Gmail sur le marché, littéralement.
Pour les abonnés payants à ma newsletter payante, vous aurez même accès directement au template Make (et un script Python) pour vous faire gagner encore plus de temps.
Mais pour tous les autres, vous n’aurez qu’à suivre le guide pour créer votre agent de gestion des mails.
L’inbox 0 automatique est juste en face de vous. Ne passez pas à côté de ça.
Automata est une publication soutenue par ses lecteurs. Pour recevoir de nouveaux posts et soutenir mon travail, envisagez de devenir un abonné gratuit ou payant.
Étape 1 - Configurer ton compte gmail
La première étape est de configurer un accès à Gmail pour que Make ait les permissions de travailler. C’est une partie irritante mais néanmoins nécessaire. Pourquoi irritante ? Il va falloir accéder à la “Google Cloud Console” pour cela.
Cet outil a 20 millions d’options et d’onglets. Mais heureusement, je suis là pour te baliser le chemin.
Dans un premier temps, rends-toi ici et crée un nouveau projet si tu n’en as pas.
Maintenant, va dans “API et Services” > “Identifiants”, puis crée un nouvel identifiant que tu peux appeler Make. Il y a seulement deux paramètres importants à mettre dans les URL de redirection autorisées :
https://www.integromat.com/oauth/cb/google-restricted
https://www.integromat.com/oauth/cb/oauth2
Maintenant que c’est fait, il va falloir paramétrer l’écran de consentement OAuth. Une fois que tu as cliqué sur l’onglet, clique sur “Modifier l’application”. Il y a deux domaines à autoriser :
make.com
integromat.com
Enregistre les changements et continue la configuration vers les “Niveaux d’accès”. Là il faudra ajouter aux autorisations : “https://mail.google.com/”
Enfin, vérifie que l’API Gmail est activée chez toi. Vas dans l’onglet “API et services activés” puis clique sur “+ Activer les services et les API”. Cherche “Gmail API” :
Et voilà, Make pourras utiliser ta boite mail pour la gérer avec ces autorisations.
Étape 2 - Récupérer ta clef API OpenAI.
Si tu as besoin de t’inscrire à OpenAI API (gratuit), clique ici.
Si tu as déjà un compte, tu peux récupérer ta clef ici.
Il faut également alimenter ton compte avec un peu d’argent. 5€ ou 10€ suffiront pour le projet. Tu peux le faire en allant ici.
Et voilà, OpenAI est configuré.
Étape 3 - Récupérer les mails et créé ton assistant IA de gestion de mail.
Si tu n’as pas déjà de compte Make, utilise ce lien pour t’inscrire. Puis, va dans l’onglet “Scenarios” et crée un nouveau scénario vierge. En termes de plan, celui à 8€ te permettra de traiter environ 2k mails / mois. Si tu as beaucoup de mails à rattraper comme moi, tu pourras acheter des opérations à la demande par la suite.
Crée un premier node nommé “Watch Emails” dans les automatisations Gmail. Il va te demander de te connecter à ton compte Gmail. Une fois la demande de connexion acceptée, une fenêtre va s’ouvrir en te disant que l’application n’a pas été validée par Google. C’est normal, pas besoin de paniquer.
Clique sur “informations avancées” ou quelque chose de similaire selon ton navigateur. Ensuite, tu pourras autoriser l’application. Une fois que c’est fait, configure ton node “Watch Emails” de la manière suivante :
Qu’est-ce que ça veut dire ? Il y a 3 points importants ici :
“Folder” INBOX, c’est le nom du dossier à surveiller. Il s’agit de ta boîte de réception. Tu peux également classer tes mails envoyés en ajoutant ta boîte d’envoi. Ça peut être pratique si tu veux classer tous les mails de facture que tu envoies à tes clients.
“Mark email as read”. À chaque fois qu’un message sera lu par Make, il sera considéré comme lu dans ta boîte Gmail.
“Maximum number of results”. C’est le nombre d’emails maximum traités en une seule exécution du scénario Make. J’ai mis 30 parce que j’ai beaucoup de mails, mais tu peux mettre ce que tu veux ici.
Une fois que tu auras cliqué sur “Ok”, normalement une fenêtre va s’ouvrir pour te demander quels mails traiter. Il y a deux choix intéressants :
“From now on”. Ça traitera tous les mails que tu recevras dans le futur.
“All emails”. Ça traitera tous les mails de ton inbox. Pratique pour rattraper ton retard sur l’inbox 0.
Enfin, il y a différents modes d’exécution du scénario.
J’ai choisi de mettre “toutes les 10 min”, le scénario se lancera toutes les 10 min et traitera 30 mails. Tu peux l’exécuter seulement 2 fois par jour si tu pars déjà d’un inbox 0.
Ensuite, le node OpenAI contiendra toute la logique de notre automatisation en un seul prompt. C’est-à-dire qu’il va nous permettre de classer et répondre en une seule opération. Étudiez et adaptez à votre activité le prompt en annexe. Il est en deux parties : le prompt système qui contient la logique et le prompt utilisateur qui contient le message. Ils sont à mettre à deux endroits différents dans le node OpenAI.
Quelques notes sur la conception de votre prompt :
Les noms des labels doivent correspondre exactement, au caractère près, à ce qui se trouve dans les labels que vous avez choisis dans votre boîte Gmail.
Donnez une description complète de ce qui doit se trouver dans chaque label. De mon côté, j’ai été assez bref.
C’est sur cette partie qu’il ne faudra pas se contenter d’un copié-collé, mais qu’il faudra réfléchir à votre organisation, comment vous voulez classer et comment vous voulez répondre aux mails.
Ce n’est pas nécessaire de donner des templates de réponse à ChatGPT. Vous pouvez lui dire comment vous voulez qu’il réponde et lui donner des infos supplémentaires en fin de prompt (FAQ ?).
Le node OpenAI donnera une réponse au format JSON. C’est un format de réponse qui permet de contrôler plus finement ce qu’il produit. Il faudra ensuite parser sa réponse dans un objet JSON pour accéder aux variables “label” et “answer”.
Ajoutez un node “Parse JSON” de la manière suivante :Nous verrons comment écrire le brouillon plus tard pour les mails qui demandent une réponse. Pour le moment, nous allons construire une branche par catégorie que l’on a choisie. L’API Gmail ne permet pas de classer un mail par le nom de son label, mais par son ID. C’est une information que nous ne pouvons avoir sans écrire du code.
Nous sommes donc obligés d’avoir une branche par catégorie, vers un node Gmail qui va classer et archiver un mail d’une seule catégorie.
Commence par ajouter un “Router”. Ce node permet de partager le chemin en plusieurs branches. Sur chaque branche, nous allons ajouter une condition qui correspond à une des catégories :
Ensuite j’ai ajouter un module “Switch” pour filtrer les mails par mot-clef auquel je ne veux pas que l’automatisation réponde. J’ai remarqué que même avec un prompt détaillé, l’IA avait tendance à considérer certains mails comme demandant une réponse alors que je ne voulais pas y répondre.
Donc, dès que je vois l’un des mots suivant, je supprime la réponse (“answer”) :
<ma-propre-adresse-mail> (je ne veux pas répondre à mes propres mails)
Gérer les préférences
unsubscribe
Unsubscribe
désinscrire
désabonner
Désabonner
Désinscrire
Ne plus recevoir d'e-mail
Ne plus recevoir de message
Invitation:
New comment
is ready to download
Derniers jours pour
podia.com
contact@
notifications@
aliexpress
Tu peux prendre ma liste, ou définir la tienne et le mettre dans le module switch comme suit :
L’étape suivante va être de déterminer tous les cas qui peuvent arriver.
Étape 4 - Classer & archiver les mails ne demandant pas de réponse.
Nous verrons comment écrire le brouillon plus tard pour les mails qui demandent une réponse. Pour le moment, nous allons construire une branche par catégorie que l’on a choisie. L’API Gmail ne permet pas de classer un mail par le nom de son label, mais par son ID. C’est une information que nous ne pouvons avoir sans écrire du code.
Nous sommes donc obligés d’avoir une branche par catégorie, vers un node Gmail qui va classer et archiver un mail d’une seule catégorie.
Commence par ajouter un “Router”. Ce node permet de partager le chemin en plusieurs branches. Sur chaque branche, nous allons ajouter une condition qui correspond à une des catégories :
Ensuite ajoute un node Gmail “Modify Email Labels”, configuré comme suit :
Note le “Labels to remove” : INBOX. Enlever le label INBOX archive le mail. Continue comme ça pour chaque catégorie. Tu garderas une catégorie “Autre”, qui permet de classer et archiver les mails que l’IA n’arrive pas à classer et qui ne demandent pas de réponse. Il faut que cette catégorie existe dans ton Gmail. Sur la branche du router, il faudra mettre cette route comme “fallback”. C’est-à-dire, si aucune route ne fonctionne, alors c’est cette route qui sera choisie.
Étape 5 - Poster un brouillon contenant la réponse de l’IA
C’est la partie compliquée que tu ne retrouveras dans aucun autre guide d’automatisation de mails à ma connaissance. Make permet de créer des brouillons, mais pas en réponse à des mails existants. Une conversation mail est un thread, et pour ajouter un mail dans ce thread, il faut pouvoir ajouter le paramètre threadID (provenant du mail que tu traites).
L'intégration Gmail de Make ne permet pas de faire ça, ce qui rend impossible d’envoyer des réponses à des conversations spécifiques. Cela rend l’automatisation quasiment inutile pour répondre aux gens, ou au mieux hautement insatisfaisante.
Je n’ai donc pas utilisé l’intégration Make pour faire cela, mais j'ai moi-même réalisé une intégration avec un node pour faire des appels API. Avant de voir ça, nous avons besoin de créer le corps du mail et de l’encoder en base64. Tu peux le faire avec deux modules “Text Aggregator” configurés comme suit :
From: {{1.to[].address}}
To: {{1.from.address}}
Cc: {{1.cc}}
Bcc: {{1.bcc}}
Subject: Re: {{1.subject}}
Content-Type: text/plain; charset=utf-8
{{10.answer}}
Et pour le deuxième :
{{base64(43.text)}}
Enfin, utilise un module “Make OAuth 2 request”. Pour la connexion, met les valeurs suivantes :
https://accounts.google.com/o/oauth2/auth
https://oauth2.googleapis.com/token
https://www.googleapis.com/auth/gmail.compose
https://www.googleapis.com/auth/gmail.modify
Une fois que la connexion est établie, entre les valeurs suivantes :
https://www.googleapis.com/gmail/v1/users/me/drafts
{
"message": {
"threadId": "{{1.threadId}}",
"raw": "{{44.text}}" (vérifier que 44 est le numéro du node du deuxième text agregator)
}
}
Il manque une dernière chose pour le tout soit fonctionnel : ajouter la condition suivante sur la branche de réponse aux mails, sur la branche qui sort du router :
C’est la fin de ce guide. Si tu es arrivé jusqu’où bout bravo car tu viens d’automatisé au maximum ta boite mail et de gagner chaque jour du temps à investir ailleurs.
PS : Ré-autorisation de Gmail
Sur les projets non-vérifiés par Google, le token expire relativement souvent. Aussi, tous les deux jours tu devras ré-autoriser la connexion de cette manière dans Make :
Ce point est relativement pénible, et il y a plusieurs solutions :
Compléter la procédure de validation sur l’écran de consentement et essayer de faire valider son application par Google.
Tous les jours cliquer sur le bouton Reauthorize.
Automatiser le clic du bouton :D, ça sera peut être pour un prochain épisode.
Annexe 1 - Prompt de classification & réponse aux mails (à adapter)
# SYSTEM PROMPT
Ton but est de classer mes mails dans dans différentes catégories et de préparer une réponse pour ceux qui en nécessite une. Pour te donner du contexte, je m'appelle Paul Irolla, entrepreneur dans l'intelligence artificielle. J'utilise cette boite mail comme tout venant. Il y a donc à la fois du pro et du perso.
Voici les labels :
- 'Achats divers' : les mails automatiques pour divers achat que j'ai fais
- 'Commandes Amazon' : tous les mails d'Amazon
- 'Mails auto de clients' : tous les mails de clients (comme Skills4all) automatiques. Donc les mails qui ne demandent pas de réponse de ma part.
- 'Newsletters' : tout ce qui resemble à une newsletter.
- 'Services en ligne (outils, souscription)' : tous les mails venant d'outils en ligne ou de service en ligne avec souscription. C'est souvent des mails automatiques.
- 'Notifications' : souvent se sont des notifications de réseaux sociaux
- 'Factures envoyés' : comme son nom l'indique, c'est les factures que j'ai envoyé.
- 'Factures reçues' : comme son nom l'indique, c'est les factures que j'ai reçues.
- Autre : tout ce qui ne rentre pas dans cette catégorie. Il n'y a pas de label à donner pour les autres mails, ils seront gérés par d'autres systèmes. Ça peut être des emails perso, des gens qui me contactent via linkedin / youtube, des gens qui me posent des questions ou de manière générale des entreprises qui me contacte pour me proposer des choses.
Il peut être adapté que tu prépare une réponse pour les mails Autre. Par contre, je ne veux pas répondre à des mails qui ne me sont pas spécifiquement adressé. Notamment, je ne réponds pas aux mails de newsletters & de services en ligne & les adresses 'noreply' ou tout mail qui date de plus d'un mois.
Pour tous les mails Autre qui te semblent adapté, tu préparera une réponse adapté en employant un ton simple et direct. Tutoie l'interlocuteur sauf s'il me vouvoie. Tu peux saluer avec le prénom de la personne si tu as l'info, sinon salue sans prénom.
To donneras tes réponses au format JSON :
{
"label": "<le label qui corresponds au mail, ou vide si il ne rentre dans aucune catégorie>",
"answer": "<la réponse que tu auras préparé pour ce mail, ou vide si le mail ne demande pas de réponse>"
}
# MESSAGE UTILISATEUR
Voici le mail reçu :
Current Date: {{now}}
Message Date : {{1.date}}
Delivered-to : {{1.headers.deliveredTo}}
Reply-to : {{1.headers.replyTo}}
Subject : {{1.subject}}
Text content : {{substring(1.text; 0; 5000)}}
Sender Name : {{1.from.name}}
Sender Email : {{1.from.address}}
Continuez votre lecture avec un essai gratuit de 7 jours
Abonnez-vous à Automata pour continuer à lire ce post et obtenir 7 jours d'accès gratuit aux archives complètes des posts.