Workflow designer
Learn about designing your own workflows in Actioner.
Workflows make it easy to integrate your whole toolset and data - all with no servers or infrastructure to manage.
Workflows are composed of nodes that is organized and executed as a sequence of linear steps in top-down order.
Trigger your workflow on any event (e.g., Webhook events, e.g., Integration events) or manually in Slack, or on a specific or on a recurring schedule.
Add steps to run actions or to run JavaScript functions or to add condition, branch, loop or delay logic to your workflows.
Nodes are executed in the top-down order they appear in your workflow.
For manual triggers, access input fields in your form via
input
object.For webhook-based or integration-based triggers, access the event's payload via
event
object.Access values for steps after the trigger node via the
nodes
object.
Triggers
Every workflow begins with a single trigger step. Trigger steps initiate the execution of a workflow; i.e., workflows execute on each trigger event. For example, you can create a Webhook trigger to accept HTTP requests from Stripe or use triggers from integrations; such as New ticket created event from Zendesk integration. We give you a unique URL where you can send POST requests, and your workflow is executed on each request.
There is no URL provided for Slack and HubSpot events since Actioner starts to listen these events when you complete your connection. To start your workflow with a Slack or HubSpot event, you can simply add the corresponding trigger from the related integration in your canvas.
Nodes
Nodes are the building blocks you use to design workflows. You can easily combine multiple node into a workflow to integrate your tools, data and APIs.
Nodes are executed linearly, in the top-down order they appear in your workflow.
You can pass data between steps using
nodes
objects.You can observe the execution results for each step, logs and errors.
Node names and aliases
Each node have a name and an alias. They appear at the top of the node detail panel, when you click on a node in your canvas.
You can rename a node by clicking on its name but it is not possible to update the alias of a node.
Alias of your node can be referenced when you want to use data generated by that node in a later step in your workflow. For example, nodes.action0.response
contains the response generated by action0
.
Passing data to nodes from inputs
You can generate form based inputs for manual triggers and reference to them via input
. For example, input.name
returns the data entered for name
input.
Learn more about using inputs in your workflows.
Passing input
values to workflow nodes are only available for manual workflows.
Passing data to nodes from your events
You can access the data of your event by referencing to them via event
.
event.body
returns thebody
of your trigger event.event.headers
returns theheaders
of your trigger event.event.params
returns theparams
in your trigger event.
Passing event
values to workflow nodes are only available for automated workflows.
Referencing to other nodes
Referencing to other nodes in your workflows allow you to pass data between steps. Any data from a node must be JSON serializable, the data must be able to stored as JSON so it can be read by downstream steps.
nodes.action0.response
returns the response generated byaction0
. It may contain a text string, an object, or any other data type that represents the result or output of the action performed byaction0
.nodes.loop0.item
returns the item being processed or iterated upon withinloop0
. It contains the value or reference of the current item being processed during the iteration.nodes.loop0.iterationCount
returns count or number of iterations performed withinloop0
. It contains the total number of times the loop has executed or iterated.nodes.condition0.conditionMatched
returns the outcome of a condition check withincondition0
. It contains a boolean value indicating whether the condition evaluated totrue
orfalse
. If the condition is matched ortrue
, thennodes.condition0.conditionMatched
would hold the value true. Otherwise, it would hold the valuefalse
.
Triggers
Triggers define the type of event that runs your workflow. For example, webhook triggers expose a URL where you can send POST requests. Actioner will run your workflow on each request.
Actioner supports the following triggers:
- Manual triggers
- Triggers from integrations like Zendesk, HubSpot, Slack, and more
- Webhook triggers
If there's a specific trigger you'd like supported, please let us know.
Integration triggers
You can trigger a workflow on events from apps like Zendesk, HubSpot, Slack, and more using integration triggers. Integration triggers run as separate resources from your workflow, which allows you to trigger multiple workflows using the same source. Here, we'll refer to event sources and workflow triggers interchangeably.
When you create a workflow, you'll see your available triggers.
Search by integration name to find triggers associated with your tool. For HubSpot, for example, you can run your workflow every time a new contact is created in your account, or each time a deal is updated.
Once you select your trigger, you'll be asked to connect any necessary accounts (for example, HubSpot event require you authorize Actioner access to your HubSpot account).
Some sources are configured to retrieve an initial set of events when they're created. Others require you to generate events in your tool to trigger your workflow, such as sending data to Actioner via a webhook.
When you select your integration as the trigger, you can see the list of events in the Select events dropdown of the Trigger node.
Then you can select a specific event and perform a test operation to trigger your workflow with test event and click Capture event to use its data. Afetr that, you're ready to build your workflow with the selected event.
Difference between an integration trigger and a webhook trigger
Integration triggers run code that collects events from some tool or service and emits events as the source produces them. An event source can be used to trigger any number of workflows.
For example, you might create a single source to listen for new Zendesk tickets with a specific tag, then trigger multiple workflows each time a new ticket is created with that tag, one to notify your support team, another to notify the assignee.
This model allows you to separate the data produced by a service (the event source) from the logic to process those events in different contexts (the workflow).
Shape of the event
object
In automated workflows, you have access to event data using the variable event
.
The shape of the event is specific to the source. For example, HubSpot sources produce events with a object name, owner, etc.
Webhook triggers
When you select the Webhook trigger, Actioner creates a URL endpoint specific to your workflow:
You can send any POST requests to this endpoint. You can configure the endpoint as the destination URL for a webhook or send HTTP traffic from your application - we'll accept any valid HTTP POST request.
Accessing HTTP request data
You can access properties of the HTTP request, like the body, headers, and URL params, in the event
object, accessible in any workflow nodes.
Valid requests
You can send a request to your endpoint using only POST
method.
You can only send data of application/json
and text/plain
media types in the body of your request.
The primary limit we impose is on the size of the request body: we'll issue a 413 Payload Too Large
status when the body exceeds our specified limit.
How Actioner handles JSON payloads
JSON is the defacto data exchange format on the web today. Actioner optimizes for the case where you've sent JSON as the trigger event to a workflow.
When you send JSON in the HTTP payload, or when JSON data is sent in the payload from a webhook provider, Actioner converts that JSON to its equivalent JavaScript object. The trigger data can be referenced using event
object.
Actioner jobs
Actioner allows you to run hosted recurring or scheduled taks. We call these jobs. When you use jobs, workflows just become the tasks that run on a schedule.
Actioner manages the servers where these cron jobs run, so you don't have to worry about setting up a server of your own or operating some service just to run your workflow on a schedule. You design the workflow and the job, we take care of the rest.
Actions
Actions are reusable steps that integrate your tools, data and APIs. For example, you can send HTTP requests to an external service by adding your own actions through a custom integration, or use our HubSpot actions to add new data. You can use hundreds of actions across multiple apps today.
Typically, integrating with these services requires custom code to manage connection logic, error handling, and more. Actions handle that for you. You only need to specify the parameters required for the action.
You can also create your own actions that can be shared across your own workflows.
Using existing actions
Adding existing actions to your workflow is easy:
- Click the + button below any node.
- Search for the tool you're looking for and select it from the list.
- On the opening left panel, select for action from dropdown.
For example, you can add the Create deal
action from HubSpot integration.
Creating your own actions
You can author your own actions on Actioner, too. Anytime you need to reuse the same steps across your workflows, consider making that an action.
Start with our action designer.
Entering expressions
Expressions make it easy to pass data exported from previous nodes into an action, function, operator, workflow, AI or a response node. For example, if your workflow is triggered on new contacts and you want to send that contact info to Slack, you would reference {{event.body.contact}}
to do that.
While the data expected by each field depends on the data type (e.g., string, integer, array, etc), the format for entering expressions is always the same; expressions are always enclosed in {{ ... }}
.
To manually enter or edit an expression, just enter or edit a value between double curly braces {{ ... }}
. Actioner provides auto-complete support as soon as you type {{
.
You can also run JavaScript code in {{ ... }}
. For example, if event.body.foo
is a JSON object and you want to pass it to a param as a string, you can run {{JSON.stringify(event.body.foo)}}
.