Skip to content
Alvo is pre-v0.1: the image runs from its edge tag, and no NuGet package or release is published yet.Pre-v0.1: no release yet.Roadmap and status

automation

ECA rules (event–condition–action).

Not in this build: see What works today.

ECA rules (event–condition–action). Key = rule name. Run post-commit from the outbox, durable, with retries.

  • Type: map of object
  • Required: no
  • Names match ^[a-z][a-z0-9_-]{0,62}$.

Human-readable description of the automation rule.

  • Type: string
  • Required: no

Whether the rule is active.

  • Type: boolean
  • Required: no
  • Default: true

What fires the rule: an event pattern or a cron schedule.

  • Type: object
  • Required: yes

Event pattern, e.g. entity.deals.updated, entity.*.created, entity.orders.* or the coalesced batch shape entity.orders.created.batch.

  • Type: string
  • Required: yes (in its variant)
  • Pattern: ^(entity|auth|storage)\.([a-z][a-z0-9_]*|\*)\.([a-z]+|\*)(\.batch)?$
  • Exactly one of event, schedule.

Cron expression (5 fields, UTC).

  • Type: string
  • Required: yes (in its variant)
  • Pattern: ^\S+ \S+ \S+ \S+ \S+$
  • Exactly one of event, schedule.

Condition in the CEL subset. Context: @user, @tenant; hooks/events additionally expose old, new, changed(field). Compiled fail-fast at apply time.

  • Type: string
  • Required: no

perItem = one execution per affected row; batch = one execution with an array payload (coalesces bulk operations; matches the entity.*.*.batch event shape).

  • Type: string
  • Required: no
  • Values: "perItem", "batch"
  • Default: "perItem"

Actions to run when the rule fires (in order).

  • Type: array of object
  • Required: yes

Selects the variant.

  • Type: string
  • Required: yes
  • Values: "webhook", "email", "function", "entity.update", "http.call"

The name of an endpoint declared under the top-level webhooks.endpoints.

  • Type: string
  • Required: yes (in its variant)
  • Pattern: ^[a-z][a-z0-9_-]{0,62}$
  • Only when type is "webhook".

Depends on the variant; see the notes below.

  • Type: string or map of any
  • Required: depends on the variant
  • Only when type is "webhook", "entity.update" or "http.call".
  • When type is "webhook" or "http.call": string, optional — JSONata transformation expression (JSON -> JSON). Runs strictly post-commit (after-side), with depth/time limits. {{…}} templates are syntactic sugar.
  • When type is "entity.update": map of any, required — Field -> literal value or tagged {“$cel”: ”…”} expression; {{…}} sugar allowed in string values. Each entry: A literal JSON value, or a tagged CEL expression object {“$cel”: ”…”}.

automation.<name>.actions[].payload.<name>.$cel

Section titled “automation.<name>.actions[].payload.<name>.$cel”

A CEL expression whose result becomes the value, in place of a JSON literal (e.g. now(), @user.id).

  • Type: string
  • Required: yes

The name of a template declared in the top-level templates block.

  • Type: string
  • Required: yes (in its variant)
  • Pattern: ^[a-z][a-z0-9_-]{0,62}$
  • Only when type is "email".

Address or a {{…}} template.

  • Type: string
  • Required: yes (in its variant)
  • Only when type is "email".

JSONata transformation expression (JSON -> JSON). Runs strictly post-commit (after-side), with depth/time limits. {{…}} templates are syntactic sugar.

  • Type: string
  • Required: no
  • Only when type is "email".

The name of a function declared in the top-level functions block.

  • Type: string
  • Required: yes (in its variant)
  • Pattern: ^[a-z][a-z0-9_-]{0,62}$
  • Only when type is "function".

JSONata transformation expression (JSON -> JSON). Runs strictly post-commit (after-side), with depth/time limits. {{…}} templates are syntactic sugar.

  • Type: string
  • Required: no
  • Only when type is "function".

The entity whose record is created or updated.

  • Type: string
  • Required: yes (in its variant)
  • Pattern: ^[a-z][a-z0-9_-]{0,62}$
  • Only when type is "entity.update".

Id or {{…}} template; omit to create a new record.

  • Type: string
  • Required: no
  • Only when type is "entity.update".

Absolute URL to call.

  • Type: string
  • Required: yes (in its variant)
  • Only when type is "http.call".

HTTP method.

  • Type: string
  • Required: no
  • Values: "GET", "POST", "PUT", "PATCH", "DELETE"
  • Default: "POST"
  • Only when type is "http.call".

automation.<name>.actions[].headersSecretRef

Section titled “automation.<name>.actions[].headersSecretRef”

Secret name in ISecretStore holding request headers (e.g. auth token); never the value itself.

  • Type: string
  • Required: no
  • Only when type is "http.call".