Skip to content

Conversation flows

10 min read

Open Autoreply → Flow.

What this page is for

A flow is a visual conversation tree: send messages, wait for replies, branch on conditions, call external APIs, store variables, and add delays. Flows run without an agent online — ideal for onboarding wizards, support routing, and guided ordering.

Each device handles inbound messages in one mode. For flows to run, set On incoming message to Flow on the device under Channel → WhatsApp → Devices or Channel → Telegram → Devices.

Each device can be linked to only one flow at a time — not multiple flows on the same line or bot. One flow may still link to many devices. The device picker hides lines and bots that are already linked to another flow; to move a device, open that other flow, remove the device, then link it here.

Flow list — search, Channels column, and node count

Sample data shown.


Flow list

Column / controlWhat it does
New flowOpens a blank canvas editor.
Search flows…Filters by name (minimum 3 characters).
NameFlow title.
NodesNumber of steps on the canvas.
ChannelsClick N linked to see WhatsApp lines or Telegram bots attached to this flow.
ActionsEdit flow (opens the editor page) or Delete flow.

Create a flow

  1. Click New flow.
  2. Open Settings (left panel) — enter a Name, set Session duration, and link WhatsApp or Telegram devices.
  3. Click + (bottom-right of the canvas) to open the node palette — add Start is already on the canvas for new flows.
  4. Add nodes (Text, Response, Condition, etc.) and connect output dot → input dot.
  5. Click each node to edit its content (message text, HTTP URL, condition branches, and so on).
  6. Click Run to simulate the path with a test message before going live.
  7. Click Save (or Create).

Flow editor

The editor opens on its own page when you create or edit a flow. By default the Settings panel is hidden so the canvas uses the full width — click Settings in the header to open name, session, and device options.

Flow editor — canvas with connected nodes, zoom toolbar, and Run control

Sample data shown.

ControlWhat it does
Settings / Hide settingsShow or hide the left panel (name, session, devices).
BackReturn to the flow list.
Save / CreatePersist the flow to your account.

Settings panel

Click Settings to open the left panel.

Flow settings — name, session duration, and linked devices

Sample data shown.

FieldWhat it does
NameFlow title — shown in the list.
Session — Duration / UnitIdle timeout for this conversation (for example 1 day). If the contact is silent longer than this, the next message starts the flow from Start again.
Device pickerLink one or more WhatsApp, Telegram, or WABA devices. Same pattern as Autoreply — search, pick rows, or use All / All filtered. Each device can belong to one flow only; devices already on another flow are not shown until you unlink them there.

Canvas toolbar

ControlWhat it does
/ +Zoom out and in.
FitFrame all nodes in view.
TidyAuto-arrange nodes on the grid.

Canvas interactions:

  • Pan — drag the dotted background.
  • Zoom — Ctrl/Cmd + scroll.
  • Connect — drag from an output dot (right of a node) to an input dot (left of another node).
  • Edit node — click the pen icon on hover, or click the node card.
  • Delete connection — hover an edge and click the × button.

Every flow needs a Start node — execution begins there when a message arrives.

Add node palette

Click + (next to Run) to open the palette.

Add node palette — Message, Response, Logic, Data, and Action groups including Aksita AI

Sample data shown.

GroupNodes
MessageText, Media
ResponseResponse — pause until the user replies
LogicCondition, Delay
DataStore, Parse, Build, Cast, Collect, Loop
ActionHTTP — call an external URL · Aksita AI — chat via Aksita (success / error)

Legacy API and Webhook nodes may appear on older flows — use HTTP for new work.

Edit a node (example: Text)

Click a node’s pen icon to open its editor.

Text node editor — name and message fields

Sample data shown.

Type / in text fields to insert flow variables such as {{message}}, {{sender}}, {{http_body_success}}, or Store names. Server tokens like [[date-dd-mm-yyyy]] come from Resources → Variables.

NodeMain settings
TextMessage body.
MediaFile URL and optional Caption.
ResponseNo extra fields — waits for the next inbound message (available as {{message}} downstream).
ConditionIf / Else if branches. The left side is a free field: bare names (message, year, Store vars) or {{variables}} (type / to insert). Operators like =, contains, startswith. Connect each branch output separately; use Else when nothing matched.
StoreSet one or more named variables. Each row has a name and a value template (e.g. {{message}}, {{http_body_success}}, or mixed text). Prefer Store for literals/templates; use Parse to pull fields from JSON.
DelayWait a random range of seconds before continuing. Delays are durable — they survive API restarts and resume across instances.
ParseLoad a JSON source (e.g. {{http_body_success}}) and click nodes in the path graph to map them into named variables. output / error (non-JSON source).
BuildBuild a JSON object from key/value rows into one variable (reuse in HTTP body as {{payload}}). Leaf types use the same cast rules as Cast (string / int / float / bool). output / error.
CastCoerce values to string / int / float / bool and write them into session variables (live preview shows before → after; float keeps decimals; bool is truthy/falsy). output / error (no partial writes on failure).
CollectAppend a value onto a JSON array variable (max 100), including nested JSON. Live preview shows the array structure after append. output / error.
LoopIterate a JSON array only (max 100). The editor only offers array variables as the source. Outputs each (sets item/index vars — connect the body back to this Loop), exit when done, error if the source is not an array.
HTTPMethod, URL, headers, body — branches on Success, Failed, or Error. Only JSON response bodies are accepted. Success when the success condition matches; Failed when the body is JSON but the condition does not match; Error for network/server failures or any non-JSON body (including 4xx/5xx HTML/text). Use Test inside the node to verify the request. At least one successful test is required to save; later failed or error results do not block saving. Samples for each edge are stored separately. Vars: {{http_body_success}} / {{http_status_success}}, {{http_body_failed}} / {{http_status_failed}}, {{http_error}}. Use Store / Parse to copy into your own names.
Aksita AIAPI key, message template (default {{message}}), optional additional context and conversation ID. Branches on success / error. Reuses {{aksita_conversation_id}} when set, otherwise creates a session. Vars: {{aksita_response}}, {{aksita_conversation_id}}, {{aksita_message_id}}, {{aksita_remaining_credits}}, {{aksita_error}}. Use Try Aksita for a live test. See Aksita AI.

Click Done to close the node editor.

For an Aksita AI node, the editor shows the API key, message template, and conversation options:

Aksita AI node editor — API key, message, and conversation ID

Sample data shown.

Try a flow (Run)

Click Run on the canvas to simulate the conversation without sending real messages.

Run panel — Autoplay/Step modes, variables, reply input, and log

Sample data shown.

  1. Type a first user message and click Run.
  2. Choose Autoplay (advances automatically) or Step (press Next for each node).
  3. Follow the log as each node executes — the Variables inspector shows the current map.
  4. At a Response node, the message field appears again — type a reply and click Reply.
  5. At an HTTP / Aksita node, pick a simulated branch or run a real request.

Click Stop or close the panel to reset. Fix the canvas, then test again before linking production devices.


  1. In the editor Settings panel, pick WhatsApp, Telegram, and/or WABA devices (or mix them on the same flow).
  2. Save the flow.
  3. On each linked device, open Channel → channel → Devices, edit the device, and set On incoming message to Flow.

When a message arrives on that device, Kirisan runs that one linked flow from the Start node. A device cannot run two flows — if it is already linked elsewhere, remove it from that flow first, then add it here. Only one inbound handler is active per device — Flow replaces Autoreply, Spreadsheet, and Webhook for that line or bot.


Flows vs keyword autoreply

Keyword autoreplyFlow
Single-shot reply or submission startMulti-turn dialog with branches
Fast to set up in a modalBetter for wizards, menus, and API lookups
List order — first keyword match winsOne flow per device — many templates can share a device, but a device runs only one flow

Use Autoreply for simple FAQs; use Flow when the user must answer several questions or you need conditions and HTTP calls.


Tips

  • Keep Start → first Text short so users get a quick acknowledgment.
  • Use Store + Condition to remember choices (for example product category).
  • Put specific Condition branches above broad ones — first match wins, then Else.
  • A device runs one flow only — unlink it from another flow before moving it.
  • Test with Run before linking production devices.
  • Session duration in Settings is the idle TTL — after it expires, the next message restarts from Start.
  • After HTTP, add a Store node to copy {{http_body_success}}, {{http_body_failed}}, or {{http_error}} (or templates) into named variables for later Text / Condition nodes.

  • Autoreply — simple keyword replies
  • Submissions — structured forms (alternative to long flows)
  • Spreadsheet — sheet-based replies without a canvas
  • Variables{{message}}, Store fields, and [[…]] tokens