Create a campaign

About 10 minutesNo code neededUpdated July 2026

After this guide, your agent will be calling or WhatsApp-ing a whole list of contacts on its own. You'll build the campaign in a step-by-step wizard — we'll walk through every screen.

WhatsApp campaigns are coming soon:
The WhatsApp channel is pending Meta app review, so WhatsApp campaigns are not yet available in the dashboard — voice campaigns are. The WhatsApp parts of this page describe how it will work once it launches.
Before you start, make sure you have:
A Qalyb agent — if you don't have one yet, follow Create your first agent (5 minutes). Note its required prompt variables: each one needs a matching column in your CSV.
A sender for your channel: a phone number for voice, or a WhatsApp channel connected on the Deploy page
Your contacts as a CSV file with a phone_number column
For WhatsApp: an approved message template in WhatsApp Business Manager
Plans & roles:
outbound campaigns are included on the Pro, Ultra, and Enterprise plans. Admins and members can create and run campaigns; only admins can delete them.

Pick the right channel first

The channel decides how the campaign runs and which steps the wizard shows. Voice campaigns dial each contact live; WhatsApp campaigns send a message and wait for replies.

ChannelHow it runsWizard steps
Voice CallReal-time dialer. The agent calls each contact within an operating-hours window and can retry failed or unanswered calls.4 — Sender & Agent, Recipients, Schedule, Review
WhatsAppSends an approved WhatsApp template, then optional follow-ups if there is no reply. A reply hands the conversation to the agent.5 — Sender & Agent, Message, Recipients, Send Rules, Review
Open the wizard

In the dashboard, click Campaigns in the sidebar (Workspace group), then New Campaign at the top-right. The wizard opens straight on the Sender & Agent step of a voice campaign.

Name it and choose the sender and agent

Enter a Campaign Name (required, up to 100 characters) and an optional Description. Pick the sender — a Phone Number and Default Country for voice, or a WhatsApp Channel for WhatsApp. Then choose the agent that will handle the conversations. Its required and optional prompt variables appear as pills, so you know which CSV columns you'll need.

app.qalyb.ai/campaigns/new
Screenshot: Sender and Agent step with a selected agent and required and optional variable pills
The agent's required prompt variables show as pills. Each one needs a matching CSV column.
Write the message (WhatsApp only)

For WhatsApp, enter the Template Name and Language Code (for example en or ar), then map the template's {{1}}, {{2}} variables to CSV column names. A live preview updates as you type.

Upload your contacts

Upload your CSV — the Template button downloads a starter file with the right columns. A name column is optional, and any extra columns become per-contact data your agent and messages can use:

recipients.csv · text
phone_number,name,appointment_time
0501234567,Sara,"Tuesday 3pm"
0559876543,Omar,"Wednesday 11am"
+971501112233,Layla,"Thursday 5pm"

The right-hand pane previews every parsed contact and flags each row as valid, invalid, duplicate, or assumed (a local number converted using your Default Country). You can upload up to 50,000 contacts per campaign.

app.qalyb.ai/campaigns/new
The recipient preview flags invalid, duplicate, and assumed rows before you launch.
Choose when it goes out

Voice campaigns get a Schedule step: send immediately or schedule for later, set Operating Hours for the daily call window, and optionally turn on Retry Failed Calls. WhatsApp gets a Send Rules step: a Send Window, a Campaign Expiry, and an optional follow-up cadence. The details for both are just below.

Review and launch

The final step shows a Campaign Summary table. Check the details, then click Launch Campaign. You land back on the campaigns list with the new campaign running.

Campaign launched:
watch it live from the campaigns list — voice campaigns show a Call Log with one-click retries; WhatsApp campaigns show a Sent → Delivered → Read → Replied funnel. From the detail header you can Cancel an active campaign or Export its data to Reports.

Picking the sender

ChannelSender fieldNotes
VoicePhone Number + Default CountryThe number must be active and owned by your organization. GCC countries are listed first; Default Country converts local numbers (for example 05xxxxxxx +966xxxxxxx).
WhatsAppWhatsApp ChannelThe list shows your connected WhatsApp channels.
Invalid contacts block the launch:
the Launch button stays disabled while any row is invalid — fix or remove the flagged rows and re-upload. Duplicates are removed automatically (the first occurrence is kept). If a required agent variable has no matching CSV column, creation fails with Contacts are missing required agent variables.

Timing for voice campaigns

  • Send immediately or Schedule for later — scheduling adds a Timezone and a Start Date & Time, which must be in the future.
  • Operating Hours — a daily call window (start and end). Set both or neither; calls outside the window are held until the next window opens.
  • Retry Failed Calls — when on, set Max Attempts (1–5) and Wait Between Retries (5 minutes to 24 hours). Only failed and no-answer calls are retried.

Send rules for WhatsApp

  • Send Window — quiet hours that hold messages until an allowed time.
  • Campaign Expiry — choose No expiry or 3, 7, 14, or 30 days.
  • Follow-up cadence — toggle Follow up if no reply to add up to 10 steps. Each step has a wait (minutes, hours, or days; minimum 5 minutes) and its own approved Template Name, Language Code, and variable mapping.

Follow-ups stop automatically as soon as a contact replies, opts out, bounces, or fails. A reply is the goal — it hands the conversation to your agent and cancels any pending nudges. For the full guide to cadences, see Contacts & follow-ups.

WhatsApp templates:
every WhatsApp message — the first send and each follow-up — must be a separately approved template in WhatsApp Business Manager, because of WhatsApp's 24-hour messaging window. Approve them all before launching.

For developers

The wizard posts to POST /campaigns. The request body is keyed on channel, so voice and WhatsApp each require different fields — voice needs callWindowStart and callWindowEnd together, and WhatsApp needs a messagingChannelId plus template config. The endpoint requires the campaigns:write permission, and invalid phone numbers are rejected with the offending rows listed.

curl · bash
curl -X POST https://api.qalyb.ai/campaigns \
  -H "Authorization: Bearer sk-live-..." \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "voice",
    "name": "Eid Renewal Reminders",
    "description": "Call lapsed members about Eid offers.",
    "agentId": "agt_abc123",
    "phoneNumberId": "pn_966xxxxxxxx",
    "defaultCountry": "SA",
    "callWindowStart": "09:00",
    "callWindowEnd": "18:00",
    "retry": { "maxAttempts": 3, "waitMinutes": 60 },
    "contacts": [
      { "phone_number": "0501234567", "name": "Sara" },
      { "phone_number": "0559876543", "name": "Omar" }
    ]
  }'
Was this guide helpful?