Triggers
A trigger decides when an automation runs. You add triggers in the editor under Triggers in the toolbar, or from Setup › Triggers in the Flow sidebar. One automation can have more than one trigger.
For step-by-step setup, see Set up triggers.
Trigger types
Section titled “Trigger types”| Trigger | What starts a run | Status |
|---|---|---|
| Manual | A person selecting Run trigger now, or a call to the automation’s API endpoint. | Available |
| Schedule | A recurring time, set with a cron expression. | Available |
| Webhook | An HTTP request from another system to the automation’s webhook URL. | Available |
| Microsoft Teams | A message or event in a Teams channel. | Coming soon: shown, but it can’t be chosen yet. |
| Slack | A message in the Slack channel you pick that the trigger’s owner wrote or brought in through their own consented capture. | Available in the editor and in my.studio. Setup › Triggers › New Trigger still marks it Coming soon. |
| AWS SQS | A message on an SQS queue. | Coming soon |
| AWS SNS | A notification on an SNS topic. | Not available yet |
| VoIP / Phone | An inbound phone call. | Not available yet |
| Incoming Message | A direct message, comment or message captured from a connected platform, such as GitHub, through the owner’s own account. my.studio calls it Social message. | Available in the editor and in my.studio |
Settings every trigger has
Section titled “Settings every trigger has”| Field | What it does |
|---|---|
| Trigger Name * | A name you choose. Required. |
| Type | Picked when you create the trigger. It can’t be changed afterwards. |
| Active | Checked by default. When it’s off, the trigger is paused and doesn’t start runs. |
| Run Inputs | The {{input.x}} values the automation asks for when it runs, and which of them are required. |
Triggers start runs of the published version. Tests from the editor use the draft. A trigger on an automation that was never published starts no runs: it records “The automation has no published version. Publish it, then resume this trigger.” and, after three such failures in a row, pauses itself (Paused after failures). Any trigger that fails to start a run three times in a row does the same, and the automation’s owner is notified in work.studio.
On each trigger’s card you can Run trigger now, View run history, View deliveries, Run with test input, turn it off or back on (Pause trigger / Resume trigger), Edit trigger and Delete trigger. People who can only view the automation don’t see the webhook URL, any delivery content, or the run and test buttons. For delivery statuses, replay and samples, see Deliveries.
Manual
Section titled “Manual”No settings. A manual trigger runs the automation when a person selects Run trigger now on its card, or when a system calls the automation’s API endpoint.
The API endpoint
Section titled “The API endpoint”Every automation also gets an API endpoint, created automatically and shown at the top of Trigger Management. An organization API key can run the automation with a POST to either URL it lists (a personal automation only with a key its owner issued):
POST https://api.work.studio/api/v1/workflow/execute/{endpoint}POST https://api.work.studio/api/v1/workflow/execute/id/{globalUniqueId}You can close the endpoint from the same card. Closing it doesn’t affect other triggers. See Run automations from your code.
Schedule
Section titled “Schedule”| Field | What to enter |
|---|---|
| Cron Expression * | When to run. Required. |
| Quick Presets | Every minute, Every hour, Every day at midnight, Every Monday at 9am, Every weekday at 9am, First of month at midnight. Selecting one fills in the cron expression. |
| Timezone | The time zone the schedule follows. The default is UTC. |
The cron expression has six fields: second, minute, hour, day of month, month and day of week. A standard five-field cron expression, such as 0 9 * * *, is also accepted: Flow adds a 0 for the seconds when it saves the trigger.
| Cron expression | Runs |
|---|---|
0 0 9 ? * MON-FRI |
9:00 AM, Monday to Friday |
0 0 * * * ? |
At the start of every hour |
0 0 0 1 * ? |
Midnight on the first day of each month |
0 30 17 ? * FRI |
5:30 PM every Friday |
The Timezone list offers UTC and ten common zones, such as Eastern Time (ET) and India (IST). The trigger accepts any IANA time zone name, such as America/New_York.
Webhook
Section titled “Webhook”| Field | What it does |
|---|---|
| Endpoint URL | The URL other systems call. Flow generates it. |
| Authentication | None (the default), work.studio API key, Shared secret header, Bearer token, Basic auth or Connection. A missing or wrong credential gets 401. See Webhooks. |
| Require a valid HMAC signature | On by default. Checks an HMAC signature on each request with the signing secret, which is shown once when you create the trigger. See Webhooks. |
| Sender | The signature layout: Generic HMAC-SHA256 (the default, with Require X-Webhook-Timestamp on), GitHub, Stripe, Slack or Shopify. |
| Response | Wait until the run has started returns 200 with the run id; if starting takes longer than Wait timeout (seconds), the caller gets 202. Acknowledge immediately returns 202 straight away. Neither returns the automation’s result. |
| Allowed HTTP methods | The default is POST. |
| Rate limit (requests / minute) | Caps how often the webhook can be called. |
| Max body size (KB) | 1024 (1 MB) by default. A larger body gets 413. |
| Allowed IP addresses | Accepts requests only from the addresses you list; others get 403. |
Under While this trigger is paused, Keep for (days), At most (deliveries) and At most (MB) set how long deliveries wait in a paused trigger’s queue (7 days by default, 1 to 30) and how many can wait (1,000 deliveries or 50 MB by default).
The Endpoint URL is shown only to people who can edit the automation.
Webhook URLs have this form:
https://api.work.studio/api/v1/workflow/webhook/ingress/{endpoint}A request body larger than the webhook’s size limit is rejected with HTTP 413. The default limit is 1 MB.
The body becomes the run’s input this way: a JSON object’s or a form’s fields at the top level, a JSON array in input._body, any other text (such as XML) in input._raw, and the headers and query parameters in input._headers and input._query. A paused Webhook trigger queues authenticated deliveries and runs them in order when it’s resumed, and a deleted one answers 410. See What the automation receives and When the trigger is paused.
Incoming webhooks covers signing and calling a webhook from code.
Microsoft Teams
Section titled “Microsoft Teams”The Microsoft Teams trigger is coming soon: it can’t be chosen yet, and these settings are listed for reference. Setting up a Teams trigger takes three parts: pick a Teams connection, pick the Team and Channel, then choose the Event Type.
| Event Type | Starts a run when |
|---|---|
| All Events | Anything happens in the channel |
| Message Created | A new message is posted |
| Message Updated | A message is edited |
| Message Deleted | A message is removed |
| Channel Created | A new channel is added |
| Channel Updated | Channel settings change |
| Member Added | Someone joins the team |
| Member Removed | Someone leaves the team |
An optional Filter Expression narrows which events start a run.
Slack and Incoming Message
Section titled “Slack and Incoming Message”| Field | What it does |
|---|---|
| Channel (Slack), or the platform and its channel, repository or account (Incoming Message) | Where messages are captured from, through the trigger owner’s own connection. |
| Filter Expression (Slack) / Keyword filter (Incoming Message) | Optional. A message starts a run only if its text contains one of the comma-separated keywords, ignoring case. Empty means every message. It is plain text, not an expression language. |
A person-to-person message (Slack, Teams, WhatsApp, Telegram and Discord messages, and Instagram, Messenger and Twitter direct messages) starts a run only when the trigger’s owner wrote it or brought it in through their own consented capture, and the run is private to the owner. A Slack or Teams channel an admin has marked shared is the exception. Someone else who edits the trigger must take it over with their own account. See Slack and Incoming Message.