Skip to main content
“The agent said there was nothing available” almost always means the calendar really had nothing to offer. This page is how to find out which rule emptied it.

Check the calendar itself, not the call

Free slots answers the exact question the agent asks, from outside the call:
An empty slots object is a real answer, and it is the answer the agent got. Now change one thing at a time.

The two settings that empty a diary

1

Notice: minNoticeMinutes

The default is 180 minutes, shown as Minimum notice (minutes). On a calendar open 09:00 to 17:00 with 30-minute appointments, the last slot starts at 16:30, so nothing is offered for today after 13:30. A lead called at 14:00 hears about tomorrow at the earliest. Re-read with ?minNoticeMinutes=30 to confirm that is what is doing it.A calendar open 9am to 5pm with three hours' minimum notice. At 2pm every slot left today is too soon, so the next slot offered is tomorrow at 9am.A calendar open 9am to 5pm with three hours' minimum notice. At 2pm every slot left today is too soon, so the next slot offered is tomorrow at 9am.
2

Hours: weeklyHours

A day left out of weeklyHours is closed, not open, and shows as Closed under Opening hours. A calendar carrying only mon offers Monday and nothing else, unless a dated exception opens another day. Check the days as well as the times.
3

Then the rest

maxDaysOut caps how far ahead it will look, slotDurationMinutes has to fit inside a window (a 60-minute appointment never fits a 09:00 to 09:30 window), slotBufferMinutes widens every booking, and dateOverrides can close a specific day.
?lookaheadDays= and ?minNoticeMinutes= override the calendar for one read only. That makes the loosened read a question rather than a change: you learn what would open up before you change anything for real callers.

Timezones

A calendar has its own timezone, and that is what the opening hours mean. Slots come back in it unless you ask for another with ?timezone=. This matters most when the calendar’s zone and the contact’s differ. Hours of 09:00 to 17:00 on a calendar in America/Chicago are 15:00 to 23:00 for a contact in Europe/London, and both are correct. Set the contact’s timezone so calling windows and spoken times are theirs, and leave the calendar’s zone as the business’s.
A calendar connected from another product reports its own zone, and not every product exposes it on every endpoint. When a linked calendar’s times look shifted by a whole number of hours, check the zone that product has, not the slot arithmetic here.

What the agent is reading on the call

Two different things, and the difference explains most “but the slot was free” reports.
  • {{availability}} in the prompt is a snapshot, formatted and injected when the call starts. It does not change during the call.
  • The slot-finder tool, when the agent has it, reads a store refreshed around the call rather than that snapshot. A slot the agent locks mid-call is held immediately, so another call in progress stops offering it.
So an agent without the tool is reading a moment that has passed, and one with it is reading something close to live. Either way the booking itself is the authority: the seat is claimed as the appointment is written, and a slot that went in between comes back 409.

When it is not availability

  • The contact is on do-not-call. We never call them, so no times are offered on a call we would have made. If they call you, the call is still answered and the agent can offer times as usual. Check doNotCall on the contact, in Contacts without a CRM.
  • The campaign names no calendar. An agent with nowhere to book does not offer times. The calendar is set on the campaign, or for a TFU Live agent, in its workflow’s Find slots step; see Calendars and booking.
  • The appointment was refused, not the slot. A booking outside the hours also comes back 409, but its message says the time is outside the hours rather than taken. That points at your startTime, not at the diary.