> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trikon.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# Call a list of people (Campaigns)

> Upload contacts and let your bot call every one of them.

A **campaign** is a list of people your bot rings one after another. Open **Campaigns** in
the left menu and click **New Campaign**.

<iframe className="w-full aspect-video rounded-xl" src="https://www.youtube.com/embed/X-BqbJ3KR1c" title="How to Run an Outbound Voice Campaign" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowFullScreen />

## Set up the campaign

<Steps>
  <Step title="Name it">
    Something you will recognise later, e.g. "October fee reminders".
  </Step>

  <Step title="Pick the bot">
    Under **AI Voice Agent**. Use a bot whose call type is **Outbound** so it speaks first
    and explains why it is calling.
  </Step>

  <Step title="Pick the number to call from">
    Under **Outbound Phone Number**. This is what shows on the recipient's phone.
  </Step>

  <Step title="Add your contacts">
    Either **Add Contact** one at a time, or **Upload CSV** for a whole list.
  </Step>

  <Step title="Save and start">
    Open the campaign and click **Start Campaign**. **Pause** stops it; starting again
    picks up where it left off.
  </Step>
</Steps>

<Note>
  A campaign can hold up to **200 contacts**. For a bigger list, split it into several
  campaigns.
</Note>

## Preparing your CSV file

The simplest file has two columns:

```csv theme={null}
phone,name
+919845012345,Asha
+919845012346,Ravi
```

Any extra column becomes something your bot can say. This file:

```csv theme={null}
phone,name,company,amount_due
+919845012345,Asha,Acme Dental,4500
```

lets your script say:

> Hello `{{name}}`, I'm calling from Acme about the pending amount of `{{amount_due}}` for
> `{{company}}`.

<Tip>
  Write phone numbers in full international format (`+91…`). Include the header row —
  `phone`, `name`, `mobile`, `company`, and `metadata` are all recognised.
</Tip>

<iframe className="w-full aspect-video rounded-xl" src="https://www.youtube.com/embed/hgr1uCxs6nc" title="How to Pass Dynamic Variables to AI Voice Agents" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowFullScreen />

## Campaign-level variables

Values that are the same for everybody — an offer name, a due date — can be entered once
under **Configure Campaign Constants** instead of repeating them in every row.

For detailed instructions and examples on CSV columns and prompt placeholders, see the dedicated [Dynamic Variables Guide](/user-guide/dynamic-variables).

## While it runs

The campaign screen shows **Total Contacts**, **Completed**, **Early Hangup**, **In Progress**, and
**Failed / No Answer**, plus a row per contact with its status, duration, recording, and
transcript. Click **Listen** to play a recording, or a row to read the conversation.

**Completed** is a call where **both sides spoke**, even if it ended before 17 seconds.

**Early Hangup** is a connected call without a real two-way conversation, even if it lasted
more than 17 seconds:

* **User didn’t join** — the agent spoke, but the person never talked.
* **Agent didn’t join** — the agent never came on the line, or there is no transcript on either side.

Those early hangups are listed in the campaign logs, but they are not counted as completed
and are not sent into the AI summary.

Calls are made a few at a time rather than all at once, so your number is not flagged for
spamming. A large list simply takes a while.

## The AI summary

Once a campaign finishes, an **AI Campaign Summary** is generated automatically (as long as there is at least one completed call). It only uses **completed** calls — the same count you see in the Completed card. Early hangups are left out. If 30 calls completed, the summary covers those 30.

The report includes an executive summary plus contacts sorted into **Interested**, **Follow-Up**, **Not Interested**, **Callback**, and **Other**. Each contact includes a small per-customer summary highlighting the key questions they asked and a recommended next action.

You can also view this per-customer summary by clicking on a specific contact to open their details drawer.

## Retry unanswered and busy contacts

When a campaign is **completed**, **Retry Contacts** builds a new draft campaign from people who were busy, did not answer, hung up early, or failed — without uploading a new spreadsheet. Pausing does not unlock retry.

Full walkthrough, filters, and who is excluded: [Retry a campaign](/user-guide/retry-campaign).

<Tip>
  Start with a test campaign of two or three of your own numbers. Listen to those recordings,
  fix the script, and only then upload the full list.
</Tip>
