FlowGraphNode (hierarchy)
Polymorphic node within a bot flow graph. 36 subtypes representing different conversation elements. Uses @JsonTypeInfo with the
typeproperty as discriminator. Embedded in:FlowGraphContent.nodes(within Activity, within BotContent) Source:hbf-core/src/main/java/gr/helvia/hbf/core/domain/content/flowgraph/FlowGraphNode.ktSource (nodes):hbf-core/src/main/java/gr/helvia/hbf/core/domain/content/flowgraph/nodes/TypeScript:hbf-core-api/src/datamodel/botContent.ts(compiled ConversationNode form)
Base FlowGraphNode Fields
All 36 subtypes inherit these fields.
| Field | Type | Required | Notes |
|---|---|---|---|
id | String | yes | @NotNull |
type | FlowGraphNodeType | yes | @NotNull. JSON discriminator |
label | Localized<String> | yes | @NotEmpty. Multilingual label |
action | ConversationAction | no | Triggered conversation action |
enableBackAction | Boolean | no | Default: false |
friendlyName | String | no | |
isDropdown | Boolean | no | Default: false |
preferredRendering | String | no | |
priority | Int | no | Default: 0 |
linkUrl | String | no | |
tooltip | String | no | |
altText | String | no | |
submitLabel | Localized<String> | no | Submit button label |
skipLabel | Localized<String> | no | Skip button label |
position | FlowGraphPosition | no | x, y coordinates for editor |
validationFallbackMessage | Localized<String> | no | Fallback after input validation |
FlowGraphPosition
| Field | Type |
|---|---|
x | Double |
y | Double |
ConversationAction
| Field | Type | Notes |
|---|---|---|
name | String | Action name |
params | Any | Action parameters |
FlowGraphEdge (connects nodes)
| Field | Type | Notes |
|---|---|---|
id | String | @NotNull |
source | String | @NotNull. Source node ID |
target | String | @NotNull. Target node ID |
label | String | Default: "" |
sourcePositionId | String | For multi-output nodes |
FlowGraphNodeType Enum (all 36 values)
| Value (JSON) | Enum | Node Class | Category |
|---|---|---|---|
empty | EMPTY | EmptyNode | Structure |
intro | INTRO | IntroNode | Structure |
select | SELECT | SelectNode | Structure |
message | MESSAGE | MessageNode | Content |
media | MEDIA | MediaNode | Content |
option | OPTION | OptionNode | Input (child of SELECT) |
multi_option | MULTI_OPTION | MultiOptionNode | Input (child of SELECT) |
dynamic_multi_option | DYNAMIC_MULTI_OPTION | DynamicMultiOptionNode | Input (child of SELECT) |
text_input | TEXT_INPUT | InputNode | Input (child of SELECT) |
switch_case | SWITCH_CASE | SwitchCaseNode | Logic |
switch_variable | SWITCH_VARIABLE | SwitchVariableNode | Logic |
switch_query | SWITCH_QUERY | SwitchQueryNode | Logic |
send_stored_data | SEND_STORED_DATA | SendStoredDataNode | Data |
http_request | HTTP_REQUEST | HttpRequestNode | Data |
missed_question | MISSED_QUESTION | MissedQuestionNode | NLP |
jump | JUMP | JumpNode | Navigation |
link_option | LINK_OPTION | LinkOptionNode | Navigation (child of SELECT) |
livechat | LIVECHAT | LiveChatNode | Live Chat (deprecated) |
livechat_request | LIVECHAT_REQUEST | LiveChatRequestNode | Live Chat |
analytic_tags | ANALYTIC_TAGS | AnalyticTagsNode | Analytics |
file_upload | FILE_UPLOAD | FileUploadNode | Input |
user_feedback_jump | USER_FEEDBACK_JUMP | UserFeedbackJumpNode | Feedback |
user_info | USER_INFO | UserInfoNode | Data |
variable | VARIABLE | VariableNode | Data |
email | EmailNode | Communication | |
action | ACTION | ActionNode | Logic |
knowledge_base_article | KNOWLEDGE_BASE_ARTICLE | KnowledgeBaseArticleNode | Content |
card | CARD | (uses FlowGraphNode) | Content |
carousel | CAROUSEL | CarouselNode | Content |
reset | RESET | ResetNode | Navigation |
input_query | INPUT_QUERY | InputQueryNode | Input |
llm | LLM | LlmNode | AI |
custom_response | CUSTOM_RESPONSE | CustomResponseNode | Content |
csat | CSAT | CSATNode | Feedback |
sticky_note | STICKY_NOTE | StickyNoteNode | Editor-only |
semantic_search | SEMANTIC_SEARCH | SemanticSearchNode | AI |
generation | GENERATION | GenerationNode | AI |
Node Categories
Structure Nodes
- EmptyNode - Placeholder/pass-through node
- IntroNode - Entry point for an activity flow
- SelectNode - Parent node for user selection options (OPTION, MULTI_OPTION, DYNAMIC_MULTI_OPTION, TEXT_INPUT, LINK_OPTION are children)
Content Nodes
- MessageNode - Display a text message
- MediaNode - Display an image, video, or file
- KnowledgeBaseArticleNode - Display a knowledge base article
- CarouselNode - Display a carousel of cards
- CustomResponseNode - Display a custom-schema response
Input Nodes
- OptionNode - Single-choice button option (child of SELECT)
- MultiOptionNode - Multi-select checkboxes (child of SELECT)
- DynamicMultiOptionNode - Dynamic multi-select with external data source (child of SELECT)
- InputNode (TEXT_INPUT) - Free text input (child of SELECT)
- FileUploadNode - File upload prompt
- InputQueryNode - Structured input query with submit/skip actions
- LinkOptionNode - External link option (child of SELECT)
Logic Nodes
- SwitchCaseNode - Branch based on blackboard value conditions
- SwitchVariableNode - Branch based on variable value
- SwitchQueryNode - Branch based on LIQE query evaluation
- ActionNode - Execute a conversation action
Data Nodes
- SendStoredDataNode - Send stored data to the user
- HttpRequestNode - Make an HTTP request
- VariableNode - Set/modify a variable
- UserInfoNode - Collect user information
Navigation Nodes
- JumpNode - Jump to another activity or node
- ResetNode - Reset session state
Live Chat Nodes
- LiveChatNode - Deprecated. Direct live chat handover
- LiveChatRequestNode - Request live chat handover
AI Nodes
- LlmNode - LLM completion/generation
- SemanticSearchNode - Semantic search against knowledge base
- GenerationNode - Text generation
Analytics/Feedback Nodes
- AnalyticTagsNode - Set analytic tags for the session
- CSATNode - Customer satisfaction survey
- UserFeedbackJumpNode - Jump based on user feedback
Communication Nodes
- EmailNode - Send email
Editor-Only Nodes
- StickyNoteNode - Visual note in the editor, not compiled
Interfaces
AtMostOneChildNode
Marker interface. Nodes implementing this can have 0 or 1 outgoing edges.
AtLeastOneChildNode
Marker interface. Nodes implementing this must have 1 or more outgoing edges.
Select Node Children
The following node types are children of a SELECT node (identified by isASelectChild()):
- OPTION
- TEXT_INPUT
- MULTI_OPTION
- DYNAMIC_MULTI_OPTION
- LINK_OPTION
Compilation
Each FlowGraphNode subclass implements:
getConversationNodes()- generates runtime ConversationNode(s)getResponses()- generates runtime Response(s) (Localized by language)validate()- validates node configuration
At compile time, all nodes in a FlowGraphContent are compiled into ConversationNodes and Responses that form the ActivityCompiled structure.
TypeScript Mapping
FlowGraphNode and its subtypes are NOT directly exported in hbf-core-api. The TypeScript types represent the compiled output:
| hbf-core (Kotlin) | hbf-core-api (TypeScript) | Notes |
|---|---|---|
| FlowGraphNode | (not exported) | Design-time only, internal to hbf-core |
| FlowGraphNodeType | (not exported) | |
| ConversationNode (compiled) | ConversationNode | Runtime representation |
| Response (compiled) | Response (union type) | 16 response subtypes in TS |
| FlowGraphContent | (not exported) | |
| FlowGraphEdge | (not exported) | |
| ConversationAction | ConversationAction | Aligned. TS adds lambdaUrl |
The TypeScript types model the compiled output (ConversationNode, Response subtypes) rather than the design-time FlowGraphNode hierarchy.