# Getting Started (/docs/agents/voice-agents/getting-started)

> For the complete documentation index, see [llms.txt](https://docs.tandemcx.ai/llms.txt). Any page on this site can be fetched as Markdown by appending `.md` to its URL.

This walkthrough builds a working voice agent from an empty form, talks to it in the
browser, then puts a real call through it. It takes about ten minutes: the create dialog
collects the essentials, and the rest happens on two cards of the agent editor, **Persona**
on the **Identity** step and **Dispositions** on the **Conversation** step. Everything else
has a default you can revisit later.

The editor shows one step at a time and the stepper across the top moves between them. Any
step is clickable at any point, so you can jump straight to the two this walkthrough uses.

We'll build a simple after-hours agent: it takes a message and reports whether the caller
wanted a callback.

<Steps>
<Step>
### Create the agent

Select **Automations → Agents** in the left navigation, then click **Create Agent**. If you're
asked how you want to start, choose **Start from Scratch** — the other option, **Use a
Template**, is covered in [Templates](/docs/agents/voice-agents/templates).

A short dialog opens asking for just what an agent needs to exist: a name, a system prompt, the
channels it answers on, and a model and voice. The next five steps fill it in. Everything after
that happens in the editor.

</Step>

<Step>
### Name it

Set **Name** to something you'll recognize in a list of agents — `After-Hours Intake`.
The name is for you; callers never hear it.

</Step>

<Step>
### Write the system prompt

The **System Prompt** is the agent's job description. Write it as numbered steps rather
than a paragraph:

```
You are the after-hours intake line for Northwind Plumbing.

1. Greet the caller and tell them the office is closed.
2. Ask what they need help with, and listen without interrupting.
3. Ask for their name and the best number to reach them.
4. Confirm the number back to them digit by digit.
5. Tell them someone will call back the next business day, and end the call.

Never quote prices. Never promise a specific callback time.
If the caller describes flooding or a gas smell, tell them to hang up and call 911.
```

Numbered steps make the agent's behavior easy to debug: when it does the wrong thing, you
can usually point at the step that needs sharpening. See
[Persona](/docs/agents/voice-agents/persona) for more on writing prompts.

</Step>

<Step>
### Choose its channels

**Channels** is what the agent is for: **Voice**, **Chat**, or both. Both are on by default,
and this one takes calls, so leave them alone.

Switching **Voice** off makes an agent for a [chat widget](/docs/agents/chat-widget) only. No
voice is asked for, and the call-only cards are absent from the editor you land in. You can
change this later on the **Persona** card; at least one channel always stays on. See
[Channels](/docs/agents/voice-agents/persona#channels).

</Step>

<Step>
### Pick a model

Choose a **Language Model**. The dialog doesn't preselect one, and picking it reveals the
voice fields below it — as long as **Voice** is one of the channels: every current model
speaks through a separate voice. See
[Brain](/docs/agents/voice-agents/brain) for how the options differ — you can change the
model later on the **Brain** card.

</Step>

<Step>
### Pick a voice

Work down the **Voice Provider → Language → Voice → Voice Engine** dropdowns. Each one
populates from the one above it, so pick them in order.

<Callout type="info">
    A voice is required while **Voice** is one of the agent's channels, and it's checked at every
    save: **Create Agent** refuses without one, and so does the editor's **Save Configuration**
    later, both with "Select a voice provider." A chat-only agent needs none and isn't shown these
    fields at all. On an agent that does take calls, only a draft written over the API can omit a
    voice; publish refuses it there. See
    [Versioning](/docs/agents/voice-agents/versioning#publishing).
</Callout>

</Step>

<Step>
### Create it

Click **Create Agent**. The agent is saved as version `0.1` — a draft — and the editor opens on
it, editable. The remaining steps happen there, and nothing you do reaches a caller until you
publish, which is the last step below. See [Versioning](/docs/agents/voice-agents/versioning).

</Step>

<Step>
### Set a greeting

On the **Persona** card, fill in **Greeting** with the exact first line you want spoken:

```
Thanks for calling Northwind Plumbing. Our office is closed, but I can take a message.
```

A greeting is optional, but setting one makes the open predictable instead of leaving the
first sentence up to the model.

</Step>

<Step>
### Add dispositions

**Dispositions** are the outcomes this agent can report when the call ends, and they
become the exits you route from in a workflow. Go to the **Conversation** step, click the
**Dispositions** row in the **Rules & Outcomes** group, then **Add disposition** twice and
add:

| Name              | Description                                            |
| ----------------- | ------------------------------------------------------ |
| `callback_wanted` | The caller left a message and wants to be called back. |
| `no_action`       | The caller hung up or didn't need anything.            |

</Step>

<Step>
### Save and publish it

Click **Save Configuration** to store the draft, then **Publish** to make it the version calls
run. Save already refuses a missing required field, so what Publish adds are the server-side
rules a live call depends on: a disconnected ElevenLabs integration, a secret you can't use, a
linked agent with nothing published. See
[Versioning](/docs/agents/voice-agents/versioning#publishing).

The agent appears in the **Voice Agents** list, showing its model and voice provider.

</Step>

<Step>
### Talk to it

Click **Call Agent** in the top right and grant your browser microphone access. The agent
answers, and you can talk to it the way a real caller would, including interrupting it
mid-sentence. No workflow and no phone number are needed yet.

Edit the prompt, click **Restart**, and listen again. That loop is the fastest way to get
the agent sounding right, and [Preview Calls](/docs/agents/voice-agents/preview-calls)
covers what it can and can't tell you.

You don't have to wait until a version is published to do this — a draft can be called the
same way, which is the better moment to catch a prompt that reads well and sounds wrong.

</Step>

<Step>
### Point a workflow at it

Open (or create) a workflow, add an **AI Voice Agent** node, and select this agent in its
**Agent** field. The node's exits populate with your two dispositions plus `default` and
`fallback`. Wire each one somewhere, even if that's just a **Disconnect** node.

</Step>

<Step>
### Put a real call through it

Publish the workflow and call the number it's routed to. The preview already told you how
the agent sounds. What this checks is everything around it: the number is routed where you
think, the workflow reaches the node, and the exits go somewhere.

</Step>
</Steps>

## What to tune after the first call

The first call almost always surfaces something. Each of these is worth a preview call and a
**Restart** rather than a fresh phone call. In rough order of how often it comes up:

- **It talks too much.** Add an explicit instruction to the prompt: "Keep replies to one or
  two sentences. This is a phone call, not an essay."
- **It cuts the caller off, or waits too long.** Adjust
  [voice activity detection](/docs/agents/voice-agents/voice-and-speech).
- **It goes silent while looking something up.** Set a
  [thinking cue](/docs/agents/voice-agents/voice-and-speech).
- **It won't hang up.** Make ending the call an explicit numbered step, and make sure your
  dispositions actually cover the endings the prompt describes.
- **It doesn't know things it should.** Attach a
  [knowledge base](/docs/agents/knowledge-base/overview) rather than pasting facts into the
  prompt.

## Next steps

<Cards>
    <Card
        title="Preview Calls"
        href="/docs/agents/voice-agents/preview-calls"
        description="Test the agent in your browser, and know what a preview can't tell you."
    />
    <Card
        title="Persona"
        href="/docs/agents/voice-agents/persona"
        description="Write prompts the agent follows, and define dispositions."
    />
    <Card
        title="Tools"
        href="/docs/agents/voice-agents/tools"
        description="Let the agent look up accounts, book appointments, and more."
    />
    <Card
        title="Using an Agent in a Workflow"
        href="/docs/agents/voice-agents/using-in-workflows"
        description="Route on how the call ended."
    />
</Cards>
