Forward Schedule API 复用的 Schedule 和 Schedule Run 响应结构。
Schedule 对象
创建、查询、列表、更新、归档、暂停和恢复接口返回该结构。
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | Schedule ID,前缀为 sched_。 |
source | string | 权威创建方式,当前为 api 或 tool。详见创建来源。 |
source_session_id | string | null | 创建来源 Session。api 来源为 null,tool 来源为非空 sess_*。 |
identity_id | string | Schedule 所属 Forward Identity ID。 |
template_id | string | Schedule 执行使用的 Forward Template ID。 |
name | string | Schedule 名称。 |
description | string | Schedule 描述;未设置时为空字符串。 |
status | string | active 或 paused;归档状态通过 archived_at 表达。 |
paused_reason | object | null | 暂停原因;未暂停时为 null。 |
initial_events | array | 每次执行时注入的初始事件。 |
initial_events_version | integer | 只读输入内容版本,从 1 开始;递增规则见输入版本。 |
resources | array | Schedule 专属文件配置,按 file_id 排序;未配置时为 []。结构和生效规则见文件资源。 |
execution | object | 执行策略,字段见执行策略。 |
trigger_policy | object | 触发策略,字段见触发策略。 |
environment_id | string | 执行环境 ID。 |
sinks | array | 结果推送目标;未配置时为 []。 |
metadata | object | 调用方业务元数据。 |
archived_at | string | null | 归档时间,RFC 3339;未归档时为 null。 |
created_at | string | 创建时间,RFC 3339。 |
updated_at | string | 最后更新时间,RFC 3339。 |
执行策略
| 字段 | 类型 | 说明 |
|---|---|---|
session_mode | string | new_session 或 reuse_session。 |
max_concurrent_runs | integer | 同一 Schedule 最大并发 Run 数。 |
max_attempts | integer | 单个 Run 的最大尝试次数,当前为 1 或 2。 |
timeout_ms | integer | 单次尝试超时时间,单位毫秒。 |
触发策略
| 字段 | 类型 | 说明 |
|---|---|---|
type | string | cron、once、interval 或 manual。 |
expression | string | 触发表达式;manual 时为空字符串或省略。 |
timezone | string | IANA timezone;不适用时为空字符串或省略。 |
start_at | string | 可选执行窗口开始时间,RFC 3339。 |
stop_at | string | 可选执行窗口结束时间,RFC 3339。 |
upcoming_runs_at | array | 后续触发时间,UTC ISO 8601;当前返回 [] 或最多一个时间。 |
last_run_at | string | null | 最近一次触发时间。 |
sinks 的公开格式和约束见创建 Schedule。
文件资源
创建和更新 Schedule 时,通过顶层 resources 数组指定文件,格式与 Session、Batch 的文件资源一致。先通过上传 File获得 file_id,再引用当前调用方在该 Schedule 的 Identity 下有权访问的 Forward File。
| 字段 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
type | string | 是 | 当前只支持 file。 |
file_id | string | 是 | Files API 返回的文件 ID,按不透明字符串处理,不要求固定前缀;不能为空或包含控制字符。 |
mount_path | string | 否 | Agent 容器内的文件路径。显式指定时必须是规范绝对路径,不能为 /,不能包含控制字符,最长 1024 字节。 |
enabled 等额外字段。最多指定 100 个文件;同一数组不能重复 file_id,也不能为不同文件显式指定相同挂载路径。接口不接受顶层 files 参数。
省略或传空字符串的 mount_path 使用 /data/workspace/<filename>;同名文件应显式指定不同路径。若同一文件已由 Template / Identity Config 配置,省略 Schedule 路径时沿用继承路径。
创建与更新
请求中的 resources | 创建 Schedule | 更新 Schedule |
|---|---|---|
| 省略 | 不配置专属文件。 | 保留原配置。 |
null 或 [] | 不配置专属文件。 | 清空全部专属文件配置。 |
| 非空数组 | 配置数组中的文件。 | 整组替换专属文件配置,不按元素合并。 |
resources 数组,包括旧 Schedule 的 []。它只表示 Schedule 自身配置,不包含 Template / Identity Config 的继承文件;省略的挂载路径不会在此补全为运行时路径。修改 resources 不递增 initial_events_version,该版本仅描述 initial_events。
继承与生效时点
执行时将 Schedule 文件与当前 Template / Identity Config 的文件合并。同一 file_id 去重:Schedule 省略路径或显式路径与继承路径相同时可复用,显式指定不同路径会冲突;不同文件不能占用同一路径。与继承配置合并后才能发现的冲突,会在执行时、发送任务消息前报错。
new_session 和 reuse_session 均支持文件配置。每个执行尝试在创建 Session 或发送任务前选定本次 Schedule 专属 resources;同一 attempt 的发送重试和恢复沿用已选的专属文件配置,新的 attempt 可以选用更新后的配置。更新不打断当前执行;后续执行会应用选定的新增、移除和路径变更,复用 Session 时也会同步。Template / Identity Config 的继承文件不属于该快照,仍按当前配置刷新。
清空 Schedule 文件不会移除继承文件,也不会修改 Template / Identity Config。文件挂载不会将内容自动插入 initial_events;任务可在消息中按挂载路径读取文件,例如 Read /data/news-sources.csv and summarize its contents。
文件删除限制
未归档的 Schedule(包括已暂停的 Schedule)引用文件时,删除 File返回 HTTP 409。更新或清空文件配置、归档 Schedule 会释放该配置引用;尚未进入终态的 Run 已选定的文件仍受保护,直到 Run 结束。其他 Template / Identity Config 或 Session 的引用也可能继续阻止删除。
Schedule Run 对象
手动运行、查询 Run 和列出 Runs 接口返回该结构。
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | Schedule Run ID,前缀为 srun_。 |
source | string | 父 Schedule 的权威创建方式,当前为 api 或 tool。详见创建来源。 |
source_session_id | string | null | 父 Schedule 的创建来源 Session。 |
schedule_id | string | 所属 Schedule ID。 |
identity_id | string | Forward Identity ID。 |
template_id | string | Forward Template ID。 |
session_id | string | null | 本次执行创建或使用的 Session。 |
status | string | pending、running、completed、failed 或 skipped。 |
trigger_context | object | 本次 Run 的触发方式,详见 Trigger Context。 |
error | object | null | 失败或跳过时的结构化错误。 |
result_payload | string | null | 主流程文本结果。 |
error_message | string | null | 便于展示的错误信息;结构化信息保留在 error。 |
push_sink | string | null | 本次 IM 投递使用的 Sink 类型;未配置时为 null。 |
push_status | string | IM 投递状态:pending、succeeded、failed 或 skipped。 |
push_finished_at | string | null | IM 投递结束时间。 |
attempt | integer | 当前或最终实际执行到第几次,从 1 开始。 |
initial_events_version | integer(可选) | 当前执行尝试所选输入的版本;尚未选择或无法确认时省略,见输入版本。 |
initial_events | array(可选) | 仅在获取单条 Run 且传 include_initial_events=true 时,返回当前尝试已绑定的输入快照;未知时省略,详见查询输入快照。 |
triggered_at | string | 触发时间,RFC 3339。 |
started_at | string | null | 开始执行时间,RFC 3339。 |
completed_at | string | null | 结束时间,RFC 3339。 |
duration_ms | integer | null | 执行耗时,单位毫秒。 |
created_at | string | 记录创建时间,RFC 3339。 |
status 与 IM 投递 push_status 相互独立。Schedule 配置 execution.max_attempts=2 时,同一个 Run 最终可能返回 attempt=2。
Identity 启停与排期
Identity 停用期间不启动新的 Schedule 执行,尚未开始的 Run 可能被记录为 skipped;已接受的执行及结果投递会自然完成。重新启用后,周期任务从未来的触发点继续,不补跑停用期间错过的触发;已经过期的一次性触发保留 skipped Run 并按正常规则归档。手动暂停、已归档或已删除的 Schedule 不会因 Identity 启用而恢复,详见启用 Identity。
输入版本
initial_events_version 由服务端维护,无需在创建或更新请求中传入。新建 Schedule 为 1;只有规范化后的 initial_events 实际改变时才递增。相同内容更新、修改 resources、名称或执行/触发策略不递增;改回曾经使用的内容仍会生成新的版本。存量 Schedule 的当前输入以 1 为基线,不追溯历史版本。
Run 创建时尚未绑定输入;在本次 attempt 首次发送输入前,执行器将匹配的内容和版本绑定到 Run。同一 attempt 的发送重试和恢复沿用该绑定,新的 attempt 可以选用更新后的输入。因此应结合 attempt 理解 Run 的版本,版本存在仅表示已选择输入,不代表运行时已经接收或执行成功。
尚未选择输入的 pending、skipped Run,以及无法确认执行输入的历史 Run,会省略该字段;未知版本不返回 0,也不能用当前 Schedule 的版本补齐。接入方应兼容新增字段,并将缺失版本视为未知。
接入方可在创建或更新 Schedule 后保存 schedule_id、initial_events_version 与输入内容的对应关系,再按 Run 或 Webhook 回调中的版本关联执行输入。当前 Schedule 返回的是最新配置,可能与已经开始执行的 Run 不同。
可通过获取 Schedule Run并传 include_initial_events=true 回查该次所选输入,无需依赖当前 Schedule 的配置。
创建来源
source 和 source_session_id 是只读字段,在 v1/v2 的完整 Schedule 和 Schedule Run 响应中始终存在。
source | source_session_id | 含义 |
|---|---|---|
api | null | 通过公开 Schedule API 创建。 |
tool | 非空 sess_* | 通过 Forward 托管工具创建,关联发起创建工具调用的交互 Session。 |
metadata.source 只是可修改的业务元数据,不代表权威来源。
Schedule Run 继承父 Schedule 的来源,与本次手动或自动触发、是否配置 sinks 无关;历史 Run 和已归档 Schedule 的 Run 同样适用。Run 的 session_id 表示本次执行 Session,trigger_context.type 表示本次触发方式。来源 Session 不表示 reuse_session 的执行绑定,内部来源结果投递目标也不作为公开来源。
来源字段是兼容新增的 JSON 字段,客户端应容忍未知字段。服务部署后,历史 Schedule 和 Run 的查询响应也返回来源字段,不需要数据回填。
Trigger Context
type | 说明 |
|---|---|
schedule | 系统根据 Schedule 触发策略自动触发;包含 scheduled_at。 |
manual | 调用运行 Schedule 接口手动触发。 |
Run Error
status=failed 或 status=skipped 时可能返回 error;status=completed 时为 null。
error.type | 说明 |
|---|---|
concurrency_limit_reached | 同一个 Schedule 已达到最大并发 Run 数,本次触发已记录但不会执行。 |
session_creation_failed | 创建或绑定 Forward Session 失败。 |
execution_failed | Template 执行失败。 |