Schedules, intervals, and events
<schedule id="dailyReport" cron="0 8 * * *" timezone="Europe/Berlin" on-missed="run-once" />| Attribute | Required | Meaning |
|---|---|---|
id | Yes | Trigger identity. |
cron | Yes | Five numeric fields: minute, hour, day-of-month, month, day-of-week. |
timezone | No | Canonical IANA timezone; defaults to UTC. |
on-missed | No | skip or run-once; defaults to skip. |
WOML Cron v1 supports wildcards, lists, inclusive ranges, and /step. It does not support seconds, names, macros, wrapping ranges, or Quartz-only tokens. Restricted day-of-month and day-of-week use POSIX OR semantics. DST nonexistent times are skipped; repeated wall times map to both UTC instants. Payload: { scheduledAt, triggeredAt } using RFC 3339 UTC timestamps.
<interval>
<interval id="refreshCache" every="5m" on-missed="skip" />| Attribute | Required | Meaning |
|---|---|---|
id | Yes | Trigger identity. |
every | Yes | Fixed interval from 1s through 30d. |
on-missed | No | skip or run-once; defaults to skip. |
Intervals use an anchored fixed-rate grid, so a slow run does not shift future planned instants. Payload: { scheduledAt, triggeredAt }.
<event>
<event
id="orderCreated"
name="order.created"
secret="{{secrets.EVENT_CONTROL_TOKEN}}"
>
<schema>{ "type": "object", "required": ["orderId"] }</schema>
</event>| Attribute | Required | Meaning |
|---|---|---|
id | Yes | Trigger identity. |
name | Yes | Named event, max 256 characters, with at least two lowercase segments separated by ., _, or -. |
secret | No | Enables authenticated public HTTP publication when present. Omit for internal-only events. |
The optional schema follows the webhook schema rules. With a secret, the runtime exposes POST /_woml/events/{eventName} and requires a bearer token plus an Event-ID. One publication fans out to every exact-name subscriber. Each subscriber validates and admits independently, so the result may be accepted, partial, or rejected. Without a secret, no public route is opened, but services.events.emit() can still publish internally.