Skip to content
VaakyoDocs
Navigation
Open console →

Agents

Agent tab

The Agent tab holds what the caller hears first and how the agent should behave: its name, welcome message and prompt, with {variables} you fill in for each call.

Fields

FieldTypeDefaultLimitsWhat it does
namestringrequired1 to 120 charactersShown in the console, on calls (agent_name) and in the ledger. The caller never hears it unless your prompt says it.
welcome_messagestring""noneSpoken as soon as the call connects, before the caller says anything. Leave it empty and the agent waits for the caller to speak first.
system_promptstring""noneInstructions for the LLM: who the agent is, what it must do, and how.
{
  "name": "Front desk",
  "welcome_message": "Namaste {customer_name}, City Clinic se baat kar rahi hoon. Main aapki kya madad kar sakti hoon?",
  "system_prompt": "You are Priya, the receptionist of City Clinic in Pune.\nHelp the caller book, move or cancel a visit.\nThe clinic is open 9 am to 7 pm, Monday to Saturday.\nIf the caller asks about medicine or a diagnosis, say a doctor will call them back."
}

The model cards and presets

At the top of the Agent tab, three cards sum up the agent’s models: Transcriber (speech to text, with its provider and language), Model (the LLM) and Voice, each with its provider. The pencil on a card opens its tab.

Below them, Cost per min (approx) shows what a typical minute of a phone call with these models costs, split into Transcriber, LLM, Voice, Telephony and Platform. Hover or tap the bar for each part in ₹ per minute. It updates as you change models, before you save. When the usage comes to less than your plan’s price per minute, the plan’s price is shown with Minimum price for your plan. Calls are charged for what they really use; see Limits and billing.

Model presets set all three models at once: Balanced, High intelligence (the most capable LLM), Ultra fast (the quickest model of each kind) and Cost saver (the cheapest of each kind). They only use models and providers your workspace can use. When the agent’s models match no preset, Customized is shown. A preset changes only the models; save the agent to keep it.

The same data is in the API:

curl https://api.vaakyo.com/api/v1/catalog/models -H "X-API-Key: $VAAKYO_API_KEY"
curl https://api.vaakyo.com/api/v1/agents/$AGENT_ID/latency -H "X-API-Key: $VAAKYO_API_KEY"
{"calls": 12, "replies": 87, "llm_first_token_ms": 520, "first_audio_ms": 790, "tts_ms": 270}

/catalog/models returns profiles (per model: kind, latency_ms, cost_paise_per_minute, quality_label, quality_value), presets and your price_per_minute_paise. A model matches the profile with the longest model prefix.

Editing the prompt

The prompt is stored as Markdown text. The console’s System prompt editor has two views of the same text:

  • Visual shows headings, lists, bold and italic as formatted text, and highlights {variables}.
  • Code shows the raw Markdown, with heading and list markers dimmed.

Switching views never changes the prompt. Editing in Visual saves the Markdown in a normal form (for example, a blank line after each heading). Markdown the Visual view can’t show, such as a table, makes it read-only; edit those prompts in Code.

The toolbar has find (also Ctrl+F or Cmd+F), undo and redo, the block type (normal text, heading 1 to 3), bold, italic, bulleted and numbered lists, and {} to insert a variable. Typing { opens a list of the agent’s variables and {caller_phone}; keep typing to filter it, or type a new name. The footer shows roughly how many tokens the prompt is (about four characters per token). The expand button opens the editor full screen.

Markdown helps the LLM follow a long prompt. It isn’t read aloud: the voice rules Vaakyo adds tell the agent to speak without lists or symbols.

Generate a prompt

Generate writes a prompt for you. Describe the agent (who it is, what it should do, the language), or ask it to improve the current prompt. The LLM returns a structured prompt with these sections: Identity, Language, Goal, What to collect, Rules, Confirmation and Constraints. It also suggests a welcome message. Preview the result, then Replace prompt or Insert at cursor. Nothing is saved until you save the agent.

curl -X POST https://api.vaakyo.com/api/v1/agents/prompt/generate \
  -H "X-API-Key: $VAAKYO_API_KEY" -H "Content-Type: application/json" \
  -d '{"description": "A receptionist for Smile Dental in Pune that books appointments, in Hinglish", "variables": ["customer_name"]}'
{
  "prompt": "## Identity\nYou are Asha, the receptionist at Smile Dental, Pune...",
  "welcome_message": "Namaste {customer_name}, Smile Dental se Asha baat kar rahi hoon.",
  "model": "gemini-3.5-flash-lite",
  "tokens": {"input": 612, "output": 438}
}
FieldTypeDefaultWhat it does
modestringcreatecreate writes a new prompt from description (10 characters or more); improve rewrites current_prompt, following description if given.
descriptionstring""What the agent should do, up to 4,000 characters.
current_promptstring""The prompt to improve. Its {variables} are kept.
agent_name, languagestring""Optional context.
variablesarray of strings[]Variables the prompt may use.

It needs the agents.edit permission. A failed or empty answer from the model returns 502; try again.

Fallbacks

If the voice or the transcriber fails during a call, backups can take over for the rest of the call. Set them under Fallbacks on the Agent tab. See fallback voices and fallback transcribers.

Variables

Any {name} in the welcome message or prompt is a variable. A name starts with a letter or underscore and contains only letters, digits and underscores, for example {customer_name} or {slot_2}.

  • Filled per call. For outbound calls, values come from user_data in the place-call request. For browser calls, from the test call form. Inbound calls have no user_data.
  • {caller_phone} is always set. It is the number being called (outbound) or the number calling in (inbound). It is empty for browser calls.
  • Every variable is optional. A variable with no value becomes an empty string; the raw {name} is never spoken. Vaakyo also tells the LLM which variables were not provided, so it can ask the caller instead of guessing.
  • The agent lists its variables. The agent object’s read-only variables field lists every variable the welcome message and prompt use, in order.
curl -X POST https://api.vaakyo.com/api/v1/agents/$AGENT_ID/call \
  -H "X-API-Key: $VAAKYO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to": "+919812345678", "user_data": {"customer_name": "Rohan"}}'

Values are inserted as text. A number or boolean in user_data is converted as Python would print it (true becomes True), and false, 0 and null become empty. Send strings when the exact wording matters.

What the LLM actually receives

Vaakyo builds the final system prompt from your prompt plus a few fixed parts, in this order:

  1. Your system_prompt, with variables filled in.
  2. Voice rules: answer in one to three short spoken sentences; no lists, markdown or emojis; say numbers and dates as a person would; ask one question at a time; when the caller says goodbye, say a short goodbye and call end_call in the same reply.
  3. If the voice language is hi: speak natural Hinglish in Roman script (never Devanagari), matching the caller’s mix of Hindi and English.
  4. Today’s date and time in the agent’s call.timezone, for example Today is Thursday, 01 October 2026, 02:30 PM (Asia/Kolkata).
  5. If any variables are empty: a line listing them, telling the agent to ask the caller if it needs them.
  6. If there is a welcome message: a line saying the agent has already greeted the caller with it, so it does not greet twice.

You don’t need to repeat the voice rules in your prompt. Focus on the task, the facts the agent needs, and what to do in edge cases.

Writing a good prompt

  • Say who the agent is and who it calls. “You are Priya from City Clinic, calling patients to confirm tomorrow’s appointment.”
  • State the goal and when it’s done. “Confirm whether they will come. If not, offer another day. Then say goodbye and end the call.”
  • Give facts as facts. Opening hours, prices, addresses. The agent cannot look up anything you don’t give it, except through tools.
  • Name your tools. “Before offering a slot, call check_availability.”
  • Cover the edge cases. Wrong person, not interested, asks for a human, asks something off-topic.
Esc