A workflow is a trigger followed by a chain of actions. The trigger decides when a contact enters; the actions decide what happens to them. Each action is a node you drop on the canvas and wire to the next one, and IcloneU ships a full palette of them — messaging, flow control, contact updates, human handoff and a couple of advanced calls. This guide is the field reference: what every action node does, the exact options it exposes, and the handful of caveats worth knowing before you build.
Every action in this guide is a node inside Automations ▸ Workflows. Almost the whole node palette is available on every paid plan, with one exception: the three Hand to a human nodes need Pro or higher. Two nodes (Integration and Issue Code) need something created on a neighbouring Automations tab before they have anything to act on; that's covered near the end, together with what an unconfigured node does to a live run. Add a trigger to your workflow first, then chain the actions below onto it.
How actions fit together
A workflow always starts with a trigger; everything after it is an action — a node you drop on the canvas. You connect each node's output port to the next node, and when the trigger fires the contact travels down the wires from one action to the next. The rest of this guide walks the action nodes grouped the way the node picker groups them: messaging, flow control, contact updates, human handoff and advanced.
Some actions simply do their thing and continue. Others branch: Condition sends the contact out Matches conditions or Doesn't match, External Request and Integration out Success or Error, Issue Code out Issued or Exhausted, AI Agent out Completed or Abandoned. A port only carries the contact onward if you wired something to it — when a node leaves by a port with nothing attached, the run simply ends there. And many fields accept {{variables}} — a contact's name, a value collected earlier in the flow, or a run variable like {{rv_name}} produced by a step above.
The Comment node is a canvas sticky note — A note for your team — never sent to users and never part of the run. Use it to annotate a flow for teammates. It has no ports, you can't wire it to anything, and the engine skips it entirely, so it never sends a message or changes a contact.
Send messages
The Send Message node is the workhorse of most workflows — it delivers one or more chat messages to the contact on the same channel the trigger fired on. Inside it you build a stack of elements: click New item to add one, drag the handle to reorder them, and they're sent in order. A single node can mix several parts (say, a line of text, an image, then another line).
The element types you can add:
| Element | What it sends |
|---|---|
| Text | A message with variables, emoji and an optional bold title; can carry buttons. |
| Image | An uploaded picture, with an optional title and subtitle; can carry buttons. |
| Video | An uploaded video clip; can carry buttons. |
| Audio | An uploaded audio file. |
| File | An uploaded document. |
| Delay | A short 1–30 second pause between messages, optionally showing a typing indicator. |
| WhatsApp Template | An approved WhatsApp message template with its variables mapped (WhatsApp only). |
| List Message | A WhatsApp interactive list of selectable options (WhatsApp only). |
WhatsApp Template and List Message are WhatsApp-only — they appear in the New item menu only when the workflow's trigger runs on WhatsApp; every other element works on any channel. And the inline Delay element (a 1–30s pause inside a Send Message) is not the same as the Delay and Schedule node in the next section — that node pauses the whole flow, this one just spaces out messages.
Pick a template in the WhatsApp Template element and, if that template has body variables or a Dynamic URL button, a Variable mappings panel opens under the message preview. Every body variable the approved template declares gets its own slot — type a value or drop in a {{variable}} — with an If empty: row beneath it for the fallback to use when that contact has no value. If the template carries a Dynamic URL button, one more slot appears per button, badged with the button's own title and asking for the Value for the button's URL suffix: whatever you map is spliced onto the tail of the approved link, and the line below previews that link with the tail shown as {{…}}. Those slots take the same If empty: fallback.
WhatsApp rejects a template send that is missing a parameter, so IcloneU stops that contact's send rather than deliver a broken message — the error names the variable, or the button URL, that came back empty and tells you to set a fallback on the node. So fill either the mapping or its If empty: fallback on every slot, body variables and URL buttons alike. Mapping a full link into a button slot is fine: as the node's own hint says, You can map a full link — the base URL above is trimmed automatically, as long as the link starts with it. A link that doesn't start with the button's approved base URL can't be trimmed, and the button WhatsApp renders is likely to be broken.
Text, image and video elements can carry tappable buttons. Open a button to set its Button title and Button type. Three types are available:
| Button | What a tap does |
|---|---|
| Open website | Opens a Website URL, with a Webview display size (browser, small, medium or full screen). |
| Call number | Dials a Telephone number from the contact's phone. |
| Continue in workflow | Routes the tap to whatever you wire to that button's own output port on the canvas. |
When a Send Message node holds two or more elements, a Show elements in carousel switch can send them as one swipeable card stack. Alongside Send Message, the Comment Reply node posts a public reply to the Facebook or Instagram comment that started the workflow; it uses the same message editor, so you can drop in variables and attachments, and the character limit follows the platform.
Control the flow
Condition splits the flow in two based on rules about the contact or the message. Choose whether all or any of your rules must match, then add rules — each is a field (Tag, Email, Platform, Engagement Score, Total Messages, Days since last interaction, a custom field, a value from an earlier step, and more), an operator (is, is not, contains, >, <, between, exists, doesn't exist…) and a value. The node has two outputs, Matches conditions and Doesn't match, and the contact follows whichever one they satisfy.
Most operators take a single value. between takes two: the rule turns into a pair of number boxes joined by and, and the range includes both ends. Enter the bounds backwards and IcloneU swaps them rather than matching nobody. It is offered on the numeric subjects only — Engagement Score, Total Messages, Days since last interaction, Number lead fields, and numeric values captured by an earlier step. Days since last interaction is Whole days since the contact last wrote to you, so exists and doesn't exist on that field answer whether the contact has ever written at all: someone who never has resolves to nothing rather than to a number.
Delay and Schedule pauses the flow. Pick Wait a duration — an amount plus seconds, minutes, hours or days, up to 365 days — or Fire at a date, either a Specific date or a date read From a contact field (for example {{cf_appointment}}), with an optional offset before or after. You can also gate when it resumes with Only continue during: Anytime, Use reply timing (your account's reply schedule and timezone) or Custom hours.
Randomizer sends contacts down 2 to 10 weighted paths whose percentages must add up to 100%. Turn Random path every time on for an independent draw on every visit (contests, lotteries) or leave it off to keep each contact on the same branch (A/B testing).
Go To Automation jumps the contact into another automation's start node — handy for reusing a shared sub-flow. It's a terminal action: the current flow stops there, so anything wired after it never runs.
Because Go To Automation is terminal, put it last on its branch — it has no output port and nothing downstream will fire. If you point it at the automation it already lives in, IcloneU warns you: You selected the current automation — this will create an infinite loop unless a condition breaks out.
Update the contact
These actions write straight to the contact's record — no message is sent to the contact.
- Set Tag — add or remove one tag on the contact. Pick the Operation (Add tag or Remove tag) and choose the tag from your account's tags.
- Set Custom Field — write to a lead field. Pick the field, then the Operation: Set value, Increase by or Decrease by. On Set value the box below is labelled Value and accepts {{variables}}; on the two numeric operations the same box is labelled Amount. Either way the new value is available to later nodes right away as {{cf_field}}.
- Enroll in Sequence — pick a Sequence and the node puts the contact into it: The contact enters at step 1 when this node runs. The sequence must be Live to enroll, and its re-entry policy still applies. The sequence's Enroll only if filter still decides too. A Draft sequence is pickable on purpose, so you can build the flow before the sequence goes live — but nobody is enrolled until it does.
- Exit Sequence — Ends the contact's active subscription to this sequence; completed or already-exited contacts are unaffected. On the sequence's subscriber list that contact's Status becomes Exited. It is the node that ends one drip: Set Opt-out and Archive Contact also stop sequence steps going out, but they silence every automated send to that contact and leave the subscription itself open.
- Set Opt-in — Opt the contact in to automated broadcasts and sequences on this channel.
- Set Opt-out — Opt the contact out of automated broadcasts and sequences on this channel. Their direct replies are unaffected.
Increase by and Decrease by read the field as a number, adjust it, and write it back — that's how you count entries, visits, points or strikes without an external service. The node's own hint states the rules: Set value overwrites the field. Increase/Decrease treat the field as a number (missing or non-numeric counts as 0) and adjust it by the amount — perfect for entry counters and lead scores. Leave Amount empty and it steps by 1. Two bumps inside the same run stack, so a flow that increments twice ends at 2, not 1. Follow the node with a Condition on that field to act once the count crosses a threshold.
Archive Contact does exactly what its description says: Archive the contact: hide it from your contact list and exclude it from automated broadcasts and sequences. Conversation history is kept and the contact can be restored.
Archive Contact is a soft-archive, not a permanent deletion. The person drops out of your contact list and out of automated sends, but their whole conversation history stays and you can restore them at any time from their profile. If you need to permanently remove personal data, that's the separate Erase personal data action on the contact profile, not this node.
Hand to a human
When the AI should step back, these actions move the conversation into your team's inbox — and one of them just pings the team without changing the conversation at all. These three nodes need Pro or higher; on Starter they are not available.
- Hand off to a human — Hands the conversation to a human agent: it joins the agent queue and the AI stops responding. Wait messages and auto-return to AI still apply.
- Close & return to AI — Returns the conversation to the AI, which resumes responding — regardless of the current handover state.
- Assign / transfer to agent — Assigns or transfers the conversation to a specific agent, or auto-assigns by round-robin. Pick a name under Assign to, or leave it on Auto-assign (round-robin).
Notify Admin alerts your team without touching the conversation or the contact. Write the Notification message (variables like {{contact.name}} are welcome), choose whether it reaches the Whole team or Only the automation owner, and optionally Include a link to the conversation.
Notify Admin posts an In-app alert to your team — that's the channel to rely on for time-sensitive nudges. An Email delivery toggle is present in the node too, but treat the in-app alert as the dependable one.
Advanced actions
AI Agent hands the live conversation to a Clone you choose, with a Goal and an optional list of Fields to collect. The Clone converses until it reaches the goal or the contact drops off, up to a Max iterations cap (1–50). Each collected field becomes available downstream as {{rv_field_key}} and is saved to the contact on success, and the node branches Completed or Abandoned. You'll need at least one Clone on the account — create one in Account Settings if the picker is empty.
External Request makes an HTTP call to your own server or any public API: a method (GET, POST, PUT, PATCH or DELETE), a URL, query parameters, headers and a body, all variable-aware. Under Response mappings you pull values out of the JSON reply with a JSONPath and save each under a Variable name that later nodes read as {{rv_name}}. The node branches Success or Error, so you can react when the call fails. It's self-contained — it doesn't depend on any connected service.
Actions that need something set up first
Two action nodes sit in everyone's palette but have nothing to act on until you create the thing they point at. Both live one tab over from Workflows, and both of those tabs are included with every paid plan — there's no beta to join. Drop these nodes on the canvas before the setup exists and their pickers stay empty, so do the setup first. An empty picker is not harmless: read the warning below before you leave one in a published flow.
Integration needs a connection, which you create on the Connectors tab, and Issue Code needs a pool of codes, which you set up on the Code Pools tab. Until you've made one, these two nodes just show an empty picker — No connections configured. Go to the Connectors page to set one up. and No code pools yet — create one first. Create the connection or pool, then come back and configure the node.
- Integration — Run an action on a connected service (Google Sheets, Klaviyo, etc.). Once you have a connection, you choose an action and fill its parameters; without one, the picker is empty. The node branches Success or Error: a connector action that fails leaves by Error and hands the service's failure message to the rest of the flow as {{rv_integration_error}}, so you can send a fallback message or fire Notify Admin instead of going quiet. Anything the action returns arrives as {{rv_…}} variables on the Success side.
- Issue Code — Hand out one unique code from a finite pool, then branch to "exhausted" once empty. It branches Issued or Exhausted and exposes the code as {{rv_issued_code}}. A node with no pool selected takes Exhausted too, so wire that port to an apology message and an unfinished node still behaves sensibly.
This one changed, and it matters if you built flows before it did. An Integration node with no connection picked — and equally one whose connector action fails — leaves by its Error port. A flow drawn back when the node had a single port has nothing wired there, so the contact stops at that node and nothing after it runs: no message, no tag, no handoff, no error shown to the contact. The node is not inert. Before you put one in a live flow, either finish configuring it or wire the Error port to a fallback. Run the flow through Test workflow and an unconfigured Integration node shows up as a failed step with the reason on it.
Frequently asked
Drag from a node's output port to the next node. The contact follows the wires down from the trigger. Nodes like Condition, Randomizer, External Request, Integration, AI Agent and Issue Code have more than one port, so you can send each outcome down a different branch. Leave a port unwired and any contact who leaves by it stops there — the run ends, quietly.
WhatsApp Template and List Message. They appear in the Send Message New item menu only when the workflow's trigger runs on WhatsApp. Text, image, video, audio, file and the inline delay work on every channel.
Most likely one of its slots resolved to nothing. Every body variable and every Dynamic URL button in the WhatsApp Template element needs either a mapped value that resolves for that contact or an If empty: fallback — WhatsApp rejects a template with a missing parameter, so IcloneU stops the send instead of delivering a broken message, and the error names the variable or button that came up empty. Open the node and give that slot a fallback.
Yes. The node picker carries Enroll in Sequence and Exit Sequence in the Contacts group. Enrolment only happens if the sequence is Live, and it still honours the sequence's re-entry policy and its Enroll only if filter; when it can't enrol, the workflow carries on rather than stopping. Exit Sequence ends an in-flight subscription and leaves that contact at Exited; if there was no active subscription it does nothing. The drip itself is covered in Sequences.
Use Set Custom Field with the Operation set to Increase by (or Decrease by) and put the step size in Amount — leave it empty and it moves by 1. A field that is empty or not a number counts as 0, so you don't have to seed it. Then branch on the total with a Condition: between is handy for "between 3 and 5 entries".
No. Archive Contact is a reversible soft-archive — it hides the contact from your list and excludes them from automated broadcasts and sequences, but their conversation history is kept and you can restore them from their profile. Permanent removal is the separate Erase personal data action on the contact profile.
Three: Open website (opens a URL), Call number (dials a phone number) and Continue in workflow (routes the tap to whatever you wire to that button's output port). You set each button's Button title and Button type in the button editor. Buttons attach to text, image and video elements.
Because there's nothing for them to point at yet. Integration lists the connections from the Connectors tab and Issue Code lists the pools from the Code Pools tab — both tabs come with every paid plan. Create a connection or a code pool there and the picker fills in. Don't leave one half-configured in a published flow, though: an Integration node with no connection leaves by its Error port, and with nothing wired there the run stops at that node.
Nothing — it's a sticky note for your team. The Comment node has no ports and the engine skips it, so it never sends anything or affects the run. It's purely there to annotate the canvas.
Notify Admin posts an in-app alert to your team, which is the channel to count on. There's also an Email delivery toggle, but rely on the in-app alert for anything time-sensitive.
Last updated August 25, 2026 · Automations