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.
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.
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:
- The failure is recorded as a notice on the conversation, with the node and the reason, so the agent can see what happened.
- 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.
| Node | Outputs | Rule |
|---|---|---|
| Start | 1 | Must be connected (blocks) |
| Message, Ask Question, Ask Email, Ask Phone, Ask Date, Ask File, Set Variable and other simple nodes | 1 | One outgoing connection |
| Interactive Message | One per option | Every 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 |
| Keywords | One per keyword | Every keyword must be connected (blocks) |
| AI Router | One per route | Every route must be connected (blocks) |
| AI Collector | Success, Give up | Both must be connected (blocks). Give up is taken when the agent cannot complete the collection, after sending the give-up message |
| Conditional | true, false, plus Configuration Error | Both true and false must be connected (blocks). Configuration Error is optional |
| Read Authorization | true, false, plus Configuration Error | Connect 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 |
| Login | success, failed | Both 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 Verification | Continue, Timeout/Max Attempts, plus Configuration Error | Connect 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 References | 1, plus Error | One outgoing connection. Error is optional |
| Ask File | 1 | One outgoing connection. Failures are recorded as notices on the conversation |
| Extract Information | Success, Error | Success must be connected (blocks). Error warns |
| HTTP Request, Workflow Execute | Success, Error by default; custom handlers when you enable them | Every non-error handler must be connected (blocks). Error handlers warn. Handler names that contain each other warn |
| Formula | success/error, true/false, or custom outputs, according to Output type | Every 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 Password | success, error | Connect 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 Takeover | 0 | These 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
Branching Flow
Interactive Options
Retry Loop
The loop is valid because Ask Question waits for the customer.
Invalid Connection Patterns
Self-Reference
Direct Interactive to Interactive
Solution: Add a Message or another node that does not offer options between them.
Conditional With Only One Branch
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
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.