SDK
HTTP Reference
io.sendEvent()
io.sendEvent()
allows you to send an event from inside a Job run. The sent event will trigger any Jobs that are listening for that event (based on the name).
//this Job sends an event that triggers the second job
client.defineJob({
id: "job-1",
name: "First job",
version: "0.0.1",
trigger: cronTrigger({
cron: "0 9 * * *", // 9am every day (UTC)
}),
run: async (payload, io, ctx) => {
//sends the "new.user" event with a userId in the payload
await io.sendEvent("send-event", {
name: "new.user",
payload: {
userId: "u_1234567890",
},
});
},
});
client.defineJob({
id: "job-2",
name: "Second job",
version: "0.0.1",
//subscribes to the "new.user" event
trigger: eventTrigger({
name: "new.user",
schema: z.object({
userId: z.string(),
}),
}),
run: async (payload, io, ctx) => {
await io.logger.log("New user created", { userId: payload.userId });
//do stuff with the new user
},
});
If you want to send an event from outside a run (e.g. just from your backend) you should use client.sendEvent() instead.
Use eventTrigger() on a Job to listen for events.
For multiple events, use io.sendEvents() instead.
Parameters
Should be a stable and unique cache key inside the run()
. See
resumability for more information.
The name
property must exactly match any subscriptions you want to
trigger.
The payload
property will be sent to any matching Jobs and will appear
as the payload
param of the run()
function. You can leave this
parameter out if you just want to trigger a Job without any input data.
The optional context
property will be sent to any matching Jobs and will
be passed through as the context.event.context
param of the run()
function. This is optional but can be useful if you want to pass through
some additional context to the Job.
The id
property uniquely identify this particular event. If unset it
will be set automatically using ulid
.
This is optional, it defaults to the current timestamp. Usually you would only set this if you have a timestamp that you wish to pass through, e.g. you receive a timestamp from a service and you want the same timestamp to be used in your Job.
This is optional, it defaults to "trigger.dev". It can be useful to set
this as you can filter events using this in the eventTrigger()
.
An optional Date when you want the event to Trigger Jobs. The event will be sent to the platform immediately but won't be acted upon until the specified time.
An optional number of seconds you want to wait for the event to Trigger any relevant Jobs. The event will be sent to the platform immediately but won't be acted upon until the specified time.
This optional param will be used by the Trigger.dev Connect feature, which is coming soon.
Returns
The id
of the event that was sent.
The name
of the event that was sent.
The payload
of the event that was sent
The timestamp
of the event that was sent
The context
of the event that was sent. Is undefined
if no context was
set when sending the event.
The timestamp when the event will be delivered to any matching Jobs. Is
undefined
if deliverAt
or deliverAfter
wasn't set when sending the
event.
The timestamp when the event was delivered. Is undefined
if deliverAt
or deliverAfter
were set when sending the event.
//this Job sends an event that triggers the second job
client.defineJob({
id: "job-1",
name: "First job",
version: "0.0.1",
trigger: cronTrigger({
cron: "0 9 * * *", // 9am every day (UTC)
}),
run: async (payload, io, ctx) => {
//sends the "new.user" event with a userId in the payload
await io.sendEvent("send-event", {
name: "new.user",
payload: {
userId: "u_1234567890",
},
});
},
});
client.defineJob({
id: "job-2",
name: "Second job",
version: "0.0.1",
//subscribes to the "new.user" event
trigger: eventTrigger({
name: "new.user",
schema: z.object({
userId: z.string(),
}),
}),
run: async (payload, io, ctx) => {
await io.logger.log("New user created", { userId: payload.userId });
//do stuff with the new user
},
});
Was this page helpful?
//this Job sends an event that triggers the second job
client.defineJob({
id: "job-1",
name: "First job",
version: "0.0.1",
trigger: cronTrigger({
cron: "0 9 * * *", // 9am every day (UTC)
}),
run: async (payload, io, ctx) => {
//sends the "new.user" event with a userId in the payload
await io.sendEvent("send-event", {
name: "new.user",
payload: {
userId: "u_1234567890",
},
});
},
});
client.defineJob({
id: "job-2",
name: "Second job",
version: "0.0.1",
//subscribes to the "new.user" event
trigger: eventTrigger({
name: "new.user",
schema: z.object({
userId: z.string(),
}),
}),
run: async (payload, io, ctx) => {
await io.logger.log("New user created", { userId: payload.userId });
//do stuff with the new user
},
});