Introducing Workflows and a New Starter 🌱 Edition in SaasRock v0.9.2
Hey there! With SaasRock Workflows in the fresh v0.9.2 release, tackling complex tasks just got a whole lot easier with no-code. Also, a new Starter edition has been released!
TLDR: Watch a 1-min demo.
Summarizing the v0.9.2 release:
- Workflows Feature 🎉: in all editions, plus open source
- New SaasRock Starter 🌱 Edition at $149 one-time (no updates)
- Black Friday Deal (Nov 27th — Dec 3rd): Use the coupon
BF2023
for -40%
Why is this not v1.0 yet? Help Desk and Affiliates are the 2 missing features. But in order to build Help Desk, I needed to build a workflow engine first.
Concepts
- Blocks: Triggers and Actions.
- Variables and Credentials: Global variables and encrypted credentials.
- Executions: A single run of a Workflow.
- Workflow Context: Inputs and Outputs within a workflow execution.
Execution Modes
Choose between different modes for triggering a workflow:
- Manual: Manually trigger a Workflow.
- API 🪨: Use the API to trigger a Workflow @
/api/workflows/run/$id
. - Stream 🚀: Get updates from a stream (chat-like).
Tenants/Accounts can also create and run their own Workflows 🪨.
Workflow Features
There are 4 workflows editions:
- Open source: remix-workflows
- SaasRock Starter 🌱: $149 one-time + no updates
- SaasRock Core 🪨: $1,399/y + updates
- SaasRock Enterprise 🚀: $2,099/y + updates
See the full feature comparison in the following table.
Workflow Blocks
Triggers
- Manual: By clicking a button
- Row Event 🚀: created, updated, deleted
Actions
- IF: True and False paths
- HTTP Request: Set method, URL, Body, and Headers
- Log: Logs to the system
- Alert User: Sends alert to current user
- Switch 🪨: Default, case1, case2… etc, paths
- Iterator 🪨: For loop using a variable
- Variable 🪨: Set a context variable
- Wait for Input 🚀: Waits for user input (support in Manual, API, and streaming)
- GPT Chat Completion 🚀: Call OpenAI API
- Row Get 🚀: Create an entity row
- Row Create 🚀: Create an entity row
- Row Update 🚀: Update an entity row
- Row Delete 🚀: Delete an entity row
Plus, on the Enterprise Edition 🚀, I’ll work on (long-term):
- Crons support (Sleep, Delayed until…)
- Send Emails
- Global workflows (create a workflow in the admin dashboard for all tenants)
- Advanced Workflow Analytics (i.e. percentages paths in a funnel)
Variables and Credentials
Variables
Sometimes it’s useful to have a global state. For example, you may have multiple GPT blocks across many workflows, and if there’s a new model released, you could create a variable {{$vars.gptModel}}
.
Credentials
In the case of credentials 🚀, the only difference between them is that they’re encrypted before storing and decrypted before using it, click here to see the method.
Workflow Context
A workflow execution will always have an output similar to this:
{
"$params": {},
"$session": {
"tenant": {},
"user": {},
},
"$vars": {},
...blocksOutputs
}
Explanation:
- $params: Every execution starts with a JSON input
- $session.tenant: If the execution is on the admin side, it’s null
- $session.user: If the execution is not started manually by a user, it’s null
- $vars: Global variables are injected
Finally, each executed block will have a value with the block name. For example, the following output is from the “GPT Simulator” workflow template.
{
"$params": {},
"$session": { "tenant": null, "user": null },
"$vars": {
"gptModel": "gpt-3.5-turbo"
},
"waitForInput": {
"input": "Hi"
},
"if": {
"condition": false,
"expression": "{{waitForInput.input}} Equals bye"
},
"gpt": {
"result": "Hello! How can I assist you today?"
}
}
Using Variables
Since the workflow context has everything you need from the workflow execution, you now can access values from previous blocks. Using the previous example:
- {{gpt.result}} will be “Hello! How can I assist you today?”
- {{$session.tenant}} will be an empty string
- {{$credentials.OPENAI_API_KEY}} will decrypt the value on the fly and destroy it
This is possible thanks to Handlebars.js.
Workflow Templates
I created a few templates that use every supported block, some of them are Core and/or Enteprise-only.
Input Examples
While building and testing your workflows, it’s useful to set a few input examples instead of having to type the input body every time. For example:
- Existing item: The input is { id: 10 }, so you know the workflow must go through the success path
- ID parameter not provided: This tests that the initial execution (manually, via the API, or in streaming mode) is sent correctly.
And so on.
Input Validation
The Manual Trigger has a special “validation” field that receives a JSON configuration. This validates the schema using Ajv JSON schema validator:
{
"type": "object",
"properties": {
"id": {
"type": "number"
}
},
"required": [
"id"
]
}
You can create any necessary validation schema to ensure the correct execution of a workflow.
I hope you’re as excited as I am for workflows!
Let me know what you think on the Discord server or subscribe to my newsletter to get notified on new saasrock features.