Skip to main content
This page is the per-node reference for the Bot Flow builder. Each entry lists the node’s purpose, its full parameter set, any validation rules, and a minimal JSON example of how the node looks inside a flow’s stored flow_data graph.
There are 10 node types usable inside the builder: one Trigger plus nine action nodes. A further three node types exist in the source but are not exposed in the builder today — they’re documented at the end of this page for completeness.
You rarely need to look at the raw JSON. Xobito’s builder writes it for you. We include examples so that if you ever inspect a flow’s stored graph — for backup, for support, or for an import — you know exactly what you’re looking at.

Graph shape

Every flow is stored as a single JSON object with two keys — nodes and edges — following Vue Flow’s native format:
  • Each node has an id (string), a type (one of the names below), a position, and a data.output array that holds its properties.
  • Each edge links a node’s output handle to the next node’s input. A Button Message has three output handles — button-0, button-1, button-2 — referenced by sourceHandle.

Active nodes

1. Trigger

  • Internal type: trigger
  • Purpose: the flow’s entry point. Every flow has exactly one Trigger, and it’s always the first node. You cannot delete it; you configure its rules to decide when the flow runs.
  • Output handles: 1 — the Trigger can connect to exactly one next node.

Parameters

The four reply types

Example

Back to overview

2. Text Message

  • Internal type: textMessage
  • Purpose: send a plain text reply.
  • Output handles: 1.

Parameters

Merge fields ({contact_first_name} etc.) are supported inside reply_text.

Example


3. Button Message

  • Internal type: buttonMessage
  • Purpose: send a text message with up to three quick-reply buttons. This is how flows branch — each button is a separate output handle.
  • Output handles: up to 3 — button-0, button-1, button-2.

Parameters

Example

Branching

Connect an edge from each button handle to a different downstream node:

4. Call To Action

  • Internal type: callToAction
  • Purpose: send a message with a single URL button — a button that opens a web link when tapped.
  • Output handles: 1.

Parameters

Example


5. List Message

  • Internal type: listMessage
  • Purpose: send a WhatsApp list picker. Customers tap the list button, see grouped sections, and pick one item.
  • Output handles: 1.

Parameters

WhatsApp limits the total items across all sections to 10, not 10 per section. If you have three sections you can spread 10 items across them however you like.

Example


6. Media Message

  • Internal type: mediaMessage
  • Purpose: send an image, video, audio clip, document, or sticker.
  • Output handles: 1.

Parameters

Example — document

Example — image


7. Location

  • Internal type: locationMessage
  • Purpose: send a location pin the customer can tap to open in their maps app.
  • Output handles: 1.

Parameters

Example


8. Contact Card

  • Internal type: contactMessage
  • Purpose: send one or more vCard contacts the customer can save directly to their phone.
  • Output handles: 1.

Parameters

Example


9. API Request

  • Internal type: webhookApi
  • Purpose: call an external HTTP endpoint mid-flow. Use it to push flow context to your own system, or fetch data to log against the contact.
  • Output handles: 1.

Parameters

The response from the API is not currently piped back into the flow as a variable — the request is fire-and-forget from the flow’s point of view. Use API Request to send data out; use your own system to act on it.
API keys and tokens you put into requestHeaders are stored inside the flow’s JSON in your database. Treat the flow config as sensitive.

Example — POST JSON


10. AI Personal Assistant

  • Internal type: aiAssistant
  • Purpose: hand the conversation over to an AI assistant you’ve configured in the AI Assistant module. From this point, the assistant takes over the conversation until a human intervenes.
  • Output handles: 1.
  • Availability: only appears in the builder when the AI Assistant module is enabled on the workspace.

Parameters

Example

If the AI Assistant module is disabled, the builder offers 9 action nodes instead of 10 — everything above except this one.

Internal / future nodes

These node types exist in the source code but are not currently exposed in the builder menu. They’re documented here because you may see them referenced in older flows or during support sessions. Don’t rely on them in new flows — they may change shape before they ship.

Condition Node

  • Internal type: conditionNode
  • Purpose: evaluate a condition (contains, equals, starts with, ends with, or regex) and branch accordingly.
  • Status: source exists but not wired into the builder. Branching today is done with Button Message handles.

Template Message

  • Internal type: templateMessage
  • Purpose: send an approved WhatsApp template from inside a flow (which would allow a flow to respond outside the 24-hour session window).
  • Status: source exists but not in the builder menu. Use a Template Bot instead for now.

Reaction Message

  • Internal type: reactionMessage
  • Purpose: react to the customer’s last message with an emoji.
  • Status: source exists but not in the builder menu.

Node type summary

Bot Flows overview

How flows run, how triggers work, and how to activate them.

Automations overview

Compare Bot Flows to Message Bots and Template Bots.