Actions
The fixed menu of actions, what each needs, what it does, and what its receipt records.
The menu is defined once, as ACTIONS in the package. The dashboard draws its forms from it; the worker
runs by name.
| Action | Needs | Fired by | Result in the receipt |
|---|---|---|---|
telegram | message, sealed chat | A worker with a bot token that can open the seal | messageId, latencyMs, attempts |
webhook | url (https), optional message | Any worker | code, latencyMs, attempts |
receipt | nothing | Any worker | (empty) |
extend | extendDays on an expire rule | Any worker, if the target allows it | newExpiresAt |
Timing
telegram and webhook try retries + 1 times (default 4), 10 seconds per attempt, backing off 2, 4,
8 seconds, within 30 seconds in total. A webhook 4xx other than 408 and 429 is not retried. extend sets
the target's expiry to extendDays from the moment it fires.
Messages
{entity} becomes the target's key (- for a time rule), {time} the deadline as
YYYY-MM-DD HH:MM UTC, and {rule} the rule's name (or key). Unknown placeholders are left as they are.
Adding an action
An action is one entry in ACTIONS and one runner in src/actions/. Slack and Discord are next: their
webhook URLs are secrets, so they need a sealed connection like Telegram's.