# 轮询工作台动态内容生成结果

`GET` `/api/workbench/feed/poll`

通过触发接口返回的 requestId 查询生成进度，建议轮询间隔 2~3 秒。仅能查询当前身份主体自己的任务。

**不同 status 下返回的字段不同（未赋值的字段不会出现在响应中）：**
- GENERATING（生成中）：返回 message；若存在上一次的旧结果，会同时携带 staleResult，前端可先行展示，应继续轮询
- COMPLETED（已完成）：返回 result（生成结果，内嵌JSON对象，结构见 result 字段说明）和 cacheExpireAt（缓存过期时间），可停止轮询
- FAILED（失败）：返回 message 说明失败原因；未找到对应任务、或 requestId 与服务端不一致（已有新的生成任务覆盖）时也返回 FAILED，此时应重新调用触发接口

## 请求参数

### 请求头参数

| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| X-Principal-Id | integer | 否 | 身份主体ID（Long类型）。通过API访问时必须传递以标识操作主体；通过页面访问时无需传递。可通过「身份主体」模块的创建接口获取。 |

### Query 参数

| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| requestId | string | 是 | 触发接口返回的请求ID |
| agentId | integer | 是 | 智能体ID |

## 响应

### 200

| 参数名 | 类型 | 说明 |
|--------|------|------|
| httpStatusCode | integer | HTTP状态码 |
| message | string | 响应消息 |
| data | OnboardingFeedTaskResponse | 响应数据 |
|     requestId | string | 请求ID，TSID格式，用于后续轮询 |
|     status | string | 任务状态，可选值：GENERATING（生成中）、COMPLETED（已完成）、FAILED（失败） |
|     result | string | 生成结果，status为COMPLETED时有值。注意：该字段在响应中以内嵌JSON对象形式返回（不是字符串）。顶层结构为 {"blocks":[...]}，blocks 是有序数组，前端按数组顺序从上到下渲染。

**blocks[] 每个元素是一个内容区块，通过 type 字段区分，共7种类型：**
- greeting：打招呼（回访用户）。字段：id、body（正文，1-2句话）
- self_intro：自我介绍（首次使用）。字段：id、message（介绍文案）、highlights[]（核心能力列表，每项含 label、description、action）
- briefing：每日工作简报。字段：id、timeLabel（时段标签，如"今天"）、summary（概述）、items[]（每项含 priority（high/normal）、title、reason、action）
- resume：继续未完成的对话。字段：id、items[]（每项含 sessionId、title、lastMessage、rounds、updatedAt、status、actions[]（2-4个继续操作，每项含 label、action，第一个为默认主操作））
- chat_suggestions：基于最近对话的后续任务建议。字段：id、bubbles[]（每项含 text、action）
- skill_tryout：技能推荐。字段：id、title、suggestions[]（每项含 text、action）
- prompt_grid：兜底推荐网格。字段：id、title、items[]（每项含 category（分类标签）、text、action）

**action 对象（可点击元素的动作），通过 type 字段区分，共2种：**
- new_session：发起新对话。字段：prompt（必填，点击后发送给智能体的消息）、skillName（可选，关联的技能名称，需透传给后端）
- resume_session：跳回已有对话。字段：sessionId（必填，会话ID）、prompt（可选，跳回会话后自动发送的推进指令） |
|     staleResult | string | 过期的旧结果，status为GENERATING时可能有值，内部结构与 result 字段完全一致（同为内嵌JSON对象，顶层为 {"blocks":[...]}）。前端可先展示此旧数据，待新数据生成完毕后替换 |
|     cacheExpireAt | integer | 缓存过期时间，毫秒时间戳，对应下一个固定刷新时间点（每日 07:00 / 12:00 / 17:00 / 20:00，Asia/Shanghai）。前端可据此判断是否需要主动触发刷新 |
|     message | string | 提示信息，status为FAILED或GENERATING时可能有值 |
| success | boolean | 是否成功 |
| requestId | string | 上游请求ID，用于跨系统链路追踪排查问题 |
| errCode | string | 上游错误码，前端可据此做特殊UI处理 |

### 400

| 参数名 | 类型 | 说明 |
|--------|------|------|
| httpStatusCode | integer | HTTP状态码 |
| message | string | 响应消息 |
| data | object | 响应数据 |
| success | boolean | 是否成功 |
| requestId | string | 上游请求ID，用于跨系统链路追踪排查问题 |
| errCode | string | 上游错误码，前端可据此做特殊UI处理 |

### 500

| 参数名 | 类型 | 说明 |
|--------|------|------|
| httpStatusCode | integer | HTTP状态码 |
| message | string | 响应消息 |
| data | object | 响应数据 |
| success | boolean | 是否成功 |
| requestId | string | 上游请求ID，用于跨系统链路追踪排查问题 |
| errCode | string | 上游错误码，前端可据此做特殊UI处理 |

