AltScore
Builder Rules

Connection Rules

Connections define the path a conversation follows. The editor enforces some rules the moment you drag a connection, and the rest when you validate or publish. As with the structural rules, a finding either blocks publishing or only warns; the full list is in Publish Gate.

Rules Applied While Connecting

These are refused on the spot, with a message at the bottom of the screen, and the connection is not created.

No Self-Reference

A node cannot connect to itself.

Node A -> Node A

No Duplicate Connections

The same output cannot be connected twice to the same target. A connection is identified by its node, its output, its target node and its target input, so two different outputs of one node may reach the same target: two options of an Interactive Message that lead to the same place are two valid connections.

Node A (output 1) -> Node B   allowed
Node A (output 2) -> Node B   allowed
Node A (output 1) -> Node B   refused: it already exists

One Outgoing Connection per Simple Node

Nodes with a single output (Message, Ask Question, Set Variable and the like) accept one outgoing connection. Remove the existing one before drawing another.

Connection Caps per Node

Nodes with several outputs accept as many connections as outputs, plus one for the error output when the node has one. The caps are listed in the table below.

Loops Are Allowed

There is no rule against cycles. Returning to an earlier node after an invalid answer, or going back to a menu, is a normal pattern. The only cycle the editor refuses is one with no node that waits for the customer, because that one never stops; see Cycles.

Error Outputs

Many nodes have an output labeled Error, or a "Configuration Error" output at the bottom of the node. This output is where the conversation goes when the node fails: a provider that does not answer, an HTTP request that returns a 5xx, a workflow that throws. Across these pages "Error output", "Error handle" and "Error connector" name the same thing; the editor calls it a handle. Do not confuse it with the channel connector (WhatsApp, web or email).

An Unconnected Error Output Warns

Leaving the Error output unconnected is allowed and does not block publishing. The editor warns: "If this node fails, the conversation is handed off to a human agent instead of following an "Error" path. Connect the Error handle to define what should happen on failure."

What happens at runtime when a node fails with no Error output connected:

  1. The failure is recorded as a notice on the conversation, with the node and the reason, so the agent can see what happened.
  2. The conversation leaves the flow. Where it goes depends on the channel: on WhatsApp the conversation is closed and handed to a human agent (the customer receives the handoff message or, with no agent available, the one saying there was a problem); on web and email the conversation goes back to the channel connector's default bot or, when it has none, is left with no active flow.

Connect the Error output when you want a designed exit (a message and an end, a retry, a different branch) rather than the default handoff.

Any Other Unconnected Output Blocks

An output that is not an error output and has no connection blocks publishing with "Output handle '{name}' is not connected". This covers each option of an Interactive Message, each route of an AI Router, each keyword of a Keywords node, the true and false branches of a Conditional, each result of a Login, and the success handlers of HTTP Request, Workflow and Extract Information. Without that connection the conversation would reach the output and stop.

Connections to Outputs That No Longer Exist Block

If you delete an option, a route or a custom output and a connection still leaves from it, the editor blocks publishing with "Edge references handle '{name}' that no longer exists". Delete the connection and draw it again from a live output.

Repeated Output Ids Between Nodes Warn

Every output has an internal id and the engine resolves a connection by that id across the whole flow. Two nodes carrying the same option id send the conversation down whichever branch matches first, with nothing visible on the canvas. This happened to flows whose interactive nodes were copied and pasted before the editor remapped ids on paste. The editor reports it as a warning at publish time (it used to block), with a message naming the two nodes that collide: delete that output on one of the two nodes and create it again.

Response Handlers That Contain Each Other Warn

HTTP Request and Workflow nodes match the response against the handler name by containment. If one handler name contains another (for example "error" and "timeout_error"), routing may be ambiguous; the editor warns with "Response handler '{outer}' contains '{inner}' as substring; routing may be ambiguous". Rename one of them.

Outputs by Node Type

Which outputs a node has, what the editor requires of each, and how the node leaves at runtime.

NodeOutputsRule
Start1Must be connected (blocks)
Message, Ask Question, Ask Email, Ask Phone, Ask Date, Ask File, Set Variable and other simple nodes1One outgoing connection
Interactive MessageOne per optionEvery option must be connected (blocks). Up to 10 options; more than 10 blocks because the channel cannot send the message. From 4 to 10 warns: WhatsApp shows up to 3 as buttons and switches to a list beyond that
KeywordsOne per keywordEvery keyword must be connected (blocks)
AI RouterOne per routeEvery route must be connected (blocks)
AI CollectorSuccess, Give upBoth must be connected (blocks). Give up is taken when the agent cannot complete the collection, after sending the give-up message
Conditionaltrue, false, plus Configuration ErrorBoth true and false must be connected (blocks). Configuration Error is optional
Read Authorizationtrue, false, plus Configuration ErrorConnect both branches: the editor does not refuse an unconnected one, but the conversation stops there when that branch is taken. When the lookup is by borrower id, an id that resolves to no customer of the tenant leaves through the error output, never through false
Loginsuccess, failedBoth must be connected (blocks). When the identity comes from a borrower id variable and the id does not exist, the node leaves through failed
OTP Verification, Point of Contact VerificationContinue, Timeout/Max Attempts, plus Configuration ErrorConnect Continue and Timeout/Max Attempts: a customer who never verifies has nowhere to go otherwise. Point of Contact Verification warns when Timeout or Error is unconnected
Opt-In, Ask Location, Get Payment References1, plus ErrorOne outgoing connection. Error is optional
Ask File1One outgoing connection. Failures are recorded as notices on the conversation
Extract InformationSuccess, ErrorSuccess must be connected (blocks). Error warns
HTTP Request, Workflow ExecuteSuccess, Error by default; custom handlers when you enable themEvery non-error handler must be connected (blocks). Error handlers warn. Handler names that contain each other warn
Formulasuccess/error, true/false, or custom outputs, according to Output typeEvery custom output must be connected (blocks). In the success/error and true/false modes connect both outputs: the one left unconnected has nowhere to go
SAT Password, SRI Passwordsuccess, errorConnect both: an unconnected success leaves the conversation with nowhere to go, and an unconnected error falls back to the default handoff
Jump To, End, Human Takeover0These nodes end the flow's run: Jump To hands the conversation to another flow, End closes it, Human Takeover moves it to an agent. The engine does not dispatch them as steps and reaching them is never a failure

Keywords also belongs to that last group: the engine handles it outside the graph, before any node runs, and matching a keyword is not a failure either.

Valid Connection Patterns

Sequential Flow

Start -> Message -> Ask Question -> Message -> End

Branching Flow

Start -> Conditional
         |-- (true)  -> Message A -> End
         |-- (false) -> Message B -> End

Interactive Options

Start -> Interactive Message
         |-- Option 1 -> Message A
         |-- Option 2 -> Message B
         |-- Option 3 -> Message C

Retry Loop

Ask Question -> Conditional
                 |-- (true)  -> Message (thanks) -> End
                 |-- (false) -> Message (try again) -> Ask Question

The loop is valid because Ask Question waits for the customer.

Invalid Connection Patterns

Self-Reference

Message -> Message (same node)

Direct Interactive to Interactive

Interactive Message -> Interactive Message

Solution: Add a Message or another node that does not offer options between them.

Conditional With Only One Branch

Conditional with only the true branch connected

This blocks with "Conditional node must have two connections, one for 'true' and one for 'false'". A Conditional always evaluates to one of the two, so both need a destination. Only the Configuration Error output may stay unconnected.

Loop With No Waiting Node

Message -> Set Variable -> Conditional -> (false) -> Message

Blocks: no node in the loop waits for the customer. Put an Ask node or an Interactive Message inside the loop, or route the false branch somewhere else.