Skip to main content
A good Urdu calling prompt has a shape, learned from thousands of rehearsal calls. Voice agents run on small, fast models — a live call can’t wait for a big one. And small models imitate examples far more than they follow abstract rules. For smaller languages like Urdu, LLMs still struggle with conversational output — with a list of abstract rules, you are leaving it up to the model to choose what correct sounds like. A prompt that only lists rules produces a robot. A prompt that shows concrete Bad:/Good: lines produces a caller. Structure the prompt so the model can copy the shape. The flip side: because the model copies examples, your examples must be perfect — every one following your own rules exactly. When the output goes wrong, 99% of the time it’s an example contradicting the guidelines, especially output formatting: a numeral where you demanded words, a ”/” in a Good: line, Roman Urdu in a line meant to be spoken. One contradiction and the model has permission.

The anatomy

Every prompt our build pipeline writes has the same spine. Write yours in it too:
  1. Identity & purpose — who the agent is, who they’re calling for, and one sentence on what the job is. Say explicitly: you are making an outbound call — the person did not call you.
  2. The single goal of this call — four or five numbered steps, ending in “thank them and end.”
  3. Voice & persona — personality traits, then speech characteristics.
  4. Good vs bad lines — ten or more scenarios from this call, each written as: the scenario, the bad response, the good response, and a one-word reason. Triple-check every good response word by word — in our experience, a lot of problems stem from here.
  5. The facts — the sharable facts as a short list, with a guard: only share what’s relevant to what they ask. Don’t dump the whole list.
  6. Call flow — numbered steps with a literal Urdu line to say at each, and branch arrows: if they say yes → Step 2.
  7. Handling the hard callers — worked mini-dialogues for: confirm, mishearing, opt-out, not interested, busy, wrong number, payment dispute, already paid, suspicious caller.
  8. Closing — the goodbye line plus the end_call tool.
  9. What NOT to do — a plain list of the forbidden moves: no re-pitching after a no, no reading the caller’s number back, no goodbye without end_call.
  10. A short footer — the hard rules once more, in a few lines at the very end. Models pay the most attention to the end of the prompt, and on a long call the rules at the top fade.

A full working prompt

Here is that anatomy in the flesh: our most refined outbound prompt, production-tested — an event-invitation campaign for the Zameen.com Property Expo. Base yourself around it. Copy it, then adapt the facts, the name, the gender, and the flows — don’t write from a blank rules skeleton.

The opener

The opener has four parts and earns the first five seconds: salaam and verify the person, your name and the business, the reason, permission to continue.
السلام علیکم، کیا میں عائشہ صدیقی سے بات کر رہی ہوں؟ میں Shifa Clinic سے ثناء بات کر رہی ہوں۔ کل کی appointment confirm کرنی تھی، ایک منٹ بات کر سکتی ہوں؟
Roman Urdu for us burgers: Assalam o alaikum, kya main Ayesha Siddiqui se baat kar rahi hoon? Main Shifa Clinic se Sana baat kar rahi hoon. Kal ki appointment confirm karni thi, aik minute baat kar sakti hoon? On outbound, the opener is where you earn the person’s trust. Value their time: every word the agent speaks should deliver precise value on why they should keep talking.

Write for the ear, not the eye

  • Brief above all. One or two short lines per turn. Cut every word the listener doesn’t need. A whole call is ideally four to six turns.
  • Ask one thing, then stop. Never say goodbye in the same breath as a question.
  • State each hard fact once. Re-reciting the venue, price, and date every turn is the single most robotic thing an agent can do.
  • Ration politeness. At most one short acknowledgment per reply. Most replies need none. Never جی جی. Never بہت اچھا as a reaction — nobody says it when a person agrees. It sounds like a teacher grading homework.
  • Don’t narrate internal actions. No “نوٹ کر لیا”, no “save کر لیا”.
  • Busy caller? Get shorter, not longer.
  • Misheard? Say it differently and shorter — never repeat the identical line.
  • Numbers, dates, and times as words: “بیس اور اکیس جون”، “رات نو بجے تک”. If you must say a phone number, space the digits with ”,,” so the voice pauses between them. Never read the caller’s own phone number back.
  • No markdown, no emoji, no ”/”. Write یا or اور instead of ”/”. These read fine and speak terribly.

The Urdu rules

  • Nastaliq script only. English loan words Pakistanis naturally say in English stay in Latin: appointment, booking, free, call, message, order, confirm-as-a-noun.
  • The two-way test: if Pakistanis genuinely say the word in English, keep it Latin so the voice pronounces it in English. If it’s a word people would naturally speak in Urdu, use the Urdu — end → آخر, next week → اگلے ہفتے, date → تاریخ, confirm-the-verb → پکا.
  • Pakistani names go back to Nastaliq — the agent’s own name and any caller name from the record: بلال, عائشہ, not “Bilal”. A Pakistani first name in Latin pronunciation sounds robotic to a Pakistani ear. Brand and venue names keep their Latin form: Zameen.com, Expo Centre.
  • Gender is load-bearing. Female agent: کر رہی ہوں. Male: کر رہا ہوں. Set the build’s gender to match your voice.
  • Plain words over bookish ones: آنا not تشریف آوری, مفت not بلامعاوضہ. And no Hindi register — ضرورت, not جھنجھٹ.
  • No honorific guessing. Don’t assume صاحب. Prefer the bare name unless the record carries gender.

Bad and good, side by side

These pairs are section 4 of the full prompt above, in the prompt’s own order — every one is about that call. The model studies them and copies the shape of the good lines. Write yours about your own call’s failure modes. The Roman Urdu is written for ease of reading for us burgers. In your actual prompt, write the examples in proper Urdu — the output stays stable when the model never has a reason to output any format other than the one you specified. 1. Match the agent’s gender — عائشہ is female; a masculine verb form breaks the voice instantly.
  • Bad: میں زمین ڈاٹ کام سے عائشہ بات کر رہا ہوں۔ — Main Zameen dot com se Ayesha baat kar raha hoon.
  • Good: میں زمین ڈاٹ کام سے عائشہ بات کر رہی ہوں۔ — Main Zameen dot com se Ayesha baat kar rahi hoon.
2. Plain spoken Urdu, not bookish — nobody talks like a formal letter on the phone.
  • Bad: ہم آپ کو ایک تقریب میں مدعو کرنے کی غرض سے رابطہ کر رہے ہیں۔ — Hum aap ko aik taqreeb mein madu karne ki gharz se rabta kar rahe hain.
  • Good: آپ کو ایک property expo کی دعوت دینی تھی، بالکل free ہے۔ — Aap ko aik property expo ki dawat deni thi, bilkul free hai.
3. Avoid politeness padding — no جی on every clause, no بہت اچھا after everything. It sounds servile, not warm.
  • Bad: جی بالکل free ہے جی۔ بہت اچھا جی، تشریف لائیے گا جی، تقریباً کتنے لوگ ہوں گے جی؟ — Ji bilkul free hai ji. Bohat acha ji, tashreef laiye ga ji, taqreeban kitnay log hon ge ji?
  • Good: بالکل free ہے، کوئی ticket نہیں۔ تقریباً کتنے لوگ آئیں گے؟ — Bilkul free hai, koi ticket nahi. Taqreeban kitnay log aayen ge?
4. Don’t push after a no — one gentle nudge at most, then let go.
  • Bad: نہیں آ سکتے؟ ارے کیوں نہیں، آپ کو آنا چاہیے، بہت اچھا موقع ہے، سوچ لیں۔ — Nahi aa sakte? Are kyun nahi, aap ko aana chahiye, bohat acha mauqa hai, soch len.
  • Good: کوئی بات نہیں جی، پھر کسی اگلی بار سہی۔ وقت دینے کا شکریہ۔ — Koi baat nahi ji, phir kisi agli baar sahi. Waqt dene ka shukriya.
5. Be concrete about where you got the number — vague sounds like a leaked-data telemarketer. Tie it to their own action, and offer the opt-out.
  • Bad: آپ کا نمبر ہمارے record سے آیا ہے۔ — Aap ka number hamaray record se aaya hai.
  • Good: آپ نے کبھی زمین ڈاٹ کام پر گھر یا plot دیکھے ہوں گے، وہیں سے رابطہ ہوا ہے۔ اگر آپ نہ چاہیں تو میں ابھی نمبر نکلوا دیتی ہوں۔ — Aap ne kabhi Zameen dot com par ghar ya plot dekhe hon ge, wahin se rabta hua hai. Agar aap na chahen to main abhi number nikalwa deti hoon.
6. Ask, then stop — never a goodbye in the same breath as a question. Let them answer.
  • Bad: …کتنے لوگ آئیں گے؟ شکریہ، اللہ حافظ۔ — …kitnay log aayen ge? Shukriya, Allah hafiz.
  • Good: …گھر والوں کے ساتھ تقریباً کتنے لوگ آئیں گے؟ — …ghar walon ke saath taqreeban kitnay log aayen ge?
7. Say each fact once — repeating the block every turn is the #1 robot tell.
  • Bad: every turn re-recites the whole block — Expo Centre، جوہر ٹاؤن، بیس اور اکیس جون، داخلہ free…
  • Good: say the venue, dates, and times once. After that, answer only what they asked.

The hard callers

Write a worked mini-dialogue for each, with these rules underneath:
  • Busy or “call later” is not opt-out. Offer a short callback, ask for a better time, end politely. Don’t continue the pitch.
  • Wrong number or wrong person: apologize briefly and end immediately. Someone else answering is a callback, not a sales opportunity.
  • Already paid, already knows, already done: thank them and stop. Do not re-demand or re-pitch.
  • After an opt-out, confirm removal and end. No “ہم رابطہ کریں گے” — never imply future contact.
  • Suspicious caller (“where did you get my number?”): name the business, then tie it to their own action — “you gave this number when you placed your order.” Never a vague “it’s in our system.”
  • One gentle nudge after a no. Then let go.
  • Never invent what the record doesn’t hold. If a {token}’s value is missing, stay generic — and never speak the token aloud.

Ending the call

Speaking a closing line does not hang up the phone — only the end_call tool drops the line. Every closing, opt-out flow, and “remove me” example in your prompt must show goodbye plus end_call, or the call stays connected and the callee hears silence. One gotcha: the runtime watches for farewell words to decide a call is wrapping up. A bare شکریہ or اللہ حافظ mid-call can read as a goodbye — save them for the actual close.

The four layers

Your prompt isn’t the only text the agent sees. Four layers stack, in order:
  1. instructions — the stored prompt. Everything above is about this.
  2. additionalInstructions — per-call text, appended after the prompt at dispatch. It never touches the stored assistant, and it comes after the prompt, so it wins on conflicts with the prompt by position. If it must beat the base prompt, say so explicitly.
  3. variables — the per-call record, rendered as a labelled block with its own standing orders: use it only where the conversation naturally needs it, don’t read it like a list, don’t repeat it, never read the phone number aloud. Write your prompt’s {tokens} against these keys.
  4. greetingInstructions — steers the first line only, and only when initialGreeting is on. It doesn’t persist as a rule for the rest of the call.

Don’t take your own word for it

The build API writes prompts in exactly this shape and then rehearses them against ten tough callers — the busy one, the suspicious one, the one who tries to jailbreak it. If you hand-write your prompt, simulate it against your own worst callers before a real customer meets it.