Elyoxe

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.

Role
Engineering, conversation design, cost control
Period
2026 — present
Status
Engine live
Salon NoorFictional business

checking…

Same engine, another file

Write to it the way a customer would. Its file holds five services, their prices and the opening hours — and nothing else.

Try

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

  1. 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.
  2. 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.
  3. 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

0.07dirhams for a complete conversation with your customer
5/5out-of-scope questions refused as they should be
2.0seconds median reply time over eighteen measured replies
0messages from this demo are stored
150replies a day, the page's spending ceiling

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.

Next projectInvoiceReady