All field notes

Field note · found 11 November 2026

n8n booking workflow books twice when the customer repeats the message

A booking workflow that looks for the first free slot can book a second appointment when the customer sends the same request twice, because the customer's own first booking makes the time they asked for look busy.

Test record: run by Fractional HQ on 11 November 2026 on n8n 2.23.4, with a real Google Calendar, a real data table and Meta's WhatsApp test number. Version 1.0 showed the fault in replay run 94129. The fix in version 1.1 was checked in replays 94252 to 94303 and in phone runs 94337 and 94339. Not tested: n8n Cloud, two requests arriving at the same moment.

Symptom

On 11 November 2026 we ran version 1.0 of our WhatsApp booking template on n8n 2.23.4, with a real Google Calendar, a real data table and Meta's WhatsApp test number. In a replay of a real message, a customer who already held 11:00 the next day asked for "book me tomorrow at 11" again. The workflow booked 11:30 as well and confirmed it. Nothing failed, and the clinic now had two appointments for one person.

Why it happens

The workflow finds the first free slot at or after the time asked for, then checks whether the customer already has a booking for the slot it is about to book. On the repeat, 11:00 was busy because of the customer's own appointment, so the first free slot was 11:30. The duplicate check looked up 11:30, found nothing there, and the booking went ahead. We had written the check to look at the slot about to be booked, when it should have looked at the slot that was asked for.

The fix that held

In version 1.1 the node that works out the slot also outputs the slot that was asked for, whether it is busy or free, and the duplicate check looks up that one. A moved booking is now written to the bookings table in the same form as a new booking, so the same check finds it. We changed four nodes and one canvas note, and no node was added, removed or rewired. Version 1.1 is the file in the pack sold on this site.

On the fixed file the same repeat got an "already booked" reply and nothing was created. That held for a time that falls on one of the clinic's slots, a time between two slots, a booking that had been moved and a request with no time in it. We then sent the pair from a real phone. The first message booked Monday at 10:00, and the second came back as "You are already booked in for Monday 16 November at 10:00".

How we found it

The repeat on version 1.0 was a replay, run 94129, started from a real inbound message whose text we had changed. We checked the fix the same day with replays 94252 to 94303 and with the phone messages in runs 94337 and 94339.

What it still gets wrong

If the time asked for is taken by someone else, the workflow books the next free slot, and the confirmation gives the real time without saying the first one was taken. If the customer then asks for the first time again, the check finds no booking of theirs at that time and books another slot. We ran that case and it booked 12:30 and then 13:00. The busy slot in that test was a stand-in calendar event, since there was no second customer. Fixing it needs the booking to remember the time that was asked for, which means a new column in the bookings table.

Three smaller gaps came from reading the nodes, and we did not run any of them: a vague request repeated after its slot has started, a move to a time between slots, and a repeat when the diary is full. We also did not test two requests arriving at the same moment, and we ran none of this on n8n Cloud.

Written by Fractional HQ from its own runs. If your n8n behaves differently, email hello@fractionalhq.uk and we will correct the note.