An Urdu voice agent that calls restaurant owners and books the meeting
I built an outbound voice agent for a food delivery platform in Pakistan, to reach new restaurant partners. It phones restaurant owners in Pakistani Urdu, answers their questions about partnering, checks the calendar and books a meeting with the sales team while the owner is still on the line.
Sales calls to new restaurants were slow to make and hard to scale.
Signing restaurants starts with a phone call. Most owners prefer Urdu, and many speak it with Punjabi or regional words mixed in. A team can only make so many calls a day, and off-the-shelf voice bots sound Indian or robotic, which loses the owner in the first sentence. The aim was a caller that sounds local, stays polite and ends each call with a booked meeting or a clear no.
One agent runs the call from greeting to calendar invite.
- Calls a list of uploaded leads in sequence as an outbound campaign.
- Speaks Pakistani Urdu and Roman Urdu, with local etiquette and food vocabulary (daal, sabzi, biryani), and avoids Hindi words that put owners off.
- Offers real free slots inside business hours (Mon to Fri 9 to 6, Sat 10 to 4, Pakistan time) and books a 45-minute meeting in Google Calendar.
- Reads the confirmation back in Urdu and sends an email confirmation.
- Logs every call, transcript and outcome to a dashboard with a funnel, trends and a call-time heatmap, updated live.
A phone line, a voice model and a booking server, joined by tool calls.
The phone line carries the audio. The voice model turns speech into text, decides what to say and speaks it back. When the owner agrees to meet, the agent calls a booking tool on my server, which finds a free slot, creates the event and returns an Urdu confirmation for the agent to read out.
Most of the work was language, not code.
Urdu and Hindi share most of their everyday words, so a blanket filter was impossible. A short list of words to avoid, plus a rule to switch to English when in doubt, worked better. Food words went into knowledge bases and behaviour stayed in the prompt, which kept the prompt focused. I tested it against written call scenarios before each change.