Add workflow actions, delays, and branches
Last updated: August 10, 2026
After a trigger enrolls a contact, workflow steps run in the order shown on the canvas. A step can perform an Action, wait for a Delay, or choose a path through a Branch.
Add a step
Open a new or existing workflow.
Select the plus button at the point where the new step should run.
Choose an Action, Delay, or Branch.
Configure the step and select Save.
Select Save Workflow or Update Workflow to save the canvas.
You can select a node in the canvas to edit it. Use the trash button on the node tile to delete that step, and review the path before saving to make sure the remaining nodes are still connected in the intended order.
Different workflow actions
Action | What it does | Channels | Important conditions |
|---|---|---|---|
Send Message | Sends configured text to the contact | Instagram, Facebook | Delivery still depends on the channel's messaging rules |
Send Voice Message | Sends a recorded clip or Text-to-Speech output | Instagram; Facebook | Text-to-Speech requires ElevenLabs. A TTS failure falls back to text |
Change Autopilot Handling | Enables or disables Autopilot handling for the contact | Instagram, Facebook | - |
Reply to Comment | Sends a reply to the comment that started the run | Instagram, Facebook | Use with a |
Add Contact Tag | Adds one or more tags to the contact | Instagram, Facebook | Can start a dependent tag workflow when workflow chaining is enabled |
Remove Contact Tag | Removes one or more tags to the contact | Instagram, Facebook | Can start a dependent tag workflow when workflow chaining is enabled |
Change Contact State | Opens / Archive / Spam the conversation | Instagram, Facebook | - |
Change Contact Owner | Assigns to one owner or distributes assignments across teammates when workflow run for multiple | Instagram, Facebook | - |
Trigger Webhook | Sends workflow and contact data to an external HTTPS endpoint | Instagram, Facebook | - |
AI Pick | Selects one reply from configure set of messages based on prompt | Instagram, Facebook | - |
Winly blocks a channel selection when any trigger or action in the workflow is incompatible with that channel. See Configure workflow channels and settings.
Delay Step
A Delay step adds a pause in the workflow for the specified time period. When a workflow is currently in delay step, the workflow run for that instance appears In Progress until the next step becomes eligible to execute.
Delay timing depends on queue processing. Treat the configured duration as the minimum wait, not an exact delivery time.
Branch Step
A Branch evaluates the contact at that stage and sends the run down the first matching conditional path. Every branch also has a Fallback path for contacts that match none of the conditions. A branch path can continue to more steps or end the workflow.
Condition | What it does | Supported comparison |
|---|---|---|
Contact Owner | Checks the currently assigned owner | Equals one owner or is one of several owners |
Contact Status | Checks the conversation status | |
Contact Tags | Checks the tags currently assigned to the contact | Equals one tag or contains any selected tag |
Contact Verified | Checks whether the contact's connected profile is verified | Is true or false |
Followers or Following | Compares the contact's follower or following count | Greater than or less than a number |
Total Messages Received | Compares the number of incoming messages recorded for the contact | Greater than or less than a number |
Previous Message Received | Checks how long ago the previous incoming message was received | Compare the previous incoming-message time with a duration |
No Messages Received Since Start | Checks whether the contact has replied since the current workflow run started | - |
Incoming Event Text | Checks the message or comment text that started the workflow run | Contains any configured keyword; Applicable only for Any Message and Any Comment triggers |
Conditions in the same group must all match. The first matching branch wins, so place the most specific branch before broader branches.
Incoming Event Text is conditionally visible in the branch field selector. It appears only when the workflow uses an Any Message or Any Comment trigger. It is not available for Message Text, Comment Text, Contact Tag, or Schedule triggers.
Example: Route pricing-related messages
Use this branch to identify pricing intent without creating a separate workflow for every keyword.
Select Any Message as the workflow trigger.
Add a Branch after the trigger.
Configure the first path:
Condition: Incoming Event Text
Keywords:
pricing,cost, andquoteContinue with: Add Contact Tag and select a pricing-interest tag, then assign the appropriate sales owner.
Configure the Fallback path to continue with the normal response sequence or end the workflow.
Keyword matching ignores uppercase and lowercase and checks for the configured words within the incoming event text. For example, Can you send PRICING? matches the pricing keyword.
Example: Route qualified contacts by activity
Use multiple conditions in one branch when every condition must be true.
Path | Conditions |
|---|---|
High-engagement contact | Contact Status equals Open AND Total Messages Received is greater than 5 |
Archived contact | Contact Status equals Archive |
Fallback | No other path matched |
Place the more specific high-engagement path first. If an open contact has more than five received messages, Winly selects that path without evaluating later paths.
Example: Follow up only when the contact has not replied
This pattern prevents a scheduled follow-up from being sent after the contact has already responded.
Start with the appropriate message or tag trigger.
Send the initial message.
Add a Delay for the required follow-up period.
Add a Branch with No Messages Received Since Start.
Continue that path to the follow-up message.
Configure the Fallback path to end the workflow because the contact replied after the run started.
After testing, open Workflow Runs and confirm that a non-responsive contact takes the follow-up path while a contact who replied takes Fallback.
Send a text message
Enter the message exactly as it should be sent. Use @first_name where you want Winly to insert the contact's first name.
Context | How the action behaves |
|---|---|
Instagram or Facebook direct conversation | Sends through as direct message, subject to the available messaging window |
Workflow started by an Instagram or Facebook comment | Uses the triggering comment context; make sure the intended result is a private message rather than a public comment reply |
Message actions are not guaranteed deliveries. A channel can reject a message because of an expired messaging window, missing connection, invalid recipient, or platform restriction. See Compose and send messages for the current direct-message and comment limitations.
Send a voice message
Choose one source:
Source | Configuration | Runtime behavior |
|---|---|---|
Recorded audio | Select one saved recording from the media library | Sends the stored audio file; recordings must be no larger than 25 MB |
Text to speech | Enter up to 5,000 characters | Generates audio with the configured voice service; if generation or delivery fails, it will be sent as a text message |
Reply to a comment
Use Reply to Comment after an Instagram or Facebook comment trigger. The action needs the triggering comment to know where to post the reply.
Choose a reply mode:
Mode | Result |
|---|---|
Single reply | Uses the one configured reply every time |
Rotate replies | Randomly selects from at least two configured replies |
If the platform reports that the comment was already replied to, Winly will skip the duplicate reply and allow the workflow to continue.
For manual comment handling, see Handle Comments.
Update contact tags, state, or owner
Add or remove tags
Select one or more existing tags. Create and organize the required tags before building the workflow.
An Add Contact Tag action can start another active Contact Tag workflow only when the destination workflow allows chaining.
Change contact state
Use Open or Archive or Spam to change the state of the contact.
Change contact owner
Choose one assignment mode:
Mode | Configuration | Result |
|---|---|---|
Single owner | Select one teammate | Every matching run assigns that teammate |
Multiple owners | Select teammates and assign percentages totaling 100% | Assignments are distributed toward the configured weights over time |
Weighted distribution is not a guarantee that a small sample of runs will match the percentages exactly.
Change Autopilot handling
Choose whether the workflow should turn Let Autopilot handle this conversation on or off for the contact. This action changes the handling flag; it does not assign a different contact owner.
The action can fail when Autopilot is already owned by the Autopilot bot. Review handling changes in the Inbox after a test run. See Autopilot Handling Conversations.
Trigger a webhook
Enter the destination HTTPS URL. Winly sends a JSON POST request that includes workflow, contact, and trigger context. The request times out after 60 seconds and can be attempted up to three times, with a short wait between attempts.
Your receiving service should:
Accept JSON
POSTrequests over HTTPS.Respond successfully within 60 seconds.
Treat repeated requests as the same event so a retry does not create duplicate work.
Return a non-error response only after it has accepted the payload.
Avoid placing credentials or private tokens in the URL.
Webhook payloads can include contact details, message snippets, and AI notes. Send them only to a service approved to receive customer data.
Let AI pick a message
Add one or more clear candidate messages and enter a non-empty custom instruction describing which response fits each situation. Although the interface presents the custom instruction as optional, an empty value will be rejected when the workflow is saved. At runtime, the action reviews the provided context and selects a candidate.
Use candidates that are each safe to send without editing. Test ambiguous, empty, and unsupported-message cases before activation.
Check the workflow run
After the workflow starts for a contact:
Open Workflows and select Runs.
Search for the workflow name or enter the contact ID.
Expand the run to view its trigger, actions, delays, and selected branch.
Check the status, timeline, and details for each step.
If a step failed, review the final successful step and the visible failure details before changing the workflow.
See Review workflow runs for run statuses, filters, step history, and troubleshooting guidance.