The node palette
A workflow is a graph of nodes connected by edges. There are six node types. You drag them onto the canvas from the left toolbar and connect them by dragging from one node's edge dot to another. See Workflow editor for canvas mechanics.
| Node | What it does | Waits for the caller |
|---|---|---|
| Start | Entry point. Exactly one per workflow. | No |
| Say | Speaks a line and moves on. | No |
| Ask | Asks a question, captures the answer into a variable. | Yes |
| Decision | Branches to one of several outgoing edges. | No |
| Action | Performs a side effect (booking, transfer, CRM write, SMS, webhook). | No |
| End | Terminates the call. | No |
All node configuration happens in the dashboard workflow editor. There is no API for editing a workflow graph node by node. You can move a whole graph between Finns by exporting and importing JSON from the editor's ⋯ menu.
Start
Every workflow has exactly one Start node, and the call enters there. You can set the opening message on the Start node, or leave it blank so the Finn's normal Welcome Message handles the greeting. See Welcome message.
If you set both, the Start node message is what the caller hears. Leaving both blank means the call opens in silence and the caller speaks first.
Say
The Finn speaks the configured text, then follows its single outgoing edge. No question, no waiting.
Use Say nodes for confirmations, compliance disclosures that have to be read verbatim, and transitions between sections of the flow.
Say text accepts variable interpolation:
Got it, {{contact.name}}. I've booked you for {{state.appointment_time}}.
We'll send a confirmation to {{contact.phone_number}}.
A chain of Say nodes back to back is the most common cause of a workflow sounding robotic. The caller gets no turn to speak. Break long stretches up with Ask nodes, or hand off to free-form.
Ask
The Finn asks a question and waits for an answer. Four things to configure:
| Setting | What it controls |
|---|---|
| Question text | What the Finn says. Supports {{...}} interpolation. |
| Expected answer type | Free text, yes/no, number, date, or enum (one of a fixed set). |
| Variable name | Where the answer is stored. Referenced later as {{state.<name>}}. |
| Failure behavior | What happens when the answer cannot be parsed: re-ask, transfer, or jump elsewhere. |
Configure the failure behavior on every Ask node. Real callers do not answer in the format the node expects, and an Ask node with no fallback edge is where flows get stuck. If exact matching keeps rejecting valid paraphrases, switch the node to AI-evaluated and let the model interpret the answer.
Variable names are matched literally. An Ask node that saves to severity_score and a Say node that reads {{state.severity}} will print the raw {{state.severity}} text into the transcript. See Workflow variables.
Decision
A Decision node picks one outgoing edge based on what the Finn already knows. Three evaluation modes:
| Mode | Use it for | Example |
|---|---|---|
| Simple comparison | Numbers, yes/no, clear enums | severity >= 8 routes to the transfer branch |
| Enum match | A category you collected earlier | intent == "cancel" routes to the cancel branch |
| AI-evaluated | Judgments with no crisp value to test | "Did the caller sound frustrated?" |
AI-evaluated branches are not deterministic. Two similar calls can route differently. Use simple comparison wherever a real value exists, and reserve AI evaluation for the cases where none does.
Action
An Action node performs a side effect and then continues along its outgoing edge.
| Action | Effect |
|---|---|
| Book Calendar | Creates an event on a connected calendar. See Calendar integrations. |
| Transfer Call | Hands the call to a human. See Transfer. |
| Update CRM | Writes a field to a connected CRM. See CRM integrations. |
| Send SMS | Sends a text message. See Messaging. |
| Webhook | Calls a URL you control, useful for live data lookups. See Webhooks. |
Actions that return data write it back into call state. A Book Calendar action makes values like {{state.appointment_id}} available to later nodes.
An Action node depends on an integration being connected already. If the calendar or CRM is not connected, the action fails at call time, not at save time. Test the branch before you launch it.
End
An End node terminates the call. You can have as many as you want, and you should. Each End node becomes its own category in analytics, so separate ends for "booked", "transferred", and "refused" give you a breakdown instead of one undifferentiated total. See Call outcomes.
End nodes also carry a hand off to free-form option. Instead of hanging up, the Finn leaves the workflow and continues conversationally for the rest of the call using its Identity, prompt, and knowledge base. This is how you use a workflow for the required part of a call and free-form for everything after it.
Group nodes
Sub-flows can be collapsed into Group nodes to keep large graphs readable. Group nodes are a Pro plan feature. Flows past roughly 30 nodes start to feel sluggish in the editor, so either group sub-flows or split the work across multiple Finns joined by Transfer Call actions.
Next
- Workflow variables for how
{{contact.*}}and{{state.*}}resolve - Workflow testing for Test on Chat and Test on Call
- Workflow versioning for save history and rollback