What is a sub-flow?
A sub-flow is a self-contained piece of conversation logic, such as checking an order status or sending a payment reminder, that other flows call into using a Call Sub-flow step rather than being rebuilt inside every one of them. It has its own trigger, set to 'only when another flow calls it', so it never runs on its own.
- A sub-flow is built once and reused across many parent flows, chat and voice alike.
- Its trigger must be set to 'Only when another flow calls it' — it never starts by itself.
- Editing a published sub-flow changes behaviour everywhere it is called, so test changes before publishing.
- Common sub-flows: order status, payment reminder, FAQ lookup, appointment rescheduling.
- Sub-flows keep a bot maintainable as it grows, instead of duplicating the same logic across dozens of flows.
The definition
A sub-flow is a reusable segment of a conversation, kept as its own flow, that other flows jump into using a Call Sub-flow step instead of repeating the same steps inside every flow that needs them. It behaves like a shared drawer of conversation logic that any main flow can open when it needs to.
The one rule that makes a flow a sub-flow rather than a regular one is its trigger: it must be set to "Only when another flow calls it". This means it never starts on its own, even if a customer's message happens to match something inside it. It only ever runs when explicitly invoked.
How it works, in plain terms
If you have built software before, this is the same idea as a function or subroutine: write the logic once, call it from wherever you need it, and fix it in one place when something changes. If you have not, think of it as a laminated instruction card kept behind the counter: any staff member handling any customer can pull out the "how to check an order" card instead of memorising the steps separately for every situation.
Mechanically, a parent flow reaches a Call Sub-flow step, hands control to the sub-flow (optionally passing variables like the customer's phone number or order ID), the sub-flow runs its own steps, and then returns control back to the parent flow, often carrying results back with it.
Real examples
Sub-flows tend to appear first around the handful of questions that show up across almost every conversation a business has, regardless of how that conversation started. A few patterns come up again and again:
- Order status lookup: a sub-flow that takes an order number, calls your API or checks a Google Sheet, and replies with the current status. Called from a WhatsApp welcome flow, a website widget flow, and a voice IVR menu alike.
- Payment reminder: a sub-flow that generates a Razorpay payment link and sends it, called from both a manual "remind this customer" flow and an automated overdue-invoice drip sequence.
- FAQ lookup: a small sub-flow that checks a keyword against common questions before falling back to an AI Reply step, kept identical across multiple bots in the same business.
- Reschedule appointment: one reusable booking-change sub-flow, called from a WhatsApp reminder, a missed-call follow-up, and a voice agent's DTMF menu.
Why it matters as your bot grows
A business that starts with one simple flow rarely stays that way for long: new keywords, new campaigns, new channels all add flows. Without sub-flows, the same order-status or FAQ logic gets copy-pasted into each new flow, and a small change, like a new order status label, has to be made in every single copy. Miss one, and customers start getting inconsistent answers depending on which flow they happened to land in.
Sub-flows fix this by giving that logic exactly one home. Update the sub-flow once, republish it, and every parent flow that calls it picks up the change immediately, which is powerful, but also means a careless edit can affect many flows at once.
This becomes especially valuable once a business runs more than one bot, or the same automation across more than one channel. A business that supports customers on WhatsApp, a website widget and a voice line can keep exactly one order-status sub-flow behind all three, rather than maintaining three separate versions that inevitably drift apart over time as each is tweaked independently.
Common mistakes with sub-flows
- Making it too specific to one parent flow: a sub-flow hard-coded around one particular greeting or product name is not really reusable; keep the wording generic enough to serve every flow that might call it.
- Wrong trigger: forgetting to set the trigger to "Only when another flow calls it" means the sub-flow also tries to start on its own for anyone who happens to message something it would otherwise respond to.
- Mismatched variables: if a parent flow does not pass the variable a sub-flow expects (like an order number), the sub-flow has nothing to look up and fails silently or asks a confusing follow-up question.
- Testing only in isolation: a sub-flow that works perfectly in its own Preview can still break once called from a real parent flow that hands it slightly different data than expected.
Versioning: what changes when you publish a sub-flow
Like any flow, a sub-flow has drafts and a published version, with roll-back available. Because several parent flows may depend on it, treat a published sub-flow with a bit more caution than a one-off flow: use Preview / Try-it to test a draft change before publishing, and consider testing it through at least one real parent flow, not only in isolation, since the variables a sub-flow expects to receive have to match what each parent actually sends it.
| Regular flow | Sub-flow | |
|---|---|---|
| Trigger | New conversation, keyword, group, call, etc. | Only when another flow calls it |
| Starts on its own | Yes | No |
| Typical use | The main conversation a customer has | A reusable piece several flows share |
Building one on Convo360
On Convo360, in the Flow Builder, create a new flow, set its trigger to "Only when another flow calls it", and build the reusable steps as normal, and a sub-flow can use any block, including HTTP request, Google Sheets, Set Variable or a payment link. In any parent flow, drop in a Call Sub-flow step and pick it from the list. Because chat and voice flows are built in the same Flow Builder, the same sub-flow structure works for both a WhatsApp conversation and a voice call, keeping your order-status or payment logic identical across channels, a genuine advantage for a business running the same enquiries through more than one channel at once.
Example conversation
Build a reusable sub-flow
Start free in minutes — no code, no credit card. Bring your own AI keys and pay no per-message markup.
Frequently asked questions
Can a sub-flow call another sub-flow?
Yes, sub-flows can nest, calling into another sub-flow for a smaller shared piece. Keep the chain shallow and easy to follow, since deeply nested sub-flows become harder to test and debug.
Do sub-flows work on voice calls, not just chat?
Yes. Since Convo360 uses the same flow builder for chat and voice, a sub-flow built for order status or payment reminders can be called from both a WhatsApp flow and a voice agent's call flow.
What happens if I edit a sub-flow that several flows already use?
The change applies everywhere the sub-flow is called, the moment you publish it. Test the change with Preview / Try-it first, since a mistake here affects every parent flow at once, not just one.
Can a sub-flow pass information back to the flow that called it?
Yes, using a Flow Output step or shared variables, a sub-flow can return results — such as an order status or a calculated total — back to the parent flow to use in its own next steps.
Why would I use a sub-flow instead of just copying the same steps?
Copying steps means every copy has to be updated separately when something changes, and it is easy to miss one. A sub-flow keeps that logic in exactly one place, so updates are instant and consistent everywhere it is used.
Related reading
Available across India — see WhatsApp & AI calling automation by state and city.