GuidesAgents IA et validation humaine
n8n : faire valider une étape sur son téléphone
Une validation humaine dans un workflow n8n avec un nœud HTTP Request : la question arrive sur le téléphone avec des boutons, le workflow attend.
Un workflow n8n tourne seul, souvent la nuit. Pour certaines étapes, on aimerait qu'il s'arrête et vous demande. Voici comment faire avec trois nœuds et une requête HTTP.
Ce qu'on veut obtenir
Prenons un workflow qui prépare des réponses aux mails de clients avec un modèle de langue. Le brouillon est bon neuf fois sur dix. La dixième, vous préférez le lire avant qu'il parte. On veut donc :
- que le workflow vous envoie le brouillon sur le téléphone, avec deux boutons : « Envoyer » et « Ne pas envoyer » ;
- qu'il attende votre réponse, même si vous mettez une heure à la donner ;
- qu'il n'envoie rien si vous ne répondez pas.
Les solutions intégrées à n8n
n8n sait déjà mettre un workflow en attente. Certains nœuds, comme Gmail ou Slack, ont une opération qui envoie un message et attend la réponse, et le nœud Wait peut reprendre l'exécution sur un appel de webhook. C'est très bien si vous vivez dans Slack ou dans votre boîte mail. Il faut juste penser au délai : une demande qu'on ignore ne doit pas rester en suspens indéfiniment, ni passer pour un accord.
Si vous voulez la question sur le téléphone, avec des boutons qui répondent en un geste, et une échéance qui vaut refus, une API externe comme celle d'Aval fait le travail avec un simple nœud HTTP Request.
Étape 1 : la clé d'API
Ouvrez votre espace Aval et créez une clé d'API. Dans n8n, ajoutez un identifiant de type « Header Auth » : le nom Authorization, la valeur Bearer suivie de votre clé. Comme ça, la clé n'apparaît pas en clair dans le workflow.
Étape 2 : poser la question
Ajoutez un nœud HTTP Request :
- méthode
POST, adressehttps://www.taraxe.com/api/aval/questions?wait=45; - authentification : l'identifiant Header Auth de l'étape 1 ;
- corps en JSON, avec la question, les options et le contexte.
{
"question": "J'envoie cette réponse à {{ $json.client }} ?",
"options": ["Envoyer", "Ne pas envoyer"],
"context": "{{ $json.brouillon }}",
"agent_name": "n8n · support",
"expires_in_minutes": 240
}Si le brouillon peut contenir des guillemets ou des retours à la ligne, remplissez plutôt le corps champ par champ (« Using Fields Below ») : n8n s'occupe alors d'échapper le texte.
La question part tout de suite, sur Telegram et par mail. Grâce à ?wait=45, la requête attend la réponse jusqu'à 45 secondes. Elle rend un objet avec un status : answered si vous avez déjà répondu, sinon pending et un question_id.
Étape 3 : attendre la réponse
Si la réponse n'est pas encore là, il faut la relire jusqu'à ce qu'elle arrive. Une petite boucle suffit :
- un nœud If qui teste
{{ $json.status }}égal àpending; - s'il est vrai, un nœud HTTP Request en
GETsurhttps://www.taraxe.com/api/aval/questions/{{ $json.question_id }}?wait=45, avec le même identifiant, puis retour vers le nœud If ; - s'il est faux, on passe à la suite.
Chaque relecture attend jusqu'à 45 secondes de son côté, la boucle ne martèle donc pas le serveur. Relire une question ne coûte rien. Pour une échéance longue, plusieurs heures par exemple, vous pouvez glisser un nœud Wait de quelques minutes dans la boucle.
Étape 4 : agir selon la réponse
Après la boucle, un nœud Switch regarde le statut et la réponse :
statusvautansweredetanswervaut « Envoyer » : on envoie le mail ;- tout le reste, y compris
expiredetcancelled: on n'envoie rien, et on peut garder le brouillon de côté.
Si vous avez écrit un mot en répondant, il arrive dans le champ comment. Vous pouvez le passer au modèle pour qu'il corrige le brouillon.
Questions fréquentes
Que se passe-t-il si je ne réponds jamais ?
À l'échéance, la question expire et la relecture rend expired. Le workflow sort de la boucle et, avec le Switch décrit plus haut, n'envoie rien.
Combien ça coûte ?
Chaque question posée coûte un crédit, les 20 premières sont offertes. Attendre et relire la réponse sont gratuits. Les packs vont de 10 € les 100 questions à 50 € les 1 000, sans abonnement.
Et avec Make ou Zapier ?
Le principe est le même : un module HTTP qui envoie la question avec ?wait=45, puis une relecture tant que le statut vaut pending.