Un DM Instagram → un code d'activation, avec ManyChat
Quand quelqu'un t'écrit un mot-clé en message privé Instagram, ManyChat lui répond avec un code d'activation créé par Fit'Distance, avec n8n ou Make.
Quand quelqu'un t'écrit un mot-clé en message privé sur Instagram, ManyChat lui répond avec un code d'activation tout frais. Ce cas pratique écrit en ton nom, sans rien envoyer d'autre : il lui faut une clé avec Élèves › Écrire (students:write) et une offre qui inclut les écritures. Crée la clé dans l'app, conditions d'usage acceptées. Il faut aussi l'offre Pro de ManyChat, la seule à proposer l'action External Request.
Ce que fait ce cas pratique
- Dans ManyChat : un déclencheur « mot-clé » en DM Instagram, par exemple
PROGRAMME, ou « commentaire sur un post ». Une action External Request envoie unPOSTà l'adresse du webhook n8n, avec l'en-têteX-Webhook-Secretet le corps ci-dessous. Son Response mapping range$.codedans le champ personnaliséfd_code, que tu vides avant la requête : si elle échoue (secret faux, délai dépassé), ManyChat ne le remplit pas. Un message suit, seulement sifd_codeest rempli : « Voici ton code : », le champfd_codeinséré avec le sélecteur de variables, puis « Installe Fit'Distance et entre-le à l'inscription. » - Dans n8n : le webhook vérifie le secret, puis un
POST /operations/students.create_open_codecrée le code. Il répond{ "code": … }à ManyChat. Un secret faux reçoit un 401, sans rien écrire.
{ "subscriber_id": "<Contact ID>", "first_name": "<First name>" }Remplace chaque valeur entre chevrons par le champ ManyChat du même nom, inséré avec le sélecteur de variables. Crée d'abord le champ fd_code, de type texte. ManyChat attend une réponse JSON en moins de 10 secondes, sur une adresse en https.
curl -X POST https://api.fitdistance.io/api/partner/v1/operations/students.create_open_code \
-H "Authorization: Bearer fd_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: code-1234567890-2026-10-26" \
-d '{}'Le code est dans data.token (et dans message) : { "data": { "token": "AB2C", … }, "message": "…", "dry_run": false }. L'Idempotency-Key vaut code-<abonné>-<AAAA-MM-JJ> : le même abonné qui redemande le même jour reçoit le même code, et le rejeu est remboursé. Voir Écritures et idempotence.
Ce que le code ouvre
Le code donne accès à ton coaching : quiconque l'entre à l'inscription devient ton élève, et n'importe qui peut écrire le mot-clé. Réserve-le à une offre que tu veux vraiment distribuer. Pour retirer un élève entré par erreur, passe par l'app.
Ce que ça coûte
Un code coûte un crédit, débité avant l'appel. Un argument que le schéma de l'opération refuse est remboursé ; un 401, un 403 ou un 429 ne coûtent rien ; un rejeu est remboursé. students.create_open_code n'a pas d'aperçu : ne lance un test qu'avec ton propre compte Instagram, il crée un vrai code et n'envoie rien.
Dans n8n
- Choisis Import from URL… et colle
https://fitdistance.io/documentation/api/cas-pratiques/instagram-dm-code.n8n.json, ou télécharge le workflow et choisis Import from File…. Choisis l'identifiantFit'Distance APIde Brancher n8n dans le nœud HTTP Request. - Dans Secret matches?, remplace
change-this-secretpar un long texte au hasard, le même que l'en-têteX-Webhook-Secretde ManyChat. Remplace aussi le cheminfitdistance-codedu Webhook par un nom que toi seul connais. - Active le workflow : ManyChat appelle
https://<ton-n8n>/webhook/<chemin>, pas l'adresse de test. - Envoie le mot-clé depuis ton compte. ManyChat ne remplit pas
fd_codequand tu testes la requête dans l'éditeur : déclenche l'automatisation comme un contact, ou en aperçu.
Today garde l'identifiant de l'abonné et la date. Si ManyChat envoie une variable vide ou non résolue, il arrête le workflow avant d'écrire : tous les abonnés auraient la même clé. Pour limiter la durée du code, ajoute contractEndAt au corps de Create the code, avec une date qui ne change pas dans la journée : sinon le second appel du jour reçoit un 409 IDEMPOTENCY_MISMATCH.
Dans Make
- Webhooks › Custom webhook : dans Advanced settings du webhook, choisis
Yespour Get request headers, puis ajoute un filtre : l'en-têtex-webhook-secretégal à ton secret, etsubscriber_idnon vide, comme Today dans n8n. - HTTP › Make a request :
POSTsurhttps://api.fitdistance.io/api/partner/v1/operations/students.create_open_code,Idempotency-Key=code-{{subscriber_id}}-{{formatDate(now; YYYY-MM-DD)}}, Body content typeapplication/JSON, Body input methodJSON string, corps{}, Parse response surYes. - Webhooks › Webhook Response : Status
200, Body{ "code": "{{data.token}}" }, en-têteContent-Type=application/json.
Référence : création d'un code.