<!-- Generated from the canonical Teloring documentation source. Do not edit this file. -->

Canonical page: https://docs.teloring.com/docs/product/studio
Last modified: 2026-08-20T20:49:57.000Z

# Studio

**Studio** is Teloring's visual flow builder. You draw a flow on a canvas — *when this happens, do that* — and Teloring runs it automatically, around the clock, for every conversation, call, form, schedule, or external event you point it at.

Anything a person does repeatedly in Teloring can usually be moved into Studio: greeting a new WhatsApp message, asking two qualifying questions and routing the answer to the right team, opening an IVR menu for phone calls, pushing a new lead into an external CRM, emailing a manager when a report crosses a threshold, or tagging and closing conversations on a schedule.

Studio is built from three kinds of block:

| Badge | Block kind | Question it answers |
| --- | --- | --- |
| **WHEN** | [Trigger](./studio/triggers.md) | What starts this flow? |
| **THEN** | [Action](./studio/actions.md) | What should Teloring do? |
| **IF** | [Condition](./studio/conditions.md) | Which way should the flow go? |

You connect the blocks with lines, press **Publish**, and the flow is live.

![Teloring Studio flow editor](pathname:///img/screenshots/product/studio/flow-editor.png)

## Two ways to build a flow

Every flow can be built by hand or by AI. You choose when you create it.

| Way | How it works | Guide |
| --- | --- | --- |
| **I'll build my own** | You drag blocks onto the canvas and configure them yourself. | This page |
| **Use AI to build** | You answer a short interview in plain language and **Hermes** builds the flow for you. | [Build a flow with AI](./studio/ai-flow-builder.md) |

Both produce the same thing: an ordinary draft flow you can edit and publish. Building with AI requires the **AI Studio** switch in [AI World](./ai-world.md).

## Key facts

| Fact | Meaning |
| --- | --- |
| Every flow starts with a trigger | A flow with no **WHEN** block can never run and cannot be published. |
| Draft and live are separate | Editing never touches the running version. Only **Publish** does. |
| One flow can have several triggers | For example one Incoming Message trigger for WhatsApp and another for Telegram, in the same flow. Only the trigger that matches the real event runs. |
| Blocks can branch and fan out | One block can feed several blocks. All connected paths run. |
| Studio respects human agents | If a human agent owns a conversation, Studio stays out of it completely. |
| Values flow forward as variables | Anything an earlier block produced can be dropped into a later block as `{{a.variable}}`. |
| Two kinds of flow | **Voice flows** (started by Incoming Call) and **messaging flows** (everything else). Each has its own blocks. |
| Account-isolated | Flows, variables, and executions belong to one account and are never visible to another. |
| Test before you publish | **Test Run** executes the draft with sample data and sends nothing to real customers. |
| AI can build the first draft | With **AI Studio** enabled, [Hermes](./studio/ai-flow-builder.md) interviews you and lays out the whole flow. What it produces is a normal draft you edit and publish yourself. |

## Who uses Studio

| Role | Typical use |
| --- | --- |
| Admins | Build and publish flows, connect webhooks and external systems, manage saved variables and versions. |
| Team managers | Design routing, business-hours behavior, escalation, and follow-up rules. |
| Agents | Benefit from the results — pre-qualified conversations, correct labels, auto-assigned queues, private notes with context. |

## Core concepts

### Flow

A **flow** is one automation: a canvas holding blocks and the lines between them. Flows have a name, an optional description, and a status (**Draft**, **Live**, or **Paused**).

### Block

A **block** is one step. Every block has:

- a **badge** — WHEN, THEN, or IF — and a color that matches it;
- an **input port** on top (except triggers, which start the flow);
- one or more **output ports** on the bottom;
- a **Configuration** panel on the right where you set its properties;
- **output variables** it hands to every block downstream of it.

| Badge | Color | Meaning |
| --- | --- | --- |
| **WHEN** | Coral | Trigger — the entry point |
| **THEN** | Teal | Action — does something |
| **IF** | Amber | Condition — chooses a path |
| **NOTE** | Amber | Sticky note — a comment for your team, never executed |

### Connection

A line from one block's **output port** to the next block's **input port**. The line shows the direction of travel with an animated dotted flow.

Blocks with more than one output — a condition, an IVR menu, Forward to Agent, an Analytics Alert — have one port per outcome, labelled underneath. Wire each outcome to whatever should happen next; a port you leave unconnected simply ends that path.

### Messaging flows vs. voice flows

The moment you drop an **Incoming Call** trigger on the canvas, the flow becomes a **voice flow** and the block library changes:

| Flow kind | Starts with | Blocks available |
| --- | --- | --- |
| **Messaging flow** | Any trigger except Incoming Call | Reply Message, Wait, and every general block |
| **Voice flow** | Incoming Call | Play Sound, IVR Menu, Wait / Pause, Forward to Agent, Forward to External Phone, Hang Up, and every general block |

Studio hides out-of-scope blocks from the picker, flags them on the canvas if a flow somehow contains one, and refuses to publish a flow that mixes them. See [Voice call flows](./studio/voice-flows.md).

## The Studio list

Open **Studio** from the left sidebar to see every flow in the account.

![Teloring Studio flow list](pathname:///img/screenshots/product/studio/flow-list.png)

| Control | Use it to |
| --- | --- |
| **New Flow** | Create a flow. You are asked for a name, an optional description, and whether to build it yourself or with AI. |
| **Search** | Filter the list by flow name. |
| **All / Draft / Live / Paused** | Filter by status. |
| **Flow card** | Click anywhere on the card to open the flow. |
| **Card footer** | Shows when the flow was created, when it was last edited, and who edited it. |
| **⚡ Continue with AI badge** | The flow has an unfinished [Hermes interview](./studio/ai-flow-builder.md). Clicking the card reopens the conversation instead of the canvas; the **Edit** button still opens the canvas. |
| **Edit / Delete** | Row actions. Delete works on any flow, live included — you must type the flow's name to confirm. See [deleting a flow](./studio/publishing.md#deleting-a-flow). |
| **Warning badge** | Appears when a flow depends on something that no longer exists (for example a deleted analytics alert). The flow is paused automatically until you fix and republish it. |

### Create your first flow

1. Click **New Flow**.
2. Give it a clear, specific name — `WhatsApp — after-hours auto reply` beats `Flow 3`.
3. Add a description so your teammates know what it does.
4. Choose **How would you like to build it?** — **I'll build my own** or **Use AI to build**. One of the two is required; the button stays disabled until you pick. Choosing AI opens the [Hermes interview](./studio/ai-flow-builder.md) instead of the canvas.
5. Click **Create Flow**. The editor opens on an empty canvas.
6. Drag a **trigger** from the left panel onto the canvas.
7. Drag a connector from the trigger's bottom port and release it on empty canvas — the **block picker** opens.
8. Pick an action, configure it on the right, and repeat.
9. **Test Run**, then **Publish**.

![Choosing how to build a new flow](pathname:///img/screenshots/product/studio/ai/new-flow-choose-mode.png)

## The editor

![Studio editor anatomy](pathname:///img/screenshots/product/studio/editor-anatomy.png)

### Top bar

| Control | What it does |
| --- | --- |
| **←** | Back to the flow list. |
| **Flow name** | Click to rename. Saved with the flow. |
| **Status badge** | Draft, Live, or Paused. |
| **Save indicator** | Shows *Saving…*, *Saved*, *Unsaved*, or *Save failed*. |
| **Test Run** | Runs the draft with sample data. Nothing reaches real customers. |
| **⚙ Flow Settings** | Auto-save switch, **Pause / Resume flow**, and the list of saved `var.*` variables. |
| **Auto-save pill** | Shows whether auto-save is On or Off. |
| **💾 Save now** | Saves the draft immediately (`Cmd/Ctrl+S`). |
| **Publish** | Makes the current draft the live version. |

### Left panel — Block Library

The left panel holds the two things you drag onto the canvas:

- **WHEN — Triggers.** Every trigger available to the account.
- **NOTE — Editor Tools.** The **Sticky Note**.

Below them, the **Version** bar shows the current version number and the last save time. Click it to open [version history](./studio/publishing.md#version-history).

:::tip
Actions and conditions are **not** in the left panel. You add them from the block picker, which opens when you drag a connector out of a block and drop it on empty canvas. That way every new block is already connected to the one before it.
:::

### Adding an action or condition

1. Point at the bottom port of an existing block.
2. Drag out a line and release it on empty canvas.
3. The **block picker** opens.
4. Either type in **Search all blocks…** to search every block at once by name, description, or group, or browse the groups and open one to see its blocks.
5. Click a block. It is created on the canvas, already connected.

![Studio block picker](pathname:///img/screenshots/product/studio/block-picker.png)

Blocks are organized into six groups:

| Group | What's in it |
| --- | --- |
| **Conversations** | Reply Message, Private Note, Change Conversation, End Session |
| **Flow** | Condition If/Else, Business Hours, Agent Availability, Wait, Save as Variable |
| **CRM** | Contact Update, Customer Record |
| **Voice** | Play Sound, Wait / Pause, IVR Menu, Forward to Agent, Forward to External Phone, Hang Up |
| **External** | HTTP Request, Send Email |
| **Tools** | Code, Date and Time |

The picker only ever lists blocks that are legal in the current flow — a messaging flow never shows voice blocks, and a voice flow never shows Reply Message or Wait.

### Canvas

| Gesture | Result |
| --- | --- |
| Drag empty canvas | Pan the view. |
| Scroll wheel | Zoom in and out. |
| Drag a block | Move it. |
| Click a block | Select it and open its properties. |
| Drag output port → input port | Connect two blocks. |
| Hover a connection, click **✂** | Disconnect the two blocks. Both blocks stay on the canvas. |
| Click a connection | Select it. |

The bottom toolbar has zoom in/out, the zoom percentage, **Fit to View**, **Undo**, **Redo**, **Duplicate selected**, and **Delete selected**. A **minimap** in the bottom-right corner shows the whole flow and where you are in it.

:::note
You cannot connect anything *into* a trigger — triggers are always the start of a path. You also cannot connect a sticky note to anything.
:::

### Right panel — Properties

Select any block and the right panel fills with its settings.

![Studio properties panel](pathname:///img/screenshots/product/studio/properties-panel.png)

| Section | What it holds |
| --- | --- |
| **Configuration** | Every property of the selected block. Fields appear and disappear based on your choices — for example **Wait timeout** only appears once **Wait for client response** is on. |
| **Available Variables** | Everything the blocks *above* this one produce, grouped by namespace (System, Message, Conversation, Contact, Channel, Reply, and more). Drag a variable straight into a text field, or click it to copy. See [Variables](./studio/variables.md). |
| **Execution Log** · *Soon* | Per-block run history. Not available yet — the section is marked **Soon**, and an empty log there does not mean the block failed to run. |

### Warnings on a block

A block shows a **⚠ warning badge** on the canvas, and an explanation at the top of its properties panel, when Studio can see it will not work:

| Warning | What it means |
| --- | --- |
| This block is not connected to anything | Nothing points into it, so it can never run. Drag a connector from an earlier block into its top port. |
| This is a voice block | It is in a messaging flow. Voice blocks only work in a flow that starts with Incoming Call. |
| This block is not supported in Incoming Call voice flows | Use Play Sound, IVR, or a voice transfer instead. |
| A required choice is missing | For example Send Email with no inbox, or Customer Record with no object type. |
| Invalid JSON body | An HTTP Request whose JSON body no longer parses. |
| The selected analytics alert no longer exists | The alert was deleted in Analytics. |

You can keep editing with warnings on the canvas, but fix them before you publish — the publish dialog reminds you, and some warnings block publishing outright.

### Sticky notes

Drag **Sticky Note** from **Editor Tools** onto the canvas to leave a comment for whoever opens the flow next: why a branch exists, what an external system expects, who to ask about it.

Sticky notes have a title and a body, can be resized from the bottom-right corner, and have no ports. They are **editor-only** — they are never executed and are not part of the published flow.

### Keyboard shortcuts

| Shortcut | Action |
| --- | --- |
| `Cmd/Ctrl + S` | Save the draft now |
| `Cmd/Ctrl + Z` | Undo (up to 50 steps) |
| `Cmd/Ctrl + Y` | Redo |
| `Cmd/Ctrl + D` | Duplicate the selected block |
| `Delete` | Delete the selected block or connection |

Duplicating a block copies its type and all of its settings, but not its connections — wire the copy in yourself.

## How a flow runs

1. **An event happens** — a customer messages you, a call arrives, a form is submitted, a webhook is called, a schedule comes due, a record changes.
2. **Studio looks for live flows** whose trigger matches that event. Draft and paused flows are ignored.
3. **The matching trigger node runs.** If a flow holds two Incoming Message triggers — one for WhatsApp, one for Telegram — only the one whose settings match the event starts.
4. **The flow walks forward** along the connections. Where a block has several outgoing lines, **all** of them run. Where a condition chose a branch, only that branch runs.
5. **Each block adds its outputs to the flow's variables**, so later blocks can use them.
6. **A block can pause the flow** — Reply Message waiting for the customer's answer, or a Wait counting down. The rest of the flow resumes later, exactly where it stopped. Other branches keep running in the meantime.
7. **The run finishes** when every path has ended.

Every run is recorded as an **execution** with a status:

| Status | Meaning |
| --- | --- |
| `running` | Currently executing. |
| `waiting` | Paused for a customer reply or a timer. |
| `completed` | Every path finished. |
| `failed` | A block returned an error. |
| `timed_out` | A wait expired before the customer replied. |
| `cancelled` | The run was stopped. |

## Studio and human agents

When a flow starts handling a conversation, the conversation moves into the **Studio Bot** queue and shows that a flow owns it. This keeps bots and people from replying over each other.

| Situation | What Studio does |
| --- | --- |
| Conversation has no agent | A matching flow can take it over and run. |
| Conversation is assigned to a human agent | Studio **skips it entirely** — no triggers, no waiting flows, no replies. |
| A flow hands the conversation to a human (**Human intervention**) | Studio releases ownership. Later messages go to the person, not back into the flow. |
| The conversation is resolved | The handover marker is cleared, so a future re-open can be automated again. |
| A flow runs **End Session** | Studio releases the conversation, and the next customer message starts trigger matching from scratch. |

See [Change Conversation](./studio/actions.md#change-conversation) and [End Session](./studio/actions.md#end-session).

## Limits

| Limit | Value |
| --- | --- |
| Blocks per flow | 200 |
| Connections per flow | 500 |
| Saved versions kept per flow | 50 (the most recent) |
| Undo history | 50 steps |
| Wait block | 1–15 seconds |
| Voice Wait / Pause | 0–30 seconds |
| Wait for a customer reply | Up to 30 days |
| Recurring Schedule interval | 1 minute – 24 hours |
| HTTP Request timeout | 1–60 seconds |
| Email recipients per Send Email | 25 |
| Custom email headers | 10 |

## Where to go next

| Page | What it covers |
| --- | --- |
| [Build a flow with AI (Hermes)](./studio/ai-flow-builder.md) | Describe what you want, answer a few questions, and let AI lay out the flow. |
| [Triggers — the WHEN blocks](./studio/triggers.md) | Every trigger, its properties, and the variables it produces. |
| [Actions — the THEN blocks](./studio/actions.md) | Every action, its properties, and its outputs. |
| [Conditions — the IF blocks](./studio/conditions.md) | Branching, operators, business hours, and agent availability. |
| [Variables](./studio/variables.md) | The `{{variable}}` system and the full variable reference. |
| [Voice call flows](./studio/voice-flows.md) | Building phone flows: greetings, IVR menus, transfers, recording. |
| [Test, publish, and versions](./studio/publishing.md) | Draft vs. live, testing, publishing, rolling back. |
| [Flow recipes](./studio/examples.md) | Complete, worked examples you can copy. |
| [Troubleshooting](./studio/troubleshooting.md) | Why a flow didn't fire, and how to fix it. |
