- Use AI to interpret intent and constraints, not to invent availability.
- Provider hours, exceptions, service duration and existing appointments belong in the schedule engine.
- Offer a few useful options instead of dumping every possible slot.
- Revalidate exact time at booking or rescheduling commit.
Scheduling has two very different jobs
The first job is understanding the request. The second is deciding whether a specific time is valid. Those should not be handled by the same mechanism.
A language model can interpret "same doctor, but earlier" extremely well. A deterministic scheduler can calculate whether 15:40 fits the provider’s working hours, service duration and existing calendar. Combining the two gives you natural interaction without sacrificing correctness.
Turn natural language into explicit constraints
Useful constraints include service, provider, location, date range, day of week, earliest/latest time, duration and sometimes payer or equipment requirements.
The conversation should progressively collect only what is missing. If the patient already said "Thursday after 4," asking them to choose a date and a time-of-day again is just a form wearing a chatbot costume.
Good scheduling proposes, it does not dump
When ten slots are available, showing ten slots is usually worse than showing two or three good options and keeping the search state ready for a follow-up.
This is where conversational reasoning is useful: select a small set around the stated preference, then handle "earlier," "later," "another day" or "different doctor" without losing the rest of the context.
The request changes, but not completely
Only the provider constraint changed. The service, day and time preference should survive.
Do not confuse suggested slots with the only valid times
Many booking interfaces pre-generate slots in neat 15- or 30-minute increments. Real clinics are messier. Services have odd durations, schedules have gaps and a requested exact time may be valid even if it was not in the first suggestion list.
A robust scheduler validates the requested minute against the underlying rules rather than treating the suggestion list as a law of nature.
Recalculate at commit
The final booking step should always use fresh availability. This protects against another booking arriving during the conversation and against stale cached options.
The assistant should only say "booked" after the application confirms the transaction. This sounds obvious. It is also exactly the sort of detail happy-path demos skip.
The calendar wins every argument with the model.
If the conversational state says a slot exists but the scheduling engine says it does not, the slot does not exist.
Menaela’s scheduling model
Menaela uses conversation to interpret the request and a deterministic schedule layer to calculate and validate availability. The same rules serve staff and patient-facing flows.
The practical result is that people can talk naturally without turning appointment integrity into a probabilistic exercise.
