Skip to main content

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

SymptomLikely causeFix
Nothing happens on a real messageThe flow is still Draft, or the last edit was never publishedClick Publish.
Nothing happens and the badge reads PausedSomeone paused the flow, or Teloring paused it because a dependency was deletedOpen ⚙ 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 liveThe trigger's inbox filter does not include the inbox you tested fromOpen the trigger and tick the right inbox — or untick everything to listen on all.
It worked, then stoppedAn agent is assigned to the conversationStudio stays out of conversations a human owns. Test with a fresh conversation.
It stopped for one specific customerA previous run handed that conversation to a humanThe handover sticks until the conversation is resolved or a flow runs End Session. Resolve it and try again.
The flow card shows a warning badgeA dependency was deleted — usually an analytics alertFix the block it names, then publish again.
A scheduled flow never firesThe schedule row's timezone, or the day/time, is not what you thinkCheck the row. Remember a Days interval on Recurring Schedule is capped at 24 hours.
A webhook returns an errorThe request does not match the learned formatTurn Learn next request back on and send the new shape once.
Only one of several matching flows runsIt usually does not — all matching live flows run. But once one hands the conversation to a human, the rest are skippedCheck whether an earlier flow has Human intervention on.

The flow runs but takes the wrong path

SymptomLikely causeFix
A condition never matchesThe Value / variable field has braces around itWrite message.content, not {{message.content}}, in a condition operand.
A condition never matches, part twoUsing equals on free textSwitch to contains. Real people type "sales please", not "sales".
A numeric comparison always failsThe value is not a numbergreater than and friends only work on numbers. A non-numeric value never matches.
Two branches ran when you expected oneMatch mode is All matching branchesSwitch to First match only, and order the rules from most specific to most general.
Nothing after the condition ranNo rule matched and there is no ELSE branchAdd an ELSE branch.
The flow is stuck after a questionA post-wait condition matched nothing and there is no ELSEThe flow waits for the next message and re-evaluates. Add an ELSE branch or an End Session block.
A branch runs but does nothingIts output port is not connectedDrag a connector from that port.
A block never runsIt has no incoming connectionThe block shows This block is not connected to anything. Wire it in.
Two messages arrived at the same time despite a WaitWait only delays its own branchSiblings run immediately by design. Put the Wait on the shared path if you want everything delayed.

A variable is empty

SymptomLikely causeFix
{{some.variable}} shows up literally in a messageThe key does not exist at that point in the flowDrag it from Available Variables instead of typing it. If it is not listed, the block that produces it is not upstream.
{{contact.name}} is emptyThe contact is brand new and has no name yetBranch on contact.name with exists, or write a greeting that reads well without it.
{{conversation.id}} is emptyThe trigger has no conversation — schedule, webhook, analytics alert, agent statusSupply a conversation ID yourself, from the payload or a lookup.
{{http.json.something}} is emptyCapture response is off, or the field is not in the responseTurn Capture response for next actions on, then send {{http.body}} to a Private Note to see exactly what came back.
{{answers.my_field}} is emptyThe form field's Field ID is not my_fieldField IDs are the variable names. Check the form.
{{webhook.body.x}} is emptyThe payload does not contain x, or the format was never learnedUse Learn next request and read the learned variable chips.
{{var.something}} is emptySaved variables are per flowA var.* value saved by one flow is not visible to another.

A block fails

BlockSymptomFix
Reply MessageNothing is sentCheck the conversation ID resolves, and that the channel can still send (an expired WhatsApp window, a disconnected inbox).
HTTP RequestAlways failsStudio only calls public addresses. Localhost, private networks, and internal hostnames are blocked.
HTTP RequestRed JSON boxThe body is not valid JSON after variables are filled in. Watch for a missing comma or an unquoted string.
Send EmailChoose which email inbox sends this emailPick an inbox, or switch Send from to the Teloring system sender.
Send EmailNo inboxes in the dropdownConnect an email inbox in My Ring, or use the system sender.
Send EmailRecipients rejectedMaximum 25 addresses across To, CC, and BCC. Check for a typo.
CodeFails every timeThe code must return a value. It also has no network access — use HTTP Request for that.
Customer RecordSelect which object type this record belongs toChoose an object type; the field list follows that choice.
Customer RecordValidation failedA value does not fit the field's type. Check the object's field definitions.
Contact UpdateA field is missing from the dropdownOnly fields defined in the contact Field Editor appear. Protected system fields cannot be written.
Agent AvailabilityAlways OfflineWith Specific agents selected and nobody ticked, the answer is always Offline — by design. Pick agents, or switch to Anyone in the account.
Agent AvailabilityAn AI Agent is not countedAI Agents never count as online; they hold no session.
Business HoursAlways ClosedCheck the schedule's timezone and its weekly hours in Settings, and whether a holiday calendar is closing the day.

Voice problems

SymptomLikely causeFix
Voice blocks are missing from the pickerThe flow has no Incoming Call triggerOnly a flow that starts with Incoming Call is a voice flow.
Publishing is blockedA messaging block is in a voice flow, or the reverseRemove the block the warning badge names.
The prompt does not playThe file is not WAVWAV only. 8 kHz mono PCM is the safe format.
Callers hear silence and the line dropsA path ends without a transfer or Hang UpEnd every path with a closing prompt and Hang Up.
Pressing a key does nothingThat digit's port is not connectedWire every digit, plus Timeout and Invalid.
Forward to Agent never connectsThe agent is not signed in — there is no permanent phone registrationPair it with Agent Availability, and always wire the Rejected output.
No recording was savedRecording is off at the triggerRecording is controlled only by Record this call on the Incoming Call trigger.
Test Run does not ring the phoneTest Run cannot place callsDial the number for real.

Building with AI (Hermes)

SymptomLikely causeFix
Use AI to build is greyed outThe AI Studio switch is off for the accountAn admin turns it on in AI World.
"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 canvasHermes 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 editorThe canvas was edited by hand during the interviewYour edits win. Finish the flow in the editor, or start a new flow and a new interview.
The message box is disabledThe flow has been built — the conversation is closed by designEdit the flow on the canvas, or create a new flow to run a new interview.
The conversation reopens instead of the canvasThe flow still shows ⚡ Continue with AIThat is the unfinished interview. Use the card's Edit button to reach the canvas instead.
Hermes picked the wrong inbox or teamIt was told the wrong thing, or the resource did not exist yetOpen the block on the canvas and choose the right one. Create missing inboxes and teams before the interview.
A block Hermes made has a ⚠ badgeIt needs something only you can supply — usually an uploaded WAV prompt or a WhatsApp templateOpen 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 stepYour 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 turnSend the same thing in shorter pieces, or split it across two answers.
The interview stopped, saying it hit a limitAn interview is capped at 60 questions, and accounts have a short message throttleProgress is saved. Wait a moment and continue, or finish the flow by hand in the editor.
I closed the tab and lost my placeYou did not — every answer is savedReopen the flow from the Studio list and click the card.

Things that surprise people

BehaviorWhy it works that way
Editing a live flow changes nothing until you publishDraft and live are separate copies on purpose.
Deleting asks you to type the flow nameDeletion is permanent and takes the versions and saved variables with it, so it needs a deliberate confirmation.
Pausing is not the same as deletingA 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 branchesOnly the branch the Wait sits on is paused.
A saved variable is not shared between flowsvar.* is scoped per flow so two flows cannot overwrite each other.
Duplicating a block does not copy its connectionsYou almost never want the copy wired the same way.
Sticky notes never runThey are editor-only comments and are not part of the published flow.
Building an AI flow ends the conversationOnce the blocks are yours to edit, a rebuild would have to overwrite your changes.

Getting more detail

WhereWhat it tells you
Test RunWhether the draft's shape is valid, without touching customers.
A temporary Private NoteDrop 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