AI voice agents for outbound campaigns in BPO call each client program's list from a CSV, inside calling hours set per campaign, and retry busy or unanswered numbers on the client's rules. Consent and opt-outs live in the client's own list. Campaign calls share the same concurrency limit as inbound calls, so cap each campaign to keep lines free.
Key Takeaways
- Run one campaign per client program and time zone; calling hours use one zone.
- Consent and opt-outs live in the client's list; Dograh keeps no do-not-call list.
- Campaign calls use the same concurrency limit as inbound, so cap each campaign.
This post is part of our guide to AI voice agents for BPO and contact centers. The guide's section "Outbound campaigns for client programs" opens with the rule this post builds on: "Outbound work runs as campaigns, one per client program and time zone." Here is how to set those campaigns up in Dograh, an open-source, self-hostable voice agent platform, and where the consent rules sit.
Outbound campaigns per client program and time zone
Give each client program its own campaign, and split it again by time zone. The list, the script and the rules all differ by client, so mixing them in one campaign mixes the risks too.
The list comes from the client's own system as a CSV with a phone number column, uploaded to Campaigns. Each extra column, such as the customer's name or a renewal date, becomes a variable the agent can use. A fixed greeting per contact, as text or a recorded clip, can come from the campaign file. Contacts without one hear the agent's normal greeting. Campaigns can also be created and started through Dograh's API, so the client's system can send a fresh list each day.
Calling hours are set by weekday in one time zone per campaign, which defaults to UTC. The calling-hours rule for sales calls runs on the customer's clock: 47 CFR 64.1200(c)(1) bars telephone solicitation to a residential subscriber "before the hour of 8 a.m. or after 9 p.m. (local time at the called party's location)." So a national list generally needs one campaign per time zone, each with hours that fit its own zone.

Consent comes from the client's list
Consent is checked before a number reaches Dograh, because the campaign dials every number it is given. The client holds the consent records, so the BPO and the client agree in the contract who checks them before each upload.
The rule that matters most for a voice agent comes from the Federal Communications Commission (FCC). In its February 2024 declaratory ruling, the FCC said calls using AI-generated voices "require the prior express consent of the called party to initiate such calls absent an emergency purpose or exemption." For sales calls the bar is higher: 64.1200(a)(2) allows a telemarketing call with an artificial voice only when it is "made with the prior express written consent of the called party", apart from a narrow nonprofit exception.
Sales opt-outs are about to widen too. In an order adopted on 30 September 2026, the FCC said: "Revocation requests made in response to robocalls that contain an advertisement or constitute telemarketing revoke consent to all future robocalls containing an advertisement or that constitute telemarketing from that caller." The rule is not yet in effect; it starts 30 days after publication in the Federal Register. Generally, a stop on one sales call should then end every sales call from that caller.
Service programs, such as reminders on an account the customer already has, generally rest on the consent the customer gave the client. Sales programs need the written kind on file first, and it must say that agreeing is not a condition of buying (64.1200(f)(9)(i)(B)). This is general information, not legal advice; confirm your position with counsel. Recording consent is a separate question, covered in call-recording consent laws and how to configure your agent.
Retries, opt-outs and changing the list
Retry policy is the client's decision, written into the program's brief, and the campaign settings carry it out. Max retries run from 0 to 10, 2 by default, with a delay between 30 seconds and an hour, and switches for retrying on busy, no answer or voicemail.
Campaigns have no per-contact call cap. If a client limits how often anyone is called, enforce it in the list itself, or set retries to 0. In the agent's Settings, the Voicemail & Screening section sets what happens on voicemail. Once handling is on, "When voicemail is detected" defaults to "Disconnect the call". To leave a message, choose "Leave a message", and keep it to the client's name and a callback number.
Dograh keeps no do-not-call list. When a caller opts out, an HTTP API tool writes it to your own list, and you remove those numbers before the next campaign upload. The do_not_call call tag records the request but never blocks a later call.
To stop calling someone mid-campaign, pause the campaign and start a new one from a corrected list. For lists that change daily, start calls from your own system with the API Trigger, so your system decides who is called. Lead programs work the same way, as set out in AI voice agents for lead qualification.
Open Source Alternative to Vapi / Retell
Self-hosted voice agent platform — no per-minute fees
dograh-hq/dograh
Star on GitHub
Share the line limit with inbound calls
A campaign uses the same lines as the BPO's inbound programs, so plan the two together. A campaign can cap its own outbound calls at once, while inbound calls share the organisation's single concurrency limit (10 by default).
Campaign calls take slots from the same limit. A campaign running at full speed on Monday morning leaves fewer lines for Monday's inbound calls, and a new inbound call over the limit is rejected at once. Cap each campaign, or schedule it outside the inbound peak. AI Voice Agents for Overflow Call Handling covers sizing the limit.
A circuit breaker protects the client's list when a model provider fails. By default it pauses the campaign once 50% of calls in a 120-second window fail with a pipeline error, such as a speech or language model failing, counting at least 5 calls. A 401, 402 or 403 error from a model or phone provider pauses it at once. Someone resumes it by hand after checking the provider.
Test openings and hand over to people
The first lines of an outbound call decide whether the person stays on, so test them. To test two openings, split the campaign between two versions of the agent. Dograh shows each version's share of calls and outcomes. Our post on the first 15 seconds of AI outbound calls covers what to put in them.
Some calls need a person. In a OnePoll survey of 6,000 consumers for AnswerConnect, across the US, UK and Canada, 85% said they prefer a real person. Tell the agent in the prompt to transfer when the customer asks for a person or raises a dispute. In a sales program, a buyer who is ready to commit goes to a person too.
Transfer Call works on Twilio, Telnyx and Asterisk ARI. It passes no summary by default; on Twilio it can play a short spoken introduction to both people. Write the details to your system with an HTTP API tool before the transfer. Browser test calls can't transfer, so test every handover on a real phone line. Self-hosted Dograh has no per-minute platform fee (servers, model keys and phone minutes still cost); Dograh Cloud has a 1¢-a-minute platform fee.
Join the Dograh Community
Dograh is an OSS alternative to Vapi. Join our Slack community for queries, releases, best practices & community interactions.
Glossary
- Prior express written consent
- The written agreement 47 CFR 64.1200(a)(2) generally requires before a telemarketing call that uses an artificial or prerecorded voice, which includes AI-generated voices. The client holds these records.
- Calling hours
- The weekday time windows a Dograh campaign may dial in, set in one time zone per campaign. A list across time zones needs one campaign per zone.
- Do-not-call list
- The list of numbers a business must not call again. Dograh keeps none, so each opt-out is written to the client's own list through an HTTP API tool and removed before the next campaign upload.
- Circuit breaker
- A campaign safety setting that pauses dialling when too many calls fail with errors, such as a model provider going down, by default 50% in 120 seconds with at least 5 calls. Someone resumes it by hand.

