AI Sales Employee
A shop that sells over WhatsApp loses sales for being asleep. This answers the messages, quotes prices from the shop's own catalogue, chases the people who went quiet and sends a payment link — with one rule held above everything else: it must never invent a price, a stock figure or a payment confirmation.
What it does
- Each message runs one turn: load the customer's history and the shop's live data, call the model, let it invoke tools, then vet the reply before anything is sent.
- A guard rejects any reply containing a figure that did not come out of the database during that turn — and understands the four ways people write naira prices.
- Follow-ups run on a per-business policy with quiet hours and a maximum number of attempts, and cancel the moment the customer replies.
- Payment links go out through Paystack, and an order is only marked paid by a signature-verified webhook whose amount matches.
- Refunds, complaints and disputes go to a human rather than to the model.
Worth calling out
The rule is code, not a prompt
A sales agent that hallucinates a price creates a dispute the business has to honour or lose a customer over. So the invariant — a naira figure may appear in an outbound message only if SQL produced it this turn — is enforced by a module, not by asking the model nicely.
The queue is the database
Jobs are claimed straight out of PostgreSQL with a locking read, so there is no Redis, no broker and no cron to keep alive alongside it. Fewer moving parts is the feature.
It never invents a payment
Reads and replays of a payment webhook change nothing, because orders are unique on the provider's reference. "I don pay" from a customer is refused.
Have something that needs building?