Work · Customer-service agent
Reply desk
An agent that answers one business's customers in Emirati Arabic, confined to that business's own file — and this page opens a door to talk to it.
checking…
Write to it the way a customer would. Its file holds five services, their prices and the opening hours — and nothing else.
Nothing here is stored. The only writes are two counters: today's cap and yours.
The problem
Small businesses here are run from WhatsApp, and most of what reaches them is the same handful of questions: how much, when do you open, is tomorrow free? The answer takes hours, and when it comes it arrives in a formal register that sounds nothing like the person who asked. Off-the-shelf bots answer in generic Gulf Arabic or in formal Arabic, and invent a price that is not on the list when they do not know — which is worse than silence.
Approach
- The agent is confined to one business's file: its services, prices, hours and location. Anything outside that is refused politely and the customer is returned to the subject. The constraint is not decoration: Meta's policy bars numbers whose primary use is open-ended conversation, and losing the number is worse than an unanswered question. Only the file changes: the page moves the agent between a salon and a dental clinic, where it quotes and books for one and refuses to diagnose or name a medicine for the other — same prompt, same rules.
- Two models separated by a confidence gate: Haiku answers, and when its own confidence in that answer falls below 0.7, Sonnet answers again. The reply comes back as JSON carrying the intent, the confidence and the hand-to-a-human decision, so escalation is a measured call rather than an impression.
- Every message passes two guards before it costs a fils: a dedupe on the message id, because Meta re-sends anything it did not get a fast acknowledgement for, and a daily cap consumed in one atomic operation rather than a read followed by a write. The page you are reading passes the same two guards.
Measured
Built with
- Python
- AWS Lambda
- DynamoDB
- Claude Haiku 4.5
- Claude Sonnet 5
Stated plainly
The channel itself has not yet answered a real customer: WhatsApp is waiting on Meta's secrets and a permanent token, and what is live today is the engine and this demo. The demo buys its replies, so it has a daily ceiling; when that is spent the page falls back to the tone examples written into the business file, which are the owner's text and not the model's. The numbers under each reply are read from the token bill the model itself returns, not estimated — and they are uncached costs: the shortest prefix this model will cache is 4,096 tokens and ours is 2,365, so caching never engages, measured at zero.