Élève depuis 90 jours → une demande d'avis
Chaque lundi, demande un avis Google aux élèves arrivés il y a trois mois, après un premier passage sans envoi, avec n8n ou Make.
Chaque lundi à 9 h, les élèves arrivés il y a trois mois reçoivent dans l'app un message qui leur demande un avis Google. Ce cas pratique écrit en ton nom : il lui faut une clé avec Élèves › Lire (students:read) et Messages › Écrire (messaging:write), et une offre qui inclut les écritures. Crée la clé dans l'app, conditions d'usage acceptées.
Ce que fait ce cas pratique
- Déclencheur : chaque lundi à 9 h. La fenêtre va de J-97 à J-90 : sept jours, donc chaque élève n'est sollicité qu'une fois.
- Élèves :
GET /studentsaveclimit=50, toutes les pages. On garde ceux dontjoined_atest dans la fenêtre, sauf si leur contrat estPAUSEDouEXPIRED. - Envoi : un
POST /operations/messaging.sendpar élève retenu.
curl -X POST https://api.fitdistance.io/api/partner/v1/operations/messaging.send \
-H "Authorization: Bearer fd_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: avis-42-2026-10-26" \
-d '{"text": "Salut Léa, …", "studentId": 42}'L'Idempotency-Key vaut avis-<id>-<AAAA-MM-JJ>, avec la date du passage : un rejeu le même jour est remboursé. Voir Écritures et idempotence. Si ton outil est éteint un lundi, les élèves de cette fenêtre ne sont pas rattrapés.
Le message
Salut Léa, ça fait trois mois qu'on travaille ensemble. Si tu as deux minutes, ton avis sur Google m'aiderait beaucoup :
https://g.page/r/XXXXXXXX/review. Merci !
Un avis se demande à tous les élèves de la fenêtre, jamais seulement aux satisfaits, et ne s'achète jamais : Google interdit de solliciter seulement les avis positifs et d'offrir quoi que ce soit en échange. Le message reste le tien : relis-le et change-le avant d'activer l'envoi, sans le faire dépendre de la satisfaction de l'élève. Ton lien est dans ta fiche Google Business Profile, sur ordinateur : Voir les avis, Recevoir plus d'avis, l'icône de partage, puis Copier.
Ce que ça coûte
Une page lue coûte un crédit, débité avant l'appel ; chaque message envoyé en coûte un. Avec 100 élèves : 2 pages lues avec limit=50, 1 avec limit=200, puis un message par élève de la semaine. Un paramètre refusé coûte quand même un crédit ; un 401, un 403 ou un 429 ne coûtent rien ; un rejeu est remboursé.
Un premier passage sans rien envoyer
messaging.send n'a pas d'aperçu avec studentId : dry_run: true donne un 400 DRY_RUN_UNSUPPORTED, gratuit. Le premier passage liste donc les élèves sans les prévenir, pour le seul prix des lectures.
Dans n8n
- Choisis Import from URL… et colle
https://fitdistance.io/documentation/api/cas-pratiques/avis-google-90-jours.n8n.json, ou télécharge le workflow et choisis Import from File…. Choisis l'identifiantFit'Distance APIde Brancher n8n dans chaque nœud HTTP Request. - Mets ton lien d'avis en haut du code de Students to remind : tant qu'il y reste
XXXXXXXX, le nœud s'arrête. Relis le texte. - Exécute le workflow et lis la sortie de Students to remind : un élément par élève, avec son texte.
L'envoi écrit à de vrais élèves
Send message est livré désactivé : active-le seulement après ce premier passage. L'Idempotency-Key porte la date du jour : un passage à la main un autre jour décale la fenêtre et peut écrire deux fois au même élève. Une fois l'envoi activé, laisse le planning travailler.
- Active Send message, puis active le workflow. Il envoie un message par seconde au plus.
La boucle est celle de Brancher n8n : More students? est le nœud If et Students, next page lit la page suivante. Les heures et les fenêtres suivent le fuseau horaire du workflow (Timezone dans ses paramètres, New York par défaut).
Dans Make
- HTTP › Make a request (planning : chaque lundi à 9 h) :
GETsurhttps://api.fitdistance.io/api/partner/v1/students,limit=200, Parse response surYes. - Iterator sur
data, puis un filtre :joined_atpostérieur ou égal à{{addDays(now; -97)}}et antérieur à{{addDays(now; -90)}},contract_statusdifférent dePAUSEDet deEXPIRED. - Lis le résultat du filtre, puis ajoute HTTP › Make a request :
POSTsur/operations/messaging.send,Idempotency-Key=avis-{{id}}-{{formatDate(now; YYYY-MM-DD)}}, Body content typeapplication/JSON, Body input methodJSON string, corps{"text": "…", "studentId": {{id}}}.
Make ne lit que 200 élèves ; le workflow n8n, lui, lit toutes les pages. Référence : élèves, envoi d'un message.