Book meetings over email on autopilot

An agent watches a dedicated inbox during business hours, proposes times that match your real calendar, and books the meeting once the other side picks a slot.

Agentic Task
AgentMailGoogle CalendarSlack BotOperationsPersonal ProductivityMeeting WorkflowsEmail Automation

Build me an agent workflow that handles meeting scheduling over email end to end. It should run on a cron every 15 minutes during my business hours (default Mon-Fri, 9am-6pm in my configured time zone) and watch a single AgentMail inbox I use as my scheduling address.

On each run, call AgentMail List Messages on the inbox filtered to the unread label so we only look at threads with new activity since the last run. For each thread, call AgentMail Get Message on the latest message to read the body, sender, subject, and the original headers we will need to thread our reply correctly.

Classify each thread into one of three states and act accordingly:

State 1 - Fresh meeting request. The sender is asking to meet but no times have been offered yet. Call Google Calendar FreeBusy Query across the work calendars I configure (default to my primary calendar) for the next five business days. Pick three sensible slots that fit my working-hours window and the configured meeting length (default 30 minutes), spread across different days where possible, and never overlap any busy block. Then call AgentMail Reply To Message with a short, natural reply in my voice proposing those three times written in my time zone. Use the original message's Message-ID, In-Reply-To, and References headers so the reply stays in-thread.

State 2 - The requester picked one of the slots I previously offered (or counter-proposed a specific time). Parse the chosen time out of the reply. Re-check FreeBusy for that exact window in case my calendar changed since the proposal. If I am still free, call Google Calendar Create Event on my primary calendar with the requester as an attendee, a sensible title and description pulled from the thread, and conferencing enabled so a meeting link is generated. Then call AgentMail Reply To Message to confirm the booking with the time, the calendar link, and the meeting URL, again threading properly. Finally, call Slack Send a Message to the configured booking-visibility channel with a one-liner like "Booked 30 min with Jane Smith (jane@acme.com) for Thu 2pm PT." If the chosen time is no longer free, reply with the next three available slots instead of booking.

State 3 - Anything else (newsletters, unrelated mail, replies that are clearly not about scheduling). Leave the thread alone and do not reply.

Handle these edge cases:

1. Counter-proposals outside the times I offered: re-check FreeBusy for the proposed window and either book it or offer the closest open alternatives.

2. Reschedule requests on an existing thread: treat them as a fresh request and propose new times, noting that this replaces the prior booking.

3. Threads I already replied to in the same run should not be replied to twice; use the thread's message history to detect that.

Configurable inputs: the AgentMail inbox address, the list of Google calendars to check for availability, the booking calendar, the working-hours window, the meeting length, the number of slots to offer per reply, the time zone, the email signature and tone, and the Slack channel for booking notifications.

Additional information

What does this prompt do?
  • Reads new replies in a dedicated meeting inbox every 15 minutes during your working hours.
  • Spots fresh meeting requests, checks your real availability across your work calendars, and emails back three sensible times in your time zone.
  • When the other side picks a slot, it creates the calendar event with them on the invite and replies to confirm with the meeting link.
  • Posts a short heads-up to a Slack channel each time a meeting is booked so your team has visibility.
What do I need to use this?
  • An AgentMail inbox you want to use as your scheduling address.
  • A Google Calendar login, with the work calendars you want considered for availability.
  • A Slack workspace and a channel where booking confirmations should be posted.
  • Your working hours, default meeting length, and time zone.
How can I customize it?
  • Change how often it runs and which hours count as business hours.
  • Adjust the default meeting length, the working-hours window, and the number of times you offer per reply.
  • Pick which calendars are checked for availability and which Slack channel gets the booking notice.
  • Tweak the tone of the reply so it matches how you usually write to clients.

Frequently asked questions

Will it double-book me?
No. Before proposing times, it checks your real availability across the calendars you connect, and it only offers slots that are free across all of them.
What if the other person suggests a time I did not offer?
The agent re-checks your calendar for that time. If you are free, it books it. If not, it replies with the closest open alternatives.
Does it reply to every email that lands in the inbox?
No. It only acts on threads that look like a meeting request or a reply picking one of the times it offered. Anything else, like newsletters or unrelated mail, is left alone.
Will the other person know it is an agent?
Replies are short and natural, written in your voice. You can shape the tone, signature, and whether to mention that scheduling is automated.
Can the team see what got booked?
Yes. Every confirmed booking is posted to a Slack channel you choose so your team has a running view of meetings on the calendar.

Stop ping-ponging emails to find a time.

Connect your inbox, calendar, and Slack once, and let Geni run the back-and-forth for you every 15 minutes.