Events (triggers)
Every automation chain starts with one of the following events.
| Event | Fires when... | Settings |
|---|---|---|
| App entry | The app loads for the first time for this visitor | - |
| Screen opens | The visitor enters a particular screen | screenId required |
| Screen closes | The visitor leaves a particular screen | screenId required |
| Element interaction | Click / typing / deleting / Enter / finished typing (for input fields) - or click / long-press / swiped left / swiped right (for every other element) | elementId required mode required |
| Key pressed | A specific key (or any key) is pressed anywhere on the screen - ignored while an input field has focus | key optional (blank = any key) |
| Run once (on entry) | Only once per device, ever (a flag is saved on the device) | - |
| Run repeatedly (every X seconds) | Every N seconds, for as long as the tab is open | seconds required |
| Every frame (game loop) | Roughly 60 times a second, for as long as the visitor is on this screen (started on screen-open, stopped on screen-leave - unlike "Run repeatedly," which keeps ticking regardless of screen). The building block for game-style movement - pair with "Move element" and "Check overlap" | screenId required |
| Scheduled notification | A server-side clock - works even while the app is closed | time required timezone days[] enabled |
| Returned to the app / Left the app | The tab regains focus / goes to the background | - |
| Variable changed | A specific cache variable's value genuinely changed | variableName required |
| Internet connection restored / lost | The browser's online/offline event | - |
| Device rotated | Switching between portrait and landscape | - |
| Element scrolled into / out of view | The element enters/leaves the visible scroll area (20% threshold) | elementId required |
| No activity for a while | After N seconds with no activity - resets and fires again after every further quiet stretch | seconds required |
| Table changed (live) | Someone wrote to a data table - instant notification via WebSocket, no polling | collection required |
Interaction inside a Data Loop
When the "element" of an "Element interaction" event sits inside a Data Loop's row template, the listener gets wired separately to every row actually rendered, and that row's columns instantly become regular variables (e.g. {{friendPhone}}) - handy for building "tap to call this friend" out of a list.
Which key was that?
A single "Key pressed" event set to "Any key" can still tell keys apart - the key that fired is always readable as {{lastKey}} (see the "Functions and expressions" chapter), so one event plus a condition on {{lastKey}} covers a whole set of shortcuts instead of one event node per key.