An AI voice receptionist for appointment booking in Uzbek and Russian
The Bronjoy AI receptionist answers a business's calls in the caller's language. It understands Uzbek, Russian and code-switched speech such as "menga zapis kerak, ertaga utrom", reads the real calendar and price list, holds a slot and writes a real appointment into the Bronjoy dashboard, where owners see every call and its transcript.
Current status: the receptionist works end to end as a browser demo that books into a demo barbershop's real calendar. In production the feature sits behind a VOICE_ENABLED flag that is currently off, so the demo page at bronjoy.com/ai-receptionist is published but its voice API returns 404. The telephony leg, a real +998 phone number, is not built yet.
Key features
- Real data only — services, availability and business details come from the business's own records, and no tool accepts a price.
- Slot holds —
hold_slotreserves a time and returns thehold_tokenthatbook_appointmentrequires, so the agent cannot book a time the calendar never offered, and two callers cannot get the same slot. - Claim guard — claims of a booking, cancellation or reschedule in Russian, Uzbek or English are checked before text-to-speech; without a matching successful tool call, the sentence becomes a confirmation question and the interception is logged.
- A handoff that reaches a person —
escalate_to_humansends a critical Telegram notification with the reason and the caller's last words. - Owner settings — greeting, languages, voice gender, polite or informal register (siz or sen), local vocabulary and house rules.
- Costs in so'm — call costs are reported in Uzbek som at a daily Central Bank rate, never in tokens.
Architecture and tech stack
Turn-based, not a realtime API
Each caller turn runs one streaming Gemini call per tool round, with the caller's audio sent straight to the model alongside the booking tools, under a 20-second deadline shared by every round and every model failover. We skipped transcribe-then-reason on purpose: on our phone-quality test clips it added 1.8–2.7 seconds per turn and lost what the words alone do not carry. Transcription runs afterwards, for captions, the CRM record and search. A phone line will use the same path, so telephony can be added without rewriting the agent.
Models and voices
The agent runs on gemini-3.5-flash-lite with a low thinking level and falls back to gemini-3.1-flash-lite under load; one tool round measured 1.4–1.6 seconds. Speech comes from edge-tts voices such as uz-UZ-MadinaNeural, whose first audio arrived in 0.5 seconds against 6.6 seconds for Gemini TTS. A cached "one moment" filler in each language covers calendar lookups, and the Nuxt demo page shows each tool as it fires beside the transcript, including every claim the guard stopped.
Bugs that only appeared in Uzbek
Testing in real Uzbek surfaced failures an English test would miss:
- Prices read as noise. "80 000 so'm" was voiced as "80 och och och son" because the Uzbek voice read the thousands space as a word. Prices now reach the model unspaced.
- Times converted wrongly. A slot held at 14:30 was read back as "half past twelve". Times are now repeated exactly as the calendar returns them.
- A doubled country code. A phone number came back with 998 repeated. Anything other than +998 and nine digits is now refused, and spoken numbers are always read back or taken from caller ID.
Demo safeguards
The public demo allows 30 turns and 10 minutes per session and 20 sessions per IP address per hour. An hourly voice:sweep-demo job removes demo bookings after 24 hours, and call audio is not stored by default. In our test calls a full three-turn booking cost about 120–150 so'm, around one US cent.
What we delivered
We designed and built the agent, its tools and guardrails, the voice pipeline, the owner's call log and settings screens, and the browser demo. Not built yet: a real phone number, outbound calls and other channels.
Related work
This is part of our AI integration and automation work. Handoffs use the notification layer behind the Bronjoy staff bot, and the Bronjoy MCP servers let text-based AI assistants book into the same calendars.



