You can copy full or partial flows between projects using
Cmd/Ctrl + C
and Cmd/Ctrl + V
in the Flow Editor.
- Step-specific prompts and function references
- ASR biasing for input accuracy
- Clean state transitions between flow steps
Start step
To help identify some of the key parts of a flow step, the start step is annotated. Click a lettered heading to go to the relevant section.
A. Flow name (breadcrumb)
The flow name appears at the top of the editor and identifies the current flow — in this case,reservation confirmation
.
It also acts as a breadcrumb, allowing you to return to the list of all flows. This is useful when working across multiple projects or agents.
B. Step name and icon
This shows the current step:Collect confirmation code
. The 🏁 icon indicates it’s the start step of the flow.
Each step contains:
- A prompt shown to the user
- Transition logic to guide conversation flow
- A set of visible functions the LLM can call.
C. Transition function reference
Inside the step prompt, the LLM is told to callsave_confirmation_code
if the user provides a valid input.
This example uses both the conversation and flow objects:
/
and appear as underlined blocks in the prompt editor.
See the transition function page for more details.
D. Add another reference
Clicking the . icon below the prompt lets you:- Add another function reference
- Insert a transition to another step
- Reference rules or knowledge base topics
goto_step()
calls inside a single function. Always return
after calling goto_step
.
E. ASR biasing
This step has ASR biasing set to Alphanumeric, improving recognition of spoken confirmation codes like “B–4–Z–Q–9”. You can enable other biasing types as needed, including:- Name spelling
- Time and date
- Numbers
- Addresses
F. Flow toolbar (bottom panel)
At the bottom of the Flow Editor:- Flow functions opens a modal to manage logic used in the flow
- + Step adds a new node to the flow canvas
Middle steps

- If the user has already provided the name, the agent calls the relevant function (e.g.
save_first_name
,save_last_name
) and proceeds. - If not, the agent asks for it directly.
End step

- It compares the
confirmation code
,first name
, andlast name
against entries in the$reservations
list. - If a match is found, it calls the
confirm_reservation
function and moves forward. - If no match is found, it calls
transfer_call
with the following parameters:destination="RESERVATIONS"
reason="RESERVATION_NOT_FOUND"
utterance="Right, let me put you through to someone who can help. Just a moment."
Reminders
- LLMs only see the current step’s prompt and function list — not previous steps
- Always use
return
afterflow.goto_step()
to prevent silent overrides - Avoid naming transitions by position (
goto_step_4
) — use intent-based names likematch_reservation
orretry_lookup
Improving date accuracy from speech
Voice transcription (ASR) often produces unstructured date strings liketwenty seventh of june twenty twenty five
, which can be hard to parse — especially if you’re enforcing a strict format like DD/MM/YYYY
.
Instead of checking the date format in the step prompt or rejecting invalid inputs immediately:
- Move format enforcement into the LLM context field of the parameter.
- Let the LLM interpret and convert the input to the required format.
- Then validate it in the function.
The user will say a date. You must extract the intended date and convert it to DD MM YYYY format. If they use a different format, rewrite it before returning.