One lead, one sales call. Every time.
A race condition in the lead agent could put the same lead into three different sales calls if they replied quickly. Killed at the source. Existing duplicate calls have been merged.
A small number of you spotted that an enthusiastic lead replying twice to a reschedule message could end up with two or three sales calls on the calendar. Embarrassing for the gym, confusing for the lead.
The cause was a race in the agent's state machine. Two webhooks arrived within a second of each other, both passed the "is this lead already booked?" check, and both went on to book.
Fix:
- The state transition is now atomic. The first webhook claims the lead, the second sees the new state and exits cleanly.
- The booking write itself goes through a single helper that de-dupes by
(start_time, lead_id)and refuses to insert a duplicate. - Existing duplicate sales-call rows from the past two months have been merged.
If you remember a lead that ended up with two sales calls, check their record now. It's been cleaned up.
Built for gym owners
Ravini is the AI CRM gym owners actually wanted.
£50/mo for the first 50 customers. No setup fee.