Respond to webhook doesn't work with chat

I have this simple workflow

I want to save the chat in a google sheet. But if I put the Sheets node after the AI agent, its output is sent as a reply to the chat.
First of all, it wasn’t happening before. It started today.
But I thought I could solve using the Respond to Webook node paired with the chat. No matter the settings, the chat never printed the reply. It was stuck loading. Why?

I didn’t solve the webhook problem. If you have any idea tell me.

But I solved the initial problem: adding nodes AFTER the AI agent node without sending their output to the chat.

You just have to add an Edit Field node as the last node in the workflow and put the output in a field

Here is an idea? What if you add another tool for that?

This is the chat:

This is the sheet:

Problem 1: Google Sheets Output Appearing in Chat

This happens when all node outputs get passed down the line to your chat reply.

Solution: Use a Set node right before your final chat reply.

  1. Add a Set node.
  2. Create a variable (e.g., chat_reply) and set its value to the specific text output from your AI Agent (e.g., {{ $node["AI Agent"].json["your_response_field"] }}).
  3. Crucially, enable “Keep Only Set” in the Set node’s settings. This ensures only your desired chat reply goes forward.
  4. Make sure your chat reply node then uses this chat_reply variable.

Problem 2: “Respond to Webhook” Stuck Loading with Chat

The “Respond to Webhook” node is for immediate responses to the initial webhook that started the workflow. It’s not for sending replies in an ongoing chat. Your chat platform is likely timing out waiting for the initial response, or you’re trying to send a reply to the wrong place.

Solution: Don’t use “Respond to Webhook” for chat replies.

  1. Remove the “Respond to Webhook” node.
  2. Instead, use the specific chat integration node corresponding to your trigger (e.g., a Telegram node if you’re using a Telegram Trigger, or a Slack node if you’re using a Slack Trigger).
  3. Configure this node to send a message:
  • Get the Chat ID/Channel ID from your trigger node (e.g., {{ $json.chat.id }}).
  • For the message Text, use the output from your Set node (e.g., {{ $node["Set"].json["chat_reply"] }}).

This will ensure your chat replies are sent correctly through the chat platform’s API, preventing timeouts and “stuck loading” issues.

I did it.
The agent never called that tool. Maybe the system prompt was already too complicated.
Maybe it could work within a subworkflow. But the current solution works 100% of the times, without the need of fiddling with the prompt.

Thanks, that’s what I did. I wrote about it earlier.

You say to not use the webhook. So, what’s the webhook mode in the chat for?

Noticed this issue today as well, the chat box doesn’t seem to utilize the Respond to webhook node accordingly and instead will always just use the output of the last item in the workflow. Tried to think of a few workarounds including code block to output text, but since n8n always wants the output formatted, the chat window will also have { } brackets no matter what.
This is for both the cloud version [1.101.2] and self-hosted version [1.100.1] as of today.