Skip to content
All docs

Building

Triggers and actions

The building blocks of every workflow. What starts them, what they do, and how data flows between nodes.

3 min read

Every workflow is a graph of nodes. Understanding the node types is most of what you need to build anything.

Triggers

A trigger is the single entry point that starts a workflow:

  • Discord: member joins, messages, reactions.
  • Twitch: stream live, new follower, chat.
  • Webhook: each workflow can expose a unique URL that any service can POST to.
  • Schedule: run on a cron expression (daily digests, hourly syncs).

Actions

Actions do the work, and you can chain as many as you need:

  • Discord: send message, send DM, manage roles.
  • Email: send via SMTP with templates.
  • HTTP request: call any REST API, with a built-in Authentication picker (Bearer Token, Basic Auth, or API Key Header) so you don't have to hand-type the header.
  • Code: run a sandboxed snippet for custom logic.
  • Ask an AI: send a prompt to ChatGPT, Claude, or a model you host yourself (LM Studio, Ollama, or any OpenAI-compatible server), and use the answer in the steps that follow. A self-hosted server needs no model name: leave Model empty and it uses the one already loaded.

When you add a Discord or Twitch action, it targets the right place automatically: leave the server, member, or channel fields empty and it reuses the one from the trigger. So "Member Join → Add Role" needs no IDs at all. Use the Auto / Pick a specific… toggle on the field when you want to point somewhere else.

Working with data

Beyond triggers and actions, a set of data nodes lets you reshape values without writing code. Find them under Data in the Add-a-node panel:

  • List: Map, Filter, Find, Sort, Unique, Group by, Reduce, Aggregate (sum / average / min / max / count), Slice, and Join a list. Per-item expressions use item and index (and acc in Reduce).
  • Compute: evaluate one or more named expressions to build objects, arrays, or values for the next node.
  • Pick a value from data: pull one or more named fields out of an object (a webhook body, an API response) by dot path.
  • Regex: Extract one or more named values with capture groups, Replace text, or Match against a pattern.
  • Date: get "now", add or subtract a duration, measure the gap between two dates, format, or compare.

See working with data for a full walkthrough.

Passing data with variables

Nodes expose their output to later nodes through template variables:

{{trigger_1.username}}
{{__trigger__.body.email}}
{{action_2.response.id}}

Inside {{ }} you can write a full expression, not just a single variable. Do maths, compare values, pick between two outcomes, and call functions:

{{ price * qty }}
{{ score > 5 ? "win" : "lose" }}
{{ "mod" in roles }}
{{ round(action_2.response.total) }}

The expression field autocompletes available paths and flags typos before you ship. The working with data guide covers the full expression syntax.

Every node also has a Custom Fields section in its Config panel. Attach any name/value pairs of your own, and each one becomes its own {{name}} variable for later nodes. Handy for carrying one extra value without adding a whole Set Data node.

Logic and control flow

Add conditions (if/else), filters, and switches to branch your workflow. Failed nodes retry automatically with sensible per-type defaults.

Next: make sure it all works with testing and debugging.

Setup checks and next steps

  • Check the draft before activating it; saving edits and publishing them are separate actions.
  • Resolve missing parameters and connection errors in the workflow that reports them.

See the extension setup guide for adding and reusing services, the node reference for parameters, and testing and debugging for execution diagnostics.