If your chatbot confirms times that do not exist, asks for the name again
every other message, or creates the same appointment twice, it is not misconfigured. It
is doing the only thing it knows how to do. Here is the mechanism.
Updated 2026-08-05
A flow is not an assistant, it is a diagram
Most of what is sold as a "bot for clinics" is a hand-drawn diagram: if the customer taps
this button, reply with this; if they type this word, jump to that step. It works by
pattern matching, not by understanding.
That has a consequence which is not about quality but about
capability: a diagram can only walk the paths somebody drew in advance.
When a person writes something unanticipated, there is no branch to go to. That is why
flows "break" on perfectly ordinary sentences.
It is not doing it badly. It has no way of doing it. This is the
difference between a new employee who has not learned something yet and a calculator you
have asked to draft a letter.
Why it cannot know whether Thursday at 10 is free
Answering "do you have anything Thursday at 10?" truthfully takes three things, and a
flow has none of them:
Understanding the question, including "Thursday", "day after
tomorrow", "first thing" or "whenever you can in the afternoon".
Checking the real calendar at that moment — not a copy from
yesterday, not a table of theoretical opening hours.
Interpreting the answer and, if there is no slot, offering
alternatives that do exist.
A flow can look like it is doing this, and that is the problem. It has two exits and
neither is good:
Confirm blind — "perfect, see you Thursday at 10" — and on Thursday
two people turn up for the same slot.
Punt — "we'll confirm shortly" — which is precisely the work you were
trying to get off your plate, only now with an extra step in front of it.
If your bot has never caused a calendar problem, check which of the two it is doing. The
second one never fails, but it never solves anything either.
How a duplicated booking actually happens
This is the most expensive failure and the easiest to reproduce. A real conversation does
not arrive tidy, it arrives in pieces:
— "hi, I'd like to book"
— "Thursday if possible"
— "actually 11 is better"
— "oh, I'm Marta"
— "want my number?"
— "confirm it for me please"
— "can you confirm?"
Each of those arrives separately. A flow — or a "when a message comes in, do this"
automation — has to decide on every one of them whether this is a new request or the
continuation of the last. And it has no context to decide with.
So it does one of two things, and both are bad:
Starts over on every message, and the customer repeats their name and
the day three times until they give up and leave.
Treats each confirmation as a booking, and the two "confirm it"
messages at the end become two appointments.
A system that actually holds the conversation understands that all of it is
one booking being filled in piece by piece, and that two confirmations
in a row are not two appointments.
The silent failure: the booking left half-done
This one almost never comes up in a demo, because you cannot see it. Rescheduling is two
operations: cancel the old appointment and create the new one. If the first succeeds and
the second fails — the calendar does not respond, the connection drops, the slot got taken
in between — the result is that your customer no longer has an appointment
and nobody knows.
It shows up in no error report, because from the outside the conversation ended well. It
shows up the day that person arrives and is not in the diary.
What you should demand is that if an operation fails halfway, it undoes
itself and returns to the previous state. That is a requirement, not an extra:
either the change completes in full or it does not happen. Ask about it explicitly — it is
one of the few things that separate a serious system from one that demos well.
The other extreme: when the model makes things up
Opposite the rigid flow sits a pendulum that swings the other way: wire a language model
straight into WhatsApp and let it answer. It converses beautifully. And it has a different
problem that costs just as much.
An unconstrained model fills in what it does not know, because that is
what it was trained to do. Ask it a price it does not have and it produces a plausible
one. Ask about a service you do not offer and it describes it confidently. It sounds
convincing and it is false.
This is not a theoretical worry: companies have been ordered to compensate customers for
what their chatbot promised them. What your assistant says, you said.
The answer is not to ask the model nicely in its instructions. It is that whatever it is
about to say regarding prices, services and availability
gets checked against your real information before it is sent, and that
when the fact is missing, it says so and flags a human.
What to demand, as a list
Whoever you buy from, this is what has to be answerable with a yes:
Requirement
Why it matters
Checks real availability before proposing a time
Prevents the appointment that does not exist
Understands that several messages are one booking
Prevents the duplicated appointment
Undoes its work if an operation fails halfway
Prevents the customer with no appointment and no warning
Checks what it is about to say against your data
Prevents invented prices and services
Remembers the conversation across days
Prevents the customer leaving out of repetition
Knows when to hand over to a person
Emergencies, complaints and delicate cases
And a warning about the answers: "yes, we've got that in the prompt" is not a
yes. It means they asked the model. What to ask is whether it is
guaranteed — that is, whether the system checks every time, whatever
happens in the conversation.
Why does my bot confirm appointments that do not exist?
Because it has no access to your calendar. A drawn flow answers according to
what somebody programmed, not according to what is free. It confirms because that
is the most natural exit from the diagram, not because it checked anything.
Can a flow-based bot be fixed to check the calendar?
Not by configuring it better. It needs a real calendar integration and the
ability to interpret the answer, which is what separates one product category from
another. It can be added with custom development, but at that point you are no
longer paying for a flow.
Why does my bot keep asking for my name every other message?
Because it has no memory of the conversation beyond the current message, or only
within a very short session. An assistant that genuinely books has to remember
across days, not just across messages.
Is wiring ChatGPT straight into WhatsApp a good idea?
It converses very well and that is not the problem. The problem is that it cannot
book in your calendar and that, unconstrained, it fills in facts it does not have:
prices, services and hours that sound right and are not yours. On top of that, doing
it from an ordinary number without the official API ends in a block — explained in
WhatsApp Business vs API.
How do I test whether the bot being pitched really books?
In the demo, ask it for a time you know is taken. If it confirms, it is checking
nothing. Then ask for confirmation twice in a row and see whether two appointments
appear.
So flow-based bots are useless?
They are useful for what they are: answering common questions, giving an address,
opening hours or a list of services. If you do not need to book, they are the cheap
and correct choice. The problem is not the tool, it is selling it as something it is
not.
Try it with the taken slot
In the demo you can ask for a time you know is not free and watch what it answers.
Twenty minutes, no cost, and no payment details asked for.