Skip to main content
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.

How to configure this

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

example-main 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