How a campaign works
- Upload a contacts CSV — must have a
phone_numbercolumn; any extra columns becomeinitial_contextfor each call - Create the campaign — link it to a workflow, set concurrency, time slots, and retry behaviour
- Start it — AiLunaPro begins dialing contacts up to your concurrency limit
- Monitor progress — track processed, completed, failed, and pending counts in real time
- Pause and resume — stop and restart at any point without losing progress
The contacts CSV
The CSV drives the campaign. Each row is one contact.phone_number are automatically passed as initial_context to each call, making them available as template variables in your agent’s prompt — so each call can feel personalised at scale.
To override the Start node greeting for a row, set greeting_override_type to text and provide greeting_override_text. The text can use other columns as template variables. For a recorded greeting, set the type to audio and provide its public ID in greeting_override_recording_id. Leave the override columns empty to use the greeting configured in the Start node.
Scheduling and concurrency
Concurrency controls how many calls run simultaneously. It’s capped by your telephony plan. Set it conservatively to start. Time slots restrict when AiLunaPro is allowed to dial — useful for respecting business hours or regulations:Retry behaviour
AiLunaPro can automatically retry contacts who didn’t answer, were busy, or went to voicemail:Circuit breaker
The circuit breaker automatically pauses a campaign when too many connected calls end with an AI pipeline failure, such as an STT, LLM, or TTS error. While the campaign is running, each finished pipeline with a known outcome contributes one sample, including calls made through ARI. The failure rate is failed pipelines divided by all counted pipelines in the rolling time window. Unclassified framework cancellations, busy, no-answer, carrier rejections, and failed dial attempts are excluded. Calls finishing while the campaign is paused do not enter the window. A telephony provider’s “completed” callback does not count as a successful pipeline. When enabled, the circuit breaker pauses the campaign once the minimum sample size is reached and the failure rate meets or exceeds the threshold. You must manually resume the campaign after investigating the issue.
A campaign paused by the circuit breaker behaves the same as a manually paused campaign — in-flight calls complete normally, and it can be resumed once the underlying issue is resolved.
Provider errors
An HTTP 401, 402, or 403 reported by a campaign call’s STT, TTS, LLM, realtime, or outbound telephony provider immediately pauses that campaign. This applies independently of the failure-rate threshold and sample size, including errors handled by an LLM fallback. The campaign log records the provider, status code, and workflow run that caused the pause. Fix the provider issue, then resume the campaign normally. Resuming clears the pause; another 401, 402, or 403 pauses it again. Other provider errors do not trigger this immediate pause; pipeline failures still contribute to the existing failure-rate breaker. Calls waiting to dial recheck the campaign state after each rate-limit wait, immediately before trying rate admission. If paused, their contacts remain queued and their reserved call capacity is released. Calls already dialed can finish. This protection does not block API-triggered calls or other campaigns using the same provider.Campaign lifecycle
You can pause and resume a campaign at any time. In-flight calls complete normally before a pause takes effect.
