In the Workflows builder, a workflow's start points are its triggers — shown as nodes on the canvas. Open a workflow and click Add Trigger to pick one from a categorized, searchable list. Connected services add their own event triggers on top of the catalogue below: a connected store contributes commerce events — orders placed, paid or fulfilled, shipment updates, abandoned checkouts, carts and browsing — that appear in the same list once the connector is set up, with their event fields available as run variables like any other trigger's. This guide walks the whole catalogue channel by channel, then covers how each trigger is matched and the two switches that sit on almost all of them.
A workflow does nothing until something sets it off, and that something is a trigger — you can add more than one. Each trigger you add starts Enabled, and the picker only offers the triggers that fit the account linked to your workflow, so link the right connected account first and the channel you want will appear.
Adding a trigger
Each trigger shows up as a node on the canvas. The Add Trigger button opens the picker, headed Start automation when…, with a category rail on the left and a searchable list on the right. Click a trigger to drop it in; select the node afterwards to open its settings, and use Delete Trigger to remove one.
Open the picker
In a workflow, click Add Trigger. The picker opens under the heading Start automation when….
Find a trigger
Browse the category rail — Messenger, Instagram, WhatsApp, Telegram, Email, Contact events, External, AI — or type into Search triggers… to match across every category at once.
Add and configure it
Click a trigger to add it to the canvas; it arrives Enabled. Select the node to open its match settings in the drawer on the right.
The list is scoped to the account linked to this workflow — a Facebook workflow won't show WhatsApp triggers, and vice versa. The platform-agnostic triggers (contact events, the inbound webhook, connector events, the Clone handoff and the Clone request) always show. If a channel's triggers are missing, link the connected account for that channel first.
Messenger triggers
These fire on the Facebook Messenger account linked to your workflow. Post comments carries the richest set of options (see Matching your trigger below).
| Trigger | Fires when |
|---|---|
| Ad click | User clicks a Facebook ad |
| Post comments | User comments on your post |
| Direct messages | User sends a direct message |
| QR code / ref link | User opens a chat from your QR code or m.me ref link |
Instagram triggers
Triggers on your linked Instagram account, covering DMs, comments, story replies and story mentions, ads and live.
| Trigger | Fires when |
|---|---|
| Post or Reel comments | User comments on your Post or Reel |
| Story reply | User replies to your Story |
| Story mention | User mentions you in their Story |
| Instagram message | User sends an Instagram direct message |
| Instagram ad click | User clicks an Instagram ad |
| Live comments | User comments on your Live |
| Instagram referral link | User clicks an Instagram referral link |
A mention arrives as a DM carrying no text, so IcloneU deliberately keeps it out of the chat pipeline: no paused flow resumes on it, and the Clone is never asked for a reply. A Story mention trigger is therefore the only way to respond to one. Instagram opens its normal reply window when someone mentions you, so a message step inside the flow lands in the one-to-one thread as usual. A Story reply is a different event — it carries text, runs the full DM pipeline, and does get a Clone answer.
There is nothing to configure on Story mention: it fires on presence, and its drawer holds a single line — Fires whenever someone mentions your account in their Instagram Story. The story media link is available in the flow as {{rv_story_mention_url}}. No further configuration.
WhatsApp triggers
Triggers on your linked WhatsApp Business account.
| Trigger | Fires when |
|---|---|
| WhatsApp message | User sends a WhatsApp message |
| WhatsApp link | User clicks a wa.me link |
Telegram triggers
Triggers on your linked Telegram bot. All three match on keywords and message intent.
| Trigger | Fires when |
|---|---|
| Telegram message | User sends a Telegram message |
| Bot command | User sends a /command to your bot |
| Inline button click | User clicks an inline keyboard button |
Email triggers
An inbound email has a richer envelope than a chat message, so it gets five triggers — one on the body, one on the subject, two on the addresses, and one on attachments. Email is an Expert channel: these five appear once an email address is connected, which needs Expert or Enterprise.
| Trigger | Fires when |
|---|---|
| Email received | An email arrives in your inbox |
| Subject matches | An email arrives whose subject contains your keywords |
| From sender or domain | An email arrives from a specific address or domain |
| Sent to address | An email arrives at a specific address or alias (support@, sales@…) |
| Has attachment | An email arrives with at least one attachment |
Contact-event triggers
These fire on a change to the contact record itself, not on an inbound message — so they run whatever channel the contact came from, and always appear in the picker. Instead of keywords, each one picks a subject to watch.
| Trigger | Fires when |
|---|---|
| New contact created | A new contact is created |
| Custom field changed | A custom field value changes |
| System field changed | A built-in contact field (name, email, ...) changes |
| Tag applied | A tag is applied to a contact |
| Tag removed | A tag is removed from a contact |
| Subscribed to sequence | A contact subscribes to a sequence |
| Unsubscribed from sequence | A contact unsubscribes from a sequence |
| Date/time occurred | A specific date/time is reached |
| Segment entered | Contact enters a saved segment |
Whether a contact is in a segment is a question about the whole contact record — spend, orders, tags, reachability — so it can't be answered by an event the way a tag change can. A background sweep re-runs each watched segment every 15 minutes and fires on whoever is newly inside. The drawer states the rule: Fires when a contact newly matches the selected segment (checked every 15 minutes). Contacts already in the segment when you save don't fire; a contact that leaves and re-enters fires again.
- You must pick a concrete segment. The Segment box has no Any option — the sweep has nothing to resolve without one — so a trigger you never finished configuring silently never fires.
- The first sweep after you save is a headcount, not a send. It records who is already in the segment without firing for any of them, which is what stops a new trigger on an old segment from messaging your whole list at once.
- A busy sweep is spread out, not truncated. At most 200 new members per segment fire on any one pass; the rest are picked up on the next one, so nobody is dropped.
- It reaches one channel. The trigger fires on the entering contact's own platform, so only contacts on the same channel as the workflow's run account are reached — a Telegram contact entering the segment doesn't start a WhatsApp workflow.
Only active saved segments appear in the picker, and the segment's own criteria are what decide membership — editing those criteria changes who the trigger fires for, with no change to the workflow.
External: inbound webhook and connector events
The Inbound webhook trigger (category External) starts a workflow when another system POSTs to a private URL — an order tool, a form, your own backend. It fires whenever An external system POSTs to a unique URL to start this automation.
Open the trigger and click Generate webhook URL to mint the Endpoint. The token in that URL is the secret, so keep it private; Regenerate URL replaces it and instantly invalidates the old one. The JSON body you POST carries a contact object that identifies (or creates) the contact to run for, and a data object whose fields become {{rv_*}} run variables inside the flow. On a WhatsApp flow, the run messages the contact's own WhatsApp number, or else the phone on file, or else a phone sent in that contact object — never an email address. If none of them is a usable number (at least 10 digits, country code included), the flow still sets its tags and fields, but its message steps are skipped and it enrols nobody in a sequence.
There is no View available variables button here — that flyout exists only on connector-event triggers, which know their own payload — so the naming rules are worth spelling out. Every key in data becomes a variable. Characters that aren't letters, digits or underscores become underscores, because that is all a token is allowed to contain. Nested objects flatten too, their path joined with underscores, up to three names deep; anything deeper stays reachable only as the raw JSON of the object above it. Arrays are never expanded item by item — you get the array's raw JSON, ready for an External Request or an AI step to read. And a key you send at the top level always wins a name collision with a flattened path.
Worked through: a body whose data is {"order":{"id":7,"customer":{"email":"a@b.c"}}} gives you four tokens — {{rv_order}} (the order object as raw JSON), {{rv_order_id}}, {{rv_order_customer}} (raw JSON again) and {{rv_order_customer_email}}. Go one level deeper — an address object inside customer — and you would still get {{rv_order_customer_address}} as raw JSON, but its own fields would not get tokens of their own.
A POST larger than 256 KB is rejected before the workflow starts, and nothing runs. The cap exists because the URL token is the only thing authenticating this endpoint, so it must not be able to make IcloneU buffer an arbitrarily large body. Send the identifiers and the handful of fields the flow actually reads — not a whole export.
Connector event sits in the same External category and fires when a connected platform sends the event you pick under Event — the dropdown groups events under each connected platform, so what's in the list depends on what you've connected. A Shopify store contributes seven: Order created, Order paid, Order fulfilled, Order shipment update, Checkout abandoned, Cart abandoned and Product browsed, not bought; a Hotmart account contributes Purchase approved, Checkout abandoned and Subscription canceled; WooCommerce and Wix each contribute Checkout abandoned. Other connectors can declare events of their own, so open the dropdown on your own account to see the real list. The match is platform-wide, not per store: with more than one connection of the same platform the event name shows (all connections), and any of those connections' events start the workflow.
Order created is the newest of the Shopify events and the one people most often want. It fires the moment an order is placed — before payment — which makes it the entry point for a cash-on-delivery confirmation flow. Keep using Order paid when you need a confirmed purchase; that is still the earliest signal that money actually moved. Order created is also the only Shopify event carrying {{rv_is_cod}}, {{rv_payment_method}} and {{rv_financial_status}}.
{{rv_is_cod}} is read off the gateway's name, not off a flag Shopify sets: it recognises Shopify's own Cash on Delivery (COD) plus the renames Mexican stores commonly use, contra entrega and contraentrega. A store on a custom manual gateway with some other name will come through as not cash-on-delivery, so branch on {{rv_payment_method}} — the raw gateway name — instead of trusting the flag.
If the event you pick belongs to a connector that isn't connected on the account you're building in — after installing a recipe, importing a flow, removing a connection, or connecting the store on a sibling account — the trigger can never fire, because the incoming webhook is only routed through that account's own connections. The editor shows a strip above the canvas saying This flow is triggered by a connector event, but that connector is not connected on this account — the trigger will never fire. with a Go to Connectors link, and marks the trigger card with an amber triangle. Saving is not blocked, so you can go and connect the platform. One catch: the editor reads the connection list once, when it opens — so after connecting, close the workflow and reopen it before you expect the warning to clear. Your chosen event stays selected the whole time.
AI: Clone handoff and Clone request
The Clone handoff requested trigger (category AI) fires the moment your Clone asks to pass a live conversation to a human — The clone asks to hand the conversation to a human (can't answer, frustration, etc.). Use it to notify a teammate, open the inbox, or route the person somewhere specific.
You can scope it to one Reason — Low AI confidence, User requested human, Frustration detected, Matched a "requires human" topic or Conversation loop — or leave it on Any reason to run on every handoff. The reason and the conversation are available in the flow as {{rv_handoff_reason}} and {{rv_conversation_id}}.
The Clone request trigger, also in AI, works the other way round: it turns the workflow into an action your Clone can take in the middle of a conversation — The clone starts this flow on purpose, when the situation you describe happens in a conversation. The Clone decides when; you decide what happens, because the flow's own steps tag the contact, save a field, notify your team or message the customer exactly as you built them. The drawer sums it up: This flow becomes an action your clone can take. Describe when to use it; the clone starts it for the customer it is talking to, and is told whether it worked.
- Action name — what the Clone calls the action. Spaces and accents become underscores, and The clone sees this action as shows the result, such as register_hold.
- When should the clone use it? — the situation, in plain words. It is required: Required. Without a description the clone is never offered this action.
- Details the clone passes in — optional values the Clone fills in when it starts the flow, such as a date or an event id. Each one is available in this flow as a variable. Describe it so the clone knows what to put there. Anything not listed here is ignored. A detail named event_id arrives as {{rv_event_id}}, and you can mark one Required.
Your Clone is offered the action once a Live automation has an enabled Clone request trigger on one of the channel accounts it answers. It can use it only in private chats — never when it replies to a public comment — and it runs the copy of the flow that belongs to the conversation's own channel; on a channel with no copy, the Clone is told the action isn't available there. It runs the flow for the person it is talking to, waits up to about 25 seconds for the result, and is told whether the flow finished, stopped to wait for a later step, is still running or failed, and whether the flow already messaged the customer, so it doesn't repeat it. The same request with the same details in the same conversation within 90 seconds runs once; otherwise it runs on every request, so Fire every time makes no difference here.
Runs in real conversations on this flow's channel. Playground chats have no contact, so the clone is told the action isn't available there. Changes reach a conversation the next time it starts fresh. So test a Clone request flow from a real chat on its channel, with the automation Live.
Matching your trigger
Select a trigger node and the drawer shows only the match controls that fit its shape. Leave a match field blank and the trigger fires on any event of that kind.
Text triggers — direct messages, comments, story and live replies, all the Telegram triggers, and the email body and subject — share the Trigger matching group: Define keywords to match exactly, or describe the message intent for AI-based matching. Add words under Comments include these keywords and rule some out under Comments exclude these keywords (both case-insensitive), turn on Match misspelled keywords to forgive typos, or describe the goal under Message intent for AI-based matching.
Post and Reel comment triggers add a post selector — Any post, or a Specific post chosen from the last 30 days — so a workflow can watch every post or just one.
Facebook Post comments and Instagram Post or Reel comments both offer Auto-respond in public feed — it opens an Auto-Response group with an AI-Generated Response toggle — and First level comments only, which for now filters only on Facebook: on Instagram a reply inside a comment thread still fires the trigger. Like the comment is on Facebook post comments only: Instagram doesn't let IcloneU like a comment for you.
Ad and referral triggers match a code rather than text. Ad clicks match an Ad ID (blank = Any ad); QR and ref-link triggers match a Ref code (blank = Any link or QR code) and show Your link plus a Download QR button once a connected account is linked — until then you'll see Link a connected account to this automation to generate the shareable link and QR code.
WhatsApp link carries no hidden referral, so it matches the text of your link's Pre-filled message — keep that message distinctive. The WhatsApp number field only builds the wa.me link and QR; it isn't used to match.
The email envelope triggers match without keywords: From sender or domain takes a full address or a whole domain like @acme.com, Sent to address routes by recipient or alias, and Has attachment fires on any inbound email carrying at least one file, with no configuration at all.
Contact-event triggers show an Event matching subject instead of keywords: a tag (blank = Any tag), a system or custom field (blank = Any field), a Segment for Segment entered — which has no blank-means-any option, as above — or, for Date/time occurred, a When to fire choice of Relative to a contact date field or At a specific date and time.
In date-field mode the first thing the drawer asks for is a Date source, and there are two. Custom field is the original one: you type the Contact date field that holds the date, a birthday or a renewal date you store on each contact. Last interaction (built-in) uses a date IcloneU maintains for you, with nothing to type. Either way you then set an Offset (days), a Time of day, and the Repeats every year checkbox.
This source anchors on the last message the contact sent you, and nothing else moves it — not a reply from your Clone, not an ad or link click. Set the Offset (days) to 30 and you have a "no reply in 30 days" trigger. Because the anchor moves forward every time that contact writes again, the due moment moves with it: the trigger re-arms instead of firing once and going quiet, which is exactly the behaviour a win-back or hygiene flow needs. Picking this source also unticks Repeats every year for you — "N days after the last message" is a one-off, not an anniversary — though you can tick it back on.
The Last interaction time shown on the Contacts surface also moves on activity that isn't an inbound message — an ad or referral click with no message will freshen it. The built-in date source counts only messages the contact actually sent. So a contact can read as active in the Contacts list and still be 45 days silent as far as this trigger is concerned. That is deliberate: a sunset flow should measure whether someone is still talking to you.
That checkbox decides whether the contact's date comes back around: On: fires on this date every year (birthdays, anniversaries). Off: fires once at the field's own date (renewals, expirations, invoices). With Custom field as the source it arrives ticked, so leave it for a birthday flow and untick it for a renewal, expiry or invoice reminder that should fire once. The Offset (days) is applied to the contact's date first, so with the annual repeat on it's the shifted month and day that come back each year, a 29 February one falling on the 28th in years that don't have one. The Time of day is read in the same Timezone your account's reply timing uses, falling back to UTC while none is set.
Connector event triggers match on the Event you pick from the dropdown. Once an event is selected, a View available variables button appears — click it to open the list of that event's fields with their {{rv_*}} tokens, ready to use in any later step.
The remaining triggers carry their own match, or none. Story mention has no match settings at all — it fires on presence, and its drawer is a single explanatory line. Clone handoff requested scopes by Reason, as described above; Clone request has no match settings — the Clone starts it when your When should the clone use it? text fits the conversation; and the Inbound webhook's match is its private Endpoint URL — anything that POSTs there starts the flow.
Two switches on every trigger
Whatever its shape, almost every trigger carries the same two switches at the top of its drawer.
- Enabled — the on/off switch for the trigger. New triggers arrive enabled; turn it off to pause a trigger without deleting it.
- Fire every time — controls repeats on message and referral triggers (direct messages, emails, ad clicks, QR codes, ref and wa.me links). Off (the default), such a trigger won't start again for a contact once a run for them has paused — on a message whose Continue in workflow buttons lead to a next step (a typed reply resumes it too), on a delay longer than 30 seconds, or in an AI Agent conversation — and then resumed; a flow that never pauses, including one that asks a plain-text question, keeps no record, so it starts again on every match. On, it re-fires on every match. The other triggers start their flow on every occurrence either way — comments, Story replies and mentions, bot commands and button clicks, tag, field and sequence changes, segment entries, the inbound webhook, connector events, the Clone handoff and Clone requests. Leave it off on Date/time occurred: switched on, that trigger fires again on every 15-minute check for up to 18 hours after the due time; off, it fires once per occurrence, and an annual date still comes back next year.
By default, a trigger fires only the first time it matches for a given contact — so an onboarding flow doesn't restart every time the user sends another message. Turn this on to let the trigger re-fire on every match (useful for catch-all triggers or "always-on" reply rules).
Frequently asked
Yes. A workflow can carry several triggers, and any Enabled one that matches will start it — handy for catching the same intent across, say, a comment and a DM. Add each with Add Trigger; remove one with Delete Trigger.
The picker only lists triggers for the account linked to that workflow, so a Facebook workflow won't show WhatsApp triggers. Link the connected account for the channel you want and its triggers appear. The platform-agnostic triggers — contact events, the inbound webhook, connector events, the Clone handoff and the Clone request — always show.
Keywords match the literal words in the message, with Match misspelled keywords to forgive typos. Message intent hands the message to the AI and matches on meaning — you describe the goal, e.g. Person wants to..., and it can fire even when the wording is different. Use either or both.
It depends on the trigger. A message or referral trigger won't start again for a contact once a run of its flow for them has paused — on a message whose Continue in workflow buttons lead to a next step (a typed reply resumes it too), a delay longer than 30 seconds, or an AI Agent conversation — and then resumed, so an onboarding flow that asks its question with such buttons doesn't restart on their next message. A flow with no pause — one that asks a plain-text question included — keeps no record and starts on every match, whatever the setting — and since a direct message that starts a flow is the flow's to answer, the Clone doesn't reply to it. Turn on Fire every time to re-fire on every match in all cases — the right choice for catch-all or always-on reply rules. Comment, Story, bot-command and button triggers, tag, field, sequence and segment triggers, the inbound webhook, connector events, the Clone handoff and Clone requests start the flow every time anyway, and Date/time occurred fires once per occurrence as long as Fire every time stays off on it.
Only if you want it to. Date/time occurred in Relative to a contact date field mode ships with Repeats every year ticked, which is right for birthdays and anniversaries. Untick it for renewals, expirations and invoice dates: the trigger then fires once, at the date the field itself holds, instead of coming back the following year.
Yes. Auto-respond in public feed is offered on Instagram Post or Reel comments as well as on Facebook Post comments. First level comments only appears on both too, but on Instagram it doesn't filter yet — a reply inside a thread still fires the trigger. Only Like the comment is Facebook-only.
Most often the recipe's trigger is a Connector event for a platform you haven't connected on this account yet. The trigger can't fire, because the incoming webhook only routes through this account's own connections. Open the workflow: if that's the cause, a strip above the canvas reads This flow is triggered by a connector event, but that connector is not connected on this account — the trigger will never fire. and offers a Go to Connectors link. Connect the platform, then close and reopen the workflow — the editor checks your connections once when it opens, so the warning won't clear until you do.
No, and that's on purpose. A story mention carries no text, so there's nothing for the Clone to answer — IcloneU skips the chat pipeline entirely and only runs a Story mention automation. If you want a thank-you or a discount to go out when someone tags you in their Story, build it as a workflow on that trigger; there's no setting that makes the Clone do it. A Story reply, which does carry text, is answered like any other DM.
Yes — Segment entered fires when a contact newly matches a saved segment, which is how you turn a criteria list (say, spent over a threshold and no purchase in 60 days) into a flow. It runs on a 15-minute sweep rather than instantly, it needs a specific segment chosen, and its first pass after you save deliberately fires for nobody so an existing segment isn't blasted.
Last updated September 22, 2026 · Automations