事件回调

了解如何配置事件回调,在系统事件发生时自动触发 Agent 执行任务

事件回调

功能概述

事件回调 Hook 是一种自动化机制,允许系统管理员配置当系统内发生特定事件时,自动唤起 Agent 执行预设任务。

支持的事件类型

任务事件

事件名称触发时机上下文变量
task.created新任务创建时taskId, taskDBId, taskType, taskTitle, taskStatus, createdBy
task.updated任务更新时taskId, taskDBId, taskType, taskTitle, taskStatus, updatedBy, changes
task.commented添加评论时taskId, taskDBId, taskType, taskTitle, commentId, commentContent, commenterId, commenterName
task.reassigned负责人变更时taskId, taskDBId, taskType, taskTitle, assigneeId, assigneeName, updatedBy
task.status_changed状态变更时taskId, taskDBId, taskType, taskTitle, taskStatus, updatedBy
task.deleted任务删除时taskId, taskDBId, taskType, taskTitle, deletedBy

对话事件

事件名称触发时机上下文变量
conversation.error对话出错时conversationId, errorMessage, errorStack, retryCount
conversation.quota_exhausted额度用尽时conversationId, errorMessage, quotaType, remaining
conversation.timeout对话超时时conversationId, errorMessage, duration, lastMessage

工作空间事件

事件名称触发时机上下文变量
workspace.member_joined成员加入时userId, userName
workspace.member_left成员离开时userId, userName

使用方式

创建事件回调任务

  1. 进入工作空间 → 自动化任务页面
  2. 点击"新建任务"
  3. 选择类型为"事件回调"
  4. 配置监听事件(可多选)
  5. 编写 Prompt 模板(支持变量替换)
  6. 可选:配置条件表达式
  7. 保存任务

上下文变量说明

所有事件都会携带通用变量,不同类别的事件还会携带各自专属的变量。在 Prompt 模板和条件表达式中均可使用这些变量。

通用变量

变量名类型说明示例值
eventNamestring触发的事件名称task.created
timestampstring事件触发时间(ISO 格式)2026-01-15T09:00:00Z
workspaceIdstring所属工作空间 IDcmkenp...

任务变量

适用于 task.* 类事件。不同的任务事件携带的变量不同,具体每个事件包含哪些变量请参见上方支持的事件类型表格。

变量名类型说明示例值
taskIdstring任务业务编号task-1
taskDBIdstring任务数据库 UUIDa1b2c3d4-...
taskTypestring任务类型(如 task、bug、story 等)task
taskTitlestring任务标题修复登录Bug
taskStatusstring任务当前状态todo
assigneeIdstring负责人 IDuser-uuid-456
assigneeNamestring负责人名称张三
createdBystring任务创建者李四
updatedBystring任务更新者王五
deletedBystring任务删除者赵六
changesstring变更字段详情(JSON 格式){"status":"blocked"}

评论变量

适用于 task.commented 事件。其他任务事件不包含评论变量。

变量名类型说明示例值
commentIdstring评论 IDcomment-uuid-789
commentContentstring评论内容这个Bug已修复
commenterIdstring评论者 IDuser-uuid-abc
commenterNamestring评论者名称赵六

对话变量

适用于 conversation.* 类事件。不同的对话事件携带的变量不同,具体见上方支持的事件类型表格。

变量名类型说明示例值
conversationIdstring对话 IDconv-uuid-abc
errorMessagestring错误信息API调用超时
errorStackstring错误堆栈(仅 error 事件)Error: ...
retryCountnumber重试次数(仅 error 事件)2
quotaTypestring额度类型(仅 quota_exhausted 事件)token
remainingnumber剩余额度(仅 quota_exhausted 事件)0
durationnumber超时时长秒数(仅 timeout 事件)300
lastMessagestring最后一条消息(仅 timeout 事件)请帮我分析...

工作空间变量

适用于 workspace.* 类事件。

变量名类型说明示例值
userIdstring相关用户 IDuser-uuid-def
userNamestring相关用户名称孙七

批量变量

当启用批量合并时,合并后的事件会携带以下额外变量。

变量名类型说明示例值
batchboolean是否为批量合并事件true
batchSizenumber合并的事件数量10
eventsstring各事件摘要(JSON 数组)[{"eventName":"task.created",...}]

Prompt 模板变量

在 Prompt 中使用 {{变量名}} 插入事件上下文变量:

新任务创建通知: - 任务标题:{{taskTitle}} - 任务状态:{{taskStatus}} - 创建者:{{createdBy}} 请自动分析任务优先级并添加标签。

条件表达式

条件表达式用于精确控制事件触发条件,使用 JavaScript 表达式语法:

// 仅 blocked 状态触发 ctx.taskStatus === 'blocked' // 标题包含"紧急"时触发 ctx.taskTitle.includes('紧急') // 复合条件 ctx.taskStatus === 'blocked' && ctx.retryCount < 3 // 多状态匹配 ['blocked', 'waiting'].includes(ctx.taskStatus)

留空表示所有匹配事件都触发。

高级特性

操作级去重(operationId)

当一次操作同时触发多个事件时(例如修改任务状态会同时产生 task.updatedtask.status_changed),系统会自动识别这些事件来自同一次操作,确保每个回调任务只执行一次。

示例:假设配置了一个回调任务同时监听 task.updatedtask.status_changed,当用户修改任务状态时:

  • 系统产生 2 个事件:task.updated + task.status_changed
  • 两个事件共享同一个 operationId
  • 回调任务只执行 1 次,而不是 2 次

此机制对用户透明,无需额外配置。

事件去重

系统自动对短时间内的重复事件进行去重(默认 5 秒窗口),避免同一事件多次触发回调。

批量事件合并

当短时间内产生大量相同类型事件时,系统会在时间窗口内合并事件,一次性传递给 Agent 处理,提高执行效率。

队列控制

系统限制并发执行的事件回调数量(默认最大 100),防止系统过载。

配置参数

以下参数可通过系统配置管理:

配置项默认值说明
eventCallback.dedupEnabledtrue是否启用事件去重
eventCallback.dedupWindowMs5000去重时间窗口(毫秒)
eventCallback.mergeEnabledfalse是否启用批量合并
eventCallback.mergeWindowMs5000合并时间窗口(毫秒)
eventCallback.maxQueueSize100最大队列长度

常见问题

Q:跨工作空间的事件会触发回调任务吗?

A:不会。事件回调任务只会被同一工作空间内产生的事件触发。例如,工作空间 A 中配置的回调任务不会被工作空间 B 中的任务创建事件触发。每个事件都携带 workspaceId,系统在匹配回调任务时会严格按工作空间隔离。

事件回调 | Knodo 文档