Your assistant books appointments, and it knows when you’re closed.
OpusDone checks your working hours, your closures and your live calendar before it offers a single slot. Requests arrive at midnight, on public holidays, and two minutes before you open, so availability is re-read at the moment of writing and two people cannot take one slot. If it cannot read the diary, it says so and fetches you.
Reviewed

A slot list is a snapshot. By the time the customer says yes, the snapshot is history, and the model has no idea what day it is in your country.
None of them know that 12 October is a national holiday in Spain. Before this filter existed, the calendar offered that Monday as sixteen open slots, because it is a Monday and Mondays are a working day.
Five messages passed while the customer thought about it, and in that time the phone rang and someone took 16:00. A list shown earlier in the chat is not permission to write an event.
A calendar that returns nothing might be a quiet week or a failed read. Guess wrong in one direction and you promise a slot you do not have; guess wrong in the other and you turn away a customer you could have seen.
They run in this order, every time. Any gate that fails ends the attempt in a sentence to the customer, not a broken conversation.
“00:30 on 25 December in Madrid is 23:30 UTC on the 24th, and a UTC comparison waves it straight through the Christmas closure.”
The booking tools stay registered, every call returns an offline result, and a human escalation is filed. Your assistant does not invent availability while it waits for you.
A customer gets a short, readable choice instead of a wall of times, and no single day is allowed to swallow the whole list.
Both limits are editable.

Minimum notice starts at 120 minutes — enough that a booking made at 08:58 does not land at 09:00. Raise it for jobs you need to prepare for, lower it if you take walk-ins.

Granularity of 15 minutes means a day reads 09:00 / 09:30 / 10:00 rather than 09:07. Buffers before and after each appointment start at zero and are yours to change.
Working hours are checked before a slot is offered and again before the write.

Google Calendar and Cal.com. Both are read live before the write, and both are checked again against your hours and closures at the last moment.
OAuth, no API key. The scopes are calendar.events and calendar.readonly, deliberately not full calendar, so the app cannot delete your calendars.
An API key connects it. Cal.com also supports a pending-to-accepted confirmation step and records no-shows.
The gates above are code, not instructions in a prompt. These are the behaviours you do not have to hope for.
Availability is re-read immediately before the write. What was free ten messages ago is not evidence.
A window that comes back with nothing in it is treated as a read failure and sent to you, not offered to the customer as a wide-open week.
Dates are compared as local dates. 00:30 on 25 December in Madrid is 23:30 UTC on the 24th, and a UTC comparison waves it straight through the Christmas closure.
A timeout followed by a retry lands on the same deterministic event id, so the second attempt reads the first one back.
A cancellation always reads the appointment back to the customer and asks them to confirm that it is the right one before anything is removed.
Free to build and test, no card. The sandbox runs the real instructions and the real tools, and stops before the write unless you tick “book for real”. Your 14 days start the day you go live. Starter €39/mo, Pro €99/mo, 15% off yearly.
Solicitar acceso