Aller au contenu

Tutorieln8nClaude12 août 2026 · 11 min

Connecter email, IA et tableau de suivi avec n8n

Une boîte partagée où tout arrive, et rien ne se trace. Voici comment construire une chaîne qui lit chaque message, le classe, propose une réponse et garde une trace exploitable — sans jamais répondre à votre place.

Le problème

Une boîte contact@ reçoit tout : demandes commerciales, questions techniques, factures, candidatures, spam. Trois personnes y accèdent. Personne ne sait, à la fin du mois, combien de messages sont restés sans réponse.

Le but de cette chaîne n'est pas de répondre automatiquement. C'est de rendre la boîte lisible et mesurable.

1. Lire les messages sans les perdre

Le nœud Email Trigger (IMAP) relève la boîte. Trois réglages qui évitent les ennuis :

Ne marquez pas comme lu tout de suite. Si le workflow échoue à l'étape suivante, un message marqué lu disparaît de la vue humaine. Marquez à la fin, pas au début.

Filtrez sur la boîte de réception uniquement. Sans cela, une réorganisation de dossiers peut relancer le traitement de milliers d'anciens messages.

Prévoyez la reprise. Notez le dernier identifiant traité dans une variable de workflow. Après une coupure, on reprend là où on s'était arrêté plutôt que tout retraiter.

2. Nettoyer avant de qualifier

Un email brut contient une signature, une chaîne de citations, parfois un avertissement juridique de quinze lignes. Tout cela perturbe la qualification et coûte des jetons.

javascript
// Nœud Code — isole le message utile
const brut = $input.first().json.textPlain ?? ''

const coupures = [
  /^--\s*$/m,                      // séparateur de signature
  /^Le .+ a écrit\s*:/m,           // citation française
  /^On .+ wrote\s*:/m,             // citation anglaise
  /^De\s*:.+$/m,                   // en-tête de transfert
]

let utile = brut
for (const c of coupures) {
  const m = utile.match(c)
  if (m?.index !== undefined) utile = utile.slice(0, m.index)
}

return [{
  json: {
    corps: utile.trim().slice(0, 4000),
    expediteur: $input.first().json.from,
    sujet: $input.first().json.subject,
    recu: $input.first().json.date,
  },
}]

La limite à 4 000 caractères n'est pas cosmétique : elle borne le coût et écarte les messages anormalement longs, qui sont presque toujours des transferts en chaîne.

3. Qualifier

Tu classes les messages d'une boîte contact partagée.

Réponds UNIQUEMENT en JSON :
{
  "categorie": "commercial" | "support" | "administratif" | "candidature" | "indesirable",
  "urgence": "haute" | "normale" | "basse",
  "action_attendue": "une phrase, 15 mots maximum",
  "delai_suggere": "24h" | "72h" | "1 semaine" | "aucun"
}

Règles :
- urgence haute uniquement si un blocage ou une échéance datée est mentionné
- "indesirable" uniquement si le message est clairement une sollicitation de masse
- en cas de doute entre deux catégories, choisis celle qui demande une action humaine

La dernière règle est importante : en cas d'ambiguïté, il vaut mieux qu'un humain regarde un message qui ne le méritait pas, que l'inverse.

4. Tracer — l'étape qui donne sa valeur au reste

Chaque message alimente une ligne du tableau :

ColonneContenuPourquoi
Reçu lehorodatagemesure du délai
Expéditeurdomaine seulévite de stocker l'adresse complète
Catégorieissue du modèlevolume par type
Urgenceissue du modèledétection des pics
Action attendueissue du modèlelisible sans ouvrir le mail
Délai suggéréissue du modèlepriorisation
Statut« à traiter »mis à jour à la main
Première réponse levide au départl'indicateur qui compte
Classement corrigécase à cochermesure la qualité du modèle

Les deux dernières colonnes sont celles qu'on oublie et qui servent le plus. Le délai de première réponse est l'indicateur que vous voudrez montrer dans trois mois. Le taux de correction vous dira si votre prompt est bon.

Ne stockez que le domaine de l'expéditeur. Le nom et l'adresse complète restent dans la boîte email, qui est déjà sécurisée. Un tableau partagé l'est rarement autant.

5. Proposer une réponse, jamais l'envoyer

Pour les catégories courantes, un second agent rédige un brouillon à partir du message et de vos éléments de réponse habituels. Le nœud suivant est Create Draft, jamais Send.

Ajoutez systématiquement en fin de brouillon une liste « à vérifier avant envoi » : les points que le modèle n'a pas pu confirmer. C'est ce qui transforme un brouillon en outil de travail plutôt qu'en texte à relire intégralement.

6. Détecter les messages oubliés

Un nœud Schedule quotidien relit le tableau et signale les lignes dont le statut est « à traiter » au-delà du délai suggéré.

javascript
// Nœud Code — messages en retard
const seuils = { '24h': 1, '72h': 3, '1 semaine': 7, 'aucun': 999 }
const maintenant = new Date()

return $input.all()
  .filter((l) => l.json.statut === 'à traiter')
  .filter((l) => {
    const jours = (maintenant - new Date(l.json.recu)) / 86400000
    return jours > (seuils[l.json.delai_suggere] ?? 3)
  })
  .map((l) => ({ json: l.json }))

Envoyez ce relevé une fois par jour, à une heure fixe, à une personne nommée. Pas dans un canal général : un rappel adressé à tout le monde n'est adressé à personne.

7. Ce qui casse

Les réponses automatiques d'absence créent des boucles si votre chaîne répond. Comme elle ne répond pas, le risque est limité — mais elles polluent les statistiques. Filtrez les en-têtes Auto-Submitted et X-Autoreply.

Les messages en plusieurs parties dont la version texte est vide. Prévoyez un repli sur la version HTML nettoyée.

Le quota d'API atteint un lundi matin, quand le volume est le plus fort. Configurez le retry et une file d'attente.

Le workflow désactivé sans alerte. Comme pour toute chaîne en production : une vérification quotidienne qu'au moins une exécution a eu lieu.

Ce que vous saurez au bout d'un mois

C'est le vrai bénéfice, et il est rarement anticipé : vous aurez pour la première fois des chiffres sur une boîte qui était un trou noir. Volume par catégorie, délai moyen de première réponse, proportion de messages jamais traités.

Ces chiffres justifient les décisions suivantes — recruter, réorganiser, automatiser davantage — bien mieux que n'importe quelle intuition.

Diagnostic

Ce sujet vous concerne directement ?

En 45 minutes on regarde si ce cas s'applique chez vous, ce qu'il coûterait, et s'il mérite d'être le premier.

Connecter email, IA et tableau de suivi avec n8n | Tannous