Campaigns
A campaign is a list of contacts, a flow, a from-number, and rules about how fast and when. You start it and Talkif works through the list: placing calls up to your concurrency, only inside the hours you allow, retrying the ones that didn’t connect, skipping anyone on the Do Not Call list, and stopping when the list is done or you tell it to. The result is per-contact outcomes and an analytics view of the whole run.
What a campaign is made of
Contact timezones and call windows
Windows are wall-clock times. With Respect contact timezone on (the default), a 09:00–17:00 window means 9 to 5 where the contact is — a list spanning New York and Berlin is called at sensible local hours automatically. A contact’s timezone comes from their record, or is derived from their phone number when not set.
Separately from your windows, Talkif enforces legal calling hours by jurisdiction (for US numbers, 8 am – 9 pm local, per TCPA): a contact outside those hours isn’t refused, they’re held until the hours open. Your windows can be tighter than the law; never looser.
Retries
A contact whose call ends no_answer, busy, failed or canceled is retried automatically, up to 3 attempts per contact, with a delay between attempts so the same person isn’t redialled back-to-back. A contact whose call was answered is done — a completed conversation is never redialled, whatever was said in it. A call that reaches voicemail counts as an attempt; see Transfer and end calls for leaving a message versus hanging up.
Skipping
A contact is skipped — never called — when their number is on the Do Not Call list, when they opted out, or when you skip them manually (POST …/contacts/{contactId}/skip). Skipped contacts don’t hold a campaign open.
Lifecycle
Pause always drains: calls in progress finish, nothing new starts. Cancel drains too if calls are active. Restart from paused, completed or canceled resets every contact that didn’t complete back to pending and runs again — useful for a second pass at the no-answers.
Auto-pause
A running campaign pauses itself, with a notification, when it can’t safely continue:
Fix the cause and resume; contacts pick up where they were.
Per-contact status
Each contact’s status is derived from their latest call, so it’s always consistent with call history:
When a campaign ends with contacts never dialled (cancelled early, end time reached), they’re counted as not called in the overview.
Setting one up
Dashboard
API
Add contacts
Individually, or by filter — a tag, a company, a search — to add hundreds at once. Contacts on the DNC list are added but will be skipped.
Reading the analytics
GET /campaigns/{campaignId}/analytics (and the campaign’s Analytics tab) gives the run a shape:
- Outcomes — completed / no answer / failed / skipped, as counts and percentages.
- Attempt distribution — how many contacts needed 1, 2 or 3 attempts. A heavy tail means your windows are wrong for the list.
- Voicemail — voicemail / human / undetermined for calls with a detection verdict. A high voicemail rate on a B2C list usually means daytime windows.
- Failure causes — grouped by structured cause, most common first, so one bad from-number or one provider outage is obvious.
- Duration histogram — an average hides the bimodal “hung up in 5 seconds” vs “had the conversation” split; the buckets don’t.
- Cost breakdown and performance (latency, turns, function calls) across the run.