Postmortem

The confirmation that didn't confirm

For five weeks, a "Booking Confirmed" message on WhatsApp was failing to send — and nothing told us. The code thought it had succeeded. Here is how a success can hide a failure.

Published
Read
5 min

For about five weeks, the WhatsApp message that tells a guest their booking is confirmed was not being sent. Not sometimes — every time. And in all those weeks, nothing warned us. No alarm, no error page, no angry email. The most unnerving kind of bug: not the one that breaks loudly, but the one where the machine cheerfully reports success while quietly doing nothing.

The booking still worked. The money was still taken, the slot still held, the email confirmation still went. But the WhatsApp confirmation — the one that, in India, is the message people actually see — was silently failing at the provider, and our code was reading that failure as fine. For five weeks, guests booked and heard nothing on the channel that matters most.

A template with the wrong number of blanks

The cause was small and stupid, as these always are. WhatsApp business messages are sent as templates with a fixed number of blanks to fill — the guest's name, the service, the host, the time. At some point the approved template had four blanks. Our code was still sending five. The provider looked at five values for four slots and refused the whole message: template parameters do not match. Correct of it, really.

How a failure hides

The send did not throw an error our code would notice. The provider accepted the request and then declined the message downstream, and the reply that said so was logged but never alerted on. So the code moved on believing it had sent, the failure sat in a log nobody reads, and the only people who could tell something was wrong were guests who had no idea a message was even supposed to arrive.

That is the whole anatomy of a silent failure. A logged error is not a noticed error. If the only record of a problem is a line in a log file that no human opens and no alarm watches, then for every practical purpose the problem is invisible — and an invisible problem gets to run for five weeks, because nothing is counting the days.

The fix, and the fix behind the fix

The immediate fix was trivial: send four values, not five. The meeting link that had been the fifth still reaches people — it is in the email and the calendar invite — so nothing was lost by dropping it from a message that could not carry it anyway. One line, and confirmations flowed again.

The fix behind the fix is the one that matters. A booking confirmation failing is not something we should ever learn about from a confused guest weeks later. So a WhatsApp send failing now raises an actual alert, once, throttled so a burst of the same failure does not become a burst of the same email. The next time a template drifts or the credits run dry, we find out the day it happens, not the month after.

A logged error is not a noticed error. If nothing is watching the log, the failure is invisible — and invisible failures do not fix themselves; they just accumulate.

The bit worth keeping

The uncomfortable takeaway is that our tests and our screens all looked green the entire time, because the failure lived in the space between 'the request was accepted' and 'the message actually arrived.' We are watching that space now. The booking confirmation is the promise the whole flow is built to keep, and a promise you cannot see failing is the most dangerous kind to make.

Common questions

Why can a WhatsApp confirmation fail silently?

The message is sent as a template with a fixed number of parameters. If the code sends the wrong number, the provider accepts the request but declines the message downstream — a failure that gets logged, not thrown, so code that is not watching the log believes it succeeded.

Did bookings still work while the confirmation was failing?

Yes. The booking, payment, slot hold and email confirmation all worked; only the WhatsApp confirmation message was failing to send. The booking itself was never at risk — but the message guests rely on was missing.

How do you catch this kind of failure now?

A failed WhatsApp send now raises a throttled alert the day it happens, so a drifted template or an empty credit balance surfaces immediately instead of weeks later via a confused guest.

Want this for your own bookings?

Set up your page, sync your calendar, and start getting paid at 0% commission.

Become a host