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 开始;递增规则见输入版本。 |
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 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 实际改变时才递增。相同内容更新、修改名称或执行/触发策略不递增;改回曾经使用的内容仍会生成新的版本。存量 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 执行失败。 |

