Skip to content
AI Agent How-To

Home ›Build an agent that does X

Build an AI Agent That Books Meetings

Intermediate ~6 min read Last tested October 2026

Updated 2026-10-28

An agent that books meetings needs two calendar operations, and nothing else. In n8n, attach the Google Calendar node as a tool, once to check whether a time is free and once to create the event. The model fills the time fields. It cannot delete events unless you add that operation. Add n8n AI agent memory when booking chats need thread context. Last tested 2026-10-20.

Prerequisites

  • n8n Cloud or self-hosted n8n, with a current AI Agent node. The agent type setting is deprecated from n8n 1.82.0.
  • A Google account that can create events on the calendar you want the agent to use.
  • A chat model credential in n8n.

Docs used for the steps below:

Steps

1. Connect Google Calendar

n8n’s Google Calendar node supports OAuth2. It does not support a service account. On n8n Cloud, Managed OAuth2 covers Google Calendar. You sign in with Google in n8n and do not create a Google Cloud project. Managed OAuth2 is not available on self-hosted n8n. Self-hosted instances use Custom OAuth2, configured from the Google credentials page.

Create the credential and complete the Google consent screen before you add the agent. The tool cannot read availability until that credential succeeds.

2. Add the AI Agent and a chat model

  1. Add an AI Agent node.
  2. Connect a chat model with the Chat Model connector. The error “A Chat Model sub-node must be connected” means that connector is empty.
  3. Add a Chat Trigger and leave Prompt set to Connected Chat Trigger Node.
  4. Optional: attach n8n AI agent memory so a follow-up message (“move it to 4pm”) keeps the earlier booking context.

The agent must have at least one tool sub-node. The next step adds two.

3. Add an availability tool

n8n’s Google Calendar page says the node can be used as an AI tool. The documented operations include “Calendar Availability: If a time-slot is available in a calendar” and “Event Create: Add an event to calendar”. Also listed are Get, Get Many, Update, and Delete. Do not attach Delete.

Connect one Google Calendar node as a tool and set its operation to Calendar Availability. Select the credential from step 1 and the calendar the agent should read.

Each parameter field has a button that lets the model fill the value. Activating it overwrites a value you typed. You can also write the expression yourself. $fromAI() is only available on tools connected to the AI Agent. The key is a hint of 1 to 64 characters.

Use that expression on the parameter that holds the start of the window you want to check, and a second call on the parameter that holds the end:

{{ $fromAI('window_start', 'Start of the window to check, ISO 8601', 'string') }}
{{ $fromAI('window_end', 'End of the window to check, ISO 8601', 'string') }}

Those keys are hints for the model. They are not Google API field names.

4. Add a create-event tool

Connect a second Google Calendar tool node. Set the operation to Event Create. Use the same credential and the same calendar.

Let the model fill the event title and the start and end with the button on those fields, or with $fromAI():

{{ $fromAI('title', 'Short event title', 'string') }}

Leave every other write operation off this node. Update and Delete are real operations on the same node page. They are not part of this agent.

5. Book a time you can check

In the chat panel, name a day, a time, and a title. A safe prompt is “Is tomorrow at 15:00 free for 30 minutes? If it is, book Review with Sam.”

The execution should call the availability tool first. It should call the create tool only when you asked it to book. Open Google Calendar and confirm the event. If the run says “No prompt specified”, set the agent Prompt to Define below and reference the chatInput field from the Chat Trigger.

Common errors

A Chat Model sub-node must be connected. Add a chat model on the Chat Model connector.

Google consent fails on self-hosted n8n. Managed OAuth2 is Cloud only. Create a Custom OAuth2 credential using n8n’s Google credentials documentation. Do not expect Sign in with Google to appear on a self-hosted instance.

The agent books the wrong calendar. The tool credential is for a different Google user, or the calendar selected on the node is not the one you checked in the browser.

The agent deletes an event. A Google Calendar tool is set to the Delete operation. Remove that tool. Keep Calendar Availability and Event Create only.

400 Invalid value for ‘content’, got null. The prompt or chatInput is null. Send a non-empty message, or fix the expression so it resolves to a string.

Events appear in the wrong time zone. The model sent a time with no offset. Say the zone in the chat message, and check the event Google stored before you rely on it.

FAQ

How do I build an AI agent that books meetings?

In n8n, connect Google Calendar with OAuth2, add an AI Agent and a chat model, and attach two Google Calendar tools. One uses Calendar Availability. The other uses Event Create. Let $fromAI() or the parameter button fill the times.

Can the agent check a slot before it books?

Yes. Calendar Availability is a documented operation on the Google Calendar node. Ask the agent to use that tool first and to create an event only when the slot is free.

Does this work on self-hosted n8n?

Yes, with Custom OAuth2. The one-click Google sign-in, Managed OAuth2, is only on n8n Cloud, and Google Calendar is on that list.