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

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

# Troubleshooting

Most Studio problems fall into three buckets: the flow never started, the flow started but took the wrong path, or a block did not do what you expected. Work through them in that order.

## Start here

1. **Is the flow Live?** Draft and Paused flows never run on real events.
2. **Did you publish after your last edit?** Editing changes the draft only.
3. **Is the conversation owned by a human?** Studio skips conversations assigned to an agent.
4. **Run a Test Run.** It walks the draft with sample data and reports how many blocks executed, which is the quickest way to tell a configuration problem from a trigger that never matched.

:::note
The **Execution Log** section in the right panel is marked **Soon** — per-block run history is not available yet. An empty log there is not evidence that a block failed to run.
:::

---

## The flow never runs

| Symptom | Likely cause | Fix |
| --- | --- | --- |
| Nothing happens on a real message | The flow is still Draft, or the last edit was never published | Click **Publish**. |
| Nothing happens and the badge reads **Paused** | Someone paused the flow, or Teloring paused it because a dependency was deleted | Open **⚙ Flow Settings → Resume flow**. If the flow card shows a warning badge, fix the block it names and publish instead. |
| Nothing happens, and the flow *is* live | The trigger's inbox filter does not include the inbox you tested from | Open the trigger and tick the right inbox — or untick everything to listen on all. |
| It worked, then stopped | An agent is assigned to the conversation | Studio stays out of conversations a human owns. Test with a fresh conversation. |
| It stopped for one specific customer | A previous run handed that conversation to a human | The handover sticks until the conversation is resolved or a flow runs **End Session**. Resolve it and try again. |
| The flow card shows a warning badge | A dependency was deleted — usually an analytics alert | Fix the block it names, then publish again. |
| A scheduled flow never fires | The schedule row's timezone, or the day/time, is not what you think | Check the row. Remember a **Days** interval on Recurring Schedule is capped at 24 hours. |
| A webhook returns an error | The request does not match the learned format | Turn **Learn next request** back on and send the new shape once. |
| Only one of several matching flows runs | It usually does not — all matching live flows run. But once one hands the conversation to a human, the rest are skipped | Check whether an earlier flow has **Human intervention** on. |

## The flow runs but takes the wrong path

| Symptom | Likely cause | Fix |
| --- | --- | --- |
| A condition never matches | The **Value / variable** field has braces around it | Write `message.content`, not `{{message.content}}`, in a condition operand. |
| A condition never matches, part two | Using **equals** on free text | Switch to **contains**. Real people type "sales please", not "sales". |
| A numeric comparison always fails | The value is not a number | `greater than` and friends only work on numbers. A non-numeric value never matches. |
| Two branches ran when you expected one | Match mode is **All matching branches** | Switch to **First match only**, and order the rules from most specific to most general. |
| Nothing after the condition ran | No rule matched and there is no ELSE branch | Add an ELSE branch. |
| The flow is stuck after a question | A post-wait condition matched nothing and there is no ELSE | The flow waits for the next message and re-evaluates. Add an ELSE branch or an **End Session** block. |
| A branch runs but does nothing | Its output port is not connected | Drag a connector from that port. |
| A block never runs | It has no incoming connection | The block shows *This block is not connected to anything*. Wire it in. |
| Two messages arrived at the same time despite a Wait | Wait only delays its own branch | Siblings run immediately by design. Put the Wait on the shared path if you want everything delayed. |

## A variable is empty

| Symptom | Likely cause | Fix |
| --- | --- | --- |
| `{{some.variable}}` shows up literally in a message | The key does not exist at that point in the flow | Drag it from **Available Variables** instead of typing it. If it is not listed, the block that produces it is not upstream. |
| `{{contact.name}}` is empty | The contact is brand new and has no name yet | Branch on `contact.name` with **exists**, or write a greeting that reads well without it. |
| `{{conversation.id}}` is empty | The trigger has no conversation — schedule, webhook, analytics alert, agent status | Supply a conversation ID yourself, from the payload or a lookup. |
| `{{http.json.something}}` is empty | Capture response is off, or the field is not in the response | Turn **Capture response for next actions** on, then send `{{http.body}}` to a Private Note to see exactly what came back. |
| `{{answers.my_field}}` is empty | The form field's **Field ID** is not `my_field` | Field IDs are the variable names. Check the form. |
| `{{webhook.body.x}}` is empty | The payload does not contain `x`, or the format was never learned | Use **Learn next request** and read the learned variable chips. |
| `{{var.something}}` is empty | Saved variables are per flow | A `var.*` value saved by one flow is not visible to another. |

## A block fails

| Block | Symptom | Fix |
| --- | --- | --- |
| **Reply Message** | Nothing is sent | Check the conversation ID resolves, and that the channel can still send (an expired WhatsApp window, a disconnected inbox). |
| **HTTP Request** | Always fails | Studio only calls public addresses. Localhost, private networks, and internal hostnames are blocked. |
| **HTTP Request** | Red JSON box | The body is not valid JSON after variables are filled in. Watch for a missing comma or an unquoted string. |
| **Send Email** | *Choose which email inbox sends this email* | Pick an inbox, or switch **Send from** to the Teloring system sender. |
| **Send Email** | No inboxes in the dropdown | Connect an email inbox in [My Ring](../ring/email.md), or use the system sender. |
| **Send Email** | Recipients rejected | Maximum 25 addresses across To, CC, and BCC. Check for a typo. |
| **Code** | Fails every time | The code must `return` a value. It also has no network access — use HTTP Request for that. |
| **Customer Record** | *Select which object type this record belongs to* | Choose an object type; the field list follows that choice. |
| **Customer Record** | Validation failed | A value does not fit the field's type. Check the object's field definitions. |
| **Contact Update** | A field is missing from the dropdown | Only fields defined in the contact Field Editor appear. Protected system fields cannot be written. |
| **Agent Availability** | Always **Offline** | With **Specific agents** selected and nobody ticked, the answer is always Offline — by design. Pick agents, or switch to *Anyone in the account*. |
| **Agent Availability** | An AI Agent is not counted | AI Agents never count as online; they hold no session. |
| **Business Hours** | Always **Closed** | Check the schedule's timezone and its weekly hours in Settings, and whether a holiday calendar is closing the day. |

## Voice problems

| Symptom | Likely cause | Fix |
| --- | --- | --- |
| Voice blocks are missing from the picker | The flow has no **Incoming Call** trigger | Only a flow that starts with Incoming Call is a voice flow. |
| Publishing is blocked | A messaging block is in a voice flow, or the reverse | Remove the block the warning badge names. |
| The prompt does not play | The file is not WAV | WAV only. 8 kHz mono PCM is the safe format. |
| Callers hear silence and the line drops | A path ends without a transfer or Hang Up | End every path with a closing prompt and **Hang Up**. |
| Pressing a key does nothing | That digit's port is not connected | Wire every digit, plus **Timeout** and **Invalid**. |
| Forward to Agent never connects | The agent is not signed in — there is no permanent phone registration | Pair it with **Agent Availability**, and always wire the **Rejected** output. |
| No recording was saved | Recording is off at the trigger | Recording is controlled only by **Record this call** on the Incoming Call trigger. |
| Test Run does not ring the phone | Test Run cannot place calls | Dial the number for real. |

## Building with AI (Hermes)

| Symptom | Likely cause | Fix |
| --- | --- | --- |
| **Use AI to build** is greyed out | The **AI Studio** switch is off for the account | An admin turns it on in [AI World](../ai-world.md). |
| *"This flow already has blocks. Create a new flow to build one with AI."* | You opened the AI builder on a flow that already has a canvas | Hermes only builds into an empty flow, so it can never delete work somebody did by hand. Create a new flow. |
| **Build my flow** is refused, pointing at the editor | The canvas was edited by hand during the interview | Your edits win. Finish the flow in the editor, or start a new flow and a new interview. |
| The message box is disabled | The flow has been built — the conversation is closed by design | Edit the flow on the canvas, or create a new flow to run a new interview. |
| The conversation reopens instead of the canvas | The flow still shows **⚡ Continue with AI** | That is the unfinished interview. Use the card's **Edit** button to reach the canvas instead. |
| Hermes picked the wrong inbox or team | It was told the wrong thing, or the resource did not exist yet | Open the block on the canvas and choose the right one. Create missing inboxes and teams *before* the interview. |
| A block Hermes made has a ⚠ badge | It needs something only you can supply — usually an uploaded WAV prompt or a WhatsApp template | Open the block and fill it in. The rail's **Needs your attention** list said so during the interview. |
| *"Hermes didn't manage to answer that one. Send your message again."* | The AI returned an answer Studio could not read. The turn was **not** saved, so nothing is out of step | Your message is put back in the box — press send again. |
| *"That answer was too long for Hermes to finish."* | A single reply exceeded what the AI can produce in one turn | Send the same thing in shorter pieces, or split it across two answers. |
| The interview stopped, saying it hit a limit | An interview is capped at 60 questions, and accounts have a short message throttle | Progress is saved. Wait a moment and continue, or finish the flow by hand in the editor. |
| I closed the tab and lost my place | You did not — every answer is saved | Reopen the flow from the Studio list and click the card. |

## Things that surprise people

| Behavior | Why it works that way |
| --- | --- |
| Editing a live flow changes nothing until you publish | Draft and live are separate copies on purpose. |
| Deleting asks you to type the flow name | Deletion is permanent and takes the versions and saved variables with it, so it needs a deliberate confirmation. |
| Pausing is not the same as deleting | A paused flow keeps every block and can be resumed in one click. |
| An empty filter means "everything" | An Incoming Message trigger with no inboxes ticked listens on all of them. |
| An empty agent selection means "nobody" | On Agent Availability, an unfinished **Specific agents** block must not behave like *anyone*. |
| A Wait does not delay other branches | Only the branch the Wait sits on is paused. |
| A saved variable is not shared between flows | `var.*` is scoped per flow so two flows cannot overwrite each other. |
| Duplicating a block does not copy its connections | You almost never want the copy wired the same way. |
| Sticky notes never run | They are editor-only comments and are not part of the published flow. |
| Building an AI flow ends the conversation | Once the blocks are yours to edit, a rebuild would have to overwrite your changes. |

## Getting more detail

| Where | What it tells you |
| --- | --- |
| **Test Run** | Whether the draft's shape is valid, without touching customers. |
| **A temporary Private Note** | Drop one into a branch with the variables you are unsure about — it is the quickest way to see what a block really produced. |
| **Version history** (Version bar) | What changed, when, and who changed it — and the button to roll back. |
| **Audit Log** (Settings) | Who published, paused, resumed, restored, or deleted a flow. |

## Next

- [Testing & publishing](./publishing.md) — a safe release routine.
- [Flow recipes](./examples.md) — known-good flows to compare against.
