Skip to main content
Docs menu: Fusion prompts

Guides

Building a Fusion prompt

How to write the guided prompt a Fusion voice runs on, section by section, with a complete example and what each check in the editor means.

An agent with a Fusion voice runs on a guided prompt: one prompt written in set sections, in a set order. When you save it, Telvana builds two prompts from it. One goes to the voice model, which talks to the caller. The other goes to the backend, which does the work: looking things up, booking, transferring the call and hanging up. The prompt editor checks what you write as you type and shows you both results before you save.

This guide walks through the editor, each section, how to write tasks, a complete example, and what the editor's checks mean.

Before you start

Fusion is one of the two voice engines. You choose it under Call settings on the agent's Voice tab, by picking a Fusion voice in the Voice row. Agents on Classic voices keep using plain prompts.

Then go to the Prompts section on the same tab. There are three ways into the editor:

  • Start from the template. For a new inbound prompt, choose Start from the template on the Inbound card. For a new outbound prompt, choose Add prompt on the Outbound card. To replace an existing prompt with a fresh template instead of converting it, choose Start from the template in its menu.
  • Convert an existing prompt. An agent moved to Fusion with a plain prompt shows Convert my prompt on the Inbound card and Convert on each outbound prompt. Telvana rewrites the prompt into the sections and checks it, which takes from one to about six minutes. You can close the dialog while it works and come back when the draft is ready, but leaving the page loses the draft. Nothing changes until you review the draft and save it, and your current prompt keeps running until then.
  • Edit a saved guided prompt. Choose Edit on the Inbound card, or on the outbound prompt's row.

The editor

The editor has three parts.

  • The outline, on the left, lists the sections in order with the tasks under Tasks, each marked done, empty, missing or with problems. Select one to jump to it, or add a section that isn't there yet. On a smaller screen it's behind the Outline button above the text.
  • The text box, in the middle, with an Insert toolbar above it: Task adds a new task, Ask, Confirm, Say and Hand off add a step after the one your cursor is on, and Tool puts one of the agent's tools on a hand-off.
  • The side panel, on the right, has three tabs. Guide explains the section your cursor is in. Problems lists what the checks found, and selecting one takes you to its line. Preview shows exactly what the voice model and the backend will each get, with their sizes against the limits.

The line under the text box shows the result of the latest check, and Save (or Cmd+S, Ctrl+S on Windows) saves the prompt. Saving is blocked while there are errors, and for an outbound prompt while the Title is empty.

The template marks each thing to fill in with «guillemets», like «business». Replace every one with your own words: saving is blocked while any are left.

How the prompt is used

It helps to know who reads each part, because that decides where things go.

  • The voice model talks to the caller and has no tools. It gets a short version of your prompt: Persona, Opening line, Tasks (without the backend notes after a |), Answers and Ending the call. It never sees Backend rules.
  • The backend runs the tools. It gets the whole prompt, Backend rules and every note after a | included.

Each Hand off step is where the voice model passes a job to the backend and waits. When the result comes back, it tells the caller what the result says. The voice model can't check, book or look up anything on its own, so anything the agent should actually do has to be a hand-off.

The sections

Write the sections in this order, each starting with a heading line that begins with #:

SectionRequiredWhat goes in it
# PersonaYesWho the agent is, then how it should sound
# Opening lineYesThe exact first words of the call
# TasksYesOne task for each thing a caller calls about
# AnswersNoFacts the agent can say without looking anything up
# Ending the callYesWhat the caller says when the call is over
# Backend rulesNoEverything only the backend needs

These six are the only sections. A heading the editor doesn't know, like # Hours or # FAQ, is an error: put opening hours in Answers, and procedures in Backend rules. Text before # Persona is an error too, and so is a section that appears twice.

Persona

The first line says who the agent is, the business it works for and what it helps with. The lines after it say how to sound: tone words, short sentences, one question at a time.

# Persona
You are Robin, the front-desk assistant for Sunny Paws Veterinary Clinic. You help pet owners book visits and answer questions about the clinic.
Warm and patient. Short sentences, one question at a time.

Opening line

The exact words the agent says first. Only the first line of the section is used, it can be up to 600 characters, and double quotes around it are dropped. The agent says it even if the caller speaks first.

An inbound opening can't use {{variables}}: inbound calls have none, so the agent would read the braces out as written. Outbound prompts can, and each call fills them in from the values sent when it was placed (see Placing outbound calls).

# Opening line
Thanks for calling Sunny Paws Veterinary Clinic, this is Robin. How can I help you today?

Tasks

One task for each thing a caller might call about: booking, rescheduling, a question that needs a lookup, asking for a person. Each task is a ## heading with its name, a When: line saying what the caller says or asks that starts it, and numbered steps. How to write those is in Writing tasks below.

Answers

Facts the agent may say without looking anything up, one per line, worded the way they should be said: opening hours, the address, what you do and don't offer. Keep it to what callers actually ask, because it counts toward the voice model's size limit.

Ending the call

The phrases that mean the caller is done, like "bye", "that's all", or "no" when asked if there's anything else. The template's line covers most agents. When the caller says one of them, the voice model hands off ending the call and says nothing itself: the backend says goodbye and hangs up. So don't write a goodbye step in your tasks.

Backend rules

Everything only the backend needs: how to find the caller's record, which calendar to use, time zones, retries, formats, transfer numbers, policies. The voice model never sees this section, so this is where detail goes when the voice model's version is getting long.

Writing tasks

A task is a short script. Each step is one of four kinds:

  • Ask: one question for the caller, in the words to say, ending with ?. A remark can come first, but the line ends with the question.
  • Confirm: a read-back, phrased as a question and ending with ?. Use it before anything that acts on what the caller said.
  • Say: a line that asks nothing. Use it sparingly: after a Say, the caller doesn't know it's their turn.
  • Hand off: a job for the backend.

A hand-off has up to three parts:

4. Hand off: find open times that day | [[find_open_times]] 30-minute slots for a checkup. If that day is full, return openings on the next two days.
   Then: Offer up to three of the times in the result.
  • Before the |: what the backend should do, in plain words. The voice model sees this part.
  • After the |: the tool to use, written as [[tool_name]], and any rules only the backend needs. The voice model doesn't see this part. The Tool button lists the agent's tools; every agent has end_call, and transfer_call when call transfer is on.
  • Then:, on the next line: what to tell the caller from the result. Words in [square brackets] stand for values from the caller or the result, like [day] and [time].

A long step can carry on onto the next line. The extra line stays with the part it continues, so wrapped backend notes stay out of what the voice model gets.

The rules the editor checks

  • A task can't start with a hand-off. The voice model skips hand-offs it would have to start on its own, so ask or confirm something first.
  • A hand-off comes right after the Ask or Confirm whose answer triggers it. Not after a Say, and not after another hand-off.
  • A transfer comes right after the question that offers it, like "Would you like me to connect you with our front desk?". A yes to anything else isn't a go-ahead, and the agent ends up announcing the transfer instead of making it.
  • A Confirm ends with its question mark, and an Ask ends with its question. Put any remark before the question, not after it.

What makes tasks work

These aren't checked, but they come from testing calls, and breaking them shows up as missed hand-offs, silence after a goodbye, or an agent that says "let me check" and checks nothing.

  • Decisions the agent can make from what the caller said belong in When: or an Ask, never in a hand-off. Whether the caller is new or existing, or which task they want, is the voice model's call.
  • Identifying the caller is the backend's job. Ask for the one detail it needs, confirm it, then hand off the caller's actual request. Looking up records, retrying and choosing between matches go after the | or in Backend rules.
  • Keep Asks and Then lines to the words the agent says. Procedures, formats, edge cases and policies go after the | or in Backend rules.
  • Never write "let me check" as its own step. The hand-off is the check.
  • Don't write a goodbye step. Ending the call is its own section.
  • Keep phone numbers, ids and internal names with the backend, after the | or in Backend rules, not in what the agent says.

Fixing a task that doesn't pass

This task breaks three of the rules above:

## Check a visit
When: the caller asks when their visit is
1. Say: Let me check that for you.
2. Hand off: look up the pet's next visit | [[find_appointment]]

It announces a lookup as its own step, the hand-off follows a Say, so nothing the caller says triggers it, and it never asks for the detail the backend needs to find the visit. Ask for that detail, and let the hand-off be the check:

## Check a visit
When: the caller asks when their visit is
1. Ask: What's your pet's name?
2. Hand off: look up the pet's next visit | [[find_appointment]] Match on the caller's phone number and the pet's name.
   Then: Tell them the day and time of the visit, or that none is booked.

A complete example

An inbound prompt for a veterinary clinic, with a booking task and a transfer. It passes every check:

# Persona
You are Robin, the front-desk assistant for Sunny Paws Veterinary Clinic. You help pet owners book visits and answer questions about the clinic.
Warm and patient. Short sentences, one question at a time.

# Opening line
Thanks for calling Sunny Paws Veterinary Clinic, this is Robin. How can I help you today?

# Tasks
## Book a visit
When: the caller wants to book a visit, a checkup or vaccinations
1. Ask: What's your pet's name?
2. Ask: What's the visit for?
3. Ask: What day works best for you?
4. Hand off: find open times that day | [[find_open_times]] 30-minute slots for a checkup, 60 for a new patient. If that day is full, return openings on the next two days instead.
   Then: Offer up to three of the times in the result.
5. Ask: Which of those times would you like?
6. Confirm: That's [pet name] on [day] at [time], is that right?
7. Hand off: book the visit | [[book_appointment]] Book under the caller's phone number. If the time was taken in the meantime, return the next open time.
   Then: Tell them [pet name] is booked for [day] at [time].

## Talk to the front desk
When: the caller asks for a person, or asks something the Answers don't cover
1. Ask: Would you like me to connect you with our front desk?
2. Hand off: transfer the caller to the front desk | [[transfer_call]] If the transfer doesn't connect, offer to take a message for the front desk.

# Answers
- We're open Monday to Friday from 8 AM to 6 PM, and Saturday from 9 AM to 1 PM.
- We see dogs and cats.
- New patients are welcome. Bring any vaccination records you have to the first visit.

# Ending the call
The call is over when the caller says "bye", "goodbye", "that's all", or answers "no" when asked if there's anything else.

# Backend rules
- Find the caller's record by the number they're calling from. If none matches, create one with the pet's name.
- Times are in the clinic's time zone, Pacific. Say them as "Tuesday at 2:30 PM".
- Never book more than 60 days ahead.

A few things to notice:

  • Every hand-off follows an Ask or Confirm, and the booking waits for a read-back first.
  • The transfer follows the question that offers it. Its fallback, for when the transfer doesn't connect, is after the |: a transfer gets no Then: line, because the call has left once it connects.
  • How to find the caller's record and the time zone are in Backend rules, so the voice model's version stays short.
  • The tool names are examples. Use the ones the Tool button lists for your agent.

Outbound prompts

Outbound prompts work the same way, with two differences. Each has a Title, which says what the calls are for, like Appointment reminder. And the opening line, the steps and the backend notes can use {{variables}} from the call:

# Opening line
Hi {{firstName}}, this is Robin from Sunny Paws Veterinary Clinic. I'm calling about {{petName}}'s visit on {{visitDate}}. Do you have a minute?

# Tasks
## Confirm the visit
When: the person can talk
1. Ask: Will {{petName}} still make it on {{visitDate}} at {{visitTime}}?
2. Hand off: mark the visit confirmed | [[confirm_appointment]] The visit id is {{visitId}}.
   Then: Thank them and say you'll see them then.

Send every variable the prompt uses when you place the call: a call that's missing one won't follow the prompt as written. An id like {{visitId}} belongs after the |, where only the backend sees it.

Checks, warnings and limits

The editor checks the prompt each time you pause typing. Problems are marked on their lines and listed under Problems. Errors block saving; warnings don't, but are worth a look.

Errors:

  • A placeholder in «guillemets» is still there.
  • A required section is missing or empty, or a section's heading is unknown or repeated.
  • Text comes before # Persona.
  • There are no tasks, a task has no steps, or a hand-off doesn't say what the backend should do.
  • A task starts with a hand-off, a hand-off doesn't follow an Ask or Confirm, or a transfer doesn't follow the question that offers it.
  • A Confirm doesn't end with ?, or an Ask has words after its question.
  • An inbound opening uses {{variables}}, or the opening line is over 600 characters.
  • The prompt is too long (below).

Warnings:

  • A hand-off doesn't name its tool.
  • A tool isn't one of the agent's tools. The message lists the ones it has: check the spelling, and check that the integration or MCP server the tool comes from is attached to the agent.
  • A transfer has a Then: line, which the voice model doesn't get.

The voice model's version has to stay under 20,000 characters, and the whole prompt can be up to 100,000. If the voice model's version is too long, shorten Tasks and Answers, or move detail after a hand-off's | or into Backend rules. Preview shows both sizes as you go.

After you save

The prompt starts running on the agent's next call. Its card shows a summary: the persona, how it opens, and each task with its steps and tools, and View the full prompt shows what was built from it. A prompt marked Not built or Too long needs another look in the editor.

To try an outbound prompt, use Test call in its menu, which rings a number you choose with that prompt. Each call's transcript is under Conversations, which is the quickest way to see where a task went differently than you meant.

If something still isn't working, email support@telvana.com with your workspace name, the agent and, for a call, its conversation id.