AI Workflows
Join your services together on a canvas. Drag in steps, connect them with arrows, and let SoftSolz run the whole thing for you. Workflows run inside SoftSolz, so there is nothing to embed on your website.
Overview
A workflow is a diagram that runs. It starts with one trigger, then follows the arrows through as many steps as you like.
Unlike a simple list of tasks, a workflow can make decisions. It can ask a question and go two different ways, repeat itself once for every item in a list, wait hours or days before carrying on, and use what an earlier step found in a later step.
Things people build with it:
- A contact form comes in. Large enquiries create a customer record and assign a salesperson a task. Everyone else joins the mailing list.
- A blog post goes live and is shared on social automatically.
- An invoice goes unpaid, so a reminder goes out after 7 days and a chase task is raised after 30.
- Someone misses an appointment, so two hours later they get an email asking them to rebook.
- A new customer signs up but never confirms their email, so the team is told the next day.
Your first workflow, step by step
This takes about two minutes and proves everything works. It only posts a notification inside SoftSolz to your own team, so it is safe to try on a live workspace.
- In the sidebar, open AI Workflows.
- Press New workflow.
- Type a name, for example Hello canvas.
- Press Create and open. The canvas opens.
- A gallery of templates appears. Press Escape to close it, because this time you are building by hand.
- On the left you will see a list of steps. Under Ways to start it, click Manual. A box appears on the canvas.
- Under Building blocks, click Notify the team. A second box appears.
- Hover over the bottom edge of the Manual box until a small circle appears. Drag from that circle to the top edge of the Notify box. An arrow now joins them.
- Click the Notify box. The step editor opens on the Set it up tab. In Message, type It works, then close it.
- Press Test run at the top.
When the run finishes, a message says Test run finished, the bar reads Finished cleanly, 1 step run, and the Notify box turns green and shows how many milliseconds it took. Open the notification bell in the top bar and your message is there.
The canvas
The screen has three parts.
| Part | What it is for |
|---|---|
| Left, the step list | Every step you can add, grouped by service. Search at the top. Click a step to add it, or drag it where you want it. On smaller screens the list is hidden; use the plus button under a box instead. |
| Middle, the canvas | Your workflow. Drag boxes to move them, drag between the circles to connect them, and select a box or a connection and press Backspace to remove it. The plus button under every box adds the next step. |
| The step editor | Opens as a side panel when you click a box. It has three tabs: Set it up for the step's settings, Comes in for the values earlier steps produced, and Comes out for what this step returned. |
Each box shows its name, a short summary of how it is set up, and after a run, whether it worked and how long it took. A box with something missing is outlined in red and tells you what it needs.
Two things that save time: Tab adds the next step after whatever is selected, and Tidy up lines every box up neatly when the canvas gets messy. Dragging a box only moves it, so you can rearrange without opening anything.
The header shows Not saved yet or All changes saved. Press Save to keep your changes; Test run and the Active switch save first on their own.
Triggers
The trigger is what starts your workflow. Every workflow has exactly one, and it is always the top box. You pick it from Ways to start it in the step list.
| Trigger | Starts when |
|---|---|
| Manual | Someone presses Run. Good for testing and for jobs you do occasionally. |
| On a schedule | A repeating timetable you choose. Type it as five parts, for example 0 9 * * 1-5 for 9am on weekdays; the plain-English meaning is shown underneath. Set the Timezone on the step. |
| Incoming webhook | Another system posts to the workflow's private web address. The address is not shown in the dashboard yet. |
| An event in a service | Each event is its own trigger, such as Invoice paid or Form submitted. This is the powerful one. |
Event triggers cover most of what happens in your workspace. A few examples:
- Invoicing - invoice paid, invoice overdue, invoice sent, invoice posted, invoice voided, customer created, refund issued
- Forms - form submitted
- Appointments - booked, confirmed, cancelled, rescheduled, completed, no show, message received
- Tasks - assigned, submitted, completed, overdue, changes requested, reopened
- Blogs - post published, subscriber added, comment posted
- Social - post published, post failed, account connected
- Customer Auth - signed up, verified, signed in, suspended
- Knowledge Hub - chat message received, document ready
- Payments - payment received
- Outreach - message received, someone signed up or opted out, a link was clicked, a campaign finished, a call ended (including calls an AI caller handled, with its summary)
Contacts, Sales Pipelines, Quotes, Products & Subscriptions, Newsletter, Funnels, Affiliates and SEO Intelligence add their own events too.
Steps
After the trigger, everything else is a step. There are two kinds.
Service steps
These do something in one of your services: create a draft invoice, email an invoice to its customer, send a payment reminder, create and assign a task, publish a blog post, create and publish a social post, add a newsletter subscriber, cancel an appointment, search your Knowledge Base, have one of your AI callers ring someone, and so on.
There are also Find steps such as Find invoices, Find tasks and Find appointments. These return a list, which you then feed into a For each step.
Building blocks
These work in every workflow, whatever services you use.
| Block | What it does |
|---|---|
| If | Asks a yes or no question and splits the path in two. |
| For each | Repeats the following steps once for every item in a list. |
| Filter | Stops the workflow here unless a condition is met. |
| Wait | Pauses for minutes, hours or days, then carries on. |
| Wait until | Holds the run until something happens or a moment in time arrives, checking again on a schedule. |
| Goal | Checks whether the point of the workflow has been met, and stops there when it has. |
| A/B split | Sends each contact down one branch, always the same branch for the same person. |
| Set values | Builds named values that later steps can use. |
| Call a URL | Sends a request to another system. It gives up after 15 seconds. |
| Send an email | Emails up to 20 people. See Sending email. |
| Notify the team | Posts a notification inside SoftSolz for your workspace members. |
Passing values along
This is the part that makes workflows useful, and it is easier than it looks.
Any step can use something an earlier step produced. You never type these by hand. Click the braces button beside a box and pick the value from the list, or open the Comes in tab and click a value to drop it into the first box. Either way it drops in looking like this:
Hi {{ trigger.data.name }}, invoice {{ nodes.create_invoice.output.invoice_number }} is ready.
Underneath the box you will see what that comes out as right now, using the real values from your last run. If it reads Nothing found for ..., the value you picked does not exist, and you can fix it there and then rather than discovering it on a live run.
The Comes in tab only offers values from steps that genuinely run before this one, so you cannot pick something that will not exist yet. Each one is labelled with where it came from: from the last run, sample data, or not run yet when the step has never produced anything and you are seeing the shape it will return.
There are three families of value:
| Looks like | Means |
|---|---|
trigger.data.something | Something from whatever started the workflow, such as the invoice that was paid. |
nodes.step_name.output.something | Something an earlier step produced. The step name is shown under each box and you can rename it. |
loop.item | Inside a For each, the item currently being worked on. loop.index is its position. |
Tidying values up
You can adjust a value with a filter, written after a vertical bar:
{{ trigger.data.total | currency }} gives 1,250.50 in your currency
{{ trigger.data.name | upper }} gives ADA
{{ trigger.data.due | date: 'DD/MM/YYYY' }} gives 09/03/2026
{{ nodes.check.output.tier | default: 'standard' }}
The filters available are default, upper, lower, trim, length, join, json, number, round, date and currency.
Conditions and branching
An If step asks one question and sends the workflow one of two ways. It has two outputs at the bottom, marked true and false. Connect each to whatever should happen next. You can leave one unconnected if nothing should happen on that path.
- Add an If step and connect it after your trigger.
- In Value, use the braces button to pick what you want to check.
- Choose the comparison in Is.
- Fill in Compared with, unless the comparison does not need one.
Available comparisons: equal to, not equal to, containing, not containing, greater than, greater than or equal to, less than, less than or equal to, empty, not empty, true, false.
Repeating over a list
A For each step runs everything after it once per item.
- Add a step that returns a list, such as Find invoices.
- Add a For each step after it.
- In List, use the braces button and pick
itemsfrom the finding step. - Add whatever should happen per item after the For each step.
- Inside those steps, refer to the current item as
loop.item, for example{{ loop.item.invoice_number }}.
Set Stop after (100 unless you change it) to cap how many items are handled in one run. If the list is longer than the cap, the run tells you it was cut short rather than silently skipping the rest.
Waiting
A Wait step pauses the workflow. Set an amount and a unit, from seconds to days.
Waits of 30 seconds or less happen inside the run. Longer ones put the run to sleep and it wakes itself up later, so a wait of three days costs you nothing while it waits and picks up exactly where it left off.
When a step fails
Call a URL, Send an email and Notify the team have an If this step fails setting:
| Choice | What happens |
|---|---|
| Stop the workflow | The run stops here and is marked failed. This is the default and is usually what you want. |
| Carry on anyway | The failure is recorded but the workflow continues. Use this when the step is a nice-to-have. |
Steps that call another system are retried automatically a few times before being treated as failed, so a brief outage does not break your run.
Testing before you go live
Test run runs the whole workflow once, immediately, and shows you exactly what happened. The trigger has no real event behind it, so its values start empty.
When the run finishes:
- The bar at the top says how it went, for example Finished cleanly, 2 steps run.
- Each step box turns green if it worked or red if it did not. A green box shows how long it took.
- A red box shows the reason on its face, and the panel opens on it automatically.
- Boxes on a path that was not taken go grey, so you can see which way an If step went.
- Arrows show how many items passed along them. Seeing 0 items is the quickest way to spot a filter that is too strict.
Open any step and the editor shows you both sides of it. Comes in lists the real values from every earlier step. Comes out shows what this step returned, along with any value it could not find, so you can fix the step name it points at.
Running one step at a time
You rarely need to run the whole thing. Press Run on a step's Comes out tab and SoftSolz runs everything up to and including that step, then stops (Ran up to that step). Nothing after it happens. This is the quickest way to get one step right before moving on, and it means the steps further down never fire while you are still experimenting.
Working without running anything
Every step can hold sample data. Press Set sample data on a step's Comes out tab and paste or edit the result you want it to pretend to return. From then on, test runs reuse that instead of running the step for real, which is useful when a step is slow, costs money, or sends something you do not want to send twice. Steps using sample data are marked on the canvas, and sample data is ignored once the workflow is live.
Turning it on and off
Every workflow is either Active or Inactive. There is one switch for this, and it sits in the same place in both screens: on the right of the header while you are building, and on the workflow's card in the list.
An inactive workflow never runs by itself. You can still change it freely and press Test run as often as you like.
When you switch it to Active, SoftSolz checks it first and refuses if something would not work, for example a step that is not connected to anything or a value that points at a step that no longer exists. It tells you which step is at fault. Once it is on, a message says It is on. It will run on its own now.
Editing an active workflow is safe. Press Save and your changes take effect the next time it runs.
Templates
Templates are complete, working workflows you can start from. The gallery opens by itself on a new workflow, and is always available from the Templates button.
Pick one and it fills the canvas, replacing anything already on it. Everything stays editable, so treat it as a starting point rather than a finished thing. Templates that need a service you have not installed are shown greyed out with the service they need.
Sending email
Emails from a workflow go out from your sending address, never from SoftSolz. This protects your customers, who would otherwise get mail about your business from a company they have never heard of.
Because of that, a workflow with a Send an email, Email an invoice or Send a payment reminder step needs a verified sending address before it can be turned on. If you have not set one up, switching it to Active shows This workflow emails people outside your workspace, so it needs your own sending address first. and a Set up email button.
- Open Marketplace, then the Email sending tab.
- Add your sending address and follow the verification steps.
- Return to your workflow and switch it to Active again.
Run history
Open AI Workflows in the sidebar, then the Run history tab, to see every run: when it happened, what started it, how long it took and whether it worked. A run is Pending, Running, Waiting, Success or Failed.
Open a run to see its status, start time, duration, what triggered it and, if it failed, the error. To see what each step received and returned, open the workflow and look at the step's Comes in and Comes out tabs after a test run.
Limits
Sensible limits stop a mistake becoming an expensive one. You are unlikely to meet them in normal use.
| Limit | Value |
|---|---|
| Steps in one workflow | 60 |
| Connections in one workflow | 120 |
| Step runs in a single run | 500 |
| How long one run may take | 2 minutes, not counting Wait steps |
| Items handled by one For each | 200 |
| Runs per minute for one workflow | 60 |
| People one email can go to | 20 |
Workflow runs also count towards your plan's API calls allowance. You can see usage under Subscriptions. An admin can also cap how many workflows each member may create, per role, in the role editor.
Who can do what
Set on each role under Members & access → Roles, in the AI Workflows group:
| Permission | What it allows |
|---|---|
| View AI workflows and their run history | Open workflows and Run History. |
| Create AI workflows | Press New workflow. |
| Edit AI workflows, including pause and resume | Change steps, and use the switch on a workflow's card. |
| Delete AI workflows | Remove a workflow. |
| Manually trigger a workflow (run now) | Test run, Run on a step, and Run now. |
| Publish and pause workflows so they run automatically | The Active switch on the canvas. |
By default Admins hold all of these, Managers can view and run, and Users can view. Steps run with the permissions of the person who created the workflow.
Troubleshooting
| What you see | What it usually means |
|---|---|
| A message arrives with a word missing, such as Hi , | A value could not be found. Open that step and check Comes out, which lists any value it could not resolve. Confirm the step name it points at still exists. Renaming or deleting a step does not update the values that point at it, so pick them again. |
| An arrow says 0 items | The step before it found nothing. Check its settings, for example a status filter that matches none of your records. |
| It refuses to turn on | Read the message. The usual causes are Choose a trigger so this workflow knows when to run., Add at least one step after the trigger before publishing., a step that is not connected to the trigger, or an email step with no verified sending address. |
| A step is outlined in red before you have run anything | A required field is empty. Click the step and fill it in. |
| The workflow did not start when you expected | Check the switch says Active, and that the trigger matches the event you think it does. Scheduled and event runs begin within a few seconds rather than instantly. |
| This run passed the 500 step limit and was stopped. Check for a loop. | Two steps are probably connected in a circle. Follow the arrows and remove the loop. |
| This workflow is already running. | A run started less than 30 seconds ago. Wait a moment and try again. |
| The person who owns this workflow does not have permission for the ... step. | Steps run as the person who created the workflow, and their role no longer allows that step. Give their role the permission, or have someone who holds it rebuild the step. |
| A step you expected is missing from the list | Its service is not installed. Add it from the Marketplace. |
Test it step by step
- Install the service. Open Marketplace, find AI Workflows and click Install. You need to be an owner or admin to install services.
- Check your permissions. To build and test you need to create, edit and run workflows (see Who can do what). Turning a workflow on needs Publish and pause workflows so they run automatically, which Admins hold by default.
- Try it in the sandbox if you like. Open the menu under your name at the bottom of the sidebar and choose Switch to Sandbox mode. The sandbox has its own records, so test runs there do not touch your live data.
- Build the Hello canvas workflow exactly as in Your first workflow: a Manual trigger joined to Notify the team with the message It works.
- Press Test run. Success looks like the message Test run finished, the bar Finished cleanly, 1 step run, a green Notify box, and your message in the notification bell.
- Check Run history. Open the Run history tab of AI Workflows. The run is listed with the status Success.
- Turn it on. Switch the workflow to Active. A message says It is on. It will run on its own now. For a scheduled or event workflow, wait for the trigger and check Run History again.
- Test email last. If your workflow sends email, set up your sending address first (see Sending email), and point the step at your own address while testing. A real outside email account is needed to receive it.
For developers
Create a sandbox API key under Global API keys with the View workflows permission, then list your workflows:
curl https://app.softsolz.uk/api/v1/services/workflows/workflows \
-H "Authorization: Bearer sk_test_your_key"
A 200 reply listing Hello canvas means it worked. The AI Workflows developer guide shows how to start a run and read its result.
If something goes wrong
| What you see | What it means |
|---|---|
| This workflow emails people outside your workspace, so it needs your own sending address first. | Set up a sending address in Marketplace → Email sending, then switch the workflow on again. |
| These steps are not connected to the trigger, so they would never run: ... | A box is not joined to the rest. Drag an arrow to it, or delete it. |
| You've reached your assigned limit of ... workflows. Contact a workspace admin to increase your limit. | Your role has a cap on how many workflows each member may create. An admin can raise it in the role editor. |
| Test run is greyed out | Add a trigger first. If it is still unavailable, your role cannot run workflows, or the workflow belongs to someone else and is not shared with the team. |
Reference
Building a deeper integration? See the developer guide for endpoints and events: