Bulletins scolaires par WhatsApp

Le parent reçoit le bulletin de son enfant directement dans WhatsApp, en pièce jointe. Le bulletin ne passe plus par le cartable : rien à cacher, rien à perdre, rien à retoucher.

Éducation · Documents — Webhook Code HTTP Request Extract from File Respond to Webhook

Ce qu'il vous faut

Aujourd'hui, le bulletin passe par les mains de l'élève. Il peut le perdre, l'oublier, le cacher, parfois le retoucher. Envoyer le PDF directement au parent supprime le problème d'un coup — et c'est l'argument qui fait signer une école.

Ce que fait ce workflow

Note — Une ligne douteuse est écartée, jamais envoyée
Pas de numéro, ou aucun bulletin portant ce matricule : la ligne est mise de côté et comptée dans le rapport. Envoyer le bulletin d'un enfant au parent d'un autre est pire que ne rien envoyer.

Le modèle de message

Un seul modèle, en catégorie UTILITY — un bulletin est une information de service, jamais de la publicité. Son en-tête est un DOCUMENT : c'est ce qui permet d'attacher le PDF.

ModèleVariablesCe que reçoit le parent
bulletin_disponibleparent, élève, classe, périodeLe message, et le bulletin de son enfant en pièce jointe.

Mise en place

  1. Raccordez votre numéro WhatsApp

    Un compte Geskap, un numéro raccordé, des jetons. Sans numéro raccordé, aucun modèle ne peut exister.

    Raccorder

  2. Créez le modèle dans la console

    Déposez n'importe quel PDF comme échantillon d'en-tête : c'est lui qui fixe le format DOCUMENT. L'approbation par Meta prend de quelques minutes à quelques heures — sur un compte WhatsApp neuf, comptez large.

    Créer le modèle

  3. Importez le workflow dans n8n

    Votre clé et votre jeton de dépôt y sont déjà inscrits : il n'y a rien à coller. Au premier import, la recette tourne en SIMULATION — le parcours entier se déroule, aucun message ne part et aucun jeton n'est consommé.

  4. Activez le workflow, et relevez l'adresse de dépôt

    L'adresse naît à l'activation : ouvrez le nœud « Dépôt » et copiez celle de PRODUCTION, en /webhook/. Celle en /webhook-test/ n'écoute qu'un seul appel puis se tait — c'est l'erreur qui fait perdre le plus de temps.

  5. Préparez la page pour l'école

    Ouvrez la page « secrétariat » dans un éditeur de texte et remplissez les trois constantes en tête : ADRESSE_DEPOT, JETON (la valeur JETON_DEPOT de votre workflow) et ECOLE. La secrétaire ne verra jamais ces réglages — elle n'aura qu'un écran : déposer, envoyer.

  6. Nommez vos PDF avec le matricule

    2026-0871.pdf ira au parent de l'élève dont le matricule est 2026-0871. C'est toute la règle de rapprochement — et la seule discipline demandée à l'école.

Où vivent les bulletins

C'est la question à trancher avant tout le reste. WhatsApp ne reçoit pas le fichier : il va le CHERCHER à une adresse. Chaque bulletin doit donc être posé quelque part de publiquement lisible. Nous n'hébergeons rien — pas un octet ne passe par nos serveurs, et vous ne nous payez aucun stockage.

CheminCe que vous faitesÀ monter
Vos bulletins sont déjà en ligneVous laissez les 5 champs STOCKAGE_* vides et ajoutez une colonne bulletin_url à votre tableau.Rien.
Le workflow les dépose pour vousVous remplissez les 5 champs STOCKAGE_* et n8n pousse chaque PDF avant d'envoyer.Un projet Firebase — gratuit, 10 minutes.

Le chemin Firebase, pas à pas

C'est exactement ce que nous utilisons pour notre propre démonstration. Firebase Storage rend un fichier lisible par n'importe qui via une adresse à jeton — précisément ce dont WhatsApp a besoin, sans rendre tout le bucket public.

  1. Créez un projet et activez Storage

    Le palier gratuit suffit largement : un bulletin pèse quelques kilo-octets. Notez le nom du bucket, il finit par .firebasestorage.app — c'est votre STOCKAGE_BUCKET.

    Console Firebase

  2. Relevez la clé web du projet

    Paramètres du projet → Général → « Clé API Web ». C'est votre STOCKAGE_CLE_WEB. Elle est publique par conception : elle identifie le projet, elle n'autorise rien à elle seule.

    Paramètres du projet

  3. Créez un compte de service

    Authentication → activez la méthode « E-mail / mot de passe », puis ajoutez UN utilisateur, par exemple bulletins-bot@votre-ecole.com. Aucun humain ne s'en servira : c'est n8n qui s'y connecte. Son e-mail et son mot de passe deviennent STOCKAGE_EMAIL et STOCKAGE_MDP.

    Authentication

  4. Autorisez ce compte à écrire, et lui seul

    Dans les règles de Storage, n'ouvrez l'écriture qu'à l'identifiant de ce compte, sous le seul dossier des bulletins, et seulement pour des PDF. N'ouvrez JAMAIS la lecture par les règles : l'adresse à jeton suffit à WhatsApp, et une lecture ouverte rendrait tout le dossier listable.

    Règles de Storage

La règle à insérer — écriture réservée au compte de service

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /bulletins/{fichier} {
      // Seul le compte de service écrit, et seulement des PDF de moins de 10 Mo.
      allow write: if request.auth != null
                   && request.auth.uid == 'UID_DU_COMPTE_DE_SERVICE'
                   && request.resource.size < 10 * 1024 * 1024
                   && request.resource.contentType == 'application/pdf';
      // Pas de "allow read" : l'adresse à jeton rendue au dépôt suffit à WhatsApp.
    }
  }
}
Attention — Publier des règles remplace TOUT le jeu existant
Si ce projet Firebase sert déjà à autre chose, ne collez pas ce bloc tel quel : reprenez vos règles actuelles et insérez-y seulement le bloc match /bulletins/. Publier écrase l'ensemble, et une règle manquante casse des fonctionnalités sans rapport, sans avertissement.
Attention — Le piège n°1 : un lien qui n'est pas vraiment public
WhatsApp ne reçoit pas le fichier, il va le CHERCHER à l'adresse fournie. Si cette adresse demande une connexion, WhatsApp reçoit une page de connexion au lieu du PDF : le message part SANS la pièce jointe et SANS erreur. Testez toujours un lien en navigation privée avant d'envoyer.
Attention — L'adresse de dépôt est publique — le jeton la protège
N'importe qui connaissant l'adresse de votre webhook pourrait y déposer des fichiers et déclencher des envois, donc dépenser vos jetons. Le workflow refuse tout dépôt qui ne présente pas le jeton remis au téléchargement.