Conversation Flows

Conversation flows are the automation backbone of RapiDesq. Using the visual flow builder, you design step-by-step interaction sequences that greet contacts, gather information, integrate with external systems, hand conversations to AI bots, and route to the right team — all without writing code.

Overview

A conversation flow is a directed graph of steps (also called nodes) that defines what happens when a contact starts an interaction. Each step performs a specific action — displaying a message, asking a question, calling an API, running a bot conversation, or routing to a team — and then passes control to the next step based on its configuration.

Flows are created and edited in the visual flow builder, a drag-and-drop canvas where you place nodes, configure their properties, and draw connections between them. The builder gives you a clear, visual representation of every path a conversation can take.

Flows connect to your customer-facing channels. When you assign a flow to a chat widget, email channel, or web form, it runs automatically whenever a new conversation arrives on that channel. This means you design the automation once, then deploy it to any channel with a single configuration change.

The flow builder's node palette covers six categories — messages, media, logic, routing, integrations, and AI — with nearly twenty node types in total. Whether you need a simple greeting-and-route sequence or a sophisticated multi-branch automation with API lookups and an AI bot up front, the flow builder has you covered.

Accessing the Flow Builder

To create or edit a conversation flow:

  1. Navigate to Admin > Conversation Flows in the left-hand menu.
  2. You will see a list of all your flows, showing each flow's name, assigned channel, and published status.
  3. Click Create Flow to start a new flow, or click on an existing flow's name to open it for editing.
  4. The visual flow builder canvas opens. From here you can:
    • Drag new nodes from the node palette onto the canvas.
    • Click a node to open its configuration panel on the right.
    • Draw connections between nodes by dragging from one node's output port to another node's input port.
    • Delete nodes or connections by selecting them and pressing the delete key.
  5. Click Save to save your changes as a draft, or Publish to make the flow live.
The visual flow builder canvas with a welcome message connected to an AI assistant step and an end step The flow builder: drag steps from the palette on the left, connect them on the canvas, then save and publish.
Note You need the Manage Conversation Flows permission to create, edit, or publish flows. Contact your account administrator if you do not have access.

Node Types Reference

The node palette is organized into the same categories you see in the builder: Messages, Media, Logic, Routing, Integrations, and AI. Combine them to build exactly the interaction you need.

Send Message

Displays a text message to the contact. No response is expected or collected — the flow immediately proceeds to the next connected step.

When to use it: Greetings, status updates, informational messages, farewell messages, or any point where you need to communicate something to the contact without waiting for a reply.

Configuration:

Tip Use Send Message nodes liberally to keep the contact informed. Letting a contact know what is happening (e.g., "Let me look that up for you...") creates a more natural conversational experience.

Ask Question

Prompts the contact with a question and waits for their response. The contact's answer is stored in a named variable that can be referenced by any subsequent step in the flow.

When to use it: Collecting a single piece of information such as a name, order number, issue description, or a selection from a list of options.

Configuration:

Collect Information

Displays one of your forms inline within the chat interface to collect multiple pieces of structured data at once, with validation, directly inside the conversation.

When to use it: Gathering several related fields at once — such as name, email, and a description of the issue — rather than asking for each piece one at a time. This is faster for the contact and produces cleaner, validated data.

Configuration:

Note The form renders inline in the chat window. The contact fills it out and submits without leaving the conversation; validation errors are shown inline for correction before resubmitting.

Send Image

Sends an image to the contact, with an optional caption.

When to use it: Showing rather than telling — a screenshot of where to find a setting, a product photo, a diagram.

Send File

Sends a file attachment to the contact, with an optional caption.

When to use it: Delivering documents during the conversation — a PDF guide, a form to fill out, a price list.

Conditional Branch

Evaluates one or more conditions against collected data and flow variables, and routes the conversation down the appropriate path. Each condition creates a separate output branch, functioning as an if/else if/else decision tree.

When to use it: Routing the conversation differently based on contact responses, API results, or any other variable data. This is the primary decision-making node in the flow builder.

Configuration:

Output: One branch per condition, plus a default branch. The flow follows the first condition that evaluates to true.

Schedule Condition

Branches the flow based on whether the current time falls within one of your business-hours schedules. This node has two output paths: one for during hours and one for outside hours.

When to use it: Providing different experiences based on time of day. During business hours you might route directly to a team, while after hours you might collect the contact's information and create a ticket for follow-up.

Configuration:

Wait / Delay

Pauses the flow for a configured duration before continuing to the next step.

When to use it: Pacing a sequence of messages, giving an external process time to complete, or spacing a follow-up after an earlier step.

Configuration:

Loop

Repeats a sequence of steps while a condition holds, with a hard iteration cap.

When to use it: Re-prompting until a valid answer is collected, retrying a lookup, or iterating a sub-sequence a bounded number of times.

Configuration:

Auto Tag

Tags the ticket automatically based on the conversation content.

When to use it: Consistent categorization for reporting and routing without asking users to tag manually.

Configuration:

Set Variable

Stores one or more values in the flow's execution context. Values can be literals or built from other variables. Once set, variables are available to all subsequent steps.

When to use it: Preparing data for later use — setting a default value, combining multiple variables into a single formatted string, or normalizing a value before a condition evaluates it.

Configuration:

Subflow

Executes another flow as a nested subroutine. The parent flow pauses, the referenced subflow runs, and then the parent flow resumes.

When to use it: Reusing common sequences across multiple flows. If several flows share the same contact-information collection sequence or after-hours handling, extract it into its own flow and reference it with a Subflow node.

Configuration:

Tip Subflows are a powerful way to keep your flows maintainable. Rather than duplicating the same sequence of steps in multiple flows, extract it into a subflow and reference it everywhere it is needed. When you update the subflow, every parent flow benefits.

Route to Team

Transfers the conversation to a specific team's user queue. Once this step executes, the conversation enters the team's queue and the routing engine uses the team's configured user selection strategy to assign an available user.

When to use it: Any time the conversation needs to be handed off to a live person. This is typically the terminal step for a flow path, after information has been collected and the appropriate team has been determined.

Configuration:

Output: The conversation is placed in the selected team's queue. All data collected during the flow (variables, conversation history, form submissions) is passed to the user for context.

Tip Every flow should have at least one Route to Team node as a fallback. Even the most sophisticated automation cannot handle every scenario — always provide a path to a person.

Update Ticket

Modifies the ticket during flow execution, enriching it with data collected during the conversation before it reaches a user.

When to use it: Setting ticket priority based on the contact's issue category, adding tags for tracking, setting the subject, or attaching a note summarizing what the flow collected.

Configuration:

Search Tickets

Runs a query against your existing tickets and exposes the results as flow variables. It does one thing — find matching tickets — so you can branch on the outcome with a Conditional Branch and then update, link, or create as the situation calls for.

When to use it: Deduplicating intake. Before creating a fresh ticket, check whether the same issue is already on record — an open report from the same contact, an active outage umbrella, or a previously logged defect with a similar description — so a new report can be appended to the existing ticket instead of spawning a duplicate.

Match modes:

Configuration:

Output: A single exit. The step writes the results to flow variables — by default ticketFound (true when at least one match meets the threshold), foundTicketId (the top match), foundTicketCount, foundTicketIds (every match), and topMatchScore. Pair it with a Conditional Branch on {{ticketFound}} to fork the found and not-found paths.

Tip Search Tickets is the front half of the update-or-create pattern: search for a match, branch on ticketFound, then Update Ticket the existing record on the found path (or Link to Tracking Ticket for an outage) and create a new one otherwise. The Smart Ticket Intake wizard preset wires this whole branch for you — see Example 5.

Links the current ticket to an umbrella (tracking) ticket, so a new report joins an open outage or release instead of spawning a duplicate. When the umbrella is later resolved, the linked report is resolved and its customer notified along with every other child — without a user ever touching it.

When to use it: Anti-duplicate intake during an active outage or release. After a search step has found an open umbrella, this step attaches the in-flight conversation's ticket to it.

Configuration:

Output: A single exit. This is a side-effect step — in Test mode it is simulated and no real link is created. Linking is idempotent, so re-running the step on an already-linked ticket is a no-op.

Notify User

Sends an internal notification to specific users or a role within RapiDesq. This does not send a message to the contact — it notifies your internal team members.

When to use it: Alerting supervisors about high-priority conversations, notifying specific users about escalations, or sending internal updates when certain flow conditions are met.

Configuration:

Output: The notification is sent. The flow continues to the next step without waiting for any response.

End Flow

Explicitly terminates the flow execution. The conversation ends from the automation's perspective.

When to use it: When the flow has fully resolved the contact's issue and no further action is needed, or to explicitly mark the end of a branch that should not route to a user.

Configuration:

Note Every path through a flow should terminate at either a Route to Team node or an End Flow node. Paths that do not reach a terminal node will result in the conversation being left in an undefined state.

API Call

Makes an HTTP request to an external REST API and maps the response into flow variables. This node enables your flows to interact with external systems — looking up customer records, checking order statuses, verifying account details, or triggering actions in other platforms.

When to use it: Any time the flow needs data from or needs to trigger an action in an external system. Common use cases include CRM lookups, order management queries, identity verification, and webhook triggers.

Configuration:

Security Note Use stored credentials for authentication rather than embedding tokens in URLs or the flow definition, and grant external API tokens the minimum required permissions.

See the External Integrations section below for detailed guidance on building API Call nodes.

Generate Ticket Description

Uses AI to generate a structured ticket description from the conversation history. Chat conversations are often messy and informal — this node transforms them into clean, structured summaries that agents can quickly understand.

When to use it: Before routing to a team, so the user receives a clear, well-organized summary rather than having to read through the entire conversation transcript.

Configuration:

This node consumes AI credits.

Bot Conversation

Hands the conversation to one of your AI bots for free-form, natural language dialogue. The bot engages in a back-and-forth conversation with the contact, answering from its connected knowledge bases, until it resolves the issue or its escalation rules trigger.

When to use it: Handling open-ended customer inquiries, answering frequently asked questions, troubleshooting common issues, or providing a first line of support before routing to a person.

Configuration:

Output: The flow advances down the completion or escalation path when the bot conversation ends. The full conversation history is available to subsequent steps and to any agent who receives the conversation. Bot turns consume AI credits.

Flow Variables & Data

Flow variables are the mechanism for passing data between steps. Every flow execution maintains a context — a set of named variables that any step can read from or write to.

How Variables Are Created

Variables are created by several node types:

Referencing Variables

Once a variable is set, it can be referenced in any subsequent step using the {{variableName}} interpolation syntax. This works in:

Variable Scope and Persistence

Variables are scoped to the flow execution. They persist for the lifetime of the conversation's flow execution, which means:

Tip Use clear, descriptive variable names like customerEmail, issueCategory, or orderLookupResult rather than generic names like data1 or response. Descriptive names make your flow easier to understand and maintain.

Conditional Logic

The Conditional Branch node is the primary decision-making mechanism in the flow builder. It evaluates conditions against flow variables and directs the conversation down different paths based on the results.

Condition Structure

Each Conditional Branch node contains one or more conditions. Conditions are evaluated in order from top to bottom — the flow follows the first condition that evaluates to true. If no condition matches, the flow follows the default (else) path.

Each condition is built in the expression builder from three parts:

  1. Variable — The flow variable to evaluate.
  2. Operator — How to compare the variable's value.
  3. Value — The value to compare against (not required for the "is empty" and "is not empty" operators).

Comparison Operators

OperatorDescriptionExample
equalsExact matchissueCategory equals billing
not equalsDoes not matchcustomerTier not equals free
greater thanNumeric comparisonorderTotal greater than 100
greater than or equalNumeric comparison, inclusiveitemCount greater than or equal 5
less thanNumeric comparisonwaitTime less than 5
less than or equalNumeric comparison, inclusiveattempts less than or equal 3
containsVariable value includes the specified textissueDescription contains refund
starts withVariable value begins with the specified textorderNumber starts with ORD-
ends withVariable value ends with the specified textemail ends with @company.com
is emptyVariable has no value or is blankcustomerEmail is empty
is not emptyVariable has a valueorderLookup.trackingNumber is not empty

Creating Multiple Paths

A single Conditional Branch node can have many conditions, each leading to a different path. For example, a branch evaluating issueCategory might have:

You can also chain multiple Conditional Branch nodes in sequence to build complex, multi-level decision trees. For example, first branch on issue category, then within the technical support branch, add another condition node to branch on severity level.

Important Always configure a default (else) path on every Conditional Branch node. If no conditions match and there is no default path, the flow will have nowhere to go, leaving the contact stuck.

AI in Flows

Two nodes in the AI category bring your platform-managed AI into flows. Both consume AI credits.

Free-Form AI Dialogue (Bot Conversation)

The Bot Conversation node hands full conversational control to an AI bot. Unlike the structured Ask Question node, the bot engages in open-ended, multi-turn dialogue with the contact. Key characteristics:

Automated Ticket Descriptions (Generate Ticket Description)

Chat conversations are often informal, fragmented, and filled with back-and-forth. The Generate Ticket Description node transforms the raw conversation history into a clean, structured ticket description: a concise summary of the issue, key details from the conversation, and the context a user needs to resolve it quickly.

This is particularly valuable for after-hours flows where a ticket is created from the conversation but no user is immediately available — the user who picks up the ticket the next day gets a clear, actionable description rather than a raw chat transcript.

External Integrations

The API Call node connects your flows to any external system that exposes a REST API. This enables real-time data lookups and actions within the flow.

Configuring an API Call

  1. Set the URL — Enter the full endpoint URL. Use variable interpolation to include dynamic values: https://api.yourcrm.com/contacts?email={{contactEmail}}.
  2. Choose the HTTP method — GET for retrieving data, POST for creating or triggering actions, PUT/PATCH for updating records.
  3. Select a stored credential — Authentication is handled by a credential stored once and referenced by the node, so secrets never live inside the flow definition.
  4. Add headers and a request body (for POST/PUT/PATCH) — Write JSON with variable interpolation:
    {
      "customerEmail": "{{contactEmail}}",
      "issueDescription": "{{issueDescription}}",
      "priority": "{{priority}}"
    }
  5. Map the response — Define response mappings that pull the fields you need from the response into named flow variables (e.g., map the order's status into orderStatus), and name an error variable for the failure path.

Using API Responses

After an API Call executes, the mapped variables are available like any other flow variable. Use them in Send Message nodes to display personalized information, in Conditional Branch nodes to make routing decisions, or in Update Ticket nodes to enrich the ticket.

Error Handling

API calls can fail for many reasons — the external service may be down, the request may be malformed, or authentication may expire. The node retries up to its configured retry limit; beyond that, design your flows to handle failure gracefully:

Common Use Cases

Assigning Flows to Channels

A flow only runs when it is assigned to a channel. Flows can be assigned to three types of channels:

Only connected flows count toward your plan Your plan's flow allowance counts only flows that are actively connected to a channel — a chat widget, web form, or email route. Subflows, overflow and after-hours flows, and unconnected drafts don't count, so you're free to break shared logic into reusable subflows and keep as many drafts as you like without using up your allowance. You're licensed for what you put into production, not for how you organize it.

Chat Widget

Each chat widget can have one flow assigned to it. When a contact starts a new conversation through the widget, the assigned flow runs automatically.

To assign a flow to a chat widget:

  1. Navigate to Admin > Chat Widgets and select the widget to configure.
  2. In the widget settings, find the Conversation Flow option.
  3. Select the published flow to assign.
  4. Save the widget configuration.

See the Chat Widget Setup guide for full details on widget configuration.

Email Channel

Flows can be assigned to email channel routing to automate the handling of incoming emails. When a new email arrives, the assigned flow processes it and routes to the appropriate team.

See the Email Channel guide for configuration details.

Web Form

Web form submissions can trigger a flow to handle the incoming request. The form data is available as variables within the flow, enabling routing and processing based on what the contact submitted.

See the Web Forms guide for configuration details.

Hot-Swapping Flows

One of the key benefits of channel-based flow assignment is that you can change the active flow without modifying any embed code or channel configuration beyond the flow selection. This means you can:

Note Changing the assigned flow on a channel takes effect immediately for new conversations. Conversations that are already in progress continue using the flow they started with.

Versioning & Publishing

RapiDesq uses a draft/published model for flow versioning, enabling you to safely iterate on flows without disrupting live conversations.

Draft vs. Published

Safely Editing Live Flows

To make changes to a live flow:

  1. Open the flow in the builder. Your changes are automatically saved as a draft.
  2. Edit and test your changes in draft mode.
  3. When satisfied, click Publish to make the new version live.

Until you click Publish, the currently published version continues to serve all new conversations.

In-Progress Conversations

When you publish a new version of a flow, conversations that are already in progress are not affected. They continue running on the version that was active when they started. Only new conversations use the newly published version. This ensures that contacts are never disrupted mid-conversation by flow changes.

Tip Use the draft/published model to your advantage. Make and test changes in draft mode during business hours, then publish during a quiet period to minimize any risk of disruption.

Building Common Flows

The following examples walk through practical flows that address common support scenarios. Use them as starting points and customize them for your needs.

Example 1: Basic Support Triage

This flow greets the contact, asks about their issue category, and routes them to the appropriate team.

  1. Send Message — "Welcome to RapiDesq support. We're here to help."
  2. Ask Question — "What do you need help with?" with choices: Billing, Technical Support, Account Management, Other. Store the response in issueCategory.
  3. Conditional Branch — Evaluate issueCategory:
    • issueCategory equals Billing → Route to Team (Billing)
    • issueCategory equals Technical Support → Route to Team (Engineering Support)
    • issueCategory equals Account Management → Route to Team (Account Management)
    • Default → Route to Team (General Support)

This simple pattern ensures that every contact reaches the right team without requiring users to manually triage and transfer conversations.

Example 2: After-Hours Handling

This flow provides different experiences depending on whether the contact reaches out during or outside business hours.

  1. Send Message — "Hello! Thanks for contacting us."
  2. Schedule Condition — Check the business-hours schedule:
    • During hours path:
      1. Ask Question — "What can we help you with?" (store in issueDescription)
      2. Route to Team — Route to General Support
    • Outside hours path:
      1. Send Message — "Our team is currently offline. We'll create a ticket and follow up with you as soon as possible."
      2. Collect Information — Present a contact form (name, email, issue description) and map the fields to contactName, contactEmail, issueDescription
      3. Generate Ticket Description — Produce a structured description for the ticket
      4. Update Ticket — Set priority to Normal, add tag after-hours
      5. Send Message — "Thank you, {{contactName}}. We've created a ticket and will follow up at {{contactEmail}} during business hours."
      6. End Flow

This pattern ensures after-hours contacts still have a good experience and that their issues are captured for follow-up.

Example 3: AI-First Intake

This flow lets an AI bot handle what it can and prepares clean, categorized tickets for everything it can't.

  1. Send Message — "Hi there! I'm an AI assistant and I'll do my best to help you. If I can't resolve your issue, I'll connect you with a human agent."
  2. Bot Conversation — The AI bot engages in free-form dialogue, answering from its knowledge bases. Its escalation rules (keywords, intents, sentiment, low confidence) decide when it's done.
    • On complete → End Flow — the bot resolved the issue.
    • On escalate → continue below.
  3. Auto Tag — Tag the ticket based on the conversation content, restricted to your standard category tags.
  4. Generate Ticket Description — Turn the bot conversation into a clean, structured ticket description.
  5. Route to Team — Route to General Support (or chain a Conditional Branch first to route by collected data).

With this pattern, the AI bot handles what it can, and conversations that need human attention arrive at the right team tagged and summarized — saving agents significant triage time.

Example 4: Anti-Duplicate Outage / Release Intake

During an active outage or release, many customers report the same problem. Instead of spawning hundreds of duplicate tickets, this flow links each new report to the open umbrella ticket so they all resolve and notify together the moment the umbrella is resolved.

  1. Search Tickets — look for an open Outage or Release umbrella matching the reported issue. Store the result in foundTicketId.
  2. Conditional Branch — evaluate whether an open umbrella was found:
    • Found → Link to Tracking Ticket — link this conversation's ticket to {{foundTicketId}}, then send a reassuring message and End Flow. No user work is needed; the customer is notified automatically when the umbrella resolves.
    • Not found → Create Ticket / Route to Team — handle it as a normal new report.

The Smart Ticket Intake wizard preset can generate this branch for you as an editable graph, so you don't have to wire it by hand.

Example 5: Smart Ticket Intake (Defect Reconciliation)

When several customers report the same defect over time, you usually want every new report to land on the one ticket your team is already tracking — not a fresh duplicate each time. This flow collects a description, searches for a ticket about the same problem, and either appends the new report to it (reopening it if it was already closed) or creates a new ticket when nothing matches. This is the update-or-create deduplication pattern.

  1. Collect Information — Present a form that captures the issue, mapping the description into a variable such as description.
  2. Search Tickets — Use Text similarity mode with the description query set to {{collectedData.description}}, scoped and thresholded so only a genuinely similar ticket counts as a match. The result lands in ticketFound and foundTicketId.
  3. Conditional Branch — Evaluate {{ticketFound}}:
    • Found → Update Ticket — target the matched ticket with {{foundTicketId}}, append the new report to it, and reopen it if it had been resolved or closed so the follow-up isn't lost.
    • Not found → Create Ticket / Route to Team — handle it as a normal new report.

The Smart Ticket Intake wizard preset builds exactly this graph for you. In the wizard's Reconcile with existing tickets section you choose the match mode, the scope, which collected field to match on, the match threshold, and whether a closed match should reopen — then open the result in the editor to fine-tune any step by hand.

Tips & Best Practices

Design Principles

Data Collection

AI Usage

Testing

Monitoring and Optimization

Tip The best flows evolve over time. Launch with a simple version, monitor its performance, gather feedback from both contacts and users, and improve it incrementally. A flow that works reliably is more valuable than a sophisticated flow that has untested branches.