Workflow Chat Error-Failed to send message

Describe the problem/error/question

I created a functioning AI Agent workflow that works in the workflow chat, but gives me an error using the n8n Workflow Chat. I updated the nodes and confirmed their version.

The odd extra is that the software, self-hosted on hostinger, says I am a version behind but I’m at the latest version.

What is the error message (if any)? Failed to send message

Agent node version is too old to support streaming responses. Please update the node.

Please share your workflow

(Select the nodes on your canvas and use the keyboard shortcuts CMD+C/CTRL+C and CMD+V/CTRL+V to copy and paste the workflow.)

{
“nodes”: [
{
“parameters”: {
“options”: {
“systemMessage”: “You are a GoHighLevel CRM AI Assistant - a professional, efficient, and proactive sales operations expert.\n\nCORE IDENTITY:\n- Expert in CRM operations, sales pipeline management, and customer relationship optimization\n- Proactive in suggesting next steps and identifying opportunities\n- Always confirm actions taken and provide clear, actionable feedback\n\nCAPABILITIES:\nYou have access to comprehensive GoHighLevel tools:\n• Contact Management: Create, search, update contacts with full profile data\n• Opportunity Management: Create deals, manage pipeline stages, track revenue\n• Task Management: Create follow-ups, assign team members, set deadlines\n• Calendar Management: Schedule appointments, book meetings, manage availability\n• Communication: Send SMS/emails, log interactions, track engagement\n\nINTERACTION STYLE:\n- Be concise but thorough - provide essential details without overwhelming\n- Use emojis strategically for clarity: (success), (tasks), (calendar), (deals)\n- Always ask clarifying questions when information is incomplete\n- Suggest logical next steps after completing actions\n- Do not give ID numbers to the user unless speciicaly asked for\n\nWORKFLOW APPROACH:\n1. Understand the request and identify required information\n2. Execute the appropriate CRM action using available tools\n3. Confirm completion with specific details\n4. Suggest relevant follow-up actions or optimizations\n\nEXAMPLES:\n- After creating a contact: “:white_check_mark: Contact created. Should I create a follow-up task or schedule an initial call?”\n- After finding contacts: “:clipboard: Found 5 matching contacts. Would you like me to create an opportunity for any of them?”\n- For incomplete requests: “I need the contact’s email to create their profile. What’s their email address?”\n\nBe the CRM expert that anticipates needs, streamlines operations, and drives sales success.\n\n\n\nADDITIONAL PROMPT:\nYou are a GoHighLevel CRM AI Assistant with pre-configured settings and strict formatting rules.\n\nDEFAULT SETTINGS (ALWAYS USE THESE UNLESS SPECIFICALLY OVERRIDDEN):\n- Location ID: AXvDf6XU8ECtjzunJhXp\n- Default Assignee: 4o2onbhzlwijorcpakOs\n\nSTOP ASKING FOR REPETITIVE INFORMATION:\n- Never ask for Location ID - always use AXvDf6XU8ECtjzunJhXp automatically\n- Don’t ask for assignment unless user specifically requests it\n- Focus on collecting essential contact info: name, email, phone\n\nSTRICT DATA FORMATTING RULES:\n\n1. Tags Field: ALWAYS send as array of strings\n :white_check_mark: CORRECT: “tags”: [“prospect”, “follow-up”, “hot-lead”]\n :cross_mark: WRONG: “tags”: [{“name”: “prospect”}, {“name”: “follow-up”}]\n :cross_mark: WRONG: “tags”: “prospect”\n\n2. AssignedTo Field: Send as simple string or omit entirely\n :white_check_mark: CORRECT: “assignedTo”: “john-doe” OR omit the field\n :cross_mark: WRONG: “assignedTo”: null OR “assignedTo”: {}\n\n3. Always Required Fields:\n - name: “Contact Name” (string)\n - email: “user@example.com” (valid email string)\n\nINTERACTION STYLE:\n- Be concise but thorough - provide essential details without overwhelming\n- Use emojis strategically for clarity: :white_check_mark: (success), :clipboard: (list), :date: (calendar), :briefcase: (deals)\n- Only ask clarifying questions when information is genuinely missing\n- Suggest logical next steps after completing actions\n\nWORKFLOW APPROACH:\n1. Understand the request and identify required information\n2. Execute the appropriate CRM action using available tools with CORRECT formatting\n3. Confirm completion with specific details\n4. Suggest relevant follow-up actions or optimizations\n\nEXAMPLE RESPONSES:\n- After creating a contact: “:white_check_mark: Contact ‘John Doe’ created successfully. Should I create a follow-up task or schedule an initial call?”\n- After finding contacts: “:clipboard: Found 5 matching contacts. Would you like me to create an opportunity for any of them?”\n- For incomplete requests: “I need the contact’s email to create their profile. What’s their email address?”\n\nREMINDER: FORMAT VALIDATION IS STRICT - FOLLOW THESE RULES EXACTLY”,
“enableStreaming”: true
}
},
“type”: “@n8n/n8n-nodes-langchain.agent”,
“typeVersion”: 3.1,
“position”: [
1184,
-112
],
“id”: “63b9eecc-ba9b-4350-8b9c-9c64ee6cab0b”,
“name”: “AI Agent1”
},
{
“parameters”: {
“availableInChat”: true,
“agentName”: “GHL AI Agent”,
“suggestedPrompts”: {
“prompts”: [
{
“text”: “What can I do for you today David?”
}
]
},
“options”: {
“responseMode”: “streaming”
}
},
“type”: “@n8n/n8n-nodes-langchain.chatTrigger”,
“typeVersion”: 1.4,
“position”: [
928,
-112
],
“id”: “5e256d86-c4e0-4e56-b5b7-e5ad5272a555”,
“name”: “When chat message received”,
“webhookId”: “637948b5-6990-43d2-8f96-f8a25aba22ec”
}
],
“connections”: {
“When chat message received”: {
“main”: [
[
{
“node”: “AI Agent1”,
“type”: “main”,
“index”: 0
}
]
]
}
},
“pinData”: {},
“meta”: {
“instanceId”: “0c92531016f60ab47bf1041ff1b0d2bdfd788a4e2ee7d1df5366344d7b3b776d”
}
}

Share the output returned by the last node

I don’t get past the first hello

Information on your n8n setup

  • n8n version: 2.23.2
  • Database (default: SQLite): sqllite
  • n8n EXECUTIONS_PROCESS setting (default: own, main): ? default i assume
  • Running n8n via (Docker, npm, n8n cloud, desktop app): docker on hosted service
  • Operating system: ubuntu

hi @jeremyrain welcome to the n8n community!
i recommend updating your docker:
docker pull n8nio/n8n:latest
docker-compose down && docker-compose up -d

i disabled streaming and it worked, here’s the code to test

Thank you! Hadn’t thought of that but I did and now everything is up to date and rebooted and republished. Alas, I still get the same error and it only seems to work in the workflow chat still. The agent still gives that immediate error.

I hope i am properly differentiating the Workflow Agent vs. the workflow chat.

Welcome @jeremyrain!

The error points to the AI Agent node’s typeVersion being outdated in the workflow JSON itself - even after upgrading n8n, existing workflows keep the old node version pinned. Open the workflow, click the … menu on canvas → Download, then check the AI Agent node’s typeVersion field. If it’s below 2, delete the agent node, re-add it from the node panel (which will use the latest version), rewire your tools and memory, then re-publish. The Workflow Chat trigger requires a newer agent node version to handle streaming correctly.

Hi @jeremyrain

The error you’re seeing happens because your chat window and your AI Agent node are “speaking different languages.” While your overall software might be updated, the specific AI Agent node inside your workflow is stuck on an older version. The chat window expects a modern way of sending text (streaming), but the old node doesn’t know how to provide it.

Even when you update n8n, the software doesn’t automatically upgrade nodes in your existing workflows because doing so could accidentally break your settings. This is why you’re seeing a “version too old” error even though you believe you are on the latest version of the software.

To fix this, you first need to make sure your Hostinger server is truly up to date so that the “version behind” warning disappears. Once the server is current, the best solution is to delete the AI Agent node from your canvas and add a brand new one. This forces the system to use the newest version available, which fully supports the streaming feature.

If you are in a rush and don’t care about the “typing” animation, there is a quick shortcut. You can simply turn off “streaming” in both the Chat Trigger and the AI Agent node settings. This tells the chat to wait until the full answer is ready before displaying it, which bypasses the version requirement entirely.

Since your previous JSON was missing the Model and Memory nodes (which are required for the AI Agent to actually function), I have built a complete, corrected version for you. Can you try this?

Important: I have used the OpenAI Chat Model as the default. If you use Anthropic or Ollama, simply delete the OpenAI node and add your preferred model node in its place.

The error is precise: the chat interface wants to stream the response and your AI Agent node version does not support streaming, so it fails to send. Two ways out, and the version-mismatch confusion is a separate thing to clear up.

Fastest fix: open the AI Agent node, and in its options turn streaming off (disable “stream response”). Non-streaming works on the older node version and the chat will send normally. If you want streaming, you need the node updated, which means actually updating n8n, not just the node.

On “it says I am a version behind but I am on latest”: that usually means your Docker image did not actually pull the new version. docker pull n8nio/n8n:latest then docker compose down and up again forces it. The UI compares against the released version, so if it still says behind after a real pull and restart, check you are not pinned to a specific version tag in your compose file instead of latest.

ok, did you also use the node I sent you [quote=“tamy.santos, post:2, topic:297859”]
I disabled streaming and it worked, here’s the code to test
[/quote] ?

If so, could you please send me the JSON again?

The error is straightforward your Chat Trigger is set to streaming mode but the Agent node version you’re running doesn’t fully support it yet in 2.23.2.

Looking at your workflow, your Chat Trigger has responseMode: streaming and your Agent node has enableStreaming: true. That combination requires a newer Agent node version than what ships with 2.23.2.

Two ways to fix this:

  1. Easiest: Turn off streaming. In your Chat Trigger node change the response mode from streaming to lastNode and in your Agent node set enableStreaming to false. Your workflow will work exactly the same, responses just won’t stream word by word.

  2. Proper fix :Upgrade n8n to the latest version. The Agent node received streaming support improvements in versions after 2.23.2. Since you’re on Docker it’s just a matter of pulling the latest image:

docker pull n8nio/n8n:latest
docker stop n8n
docker rm n8n

Then restart with your usual docker run command.

Regarding the version warning on your Hostinger instance — that's likely just the n8n update checker comparing your version against the latest release. It doesn't affect functionality but it does confirm that upgrading would resolve this properly.

Given that the workflow works fine in the regular chat but fails in the Widget chat, the streaming mismatch is definitely the cause. Disabling streaming is the quickest fix if you don't want to upgrade right now.

Eventually I had to update all server software, docker, and n8n, as well as created a new workflow, to start from scratch just to be sure that is all set and it worked with both of the nodes set to stream.

Still have that issue of it saying I’m not on the right version but who cares? :slight_smile:

Thank you!!

Here’s my final code:

{
“nodes”: [
{
“parameters”: {
“availableInChat”: true,
“agentName”: “GHL Motha Fucka”,
“agentDescription”: “Bringing your bad-ass self to the game.”,
“suggestedPrompts”: {
“prompts”: [
{
“text”: “Hi David, what shall we tackle today?”
}
]
},
“options”: {
“responseMode”: “streaming”
}
},
“type”: “@n8n/n8n-nodes-langchain.chatTrigger”,
“typeVersion”: 1.4,
“position”: [
0,
0
],
“id”: “dd4a7fe4-add6-40d7-bdde-7a6aaf8f3912”,
“name”: “When chat message received”,
“webhookId”: “fixed-webhook-id”
},
{
“parameters”: {
“options”: {
“systemMessage”: “You are a GoHighLevel CRM AI Assistant - a professional, efficient, and proactive sales operations expert.\n\nCORE IDENTITY:\n- Expert in CRM operations, sales pipeline management, and customer relationship optimization\n- Proactive in suggesting next steps and identifying opportunities\n- Always confirm actions taken and provide clear, actionable feedback\n\nCAPABILITIES:\nYou have access to comprehensive GoHighLevel tools:\n• Contact Management: Create, search, update contacts with full profile data\n• Opportunity Management: Create deals, manage pipeline stages, track revenue\n• Task Management: Create follow-ups, assign team members, set deadlines\n• Calendar Management: Schedule appointments, book meetings, manage availability\n• Communication: Send SMS/emails, log interactions, track engagement\n\nINTERACTION STYLE:\n- Be concise but thorough - provide essential details without overwhelming\n- Use emojis strategically for clarity: (success), (tasks), (calendar), (deals)\n- Always ask clarifying questions when information is incomplete\n- Suggest logical next steps after completing actions\n- Do not give ID numbers to the user unless specifically asked for\n\nWORKFLOW APPROACH:\n1. Understand the request and identify required information\n2. Execute the appropriate CRM action using available tools\n3. Confirm completion with specific details\n4. Suggest relevant follow-up actions or optimizations\n\nEXAMPLES:\n- After creating a contact: “:white_check_mark: Contact created. Should I create a follow-up task or schedule an initial call?”\n- After finding contacts: “:clipboard: Found 5 matching contacts. Would you like me to create an opportunity for any of them?”\n- For incomplete requests: “I need the contact’s email to create their profile. What’s their email address?”\n\nBe the CRM expert that anticipates needs, streamlines operations, and drives sales success.\n\n\n\nADDITIONAL PROMPT:\nYou are a GoHighLevel CRM AI Assistant with pre-configured settings and strict formatting rules.\n\nDEFAULT SETTINGS (ALWAYS USE THESE UNLESS SPECIFICALLY OVERRIDDEN):\n- Location ID: AXvDf6XU8ECtjzunJhXp\n- Default Assignee: 4o2onbhzlwijorcpakOs\n\nSTOP ASKING FOR REPETITIVE INFORMATION:\n- Never ask for Location ID - always use AXvDf6XU8ECtjzunJhXp automatically\n- Don’t ask for assignment unless user specifically requests it\n- Focus on collecting essential contact info: name, email, phone\n\nSTRICT DATA FORMATTING RULES:\n\n1. Tags Field: ALWAYS send as array of strings\n​:white_check_mark: CORRECT: “tags”: [“prospect”, “follow-up”, “hot-lead”]\n​:cross_mark: WRONG: “tags”: [{“name”: “prospect”}, {“name”: “follow-up”}]\n​:cross_mark: WRONG: “tags”: “prospect”\n\n2. AssignedTo Field: Send as simple string or omit entirely\n​:white_check_mark: CORRECT: “assignedTo”: “john-doe” OR omit the field\n​:cross_mark: WRONG: “assignedTo”: null OR “assignedTo”: {}\n\n3. Always Required Fields:\n - name: “Contact Name” (string)\n - email: “user@example.com” (valid email string)\n\nINTERACTION STYLE:\n- Be concise but thorough - provide essential details without overwhelming\n- Use emojis strategically for clarity: :white_check_mark: (success), :clipboard: (list), :date: (calendar), :briefcase: (deals)\n- Only ask clarifying questions when information is genuinely missing\n- Suggest logical next steps after completing actions\n\nWORKFLOW APPROACH:\n1. Understand the request and identify required information\n2. Execute the appropriate CRM action using available tools with CORRECT formatting\n3. Confirm completion with specific details\n4. Suggest relevant follow-up actions or optimizations\n\nEXAMPLE RESPONSES:\n- After creating a contact: “:white_check_mark: Contact ‘John Doe’ created successfully. Should I create a follow-up task or schedule an initial call?”\n- After finding contacts: “:clipboard: Found 5 matching contacts. Would you like me to create an opportunity for any of them?”\n- For incomplete requests: “I need the contact’s email to create their profile. What’s their email address?”\n\nREMINDER: FORMAT VALIDATION IS STRICT - FOLLOW THESE RULES EXACTLY”,
“enableStreaming”: true
}
},
“type”: “@n8n/n8n-nodes-langchain.agent”,
“typeVersion”: 3.1,
“position”: [
224,
0
],
“id”: “e8600fda-e573-484d-a6d5-2e214b210c0d”,
“name”: “AI Agent1”
},
{
“parameters”: {
“model”: “gpt-oss:120b”,
“options”: {}
},
“type”: “@n8n/n8n-nodes-langchain.lmChatOllama”,
“typeVersion”: 1,
“position”: [
96,
208
],
“id”: “4a630eba-1b7a-4c27-a87b-ae37ef209948”,
“name”: “Ollama Chat Model”,
“credentials”: {
“ollamaApi”: {
“id”: “cUqNJwTMioEVBx1H”,
“name”: “Ollama account”
}
}
},
{
“parameters”: {
“contextWindowLength”: 10
},
“type”: “@n8n/n8n-nodes-langchain.memoryBufferWindow”,
“typeVersion”: 1.4,
“position”: [
272,
208
],
“id”: “398e3962-22d2-406a-bc1f-6f91b47b98b0”,
“name”: “Simple Memory”
},
{
“parameters”: {
“endpointUrl”: “https://services.leadconnectorhq.com/mcp/”,
“authentication”: “bearerAuth”,
“options”: {
“timeout”: 80000
}
},
“type”: “@n8n/n8n-nodes-langchain.mcpClientTool”,
“typeVersion”: 1.2,
“position”: [
464,
208
],
“id”: “7e08b64b-114e-437b-b772-7a2547da52fb”,
“name”: “MCP GHL”,
“credentials”: {
“httpBearerAuth”: {
“id”: “6HtkB0TOQ2FrWmgQ”,
“name”: “Bearer Auth account”
}
}
}
],
“connections”: {
“When chat message received”: {
“main”: [
[
{
“node”: “AI Agent1”,
“type”: “main”,
“index”: 0
}
]
]
},
“Ollama Chat Model”: {
“ai_languageModel”: [
[
{
“node”: “AI Agent1”,
“type”: “ai_languageModel”,
“index”: 0
}
]
]
},
“Simple Memory”: {
“ai_memory”: [
[
{
“node”: “AI Agent1”,
“type”: “ai_memory”,
“index”: 0
}
]
]
},
“MCP GHL”: {
“ai_tool”: [
[
{
“node”: “AI Agent1”,
“type”: “ai_tool”,
“index”: 0
}
]
]
}
},
“pinData”: {},
“meta”: {
“templateCredsSetupCompleted”: true,
“instanceId”: “0c92531016f60ab47bf1041ff1b0d2bdfd788a4e2ee7d1df5366344d7b3b776d”
}
}

Thank you for the help! I appreciate it.

Thank you for that help. I think overall your solution covered things.

The n8n version is still weird. I don’t know what to make of it I’m definitely on the latest version. Still, this isn’t as important as the workflow and chat.

Thanks for your help!

@jeremyrain, please mark my reply as the solution if it has helped you. Thank you!!