Workflows
Automate your conversation management with visual, drag-and-drop workflows that trigger on events and take action automatically.
Workflows handle the repetitive parts of conversation management for you. Set one up once and it runs every time a matching event happens — no more manually assigning conversations, adding labels, or sending follow-ups.
Think "if this happens, then do that" — with the power to chain steps, branch on conditions, wait for the right moment, and call external services.
What to automate
- Route conversations — assign incoming messages to the right teammate or AI persona based on channel, content, or labels
- Send automated messages — welcome new conversations, follow up after a delay, or notify customers of status changes
- Organize conversations — add or remove labels, star important ones, resolve the finished
- Extract insights — use the AI agent to auto-extract labels, sentiment, and custom field values
- Connect external services — call your other tools through their APIs
The Workflows page
Open Workflows in the sidebar to see every workflow in a table:
- Name and description
- Trigger type — the event that starts the workflow
- Status — Draft, Active, Paused, or Archived
- Versions — how many saved versions exist
- Executions — how many times the workflow has run
Filter by status, search by name, and sort by any column. The row menu also offers Duplicate (a draft copy with the same steps and settings) and Export JSON.
Workflow statuses
| Status | What it means |
|---|---|
| Draft | Saved but not running. You can edit freely. |
| Active | Live and triggering on matching events. |
| Paused | Temporarily stopped. Can be resumed anytime. |
| Archived | No longer in use. Preserved for reference. |
Create a workflow
Click Create Workflow at the top right to open the template gallery. Browse by category, search by name, and check each template's step-by-step preview before committing.
| Category | Templates |
|---|---|
| Get started | Start from scratch (blank canvas) |
| Messaging | Welcome new conversations · Follow up after an hour · Ask for feedback when resolved |
| Routing | Flag urgent messages · Route new conversations to AI |
| AI | Triage with AI — extract sentiment and urgency, star the urgent ones |
| Housekeeping | Auto-resolve stale conversations |
| Integrations | Forward webhooks to your API · Alert your team on workflow failures |
Templates marked Ready to publish work the moment you create them — tweak the copy to match your voice and publish. Templates marked Needs setup tell you exactly what to fill in first (an endpoint URL, an AI persona).
You can also start from one of your own workflows: the gallery lists them with a Use as template button that clones the workflow as a new draft.
Pick a starting point, give it a name and optional description (templates suggest both), and click Create Workflow — you land in the visual editor with the steps already wired.
The workflow editor
Build automation logic visually.
Canvas
Drag nodes from the sidebar onto the canvas, then connect them by dragging from one node's output handle to another node's input handle.
Handy controls:
- Auto-layout — the wand icon arranges nodes neatly
- Mini map — the map icon gives you a bird's-eye view of larger workflows
- Snap to grid — nodes align automatically for a clean layout
Left sidebar
Lists node types by category:
- Triggers — events that start your workflow
- Actions — things the workflow does (send messages, assign conversations, etc.)
- Logic — decision nodes, delays, and end nodes
Drag any node onto the canvas. The Simple API Request node isn't in the sidebar — add it from the command bar with ⌘K.
Right sidebar
Click any node to open its configuration panel on the right. Cloodot saves changes as you configure them.
Top action bar
- Runs — execution history and logs
- Test — run the workflow with sample data
- Clear — discard unsaved changes
- Save — create a new version without publishing
- Publish — save and activate the workflow
Triggers
Every workflow starts with exactly one trigger — the event that kicks things off.
Available triggers
| Trigger | Fires when... |
|---|---|
| New Conversation | A brand-new conversation is created |
| AI Agent Assigned | An AI persona is assigned to a conversation |
| Human Agent Assigned | A team member is assigned to a conversation |
| Conversation Opened | A conversation's status changes to Open |
| Conversation Resolved | A conversation is marked as Resolved |
| Conversation Starred | A conversation is starred |
| Label Added | A label is added to a conversation |
| Label Removed | A label is removed from a conversation |
| Incoming Webhook | An external system calls the workflow's webhook URL |
| Workflow Error | Another workflow fails — use it to build error handlers (see Execution settings) |
Actions
Action nodes do the work. Add as many as you need.
Messaging
- Send Message — send an automated message. Compose the text right in the node.
- Send WhatsApp Template — send an approved WhatsApp template.
Conversation management
- Open Conversation — set status to Open
- Resolve Conversation — mark as Resolved
- Star Conversation — star for quick access
- Unstar Conversation — remove the star
Labels
- Add Label — apply one or more existing labels
- Remove Label — remove one or more labels
Assignment
- Assign to User — assign to a specific teammate
- Assign to AI — assign to a specific AI persona
AI-powered
- AI Extraction — auto-extract labels, custom fields, and sentiment from the conversation
Installed Skill Sets also appear here under Skills — each is named {Skill Set} · {skill} and only shows up when the Skill Set is installed.
Loop prevention
To stop infinite loops, certain actions are blocked based on your trigger. For example, a workflow triggered by "Label Added" can't include an "Add Label" action. The same rule applies to other matching trigger-action pairs.
Using variables
Reference data from the trigger or any earlier step with {{variable}} templates. Type {{ in a message field, or use the Variables picker on any input that supports them.
- From the trigger —
{{trigger.messageText}},{{trigger.conversationId}}, webhook payload fields like{{trigger.payload.orderId}}, even array elements like{{trigger.payload.items.0.sku}}. - From earlier steps — each step is addressed by its name: a step called "CRM Lookup" exposes
{{crm_lookup.response.body}}. The picker shows exactly what each step produces.
Variables flow forward only — a step can read from the trigger and from steps that run before it on the same path. Renaming a step updates every reference automatically, and saving checks references so a typo or orphan is flagged with the exact step to fix instead of silently sending an empty value.
Decision nodes
Create conditional branches — the workflow follows one path if the conditions match, another if they don't.
Set one up
- Add a decision node to your canvas.
- Set up one or more conditions.
- Choose whether all conditions must be true (AND) or any condition can be true (OR).
- Connect the True path (conditions met) and False path (conditions not met) to different nodes.
Available condition fields
| Field | What you can check |
|---|---|
| Conversation Status | Open or Resolved |
| Conversation Labels | whether specific labels are present or absent |
| Conversation Channel | which channel the conversation is on (WhatsApp, Facebook, Instagram) |
| Conversation Starred | whether the conversation is starred |
| Message Text | the triggering message — equals, contains, starts with, ends with |
| 24h Reply Window | whether the WhatsApp 24-hour customer-service window is open |
| Variable | the value of a variable from earlier in the workflow |
Delay nodes
Pause the workflow for a set amount of time before continuing.
Set the delay
Pick a duration and unit:
- Minutes — quick follow-ups
- Hours — same-day automation
- Days — longer sequences
Quick presets — 5 min, 15 min, 30 min, 1 hour, 2 hours, 24 hours, 1 day, 3 days.
Simple API Request nodes
The Simple API Request node calls external services directly — no code required. Add it from the command bar (⌘K); it isn't in the left sidebar.
Configure the request
- HTTP Method — GET, POST, PUT, PATCH, or DELETE
- Request URL — must start with
http://orhttps:// - Headers — add custom headers like Authorization or Content-Type
- Request Body — for POST, PUT, and PATCH, the payload to send
Use cases
- Forward conversation data to a webhook
- Look up customer info in an external CRM
- Trigger actions in other tools on specific events
- Log events to an external monitoring service
Versioning
Each save creates a new version. Only one version is active at a time — that's the one that runs.
- Save creates a new version without activating it.
- Publish creates a new version and makes it the active one.
- Previous versions stay around for review.
Execution settings
Click the settings (gear) icon in the editor toolbar to control how runs behave when something goes wrong.
| Setting | What it does |
|---|---|
| Automatic retries | Retry a failed run up to 5 times. Each retry restarts the workflow from the beginning, so steps that already ran will run again. Off by default. |
| Wait between retries | How long to wait before the first retry. The wait doubles after each attempt — 1 minute becomes 2, then 4. |
| Continue on step failure | Keep going when an action or API request fails, instead of stopping the run. The failed step stays visible in run history. |
| Error workflow | A workflow to run whenever this one fails for good (after all retries). Useful for alerting a channel or calling an external service. |
| Run timeout | A wall-clock budget for each run, including time spent in delay steps. Runs past the budget are marked failed. |
Build an error workflow
- Create a new workflow with the Workflow Error trigger.
- Add steps — for example, a Simple API Request that posts to your alerting tool.
- Publish so it's Active.
- In any other workflow's settings, select it under Error workflow.
The error workflow receives failure details as variables — {{trigger.failedWorkflowName}}, {{trigger.error}}, {{trigger.failedRunNumber}}, and {{trigger.conversationId}} when the failed run involved a conversation. Error workflows never trigger other error workflows, so a broken alert can't cascade.
Test a workflow
Before going live:
- Click Test in the editor toolbar.
- A modal opens with sample data based on the trigger type (conversation ID, status, labels, channel, message text, etc.).
- Edit the sample values to match your test scenario.
- Click Run.
- Open the Runs page to see execution details and step-by-step results.
Cloodot labels test executions separately from production runs so they're easy to tell apart.
Execution history
Click Runs to see every execution. The list updates live while runs are in progress.
Each execution shows:
- Status — Pending, Running, Completed, Failed, or Cancelled
- Trigger data — the event that started the run
- Timing — start and end times
- Error details — what went wrong on failure
- Step details — expand to see what happened at each node
Retry and cancel runs
- Retry — open a failed run's menu or detail view to retry. The retry restarts the workflow with the same trigger data and shows up as a new run with an attempt counter.
- Cancel — pending and running executions can be cancelled. No further steps execute after cancellation.
Execution modes
- Production — real executions triggered by live events
- Test — runs you launched manually from the editor
- Manual — manually triggered executions
Export and import workflows
Move workflows between organizations or keep your own backups with JSON export and import.
- Export — open a workflow's row menu and choose Export JSON. The file contains steps, connections, and execution settings. It never includes anything tied to your organization — no IDs, no webhook secrets, no error-workflow references.
- Import — click Import at the top of the Workflows page and pick a
.workflow.jsonfile. The workflow arrives as a draft.
Review before publishing
Imported steps that reference things specific to the source organization — labels, team members, AI personas — need to be re-pointed at your own. The editor highlights unconfigured steps so they're easy to spot.
Workflow examples
Here are a few common patterns to get you started.
Auto-assign by channel
Route WhatsApp conversations to a specialist:
Trigger: New Conversation
→ Decision: Channel is WhatsApp?
→ True: Assign to User (WhatsApp team lead)
→ False: Assign to AI (General support persona)Delayed follow-up
Send a follow-up if a conversation stays open:
Trigger: New Conversation
→ Send Message ("Thanks for reaching out! We'll be with you shortly.")
→ Delay: 1 hour
→ Decision: Conversation still open?
→ True: Send Message ("Just checking in — is there anything else we can help with?")Smart labeling and escalation
Detect urgent messages and route them appropriately:
Trigger: New Conversation
→ Decision: Message contains "urgent"?
→ True: Add Label (Urgent) → Assign to User (Senior agent)
→ False: AI Extraction → Assign to AINotify an external system
Send conversation data to a webhook when resolved:
Trigger: Conversation Resolved
→ Fetch API: POST to your webhook URL with conversation detailsTips for reliable workflows
- Start simple — one trigger, one or two actions, then add complexity.
- Test before publishing — always run a test to confirm things work as expected.
- Use descriptive names — clear names make workflows easy to find later.
- Watch run history — check the Runs page regularly to catch failures early.
- Lean on labels — labels make great building blocks for decisions and organization.
Related topics
- AI Agent — configure the AI personas your workflows can assign to
- Labels — create labels to use in conditions and actions
- Skill Sets — build custom skills for your workflows
- Contacts & Segments — the contacts your workflows interact with