Conversation Nodes
Conversation nodes handle direct communication between the agent and the user. They send messages, collect input, present choices, and open free-form AI chat. Every journey starts with a Greeting node and uses a combination of these nodes to guide the conversation.
Greeting
The Greeting node is the entry point of every journey. It sends the first message when a conversation starts. Each journey must have exactly one Greeting node.
Configuration
| Property | Type | Description |
|---|---|---|
message | string | The greeting text shown to the user. |
subtitle | string | Optional secondary text displayed below the main message. |
generateWithAI | boolean | When enabled, the AI generates variations of the greeting to keep conversations feeling fresh. |
delay | number | Milliseconds to wait before displaying the message. Simulates typing for a more natural feel. |
delayEnabled | boolean | Whether the typing delay is active. |
variables | string[] | Variables referenced in the message text via double-brace syntax. |
Example use case
A retail agent greets visitors with "Hi there! Looking for something specific, or just browsing?" The subtitle shows the current promotion. With generateWithAI enabled, repeat visitors see slightly different wording each time.
Connection behavior
The Greeting node has a single output. Connect it to the next step in your conversation -- typically a Quick Reply for intent routing or a Message with more context.
Message
The Message node sends a fixed text message from the agent. Use it for announcements, instructions, confirmations, or any time the agent needs to say something without expecting a response.
Configuration
| Property | Type | Description |
|---|---|---|
message | string | The message text. Supports variable interpolation with double-brace syntax. |
subtitle | string | Optional secondary text displayed below the main message. |
generateWithAI | boolean | When enabled, the AI generates natural-sounding variations of the message text. |
delay | number | Milliseconds to wait before displaying the message. |
delayEnabled | boolean | Whether the typing delay is active. |
variables | string[] | Variables referenced in the message text. |
Variable interpolation
Insert dynamic values into your message using double-brace syntax:
Thanks, {{ firstName }}! Your order #{{ orderId }} is confirmed.Variables are populated by upstream Question nodes, Data Collector nodes, Set Variable nodes, or API Call responses.
Example use case
After a Question node collects the user's name, a Message node says "Nice to meet you, {{ name }}! Let me help you find the right product." The delay is set to 800ms so the message appears with a natural typing pause.
Connection behavior
The Message node has a single output. The conversation continues to the connected node immediately after the message is displayed (accounting for any configured delay).
Question
The Question node asks the user something and waits for a typed response. The answer is stored in a variable that subsequent nodes can reference.
Configuration
| Property | Type | Description |
|---|---|---|
question | string | The question text shown to the user. |
variable | string | Name of the variable where the user's answer is stored. |
expectedType | "text" | "email" | "phone" | "number" | The expected input format. Determines validation and keyboard type on mobile. |
validation | string | Custom validation rule or regex pattern applied to the input. |
errorMessage | string | Message shown when the user's input fails validation. |
skipIf | string | A variable name to check. If the variable already has a value, the question is skipped. |
skipIfEnabled | boolean | Whether the skip-if logic is active. |
generateWithAI | boolean | When enabled, the AI generates natural variations of the question text. |
delay | number | Milliseconds to wait before displaying the question. |
Input validation
Set expectedType to enforce format requirements:
- text -- Accepts any input (default).
- email -- Validates email format (e.g.,
user@example.com). - phone -- Validates phone number format.
- number -- Accepts numeric input only.
When validation fails, the agent shows the errorMessage (or a default) and prompts the user to try again.
Skip logic
Enable skipIfEnabled and set skipIf to a variable name. If that variable already has a value (for example, from a previous conversation or auto-fetch after login), the question is skipped entirely and the conversation moves to the next node. This avoids asking users for information you already have.
Example use case
A lead capture flow asks "What's your email address?" with expectedType set to "email" and variable set to "userEmail". The errorMessage is "That doesn't look like a valid email. Could you try again?" Later nodes reference {{ userEmail }} to send a confirmation or look up the account. The skipIf is set to "userEmail" so returning authenticated users skip this step.
Connection behavior
The Question node has a single output. The conversation pauses at this node until the user provides a valid answer (or the question is skipped), then continues to the connected node.
Quick Reply
The Quick Reply node presents clickable option buttons to the user. Each option can route the conversation to a different next node, making this the primary tool for branching flows.
Configuration
| Property | Type | Description |
|---|---|---|
options | array | List of options, each with text (display label), value (stored value), and optional nextNodeId (target node). |
columns | 1 | 2 | Layout of the option buttons. Use 1 column for longer text, 2 columns for short labels. |
triggerGlobally | boolean | When enabled, these options remain accessible from anywhere in the conversation, not just at this node. |
Option routing
Each option in the options array can connect to a different downstream node. This lets you build multi-path flows from a single decision point. For example, a "How can I help?" Quick Reply might offer "Browse products", "Track my order", and "Talk to support" -- each routing to a completely different branch.
If an option does not specify a nextNodeId, the conversation follows the node's default output connection.
Global triggers
When triggerGlobally is enabled, the option buttons stay available throughout the conversation. The user can tap them at any point to jump to the associated branch. This is useful for persistent navigation like "Main menu" or "Start over" that should always be reachable.
Example use case
An e-commerce agent shows a Quick Reply after the greeting with three options: "Shop by category", "Get recommendations", and "Check order status". Each routes to a different sub-flow. The layout uses 2 columns to keep the UI compact.
Connection behavior
The Quick Reply node has one output per option. Each option's nextNodeId determines where that path continues. In the visual editor, you connect each option handle to its target node. The conversation pauses at this node until the user selects an option.
AI Conversation
The AI Conversation node opens a free-form chat session where the AI responds dynamically based on context, knowledge bases, and a guiding prompt. Unlike the structured back-and-forth of Question and Quick Reply nodes, this node lets the user ask anything within the defined scope.
Configuration
| Property | Type | Description |
|---|---|---|
contextPrompt | string | Instructions that guide the AI's behavior during this conversation segment. Acts as a scoped system prompt. |
useLLMKnowledge | boolean | When enabled, the AI retrieves relevant content from the agent's linked knowledge bases (RAG) to inform its responses. |
exitIntents | array | List of intents (each with an intent string) that signal the AI conversation should end and hand off to the next node. |
subNodes | array | Embedded child nodes (e.g., product cards) that the AI can render inline during the conversation. |
Context prompt
The contextPrompt tells the AI what this conversation segment is about and how to behave. For example:
You are a skincare advisor. Help the user find the right products for their skin type
and concerns. Ask about their skin type, main concerns, and budget range. Recommend
products from the catalog. Do not discuss topics outside of skincare.This scopes the AI to a specific domain without hard-coding the exact questions or sequence.
Knowledge base integration
When useLLMKnowledge is enabled, the AI performs semantic search (RAG) against the knowledge bases linked to the agent. This lets it answer questions about your products, policies, FAQs, or any content you have uploaded -- without you needing to anticipate every possible question in the flow.
Exit intents
Exit intents define when the open-ended conversation should end. Each entry is an intent string that the AI watches for. When the user expresses a matching intent, the AI conversation node completes and the flow continues to the next connected node.
Common exit intents include:
"ready_to_purchase"-- User is ready to buy."wants_human_support"-- User asks for a real person."question_answered"-- User's question has been resolved."wants_to_browse"-- User wants to explore on their own.
Without exit intents, the AI conversation continues indefinitely until the user leaves.
Sub-nodes
The subNodes array lets you embed other node types (such as product cards) inside the AI conversation. The AI can render these inline when relevant -- for example, showing a product card when recommending a specific item, without the user having to leave the chat.
Example use case
A travel booking agent uses an AI Conversation node with the context prompt "Help the user plan their trip. Ask about destination preferences, travel dates, budget, and group size." Knowledge bases contain destination guides and hotel information. Exit intents include "ready_to_book" and "wants_human_agent". When the user says "I'd like to book this one", the exit intent fires and the flow continues to a data collection sequence for booking details.
Connection behavior
The AI Conversation node has a single output. The conversation stays inside this node until an exit intent is triggered, then continues to the connected node. If no exit intents are configured, the conversation remains in the AI chat indefinitely.