Skip to main content

FlowGraphNode (hierarchy)

Polymorphic node within a bot flow graph. 36 subtypes representing different conversation elements. Uses @JsonTypeInfo with the type property as discriminator. Embedded in: FlowGraphContent.nodes (within Activity, within BotContent) Source: hbf-core/src/main/java/gr/helvia/hbf/core/domain/content/flowgraph/FlowGraphNode.kt Source (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.

FieldTypeRequiredNotes
idStringyes@NotNull
typeFlowGraphNodeTypeyes@NotNull. JSON discriminator
labelLocalized<String>yes@NotEmpty. Multilingual label
actionConversationActionnoTriggered conversation action
enableBackActionBooleannoDefault: false
friendlyNameStringno
isDropdownBooleannoDefault: false
preferredRenderingStringno
priorityIntnoDefault: 0
linkUrlStringno
tooltipStringno
altTextStringno
submitLabelLocalized<String>noSubmit button label
skipLabelLocalized<String>noSkip button label
positionFlowGraphPositionnox, y coordinates for editor
validationFallbackMessageLocalized<String>noFallback after input validation

FlowGraphPosition

FieldType
xDouble
yDouble

ConversationAction

FieldTypeNotes
nameStringAction name
paramsAnyAction parameters

FlowGraphEdge (connects nodes)

FieldTypeNotes
idString@NotNull
sourceString@NotNull. Source node ID
targetString@NotNull. Target node ID
labelStringDefault: ""
sourcePositionIdStringFor multi-output nodes

FlowGraphNodeType Enum (all 36 values)

Value (JSON)EnumNode ClassCategory
emptyEMPTYEmptyNodeStructure
introINTROIntroNodeStructure
selectSELECTSelectNodeStructure
messageMESSAGEMessageNodeContent
mediaMEDIAMediaNodeContent
optionOPTIONOptionNodeInput (child of SELECT)
multi_optionMULTI_OPTIONMultiOptionNodeInput (child of SELECT)
dynamic_multi_optionDYNAMIC_MULTI_OPTIONDynamicMultiOptionNodeInput (child of SELECT)
text_inputTEXT_INPUTInputNodeInput (child of SELECT)
switch_caseSWITCH_CASESwitchCaseNodeLogic
switch_variableSWITCH_VARIABLESwitchVariableNodeLogic
switch_querySWITCH_QUERYSwitchQueryNodeLogic
send_stored_dataSEND_STORED_DATASendStoredDataNodeData
http_requestHTTP_REQUESTHttpRequestNodeData
missed_questionMISSED_QUESTIONMissedQuestionNodeNLP
jumpJUMPJumpNodeNavigation
link_optionLINK_OPTIONLinkOptionNodeNavigation (child of SELECT)
livechatLIVECHATLiveChatNodeLive Chat (deprecated)
livechat_requestLIVECHAT_REQUESTLiveChatRequestNodeLive Chat
analytic_tagsANALYTIC_TAGSAnalyticTagsNodeAnalytics
file_uploadFILE_UPLOADFileUploadNodeInput
user_feedback_jumpUSER_FEEDBACK_JUMPUserFeedbackJumpNodeFeedback
user_infoUSER_INFOUserInfoNodeData
variableVARIABLEVariableNodeData
emailEMAILEmailNodeCommunication
actionACTIONActionNodeLogic
knowledge_base_articleKNOWLEDGE_BASE_ARTICLEKnowledgeBaseArticleNodeContent
cardCARD(uses FlowGraphNode)Content
carouselCAROUSELCarouselNodeContent
resetRESETResetNodeNavigation
input_queryINPUT_QUERYInputQueryNodeInput
llmLLMLlmNodeAI
custom_responseCUSTOM_RESPONSECustomResponseNodeContent
csatCSATCSATNodeFeedback
sticky_noteSTICKY_NOTEStickyNoteNodeEditor-only
semantic_searchSEMANTIC_SEARCHSemanticSearchNodeAI
generationGENERATIONGenerationNodeAI

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
  • 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)ConversationNodeRuntime representation
Response (compiled)Response (union type)16 response subtypes in TS
FlowGraphContent(not exported)
FlowGraphEdge(not exported)
ConversationActionConversationActionAligned. TS adds lambdaUrl

The TypeScript types model the compiled output (ConversationNode, Response subtypes) rather than the design-time FlowGraphNode hierarchy.