Campaigns from a search

Ask your assistant to call a whole list — businesses it found on a map, leads you pasted, tomorrow's appointments — and it builds the agent with you, prices it, creates a Telenow campaign as a draft, starts it when you say so, and reports back person by person.

This needs the Run campaigns permission, Read calls to follow the results (and to list agents, voices and prices), and Create agents if the assistant builds the agent too (Connect your assistant).

You: Find physiotherapy clinics in Indiranagar and ask each one whether they take walk-ins this week, and what a first session costs.

1. The assistant finds the clinics. It uses its own search or maps tool and shows you the list — names and phone numbers. Telenow is not involved yet. Check the list; this is what will be called.

2. It agrees the agent with you. What the agent says, in what language, and in which voice. For the voice it lists a few that fit, each with a sample you can play:

{ "name": "list_voices", "arguments": { "language": "en-IN", "gender": "female", "country": "IN", "limit": 3 } }
{
  "provider": "elevenlabs",
  "voices": [
    { "voice_id": "kQ8…", "name": "Ananya", "language": "en-IN", "gender": "female", "accent": "indian", "preview_url": "https://…/ananya.mp3" },
    { "voice_id": "p2L…", "name": "Riya", "language": "en-IN", "gender": "female", "preview_url": "https://…/riya.mp3" },
    { "voice_id": "Zx1…", "name": "Kavya", "language": "hi", "languages": ["hi", "en-IN"], "gender": "female", "preview_url": "https://…/kavya.mp3" }
  ]
}

Assistant: Here are three voices — have a listen: Ananya, Riya, Kavya. Which one?

You: Ananya.

3. It tells you the price per minute (estimate_cost — Costs per minute):

Assistant: About $0.09 a minute, everything included — model, speech recognition, voice, carrier and platform fee. 18 clinics at roughly two minutes each comes to about $3.25.

4. It creates the agent (create_agent — Build an agent by chatting):

{
  "name": "create_agent",
  "arguments": {
    "name": "Clinic walk-in check",
    "system_prompt": "You are an AI assistant calling {name} on behalf of Asha Rao. Ask whether they take walk-in patients this week, on which days and hours, and what a first physiotherapy session costs. Be brief and polite. Do not book anything.",
    "opening_line": "Hello, I'm an AI assistant calling on behalf of Asha Rao with a quick question about walk-in appointments.",
    "variables": [{ "name": "name", "required": true }],
    "voice": { "provider": "elevenlabs", "voice": "kQ8…" },
    "post_call_analysis": {
      "enabled": true,
      "customFields": [
        { "key": "walk_ins", "type": "string", "description": "Whether they take walk-ins this week: exactly yes, no, or by appointment only" },
        { "key": "first_session_cost", "type": "string", "description": "The price of a first session, with the currency" }
      ]
    },
    "country": "IN"
  }
}

5. It creates the campaign — as a draft — with the clinics as targets:

{
  "name": "create_campaign",
  "arguments": {
    "name": "Indiranagar physio walk-ins",
    "agent_id": "5d2e…",
    "start_time_local": "10:00",
    "end_time_local": "18:00",
    "timezone": "Asia/Kolkata",
    "concurrency": 3,
    "max_attempts": 2,
    "retry_backoff_secs": 1800,
    "machine_detection": "hangup",
    "targets": [
      { "phone": "+91 80 4123 4567", "name": "Align Physio" },
      { "phone": "+91 98450 11122", "name": "MoveWell Clinic" }
    ]
  }
}
{
  "campaign": {
    "campaign_id": "e7a1…",
    "name": "Indiranagar physio walk-ins",
    "status": "draft",
    "can_run": true,
    "calling_window": { "start": "10:00", "end": "18:00", "timezone": "Asia/Kolkata" },
    "targets": { "total": 17, "completed": 0, "failed": 0, "pending": 17 }
  },
  "targets": { "added": 17, "duplicates": 0, "do_not_call": 1, "skipped": 0 },
  "message": "Draft created; nothing has been dialed. Confirm with the user, then call start_campaign."
}

One clinic was on your Do-Not-Call list, so 17 of 18 were added.

6. You say go; it starts the campaign (start_campaign). Telenow dials within the calling window, a few calls at a time, retrying no-answers as you set.

7. It reports back (get_campaign, page by page):

{
  "campaign": { "campaign_id": "e7a1…", "status": "running", "targets": { "total": 17, "completed": 9, "failed": 3, "pending": 5 } },
  "results": [
    { "call_id": "1b9c…", "phone": "+918041234567", "name": "Align Physio", "outcome": "answered", "attempt": 1,
      "fields": { "walk_ins": "yes", "first_session_cost": "₹800" }, "sentiment": "positive" },
    { "call_id": "77ad…", "phone": "+919845011122", "name": "MoveWell Clinic", "outcome": "no-answer", "attempt": 2,
      "fields": null, "sentiment": null }
  ],
  "next_cursor": "2026-10-07T11:42:10.512331Z_9c4f…"
}

Assistant: 9 of 17 clinics answered so far. Walk-ins this week: Align Physio (₹800 first session), Body Balance (₹1,000, after 4 pm only)… MoveWell did not pick up twice. Want me to read any call in full?

The assistant reads any call's transcript with get_call and its call_id.

More examples

Qualify a lead list

You: Here are 200 webinar sign-ups (pasted from a spreadsheet: name, phone, company). Call them, ask about team size and when they plan to buy, and tell me who is hot.

The assistant builds an agent whose analysis extracts team_size (a number) and buying_timeline, creates the campaign with the rows as targets — each with variables such as { "company": "Acme" } for the agent's {company} placeholder — and later sorts the results by those fields. Lists over 1,000 people go in pages with add_campaign_targets.

Appointment reminders

You: Remind tomorrow's 30 patients of their appointment and ask them to confirm or pick a new time.

Each target carries its own values — { "phone": "+91…", "name": "Meera", "variables": { "time": "10:30 am", "doctor": "Dr. Rao" } } — so every call says the right time. Campaign-wide values go in variables once; a target's own values win.

Event RSVPs

You: Call everyone on the guest list and confirm whether they are coming on the 14th, and how many people they are bringing.

Analysis fields attending (described as "exactly yes, no or maybe") and guests (a number) make the results a ready head count.

Feedback after a service

You: Call last week's installation customers and ask them to rate the installation from 1 to 5, and what we could do better.

Watching and steering a campaign

You sayThe assistant uses
"How is it going?"get_campaign — progress and the results so far, page by page in the order calls finished.
"Pause it."pause_campaign — no one new is dialed; calls in progress finish.
"Add these five numbers."add_campaign_targets — on a running campaign they are called right away.
"Resume."start_campaign.
"Which campaigns do I have?"list_campaigns — newest first, filterable by status.

Campaign settings

SettingMeaningIf left out
nameShown in Telenow's campaign list.required
agent_idThe agent every call uses.required
from_numberWhich of your connected numbers calls (id or number).the first one you picked
start_time_local, end_time_localThe daily calling window, HH:MM. Both or neither.no window of your own
timezoneIANA zone for the window, such as Asia/Kolkata.UTC
concurrencyCalls at once (capped at 50).5
max_attemptsDial attempts per person, the first included.3
retry_backoff_secsThe base wait before a retry; it grows with each attempt.300
retry_on_no_answerRedial no-answers and busy lines.yes
machine_detection"hangup" drops calls a machine answers; true stays on to leave the agent's voicemail.off
variablesValues for the agent's {placeholders}, for every target.—
targets{ phone, name?, id?, variables? } — up to 1,000 per call.none yet

Where Telenow enforces a country's legal calling window, it applies on top of yours — today that is India: an Indian number is never dialed outside 09:00–21:00 IST. For other countries, the window you set is the only one, so set it in the people's own time zone.

Rules every campaign follows

  • Created as a draft. Nothing is dialed until start_campaign, which the assistant runs only when you say so.
  • Checked before it exists. Every number must be in international form and every value the agent needs must be present — otherwise the campaign is not created, and the assistant is told which rows to fix.
  • Your Do-Not-Call list is applied to every person added; do_not_call counts the ones skipped — numbers on your list, and numbers already waiting or being dialed in this campaign. Where your organization requires consent, a person without it is added but not dialed until consent is recorded.
  • No one twice while waiting. Adding the same id again through the same connection counts as a duplicate, and a number already waiting or being dialed in the campaign is not added again. Once someone has been called, adding their number again — or adding it from a different connection or without an id — calls them again.
  • Your limits count people, too. The connection's calls-per-day limit covers single calls and campaign targets together; people skipped as duplicates or Do-Not-Call do not count. Hourly limits on new campaigns and added rows apply as for the Campaigns API.
  • An assistant runs what it created. It can start and add people only to campaigns it created; it can see and pause every campaign set to call from its numbers (one that leaves the number to its agent is not shown). Your own campaigns stay yours.
  • Results page by page. Each page is in the order calls finished; the assistant passes next_cursor back for the next one.

Outcomes in the results: answered, no-answer, busy, failed, or machine when answering-machine detection found one.