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, leverage AI for intelligent dialogue and analysis, and route conversations 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 AI analysis, 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 engine supports over 15 node types spanning messaging, data collection, routing, AI, external integrations, conditional logic, and ticket management. Whether you need a simple greeting-and-route sequence or a sophisticated multi-branch automation with API lookups and AI classification, 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 flows for your tenant, 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.
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 flow builder provides a rich set of node types organized into functional categories. Each node type is designed for a specific purpose — 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:

Output: None. The flow advances to the next step automatically.

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:

Output: The contact's response is stored in the configured variable. The flow waits until the contact responds before advancing.

Collect Information

Displays an inline form within the chat interface to collect multiple pieces of structured data at once. The form uses the same field types available in web forms, providing a familiar and validated data collection experience 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:

Output: Each field's value is stored in its configured variable. The flow waits for the contact to complete and submit the form.

Note Collect Information forms are rendered inline within the chat window. The contact fills out and submits the form without leaving the conversation. Validation errors are shown inline, and the contact can correct them before resubmitting.

Bot Conversation

Hands the conversation to an AI bot for free-form, natural language dialogue. The bot engages in a back-and-forth conversation with the contact, understanding their questions and providing relevant responses. The bot continues the dialogue until it determines the issue is resolved or needs escalation to a human agent.

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 human agent.

Configuration:

Output: The flow advances to the next step when the bot conversation ends (either resolved or escalated). The full conversation history is available to subsequent steps and to any agent who receives the conversation.

Route to Team

Transfers the conversation to a specific team's agent queue. Once this step executes, the conversation enters the team's queue and the routing engine uses the team's configured agent selection strategy (round-robin, least active, etc.) to assign an available agent.

When to use it: Any time the conversation needs to be handed off to a live agent. 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 agent 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 human agent.

Schedule Condition

Branches the flow based on whether the current time falls within configured business hours. This node has two output paths: one for when the interaction occurs during business hours, and one for outside business 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:

Output: Two branches:

Conditional Branch

Evaluates one or more conditions against collected data, flow variables, or AI classifications, 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, AI classifications, 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.

See the Conditional Logic section below for a detailed guide on building effective conditions.

Set Variable

Stores a value in the flow's execution context. The value can be a literal string, a number, a computed expression, or a reference to another variable. Once set, the variable is 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, storing a computed result, or normalizing a value before it is evaluated by a condition.

Configuration:

Output: The variable is available for use in all subsequent steps via {{variableName}}.

Subflow

Executes another flow as a nested subroutine. The parent flow pauses, the referenced subflow runs to completion, and then the parent flow resumes from the step after the Subflow node.

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

Configuration:

Output: Variables set by the subflow are available in the parent flow after the subflow completes. The parent flow resumes execution from the next connected step.

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.

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 when you want to explicitly mark the end of a branch that should not route to an agent (e.g., the contact chose to cancel their request).

Configuration: None.

Output: The flow stops executing. No further steps run on this path.

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 stores the response data in a flow variable. 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:

Output: The API response body is parsed and stored in the configured variable. Individual fields from the response can be accessed using dot notation in subsequent steps (e.g., {{apiResponse.status}}, {{apiResponse.customer.name}}).

Security Note API credentials and endpoint URLs are stored securely. Ensure that any external APIs you connect to are accessible from your RapiDesq environment and that authentication tokens have the minimum required permissions. Never include sensitive credentials directly in the URL — use headers for authentication.

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

AI Analyze

Runs AI analysis on conversation data. This node can classify the contact's intent, extract structured entities from free-text input, summarize the conversation, or make routing recommendations based on the conversation content.

When to use it: Understanding unstructured contact input without requiring the contact to select from a predefined list. For example, analyzing a contact's description to determine their issue category, extracting an order number from a natural-language message, or assessing the urgency of a request.

Configuration:

Output: The AI analysis result is stored in the configured variable and can be used by subsequent Conditional Branch nodes, Send Message nodes, or any other step that references variables.

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 or creating a ticket, to ensure the agent receives a clear, well-organized summary rather than having to read through the entire conversation transcript.

Configuration:

Output: A structured ticket description stored in the configured variable. The description typically includes a summary of the issue, key details extracted from the conversation, and any relevant context.

Notify User

Sends an internal notification to specific users or roles 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 to the notification.

Update Ticket

Modifies ticket fields during flow execution. This allows the flow to enrich the ticket with data collected during the conversation before it reaches an agent.

When to use it: Setting ticket priority based on the contact's issue category, adding tags for tracking, updating the status, or populating custom fields with information collected during the flow.

Configuration:

Output: The ticket is updated. The flow continues to the next step.

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:

For API Call response variables that contain structured JSON, use dot notation to access nested fields: {{orderLookup.status}}, {{orderLookup.shipping.trackingNumber}}, {{customerData.account.tier}}.

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 consists of 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 is empty and is not empty operators).

Comparison Operators

OperatorDescriptionExample
equalsExact match (case-insensitive for strings)issueCategory equals billing
not equalsDoes not matchcustomerTier not equals free
containsVariable value includes the specified textissueDescription contains refund
does not containVariable value does not include the specified textissueDescription does not contain urgent
starts withVariable value begins with the specified textorderNumber starts with ORD-
ends withVariable value ends with the specified textemail ends with @company.com
greater thanNumeric comparisonorderTotal greater than 100
less thanNumeric comparisonwaitTime less than 5
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 Capabilities

RapiDesq flows integrate AI at multiple levels, from free-form conversational dialogue to structured analysis and content generation.

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. The bot understands context, asks clarifying questions, and provides answers or guidance.

Key characteristics of bot conversations:

Structured AI Analysis (AI Analyze)

The AI Analyze node applies targeted AI analysis to specific data rather than engaging in dialogue. Use it to:

Automated Ticket Descriptions (Generate Ticket Description)

Chat conversations are often informal, fragmented, and filled with back-and-forth. The Generate Ticket Description node transforms this raw conversation history into a clean, structured ticket description. The generated description typically includes:

This is particularly valuable for after-hours flows where a ticket is created from the conversation but no agent is immediately available — the agent 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 methodGET for retrieving data, POST for creating or triggering actions, PUT/PATCH for updating records.
  3. Add headers — Include authentication headers (Authorization: Bearer {{apiToken}}) and content type headers (Content-Type: application/json).
  4. Set the request body (for POST/PUT/PATCH) — Write JSON with variable interpolation:
    {
      "customerEmail": "{{contactEmail}}",
      "issueDescription": "{{issueDescription}}",
      "priority": "{{priority}}"
    }
  5. Name the response variable — Choose a descriptive name like orderLookup or crmResult. The parsed JSON response body is stored in this variable.

Using API Responses

After an API Call executes, the response body is available as a structured variable. Access individual fields with dot notation:

Use these values 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. Design your flows to handle these scenarios 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:

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 — classifying the content, extracting data, and routing 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 response options: 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 agents 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 business hours (Monday-Friday, 9 AM-6 PM):
    • 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. Business hours are Monday-Friday, 9 AM-6 PM. We'll create a ticket and follow up with you as soon as possible."
      2. Collect Information — Form with fields: Name (TEXT, contactName), Email (EMAIL, contactEmail), Describe your issue (TEXTAREA, issueDescription)
      3. Generate Ticket Description — Generate a structured description (store in ticketDescription)
      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-Assisted Intake

This flow uses AI to handle the initial conversation, then classifies and routes based on what the AI learned.

  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, trying to understand and resolve the contact's issue. Configured to escalate if the issue requires a human or if the contact requests one.
  3. AI Analyze — Classify the conversation intent (store in intentCategory). Extract key entities (store in extractedEntities).
  4. Generate Ticket Description — Create a clean summary of the conversation (store in ticketSummary).
  5. Update Ticket — Set the description to {{ticketSummary}}, add tag based on {{intentCategory}}.
  6. Conditional Branch — Evaluate intentCategory:
    • intentCategory equals billing → Route to Team (Billing)
    • intentCategory equals technical → Route to Team (Engineering Support)
    • intentCategory equals sales → Route to Team (Sales)
    • Default → Route to Team (General Support)

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

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 agents, and improve it incrementally. A flow that works reliably is more valuable than a sophisticated flow that has untested branches.