← Blog

Dynamic Prompts Before the First Ring

Why every call shouldn't start the same way

Most voice AI setups begin with someone writing one system prompt, hardcoding it into an agent, and hitting deploy. It works — until it doesn't.

The agent greets every caller identically. It doesn't know who it's talking to. It asks for a name it already has in the database. The caller notices, disengages, and the call fails — not because the AI was bad, but because it started with zero context.

Hear the difference. Without context:

"Hi, this is a call from our office. Can I get your name?"

With context:

"Hi Sarah, this is Acme Dental calling to confirm your Thursday appointment. I see you prefer mornings — does 9 AM still work?"

Skipping the "who are you?" phase changes the entire tone of the call. The caller feels recognized, not processed. That's what Talkif's dynamic prompts do — and here's how.

Prompts are templates, not fixed text

Every prompt in Talkif is a template with placeholders. Just before each call connects, Talkif fills those placeholders with real data:

  • The contact — name, company, email, timezone, language, notes, tags, and any custom fields you've stored
  • The call — whether it's inbound or outbound, and the numbers involved
  • Your account — your business name
  • The clock — current date and time

A template looks like this:

handlebarsYou are calling on behalf of {{default account.name "our office"}}
to confirm an upcoming appointment.
 
Address the contact as {{default contact.firstName "there"}}.
 
{{#if contact.email}}
  Offer to send a confirmation email to {{contact.email}}.
{{/if}}
 
{{#if (includes contact.tags "vip")}}
  This is a high-priority contact. Be especially attentive.
{{/if}}

Templates use Handlebars — a simple, widely used syntax with conditionals, comparisons, and fallbacks. Enough logic for real-world branching without prompts turning into code.

What the agent actually receives is clean, finished text — no placeholders, no dead branches. A prompt that reads like it was written for this exact call. And resolution takes microseconds, so personalization adds zero delay before the agent speaks.

Missing data doesn't break anything

Real contact data is messy. Someone calls from a number you've never seen. A record is missing an email. Templates are built to degrade gracefully:

  • Fallbacks. {{default contact.firstName "there"}} — if the name exists, use it; if not, say "there." Never a blank, never an "undefined."
  • Optional sections. Whole blocks of the prompt appear only if the data exists. No company on file? The agent never mentions one.
  • Unknown callers. If an inbound caller isn't in your database, the template can branch: greet a known contact by name, or ask an unknown caller for theirs. One template covers the full range — rich CRM record to complete stranger.

The agent adapts to the data it has, instead of tripping over the data it doesn't.

What this changes for you

One flow serves every customer. You don't need a separate agent per segment. A contact tagged "VIP" gets different treatment than a first-time caller — same flow, same template, different result.

Campaigns that actually personalize. Run 10,000 outbound calls and each one uses that contact's specific data — their name, their company, their notes. At scale, this is the difference between a robocall and a conversation. (Campaign data is frozen when a contact joins the campaign, so retried calls stay consistent even if the record changes mid-flight.)

Less maintenance. Static prompts rot. With templates, you update the contact record and the next call reflects it — no hunting through prompt text for hardcoded names.

Where it shines

  • Appointment reminders — the agent confirms or reschedules without asking for anything the system already knows.
  • Sales outreach — notes, interests, and tags shape the pitch. "Enterprise" gets a different conversation than "startup."
  • Support lines — inbound callers are matched by number; the agent starts with their company, language, and history already loaded.
  • Multilingual campaigns — one template branches on the contact's preferred language instead of duplicating flows.

Why templates instead of letting an LLM write the prompt?

An obvious alternative: feed the contact data to an AI at call time and let it write the prompt. We chose deterministic templates for three reasons:

  1. Predictability. You see exactly what the agent receives, every time. No drift, no hallucinated instructions. The template is the contract.
  2. Speed. Template resolution takes microseconds; an extra AI generation step adds seconds of silence — and on a phone call, silence reads as "something's wrong."
  3. Auditability. Every resolved prompt traces back to a template version plus its input data. You can reproduce exactly what any agent was told on any call — which, in regulated industries, isn't optional.

You don't have to write templates by hand

The Prompt Library includes an AI assistant that knows your account's variables. Describe what you want in plain language and it writes a valid template using only fields that actually exist — then refines it with you over as many turns as you need. You stay in control of the final text; the assistant just gets you there faster.

← All postsQuestions? Write to us

Read more