Validação bugada do nó Respond to Webhook não utilizado

Descreva o problema/erro/pergunta

Olá, tenho o seguinte fluxo de trabalho, onde o webhook responde imediatamente, e depois tenho um nó de espera. Após uma solicitação ser enviada para este nó, primeiro faço outras coisas (neste exemplo mínimo faço um GET para example.com) e depois respondo sucesso para o nó de espera. Obviamente, meu webhook está configurado para responder imediatamente, e meu nó de espera está configurado para responder usando um nó responder ao webhook. Por algum motivo, o n8n informa incorretamente que um nó responder ao webhook não é utilizado (aliás, um ID ou algum tipo de informação seria útil, mas não consigo encontrar). O fluxo de trabalho funciona normalmente se eu remover todos os nós responder ao webhook, o que não quero fazer. Isto é um problema com n8n ou há algo errado com o fluxo de trabalho?

Qual é a mensagem de erro (se houver)?

Vejo uma mensagem de erro imediatamente no nó webhook: Nó Responder ao Webhook não utilizado encontrado no fluxo de trabalho.

Compartilhe seu fluxo de trabalho

Compartilhe a saída retornada pelo último nó

Nenhuma falha

Informações sobre sua configuração n8n

  • versão do n8n: 2.23.1
  • Banco de dados (padrão: SQLite): Provavelmente padrão, não configurei nada
  • Configuração EXECUTIONS_PROCESS do n8n (padrão: own, main):
  • Executando n8n via (Docker, npm, n8n cloud, desktop app): Docker
  • Sistema operacional: Linux (ou WSL para ser preciso)

Oi @JammasterCap Bem-vindo!

Seu problema não é causado pelo nó Wait, mas pela configuração da resposta do Webhook.

Um nó Respond to Webhook é válido apenas quando o gatilho Webhook está configurado para “Respond using Respond to Webhook node.” Em seu workflow, o Webhook não está configurado dessa forma (ele usa resposta imediata/padrão), então o n8n marca corretamente o nó Respond to Webhook como não utilizado, mesmo que você o tenha destinado ao caminho de retomada do Wait.

Solução: configure o modo de resposta do nó Webhook para “Using Respond to Webhook node” ou remova o nó Respond to Webhook (já que execuções retomadas por Wait não podem responder à solicitação webhook original de qualquer forma).

Me avise se isso ajudou 1

Obrigado pela resposta rápida. Tenho ciência de que meu webhook está configurado para responder imediatamente. O nó responder ao webhook pertence ao nó aguardar. Os nós aguardar também podem ser configurados para responder usando um nó responder ao webhook, e é exatamente o que fiz no meu fluxo de trabalho.

Bem vindo à comunidade n8n @JammasterCap
preciso do seu fluxo de trabalho completo para confirmar, fiz o cenário mínimo para testar e não consegui confirmar um bug.

Bem-vindo @JammasterCap!

Entendo perfeitamente o que você está tentando fazer aqui, usando o Responder ao Webhook como um “callback” para a retomada do Wait em vez de para o webhook inicial, e o aviso faz parecer que o n8n não compreende esse padrão mesmo que o fluxo em si funcione

No seu fluxo atual Webhook → Request2 → Wait → Request → Respond success, o nó Responder ao Webhook (“Respond success”) está logicamente no lugar errado para como o n8n espera que esse padrão funcione. De acordo com a documentação, um nó Responder ao Webhook é considerado válido apenas quando pertence a um gatilho Webhook que está explicitamente definido como “Responder usando o Nó ‘Responder ao Webhook’”, e o Responder ao Webhook tem que estar no caminho de execução que começa a partir desse gatilho Webhook.

No seu fluxo de trabalho, o gatilho Webhook não declara responseMode: responseNode (ele responde imediatamente), portanto não “possui” o nó Respond success. Em vez disso, o nó Wait está configurado com responseMode: responseNode, o que significa que quer usar um nó Responder ao Webhook para responder à chamada do webhook de retomada (aquela que acessa $execution.resumeUrl), não à solicitação do gatilho Webhook original.

Efetivamente, esse fluxo de trabalho está tentando usar um único nó Responder ao Webhook para duas conexões HTTP diferentes: uma para a chamada inicial /webhook/bug_minimal e outra para a chamada de retomada do Wait, mas essas são duas solicitações separadas e não podem compartilhar o mesmo Responder ao Webhook da forma que o validador espera. Do ponto de vista do n8n, não há gatilho Webhook configurado com “Usando o Nó ‘Responder ao Webhook’” que corresponda ao seu nó Respond success, então o aviso “Nó Responder ao Webhook não utilizado” não é um bug – ele está corretamente informando que nenhum gatilho Webhook realmente possui esse Responder ao Webhook.

Em vez de usar um nó Respond to Webhook separado no final, deixe o nó Wait lidar com a resposta HTTP diretamente quando for chamado.
Abra seu nó Wait,
Mude o Response Mode de Using Respond to Webhook Node para On Received Response Text (ou Json).
Digite seu payload de resposta de sucesso diretamente no nó Wait (por exemplo, {“status”: “success”}).
Delete o nó Respond success de sua tela.
Isso mantém sua lógica exatamente igual, mas a validação passará perfeitamente porque a resposta está contida inteiramente dentro do nó Wait.
Isso deve corrigir, acho que sim. Se houver outras dúvidas, fico feliz em ajudar.

Desculpe, entendo suas respostas e estou ciente de que esta não é a forma como funciona e não é o que a documentação diz, mas para mim é muito lógico que isso seja um problema e não apenas algo que deva ser aceito do jeito que está.

De acordo com a documentação, um nó Respond to Webhook é considerado válido apenas quando pertence a um gatilho Webhook que está explicitamente configurado para “Respond using ‘Respond to Webhook’ Node”

Se essa declaração fosse verdadeira, não haveria razão para um nó Wait ter uma opção para responder usando RWH, porque isso imediatamente viola a regra em sua declaração. Isso significa que ou a documentação e validação de RWH estão erradas, ou a opção RWH do nó Wait está errada.

Altere o Response Mode de Using Respond to Webhook Node para On Received Response Text (ou Json).
Digite sua resposta de sucesso diretamente no nó Wait (por exemplo, {“status”: “success”}).
Exclua o nó Respond success da sua tela.
Isso mantém sua lógica exatamente igual, mas a validação funcionará perfeitamente porque a resposta está contida entirely dentro do nó Wait.

Essa solução não mantém a lógica igual. No meu fluxo de trabalho real, envio o corpo recebido no nó Wait usando REST para um validador, faço instruções If, posso até salvar coisas em um banco de dados. Quero responder 200 apenas quando todas essas coisas forem concluídas com sucesso. Se mudar meu nó Wait para sempre responder 200, o fluxo de trabalho sempre me dará sucesso, mesmo que, por exemplo, a validação falhe.

É por isso que acho que a forma como descrevi é a forma pretendida:

  • Tanto o nó webhook quanto o nó Wait têm a opção de responder usando um nó Respond to Webhook (vou chamar de RWH daqui em diante porque é complicado de falar). Logicamente, não há muita diferença entre eles, exceto pelo fato de que um webhook deve ser usado para iniciar um fluxo de trabalho.
  • Em qualquer momento, apenas um Wait/Webhook está ativo, aguardando uma solicitação, o que significa que não há ambiguidade lógica sobre qual nó Wait/Webhook um RWH está respondendo.
  • É uma feature absolutamente necessária poder receber uma solicitação em um fluxo de trabalho, fazer algumas ações e então responder positiva ou negativamente com base no resultado dessas ações

Na minha opinião, o n8n deve realizar uma análise adequada do gráfico para encontrar RWHs órfãos.

Além disso, se eu enganar a validação para deixar meu fluxo de trabalho rodar alterando o Webhook para responder usando um RWH desnecessário (desnecessário porque poderia bem ser uma resposta imediata) que retorna 200, o fluxo de trabalho se comporta exatamente como descrevi. Abaixo você pode ver uma versão modificada do fluxo de trabalho, em que primeiro o executo normalmente e depois envio um corpo JSON para o nó Wait com uma única propriedade booleana - stuff. Quando stuff é true, uma solicitação GET é feita e então respondo usando o código de status que recebi da solicitação GET (veja o código do nó RWH). Se stuff for false, a solicitação acionando meu nó Wait receberá 400 como resposta

Esse truque é provavelmente o que usarei daqui em diante (não sabia sobre isso ao escrever o post), mas o fato permanece, há um problema claro aqui.

@JammasterCap Ao adicionar um Webhook fictício → RWH e configurá-lo para ‘responder imediatamente’ a fim de contornar o validador, você confirmou que se trata de um bug do validador e não de um erro de uso. O validador está simplesmente verificando a propriedade e perguntando, ‘este RWH pertence a um Webhook com responseMode: responseNode?’, em vez de fazer uma travessia de gráfico adequada que permitiria ao validador identificar nós Wait com a mesma configuração. Se ainda não o fez, você pode registrar um problema no GitHub: Issues · n8n-io/n8n · GitHub