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

# Contact center

> Runnable today: agents that place and answer calls, hand off to a human, and report back after every batch.

**Runnable today.** An AI-first contact center: agents that place and answer
calls, hand the call to a person when it matters, and report back after
every batch. Built by contact centers, BPOs and BFSI teams.

💬
One prompt
"Call these leads, qualify for budget"

dial

📞
Fifty calls
Dialed as one batch, in the caller's language

report

📊
One report
Who qualified, and why

## Layers it uses

| Layer | What it does here | Status |
| - | - | - |
| Telephony | Unpod numbers, outbound and inbound | Production |
| Channels | Voice | Production |
| Models | Hindi and English voice profiles, with failover | Production |
| Context Engine | Per-contact data, memory of past calls, post-call outcomes | Production |
| Agents | A playbook agent with handoff to a human | Production |
| Actions | Google Sheets sync; the post-call webhook to your CRM | Production |

## Build it today

**1. Build the agent**

Create a voice agent in [Agent Studio](https://docs.unpod.ai/playbook/build-an-agent.md) with a
playbook for the qualification script. Pick a Hindi or English voice
profile, and set the calling days and hours.

**2. Turn on handoff**

Agent Studio → Advanced → **Enable Handover**, with the numbers of the
people who take escalations. It is a warm transfer: the caller hears hold
music while the person hears an announcement.

**3. Load the contacts**

Add your leads to a Space. Upload them, or connect a Google Sheet (Agent
Studio → Integration) so that new rows trigger calls.

**4. Launch the batch**

From the Space, select the contacts and call - or use the
[Task API](https://docs.unpod.ai/api/execution/create-task.md):

```bash theme={null}
curl -X POST "https://unpod.ai/api/v2/platform/spaces/$SPACE_TOKEN/tasks/" \
  -H "Authorization: Token $UNPOD_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"pilot": "my-sales-agent",
       "documents": [{"name": "Asha", "contact_number": "+9198xxxxxx01"},
                     {"name": "Ravi", "contact_number": "+9198xxxxxx02"}]}'
```

**5. Read the report**

Export the run from the Space as CSV, or read the Analytics tab. Each row
carries the structured outcome you defined: qualified, budget, next step.

From the SDK instead, loop over `calls.create` with an SDK agent (see the
[Quickstart](https://docs.unpod.ai/get-started/quickstart.md)). Raise the agent's `max_concurrent`
first; it defaults to 1.

```python batch_calls.py theme={null}
import asyncio
from unpod import AsyncClient

LEADS = ["+9198xxxxxx01", "+9198xxxxxx02", "+9198xxxxxx03"]

async def main() -> None:
    async with AsyncClient() as client:
        for number in LEADS:
            call = await client.calls.create(agent_id="my-sales", to_number=number)
            print(number, call.call_id, call.status)

asyncio.run(main())
```

## Not yet

* **Human seats and queues.** Escalations go to a phone number, not an agent
  desktop; there is no supervisor monitoring.
* **DND registry scrubbing.** Keep your own suppression list and remove
  numbers before you dial. Calling-hours windows are enforced automatically.
* **Ready-made CRM connectors.** Push outcomes with the post-call webhook.
* **Large campaigns.** Calls run about 10 at a time by default; ask us to
  raise the limit before a big batch.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.