A flow starts when something calls conv.goto_flow("Flow name"). This may happen through a Knowledge Base action or programmatically inside a function.
This page explains how conv.goto_flow can be used:
You can call conv.goto_flow(...) from any function in Agent Studio, including:
Example:
def start_booking(conv: Conversation):
conv.goto_flow("Make a booking")
return
What happens:
- The function runs during the current turn.
- When the turn completes, the agent enters the named flow.
- The flow begins at its configured start step.
Start a flow from a Knowledge Base action
A Knowledge Base topic can be configured to start a flow.
When a topic matches a user request, you can attach an action that starts a specific flow.
In Agent Studio:
- Open Knowledge Base.
- Select the topic that should trigger the workflow.
- Add an action that starts a flow.
- Choose the target flow.
No custom function is required if no additional logic is needed.
Using the /Flow shortcut
Inside a Knowledge Base action field, type /Flow and use the (+) option to create or attach a flow.
Start or switch flows from inside another flow
Once a user is inside a flow, most movement should happen using flow.goto_step(...).
That keeps the user inside the same workflow and simply branches to another step.
However, sometimes you need to switch to an entirely different workflow.
Examples:
- The user fails identity verification and must enter a verification flow.
- The user requests a human agent and must enter an escalation flow.
- A compliance rule requires a separate structured process.
- The user changes intent entirely (e.g., from booking to cancellation).
In these cases, start a new flow instead of branching.
You do this by calling conv.goto_flow("Flow name") from a function inside the current flow.
Example: Escalating after repeated failed verification
Imagine a booking flow where the user must confirm their date of birth.
If they fail verification too many times, you want to move them into a dedicated verification flow.
def check_verification(conv: Conversation, flow: Flow):
attempts = conv.state.verification_attempts or 0
if not conv.state.is_verified:
attempts += 1
conv.state.verification_attempts = attempts
if attempts >= 3:
conv.goto_flow("Identity Verification")
return
flow.goto_step("Retry verification")
return
flow.goto_step("Continue booking")
return
Inside a function, only the last flow.goto_step(...) call is executed
Routing based on API results
Main article: conv.api
A function may call an API using conv.api.
After receiving a response, explicitly choose one of two actions:
- Stay in the current workflow using
flow.goto_step(...)
- Switch workflows using
conv.goto_flow(...)
Example:
def check_customer_status(conv: Conversation, flow: Flow):
response = conv.api.crm.lookup_user(id=conv.state.user_id)
if response.status_code != 200:
flow.goto_step("API error handling")
return
data = response.json()
if data.get("status") == "requires_verification":
conv.goto_flow("Verification flow")
return
flow.goto_step("Continue booking")
return