error triggering calendar event tools connected to ai agent
Describe the problem/error/question
so i have a webhook as a trigger that collects data from gohighlevel voice agent than after that theres a ai agent and multiple other nodes after that agent.
the agent has a Postgres Chat Memory and gpt-4.1 chat model connected and the tools connected are three calender tools one that suppose to delete any events named “delete_calendar_event”, one that suppose to create event named “create_calendar_event” and the other that suppose to updates events named “update_calendar_event”.
regardless how i prompt the “Prompt (User Message)” and the “System Message”; or name each tool or describe each tool the agent for some reasons always says with a lil banner on the top of the output “None of your tools were used in this run. Try giving your tools clearer names and descriptions to help the Al” even when i added a clean simple descriptions
for example “call this tool to create events” or “use this tool to create events”
the output from the agent always says this
“{\n “acknowledged”: true,\n “core_policy”: “All actions for booking, updating, rescheduling, or deleting appointments MUST exclusively use the described Google Calendar event tools. No knowledge-only responses are permitted.”,\n “tool_usage”: {\n “create_new_event”: “CALL create_calendar_event”,\n “update_existing_event”: “CALL update_calendar_event”,\n “reschedule_event”: “CALL update_calendar_event”,\n “delete_event”: “CALL delete_calendar_event”,\n “multi_step_reschedule_flow”: [\n “CALL update_calendar_event”,\n “CALL delete_calendar_event”\n ]\n },\n “restriction”: “All calendar actions must be performed via the above tools only. No actions outside of the described tool flows are allowed.”\n}”
i then set the description of two of the calender event tools that are connected to the agent for “update_calendar_event” and “delete_calendar_event” to automatic
and neither of the calendar tools are being excuted
im running the laest n8n update ive checked and ran test and still the same issue ether me calling the agent or excuing the workflow in n8n maaneul the same issue happens regardless.
i have photos of my workflow but cant see a option in attaching it?
please if any one can suggest anything to help me resolve this i would be very appreacted of your help. this issue is been causing my many sleepless nights and i cant figure out what the issue could be.
What is the error message (if any)?
Please share your workflow
{
"nodes": [
{
"parameters": {
"promptType": "define",
"text": "=your main job is to book, reschedule, update amd delete appointments by calling google calender event tools\n\nyou must always use the Google Calendar event tools for any booking change and never answer from “knowledge only”.\n\nThis agent exists solely to manage booking calendar events; by calling google calender tools defind below.\n\n* create a new event CALL \"create_calendar_event\" google calender event tool\n\n* Update an existing event CALL \"update_calendar_event\" google calender event tool\n\n* Reschedule an event CALL \"update_calendar_event\" google calender event tool\n\n* Delete an event CALL \"delete_calendar_event\" google calender event tool\n\n* Complete a reschedule flow that requires multiple steps (e.g. update + delete old event)",
"options": {
"systemMessage": "=Purpose\nThis AI agent acts as an intelligent calendar controller inside an n8n workflow.\nIts primary purpose is to:\n* Interpret raw natural language input received from a webhook\n* Infer the user’s intent related to Google Calendar event actions\n* Decide which calendar event tool should be CALLED\n* Generate a structured JSON payload compatible with n8n expressions for downstream Google Calendar tools\nThe agent is strictly calendar only.\n\nScope Limitation (Mandatory)\nThis agent exists solely to manage calendar events.\nIf the input does not relate to booking an event, updating an event, rescheduling an event or deleting calendar events, the agent must still return structured JSON indicating no valid calendar event action detected, without commentary.\n\nyou must always use the Google Calendar event tools for any booking change and never answer from “knowledge only”.\n\nCore Responsibilities\nThe agent is responsible for managing calendar events by determining whether the user intends to:\n* Book a new appointment CALLING \"create_calendar_event\" google calender event tool\n\n* Update an existing appointment CALLING \"update_calendar_event\" google calender event tool\n\n* Reschedule an appointment CALLING \"update booked appointment\" google calender tool\n\n* Delete an appointment CALLING \"delete_calendar_event\" google calender tool\n\n* Complete a reschedule flow that requires multiple steps (e.g. update + delete old event)\n\nAs part of these responsibilities, the agent must:\nmust select the correct Google Calendar event tool based on inferred intent, even when the input is vague or conversational.\n\nCapabilities\n* Analyze raw input that contain:\n * event details\n steps\n* Infer intent such as:\n * Booking a new event by CALLING the \"create_calendar_event\" Google calender tool\n\n * Moving an existing event to a {{ $json.query.Date_of_appointment }} or {{ $json.query.Time_of_appointment }} by CALLING the \"update_calendar_event\" Google calender event tool\n\n * Cancelling an event by CALLING the \"delete_calendar_event\" Google calender event tool\n\n* Store and retrieve contextual calendar related data using the \"Postgres Chat Memory\" for retreval of customer data like {{ $json.query.first_name }} and {{ $json.query.last_name }}, customer {{ $json.query.number }}, {{ $json.query.email }}, {{ $json.query.full_address_of_property }} and {{ $json.query.description_of_issue }}.\n\nInteraction Rules\n\nIntent Inference Logic\nThe agent must infer intent using semantic meaning, not keywords alone, and determine whether Tool must be CALLED as a part of the action.\n\nExamples:\n* “I need to move my call to Friday” CALL tool \"update_calendar_event\", then CALL \"update_calendar_event\" event tool\n\n* “Cancel my appointment” CALL \"delete_calendar_event\" tool\n\n* “Book me in for next Tuesday at 3” CALL \"create_calendar_event\"\n\n* “Change the time of my meeting” CALL \"update_calendar_event\" tool then CALL \"create_calendar_event\" tool\n\n* “can you Reschedule and remove the old one” CALL \"update_calendar_event\" tool\n\nevents must always be booked, by CALLING the\n* Creating a new event by CALLing \"create_calendar_event\"\n* Changing the date or time of an existing event CALL \"update_calendar_event\"\n\nTool Availability include:\n\n* create event CALL \"create_calendar_event\" Google calender event tool\nUsed to create a new calendar event when no existing event is being modified or existed.\n\n* Update booked appointment CALL \"update_calendar_event\" Google calender event tool\nUsed to modify details of an existing event ({{ $json.query.Time_of_appointment }} and {{ $json.query.Date_of_appointment }}. when the event remains the same. also use this \"update_calendar_event\" Google calender event tool for rescheduling an event\n\n* Update booking after reschedule CALL \"update_calendar_event\" Google calender event tool\nUsed when an appointment is being moved to a new {{ $json.query.Time_of_appointment }} or {{ $json.query.Date_of_appointment }} and requires updating the existing event as part of a rescheduling flow.\n\n* Delete a event CALL \"delete_calendar_event\" Google calender tool\nUsed to remove an old or superseded event after a successful reschedule, when required or simple used to completly delete events entirely.\n\n* to store or retrieve data CALL \"Postgres Chat Memory\" tool Used to store and retrieve persistent, calendar related context across executions.\n\nThis tool must be CALLED to also be used to store and retrieve customer related details associated with calendar events, including:\n* Customer {{ $json.query.first_name }} and {{ $json.query.last_name }}\n* Phone number:{{ $json.query.number }}\n* Email address:{{ $json.query.email }}\n* Description of the customer’s issue or request:{{ $json.query.description_of_issue }}\n* Full address of the property:{{ $json.query.full_address_of_property }}\n\nThe Postgres Chat Memory tool must use the following exact identifier for storage and retrieval:\n{{ $json.headers['user-agent'] }}\n\nThe agent must CALL the \"Postgres Chat Memory\" tool when:\n* when action's like (update, reschedule, or delete) depends on past calendar state\n* Customer details need to be reused to complete a “create_calendar_event”, “update_calendar_event”, reschedule using the \"update_calendar_event\" event tool, or cancellation without re-collecting the same information\n\nThe agent must:\n* Retrieve relevant stored data from \"Postgres Chat Memory\" before modifying or cancelling any appointment\n\n* Store newly confirmed event identifiers using the \"Postgres Chat Memory\" memory, booking times, action outcomes, and customer details after successful booking or rescheduling\n\n* CALL the correct tool based on inferred intent\n\n* Use only tools that are appropriate and described by there descriptions for the requested specified action\n\n* Never assume tool behaviour beyond what is available and described\n\n* Never execute more than one appropriate and described by there descriptions tool action unless the intent clearly requires a multi-step reschedule flow\n\nEach execution must resolve to one clear tool selection or one clearly defined action sequence suitable for deterministic routing inside n8n.\n\nNotes\n* All timezones provided are England / United Kingdom GMT timezone unless otherwise stated.\n* When checking availability, by CALLING the \"fetch calendar availability\" tool only check for times within the next week, two weeks, or this week, unless otherwise stated.\n* Always check availability by CALLING the \"fetch calendar availability\" tool before booking or rescheduling.\n* Never modify or cancel an appointment unless you are sure you have identified the correct event.",
"maxIterations": 10,
"returnIntermediateSteps": true
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 3,
"position": [
208,
0
],
"id": "5d34e0a7-38f3-4bb6-bda0-005aedc63609",
"name": "booking Agent",
"alwaysOutputData": false,
"notesInFlow": false
},
{
"parameters": {
"httpMethod": "POST",
"path": "a193918c-a2ee-421d-a6d8-23dc869f1b0f",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
16,
0
],
"id": "fa16d283-4420-4b9d-ab05-45882c160efd",
"name": "fetch booking",
"webhookId": "a193918c-a2ee-421d-a6d8-23dc869f1b0f"
},
{
"parameters": {
"sessionIdType": "customKey",
"sessionKey": "={{ $json.headers['user-agent'] }}"
},
"type": "@n8n/n8n-nodes-langchain.memoryPostgresChat",
"typeVersion": 1.3,
"position": [
160,
320
],
"id": "7ca84191-88d4-450e-acfb-1fd576ec3023",
"name": "Postgres Chat Memory",
"credentials": {
"postgres": {
"id": "OETzGT02IWnQLl1K",
"name": "Postgres account"
}
}
},
{
"parameters": {
"sendTo": "@gmail.com",
"subject": "=Appointment booked for {{ $('Edit Fields').item.json.Customer_full_name }}",
"message": "=<p>hay company owner</p>\n\n<p>\nyou have a appointment on {{ $('Edit Fields').item.json.Date_of_appointment }} with {{ $('Edit Fields').item.json.Customer_full_name }}\n</p>\n\n<h3 style=\"margin-bottom:4px;\"><strong>Appointment Details</strong></h3>\n<p style=\"margin-top:0;\">\n{{ $('Edit Fields').item.json.Date_of_appointment }}\n</p>\n\n<h3 style=\"margin-bottom:4px;\"><strong>Description of Issue</strong></h3>\n<p style=\"margin-top:0;\">\n{{ $('Edit Fields').item.json.Description_of_issue }}\n</p>\n\n<h3 style=\"margin-bottom:6px;\"><strong>Customer Details</strong></h3>\n\n<h3 style=\"margin-bottom:2px; font-weight:bold;\">Full name</h3>\n<p style=\"margin-top:0;\">\n{{ $('Edit Fields').item.json.Customer_full_name }}\n</p>\n\n<h3 style=\"margin-bottom:2px; font-weight:bold;\">Contact number</h3>\n<p style=\"margin-top:0;\">\n{{ $('Edit Fields').item.json.customer_number }}\n</p>\n\n<h3 style=\"margin-bottom:2px; font-weight:bold;\">Contact email</h3>\n<p style=\"margin-top:0;\">\n{{ $('Edit Fields').item.json.Customer_email }}\n</p>\n\n<h3 style=\"margin-bottom:6px;\"><strong>Address of Dispute</strong></h3>\n<p style=\"margin-top:0;\">\n{{ $json.Customer_full_address }}\n</p>\n\n<p>\nall the best<br>\nyour virtual assitant\n</p>",
"options": {
"appendAttribution": false
}
},
"type": "n8n-nodes-base.gmail",
"typeVersion": 2.2,
"position": [
704,
-16
],
"id": "baab78b9-b23f-461b-8f18-4b7a9500ffe7",
"name": "email summary",
"webhookId": "af402aa9-4bba-419b-9b80-223013fe3842",
"executeOnce": false,
"credentials": {
"gmailOAuth2": {
"id": "T37bZ2QZGexG0naC",
"name": "Lincoln reaval gmail"
}
}
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "f9bc2e93-8d62-4fe5-8af0-ce1613d864d2",
"name": "Customer_full_name",
"value": "={{ $('fetch booking').item.json.query.first_name }} {{ $('fetch booking').item.json.query.last_name }}",
"type": "string"
},
{
"id": "5d2d0109-d8cd-44cd-a6a4-99b8249c56ab",
"name": "customer_number",
"value": "={{ $('fetch booking').item.json.query.number }}",
"type": "string"
},
{
"id": "c64a20cc-2578-4d59-b712-87e1e0cef389",
"name": "Customer_email",
"value": "={{ $('fetch booking').item.json.query.email }}",
"type": "string"
},
{
"id": "eaab876e-3050-4a30-81e7-6909f20167bc",
"name": "Customer_full_address",
"value": "={{ $('fetch booking').item.json.query.full_address_of_property }}",
"type": "string"
},
{
"id": "c944eab0-f1f8-4e77-a226-9a940932d417",
"name": "Description_of_issue",
"value": "={{ $('fetch booking').item.json.query.description_of_issue }}",
"type": "string"
},
{
"id": "73bd698a-8219-496f-897f-799d885579a6",
"name": "Date_of_appointment",
"value": "={{ $('fetch booking').item.json.query.Date_of_appointment.split('-').reverse().join('/') }} at {{ $('fetch booking').item.json.query.Time_of_appointment.replace(/\\n/g, '').trim() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
512,
-16
],
"id": "da7ba2e4-3a91-4097-8484-8c7d46d08988",
"name": "Edit Fields"
},
{
"parameters": {
"respondWith": "redirect",
"redirectURL": "https://services.leadconnectorhq.com/hooks/pw9sC0qpJimnJBqcOhBQ/webhook-trigger/edf30016-0edb-434e-85fe-c3c9fcf6fc68",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [
912,
-16
],
"id": "620a96fc-26fe-47e3-b586-8f2c49a35cbd",
"name": "Respond to Webhook"
},
{
"parameters": {
"model": {
"__rl": true,
"value": "gpt-4.1",
"mode": "list",
"cachedResultName": "gpt-4.1"
},
"responsesApiEnabled": false,
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.3,
"position": [
0,
224
],
"id": "6a53358b-a731-47d2-b8cc-00a32a6a77ab",
"name": "OpenAI Chat Model",
"credentials": {
"openAiApi": {
"id": "dSKM1LjkMbbw0ZBb",
"name": "OpenAi account 2"
}
}
},
{
"parameters": {
"descriptionType": "manual",
"toolDescription": "=Use this tool to create a new calendar event.",
"calendar": {
"__rl": true,
"value": "@gmail.com",
"mode": "list",
"cachedResultName": "@gmail.com"
},
"start": "={{ $json.query.Date_of_appointment }} {{ $json.query.Time_of_appointment }}",
"end": "={{ $json.query.Date_of_appointment }} {{ $json.query.Time_of_appointment }}",
"useDefaultReminders": false,
"additionalFields": {
"attendees": [
"={{ $json.query.first_name }} {{ $json.query.last_name }}"
],
"description": "={{ $json.query.description_of_issue }}",
"location": "={{ $json.query.full_address_of_property }}"
}
},
"type": "n8n-nodes-base.googleCalendarTool",
"typeVersion": 1.3,
"position": [
480,
352
],
"id": "d41601dd-e5db-4b26-ad5d-76455dd06acd",
"name": "create_calendar_event",
"notesInFlow": true,
"credentials": {
"googleCalendarOAuth2Api": {
"id": "v5Pn0QV34gAY0cIF",
"name": " gmail calendar"
}
}
},
{
"parameters": {
"operation": "update",
"calendar": {
"__rl": true,
"value": "@gmail.com",
"mode": "list",
"cachedResultName": "@gmail.com"
},
"eventId": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Event_ID', ``, 'string') }}",
"useDefaultReminders": false,
"updateFields": {
"attendeesUi": {
"values": {
"mode": "replace",
"attendees": [
"={{ $json.query.first_name }} {{ $json.query.last_name }}"
]
}
},
"description": "={{ $json.query.description_of_issue }}",
"location": "={{ $json.query.full_address_of_property }}"
}
},
"type": "n8n-nodes-base.googleCalendarTool",
"typeVersion": 1.3,
"position": [
320,
384
],
"id": "7987c8b9-fdac-4cf6-a73e-c1299495db85",
"name": "update_calendar_event",
"credentials": {
"googleCalendarOAuth2Api": {
"id": "v5Pn0QV34gAY0cIF",
"name": " gmail calendar"
}
}
},
{
"parameters": {
"operation": "delete",
"calendar": {
"__rl": true,
"value": "@gmail.com",
"mode": "list",
"cachedResultName": "@gmail.com"
},
"eventId": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Event_ID', ``, 'string') }}",
"options": {}
},
"type": "n8n-nodes-base.googleCalendarTool",
"typeVersion": 1.3,
"position": [
640,
384
],
"id": "3deadc67-ca18-456b-bbef-b509dffa00da",
"name": "delete_calendar_event",
"credentials": {
"googleCalendarOAuth2Api": {
"id": "v5Pn0QV34gAY0cIF",
"name": " gmail calendar"
}
}
}
],
"connections": {
"booking Agent": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"fetch booking": {
"main": [
[
{
"node": "booking Agent",
"type": "main",
"index": 0
}
]
]
},
"Postgres Chat Memory": {
"ai_memory": [
[
{
"node": "booking Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"email summary": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "email summary",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "booking Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"create_calendar_event": {
"ai_tool": [
[
{
"node": "booking Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"update_calendar_event": {
"ai_tool": [
[
{
"node": "booking Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"delete_calendar_event": {
"ai_tool": [
[
{
"node": "booking Agent",
"type": "ai_tool",
"index": 0
}
]
]
}
},
"pinData": {
"fetch booking": [
{
"headers": {
"host": "l1m-itles67.app.n8n.cloud",
"user-agent": "axios/0.30.2",
"content-length": "0",
"accept": "application/json, text/plain, */*",
"accept-encoding": "gzip, br",
"cdn-loop": "cloudflare; loops=1; subreqs=1",
"cf-connecting-ip": "136.113.160.249",
"cf-ew-via": "15",
"cf-ipcountry": "US",
"cf-ray": "9cc70cf7319b029d-ORD",
"cf-visitor": "{\"scheme\":\"https\"}",
"cf-worker": "n8n.cloud",
"content-type": "application/x-www-form-urlencoded",
"traceparent": "00-34ed3079fe0e8b996ae907409a54521d-d0337cf7d4b56881-01",
"x-forwarded-for": "136.113.160.249, 172.70.179.197",
"x-forwarded-host": "l1m-itles67.app.n8n.cloud",
"x-forwarded-port": "443",
"x-forwarded-proto": "https",
"x-forwarded-server": "traefik-prod-users-gwc-43-869467f569-bd6m6",
"x-is-trusted": "yes",
"x-real-ip": "136.113.160.249"
},
"params": {},
"query": {
"first_name": "",
"last_name": "",
"number": "",
"email": "",
"full_address_of_property": "",
"description_of_issue": "Need a couple of tiles to be replaced",
"Date_of_appointment": "2026-02-12",
"Time_of_appointment": "12:00pm"
},
"body": {},
"webhookUrl": "https://l1m-itles67.app.n8n.cloud/webhook/a193918c-a2ee-421d-a6d8-23dc869f1b0f",
"executionMode": "production"
}
]
},
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "fe09d47f95f0019413925eb9f2d999798947a4fa4230b9304b400f376dd31c44"
}
}Share the output returned by the last node
Information on your n8n setup
- n8n version:
- Database (default: SQLite):
- n8n EXECUTIONS_PROCESS setting (default: own, main):
- Running n8n via (Docker, npm, n8n cloud, desktop app):
- Operating system: