Automatisation

Créer un modèle d'email de relance intelligent qui adapte le ton selon l'état du paiement dans gmail et google sheets

Créer un modèle d'email de relance intelligent qui adapte le ton selon l'état du paiement dans gmail et google sheets

J'adore automatiser les tâches qui prennent du temps pour nous permettre de nous concentrer sur l'essentiel. Ici, je vous explique comment créer un modèle d'email de relance intelligent qui adapte automatiquement le ton du message selon l'état du paiement, en combinant Google Sheets, Gmail et Google Apps Script. J'ai mis en pratique cette approche pour mes propres clients et elle m'a permis de gagner des heures chaque mois tout en gardant une communication professionnelle et adaptée.

Pourquoi automatiser les relances et adapter le ton ?

Envoyer la même relance générique à tous les clients n'est ni efficace ni empathique. Un client qui a simplement oublié un paiement mérite un rappel poli ; un client en retard de plusieurs semaines nécessite un message plus ferme (ou un appel). Automatiser permet de :

  • gagner du temps en évitant d'écrire chaque relance manuellement,
  • améliorer le taux de recouvrement grâce à des messages mieux ciblés,
  • préserver la relation client en ajustant le ton au contexte.
  • Ce dont vous avez besoin

    Avant de commencer, préparez :

  • un Google Sheet listant vos factures (client, email, montant, date d’échéance, statut...),
  • un compte Gmail (idéalement professionnel) connecté au Google Workspace pour éviter les limites trop strictes,
  • quelques modèles de messages (templates) pour chaque niveau d'urgence,
  • un script Google Apps Script pour automatiser l'envoi et décider du ton.
  • Structure du Google Sheet

    Voici les colonnes que j'utilise (libre à vous d'en ajouter) :

    AInvoice ID
    BClient Name
    CClient Email
    DAmount
    EDue Date
    FStatus
    GDays Overdue (formule)
    HLast Reminder Sent
    ITone

    Pour la colonne "Days Overdue", utilisez une formule comme =IF(TODAY()-E2>0, TODAY()-E2, 0). La colonne "Status" peut être : Paid, Pending, Overdue.

    Définir les règles de ton (exemples)

    J'aime garder des règles simples et mesurables :

    StatusDays OverdueTone
    PaidRemerciement
    Pending0 (avant échéance)Rappel amical
    Overdue1–7Rappel poli
    Overdue8–30Relance ferme
    Overdue>30Relance urgente / escalade

    Modèles d'emails (exemples)

    Créez des templates dans un onglet dédié ou directement dans le script. Voici des exemples courts :

  • Remerciement (Paid) : Bonjour [Nom], merci beaucoup pour votre règlement. Bonne journée !
  • Rappel amical (Pending) : Bonjour [Nom], juste un rappel que votre facture [ID] est due le [Due Date]. Besoin d’aide ?
  • Rappel poli (1–7 jours) : Bonjour [Nom], nous n'avons pas encore reçu le paiement pour la facture [ID]. Pourriez-vous vérifier ?
  • Relance ferme (8–30 jours) : Bonjour [Nom], votre facture [ID] est en retard. Merci de procéder au paiement sous 7 jours ou nous contacter pour convenir d'un échéancier.
  • Escalade (>30 jours) : Bonjour [Nom], malgré nos relances, la facture [ID] reste impayée. Nous envisageons des mesures si aucun règlement n'est reçu sous 7 jours.
  • Le cœur : Google Apps Script

    Le script va lire les lignes du Sheet, déterminer le statut et la tonalité, remplacer les variables dans le template, puis envoyer l'email via GmailApp. Activez un déclencheur (trigger) quotidien pour automatiser.

    Exemple simplifié de script (à coller dans Extensions > Apps Script)

    <!-- Le code ci-dessous doit être collé tel quel dans l'éditeur Apps Script -->
    function sendSmartReminders() {
    var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Factures');
    var data = ss.getDataRange().getValues();
    for (var i = 1; i < data.length; i++) {
    var row = data[i];
    var id = row[0], name = row[1], email = row[2], amount = row[3];
    var due = new Date(row[4]); var status = row[5]; var daysOver = row[6];
    var tone = decideTone(status, daysOver);
    if (tone) {
    var subject = buildSubject(id, tone);
    var body = buildBody(tone, name, id, due, amount);
    GmailApp.sendEmail(email, subject, body);
    ss.getRange(i+1, 8).setValue(new Date()); // Last Reminder Sent
    ss.getRange(i+1, 9).setValue(tone); // Tone
    }
    }
    }
    function decideTone(status, daysOver) {
    if (status == 'Paid') return 'Remerciement';
    if (status == 'Pending') return 'Rappel amical';
    if (status == 'Overdue') {
    if (daysOver <= 7) return 'Rappel poli';
    if (daysOver <= 30) return 'Relance ferme';
    return 'Escalade';
    }
    return null;
    }
    function buildSubject(id, tone) { return '['+tone+'] Relance facture '+id; }
    function buildBody(tone, name, id, due, amount) {
    // Simple exemples — remplacez par vos templates réels
    if (tone == 'Remerciement') return 'Bonjour '+name+','+'%0A%0AMerci pour votre paiement de '+amount+'.';
    if (tone == 'Rappel amical') return 'Bonjour '+name+','+'%0A%0ARappel : votre facture '+id+' est due le '+due.toLocaleDateString()+'.';
    if (tone == 'Rappel poli') return 'Bonjour '+name+','+'%0A%0ANous n\'avons pas reçu le paiement de la facture '+id+'.';
    if (tone == 'Relance ferme') return 'Bonjour '+name+','+'%0A%0AVotre facture '+id+' est en retard. Merci de régler sous 7 jours.';
    return 'Bonjour '+name+','+'%0A%0ANotre précédent message est resté sans réponse concernant la facture '+id+'.';
    }

    Tests et réglages

    Avant d'automatiser en production, testez le script sur quelques lignes de test et envoyez les emails vers votre propre boite. Vérifiez :

  • les remplacements de variables (nom, montant, date),
  • l'objet et le format du message (plain text vs HTML),
  • les limites d'envoi Gmail (quotas Google),
  • la logique de décision (tone).
  • Personnalisation avancée

    Quelques idées que j'applique selon le contexte :

  • ajouter des templates HTML (plus pro) en utilisant MailApp.sendEmail avec l'option htmlBody,
  • enregistrer des courriels envoyés dans un dossier Gmail spécifique pour suivi,
  • intégrer un lien de paiement direct pour faciliter le règlement (Stripe, PayPal,...),
  • utiliser la colonne "Last Reminder Sent" pour éviter d'envoyer plusieurs relances trop rapprochées,
  • ajouter un score de risque client et durcir le ton pour les clients à risque élevé.
  • Quelques précautions

    Automatiser ne veut pas dire devenir insensible. Voici ce que je vérifie toujours :

  • laisser une possibilité de contact humain (téléphone, réponse directe) dans chaque message,
  • prévoir un workflow d'escalade manuel : quand les relances automatiques ne suffisent pas, qui contacter dans votre équipe ?,
  • respecter la législation locale sur le recouvrement et le RGPD (consentement et conservation des données),
  • mettre en place des exceptions (ex : litiges). Gérez ces cas dans votre feuille en changeant le statut.
  • Si vous voulez, je peux vous fournir un exemplaire de feuille Google Sheet prête à l'emploi et un script commenté plus complet (HTML, envoi conditionnel, logs). Dites-moi le niveau de personnalisation souhaité (par client, par montant, intégration paiement) et je vous prépare ça.

    Vous devriez également consulter les actualités suivante :

    Concevoir un tableau de bord minimal dans notion pour suivre 3 indicateurs de productivité et décider quoi déléguer
    Productivité

    Concevoir un tableau de bord minimal dans notion pour suivre 3 indicateurs de productivité et décider quoi déléguer

    J'ai longtemps cherché un moyen simple et fiable pour savoir si je faisais les bonnes tâches, si...