自动任务
自动任务通过 cron 计划、事件或 Webhook 触发器自动执行工作流,是工单之外让智能体干活的另一种方式。
自动任务
自动任务是一种在触发条件满足时自动执行的工作流规则。触发器可以是 Cron 计划、工作区事件或入站 Webhook。触发后,自动任务会执行一个动作——创建工单、派发智能体任务或发送通知。
如果说工单是“事件驱动”的人工与智能体交互,那自动任务就是“自动化驱动”的后台作业——条件满足即自动执行,无需人工干预。两者都是让智能体干活的方式,只是触发时机与驱动方式不同。
自动任务位于侧边栏的 自动任务 下。
触发器类型
| 类型 | 触发时机 |
|---|---|
| 定时 | Cron 表达式与当前时间匹配时。 |
| 事件 | 工作区内发生特定事件时(如工单状态变更、智能体任务完成等)。 |
| Webhook | HTTP POST 请求到达自动任务的唯一 URL 时。 |
单个自动任务可配置多种触发器。
动作类型
| 动作 | 说明 |
|---|---|
| 创建工单 | 触发时,将自动任务的指令作为工单描述,创建并分配工单,然后启动执行者。整体类似自动完成一次手动创建并分配工单的流程,工作过程会在独立工单中跟踪。 |
| 仅运行 | 不创建工单,直接使用指令启动一次独立的智能体任务。体验上类似在聊天中向智能体发送该指令,但它不是聊天消息或对话轮次,而是归属于本次自动任务运行。 |
| 发送通知 | 向指定工作区成员发送站内通知,不启动智能体任务。 |
动作类型可在自动任务详情页修改。指令 字段在三种动作类型中共用:
- 创建工单 — 作为工单描述
- 仅运行 — 作为智能体任务指令
- 发送通知 — 当动作配置中未填写消息时,用作通知内容
动作配置
每种动作类型在自动任务详情页侧边栏中有独立的配置字段。
创建工单
| 字段 | 说明 |
|---|---|
| 工单标题 | 要创建的工单标题。为空时默认为 Job: <名称>。 |
| 优先级 | 工单优先级:低 / 普通 / 高 / 紧急(留空为普通)。 |
| 所属项目 | 将工单分配到的项目。 |
| 智能体 / 团队 | 接收工单的智能体或团队(在"智能体分配"区域设置)。 |
仅运行
| 字段 | 说明 |
|---|---|
| 智能体 / 团队 | 要派发任务的智能体或团队(在"智能体分配"区域设置)。 |
任务指令来自自动任务的 指令 字段。
团队分配: 两种动作类型均支持分配给团队而非单个智能体。分配团队时,平台会在派发时选取团队中最空闲的成员执行任务。
发送通知
| 字段 | 说明 |
|---|---|
| 消息 | 通知内容。为空时回退到 指令 字段。 |
任务所有者
每个自动任务都有一个 所有者——即创建该任务的成员。所有者显示在自动任务详情的侧边栏中,当工作区使用"仅自己"权限规则时,所有者决定了谁可以编辑或删除该任务。
| 操作 | 所需 Scope | 所有权规则 |
|---|---|---|
| 创建自动任务 | jobs:write | — |
| 编辑自动任务 | jobs:write | 仅自己:只有任务所有者可以编辑 |
| 删除自动任务 | jobs:delete | 仅自己:只有任务所有者可以删除 |
创建自动任务
- 在侧边栏打开 自动任务
- 点击 新建自动任务
- 填写:
- 名称 — 描述性标签(如
每日巡检、慢查询周报、值班告警) - 描述 — 可选说明,解释该自动任务的作用和存在原因
- 目标 — 可选的预期结果或成功标准
- 触发器类型 — 定时、事件或 Webhook
- 动作类型 — 触发后执行的操作
- 名称 — 描述性标签(如
- 点击 创建
- 在详情页,在侧边栏设置 指令 和各动作专属配置
定时触发器
定时触发器使用标准的 5 字段 Cron 表达式:分钟 小时 日 月 星期。时间以工作区时区计算。
示例:
| Cron | 含义 |
|---|---|
0 9 * * 1 | 每周一 9:00 |
*/15 * * * * | 每 15 分钟 |
0 0 1 * * | 每月 1 日午夜 |
0 17 * * 1-5 | 工作日 17:00 |
30 8 * * 6,0 | 周六和周日 08:30 |
平台的 Cron 调度器会轮询到期的触发器。时间误差可能有几秒——不建议将定时触发器用于硬实时场景。
事件触发器
事件触发器监听工作区内部的实时生命周期事件(如工单流转、智能体任务完成、评论发布或运行时下线),并在匹配预设条件时自动触发执行任务。
通过事件触发器,你可以构建自闭环的自动化流水线——例如:“当线上 Bug 工单状态变为 Done 时,自动指派智能体执行复盘分析” 或 “当 GPU 运行时异常下线时,自动创建报警工单并通知负责人”。
支持的事件类型与动作
事件类型 (event) | 说明 | 支持的动作 (actions) |
|---|---|---|
ticket | 工单生命周期事件 | created(创建)、updated(属性/状态更新)、deleted(删除) |
agent_task | 智能体任务执行状态 | completed(已完成)、failed(失败)、interaction(等待交互)、created(创建)、updated(更新) |
comment | 工单评论与讨论 | created(新评论)、updated(编辑)、deleted(删除) |
runtime | 守护进程与执行节点 | offline(下线/断开)、register(新上线)、updated(状态更新) |
4 层布尔过滤逻辑
事件触发器的规则体系支持精细的四层布尔组合:
- 规则卡片之间(Rule Cards)—
OR:一个触发器可配置多项事件规则,命中任意一项即可触发; - 动作列表(
actions)—OR:在同一规则内,匹配列表中的任意一个动作(例如actions: ["created", "updated"]); - 条件列表(
conditions)—AND:在同一规则内,所声明的所有条件字段必须同时满足; - 数组枚举值(Array Values)—
OR:单个条件字段若传入数组,命中其中任意一个值即视为匹配(例如priority: [3, 4]匹配高或紧急)。
常用条件字段与枚举参考
在 conditions 对象中,可使用各事件支持的结构化字段进行过滤:
- 工单(
ticket):status:状态枚举(0待办、1待处理、2进行中、3审核中、4已完成、5阻塞、6已取消)priority:优先级(0无、1低、2普通、3高、4紧急)assigneeType:执行者类型(0人类成员、1智能体、3团队)projectId:关联项目 UUIDlabels:包含指定标签
- 智能体任务(
agent_task):status:任务状态(10待处理、20排队中、30执行中、40已完成、50失败、60已取消)failureReason:失败错误码(如runtime_process_crashed、run_timeout)agentId:执行智能体 UUID
- 运行时(
runtime):status:节点状态(0离线、1在线、2繁忙、3异常)provider:接入 CLI 类型(如claude、kimi、codex)
自环触发防护(Self-Trigger Prevention)
自动任务引擎内置了防死循环机制:由某个 Job 执行动作(如创建工单、发表评论或启动任务)而间接产生的下游事件,绝不会反向重新激活该 Job 自身,确保流水线安全稳定运行。
[!NOTE] 动作类型约定:事件触发器专用于响应式自动化与即时流转,支持
assign_agent(执行智能体任务) 与send_notification(发送站内通知) 动作。如果事件发生后需要创建正式工单,建议在智能体指令(Goal)中让其根据事件 Payload 调用mopheus ticket create动态按需建单。
CLI 配置示例
目前事件触发器支持通过 Mopheus CLI 进行声明与更新:
# 1. 监听「高优工单更新为已完成」或「智能体任务执行失败」
mopheus job trigger-add <job-id> \
--kind event \
--label "故障流转与任务失败监听" \
--event-filter '[
{
"event": "ticket",
"actions": ["updated"],
"conditions": {
"status": 4,
"priority": [3, 4]
}
},
{
"event": "agent_task",
"actions": ["failed"],
"conditions": {
"failureReason": "runtime_process_crashed"
}
}
]'
# 2. 通过外部 JSON 规则文件添加事件触发器
mopheus job trigger-add <job-id> --kind event --event-filter-file ./event-rules.json
# 3. 更新现有触发器的事件规则
mopheus job trigger-update <job-id> <trigger-id> --event-filter '[{"event":"comment","actions":["created"]}]'
# 4. 查询工作区支持的完整事件与变量 Schema
mopheus job event-schema控制台可视化:配置完成后,在 Web 控制台的 自动任务详情 → 触发器 标签页中,系统会以可视化的状态胶囊卡片、AND / OR 连接微标及自然语言本地化完整展示当前的规则链路。
Webhook 触发器
Webhook 触发器会为自动任务生成唯一 URL,显示在自动任务详情页的 Webhook 标签页中:
POST https://<server_url>/api/v1/webhooks/jobs/<token>向该 URL 发送带有 JSON 正文的 HTTP POST 请求,自动任务即会触发。Token 在创建触发器时生成并嵌入 URL 中——基础用法不需要额外的 Authorization 请求头。
认证方式
| 方式 | 原理 |
|---|---|
| URL Token | 密钥嵌入在 URL 路径中,持有 URL 的任何人都可以触发自动任务。 |
| HMAC 签名 | 额外配置一个签名密钥,每次请求必须携带有效的签名请求头。 |
HMAC 签名
为触发器添加签名密钥后,服务端会拒绝所有未携带有效 X-Webhook-Signature(或兼容 GitHub 的 X-Hub-Signature-256)请求头的请求。
签名格式为 sha256=<请求体的 HMAC-SHA256 十六进制编码>。
curl 示例:
BODY='{"event":"test"}'
SECRET="your-signing-secret"
SIG="sha256=$(echo -n "$BODY" | openssl dgst -sha256 -hmac "$SECRET" | awk '{print $2}')"
curl -X POST "https://<server_url>/api/v1/webhooks/jobs/<token>" \
-H "Content-Type: application/json" \
-H "X-Webhook-Signature: $SIG" \
-d "$BODY"Python 示例:
import hmac, hashlib, requests
secret = "your-signing-secret"
body = b'{"event":"test"}'
sig = "sha256=" + hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()
requests.post(
"https://<server_url>/api/v1/webhooks/jobs/<token>",
data=body,
headers={"Content-Type": "application/json", "X-Webhook-Signature": sig},
)触发器有效期
定时和 Webhook 触发器都支持可选的截止时间。超过截止时间后,触发器会自动停用——对于 Webhook 触发器,所有传入请求将返回 403;对于定时触发器,则不再触发。适合需要有时限集成但又不想手动清理的场景。
在 CLI 中,添加或更新触发器时可以用 --expires-at 设置截止时间(接受 RFC3339 或 YYYY-MM-DD HH:MM 格式):
# 为定时触发器设置截止时间
mopheus job trigger-add <job-id> --kind schedule --cron "0 9 * * 1-5" --expires-at "2026-12-31T00:00:00Z"Token 轮换
如果 URL Token 泄露,可在 Webhook 标签页中轮换 Token。轮换会立即使旧 URL 失效——请在轮换前通知所有上游调用方更新 URL。
启用与停用
每个自动任务都有启用开关。停用后的自动任务:
- 不会按计划触发
- 拒绝传入的 Webhook 请求
- 配置保持不变——重新启用后无需任何重新配置即可恢复
智能体就绪检查
执行动作前,自动任务引擎会检查目标智能体是否就绪。若不满足条件,本次调度会被跳过(而非失败):
- 智能体不存在或已归档
- 智能体未绑定运行时
- 智能体的运行时处于离线或错误状态
被跳过的运行会在运行历史中显示 已跳过 状态和原因,不计为失败,也不触发重试。
运行记录
每个自动任务都有运行历史,列出每次触发的详情——触发时间、触发原因和执行结果。失败的运行会显示错误原因,可从详情页重放。
| 状态 | 含义 |
|---|---|
| 运行中 | 正在执行。 |
| 已完成 | 成功完成。 |
| 失败 | 以错误结束。 |
| 已跳过 | 调度时智能体未就绪。 |
失败不会自动重试。如果 Webhook 事件至关重要,请配置上游系统在收到非 2xx 响应时进行重试。
命令行参考
# 列出当前工作区的所有自动任务
mopheus job list
# 创建自动任务
mopheus job create \
--name "每日巡检" \
--trigger-type schedule \
--action-type create_ticket \
--instruction "连接生产数据库,检查 pg_stat_activity 中的长事务和锁等待,生成长事务报告" \
--action-config '{"title":"每日巡检","priority":2}' \
--cron "0 9 * * 1-5" \
--timezone "Asia/Shanghai"
# 创建 Quartz 七字段工作日 09:00 计划
mopheus job create \
--name "工作日报告" \
--trigger-type schedule \
--action-type create_ticket \
--cron-dialect quartz \
--cron "0 0 9 ? * 2-6 *" \
--timezone "Asia/Shanghai"
# 为自动任务添加 cron 触发器
mopheus job trigger-add <job-id> \
--kind schedule \
--cron "0 9 * * 1-5" \
--timezone "Asia/Shanghai"
# 手动触发自动任务
mopheus job trigger <id>
# 更新自动任务
mopheus job update <id> --instruction "新的智能体指令"
mopheus job update <id> --enabled false
# 查看运行历史
mopheus job runs <id>
# 删除自动任务
mopheus job delete <id>
# 管理触发器
mopheus job trigger-list <job-id>
mopheus job trigger-delete <job-id> <trigger-id>
mopheus job trigger-rotate-url <job-id> <trigger-id>运行 mopheus job create --help 查看完整的动作配置字段说明。
对于计划任务,传入 --cron 会同时创建首个触发器。默认 standard 的字段顺序是
分钟 小时 日 月 星期;quartz 的字段顺序是 秒 分钟 小时 日 月 星期 年。
例如 0 0 9 ? * 2-6 * 表示工作日 09:00 执行,其中 ? 表示不指定日字段。
--start-at 设置最早可运行时间,未指定时为当前时间;--expires-at 是排他截止时间,
该时间及之后的运行不会执行。