Build an agent by chatting

For calls you make again and again — a campaign, a recurring kind of call — your assistant can build a Telenow voice agent with you: what it says, its language, its voice (chosen by listening to samples), and its price per minute, before anything is created.

This needs the Create agents permission. Agents built this way are ordinary agents: they appear in your agent list, and you can open and refine them in the agent builder like any other.

Single-context or multi-step? One conversation with one goal ("ask each clinic about walk-ins") is a single-context agent — create_agent, below. When you describe several scenarios or conditions ("if they're a new patient collect their details, if they're existing verify their date of birth, and if they ask for a person transfer them"), the assistant builds a flow agent with create_flow_agent — see Multi-step calls.

Example: a reminder agent

You: I need an agent that calls our patients the day before their appointment, reminds them of the time and the doctor, and asks them to confirm or reschedule. Hindi and English, warm female voice.

1. The assistant drafts the agent with you. It writes the prompt and the opening line, and turns the per-call facts into {placeholders}: {name}, {time}, {doctor}. It shows you the draft and asks what to change.

2. You choose the voice by ear.

{ "name": "list_voices", "arguments": { "language": "Hindi", "gender": "female", "country": "IN", "limit": 3 } }

Each voice comes with a preview_url — a short sample you can play — and its language, accent and style. Voices for the exact language you asked for come first; then the rest of that language; within each, the voices that suit the country come first. Leave out provider and the list is from your organization's voice provider for that country.

3. The model and speech recognition default sensibly. Leave them out and the agent gets your organization's default for the callers' country — the default a new agent gets in the builder — and, for anything that default leaves empty, the setup of your most recently edited agent. Ask for a specific one ("use GPT-4o mini") and the assistant passes it.

4. You hear the price first. estimate_cost prices the planned agent per minute, as the builder's cost bar does (Costs per minute).

5. The assistant creates it:

{
  "name": "create_agent",
  "arguments": {
    "name": "Appointment reminders",
    "system_prompt": "You are a friendly reminder assistant for Sunrise Clinic, calling {name} about their appointment tomorrow at {time} with {doctor}. Ask them to confirm. If they cannot come, offer to pass on a preferred new time to the front desk. Speak the caller's language — Hindi or English. Keep it under two minutes.",
    "opening_line": "Namaste {name}, this is the Sunrise Clinic's AI assistant calling about your appointment tomorrow.",
    "variables": [
      { "name": "name", "required": true },
      { "name": "time", "required": true },
      { "name": "doctor", "required": true }
    ],
    "voice": { "provider": "elevenlabs", "voice": "kQ8…" },
    "persona_gender": "female",
    "timezone": "Asia/Kolkata",
    "session_config": { "maxDuration": 180 },
    "voicemail_message": "Namaste, this is Sunrise Clinic calling about your appointment tomorrow. Please call us back to confirm.",
    "post_call_analysis": {
      "enabled": true,
      "customFields": [
        { "key": "confirmed", "type": "boolean", "description": "Did they confirm the appointment?" },
        { "key": "preferred_new_time", "type": "string", "description": "A new time they asked for, if any" }
      ]
    },
    "country": "IN"
  }
}
{
  "agent_id": "5d2e…",
  "name": "Appointment reminders",
  "voice": { "provider": "elevenlabs", "voice": "kQ8…" },
  "model": { "provider": "openai", "model": "gpt-4o-mini" },
  "speech_to_text": { "provider": "deepgram" },
  "message": "Created. Use agent_id with place_call (agent_id) or create_campaign; the owner can refine it in the Telenow agent builder."
}

6. Try it, then use it. The assistant can place one test call to you (place_call with the agent_id and the variables), then run it for the whole list as a campaign (Campaigns from a search).

7. Refine it. "Make the opening shorter", "switch to the second voice" — the assistant sends only what changes with update_agent; everything else stays as it was.

What an assistant can set

Every option the Agents API has. The everyday ones have friendly fields:

SettingWhat it does
name, descriptionHow the agent appears in Telenow.
system_promptThe agent's instructions. Per-call values are {placeholders}.
opening_lineThe first sentence when a call connects, inbound and outbound.
variablesThe placeholders: { name, required, default }. A required one must be given on every call.
voiceText-to-speech: { provider, voice, config? } — see list_voices.
speech_to_text{ provider, config? } — config.language sets the language.
modelThe language model: { provider, model, config? }.
session_configCall behaviour, as the Agents API's sessionConfig: maximum length, silence handling, interruptions and more (Agent field reference).
voicemail_messageWhat it leaves when a machine answers.
post_call_analysisSummary and the fields to extract from every call (Post-call analysis). On by default with a summary.
objectivesWhat every call must establish.
timezone, persona_genderThe agent's time zone, and the voice's gender for grammar in gendered languages.
countryOnly for choosing defaults: the country of the people it will talk to.
settingsEverything else, as the Agents API's own agent body (camelCase) — every field in the Agent field reference: llmConfig (temperature, max tokens, speed and region), s2sConfig (realtime voice), fallbackConfig, telephonyConfig (who speaks first, answering-machine handling), every sessionConfig key (silence, barge-in, fillers, background sound, keypad input, follow-ups, …), every metadata key (caller memory, PII policy, caller identity, objectives, …), and isActive on an update (pause or resume). Knowledge bases are not a setting: attach them in Telenow or with the Knowledge bases API; a flow step can then narrow to some of them.
flowThe multi-step graph (create_flow_agent, update_agent) — every step kind and condition in Flow agents API.

Where a friendly field and settings both set something, the friendly field wins. On update_agent, each top-level object in settings (sessionConfig, metadata, …) is merged onto the stored one, one level deep — send only what changes, but send a nested object (callerMemory, silenceCheckin, …) whole: the one you send replaces the stored one.

Example — a reminder agent that remembers callers for 30 days, hangs up after 20 seconds of silence and signs off at three minutes:

{
  "name": "Appointment reminders",
  "system_prompt": "You remind {name} of their appointment tomorrow at {time}.",
  "variables": [{ "name": "name", "required": true }, { "name": "time", "required": true }],
  "settings": {
    "sessionConfig": { "silenceHangupSecs": 20, "maxDuration": 180 },
    "metadata": { "callerMemory": { "enabled": true, "ttlDays": 30 } }
  }
}

Options that reach outside the call

An assistant builds agents from what it was told and what it read — a web page, a map listing, a document — and any of that text can try to steer it. So the options that let an agent reach outside the call need you to tick Give agents tools when you connect the assistant:

  • tools, webhooks and pre-call lookups (metadata.tools, metadata.precallLookups), and flow tool steps;
  • call transfers (transfer steps, transfer tools);
  • custom model or speech endpoints (customllm, customapi, customstt, customtts);
  • any URL anywhere — the prompt, the opening line, a step or the settings (any text containing ://) — even a link for the agent to read out;
  • isPublic, and messages after the call (metadata.postCallWhatsApp);
  • call-backs the agent books itself (sessionConfig.followup) — Telenow places them later, outside the connection's daily limit.

Without it, the assistant gets a refusal naming the option, and you can add it yourself in Telenow. A hand-off step can still pass a call to one of your own active agents, with whatever tools you gave that agent.

Whatever was granted, an assistant never sends credentials, in any field — API keys and secrets are added in Telenow. It reads stored keys as masks (••••1234); sending a mask back unchanged keeps the stored key, inside a flow's steps too. A mask is refused if the step, tool or provider it belongs to now points somewhere new, and a new agent refuses masks copied from another.

Which agents an assistant may change

It changes only the agents it created — "it" being the same assistant client connected by the same person, so connecting it again keeps them when the assistant comes back as the same client (one that names itself with a client metadata URL does; one that registers afresh each time starts over, and what it made stays yours in Telenow). list_agents and get_agent show changeable: true on those. It can read every agent in your organization (keys masked) and call with any active one; your own agents stay yours to edit. An organization API key used as the bearer may change every agent an assistant made.

The built-in agent

The AI assistant calls agent, created when you first connect with Place calls (or on the first one-off call), runs one-off calls described as a task (One-off calls for you). It is yours to edit in the builder — its voice, its model, its prompt — but not the assistant's: update_agent refuses it.