Home/Help Center/Node reference

Automation

Flow Node Reference: Every Node Type and Its Fields

Every node type in VGraple CRM's Flow Builder, its exact fields, and how it behaves at runtime, including the 24-hour window guard and opt-out checks.

By Chirag Darji · Updated 27 Aug 2026 · 8 min read

On this page
  1. Before you start
  2. Steps
  3. What you will see
  4. Settings and options
  5. Troubleshooting
  6. Related reading
VGraple CRM flow builder canvas with chatbot nodes for messages, templates and AI responses

Every node in Flow Builder is a small, specific unit of behavior: send this, wait for that, branch here, call an external system there. This reference lists all 16 working node types plus the Trigger and End nodes, the exact fields each one takes, and how it behaves when a real conversation runs through it.

Node reference

  1. 1Open the flow you want to check
  2. 2Match the node's palette label
  3. 3Check the Fields column
  4. 4Save and re-test
The steps on this page, in order.

Before you start

  • Click any node on the canvas to open its properties panel; every field below appears there under a label matching this article, not the internal field name.
  • Nodes that send free-form content (anything that is not a pre-approved template) are checked against the conversation's 24-hour service window before they fire. If the window is closed, the node does not attempt the send; it logs a visible message reading "[Not sent: node_type]" in the conversation and the flow moves on.
  • Every node runs only after the executor confirms the contact is not blocked and has not opted out, checked fresh before each node, not only when the flow starts.
  • A flow loop tracks which nodes have already run in the current execution; revisiting the same node twice in one run breaks the loop rather than sending duplicate messages forever.

Steps

Reading this reference alongside the canvas is the fastest way to use it:

Automation flows in VGraple CRM with their trigger type, status and how many times each one has run

  1. Open the flow you want to check and click the node in question.
  2. Match the node's palette label (shown at the top of its properties panel) against the table below.
  3. Check the Fields column for what each visible input actually controls, then the Runtime notes column for anything that is not obvious from the UI alone, such as the 24-hour window guard or a fallback behavior.
  4. Save and re-test on your own connected number after changing a node's configuration, since a field's effect is not always visible until the node actually runs.

What you will see

Each node renders on the canvas as a labeled box in its palette color, with a small handle for outgoing edges (two handles, labeled true and false, on a Condition node; one handle per button on a Quick Replies node with more than one option). A node's properties panel only shows the fields relevant to its current configuration, for example a Delay node hides the relative-appointment fields entirely until you switch delay_type to relative.

Settings and options

Node (palette label)Type valueFieldsRuntime notes
TriggertriggerTrigger Type, Keywords (for Keyword / Inbound Message), Segment, Tag, Service, Hours before, Form, LabelEvery flow starts here; see flow triggers for the full breakdown of each trigger type's fields
Send Messagesend_messageMessage bodyFree-form; supports {{name}}, {{phone}} and {{variable}} interpolation; blocked by the 24-hour window guard
Send Templatesend_templateTemplate name, Language, Variable mappingNot affected by the 24-hour window; a carousel template sends automatically as a carousel if the named template has carousel cards
CTA Buttonsend_cta_urlBody, Button text, URL, Header text (optional), Footer text (optional)Free-form; the URL must start with http:// or https://, and the node is skipped for website chat contacts, which have no CTA button support
Image Carouselsend_carouselBody, Cards (image URL, body text, up to 3 buttons per card)Free-form; needs at least 2 cards to send, skipped for website chat contacts
Wait for Replywait_for_replyVariable name, Timeout (hours)Pauses the flow until the contact's next message is captured into the named variable, or the timeout passes and the flow resumes with the variable unset
Quick Repliesquick_repliesBody, Buttons (up to 10), Variable nameFree-form; up to 3 options render as buttons, 4 to 10 render as a list message; the flow waits here until a button is tapped
Request Locationrequest_locationBody, Variable nameFree-form; sends WhatsApp's native location-request prompt and waits; skipped for website chat contacts
Contact Cardsend_contactName, Phone, Email, Company, Title, URLFree-form; sends a WhatsApp native contact card; skipped for website chat contacts
WhatsApp Formsend_wa_flowWA Flow, Header, Body, Button text, Wait for completionFree-form; the linked form must already be a published WA Flow; turning on "wait for completion" pauses the flow until the customer submits
Send Productsend_productCatalog, Product (retailer ID), Body (optional)Free-form; the org must have a connected Meta catalog with the product active; skipped for website chat contacts
ConditionconditionField, Operator, ValueNot a send; routes to a true or false edge based on the comparison; case-insensitive on all operators
DelaydelayDelay type (fixed or relative to appointment), Hours/minutes, or Direction + days/hours offsetNot a send; the flow execution pauses and is resumed by cron; a relative delay with no upcoming appointment is skipped, not held forever
Human Handoffhuman_handoffHandoff messageSends the message, then ends the execution; the conversation is left for a human agent, it is not automatically assigned
API Callapi_callURL, Method (GET or POST), Variable nameNot a send to the customer; POSTs the flow's current variables as JSON, or appends them as a GET query string; the response text is stored in the named variable, default api_response
AI Responseai_responseAI provider, System prompt, Knowledge base, Conversational mode, Booking link (optional)Free-form; falls back automatically to any other configured provider key if the saved one has none; in conversational mode the flow stays on this node and waits for the next customer message rather than advancing
ActionactionAction type (Add Tag, Remove Tag, Mark Opted Out, Resolve Conversation), Tag nameNot a send; Mark Opted Out and Resolve Conversation need no extra value; the next iteration of the executor loop cancels the run if the action just opted the contact out
End FlowendNoneTerminates the branch; a flow with no more edges from a node also ends implicitly, this node exists to make an intentional stop explicit on the canvas

Troubleshooting

SymptomLikely causeFix
A Send Message or Quick Replies node never deliversThe 24-hour service window was closed when the node ranCheck the conversation thread for the logged "[Not sent: ...]" entry, then switch that step to Send Template if it is scheduled after a Delay
A Condition node always takes the false branchThe field is comparing a variable that was never set, so it evaluates as an empty stringConfirm the variable name matches exactly what an earlier node set it to, including the var. prefix for flow variables
An API Call node's response is not usable in later messagesThe endpoint returned a full JSON object, which is stored as one string in the variableHave your endpoint return only the specific value the flow needs, or fetch and parse the field server-side before responding
A Delay node with a relative-to-appointment offset never firesThe contact has no scheduled appointment when the node runsConfirm the appointment exists and is still in "scheduled" status; a completed or cancelled appointment does not count
Send Product or Send Contact silently does nothingThe contact is a website chat contact, which has no Meta API target for these node typesThis is expected; these nodes are WhatsApp-only and are skipped automatically for chat widget conversations
An AI Response node answers off-topicNo knowledge base is attached, or the attached one is scoped to a different chatbot widget than the one this flow is meant to representAttach the correct knowledge base in the node's Knowledge base field, or check its per-widget scope in Settings, then Chat Widget

Pair this reference with flow triggers for the six ways a flow can start, and the broader Flow Builder guide for how to wire nodes together on the canvas and test the result.

Frequently asked questions

How many node types does Flow Builder have?
16 working node types you can drag from the palette, plus the Trigger node every flow starts with and the End node that terminates a branch explicitly. A Set Variable node type exists in the underlying engine but is not exposed in the palette; use an API Call node's variable_name output or a Quick Replies choice to set a variable instead.
Which nodes count as "free-form" for the 24-hour window guard?
Send Message, CTA Button, Quick Replies, Request Location, AI Response, Image Carousel, Contact Card, WhatsApp Form and Send Product. Any of these fails safely with a logged message if the conversation's 24-hour service window is closed. Send Template is never affected, since a template is exactly what Meta requires outside the window.
What operators does the Condition node support?
Equals, not equals, contains, not contains, starts with, is empty, and is not empty. All comparisons are case-insensitive and run against either a flow variable (prefixed var., such as var.reply) or a contact field (name, phone, and similar).
What happens if a Delay node's relative-to-appointment offset lands in the past?
The flow advances immediately instead of waiting, since a resume time in the past is not meaningful. If the contact has no upcoming scheduled appointment at all when the node runs, the delay is skipped and the flow proceeds to the next node right away.
Can a Quick Replies node have more than 3 buttons?
Yes, up to 10. Three or fewer render as WhatsApp's native quick-reply buttons; four or more automatically switch to a list message instead, since that is the format WhatsApp itself requires past 3 options.
What does the Action node's "Mark Opted Out" do exactly?
It sets the contact's opted_in flag to false and stamps opted_out_at with the current time, the same fields a customer-sent STOP sets. Once stamped, every other flow's executor treats this contact as opted out and cancels any other execution running for them.
Does the API Call node support authentication headers?
No. It sends a fixed Content-Type: application/json header and either a JSON POST body of the flow's current variables or a GET query string; there is no field for a bearer token or API key. If your endpoint requires authentication, put a shared secret in the URL or accept requests from an allowlisted IP instead.

Run your WhatsApp on VGraple CRM

Free forever plan, official Meta WhatsApp Business API, set up in 15 minutes. No card needed.