Skip to main content

Multi-Step Campaigns & Branching Logic

Build multi-step DM campaigns in Inrō with delays, questions, conditions, A/B tests, and AI for outreach that adapts to each contact.

A campaign doesn't have to be a single message. You can build a flow that adapts to how contacts respond: send a message, wait, branch on the reply, and follow up differently depending on the path each contact takes.

The flow builder in campaigns is the same one used for scenarios. The same actions are available, the same branching applies, and metrics are tracked at every step. So this article focuses on the patterns that work well for a broadcast; for how the canvas itself works, see The Flow Builder: Visual Editor Tips & Tricks.

A multi-step campaign flow with a message, a delay, and a branch in the builder.

How steps connect

When you add a step, it connects below the previous one with an arrow. Branching actions (like a question or a condition) create multiple paths, and each path continues on its own with its own steps.

Click Add a step at the end of any branch to keep building. There's no limit on how many steps you add or how deeply you nest branches.

Useful step combinations

These patterns cover most campaigns. Each uses standard actions, so the action references have the exact options:

  • Message + delay + follow-up. The simplest sequence: send a message, add a Wait step (say, one day), then send a follow-up. Good for nurtures and drip-style campaigns that space messages out.

  • Message with button + a branch per choice. Add a Send message with button step with two or three options. The contact taps one, and the campaign continues down the matching branch. Good for simple qualification ("Which best describes you?") or preference capture.

  • Ask a question + save the reply. Use Ask a question and save the answer to a contact property. You collect data and steer the flow on the same step. See Ask a Question & Wait for Reply.

  • Conversion link + non-clicker follow-up. A Conversion link step branches on whether the contact clicked, so you can nudge the people who saw the message but didn't act. See Conversion Actions: Links, Payments, Bookings & Surveys.

  • Wait for reply + keyword branches. Add a Wait for reply step after your opener, define keyword branches (like "yes," "no," "more info") plus a catch-all and a timeout branch. This turns a campaign into a two-way conversation without the AI Agent.

The "Interrupt when someone replies" toggle

At the top of the builder, Interrupt when someone replies controls what happens when a contact responds partway through. When it's on, the campaign stops for that contact the moment they reply, even if they haven't reached the end.

Turn it on for conversational campaigns, where a reply means the contact is engaged and should be handled directly. Turn it off for delivery-focused sequences (like a multi-day drip) where every step should still go out.

The Interrupt when someone replies toggle above the campaign canvas.

There's also an option to hand a replying contact straight to a scenario, so a reply can kick off a tailored automation. That handoff is set through the API rather than the builder; see Build and Update Automations Programmatically via API & MCP.

Conditions and A/B testing

Two logic steps let one campaign treat different contacts differently:

  • Condition branches on contact data: whether they're in a folder, whether a property matches a value, or whether they replied earlier. Add one mid-flow to send different messages to different contact types in the same campaign.

  • A/B test splits contacts randomly between two paths by a percentage. Use it to test two messages, offers, or CTAs against each other and compare them in the results.

Both work exactly as they do in scenarios. See Flow Control: Conditions, Delays, A/B Testing & Filters.

Personalising with AI

AI actions make a broadcast feel like a personal DM. They behave identically to their scenario versions, so Adding AI to Your Scenarios and AI Smart Actions in Scenarios cover the mechanics. In a campaign, these are the ones to reach for:

  • AI Agent message is the most useful. You give the AI a specific instruction, and it writes a unique message for each contact using their conversation history and saved properties. Seed the instruction with a variable like {{contact.name}} for a sharper result. See Variables & Personalisation Guide.

  • AI Agent auto-DM is the lighter version: no instruction, it generates a contextual message from your global AI Agent settings. Good for a warm follow-up step.

  • AI-detected condition branches on context, like "this contact is interested in buying," so you can route people based on what you already know.

  • Hand over to AI Agent works well as a final step: once your broadcast gets a reply, the agent takes the conversation from there.

⚠️ AI-detected conditions aren't always right. Don't use one where a wrong branch causes a real problem (like charging the wrong price or promising the wrong thing).

Tracking a multi-step campaign

Every step's reach is counted and shown on the flow in the results view, so you can see exactly where contacts drop off between steps. See Campaign Metrics & Performance Tracking.

🐾 Netsuke's Tips

  • Every branch needs an ending. Before sending, trace each path to its last step. A missing follow-up on the "no reply" branch is one of the most common mistakes.

  • Delays count from when the contact reaches that step, not from when the campaign launched. A one-day wait after step 3 means one day after that contact finishes step 3.

  • Multi-step campaigns work best when the first step gives a real reason to reply. A question or a clear offer gets more engagement than a passive announcement.

  • For a conversion-link follow-up, give people enough time before you nudge non-clickers (three to five days suits most audiences) so you don't chase someone who hasn't opened the DM yet.

What's next?

When your flow is built, see Scheduling, Sending & Managing Campaigns to test and send it, or Campaign Metrics & Performance Tracking to read the results after it goes out.

Did this answer your question?