# Run a Flow as a Campaign

> Run an IVR Studio flow on every answered call of an outbound campaign. Upload a contact list, pick the Interactive (run an IVR flow) campaign type, test, estimate the cost and launch. Leads can press 1 to be forwarded to your team.

Source: https://edesy.in/docs/ivr/campaigns

An interactive campaign calls every number on your list and runs one of your IVR Studio flows when the call is answered. Leads hear your message, press a key, and can be forwarded to your sales number, while the campaign handles dialing hours, retries, Do Not Call removal and a per-contact report of the keys pressed. In the voice app, open **Campaigns** → **Create Campaign** and choose **Interactive (run an IVR flow)**.

> **Before you start:** build and publish the flow in [IVR Studio](https://ivr.edesy.in), for example the [press 1 to connect](https://edesy.in/docs/ivr/guides/press-1-to-transfer) flow. Campaigns are created in the voice app at [voice-app.edesy.in](https://voice-app.edesy.in) with the same Edesy account.

## What you need

| Item | Where |
|---|---|
| A published IVR flow | IVR Studio → **Flows**. A draft can be test-called, but the campaign starts only with a published flow |
| A caller ID | One of your Edesy numbers. For promotional calls in India, use a number registered for promotional calling |
| A contact list | CSV with `phone_number,name`. Optional `consent_source`, `consent_timestamp` |
| Wallet balance | The campaign checks your balance before starting. New accounts get Rs 20 of free credit |

## Steps

### Step 1: Campaign Details

1. Open [voice-app.edesy.in](https://voice-app.edesy.in) → **Campaigns** → **Create Campaign**.
2. **Campaign Name:** e.g. "Project launch: Pune, Hindi".
3. **Caller ID (From Number):** pick your number. Optionally choose **Rotate Caller ID** (a number pool) and a **Backup Caller ID**.
4. **Campaign Type:** choose **Interactive (run an IVR flow)**. This option appears once your workspace has at least one IVR flow.
5. **IVR Flow:** pick the flow. A draft shows "(draft)" with a reminder to publish it before starting.
6. **Call Settings:** **Max Concurrent Calls** (default 5), **Retry Attempts** (default 1) and **Ring Timeout (sec)** (default 30). A lead who presses 1 is forwarded and keeps a second line busy, so keep concurrency in line with how many calls your team can take.
7. **Dialing Hours:** **Only dial between set hours** is on by default, 09:00 to 21:00 in your timezone. Promotional calls in India are permitted between 09:00 and 21:00. A long list pauses outside these hours and continues the next day.
8. **Recording & Detection:** optionally **Record these calls** and **Detect answering machines** (billed separately).
9. Click **Continue**. Step 2 (Upload Audio) is skipped, because the flow provides the audio.

### Step 3: Upload Contacts

1. Click **Download sample CSV**, or use your own file: `phone_number,name`, one contact per line.
2. Upload it. Numbers on your **Do Not Call list** and repeated numbers are removed automatically. The summary shows **Rows uploaded**, **Will be called**, **On Do Not Call list** and **Duplicates removed**.

The `name` column is available in the flow as `{{var.contact_name}}`, and the number as `{{var.lead_phone}}`.

### Step 4: Review & Launch

1. Check the summary. It shows **IVR flow:** and the flow name.
2. **Hear it before you launch:** place a test call to your own phone, press 1, and check the transfer.
3. Check **Estimated Cost** against your wallet.
4. Start now, or set a **Start Time (optional)**.

While it runs, the campaign page shows **Interactive (IVR flow) campaign** and a **Keys Pressed** column for each contact. See [Results and Hot Leads](https://edesy.in/docs/ivr/campaigns/results-and-leads).

## With the API

Create the campaign with `ivr_flow_id` instead of `audio_type`, then add contacts, test, estimate and start as for any [campaign](https://edesy.in/docs/voice-api/campaigns/create-a-campaign).

```bash
curl -X POST https://voice-api.edesy.in/v1/campaigns \
  -H "Authorization: Bearer $EDESY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Project launch: Pune, Hindi",
    "from_number": "+9180XXXXXXXX",
    "ivr_flow_id": "5b1c2f0e-...",
    "max_concurrent": 5,
    "retry_attempts": 1,
    "ring_timeout_sec": 30,
    "window_start_minute": 540,
    "window_end_minute": 1260,
    "timezone": "Asia/Kolkata"
  }'

curl -X POST https://voice-api.edesy.in/v1/campaigns/{id}/contacts \
  -H "Authorization: Bearer $EDESY_KEY" -F "contacts=@leads.csv"

curl -X POST https://voice-api.edesy.in/v1/campaigns/{id}/test-call \
  -H "Authorization: Bearer $EDESY_KEY" -H "Content-Type: application/json" \
  -d '{ "phone_number": "+9198XXXXXXXX" }'

curl -X POST https://voice-api.edesy.in/v1/campaigns/{id}/start -H "Authorization: Bearer $EDESY_KEY"
```

`ivr_flow_id` can't be combined with `queue_id` (agent dialer). Starting with a draft flow is refused.

## Checklist before launch

- [ ] The flow is **published**, and the Menu's timeout exit is connected.
- [ ] An Email or HTTP Request node sits **before** the Transfer, so every "pressed 1" lead is captured even if nobody answers.
- [ ] The transfer number is staffed during your dialing hours.
- [ ] You heard the test call end to end, including the transfer.
- [ ] Your caller ID is registered for promotional calls, and your list has consent where you need it.
- [ ] Estimated Cost fits your wallet.

## Run one campaign per language

Make one flow per language (e.g. "Launch: Hindi", "Launch: Marathi") and one campaign per language list. If you don't know each lead's language, start the flow with a language menu. See [Flows in Every Language](https://edesy.in/docs/ivr/guides/multilingual-flows).

## Things to know

- A flow that a running campaign uses can't be deleted. The flow list shows "Used by N campaign(s)".
- Editing and re-publishing the flow changes what new calls hear.
- Each answered call is billed per minute from your prepaid wallet. Use **Estimated Cost** before launch.
- The Do Not Call check uses your workspace's own Do Not Call list. Keep it up to date, for example with a [press 9 to stop calls](https://edesy.in/docs/ivr/guides/press-1-to-transfer#add-a-press-9-to-stop-calls-option) option.

## FAQ

### Is this the same as a voice broadcast?

It uses the same campaign engine (list, dialing hours, retries, Do Not Call removal, results), but instead of playing one message it runs an IVR flow, so leads can press keys and be forwarded.

### Can I personalise the message?

Yes, with text to speech. `{{var.contact_name}}` speaks the `name` from your CSV. Recorded audio can't include the name.

### How do I find who pressed 1?

The campaign's **Keys Pressed** column and the `ivr_digits` column in the results export. See [Results and Hot Leads](https://edesy.in/docs/ivr/campaigns/results-and-leads).
