Describe the problem/error/question
I am trying to use a Human-in-the-loop setup with an n8n chat agent and a Google Sheets tool. However, the agent is not calling the Google Sheets tool with chat HITL node, even after I tried adjusting the system prompt. Does anyone have an idea of how to implement this, or any suggestions for what I should look at in my current setup? Thank you in advance!
Please share your workflow
Share the output returned by the last node
the other tools that connect to the agent is working perfectly fine except the google sheet one that connect to HITL node
The agent isn’t calling that tool for three fixable reasons, and they compound.
-
Tool names with spaces and special characters. customer address checking, Append row in sheet in Google Sheets, and the Call ‘add_to_cart’ style names all hurt tool-calling. The model sees the node name as the tool name, and spaces plus quotes make it unreliable, especially on lighter models. Give every tool a clean, consistent name with no spaces or punctuation. Half your tools already do this (product_catalog_query, address_lookup), so match that: save_customer_address, confirm_address_with_customer, add_to_cart, view_cart, remove_from_cart.
-
The prompt never names the address-save or confirmation step. Your system prompt walks through address_lookup and shipping, but it never tells the agent to call the confirmation/save tool at all. Models call tools far more reliably when the prompt names each tool explicitly and gives always/never rules and an ordered checkout sequence. I rewrote that section below.
-
The model. Your active model is google/gemini-3-flash-preview on OpenRouter (your OpenAI and Gemini nodes aren’t connected to the agent, so they’re inert). Flash-tier models are weak at picking the right tool from a large set. Move to GPT-5 (not mini) or Sonnet 4.5/4.6. That alone usually fixes half of “the agent won’t call my tool.”
Two smaller things I noticed: your HITL message was {{ $tool.parameters.district }}, but the wrapped tool has no district field (it’s district_th), so the confirmation would render blank. I fixed it to show the full address. And once you’ve done the above, if the agent still won’t fire it, connect save_customer_address directly to the agent and drive the approval from the prompt as a fallback.
Here’s your workflow with the renames, the rewritten prompt, GPT-5 wired in, and the HITL message fixed. Import and reconnect your credentials:
Außerdem sehe ich, dass dies dein erstes Beitrag ist…willkommen!! @Theeranop_Laohade
Hallo @Theeranop_Laohade
Das einzige Tool, das nie ausgeführt wird, ist dasjenige hinter dem Human Review Wrapper, also ist der Wrapper der richtige Ort zum Nachschauen, nicht die Reasoning des Agenten. Öffne deine letzte Ausführung, klicke auf den Chat Model Sub-Node und lies seine Eingabe: Das ist die genaue Tool-Liste, die das Modell erhalten hat. Wenn das Google Sheets Tool nicht in dieser Liste ist, hatte das Modell nie die Option, es aufzurufen, und keine Eingabeaufforderung wird das ändern.
Für einen Kunden, der seine eigene Adresse im Chat bestätigt, wird die unterstützte Struktur mit zwei einfachen Tools auf dem Agenten anstelle des Review Wrappers verwendet:
- Chat Node verbunden als Tool, Operation
Send and Wait for Response, Response Type Approval.
- Google Sheets Tool direkt mit dem Agenten verbunden.
Der Agent fragt mit dem ersten nach Bestätigung und fügt die Zeile mit dem zweiten hinzu, sobald der Kunde zustimmt. Dies erfordert den Chat Trigger im Response Mode „Using Response Nodes