New: the AI firewall watches every module and explains each incident in plain words. See how it works

Trigger blocks

Reference of every block that starts a flow – Flow input, Device message, Inject, Schedule, Named timer, Webhook, Event, Catch, Status, Complete and Link in.

A trigger starts a run: it has no input and sends a message when its event happens. A flow may have several triggers. This page lists every trigger with its outputs and settings, as the blocks define them. The editor’s Help tab shows the same reference for the selected block.

Messages are delivered at least once: after a crash a message can be delivered again, marked msg.metadata.redelivered = true, with the same message ids, so blocks that call out send the same idempotency keys. The time-based and webhook triggers have a setting skip_redelivered (off by default): on, a redelivered message does not start the flow again.

Flow input

The entry of messages another flow hands over with Run flow, and, in a root flow, of the device messages of the root’s scope. Every flow has exactly one; it cannot be deleted.

Outputout: the message as it was handed over, in the same run. In an IoT root, each device message, telemetry one message per record.
SettingsNone. The flow itself is the address.
NotesThe flow must be switched on and running to receive messages. A root is never run by another flow. Data comes only through the message; set fields before Run flow.

Device message (IoT host)

Starts on messages of devices. Device messages (telemetry, attributes, connect, disconnect, activity, inactivity, rpc_request, rpc_response) go to one root flow only; in a root whose Flow input is wired, the Flow input is their entry. alarm and attributes_updated messages go to every flow with a Device message trigger that names them, root or not. A trigger with no types ticked hears the device message types only: tick alarm or attributes_updated by name to hear them.

SettingMeaningDefaultValues
typesThe message types that start itevery typetelemetry, attributes, connect, disconnect, activity, inactivity, rpc_request, rpc_response, attributes_updated, alarm
profilesOnly devices of these profilesevery profileyour device profiles
skip_redeliveredA redelivered message does not start itoffon, off

Outputs: out (telemetry one message per record, with msg.metadata.recordTs), error (bad_payload: telemetry that gave no record; msg.error.drops says why each value was left out).

Read-only metadata: msgType, deviceId, profileId, deviceName, profileName, transport (mqtt or http), ts (receive time), recordTs, topic (custom-topic data only), gatewayDeviceId, and others. Metadata is never stored.

Inject

Starts a flow by hand (the button on the block), once shortly after the flow starts, or repeatedly.

SettingMeaningDefaultValues
payloadWhat goes into msg.payloadthe time now (epoch seconds)a number, text, yes/no, JSON, the time now, nothing, an environment variable or an expression
topicmsg.topicemptyup to 256 characters
repeat_msFire again every this long; 0 = no repeat0up to 7 days; at least 60 s on the cloud (your plan’s minimum)
once_after_msFire once this long after the flow startsempty0 to 24 h
originatorWho the message is fromthe organisationthe organisation, or this flow (its own lane)
msg_typeThe message typeinjectone of the host’s message types
metadataExtra msg.metadata entriesnoneup to 16 rows
timesStop after this many repeats0 (no end)needs a repeat
catch_upAfter a downtimeonceonce (one run for the most recent missed tick), skip

Output: out. The payload is worked out each time it fires.

Schedule

Starts a flow by the wall clock.

SettingMeaningDefaultValues
modeHow the time is givendailydaily, cron, sun
timeTime of day (daily)08:00HH:MM, 24 hours
weekdaysDays it fires (daily)none ticked = every dayMon to Sun
cronCron expression0 8 * * 1-55 fields: minute, hour, day of month, month, weekday
sunSunrise or sunsetsetrise, set
offset_minMinutes after (+) or before (−) the sun event0−720 to 720
lat, lonPosition for sun timesempty−90 to 90, −180 to 180; required for mode sun
tzTime zonethe organisation’s default zonean IANA name such as Europe/Istanbul
originatorWho the message is fromthe organisationthe organisation, or this flow
msg_typeThe message typescheduleone of the host’s types
payloadReplaces the standard payload{ event: "due", mode, at, time }any value or expression
catch_upAfter a downtimeonceonce, skip

Output out: msg.payload { "event": "due", "mode": "daily", "at": …, "time": … }, msg.topic schedule/<mode>.

  • Cron fields accept numbers, *, ranges (1-5), lists (1,15) and steps (*/10); weekday 0 and 7 are Sunday; names such as MON are not understood. When day of month and weekday are both restricted, either one is enough.
  • A time skipped by a daylight-saving change does not fire. A day with no sunrise or sunset (polar regions) is skipped.
  • Show the next runs in the block’s settings lists the next fire times in its zone.
  • A schedule’s message has no device: blocks that need a device message (Save telemetry, Raise alarm, Send command) refuse it with not_a_device.

Named timer

Starts a flow when a named timer runs out. The Timer action block starts, restarts or cancels it, from any flow of the organisation.

SettingMeaningValues
nameThe timer to listen torequired

Output out: msg.payload { "event": "fired", "name", "ms", "time" }, msg.topic timer/<name>, msg.text “Timer name ran out”. Timers survive edits of the flows and are kept by the platform. A timer that falls due during an outage longer than the time-to-live becomes a failed message you can replay.

Webhook

An HTTP POST to the block’s address starts the flow. The address is shown in the editor’s Webhooks dialog once the flow is deployed and switched on.

SettingMeaningDefaultValues
authHow callers prove themselvestokentoken (Authorization: Bearer <secret>), hmac (X-Automation-Signature: hex HMAC-SHA256 of timestamp.rawBody, and X-Automation-Timestamp within 300 s), session (a signed-in member of your organisation)
permissionSession only: a permission the caller must also holdemptya permission id
originatorWho the message is aboutthe organisationthe organisation, or an entity of your organisation
max_bodyLargest body16 KiBat most 256 KiB
parseHow the body is readjsonjson, text
replyWhen the caller gets its answeracceptedaccepted (202 with an id at once), response (an HTTP response block answers)
timeout_msHow long a synchronous caller waits10,0001,000 to 10,000

Output out: msg.payload is the body; msg.metadata.http has method, query and the headers content-type, user-agent and x-request-id (never authorization or cookies). For a session hook, msg.metadata.user.id is the caller.

Answers: 202 accepted, 401 wrong token, signature or session, 403 refused session, 404 unknown hook, 413 body too large, 429 rate limit or quota, 503 busy. A synchronous hook answers 204 when the flow sends no response, 500 on an uncaught error, 504 at the deadline. See Connections and secrets for secrets and rotation.

Event

Starts on an event chosen by source and kind, such as one another flow sent with Emit event.

SettingMeaningDefaultValues
sourceThe event sourceanya source, e.g. flow; * = any
kindThe event kindanyexact, *, or a prefix ending in * (tank.*)
filterAn expression that must be truenoneover msg, up to 512 characters

Output out: msg.payload is the event’s data, msg.topic <source>/<kind>. Error invalid_value when the filter does not compile. Except for the sources flow and platform, you must name a kind or a prefix.

Catch

Receives errors of blocks in the same flow whose own error output is not wired.

SettingMeaningDefault
scopeThe blocks whose errors are caughtevery block of the flow
uncaught_onlyOnly errors no other Catch takesoff

Output out: a copy of the failing message with msg.error { message, code, source: { id, type, flow, name } }.

Status

Starts whenever a block of the same flow changes the status line under it.

SettingMeaningDefault
scopeThe blocks watchedevery block of the flow

Output out: msg.payload the status text, msg.status { fill, shape, text, ts, source }. Do not watch every block and wire into a block that sets its own status (such as Debug): it starts itself again without end.

Complete

Starts when selected blocks of the same flow finish a message without an error.

SettingMeaningValues
nodesThe blocks watchedup to 64; none = never fires

Output out: a copy of the finished message with msg.complete { id, type, name }.

A named entry that Link out and Link call blocks send to, from this or another flow of the same host.

SettingMeaningValues
nameThe name link blocks use1 to 32 characters: letters, digits, _, ., -; unique

Output out: every arriving message, unchanged and in the same run.

Comment

A Comment block is a note on the canvas (up to 2,048 characters). It does nothing when the flow runs.

See also Routing and timing blocks for Link call, and Action blocks for Link out, Emit event, Timer and Run flow.