> Source: https://docs.virtuo.in/vio/how-to
> Step-by-step recipes for common Vio tasks — launch an outbound campaign, connect your own carrier, forward call results to a CRM, and remember callers.
# How-to guides
**Short, task-focused recipes for the things people do most in Vio.** Each recipe has the quick steps plus a link to the full guide. New to Vio? Do [**Getting started**](/vio/getting-started/sign-in) first, then come back here.
## Launch an outbound campaign
Dial a list of contacts with an AI agent, paced and retried automatically.
### Prepare your CSV
One row per contact, with a phone column in **E.164 format** (for example `+919876543210`). Add any columns you want to personalise the call, such as `name` — see [**Personalise the greeting**](#personalise-the-greeting-with-the-callers-name) below.
### Create the campaign
Go to the **Outbound Dialer**, click **New campaign**, and upload your CSV. Map the phone column and any personalisation columns.
### Choose the agent and pacing
Pick the [**agent**](/vio/agents) that should make the calls, then set the **pacing** (how fast to dial) and **retry** behaviour for no-answers.
### Start dialing
Review the summary and click **Start**. Vio dials through the list; each completed call appears in your [**call log**](/vio/call-logs) with its transcript, outcome, and cost.
Full guide: [**Outbound campaigns**](/vio/telephony/outbound-campaigns). Always respect consent and DND rules for the numbers you dial.
## Connect your own carrier / FreePBX (BYOC)
Run calls on your existing phone lines while Vio handles the AI, by pointing your carrier or PBX at Vio over a SIP trunk.
### Add a SIP trunk in Vio
Go to **SIP Trunks** → **New trunk**. Vio gives you the connection details (host, credentials) and requires **digest authentication** on inbound trunks for security.
### Point your carrier or FreePBX at Vio
In your carrier portal or FreePBX (Trunks → SIP), create a trunk to Vio using the details from the previous step. Route the numbers you want the AI to answer to that trunk.
### Assign an agent and test
Assign an [**agent**](/vio/agents) to the trunk or number, then place a real call to confirm inbound audio flows and the agent answers.
Full guide: [**SIP trunks**](/vio/telephony/sip-trunks). Remember: with BYOC, the **phone minutes stay on your carrier's bill** — Vio only meters the AI. See [**Pricing**](/vio/pricing).
## Forward call results to your CRM or Google Sheet
Push every finished call — summary, extracted variables, outcome — to your own system automatically with a **results webhook**.
### Open the Fulfilment settings
In the [**agent editor**](/vio/agents), go to the **Analysis, actions & fulfilment** tab.
### Add your webhook URL
Paste the URL Vio should POST to when a call ends (your CRM endpoint, a Google Sheet automation, or a tool like Zapier/Make). It must be publicly reachable and return a **2xx** response.
### Choose what to send and save
Confirm which fields go in the payload (summary, sentiment, goal-met, and your [**variables**](/vio/agents/variables)), then save. The next completed call fires the webhook.
Full guide: [**Analysis, actions & fulfilment**](/vio/agents/analysis-actions-fulfilment). If it isn't firing, see [**Troubleshooting**](/vio/troubleshooting#my-results-webhook-isnt-firing).
## Personalise the greeting with the caller's name
Have the agent open with the caller's name (from a campaign CSV or a variable), with a safe fallback when you don't have it.
### Use a variable in the greeting
In the agent's [**persona**](/vio/agents/persona), write the greeting with a placeholder and a fallback: `Hi {{name|there}}, thanks for calling…`. If `name` is known, the agent says it; if not, it says "there".
### Supply the value
For **outbound campaigns**, add a `name` column to your CSV — Vio maps it into `{{name}}` for each call. For **inbound**, populate the variable from a [**tool**](/vio/agents/tools) lookup or [**caller memory**](#remember-returning-callers).
Full guide: [**Persona**](/vio/agents/persona) and [**Variables**](/vio/agents/variables).
## Remember returning callers
Let the agent recognise someone who has called before and pick up context, instead of starting cold every time.
### Enable caller memory
In the [**agent editor**](/vio/agents), open the **Advanced** tab and turn on **caller memory**.
### Choose what to remember
Decide what carries over between calls (for example the caller's name or their last request), then save. On the next call from a known number, the agent has that context available.
Full guide: [**Agent advanced settings**](/vio/agents/advanced).
## Transfer a call to a human
Hand the live call to a person when the agent can't (or shouldn't) resolve it.
### Add a transfer action
In the **Analysis, actions & fulfilment** tab, add a **transfer-to-human** action and set the target number in **E.164 format** (for example `+919876543210`).
### Tell the agent when to use it
In the [**persona/prompt**](/vio/agents/persona), describe the conditions — e.g. "if the caller asks for a human or the request is a complaint, transfer." Save and test with a real call.
Full guide: [**Analysis, actions & fulfilment**](/vio/agents/analysis-actions-fulfilment). Your carrier must support call transfer — see [**Troubleshooting**](/vio/troubleshooting#transfer-to-a-human-isnt-connecting).
## Read what a call cost
See exactly how much any real call cost and where the money went.
### Open the call in Call Logs
Go to [**Call Logs**](/vio/call-logs) and open the call. The total **₹ cost** is shown on the call.
### Read the cost breakdown
Expand the cost to see the per-component breakdown. Remember this is the **AI cost** — the **phone minutes** are billed separately by your carrier or Twilio. See [**Pricing**](/vio/pricing).
In-browser [**test calls**](/vio/getting-started/test-your-agent) are free and are **not** logged. Place a real call to see cost data.
---
Can't find your task? Check the [**Features tour**](/vio/features) for the right page, or ask the in-dashboard **Assistant**. Something not working? See [**Troubleshooting**](/vio/troubleshooting).