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
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.
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.
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èle | Variables | Ce que reçoit le parent |
|---|---|---|
| bulletin_disponible | parent, élève, classe, période | Le message, et le bulletin de son enfant en pièce jointe. |
Un compte Geskap, un numéro raccordé, des jetons. Sans numéro raccordé, aucun modèle ne peut exister.
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.
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é.
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.
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.
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.
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.
| Chemin | Ce que vous faites | À monter |
|---|---|---|
| Vos bulletins sont déjà en ligne | Vous laissez les 5 champs STOCKAGE_* vides et ajoutez une colonne bulletin_url à votre tableau. | Rien. |
| Le workflow les dépose pour vous | Vous remplissez les 5 champs STOCKAGE_* et n8n pousse chaque PDF avant d'envoyer. | Un projet Firebase — gratuit, 10 minutes. |
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.
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.
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.
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.
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.
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.