Almost every car enquiry in Dubai starts on WhatsApp. For Project One Motors that meant one number carrying everything: buyers at 2am, someone offering to sell a Cybertruck, a job applicant from Kuwait, and a steady trickle of people who were never going to buy anything. All of it in Arabic, Russian, Hindi and English, and all of it answered by hand whenever somebody got to it.
I'd already built this showroom a WhatsApp bot that sends car photos to the sales team. That one was easy in a way this one isn't: it only ever talks to salesmen. If it misreads a request, a colleague sends another message. This bot talks to the customer, in public, on the showroom's own number - and there, a wrong answer isn't an inconvenience, it's a liability.
So the interesting part of this build isn't the answering. It's knowing when to stop.
The rule about what it can never say doesn't live in the prompt. It runs in code, after the model, on every single reply.
The hard part is knowing when to shut up
Every turn produces one structured decision: what to say, in which language, what kind of enquiry this is, what was learned about the person, and whether a human is needed. Code enforces that decision rather than trusting it. The model proposes; it doesn't get the last word.
It answers only from the live catalogue, so it can't quote a car or a price that isn't in stock. It won't discuss the things a showroom doesn't discuss with a stranger over WhatsApp - a chassis number is the obvious one. And that rule doesn't live in the prompt, where a determined person could talk it loose. It runs as a check in code after the model has spoken, on every reply. If a reply trips it, the reply doesn't go out and a human gets the conversation instead.
Price negotiation, complaints, and anyone who asks for a human get one. That isn't a limitation, it's the point. A bot that negotiates on a car worth more than an apartment is a bad idea.
Escalating without giving sales a new tool
The obvious way to hand off is to dump the chat into a dashboard and hope someone opens it. Sales teams don't open dashboards.
Instead the question arrives in the salesperson's own WhatsApp, from the showroom's number, and they answer it there - the same way they'd answer a colleague. Nobody had to learn anything, install anything, or change how they work. That's most of why it survived contact with a real sales floor.
The answer doesn't go back as-is, though. A salesperson types shorthand, on a Saturday, between two other conversations. So the bot takes the substance and writes it out properly, in whatever language the customer has been using. The salesperson answers in their own words; the customer gets it in theirs. Then the bot picks the conversation back up.
It never talks over a human
Any salesperson can take a chat, and the bot goes silent for that customer immediately. That sounds trivial and it isn't: a model call takes a few seconds, which is easily long enough for a human to start typing. So it re-checks whether a person has arrived right before sending, and again before every scheduled follow-up. The failure it's designed around is two voices answering the same customer, which reads worse than a slow reply.
Quiet buyers get a small number of follow-ups, and only inside showroom hours. Nobody gets a message at 3am from a company they enquired with once.
Most of the work happened after it went live
The build was the short part. Real conversations surfaced things no specification would have predicted.
It replied in the wrong language when someone wrote broken English. It mirrored "brother" and "habibi" back at people. It answered a customer who'd just said "ok" with "noted, I'll follow up." It offered photos nobody had asked for. It asked about financing the showroom doesn't arrange. And its own links to car pages tripped the filter meant to catch chassis numbers, because a long ID in a URL looks exactly like one.
Each of those became a specific rule with a test behind it. It now works out that a +971 number means a UAE customer instead of asking. It stores a viewing time as an absolute Dubai date while still saying "tomorrow at 5pm" to the customer, because those are different jobs. It answers a closing "thanks" with silence, which is the correct answer. It doesn't argue with people trying to talk it out of its instructions. It transcribes voice notes so a voice message is handled like any other message.
None of that is clever. All of it is the difference between a demo and something you'd leave pointed at real customers.
The inbox the team actually opens
The bot writes every message to a CRM inside the showroom's existing site, so there was no second system to log into. It's a three-pane inbox: conversations on the left, the thread in the middle, the lead and the car on the right. Every message stores the original alongside an English translation, so a Russian conversation is readable by whoever is on shift. Sales users see only the leads for their own cars.
Tested before a customer ever saw it
I ran full scripted conversations against the real model and the real catalogue with the WhatsApp gateway faked and the CRM in memory, so it could be wrong repeatedly without messaging a single human being. Then it ran on the real number restricted to an allowlist, where I watched it handle supervised conversations before it was allowed near a customer.
In its first four weeks it handled 55 conversations and 534 messages, labelled them by type, and answered roughly one in five in Arabic or Russian. Every enquiry has a record now, which is the part the showroom actually notices. Before this, whether a 2am message was a real buyer depended on who happened to be awake.
