Validation défectueuse du nœud Respond to Webhook inutilisé

Décrivez le problème/l’erreur/la question

Bonjour, j’ai le workflow suivant, où le webhook répond immédiatement, et ensuite j’ai un nœud d’attente. Après qu’une requête soit envoyée à ce nœud, je fais d’abord d’autres choses (dans cet exemple minimal, je fais un GET vers example.com) et ensuite je réponds avec succès au nœud d’attente. Bien entendu, mon webhook est configuré pour répondre immédiatement, et mon nœud d’attente est configuré pour répondre en utilisant un nœud « Respond to Webhook ». Pour une raison quelconque, n8n me dit à tort qu’un nœud « Respond to Webhook » n’est pas utilisé (Au passage, un ID ou une sorte d’information serait appréciée, mais je ne peux pas la trouver). Le workflow fonctionne normalement si je supprime tous les nœuds « Respond to Webhook », ce que je ne veux pas faire. Est-ce un problème avec n8n ou y a-t-il quelque chose qui ne va pas avec le workflow ?

Quel est le message d’erreur (le cas échéant) ?

Je vois un message d’erreur immédiatement sur le nœud webhook : Nœud Respond to Webhook inutilisé trouvé dans le workflow.

Veuillez partager votre workflow

Partagez la sortie retournée par le dernier nœud

Aucun crash

Informations sur votre configuration n8n

  • Version de n8n : 2.23.1
  • Base de données (par défaut : SQLite) : Probablement défaut, je n’ai rien configuré
  • Paramètre EXECUTIONS_PROCESS de n8n (par défaut : own, main) :
  • Exécution de n8n via (Docker, npm, n8n cloud, application de bureau) : Docker
  • Système d’exploitation : Linux (ou WSL pour être précis)

Bonjour @JammasterCap Bienvenue !

Votre problème n’est pas causé par le nœud Wait, mais par la configuration de la réponse Webhook.

Un nœud Respond to Webhook n’est valide que lorsque le déclencheur Webhook est défini sur « Respond using Respond to Webhook node ». Dans votre workflow, le Webhook n’est pas configuré de cette façon (il utilise une réponse immédiate/par défaut), donc n8n signale correctement le nœud Respond to Webhook comme inutilisé même si vous l’aviez prévu pour le chemin de reprise du Wait.

Solution : soit définissez le mode de réponse du nœud Webhook sur « Using Respond to Webhook node », soit supprimez le nœud Respond to Webhook (puisque les exécutions reprises par Wait ne peuvent pas répondre à la requête webhook d’origine de toute façon).

Faites-moi savoir si cela vous aide 1

Merci pour la réponse rapide. Je sais que mon webhook est configuré pour répondre immédiatement. Le nœud de réponse au webhook appartient au nœud d’attente. Les nœuds d’attente peuvent également être configurés pour répondre à l’aide d’un nœud de réponse au webhook, et c’est ce que j’ai fait dans mon flux de travail.

Bienvenue dans la communauté n8n @JammasterCap
j’ai besoin de votre flux de travail complet pour confirmer, j’ai créé le scénario minimal pour tester et je n’ai pas pu confirmer un bug.

Bienvenue @JammasterCap!

Je comprends parfaitement ce que tu essaies de faire ici, en utilisant le nœud Répondre au Webhook comme « callback » pour la reprise de Wait plutôt que pour le webhook initial, et l’avertissement donne l’impression que n8n ne comprend pas ce modèle même si le flux lui-même fonctionne

Dans ton flux actuel Webhook → Request2 → Wait → Request → Respond success, le nœud Répondre au Webhook (« Respond success ») est logiquement au mauvais endroit pour la façon dont n8n s’attend à ce que ce modèle fonctionne. Selon la documentation, un nœud Répondre au Webhook n’est considéré comme valide que s’il appartient à un déclencheur Webhook explicitement configuré pour « Répondre en utilisant le nœud ‘Répondre au Webhook’ », et le nœud Répondre au Webhook doit se trouver dans le chemin d’exécution qui commence à partir de ce déclencheur Webhook.

Dans ton flux, le déclencheur Webhook ne déclare pas responseMode: responseNode (il répond immédiatement), donc il ne « possède » pas le nœud Respond success. Au lieu de cela, le nœud Wait est configuré avec responseMode: responseNode, ce qui signifie qu’il veut utiliser un nœud Répondre au Webhook pour répondre à l’appel webhook de reprise (celui qui atteint $execution.resumeUrl), pas la demande initiale du déclencheur Webhook.

En pratique, ce flux essaie d’utiliser un seul nœud Répondre au Webhook pour deux connexions HTTP différentes : l’une pour l’appel initial /webhook/bug_minimal, et l’autre pour l’appel de reprise de Wait, mais ce sont deux demandes distinctes et elles ne peuvent pas partager le même nœud Répondre au Webhook de la façon que le validateur s’attend. Du point de vue de n8n, il n’y a aucun déclencheur Webhook configuré avec « Utilisant le nœud ‘Répondre au Webhook’ » qui correspond à ton nœud Respond success, donc l’avertissement « Nœud Répondre au Webhook inutilisé » n’est pas un bug – il t’indique correctement qu’aucun déclencheur Webhook ne possède réellement ce nœud Répondre au Webhook.

Au lieu d’utiliser un nœud Respond to Webhook séparé à la toute fin, laissez le nœud Wait gérer la réponse HTTP directement quand il est appelé.
Ouvrez votre nœud Wait,
Modifiez le Response Mode de Using Respond to Webhook Node à On Received Response Text (ou Json).
Saisissez votre charge utile de réponse de succès directement dans le nœud Wait (par exemple, {“status”: “success”}).
Supprimez le nœud Respond success de votre canevas.
Cela maintient votre logique exactement identique, mais la validation passera parfaitement parce que la réponse est entièrement contenue dans le nœud Wait.
Cela devrait le corriger, je crois, s’il y a d’autres questions, je serai heureux de vous aider.

Je suis désolé, je comprends vos réponses et je suis conscient que ce n’est pas ainsi que cela fonctionne et que ce n’est pas ce que dit la documentation, mais pour moi, il est très logique que cela soit un problème et non simplement quelque chose qu’il faut accepter tel quel.

Selon la documentation, un nœud Respond to Webhook n’est considéré comme valide que s’il appartient à un déclencheur Webhook explicitement défini sur « Respond using ‘Respond to Webhook’ Node »

Si cette affirmation était vraie, il n’y aurait aucune raison qu’un nœud d’attente ait une option pour répondre en utilisant RWH, car cela violerait immédiatement la règle de votre affirmation. Cela signifie que soit la documentation et la validation RWH sont incorrectes, soit l’option RWH du nœud d’attente est incorrecte.

Changez le Response Mode de Using Respond to Webhook Node à On Received Response Text (ou Json).
Tapez votre charge utile de réponse réussie directement dans le nœud Wait (par exemple, {“status”: “success”}).
Supprimez le nœud Respond success de votre canevas.
Cela garde votre logique exactement la même, mais la validation passera parfaitement car la réponse est entièrement contenue dans le nœud Wait.

Cette solution ne gardera pas la logique la même. Dans mon flux de travail réel, j’envoie le corps reçu dans le nœud Wait en utilisant REST à un validateur, j’effectue des instructions If, je peux même sauvegarder des choses dans une base de données. Je veux répondre 200 uniquement lorsque toutes ces choses se sont déroulées avec succès. Si je change mon nœud d’attente pour toujours répondre 200, le flux de travail me donnera toujours un succès, même si par exemple la validation échoue.

C’est pourquoi je pense que la façon dont je l’ai décrite est la façon prévue :

  • Le nœud webhook et le nœud d’attente ont tous deux l’option de répondre en utilisant un nœud « respond to webhook » (je l’appellerai RWH à partir de maintenant car c’est lourd à dire). Logiquement, il n’y a pas beaucoup de différence entre eux, sauf qu’un webhook doit être utilisé pour démarrer un flux de travail.
  • À tout moment, il n’y a qu’un seul nœud wait/webhook actif, en attente d’une requête, ce qui signifie qu’il n’y a pas d’ambiguïté logique quant au nœud wait/webhook auquel un RWH répond.
  • C’est une fonctionnalité absolument nécessaire pour pouvoir recevoir une requête dans un flux de travail, effectuer des actions, puis répondre positivement ou négativement en fonction du résultat de ces actions

À mon avis, n8n devrait effectuer une analyse appropriée du graphe pour trouver les RWH orphelins.

De plus, si je contourne la validation en amenant mon flux de travail à s’exécuter en changeant le Webhook pour répondre en utilisant un RWH inutile (inutile car il aurait tout aussi bien pu être une réponse immédiate) qui retourne 200, le flux de travail se comporte exactement comme je l’ai décrit. Ci-dessous, vous pouvez voir une version modifiée du flux de travail, dans laquelle je le démarre d’abord normalement, puis j’envoie un corps JSON au nœud d’attente avec une seule propriété booléenne - stuff. Lorsque stuff est true, une requête GET est effectuée et je réponds ensuite en utilisant le code de statut que j’ai reçu de la requête GET (voir le code du nœud RWH). Si stuff est false, la requête déclenchant mon nœud Wait recevra 400 comme réponse

Cette astuce est probablement ce que j’utiliserai à partir de maintenant (je ne le savais pas au moment de rédiger le message), mais le fait reste qu’il y a un problème clair ici.

@JammasterCap En ajoutant un Webhook fictif → RWH et en le configurant pour « répondre immédiatement » afin de contourner le validateur, tu as confirmé qu’il s’agit d’un bug du validateur et non d’une erreur d’utilisation. Le validateur vérifie simplement la propriété et se demande « ce RWH appartient-il à un Webhook avec responseMode: responseNode ? », au lieu d’effectuer un parcours de graphe approprié qui permettrait au validateur d’identifier les nœuds Wait avec la même configuration. Si tu ne l’as pas déjà fait, tu peux signaler le problème sur GitHub : Issues · n8n-io/n8n · GitHub