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).
Walk-through: clinics from a map search
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 say | The 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
| Setting | Meaning | If left out |
|---|---|---|
name | Shown in Telenow's campaign list. | required |
agent_id | The agent every call uses. | required |
from_number | Which of your connected numbers calls (id or number). | the first one you picked |
start_time_local, end_time_local | The daily calling window, HH:MM. Both or neither. | no window of your own |
timezone | IANA zone for the window, such as Asia/Kolkata. | UTC |
concurrency | Calls at once (capped at 50). | 5 |
max_attempts | Dial attempts per person, the first included. | 3 |
retry_backoff_secs | The base wait before a retry; it grows with each attempt. | 300 |
retry_on_no_answer | Redial no-answers and busy lines. | yes |
machine_detection | "hangup" drops calls a machine answers; true stays on to leave the agent's voicemail. | off |
variables | Values 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_callcounts 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
idagain 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 anid— 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_cursorback for the next one.
Outcomes in the results: answered, no-answer, busy, failed, or machine when answering-machine detection found one.