Call a function directly
Call a function by itsfunction_id from worker code (worker.trigger(...)) or from the terminal
(iii trigger). The engine routes the call to whatever worker registered the function; no trigger
registration is involved. The action field controls delivery: by default the call waits for the
function to return its result, or for the configured timeout to fire. Pass a different
TriggerAction to change that.
- Node / TypeScript
- Python
- Rust
- CLI
- Default (synchronous). No
actionset. The call waits for the function to return its result or for the configured timeout to fire. TriggerAction.Void(). Fire-and-forget. The call returns immediately; the function still runs but the caller doesn’t see the result.TriggerAction.Enqueue({ queue }). Provided by iii-queue. Routes the invocation through a named queue with retries; the call returns once the message is enqueued.
Workers can provide their own
TriggerActions. Check each worker’s
documentation for the action types it offers.In Python, every blocking method has an awaitable twin (
trigger_async, shutdown_async,
create_channel_async) for use inside asyncio. See the Python SDK
reference.Register a trigger
If you’re authoring a worker, you’ll want to refer to Creating Workers /
Triggers to learn the
difference between registering a trigger, and registering a trigger type.
http endpoint, a cron job, a change in state, or any other trigger that a
worker supports. You can also write your own.
You bind triggers to functions via the function_id. The trigger declares its type, its config
(defined by each type), and the function to invoke.
- Node / TypeScript
- Python
- Rust
http type).
Handling missing triggers
When the engine cannot register a trigger, most commonly because the trigger type’s worker is not active in the project, it sends aTriggerRegistrationResult with an error body back to the
worker that initiated the request and logs it.
For known trigger types (ex. http, subscribe, state, durable:subscriber, stream), the
error message will include the install command for the missing worker. If it doesn’t you can find
the worker that exposes the needed type at workers.iii.dev
Bind multiple triggers to one function
It’s valid to bind multiple triggers to the samefunction_id and this can be done across any
number of types. Register a second trigger with the same function_id and a different type or
config; the function runs unchanged whether the call arrives over HTTP, on a cron schedule, or from
a queue message.
- Node / TypeScript
- Python
- Rust
Gate a trigger with a condition
A trigger can carry an optionalcondition_function_id (set inside the trigger’s config). When
the trigger fires, the engine invokes the condition function first with the same payload the handler
would receive; the target function_id only runs when the condition returns truthy. The condition
is a regular registered function.
- Node / TypeScript
- Python
- Rust
Unregister a trigger
Trigger registration returns a handle with anunregister() method. Call it to drop the trigger at
runtime; when the worker disconnects, all of its triggers are removed automatically.
- Node / TypeScript
- Python
- Rust