Workflow Steps
Workflow steps are the actions a workflow runs after its trigger. Resool steps can talk to the customer (send messages, ask questions, send WhatsApp templates), control the path (branch, wait, jump, end), update the contact and the conversation, hand the conversation to an AI agent, call any HTTP endpoint, and work in the apps you've connected: add rows to Google Sheets, post to Slack, create invoices, tasks, tickets, meetings and store updates.
How to add a step
- Open a workflow and click + under the trigger or between two steps.
- In Add a step, pick a step. Steps are grouped into Messaging, Logic, Contact, Conversation, Apps, Stores, Accounting, Tasks & docs and Files.
- Fill in the step in the right panel. A step with missing fields shows a warning and blocks publishing until you fix it.
- To remove a step, select it and click Delete step.
Workflows › open a workflow › click + under a step
The "Add a step" menu with all groups visible: Messaging, Logic, Contact, Conversation, Apps, Stores, Accounting, Tasks & docs and Files, each step with its icon and one-line description.
File: screenshots/workflow-steps-add-menu.png
Messaging steps
| Step | What it does |
|---|---|
| Send a message | Sends a text to the customer in the conversation. |
| Send a WhatsApp template | Sends an approved WhatsApp template. Works outside the 24-hour window and can open a conversation with a contact who has none yet. |
| Ask a question | Sends a question, waits for the customer's reply and saves it. |
| AI agent | Hands the conversation to the AI agent on that channel and ends the workflow. See AI Agents. |
Ask a question
- Question: the text the customer sees.
- Buttons: up to 10 quick replies the customer can tap (optional, up to 20 characters each).
- Save the answer to: An internal note, Contact name, Contact email, Contact phone or A custom field (enter its Field key).
- Give up after (minutes): how long to wait for an answer, up to 7 days. Leave it empty to wait indefinitely.
- If nobody answers, go to: the path to take when time runs out.
On the canvas a question has two paths, Answered and No answer. Use {{answer}} in later steps to repeat what the customer said.
Workflows › open a workflow › select an Ask a question step
The step panel with a question, two buttons (Sales, Support), Save the answer to set to A custom field with a field key, and Give up after set to 60 minutes; on the canvas the Answered and No answer paths.
File: screenshots/workflow-steps-ask-question.png
Send a WhatsApp template
- Pick a Template (only approved templates are sent), or click New to create one.
- Fill in each Variable (
{{1}},{{2}}…). You can use workflow variables such as{{contact.name}}. - Turn on Wait for the reply to pause until the customer taps one of the template's quick-reply buttons (for example Confirm or Cancel), then add a Branch after it on the button.
If a template isn't approved by Meta yet, the step is skipped until it is. See WhatsApp Message Templates.
Logic steps
| Step | What it does |
|---|---|
| Branch | Sends the contact down the first branch whose conditions match, from top to bottom. When none match, the contact takes the Else path. |
| Wait | Pauses for a set number of minutes (up to 30 days) before the next step. |
| Jump to | Continues from another step (Go to step). Useful to repeat a question. |
| End | Stops the workflow here. |
Branch
Each branch has a Branch name and works in one of two modes:
- Button reply: when the branch comes right after a question with buttons or a template that waits for a reply, pick the buttons under Button reply is.
- Conditions: add up to 10 conditions and choose Match all conditions or Match any condition.
| Condition | Operators |
|---|---|
| Channel type, Channel | is, is not |
| Message text | contains any of, contains none of, is exactly |
| Contact tag, Conversation label | has, doesn't have |
| Lifecycle stage | is, is not |
| Working hours | inside working hours, outside working hours |
| New contact | the contact is new |
| Language | is Arabic or English |
You can have up to 8 branches plus Else. Drag branches to change their order.
Workflows › open a workflow › select a Branch step
The Branch panel with two branch cards (one in Button reply mode with "Sales" selected, one in Conditions mode with "Working hours outside working hours"), the Add branch button and the Else note; the coloured paths on the canvas.
File: screenshots/workflow-steps-branch.png
Contact steps
| Step | What it does |
|---|---|
| Update contact field | Sets Name, Email, Phone, Language (ar / en) or a Custom field to a value. Values can include variables. |
| Add or remove tag | Adds or removes a tag on the contact. |
| Update lifecycle | Moves the contact to a lifecycle stage. |
Conversation steps
| Step | What it does |
|---|---|
| Assign to | Assigns the conversation to A team, A teammate, or Nobody (unassign). |
| Open or close conversation | Open the conversation, Mark as pending or Close the conversation. |
| Add comment | Adds an internal note to the conversation. Customers never see it. |
HTTP request
The HTTP request step (in the Apps group) calls any URL with the contact's data, for example to update your own system.
- Method: GET, POST, PUT, PATCH or DELETE.
- URL: must start with
https://. Private and local addresses are refused. - Headers: up to 10, for example an authorization header for your API.
- JSON body: variables like
{{contact.name}}are filled in and escaped for JSON.
For the opposite direction (another system starting a workflow), use the Incoming Webhook trigger. See Workflow Triggers.
App steps
App steps appear once you connect the app in Settings › Apps. If an app isn't connected, the step shows a Connect hint with a link.
| Group | Step | App |
|---|---|---|
| Apps | Google Sheets row: adds a row with the contact's data, or updates the row matching a column | Google Sheets |
| Apps | Send Slack message | Slack |
| Apps | Send Discord message | Discord |
| Apps | Create Zendesk ticket (optionally with the conversation in the description) | Zendesk |
| Apps | Create Zoom meeting | Zoom |
| Apps | Create Webex meeting | Webex |
| Apps | Add / update Mailchimp subscriber | Mailchimp |
| Apps | Add / update email subscriber | Klaviyo, Constant Contact, GetResponse, Kit |
| Stores | Update order status, Add order tag or note, Create or update customer | Shopify, WooCommerce, Salla, EasyOrders, Wix, BigCommerce, Square, Foodics, Gumroad |
| Accounting | Create invoice, Create customer | Wafeq, Odoo, QuickBooks, Xero, FreshBooks, Wave, Zoho Books |
| Tasks & docs | Create Notion database item | Notion |
| Tasks & docs | Create Asana task | Asana |
| Tasks & docs | Create Trello card | Trello |
| Tasks & docs | Create / update Airtable record | Airtable |
| Tasks & docs | Create Jira issue | Jira |
| Tasks & docs | Create GitHub issue | GitHub |
| Tasks & docs | Create ClickUp task | ClickUp |
| Tasks & docs | Create monday.com item | monday.com |
| Tasks & docs | Create Linear issue | Linear |
| Tasks & docs | Create Todoist task | Todoist |
| Tasks & docs | Create Basecamp to-do | Basecamp |
| Tasks & docs | Add Smartsheet row | Smartsheet |
| Tasks & docs | Create Google Task | Google Tasks |
| Files | Save conversation to Dropbox (transcript, optionally with attachments) | Dropbox |
| Files | Save conversation to Box | Box |
Store steps depend on what each store allows. For example, Foodics and Gumroad don't let other apps change an order's status, and the step panel explains how each store maps the status you pick.
Variables from app steps
Some app steps leave values that later steps can send to the customer:
- Create Zoom meeting:
{{zoom.join_url}},{{zoom.start_time}},{{zoom.topic}},{{zoom.password}},{{zoom.meeting_id}}. - Create Webex meeting: the same fields as
{{webex.…}}. - Create invoice:
{{invoice.number}},{{invoice.total}},{{invoice.currency}},{{invoice.due_date}},{{invoice.status}},{{invoice.id}}.
For example: Create invoice, then Send a message with "Your invoice {{invoice.number}} for {{invoice.total}} {{invoice.currency}} is ready."
Notes and limitations
- A workflow can have up to 100 steps; a branch step up to 8 branches; a wait up to 30 days; a question timeout up to 7 days.
- Messages, questions, assignments, status changes, comments and the AI agent step need a conversation. For contacts without one (for example from a store or form trigger), these steps are skipped.
- Regular messages on WhatsApp can only reach a customer inside the 24-hour window. Use Send a WhatsApp template outside it. See Messaging Windows and Templates.
FAQ and troubleshooting
Publishing says "Step 3 is incomplete". What do I do?
The builder selects the step for you. Fill in the highlighted fields (for example the message text, the template, the team or the tag) and publish again.
My Branch always goes to Else.
What you can do:
- Check that each branch has at least one condition, or at least one button picked in Button reply mode.
- With Match all conditions, every condition must be true. Try Match any condition.
- For Message text … is exactly, the reply must match the text exactly. Use contains any of for looser matching.
Can a workflow wait for a reply to a WhatsApp template?
Yes. Turn on Wait for the reply in the template step, then add a Branch in Button reply mode right after it.
What happens after the AI agent step?
The workflow ends, the conversation is unassigned from any teammate, and the active AI agent that answers on that channel takes over, following its own hand-off rules. If no active AI agent answers on the conversation's channel, the step fails and the conversation stays as it is. See AI Agent Hand-off and Testing.