{"componentChunkName":"component---src-templates-acg-portal-new-template-tsx","path":"/ymu8cfo0x","result":{"data":{"markdownRemark":{"html":"<p>本文档介绍如何通过标准化 OpenAPI 将搭子的核心能力接入到硬件或软件应用中。通过 OpenAPI，可接入的搭子能力包括：</p>\n<ul>\n<li>会话与消息：创建会话、发送消息、接收流式回复、管理历史会话</li>\n<li>对话交互：处理搭子的澄清问答与权限申请弹窗</li>\n<li>文件：上传文件、获取会话产出物（报告、文档、图片等）</li>\n<li>积分：查询余额、发放与消费流水</li>\n<li>Skill 管理：初始化、查询 Skill 列表与详情</li>\n<li>定时任务：查询定时任务列表</li>\n<li>个性化配置：定制首页 Logo、slogan 与推荐问</li>\n</ul>\n<h2 id=\"1-快速开始\"><a href=\"#1-%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B\" aria-label=\"1 快速开始 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1 快速开始</h2>\n<h3 id=\"11-接入总览\"><a href=\"#11-%E6%8E%A5%E5%85%A5%E6%80%BB%E8%A7%88\" aria-label=\"11 接入总览 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1.1 接入总览</h3>\n<p>接入遵循以下流程：</p>\n<ol>\n<li>申请 API Key：按 1.2 API Key 申请步骤注册账号并获取沙盒 / 线上两套 Key。</li>\n<li>获取访问凭证：调用 <code>DescribeToken</code> 获取渠道用户 Token（<code>{dumateToken}</code>），用于后续所有接口鉴权。</li>\n<li>创建会话：调用 <code>POST /session</code> 创建会话，获得 sessionID。</li>\n<li>发送消息：调用 <code>POST /session/:sessionID/prompt_async</code> 发送用户输入。</li>\n<li>接收回复：通过 <code>GET /event</code>（SSE）订阅实时事件，接收搭子产生的文本、工具调用、任务进度等消息。</li>\n<li>管理会话：按需调用停止消息、历史会话/消息查询、文件与积分等接口。</li>\n</ol>\n<h3 id=\"12-api-key-申请步骤\"><a href=\"#12-api-key-%E7%94%B3%E8%AF%B7%E6%AD%A5%E9%AA%A4\" aria-label=\"12 api key 申请步骤 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1.2 API Key 申请步骤</h3>\n<p>API Key 是账号级凭证，所有接口均通过 <code>Authorization: Bearer {apiKey}</code> 携带。申请流程如下：</p>\n<table>\n<thead>\n<tr>\n<th>步骤</th>\n<th>操作</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>1. 注册账号</td>\n<td>在百度智能云注册账号</td>\n<td>需提供企业或个人实名信息，用于身份核验</td>\n</tr>\n<tr>\n<td>2. 提交入驻申请</td>\n<td>请在 <a href=\"https://cloud.baidu.com/survey/dumate_hardware.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">硬件合作申请</a> 中提交相关信息</td>\n<td>说明接入用途（如\"自研 App 内搭子\"），便于审核</td>\n</tr>\n<tr>\n<td>3. 审核</td>\n<td>等待服务方审核</td>\n<td>\"申请中 → 审核通过\"，通过后可进入控制台创建 Key；审核驳回会说明原因</td>\n</tr>\n<tr>\n<td>4. 创建沙盒 Key</td>\n<td>在控制台创建一个\"沙盒环境\"API Key</td>\n<td>用于联调环境测试（见 1.3），额度与线上隔离</td>\n</tr>\n<tr>\n<td>5. 创建线上 Key</td>\n<td>审核通过后创建\"线上环境\"API Key</td>\n<td>用于生产环境，涉及真实积分扣减</td>\n</tr>\n<tr>\n<td>6. 环境绑定</td>\n<td>将两把 Key 分别用于对应环境</td>\n<td>沙盒与线上 Key 不可混用；线上请求必须使用线上 Key</td>\n</tr>\n</tbody>\n</table>\n<p>说明：</p>\n<ul>\n<li>Key 创建后在控制台仅展示一次，请立即保存到安全的密钥管理位置（环境变量 / 密钥服务），不要硬编码在代码或提交到仓库。</li>\n<li>Key 泄露可在控制台吊销后重新创建，吊销会使对应环境所有请求鉴权失败。</li>\n<li><code>{route}</code> 路由段与沙盒域名会随入驻审核通过一并提供（见 1.3）。</li>\n</ul>\n<h3 id=\"13-环境与地址\"><a href=\"#13-%E7%8E%AF%E5%A2%83%E4%B8%8E%E5%9C%B0%E5%9D%80\" aria-label=\"13 环境与地址 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1.3 环境与地址</h3>\n<p>所有接口提供联调（沙盒）与线上两套环境，接入阶段请先使用沙盒环境联调，通过后切换到线上环境。</p>\n<table>\n<thead>\n<tr>\n<th>环境</th>\n<th>标准 OpenAPI 地址</th>\n<th>Dispatch 服务地址</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>沙盒</td>\n<td><code>https://www.dumate.cn/openapi-sandbox?Action=ActionName</code></td>\n<td>域名与路由前缀由服务方在入驻时提供</td>\n</tr>\n<tr>\n<td>线上</td>\n<td><code>https://www.dumate.cn/openapi?Action=ActionName</code></td>\n<td><code>https://www.dumate.cn/dispatch/{route}/...</code></td>\n</tr>\n</tbody>\n</table>\n<p>说明：</p>\n<ul>\n<li><code>ActionName</code> 为接口名称，下文各接口均以 <code>Action=接口名</code> 方式调用（除 dispatch 服务外默认走标准 OpenAPI）。</li>\n<li>Dispatch 服务地址中的 <code>{route}</code> 为服务方分配的接入路由段，非公开通用值，接入时向服务方获取。</li>\n<li>沙盒环境的 dispatch 域名与路由段由服务方在入驻时提供，本文用 <code>{sandbox-host}</code> / <code>{sandboxRoute}</code> 表示；线上统一为 <code>www.dumate.cn</code> / <code>{route}</code>。</li>\n<li>沙盒与线上环境使用不同的 API Key，请勿混用。</li>\n</ul>\n<h3 id=\"14-请求方式与鉴权\"><a href=\"#14-%E8%AF%B7%E6%B1%82%E6%96%B9%E5%BC%8F%E4%B8%8E%E9%89%B4%E6%9D%83\" aria-label=\"14 请求方式与鉴权 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1.4 请求方式与鉴权</h3>\n<ul>\n<li>请求方式：如无特别说明，默认 <code>POST</code>，请求体为 JSON。</li>\n<li>鉴权方式：Bearer Token，所有接口均需在请求 Header 中携带 <code>Authorization</code>（API Key）与 <code>X-Dumate-Token</code>（用户 Token），详见 2 鉴权。</li>\n</ul>\n<h3 id=\"15-第一个请求示例（获取-token）\"><a href=\"#15-%E7%AC%AC%E4%B8%80%E4%B8%AA%E8%AF%B7%E6%B1%82%E7%A4%BA%E4%BE%8B%EF%BC%88%E8%8E%B7%E5%8F%96-token%EF%BC%89\" aria-label=\"15 第一个请求示例（获取 token） permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1.5 第一个请求示例（获取 Token）</h3>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token function\">curl</span> -X POST <span class=\"token string\">'https://www.dumate.cn/openapi?Action=DescribeToken'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">2</span>  -H <span class=\"token string\">'Authorization: Bearer {apiKey}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">3</span>  -H <span class=\"token string\">'X-Dumate-User-Id: {X-Dumate-User-Id}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">4</span>  -H <span class=\"token string\">'X-Dumate-Token: {dumateToken}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">5</span>  -H <span class=\"token string\">'Content-Type: application/json'</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p>响应：</p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"token\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{dumateToken}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"expired_at\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"2026-07-10T13:58:49.23978Z\"</span>\n<span class=\"line-number\">4</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"16-端到端最小示例\"><a href=\"#16-%E7%AB%AF%E5%88%B0%E7%AB%AF%E6%9C%80%E5%B0%8F%E7%A4%BA%E4%BE%8B\" aria-label=\"16 端到端最小示例 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1.6 端到端最小示例</h3>\n<p>以下 5 步串起一次完整对话（沙盒环境，全部使用沙盒 Key 与沙盒域名）。可直接复制调试，再按 1.7 切换线上。</p>\n<p><strong>Step 1 获取 Token（</strong><code>DescribeToken</code><strong>）</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token function\">curl</span> -X POST <span class=\"token string\">'https://www.dumate.cn/openapi-sandbox?Action=DescribeToken'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">2</span>  -H <span class=\"token string\">'Authorization: Bearer {sandboxApiKey}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">3</span>  -H <span class=\"token string\">'X-Dumate-User-Id: {X-Dumate-User-Id}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">4</span>  -H <span class=\"token string\">'Content-Type: application/json'</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p>返回 token（即 <code>{dumateToken}</code>）。</p>\n<p><strong>Step 2 创建会话（</strong><code>POST /session</code><strong>）</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token function\">curl</span> -X POST <span class=\"token string\">'https://{sandbox-host}/dispatch/{sandboxRoute}/session'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">2</span>  -H <span class=\"token string\">'Authorization: Bearer {dumateToken}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">3</span>  -H <span class=\"token string\">'X-Dumate-Device-Id: 1|web.{raw-device-id}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">4</span>  -H <span class=\"token string\">'Content-Type: application/json'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">5</span>  -d <span class=\"token string\">'{\"title\": \"首次对话\"}'</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p>返回会话对象中的 id 即 <code>{sessionID}</code>。</p>\n<p><strong>Step 3 发送消息（</strong><code>POST /session/:sessionID/prompt_async</code><strong>）</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token function\">curl</span> -X POST <span class=\"token string\">'https://{sandbox-host}/dispatch/{sandboxRoute}/session/{sessionID}/prompt_async'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">2</span>  -H <span class=\"token string\">'Authorization: Bearer {dumateToken}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">3</span>  -H <span class=\"token string\">'X-Dumate-Device-Id: 1|web.{raw-device-id}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">4</span>  -H <span class=\"token string\">'Content-Type: application/json'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">5</span>  --data-raw <span class=\"token string\">'{\"parts\": [{\"type\": \"text\", \"text\": \"你好，请介绍一下你自己\"}]}'</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p>返回 HTTP 204，无响应体。</p>\n<p><strong>Step 4 接收回复</strong></p>\n<ul>\n<li>方案 A（推荐，实时）：通过 <code>GET /event</code>（SSE）订阅，等待\"消息完成 / 会话空闲\"类事件后结束本条消息的等待（事件协议见 3.3）。</li>\n<li>方案 B（兜底，轮询）：轮询 <code>DescribeSessionStatus</code> 直到该会话不再是 busy（不再出现在结果中），再调用 <code>DescribeSessionMessages</code> 拉取最终文本：</li>\n</ul>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token comment\"># 等待会话空闲</span>\n<span class=\"line-number\">2</span><span class=\"token function\">curl</span> -X POST <span class=\"token string\">'https://www.dumate.cn/openapi-sandbox?Action=DescribeSessionStatus'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">3</span>  -H <span class=\"token string\">'Authorization: Bearer {sandboxApiKey}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">4</span>  -H <span class=\"token string\">'X-Dumate-Token: {dumateToken}'</span>\n<span class=\"line-number\">5</span>\n<span class=\"line-number\">6</span><span class=\"token comment\"># 拉取对话消息</span>\n<span class=\"line-number\">7</span><span class=\"token function\">curl</span> -X POST <span class=\"token string\">'https://www.dumate.cn/openapi-sandbox?Action=DescribeSessionMessages&amp;sessionID={sessionID}&amp;limit=10'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">8</span>  -H <span class=\"token string\">'Authorization: Bearer {sandboxApiKey}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">9</span>  -H <span class=\"token string\">'X-Dumate-Token: {dumateToken}'</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p><strong>Step 5 验证扣分（</strong><code>DescribePointsUsage</code><strong>）</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token function\">curl</span> -X POST <span class=\"token string\">'https://www.dumate.cn/openapi-sandbox?Action=DescribePointsUsage'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">2</span>  -H <span class=\"token string\">'Authorization: Bearer {sandboxApiKey}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">3</span>  -H <span class=\"token string\">'X-Dumate-Token: {dumateToken}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">4</span>  -H <span class=\"token string\">'Content-Type: application/json'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">5</span>  -d <span class=\"token string\">'{\"startAt\": {startAt}, \"endAt\": {endAt}}'</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p>list 中出现 <code>pointsChange</code> 为负值的记录即表示本次对话已计费（扣分规则见 6.5）。</p>\n<p>说明：Step 4 方案 B 中 <code>DescribeSessionStatus</code> 仅返回非空闲会话，会话从结果中消失即可认为处理完成；如需要更精确的完成判定，以 Step 4 方案 A 的 SSE 事件为准。</p>\n<h3 id=\"17-沙盒迁移线上切换清单\"><a href=\"#17-%E6%B2%99%E7%9B%92%E8%BF%81%E7%A7%BB%E7%BA%BF%E4%B8%8A%E5%88%87%E6%8D%A2%E6%B8%85%E5%8D%95\" aria-label=\"17 沙盒迁移线上切换清单 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1.7 沙盒迁移线上切换清单</h3>\n<p>联调通过后切换线上环境，逐项核对：</p>\n<table>\n<thead>\n<tr>\n<th>检查项</th>\n<th>沙盒</th>\n<th>线上</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>1. API Key</td>\n<td>沙盒 Key（<code>{sandboxApiKey}</code>）</td>\n<td>线上 Key（控制台创建）</td>\n</tr>\n<tr>\n<td>2. 标准 OpenAPI 域名</td>\n<td><code>openapi-sandbox</code></td>\n<td><code>openapi</code></td>\n</tr>\n<tr>\n<td>3. Dispatch 域名/路由段</td>\n<td><code>{sandbox-host}</code> / <code>{sandboxRoute}</code></td>\n<td><code>www.dumate.cn</code> / <code>{route}</code></td>\n</tr>\n<tr>\n<td>4. 用户 Token</td>\n<td>沙盒环境获取</td>\n<td>线上环境重新获取（建议线上使用线上环境签发的 Token，沙盒 Token 在线上可能失效）</td>\n</tr>\n<tr>\n<td>5. 数据/扣费</td>\n<td>测试数据，不产生真实扣费</td>\n<td>生产数据，真实扣减积分</td>\n</tr>\n<tr>\n<td>6. 回归冒烟</td>\n<td>-</td>\n<td>用 1.6 的 5 步链路在线上完整跑一遍</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"2-鉴权\"><a href=\"#2-%E9%89%B4%E6%9D%83\" aria-label=\"2 鉴权 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2 鉴权</h2>\n<h3 id=\"21-获取访问凭证-describetoken\"><a href=\"#21-%E8%8E%B7%E5%8F%96%E8%AE%BF%E9%97%AE%E5%87%AD%E8%AF%81-describetoken\" aria-label=\"21 获取访问凭证 describetoken permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2.1 获取访问凭证 <code>DescribeToken</code></h3>\n<p>获取（含刷新）渠道用户 Token，用于后续全部接口调用。首次获取时，Header 中传入 <code>X-Dumate-User-Id</code>，值为 App 跳转时带过去的 <code>userId</code> 字段值。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=DescribeToken</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是（API Key）</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求 Header</strong></p>\n<table>\n<thead>\n<tr>\n<th>Header</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Authorization</code></td>\n<td>是</td>\n<td><code>Bearer {apiKey}</code></td>\n</tr>\n<tr>\n<td><code>Content-Type</code></td>\n<td>是</td>\n<td><code>application/json</code></td>\n</tr>\n<tr>\n<td><code>X-Dumate-User-Id</code></td>\n<td>首次获取必填</td>\n<td>App 跳转时带过去的用户 ID 字段值</td>\n</tr>\n<tr>\n<td><code>X-Dumate-Token</code></td>\n<td>刷新时必填</td>\n<td>已持有的用户 Token</td>\n</tr>\n</tbody>\n</table>\n<p>请求体：无。</p>\n<p><strong>响应参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>token</code></td>\n<td>string</td>\n<td>访问凭证（Token），后续接口以 <code>X-Dumate-Token</code> Header 携带</td>\n</tr>\n<tr>\n<td><code>expired_at</code></td>\n<td>string</td>\n<td>过期时间，UTC 格式（例：<code>2026-07-10T13:58:49.23978Z</code> 表示北京时间 2026-07-10 21:58:49 过期）</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"token\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{dumateToken}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"expired_at\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"2026-07-10T13:58:49.23978Z\"</span>\n<span class=\"line-number\">4</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p>注意事项：</p>\n<ul>\n<li>Token 有过期时间，请关注 <code>expired_at</code>（UTC）并提前刷新，避免接口调用因 Token 过期失败。</li>\n<li>首次获取与刷新均使用本接口，首次需额外携带 <code>X-Dumate-User-Id</code>。</li>\n</ul>\n<p><strong>Token 刷新标准流程（推荐实现）：</strong></p>\n<ol>\n<li>主动预刷新：检测到 <code>expired_at</code> 距今不足 10 分钟时，调用 <code>DescribeToken</code>（携带旧 Token 的 <code>X-Dumate-Token</code> Header）刷新后继续使用新 Token。</li>\n<li>401 被动刷新：任意接口返回 <code>code=401</code> / <code>PermissionDenied</code> 时，先调用 <code>DescribeToken</code> 刷新 Token，再重试原请求一次（最多一次，避免死循环）。</li>\n<li>保存与同步：刷新成功后立即替换本地 Token 并持久化；多端场景可通过账号体系广播新 Token。</li>\n</ol>\n<p>注意：<code>DescribeToken</code> 不带 <code>X-Dumate-Token</code> 时视为首次获取（需 <code>X-Dumate-User-Id</code>）；带旧 Token 时视为刷新。两者响应结构一致。</p>\n<h3 id=\"22-请求-header\"><a href=\"#22-%E8%AF%B7%E6%B1%82-header\" aria-label=\"22 请求 header permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2.2 请求 Header</h3>\n<p>以下 Header 为全部标准 OpenAPI 接口通用。</p>\n<table>\n<thead>\n<tr>\n<th>Header</th>\n<th>值</th>\n<th>必填</th>\n<th>备注</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Authorization</code></td>\n<td><code>Bearer {apiKey}</code></td>\n<td>是</td>\n<td>API Key 来源于开放平台控制台；注意区分沙盒与线上环境的 Key</td>\n</tr>\n<tr>\n<td><code>X-Dumate-Token</code></td>\n<td><code>{dumateToken}</code></td>\n<td>是</td>\n<td>由 <code>DescribeToken</code> 获取</td>\n</tr>\n<tr>\n<td><code>Content-Type</code></td>\n<td><code>application/json</code></td>\n<td>是</td>\n<td>如接口有特殊说明（如文件上传），按具体接口执行</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"23-响应结构\"><a href=\"#23-%E5%93%8D%E5%BA%94%E7%BB%93%E6%9E%84\" aria-label=\"23 响应结构 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2.3 响应结构</h3>\n<p>所有接口响应统一包含以下字段：</p>\n<table>\n<thead>\n<tr>\n<th>名称</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>requestId</code></td>\n<td>string</td>\n<td>请求 ID，用于问题定位</td>\n</tr>\n<tr>\n<td><code>code</code></td>\n<td>string</td>\n<td>错误码（仅异常时返回）</td>\n</tr>\n<tr>\n<td><code>message</code></td>\n<td>string</td>\n<td>错误信息（仅异常时返回）</td>\n</tr>\n</tbody>\n</table>\n<p>成功场景：</p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span>HTTP/<span class=\"token number\">1.1</span> <span class=\"token number\">200</span> OK\n<span class=\"line-number\">2</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"requestId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{requestId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">4</span>  <span class=\"token property\">\"otherField\"</span><span class=\"token operator\">:</span> any\n<span class=\"line-number\">5</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p>失败场景（HTTP 状态码仍为 200，业务错误以 <code>code</code> / <code>message</code> 标识）：</p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"code\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"401\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"message\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"PermissionDenied\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">4</span>  <span class=\"token property\">\"requestId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{requestId}\"</span>\n<span class=\"line-number\">5</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h2 id=\"3-会话与消息\"><a href=\"#3-%E4%BC%9A%E8%AF%9D%E4%B8%8E%E6%B6%88%E6%81%AF\" aria-label=\"3 会话与消息 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3 会话与消息</h2>\n<h3 id=\"31-创建会话-post-session\"><a href=\"#31-%E5%88%9B%E5%BB%BA%E4%BC%9A%E8%AF%9D-post-session\" aria-label=\"31 创建会话 post session permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3.1 创建会话 <code>POST /session</code></h3>\n<p>用户发起新对话时调用，创建会话并启动运行环境。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/dispatch/{route}/session</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是（用户 Token + 设备 ID）</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求 Header</strong></p>\n<table>\n<thead>\n<tr>\n<th>Header</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Authorization</code></td>\n<td>是</td>\n<td><code>Bearer {dumateToken}</code></td>\n</tr>\n<tr>\n<td><code>X-Dumate-Device-Id</code></td>\n<td>是</td>\n<td>格式为 <code>{device-id-ver}|{os}.{raw-device-id}</code>，其中：<br/>· <code>device-id-version</code> = 1<br/>· <code>os</code>：darwin / windows / ios / android / harmony / xiaodu 等，其他平台标识以服务方发布为准<br/>· <code>raw-device-id</code>：各端自行确定的设备标识，<code>[a-zA-Z0-9_.-]{16,128}</code></td>\n</tr>\n<tr>\n<td><code>Content-Type</code></td>\n<td>是</td>\n<td><code>application/json</code></td>\n</tr>\n<tr>\n<td><code>X-Dumate-Account-Id</code></td>\n<td>否</td>\n<td>服务方云账号 ID</td>\n</tr>\n<tr>\n<td><code>User-Agent</code></td>\n<td>否</td>\n<td>UA 中加上链路上各种版本信息，其中最开始的发起端加上：<br/>· PC：<code>DumateApp/{版本号}</code><br/>· Mobile：<code>DumateMobile/{版本号}</code><br/>样例：<code>[DumateApp/1.0.34.1 go/1.0.0 Chrome/1.23.4]</code></td>\n</tr>\n<tr>\n<td><code>X-Dumate-Client-Source</code></td>\n<td>否</td>\n<td>来源方：<code>dumate-web</code>（dumate 网页端）、<code>dumate-app</code>（dumate 移动端）、<code>partner-channel</code>（合作渠道）</td>\n</tr>\n<tr>\n<td><code>Refer</code></td>\n<td>否</td>\n<td>网页端调用时注明来源。样例：<code>https://www.dumate.cn/app</code></td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求体参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>parentID</code></td>\n<td>string</td>\n<td>否</td>\n<td>父会话 ID（<code>ses_</code> 前缀）。传入时创建子会话</td>\n</tr>\n<tr>\n<td><code>title</code></td>\n<td>string</td>\n<td>否</td>\n<td>会话标题。缺省自动生成（格式 <code>New session - 2026-04-23 14:30:00</code>，UTC+8）</td>\n</tr>\n<tr>\n<td><code>permission</code></td>\n<td>PermissionRule[]</td>\n<td>否</td>\n<td>会话级权限规则集，覆盖默认权限</td>\n</tr>\n</tbody>\n</table>\n<p><strong>PermissionRule 结构</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"permission\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"bash\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"pattern\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"rm *\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">4</span>  <span class=\"token property\">\"action\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"ask\"</span>\n<span class=\"line-number\">5</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>permission</code></td>\n<td>string</td>\n<td>权限类型，如 bash、read、mount_directory、*</td>\n</tr>\n<tr>\n<td><code>pattern</code></td>\n<td>string</td>\n<td>匹配模式，支持通配符，如 <code>*</code>、<code>rm *</code>、<code>*.env</code></td>\n</tr>\n<tr>\n<td><code>action</code></td>\n<td>string</td>\n<td>动作：allow 允许 / deny 拒绝 / ask 询问用户</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token function\">curl</span> -X POST <span class=\"token string\">'https://www.dumate.cn/dispatch/{route}/session'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">2</span>  -H <span class=\"token string\">'Authorization: Bearer {dumateToken}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">3</span>  -H <span class=\"token string\">'X-Dumate-Device-Id: 1|web.{raw-device-id}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">4</span>  -H <span class=\"token string\">'Content-Type: application/json'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">5</span>  -d <span class=\"token string\">'{\"title\": \"新任务\"}'</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p><strong>响应示例</strong>（会话对象，字段结构见 3.6 会话对象数据结构）</p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"id\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"ses_{sessionID}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"slug\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"glowing-panda\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">4</span>  <span class=\"token property\">\"version\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"0.0.0-dumate_server-202605210956\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">5</span>  <span class=\"token property\">\"projectID\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"global\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">6</span>  <span class=\"token property\">\"directory\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"/home/work/dumate/{accountId}/workspace\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">7</span>  <span class=\"token property\">\"is_subagent\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">8</span>  <span class=\"token property\">\"title\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"新任务\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">9</span>  <span class=\"token property\">\"time\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">10</span>    <span class=\"token property\">\"created\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1779418858625</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">11</span>    <span class=\"token property\">\"updated\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1779418858625</span>\n<span class=\"line-number\">12</span>  <span class=\"token punctuation\">}</span>\n<span class=\"line-number\">13</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"32-发送消息-post-sessionsessionidprompt_async\"><a href=\"#32-%E5%8F%91%E9%80%81%E6%B6%88%E6%81%AF-post-sessionsessionidprompt_async\" aria-label=\"32 发送消息 post sessionsessionidprompt_async permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3.2 发送消息 <code>POST /session/:sessionID/prompt_async</code></h3>\n<p>向指定会话发送用户消息并触发搭子处理。采用异步非阻塞模式：服务端触发处理并立即返回 HTTP 204，搭子处理进度与结果通过 SSE 事件推送（见 3.3 接收消息）。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/dispatch/{route}/session/{sessionID}/prompt_async</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求 Header</strong></p>\n<table>\n<thead>\n<tr>\n<th>Header</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Authorization</code></td>\n<td>是</td>\n<td><code>Bearer {dumateToken}</code></td>\n</tr>\n<tr>\n<td><code>X-Dumate-Device-Id</code></td>\n<td>是</td>\n<td>设备标识</td>\n</tr>\n<tr>\n<td><code>X-Dumate-Request-Id</code></td>\n<td>否</td>\n<td>请求追踪 ID</td>\n</tr>\n<tr>\n<td><code>X-Dumate-Location-Coarse</code></td>\n<td>否</td>\n<td>用户 IP 粗定位。值为 location 序列化为 UTF-8 JSON 后做 percent-encoding 的结果（至少含 province / city / district / town / street 中一个非空字段），放在 Header 而非 Body</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求体参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>必填与否</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>requestID</code> (string)</td>\n<td>否</td>\n<td>请求追踪 ID。dumate_server 的 Body Schema 接受该字段，但 prompt_async 路由以 <code>X-Dumate-Request-Id</code> Header 为准</td>\n</tr>\n<tr>\n<td><code>deviceId</code> (string)</td>\n<td>否</td>\n<td>设备 ID。Body Schema 接受该字段，但 prompt_async 路由以 <code>X-Dumate-Device-Id</code> Header 为准</td>\n</tr>\n<tr>\n<td><code>messageID</code> (string)</td>\n<td>否</td>\n<td>用户消息 ID，格式通常以 <code>msg_</code> 开头；不传时由服务端生成</td>\n</tr>\n<tr>\n<td><code>sandboxId</code> (string)</td>\n<td>否</td>\n<td>Sandbox ID。Body Schema 接受该字段，但 prompt_async 路由以 <code>X-Sandbox-ID</code> Header 为准</td>\n</tr>\n<tr>\n<td><code>dtoken</code> (string)</td>\n<td>否</td>\n<td>模型访问凭证。Body Schema 接受该字段，但 prompt_async 路由以 <code>X-Dumate-Token</code> Header 为准；云端模式下该 Header 必填</td>\n</tr>\n<tr>\n<td><code>sandboxDomain</code> (string)</td>\n<td>否</td>\n<td>Sandbox 域名。Body Schema 接受该字段，但 prompt_async 路由以 <code>X-Sandbox-Domain</code> Header 为准</td>\n</tr>\n<tr>\n<td><code>accessToken</code> (string)</td>\n<td>否</td>\n<td>Envd 访问凭证。Body Schema 接受该字段，但 prompt_async 路由以 <code>X-Envd-Access-Token</code> Header 为准</td>\n</tr>\n<tr>\n<td><code>userAgent</code> (string)</td>\n<td>否</td>\n<td>调用端信息。Body Schema 接受该字段，但 prompt_async 路由以 <code>User-Agent</code> Header 为准</td>\n</tr>\n<tr>\n<td><code>triggerType</code> (string)</td>\n<td>否</td>\n<td>请求触发方式。Body Schema 接受该字段，但 prompt_async 路由以 <code>X-Dumate-Trigger-Type</code> Header 为准；cron 表示定时任务</td>\n</tr>\n<tr>\n<td><code>expConfig</code> (object)</td>\n<td>否</td>\n<td>实验配置。Body Schema 接受该字段，但 prompt_async 路由以 <code>X-Dumate-Exp-Config</code> Header 中的 JSON 为准</td>\n</tr>\n<tr>\n<td><code>expConfig.abExpIds</code> (string[])</td>\n<td>否</td>\n<td>AB 实验 ID 列表</td>\n</tr>\n<tr>\n<td><code>expConfig.aiAssistant</code> (object)</td>\n<td>否</td>\n<td>搭子实验配置</td>\n</tr>\n<tr>\n<td><code>expConfig.aiAssistant.enabled</code> (boolean)</td>\n<td>否</td>\n<td>是否启用搭子实验能力</td>\n</tr>\n<tr>\n<td><code>model</code> (object)</td>\n<td>否</td>\n<td>指定本轮使用的模型；不传时使用服务端默认模型</td>\n</tr>\n<tr>\n<td><code>model.providerID</code> (string)</td>\n<td>model 存在时必填</td>\n<td>Provider ID，例如 default</td>\n</tr>\n<tr>\n<td><code>model.modelID</code> (string)</td>\n<td>model 存在时必填</td>\n<td>Model ID，例如 default</td>\n</tr>\n<tr>\n<td><code>agent</code> (string)</td>\n<td>否</td>\n<td>指定处理本轮消息的 Agent</td>\n</tr>\n<tr>\n<td><code>noReply</code> (boolean)</td>\n<td>否</td>\n<td>是否不生成搭子回复</td>\n</tr>\n<tr>\n<td><code>tools</code> (Record&#x3C;string, boolean>)</td>\n<td>否</td>\n<td>工具开关映射。该字段已废弃，工具与权限应通过 Session permission 配置</td>\n</tr>\n<tr>\n<td><code>format</code> (object)</td>\n<td>否</td>\n<td>输出格式配置</td>\n</tr>\n<tr>\n<td><code>format.type</code> (string)</td>\n<td>format 存在时必填</td>\n<td>text 或 json_schema。使用 json_schema 时还需传 format.schema</td>\n</tr>\n<tr>\n<td><code>system</code> (string)</td>\n<td>否</td>\n<td>本轮自定义 System Prompt</td>\n</tr>\n<tr>\n<td><code>variant</code> (string)</td>\n<td>否</td>\n<td>消息变体标识</td>\n</tr>\n<tr>\n<td><code>parts</code> (array)</td>\n<td>是</td>\n<td>本轮消息内容列表，可包含文本、文件等 Part</td>\n</tr>\n</tbody>\n</table>\n<p>说明：<code>requestID</code>、<code>deviceId</code>、<code>dtoken</code>、<code>userAgent</code>、<code>triggerType</code>、<code>accessToken</code> 等字段在 Body 中可接受，但本接口以对应 Header 传参为准。</p>\n<p><strong>Text Part</strong></p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>必填与否</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>parts[].id</code> (string)</td>\n<td>否</td>\n<td>Part ID；不传时由服务端生成</td>\n</tr>\n<tr>\n<td><code>parts[].visibility</code> (string)</td>\n<td>否</td>\n<td>可选值：frontend、model、both。不传时按默认规则处理</td>\n</tr>\n<tr>\n<td><code>parts[].type</code> (string)</td>\n<td>是</td>\n<td>文本 Part 固定为 text</td>\n</tr>\n<tr>\n<td><code>parts[].text</code> (string)</td>\n<td>是</td>\n<td>用户输入的文本内容</td>\n</tr>\n<tr>\n<td><code>parts[].synthetic</code> (boolean)</td>\n<td>否</td>\n<td>是否为系统合成的文本。普通用户输入通常不传</td>\n</tr>\n<tr>\n<td><code>parts[].ignored</code> (boolean)</td>\n<td>否</td>\n<td>是否忽略该 Part。普通用户输入通常不传</td>\n</tr>\n<tr>\n<td><code>parts[].time</code> (object)</td>\n<td>否</td>\n<td>Part 的时间信息</td>\n</tr>\n<tr>\n<td><code>parts[].time.start</code> (number)</td>\n<td>time 存在时必填</td>\n<td>开始时间戳，单位为毫秒</td>\n</tr>\n<tr>\n<td><code>parts[].time.end</code> (number)</td>\n<td>否</td>\n<td>结束时间戳，单位为毫秒</td>\n</tr>\n<tr>\n<td><code>parts[].metadata</code> (object)</td>\n<td>否</td>\n<td>自定义扩展元数据</td>\n</tr>\n</tbody>\n</table>\n<p><strong>File Part</strong></p>\n<p>文件二进制通过上传接口（见 5 文件）先上传，本条消息只传文件引用。上传文件后，不需要再次向本接口上传文件二进制，而是在 parts 中传入文件引用。</p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>必填与否</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>parts[].id</code> (string)</td>\n<td>否</td>\n<td>Part ID；不传时由服务端生成</td>\n</tr>\n<tr>\n<td><code>parts[].visibility</code> (string)</td>\n<td>否</td>\n<td>可选值：frontend、model、both</td>\n</tr>\n<tr>\n<td><code>parts[].type</code> (string)</td>\n<td>是</td>\n<td>文件 Part 固定为 file</td>\n</tr>\n<tr>\n<td><code>parts[].mime</code> (string)</td>\n<td>否，建议传</td>\n<td>文件 MIME 类型，例如 video/mp4、image/png；不传时服务端尝试根据路径推断</td>\n</tr>\n<tr>\n<td><code>parts[].filename</code> (string)</td>\n<td>否；url 为 blob: 时必填</td>\n<td>普通文件可表示文件名；线上云端上传链路中承载 <code>CreatePreSessionFile</code>.filePath，例如 <code>/dumate/{userID}/workspace/uploads/{uploadID}/文件名</code></td>\n</tr>\n<tr>\n<td><code>parts[].url</code> (string)</td>\n<td>是</td>\n<td>文件引用。必须是带协议的 URL，不能填写 <code>/dumate/...</code> 裸路径</td>\n</tr>\n<tr>\n<td><code>parts[].mediaType</code> (string)</td>\n<td>否</td>\n<td>上游兼容字段，通常与 mime 相同；当前 dumate_server 的 FilePart Schema 未声明该字段，服务端以 mime 为准</td>\n</tr>\n<tr>\n<td><code>parts[].preview</code> (string)</td>\n<td>否</td>\n<td>线上请求携带的上传对象相对标识。当前 dumate_server 的文件路径归一化不读取该字段</td>\n</tr>\n<tr>\n<td><code>parts[].source</code> (object)</td>\n<td>否</td>\n<td>文件来源信息</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求示例（文本 + 文件）</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token function\">curl</span> -X POST <span class=\"token string\">'https://www.dumate.cn/dispatch/{route}/session/{sessionID}/prompt_async'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">2</span>  -H <span class=\"token string\">'Authorization: Bearer {dumateToken}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">3</span>  -H <span class=\"token string\">'X-Dumate-Device-Id: 1|web.{raw-device-id}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">4</span>  -H <span class=\"token string\">'Content-Type: application/json'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">5</span>  --data-raw <span class=\"token string\">'{\n<span class=\"line-number\">6</span>    \"model\": {\"providerID\": \"default\", \"modelID\": \"default\"},\n<span class=\"line-number\">7</span>    \"parts\": [\n<span class=\"line-number\">8</span>      {\"type\": \"text\", \"text\": \"请帮我分析这张图\"},\n<span class=\"line-number\">9</span>      {\"type\": \"file\", \"url\": \"file:///dumate/{userID}/workspace/uploads/{uploadID}/图片.png\", \"mime\": \"image/png\"}\n<span class=\"line-number\">10</span>    ]\n<span class=\"line-number\">11</span>  }'</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"33-接收消息-get-event\"><a href=\"#33-%E6%8E%A5%E6%94%B6%E6%B6%88%E6%81%AF-get-event\" aria-label=\"33 接收消息 get event permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3.3 接收消息 <code>GET /event</code></h3>\n<p>订阅当前会话运行环境的实时事件流（SSE，Content-Type: text/event-stream）。接入方在进入会话页后建立一次长连接，此后 UI 的所有状态更新（搭子文本、工具调用、任务进度、权限请求等）均由该事件流驱动。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>GET</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/dispatch/{route}/event</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求 Header</strong></p>\n<table>\n<thead>\n<tr>\n<th>Header</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Authorization</code></td>\n<td>是</td>\n<td><code>Bearer {dumateToken}</code></td>\n</tr>\n<tr>\n<td><code>X-Dumate-Device-Id</code></td>\n<td>是</td>\n<td>设备标识（格式见 3.1）</td>\n</tr>\n<tr>\n<td><code>Content-Type</code></td>\n<td>是</td>\n<td><code>application/json</code></td>\n</tr>\n<tr>\n<td><code>X-Dumate-Account-Id</code></td>\n<td>否</td>\n<td>服务方云账号 ID</td>\n</tr>\n<tr>\n<td><code>User-Agent</code></td>\n<td>否</td>\n<td>UA 中加上链路上各种版本信息，其中最开始的发起端加上：<br/>· PC：<code>DumateApp/{版本号}</code><br/>· Mobile：<code>DumateMobile/{版本号}</code><br/>样例：<code>[DumateApp/1.0.34.1 go/1.0.0 Chrome/1.23.4]</code></td>\n</tr>\n<tr>\n<td><code>X-Dumate-Client-Source</code></td>\n<td>否</td>\n<td>来源方：<code>dumate-web</code>（dumate 网页端）、<code>dumate-app</code>（dumate 移动端）、<code>partner-channel</code>（合作渠道）</td>\n</tr>\n<tr>\n<td><code>Refer</code></td>\n<td>建议</td>\n<td>网页端调用时注明来源。样例：<code>https://www.dumate.cn/app</code></td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token function\">curl</span> <span class=\"token string\">'https://www.dumate.cn/dispatch/{route}/event'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">2</span>  -H <span class=\"token string\">'Authorization: Bearer {dumateToken}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">3</span>  -H <span class=\"token string\">'X-Dumate-Device-Id: 1|web.{raw-device-id}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">4</span>  -H <span class=\"token string\">'Referer: https://www.dumate.cn/app/session/{sessionID}'</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h4 id=\"331-事件流协议\"><a href=\"#331-%E4%BA%8B%E4%BB%B6%E6%B5%81%E5%8D%8F%E8%AE%AE\" aria-label=\"331 事件流协议 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3.3.1 事件流协议</h4>\n<p>事件流采用 SSE 规范：每个事件由 <code>event:</code> 事件名与 <code>data:</code> 负载（JSON）组成，空行分隔。事件负载为 JSON，事件名区分事件类型。具体事件名与字段结构请以服务方提供的《SSE 事件说明》为准（接入时向服务方索取），本节给出事件类别的行为清单，供接入方规划 UI 与状态机：</p>\n<table>\n<thead>\n<tr>\n<th>事件类别</th>\n<th>触发时机</th>\n<th>推荐客户端动作</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>文本增量</td>\n<td>搭子生成回复过程中，文本逐段产出</td>\n<td>追加渲染到当前消息，保持 loading</td>\n</tr>\n<tr>\n<td>推理过程</td>\n<td>模型推理/思考过程产出</td>\n<td>可选展示，收起/展开</td>\n</tr>\n<tr>\n<td>工具调用更新</td>\n<td>搭子调用工具（命令执行、文件读写、Skill 等）时</td>\n<td>展示工具名、状态（进行中/完成/失败）</td>\n</tr>\n<tr>\n<td>任务进度更新</td>\n<td>搭子更新 Todo 任务列表时</td>\n<td>刷新任务进度 UI（见 3.5）</td>\n</tr>\n<tr>\n<td>权限请求出现</td>\n<td>搭子需要用户授权（bash/read/write/location 等）时</td>\n<td>弹权限框（见 4.5），等待用户回复</td>\n</tr>\n<tr>\n<td>澄清问题出现</td>\n<td>搭子需要补充信息时</td>\n<td>弹澄清框（见 4.1）</td>\n</tr>\n<tr>\n<td>消息完成</td>\n<td>单条搭子消息产出完成</td>\n<td>结束 loading，标记消息完成</td>\n</tr>\n<tr>\n<td>会话空闲</td>\n<td>整轮处理结束、无待办</td>\n<td>结束本轮 loading，刷新会话/文件/任务状态</td>\n</tr>\n</tbody>\n</table>\n<h4 id=\"332-连接建立时机\"><a href=\"#332-%E8%BF%9E%E6%8E%A5%E5%BB%BA%E7%AB%8B%E6%97%B6%E6%9C%BA\" aria-label=\"332 连接建立时机 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3.3.2 连接建立时机</h4>\n<ul>\n<li>用户进入会话页即可建立连接（未发送消息也可空连接）。</li>\n<li>建议每会话一条连接；若实现为全局单连接，需按会话过滤事件（事件负载含 sessionID 标识，以《SSE 事件说明》字段为准）。</li>\n<li>连接鉴权失败（如 Token 过期）返回错误后，按 2.1 刷新 Token 重连。</li>\n</ul>\n<h4 id=\"333-断线重连与对账\"><a href=\"#333-%E6%96%AD%E7%BA%BF%E9%87%8D%E8%BF%9E%E4%B8%8E%E5%AF%B9%E8%B4%A6\" aria-label=\"333 断线重连与对账 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3.3.3 断线重连与对账</h4>\n<p>SSE 连接可能因网络切换、网关空窗等原因断开，接入方需处理重连与状态对账：</p>\n<ol>\n<li>自动重连：检测到连接断开后按退避策略重连（如 1s → 2s → 5s → 10s，封顶 30s，最多重试 N 次）。</li>\n<li>权限对账：重连后调用 <code>GET /permission</code>（见 4.5），补齐断线期间可能遗漏的 pending 权限请求，避免权限弹窗漏显。</li>\n<li>消息对账：重连后调用 <code>DescribeSessionMessages</code>（3.10）拉取最近消息，用于补齐断线期间未接收的增量；有权限请求时先处理权限。</li>\n<li>任务对账：重连后调用 <code>GET /session/:sessionID/todo</code>（3.5）刷新任务进度，避免进度 UI 与真实状态不一致。</li>\n<li>完成判定兜底：若长时间未收到“会话空闲”类事件但会话已无产出，可轮询 <code>DescribeSessionStatus</code>（3.9）确认会话是否仍 busy，作为完成判定的兜底手段。</li>\n</ol>\n<p><strong>注意事项：</strong></p>\n<ul>\n<li>事件类型、数据结构与响应示例详见服务方提供的《SSE 事件说明》。</li>\n<li>同一账号的 <code>/event</code>、权限查询与回复请求需路由到同一服务实例（接入网关按账号做粘性路由）。</li>\n<li>SSE 是事件推送通道，UI 的权威数据源仍以各查询接口（会话、消息、文件、任务）为准；重连后以查询接口对账补齐。</li>\n</ul>\n<h3 id=\"34-停止消息-post-sessionsessionidabort\"><a href=\"#34-%E5%81%9C%E6%AD%A2%E6%B6%88%E6%81%AF-post-sessionsessionidabort\" aria-label=\"34 停止消息 post sessionsessionidabort permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3.4 停止消息 <code>POST /session/:sessionID/abort</code></h3>\n<p>强制中止当前正在进行的搭子任务（模型推理与工具调用循环）。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/dispatch/{route}/session/{sessionID}/abort</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p>请求体：无。</p>\n<p><strong>请求示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token function\">curl</span> -X POST <span class=\"token string\">'https://www.dumate.cn/dispatch/{route}/session/{sessionID}/abort'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">2</span>  -H <span class=\"token string\">'Authorization: Bearer {dumateToken}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">3</span>  -H <span class=\"token string\">'X-Dumate-Device-Id: 1|web.{raw-device-id}'</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p>响应：HTTP 200，<code>true</code> 表示中止成功。</p>\n<h3 id=\"35-查询任务进度-get-sessionsessionidtodo\"><a href=\"#35-%E6%9F%A5%E8%AF%A2%E4%BB%BB%E5%8A%A1%E8%BF%9B%E5%BA%A6-get-sessionsessionidtodo\" aria-label=\"35 查询任务进度 get sessionsessionidtodo permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3.5 查询任务进度 <code>GET /session/:sessionID/todo</code></h3>\n<p>获取搭子记录的任务列表，用于展示多步骤任务的进度。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>GET</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/dispatch/{route}/session/{sessionID}/todo</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应参数（JSON 数组）</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>string</td>\n<td>任务唯一 ID</td>\n</tr>\n<tr>\n<td><code>content</code></td>\n<td>string</td>\n<td>任务描述（如“实现功能X”）</td>\n</tr>\n<tr>\n<td><code>status</code></td>\n<td>string</td>\n<td>pending / in_progress / completed</td>\n</tr>\n<tr>\n<td><code>activeForm</code></td>\n<td>string</td>\n<td>进行中时的展示文案（如“正在实现功能X”）</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"36-会话对象数据结构\"><a href=\"#36-%E4%BC%9A%E8%AF%9D%E5%AF%B9%E8%B1%A1%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84\" aria-label=\"36 会话对象数据结构 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3.6 会话对象数据结构</h3>\n<p>创建会话、会话列表与详情接口均返回会话对象，字段如下：</p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>string</td>\n<td>是</td>\n<td>Session ID（<code>ses_</code> 前缀）</td>\n</tr>\n<tr>\n<td><code>slug</code></td>\n<td>string</td>\n<td>是</td>\n<td>URL 友好短标识</td>\n</tr>\n<tr>\n<td><code>projectID</code></td>\n<td>string</td>\n<td>是</td>\n<td>所属项目 ID</td>\n</tr>\n<tr>\n<td><code>workspaceID</code></td>\n<td>string</td>\n<td>否</td>\n<td>所属工作区 ID</td>\n</tr>\n<tr>\n<td><code>directory</code></td>\n<td>string</td>\n<td>是</td>\n<td>会话工作目录（绝对路径）</td>\n</tr>\n<tr>\n<td><code>parentID</code></td>\n<td>string</td>\n<td>否</td>\n<td>父 Session ID（Fork 场景）</td>\n</tr>\n<tr>\n<td><code>is_subagent</code></td>\n<td>boolean</td>\n<td>是</td>\n<td>是否为子 Agent 创建的 Session</td>\n</tr>\n<tr>\n<td><code>title</code></td>\n<td>string</td>\n<td>是</td>\n<td>会话标题</td>\n</tr>\n<tr>\n<td><code>version</code></td>\n<td>string</td>\n<td>是</td>\n<td>创建时的服务端版本号</td>\n</tr>\n<tr>\n<td><code>time.created</code></td>\n<td>number</td>\n<td>是</td>\n<td>创建时间戳（ms）</td>\n</tr>\n<tr>\n<td><code>time.updated</code></td>\n<td>number</td>\n<td>是</td>\n<td>最后更新时间戳（ms）</td>\n</tr>\n<tr>\n<td><code>time.compacting</code></td>\n<td>number</td>\n<td>否</td>\n<td>最后压缩时间戳（ms）</td>\n</tr>\n<tr>\n<td><code>time.archived</code></td>\n<td>number</td>\n<td>否</td>\n<td>归档时间戳（ms）</td>\n</tr>\n<tr>\n<td><code>summary.additions</code></td>\n<td>number</td>\n<td>否</td>\n<td>文件变更新增行数</td>\n</tr>\n<tr>\n<td><code>summary.deletions</code></td>\n<td>number</td>\n<td>否</td>\n<td>文件变更删除行数</td>\n</tr>\n<tr>\n<td><code>summary.files</code></td>\n<td>number</td>\n<td>否</td>\n<td>变更文件数</td>\n</tr>\n<tr>\n<td><code>share.url</code></td>\n<td>string</td>\n<td>否</td>\n<td>分享链接（已分享时存在）</td>\n</tr>\n<tr>\n<td><code>permission</code></td>\n<td>object</td>\n<td>否</td>\n<td>会话级权限规则集</td>\n</tr>\n<tr>\n<td><code>revert.messageID</code></td>\n<td>string</td>\n<td>否</td>\n<td>回退到的消息 ID</td>\n</tr>\n<tr>\n<td><code>revert.partID</code></td>\n<td>string</td>\n<td>否</td>\n<td>回退到的 Part ID</td>\n</tr>\n<tr>\n<td><code>revert.snapshot</code></td>\n<td>string</td>\n<td>否</td>\n<td>快照标识</td>\n</tr>\n<tr>\n<td><code>revert.diff</code></td>\n<td>string</td>\n<td>否</td>\n<td>变更 diff</td>\n</tr>\n<tr>\n<td><code>isPinned</code></td>\n<td>boolean</td>\n<td>是</td>\n<td>是否置顶该会话</td>\n</tr>\n<tr>\n<td><code>source</code></td>\n<td>string</td>\n<td>否</td>\n<td>会话来源</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"37-历史会话列表-describesessions\"><a href=\"#37-%E5%8E%86%E5%8F%B2%E4%BC%9A%E8%AF%9D%E5%88%97%E8%A1%A8-describesessions\" aria-label=\"37 历史会话列表 describesessions permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3.7 历史会话列表 <code>DescribeSessions</code></h3>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=DescribeSessions</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求体参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>roots</code></td>\n<td>boolean</td>\n<td>否</td>\n<td>只返回根会话（无 <code>parentID</code>）</td>\n</tr>\n<tr>\n<td><code>search</code></td>\n<td>string</td>\n<td>否</td>\n<td>按标题模糊搜索</td>\n</tr>\n<tr>\n<td><code>limit</code></td>\n<td>int</td>\n<td>否</td>\n<td>返回最大条数</td>\n</tr>\n<tr>\n<td><code>source</code></td>\n<td>string</td>\n<td>否</td>\n<td>来源过滤，可选 manual、scheduled</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应参数</strong>：<code>result</code> —— 会话对象数组（结构见 3.6）。</p>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"result\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n<span class=\"line-number\">3</span>    <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">4</span>      <span class=\"token property\">\"deviceId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{deviceId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">5</span>      <span class=\"token property\">\"directory\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"/home/work/dumate/workspace\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">6</span>      <span class=\"token property\">\"id\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"ses_{sessionID}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">7</span>      <span class=\"token property\">\"title\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"搜索狗狗图片\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">8</span>      <span class=\"token property\">\"source\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"manual\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">9</span>      <span class=\"token property\">\"isPinned\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">10</span>      <span class=\"token property\">\"time\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token property\">\"created\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1782203832706</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"updated\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1782203857358</span><span class=\"token punctuation\">}</span>\n<span class=\"line-number\">11</span>    <span class=\"token punctuation\">}</span>\n<span class=\"line-number\">12</span>  <span class=\"token punctuation\">]</span>\n<span class=\"line-number\">13</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"38-历史会话详情-describesession\"><a href=\"#38-%E5%8E%86%E5%8F%B2%E4%BC%9A%E8%AF%9D%E8%AF%A6%E6%83%85-describesession\" aria-label=\"38 历史会话详情 describesession permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3.8 历史会话详情 <code>DescribeSession</code></h3>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code>（参数为 Query 参数，拼接在请求 URL 上）</td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=DescribeSession&#x26;sessionID={sessionID}</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>位置</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>sessionID</code></td>\n<td>Query</td>\n<td>string</td>\n<td>是</td>\n<td>会话 ID</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应参数</strong>：会话对象（结构见 3.6），另含 <code>permission</code>（会话级权限规则）与 <code>requestId</code>。</p>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"requestId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{requestId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"id\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"ses_{sessionID}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">4</span>  <span class=\"token property\">\"title\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"每日任务-123\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">5</span>  <span class=\"token property\">\"source\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"scheduled\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">6</span>  <span class=\"token property\">\"permission\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n<span class=\"line-number\">7</span>    <span class=\"token punctuation\">{</span><span class=\"token property\">\"permission\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"question\"</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"pattern\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"*\"</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"action\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"deny\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">8</span>    <span class=\"token punctuation\">{</span><span class=\"token property\">\"permission\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"scheduler_create_job\"</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"pattern\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"*\"</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"action\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"deny\"</span><span class=\"token punctuation\">}</span>\n<span class=\"line-number\">9</span>  <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">10</span>  <span class=\"token property\">\"readStatus\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"unread\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">11</span>  <span class=\"token property\">\"time\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token property\">\"created\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1783558803151</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"updated\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1783558806920</span><span class=\"token punctuation\">}</span>\n<span class=\"line-number\">12</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"39-查询会话状态-describesessionstatus\"><a href=\"#39-%E6%9F%A5%E8%AF%A2%E4%BC%9A%E8%AF%9D%E7%8A%B6%E6%80%81-describesessionstatus\" aria-label=\"39 查询会话状态 describesessionstatus permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3.9 查询会话状态 <code>DescribeSessionStatus</code></h3>\n<p>返回当前账号下所有<strong>非空闲（非 idle）</strong>会话的状态，空闲会话不在结果中。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=DescribeSessionStatus</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p>请求体：无。</p>\n<p><strong>响应参数</strong>：JSON 对象，key 为会话 ID。</p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>{sessionID}.type</code></td>\n<td>string</td>\n<td>busy 或 retry</td>\n</tr>\n<tr>\n<td><code>{sessionID}.attempt</code></td>\n<td>number</td>\n<td>重试次数（仅 retry 状态）</td>\n</tr>\n<tr>\n<td><code>{sessionID}.message</code></td>\n<td>string</td>\n<td>重试原因（仅 retry 状态）</td>\n</tr>\n<tr>\n<td><code>{sessionID}.next</code></td>\n<td>number</td>\n<td>下次重试时间戳 ms（仅 retry 状态）</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"ses_{sessionID}\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">3</span>    <span class=\"token property\">\"type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"busy\"</span>\n<span class=\"line-number\">4</span>  <span class=\"token punctuation\">}</span>\n<span class=\"line-number\">5</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"310-历史会话消息-describesessionmessages\"><a href=\"#310-%E5%8E%86%E5%8F%B2%E4%BC%9A%E8%AF%9D%E6%B6%88%E6%81%AF-describesessionmessages\" aria-label=\"310 历史会话消息 describesessionmessages permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3.10 历史会话消息 <code>DescribeSessionMessages</code></h3>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code>（参数为 Query 参数）</td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=DescribeSessionMessages&#x26;sessionID={sessionID}&#x26;limit={limit}</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>位置</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>sessionID</code></td>\n<td>Query</td>\n<td>string</td>\n<td>是</td>\n<td>会话 ID</td>\n</tr>\n<tr>\n<td><code>limit</code></td>\n<td>Query</td>\n<td>number</td>\n<td>否</td>\n<td>返回消息条数上限。从最新消息开始截取，翻转时间升序返回（如 <code>limit=140</code> 返回最近 140 条）；不传返回全部。不支持 offset 分页</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应参数</strong>：<code>result</code> —— 消息数组。<code>role=user</code> 的消息字段见下方 User 消息，<code>role=assistant</code> 见 Assistant 消息；每条消息均含 <code>parts</code> 数组（见 Part 类型）。</p>\n<p><strong>User 消息字段</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>string</td>\n<td>是</td>\n<td>消息 ID（<code>msg_</code> 前缀）</td>\n</tr>\n<tr>\n<td><code>sessionID</code></td>\n<td>string</td>\n<td>是</td>\n<td>所属 Session ID</td>\n</tr>\n<tr>\n<td><code>role</code></td>\n<td>string</td>\n<td>是</td>\n<td>固定为 <code>\"user\"</code></td>\n</tr>\n<tr>\n<td><code>time.created</code></td>\n<td>number</td>\n<td>是</td>\n<td>创建时间戳（ms）</td>\n</tr>\n<tr>\n<td><code>parts</code></td>\n<td>array</td>\n<td>是</td>\n<td>消息内容片段，见 Part 类型</td>\n</tr>\n<tr>\n<td><code>format</code></td>\n<td>string</td>\n<td>否</td>\n<td>消息格式</td>\n</tr>\n<tr>\n<td><code>summary</code></td>\n<td>string</td>\n<td>否</td>\n<td>摘要（压缩后）</td>\n</tr>\n<tr>\n<td><code>agent</code></td>\n<td>string</td>\n<td>否</td>\n<td>指定 Agent 名称</td>\n</tr>\n<tr>\n<td><code>model.providerID</code></td>\n<td>string</td>\n<td>否</td>\n<td>使用的 Provider ID</td>\n</tr>\n<tr>\n<td><code>model.modelID</code></td>\n<td>string</td>\n<td>否</td>\n<td>使用的模型 ID</td>\n</tr>\n<tr>\n<td><code>system</code></td>\n<td>string</td>\n<td>否</td>\n<td>自定义 system prompt</td>\n</tr>\n<tr>\n<td><code>variant</code></td>\n<td>string</td>\n<td>否</td>\n<td>消息变体标识</td>\n</tr>\n</tbody>\n</table>\n<p><strong>Assistant 消息字段</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>string</td>\n<td>是</td>\n<td>消息 ID（<code>msg_</code> 前缀）</td>\n</tr>\n<tr>\n<td><code>sessionID</code></td>\n<td>string</td>\n<td>是</td>\n<td>所属 Session ID</td>\n</tr>\n<tr>\n<td><code>role</code></td>\n<td>string</td>\n<td>是</td>\n<td>固定为 <code>\"assistant\"</code></td>\n</tr>\n<tr>\n<td><code>time.created</code></td>\n<td>number</td>\n<td>是</td>\n<td>创建时间戳（ms）</td>\n</tr>\n<tr>\n<td><code>time.completed</code></td>\n<td>number</td>\n<td>否</td>\n<td>完成时间戳（ms）</td>\n</tr>\n<tr>\n<td><code>parts</code></td>\n<td>array</td>\n<td>是</td>\n<td>消息内容片段，见 Part 类型</td>\n</tr>\n<tr>\n<td><code>error</code></td>\n<td>string</td>\n<td>否</td>\n<td>出错时的错误信息</td>\n</tr>\n<tr>\n<td><code>parentID</code></td>\n<td>string</td>\n<td>否</td>\n<td>父消息 ID（Fork 场景）</td>\n</tr>\n<tr>\n<td><code>modelID</code></td>\n<td>string</td>\n<td>否</td>\n<td>使用的模型 ID</td>\n</tr>\n<tr>\n<td><code>providerID</code></td>\n<td>string</td>\n<td>否</td>\n<td>使用的 Provider ID</td>\n</tr>\n<tr>\n<td><code>mode</code></td>\n<td>string</td>\n<td>否</td>\n<td>执行模式</td>\n</tr>\n<tr>\n<td><code>agent</code></td>\n<td>string</td>\n<td>否</td>\n<td>使用的 Agent 名称</td>\n</tr>\n<tr>\n<td><code>path.cwd</code></td>\n<td>string</td>\n<td>否</td>\n<td>执行时的工作目录</td>\n</tr>\n<tr>\n<td><code>path.root</code></td>\n<td>string</td>\n<td>否</td>\n<td>执行时的项目根目录</td>\n</tr>\n<tr>\n<td><code>summary</code></td>\n<td>string</td>\n<td>否</td>\n<td>摘要（压缩后）</td>\n</tr>\n<tr>\n<td><code>cost</code></td>\n<td>number</td>\n<td>否</td>\n<td>本次消费费用</td>\n</tr>\n<tr>\n<td><code>tokens.total</code></td>\n<td>number</td>\n<td>否</td>\n<td>总 token 数</td>\n</tr>\n<tr>\n<td><code>tokens.input</code></td>\n<td>number</td>\n<td>否</td>\n<td>输入 token 数</td>\n</tr>\n<tr>\n<td><code>tokens.output</code></td>\n<td>number</td>\n<td>否</td>\n<td>输出 token 数</td>\n</tr>\n<tr>\n<td><code>tokens.reasoning</code></td>\n<td>number</td>\n<td>否</td>\n<td>推理 token 数</td>\n</tr>\n<tr>\n<td><code>tokens.cache.read</code></td>\n<td>number</td>\n<td>否</td>\n<td>缓存命中 token 数</td>\n</tr>\n<tr>\n<td><code>tokens.cache.write</code></td>\n<td>number</td>\n<td>否</td>\n<td>缓存写入 token 数</td>\n</tr>\n<tr>\n<td><code>finish</code></td>\n<td>string</td>\n<td>否</td>\n<td>完成原因（stop / length / tool_calls 等）</td>\n</tr>\n<tr>\n<td><code>variant</code></td>\n<td>string</td>\n<td>否</td>\n<td>消息变体标识</td>\n</tr>\n</tbody>\n</table>\n<p><strong>Part 类型</strong></p>\n<p>所有 Part 均含公共字段：<code>id</code>（<code>prt_</code> 前缀）、<code>messageID</code>、<code>sessionID</code>、<code>type</code>，类型为 String。各 <code>type</code> 特有字段：</p>\n<table>\n<thead>\n<tr>\n<th>Type</th>\n<th>说明</th>\n<th>特有字段</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>text</code></td>\n<td>文本内容</td>\n<td><code>text: string</code></td>\n</tr>\n<tr>\n<td><code>file</code></td>\n<td>文件引用</td>\n<td><code>url: string</code>；可选 <code>filename: string</code>、<code>mediaType: string</code></td>\n</tr>\n<tr>\n<td><code>tool</code></td>\n<td>工具调用</td>\n<td><code>callID: string</code>、<code>tool: string</code>（工具名）、<code>state: object</code>（见 ToolState）、<code>metadata: object</code></td>\n</tr>\n<tr>\n<td><code>reasoning</code></td>\n<td>模型推理过程</td>\n<td><code>text: string</code>；可选 <code>summary: string</code></td>\n</tr>\n<tr>\n<td><code>step-start</code></td>\n<td>推理步骤开始</td>\n<td>无额外字段</td>\n</tr>\n<tr>\n<td><code>step-finish</code></td>\n<td>推理步骤结束</td>\n<td>无额外字段</td>\n</tr>\n<tr>\n<td><code>subtask</code></td>\n<td>子任务调用</td>\n<td><code>description: string</code>、<code>sessionID: string</code></td>\n</tr>\n<tr>\n<td><code>agent</code></td>\n<td>Agent 调用</td>\n<td><code>agent: string</code>、<code>description: string</code>、<code>sessionID: string</code></td>\n</tr>\n<tr>\n<td><code>file-import</code></td>\n<td>文件导入块</td>\n<td><code>files: array</code>（文件块列表）</td>\n</tr>\n<tr>\n<td><code>file-export</code></td>\n<td>文件导出块</td>\n<td><code>files: array</code>（文件块列表）</td>\n</tr>\n<tr>\n<td><code>compaction</code></td>\n<td>上下文压缩记录</td>\n<td><code>summary: string</code></td>\n</tr>\n<tr>\n<td><code>retry</code></td>\n<td>重试记录</td>\n<td><code>error: string</code>、<code>attempt: number</code></td>\n</tr>\n<tr>\n<td><code>snapshot</code></td>\n<td>文件快照</td>\n<td><code>snapshot: string</code></td>\n</tr>\n<tr>\n<td><code>patch</code></td>\n<td>文件 diff</td>\n<td><code>patch: string</code></td>\n</tr>\n</tbody>\n</table>\n<p><strong>ToolState（以 </strong><code>type</code><strong> 字段区分状态）</strong></p>\n<p>pending（待执行）：</p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>type</code></td>\n<td>string</td>\n<td><code>\"pending\"</code></td>\n</tr>\n<tr>\n<td><code>input</code></td>\n<td>any</td>\n<td>工具调用入参</td>\n</tr>\n<tr>\n<td><code>raw</code></td>\n<td>string</td>\n<td>原始输入字符串（可选）</td>\n</tr>\n</tbody>\n</table>\n<p>running（执行中）：</p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>type</code></td>\n<td>string</td>\n<td><code>\"running\"</code></td>\n</tr>\n<tr>\n<td><code>input</code></td>\n<td>any</td>\n<td>工具调用入参</td>\n</tr>\n<tr>\n<td><code>title</code></td>\n<td>string</td>\n<td>UI 展示标题（可选）</td>\n</tr>\n<tr>\n<td><code>metadata</code></td>\n<td>object</td>\n<td>附加上下文</td>\n</tr>\n<tr>\n<td><code>time.start</code></td>\n<td>number</td>\n<td>开始时间戳（ms）</td>\n</tr>\n</tbody>\n</table>\n<p>completed（已完成）：</p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>type</code></td>\n<td>string</td>\n<td><code>\"completed\"</code></td>\n</tr>\n<tr>\n<td><code>input</code></td>\n<td>any</td>\n<td>工具调用入参</td>\n</tr>\n<tr>\n<td><code>output</code></td>\n<td>any</td>\n<td>工具调用输出</td>\n</tr>\n<tr>\n<td><code>title</code></td>\n<td>string</td>\n<td>UI 展示标题（可选）</td>\n</tr>\n<tr>\n<td><code>metadata</code></td>\n<td>object</td>\n<td>附加上下文</td>\n</tr>\n<tr>\n<td><code>time.start</code></td>\n<td>number</td>\n<td>开始时间戳（ms）</td>\n</tr>\n<tr>\n<td><code>time.end</code></td>\n<td>number</td>\n<td>结束时间戳（ms）</td>\n</tr>\n<tr>\n<td><code>time.compacted</code></td>\n<td>boolean</td>\n<td>是否已被压缩（可选）</td>\n</tr>\n<tr>\n<td><code>attachments</code></td>\n<td>string[]</td>\n<td>附件列表（可选）</td>\n</tr>\n</tbody>\n</table>\n<p>error（执行失败）：</p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>type</code></td>\n<td>string</td>\n<td><code>\"error\"</code></td>\n</tr>\n<tr>\n<td><code>input</code></td>\n<td>any</td>\n<td>工具调用入参</td>\n</tr>\n<tr>\n<td><code>error</code></td>\n<td>string</td>\n<td>错误信息</td>\n</tr>\n<tr>\n<td><code>metadata</code></td>\n<td>object</td>\n<td>附加上下文</td>\n</tr>\n<tr>\n<td><code>time.start</code></td>\n<td>number</td>\n<td>开始时间戳（ms）</td>\n</tr>\n<tr>\n<td><code>time.end</code></td>\n<td>number</td>\n<td>结束时间戳（ms）</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"requestId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{requestId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"result\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n<span class=\"line-number\">4</span>    <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">5</span>      <span class=\"token property\">\"info\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">6</span>        <span class=\"token property\">\"id\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"msg_{messageID}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">7</span>        <span class=\"token property\">\"role\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"assistant\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">8</span>        <span class=\"token property\">\"sessionID\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"ses_{sessionID}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">9</span>        <span class=\"token property\">\"finish\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"stop\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">10</span>        <span class=\"token property\">\"time\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token property\">\"created\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1781672921612</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"completed\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1781672923336</span><span class=\"token punctuation\">}</span>\n<span class=\"line-number\">11</span>      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">12</span>      <span class=\"token property\">\"parts\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n<span class=\"line-number\">13</span>        <span class=\"token punctuation\">{</span><span class=\"token property\">\"id\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"prt_{partId}\"</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"step-start\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">14</span>        <span class=\"token punctuation\">{</span><span class=\"token property\">\"id\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"prt_{partId}\"</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"text\"</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"text\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"已完成。\"</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"time\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token property\">\"start\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1781672923007</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"end\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1781672923007</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">15</span>        <span class=\"token punctuation\">{</span><span class=\"token property\">\"id\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"prt_{partId}\"</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"step-finish\"</span><span class=\"token punctuation\">}</span>\n<span class=\"line-number\">16</span>      <span class=\"token punctuation\">]</span>\n<span class=\"line-number\">17</span>    <span class=\"token punctuation\">}</span>\n<span class=\"line-number\">18</span>  <span class=\"token punctuation\">]</span>\n<span class=\"line-number\">19</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"311-首页推荐问-describerecommendqueries\"><a href=\"#311-%E9%A6%96%E9%A1%B5%E6%8E%A8%E8%8D%90%E9%97%AE-describerecommendqueries\" aria-label=\"311 首页推荐问 describerecommendqueries permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3.11 首页推荐问 <code>DescribeRecommendQueries</code></h3>\n<p>获取首页推荐问列表，用于在首页展示引导用户提问的推荐内容。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code>（参数为 Query 参数）</td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=DescribeRecommendQueries&#x26;clientType={clientType}</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>位置</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>clientType</code></td>\n<td>Query</td>\n<td>string</td>\n<td>是</td>\n<td>mobile / desktop / web</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应参数</strong>：<code>result</code> —— 推荐问数组。</p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>int64</td>\n<td>是</td>\n<td>推荐问 ID</td>\n</tr>\n<tr>\n<td><code>tag</code></td>\n<td>string</td>\n<td>是</td>\n<td>分类标签</td>\n</tr>\n<tr>\n<td><code>query</code></td>\n<td>string</td>\n<td>是</td>\n<td>实际发送给对话服务的 Query</td>\n</tr>\n<tr>\n<td><code>display</code></td>\n<td>string</td>\n<td>是</td>\n<td>当前 clientType 的展示文案</td>\n</tr>\n<tr>\n<td><code>execScope</code></td>\n<td>string</td>\n<td>否</td>\n<td>可执行端，逗号分隔（如 desktop,web,mobile）</td>\n</tr>\n<tr>\n<td><code>displayScope</code></td>\n<td>string</td>\n<td>否</td>\n<td>可展示端，逗号分隔</td>\n</tr>\n<tr>\n<td><code>attachment</code></td>\n<td>object</td>\n<td>否</td>\n<td>推荐问附件（见 Attachment.Info）</td>\n</tr>\n<tr>\n<td><code>skills</code></td>\n<td>array</td>\n<td>是</td>\n<td>关联 Skill（见 Resource.Info），无数据时返回 <code>[]</code></td>\n</tr>\n<tr>\n<td><code>plugins</code></td>\n<td>array</td>\n<td>是</td>\n<td>关联 Plugin（见 Resource.Info），无数据时返回 <code>[]</code></td>\n</tr>\n<tr>\n<td><code>icon</code></td>\n<td>string</td>\n<td>否</td>\n<td>分类标签图标的签名地址</td>\n</tr>\n</tbody>\n</table>\n<p><strong>Attachment.Info</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>bosPath</code></td>\n<td>string</td>\n<td>是</td>\n<td>签名下载地址</td>\n</tr>\n<tr>\n<td><code>fileName</code></td>\n<td>string</td>\n<td>是</td>\n<td>文件名</td>\n</tr>\n<tr>\n<td><code>fileType</code></td>\n<td>string</td>\n<td>是</td>\n<td>文件 MIME 类型</td>\n</tr>\n<tr>\n<td><code>fileSize</code></td>\n<td>string</td>\n<td>是</td>\n<td>格式化文件大小（如 128.5KB）</td>\n</tr>\n<tr>\n<td><code>cfsPath</code></td>\n<td>string</td>\n<td>否</td>\n<td>用户文件路径，可在发起会话时直接引用</td>\n</tr>\n</tbody>\n</table>\n<p><strong>Resource.Info（skills / plugins 元素）</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>type</code></td>\n<td>string</td>\n<td>是</td>\n<td>skill / plugin</td>\n</tr>\n<tr>\n<td><code>displayName</code></td>\n<td>string</td>\n<td>是</td>\n<td>展示名称</td>\n</tr>\n<tr>\n<td><code>name</code></td>\n<td>string</td>\n<td>是</td>\n<td>Skill 名称或 Plugin Code</td>\n</tr>\n</tbody>\n</table>\n<p><strong>注意事项（分屏规则）：</strong></p>\n<ul>\n<li>接口不返回分页字段，<code>result</code> 为扁平数组，客户端每 4 条切分一屏（第 1 屏 <code>result[0:4]</code>，第 2 屏 <code>result[4:8]</code>，依此类推；候选不足时最后一屏可少于 4 条）。</li>\n<li>同一屏不出现重复 id，同屏内优先不同 tag。</li>\n<li>服务端会做个性化编排，同一用户多次请求返回的内容和顺序可能变化，请按返回顺序展示。</li>\n</ul>\n<h2 id=\"4-对话交互\"><a href=\"#4-%E5%AF%B9%E8%AF%9D%E4%BA%A4%E4%BA%92\" aria-label=\"4 对话交互 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4 对话交互</h2>\n<p>搭子在任务执行过程中可能向用户发起两类交互：澄清问答（信息不足时提问）与权限申请（需要访问本地资源或执行敏感操作时请求授权）。</p>\n<h3 id=\"41-澄清问答-describeconversationquestions\"><a href=\"#41-%E6%BE%84%E6%B8%85%E9%97%AE%E7%AD%94-describeconversationquestions\" aria-label=\"41 澄清问答 describeconversationquestions permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4.1 澄清问答 <code>DescribeConversationQuestions</code></h3>\n<p>获取当前所有待回答的澄清问题（搭子主动发起，通常 1-4 个问题）。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=DescribeConversationQuestions</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p>请求体：无。</p>\n<p><strong>响应参数</strong>：<code>result</code> —— 问题请求数组。</p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>string</td>\n<td>是</td>\n<td>问题请求 ID（<code>que_</code> 前缀），回复时使用</td>\n</tr>\n<tr>\n<td><code>sessionID</code></td>\n<td>string</td>\n<td>是</td>\n<td>所属会话 ID</td>\n</tr>\n<tr>\n<td><code>questions</code></td>\n<td>array</td>\n<td>是</td>\n<td>问题列表（1-4 个）</td>\n</tr>\n<tr>\n<td><code>tool.messageID</code></td>\n<td>string</td>\n<td>否</td>\n<td>触发该问题的工具调用所在消息 ID</td>\n</tr>\n<tr>\n<td><code>tool.callID</code></td>\n<td>string</td>\n<td>否</td>\n<td>触发该问题的工具调用 ID</td>\n</tr>\n</tbody>\n</table>\n<p><strong>questions 数组元素</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>question</code></td>\n<td>string</td>\n<td>是</td>\n<td>完整问题文本，以问号结尾</td>\n</tr>\n<tr>\n<td><code>header</code></td>\n<td>string</td>\n<td>是</td>\n<td>短标签，最多 30 字符，用于 UI 展示</td>\n</tr>\n<tr>\n<td><code>options</code></td>\n<td>array</td>\n<td>是</td>\n<td>选项列表（2-4 个），每项含 <code>label: string</code>（选项文字）与 <code>description: string</code>（选项说明）</td>\n</tr>\n<tr>\n<td><code>custom</code></td>\n<td>boolean</td>\n<td>否</td>\n<td>是否允许用户自定义输入</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"requestId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{requestId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"result\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n<span class=\"line-number\">4</span>    <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">5</span>      <span class=\"token property\">\"id\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"que_{requestID}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">6</span>      <span class=\"token property\">\"sessionID\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"ses_{sessionID}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">7</span>      <span class=\"token property\">\"questions\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n<span class=\"line-number\">8</span>        <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">9</span>          <span class=\"token property\">\"question\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"这份 PPT 是关于什么主题的？用途是什么？\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">10</span>          <span class=\"token property\">\"header\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"PPT 主题与用途\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">11</span>          <span class=\"token property\">\"options\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n<span class=\"line-number\">12</span>            <span class=\"token punctuation\">{</span><span class=\"token property\">\"label\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"工作汇报\"</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"description\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"面向团队或管理层的工作总结\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">13</span>            <span class=\"token punctuation\">{</span><span class=\"token property\">\"label\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"学术讲座\"</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"description\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"研究进展或学术内容分享\"</span><span class=\"token punctuation\">}</span>\n<span class=\"line-number\">14</span>          <span class=\"token punctuation\">]</span>\n<span class=\"line-number\">15</span>        <span class=\"token punctuation\">}</span>\n<span class=\"line-number\">16</span>      <span class=\"token punctuation\">]</span>\n<span class=\"line-number\">17</span>    <span class=\"token punctuation\">}</span>\n<span class=\"line-number\">18</span>  <span class=\"token punctuation\">]</span>\n<span class=\"line-number\">19</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"42-回复澄清问题-replyconversationquestion\"><a href=\"#42-%E5%9B%9E%E5%A4%8D%E6%BE%84%E6%B8%85%E9%97%AE%E9%A2%98-replyconversationquestion\" aria-label=\"42 回复澄清问题 replyconversationquestion permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4.2 回复澄清问题 <code>ReplyConversationQuestion</code></h3>\n<p>用户在澄清弹窗中回答后调用，把答案回传给搭子继续执行。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=ReplyConversationQuestion</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求体参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>requestID</code></td>\n<td>string</td>\n<td>是</td>\n<td>问题请求 ID，来自 <code>DescribeConversationQuestions</code> 返回的 <code>result[].id</code>，前缀一般是 <code>que_</code></td>\n</tr>\n<tr>\n<td><code>answers</code></td>\n<td>string[][]</td>\n<td>是</td>\n<td>按 questions 顺序填写，每个元素是该题选中的 label 列表，支持多选；<code>custom=true</code> 时可直接传用户输入内容</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"requestID\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"que_{requestID}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"answers\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n<span class=\"line-number\">4</span>    <span class=\"token punctuation\">[</span><span class=\"token string\">\"自动驾驶产品竞品分析\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">5</span>    <span class=\"token punctuation\">[</span><span class=\"token string\">\"10-20页\"</span><span class=\"token punctuation\">]</span>\n<span class=\"line-number\">6</span>  <span class=\"token punctuation\">]</span>\n<span class=\"line-number\">7</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"requestId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{requestId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"result\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span>\n<span class=\"line-number\">4</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"43-权限申请-describeconversationpermissions\"><a href=\"#43-%E6%9D%83%E9%99%90%E7%94%B3%E8%AF%B7-describeconversationpermissions\" aria-label=\"43 权限申请 describeconversationpermissions permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4.3 权限申请 <code>DescribeConversationPermissions</code></h3>\n<p>获取当前所有待审批的权限请求（已处理的不在列表中），用于展示权限弹窗。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=DescribeConversationPermissions</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p>请求体：无。</p>\n<p><strong>响应参数</strong>：<code>result</code> —— 权限请求数组（PermissionRequest）。</p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>string</td>\n<td>是</td>\n<td>权限请求 ID（<code>per_</code> 前缀）</td>\n</tr>\n<tr>\n<td><code>sessionID</code></td>\n<td>string</td>\n<td>是</td>\n<td>所属 Session ID</td>\n</tr>\n<tr>\n<td><code>permission</code></td>\n<td>string</td>\n<td>是</td>\n<td>权限类型，如 bash、read、write</td>\n</tr>\n<tr>\n<td><code>patterns</code></td>\n<td>string[]</td>\n<td>是</td>\n<td>匹配的操作模式，如 <code>[\"rm -rf dist\"]</code></td>\n</tr>\n<tr>\n<td><code>metadata</code></td>\n<td>object</td>\n<td>是</td>\n<td>附加上下文（如具体命令参数）</td>\n</tr>\n<tr>\n<td><code>always</code></td>\n<td>string[]</td>\n<td>是</td>\n<td>已被标记为始终允许的 patterns</td>\n</tr>\n<tr>\n<td><code>tool.messageID</code></td>\n<td>string</td>\n<td>否</td>\n<td>触发该权限的工具调用所在消息 ID</td>\n</tr>\n<tr>\n<td><code>tool.callID</code></td>\n<td>string</td>\n<td>否</td>\n<td>触发该权限的工具调用 ID</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"44-回复权限申请-replyconversationpermission\"><a href=\"#44-%E5%9B%9E%E5%A4%8D%E6%9D%83%E9%99%90%E7%94%B3%E8%AF%B7-replyconversationpermission\" aria-label=\"44 回复权限申请 replyconversationpermission permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4.4 回复权限申请 <code>ReplyConversationPermission</code></h3>\n<p>用户在权限弹窗中选择允许或拒绝后调用，把审批结果回传给搭子，搭子收到后继续执行或中止。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=ReplyConversationPermission</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求体参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>位置</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>requestID</code></td>\n<td>body</td>\n<td>string</td>\n<td>是</td>\n<td>权限请求 ID，来自 <code>DescribeConversationPermissions</code> 返回的 <code>result[].id</code></td>\n</tr>\n<tr>\n<td><code>reply</code></td>\n<td>body</td>\n<td>string</td>\n<td>是</td>\n<td>审批结果：once / always / reject</td>\n</tr>\n<tr>\n<td><code>message</code></td>\n<td>body</td>\n<td>string</td>\n<td>否</td>\n<td>可选备注</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"requestID\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"per_{requestID}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"reply\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"once\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">4</span>  <span class=\"token property\">\"message\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"approve\"</span>\n<span class=\"line-number\">5</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"requestId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{requestId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"result\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span>\n<span class=\"line-number\">4</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"45-查询待处理权限（实时通道）-get-permission\"><a href=\"#45-%E6%9F%A5%E8%AF%A2%E5%BE%85%E5%A4%84%E7%90%86%E6%9D%83%E9%99%90%EF%BC%88%E5%AE%9E%E6%97%B6%E9%80%9A%E9%81%93%EF%BC%89-get-permission\" aria-label=\"45 查询待处理权限（实时通道） get permission permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4.5 查询待处理权限（实时通道） <code>GET /permission</code></h3>\n<p>获取当前会话运行环境中所有尚未回复的权限请求，用于权限弹窗展示，以及页面刷新、SSE 重连或 App 回到前台后的状态对账。只返回 pending 请求，不返回历史或已批准的规则。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>GET</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/dispatch/{route}/permission</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>位置</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>directory</code></td>\n<td>Query</td>\n<td>string</td>\n<td>否</td>\n<td>工作区目录（通常由接入层补齐或透传）</td>\n</tr>\n</tbody>\n</table>\n<p>Console、Agent-Hub 与 qianfan-desk 的路径映射如下：</p>\n<table>\n<thead>\n<tr>\n<th>调用层</th>\n<th>HTTP 路径</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Console / Web</td>\n<td><code>GET /dispatch/clawguard/permission</code></td>\n</tr>\n<tr>\n<td>Agent-Hub</td>\n<td><code>GET /v2/dumate/permission</code></td>\n</tr>\n<tr>\n<td>qianfan-desk</td>\n<td><code>GET /permission</code></td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应参数</strong>：PermissionRequest[]，除 4.3 的字段外，还包含服务端生成的展示信息：</p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>string</td>\n<td>是</td>\n<td>权限请求 ID，以 <code>per_</code> 开头；回复接口必须原样使用该值</td>\n</tr>\n<tr>\n<td><code>sessionID</code></td>\n<td>string</td>\n<td>是</td>\n<td>所属会话 ID，以 <code>ses_</code> 开头</td>\n</tr>\n<tr>\n<td><code>permission</code></td>\n<td>string</td>\n<td>是</td>\n<td>权限类型，例如 location、bash、read、write</td>\n</tr>\n<tr>\n<td><code>patterns</code></td>\n<td>string[]</td>\n<td>是</td>\n<td>本次申请覆盖的操作模式；location 通常为 <code>[\"*\"]</code></td>\n</tr>\n<tr>\n<td><code>metadata</code></td>\n<td>object</td>\n<td>是</td>\n<td>附加上下文</td>\n</tr>\n<tr>\n<td><code>always</code></td>\n<td>string[]</td>\n<td>是</td>\n<td>允许持久批准的 pattern；空数组表示不支持持久批准</td>\n</tr>\n<tr>\n<td><code>tool.messageID</code></td>\n<td>string</td>\n<td>否</td>\n<td>触发该权限请求的消息 ID</td>\n</tr>\n<tr>\n<td><code>tool.callID</code></td>\n<td>string</td>\n<td>否</td>\n<td>触发该权限请求的 Tool Call ID</td>\n</tr>\n<tr>\n<td><code>display</code></td>\n<td>object</td>\n<td>否</td>\n<td>服务端生成的展示信息</td>\n</tr>\n<tr>\n<td><code>display.title</code></td>\n<td>string</td>\n<td>是</td>\n<td>弹窗标题</td>\n</tr>\n<tr>\n<td><code>display.riskLevel</code></td>\n<td>string</td>\n<td>是</td>\n<td>风险等级：high、medium 或 low</td>\n</tr>\n<tr>\n<td><code>display.riskLabel</code></td>\n<td>string</td>\n<td>是</td>\n<td>风险标签</td>\n</tr>\n<tr>\n<td><code>display.description</code></td>\n<td>string</td>\n<td>是</td>\n<td>面向用户的权限说明</td>\n</tr>\n<tr>\n<td><code>display.resolvedPaths</code></td>\n<td>string[]</td>\n<td>是</td>\n<td>解析后的相关路径；location 场景为空数组</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应示例（定位权限）</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">[</span>\n<span class=\"line-number\">2</span>  <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">3</span>    <span class=\"token property\">\"id\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"per_{requestID}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">4</span>    <span class=\"token property\">\"sessionID\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"ses_{sessionID}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">5</span>    <span class=\"token property\">\"permission\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"location\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">6</span>    <span class=\"token property\">\"patterns\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"*\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">7</span>    <span class=\"token property\">\"metadata\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">8</span>    <span class=\"token property\">\"always\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">9</span>    <span class=\"token property\">\"tool\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token property\">\"messageID\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"msg_{messageID}\"</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"callID\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{callID}\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">10</span>    <span class=\"token property\">\"display\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">11</span>      <span class=\"token property\">\"title\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"获取您的地理位置\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">12</span>      <span class=\"token property\">\"riskLevel\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"medium\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">13</span>      <span class=\"token property\">\"riskLabel\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"请确认\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">14</span>      <span class=\"token property\">\"description\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"请求使用您的当前位置以提供更精准的回答，同意后将仅在本次对话中使用。\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">15</span>      <span class=\"token property\">\"resolvedPaths\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n<span class=\"line-number\">16</span>    <span class=\"token punctuation\">}</span>\n<span class=\"line-number\">17</span>  <span class=\"token punctuation\">}</span>\n<span class=\"line-number\">18</span><span class=\"token punctuation\">]</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"46-回复权限请求（实时通道）-post-permissionrequestidreply\"><a href=\"#46-%E5%9B%9E%E5%A4%8D%E6%9D%83%E9%99%90%E8%AF%B7%E6%B1%82%EF%BC%88%E5%AE%9E%E6%97%B6%E9%80%9A%E9%81%93%EF%BC%89-post-permissionrequestidreply\" aria-label=\"46 回复权限请求（实时通道） post permissionrequestidreply permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4.6 回复权限请求（实时通道） <code>POST /permission/:requestID/reply</code></h3>\n<p>用户允许或拒绝权限请求后调用。服务端使用 <code>requestID</code> 找到对应 pending 请求，并唤醒正在等待结果的搭子流程。</p>\n<p>Console、Agent-Hub 与 qianfan-desk 的路径映射如下：</p>\n<table>\n<thead>\n<tr>\n<th>调用层</th>\n<th>HTTP 路径</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Console / Web</td>\n<td><code>POST /dispatch/clawguard/permission/:requestID/reply</code></td>\n</tr>\n<tr>\n<td>Agent-Hub</td>\n<td><code>POST /v2/dumate/permission/:requestID/reply</code></td>\n</tr>\n<tr>\n<td>qianfan-desk</td>\n<td><code>POST /permission/:requestID/reply</code></td>\n</tr>\n</tbody>\n</table>\n<p><strong>Path 参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>requestID</code></td>\n<td>string</td>\n<td>是</td>\n<td>权限请求 ID，必须取自 <code>GET /permission</code> 返回项的 <code>id</code> 或 <code>permission.asked.properties.id</code></td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求体参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>reply</code></td>\n<td>string</td>\n<td>是</td>\n<td>once、always 或 reject</td>\n</tr>\n<tr>\n<td><code>message</code></td>\n<td>string</td>\n<td>否</td>\n<td>拒绝时可携带用户补充说明</td>\n</tr>\n<tr>\n<td><code>data</code></td>\n<td>any</td>\n<td>否</td>\n<td>权限相关业务数据；仅 <code>askWithData</code> 类型的权限请求会消费。location 权限通过该字段回传位置</td>\n</tr>\n</tbody>\n</table>\n<p><strong>location 的 data 结构</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>province</code></td>\n<td>string</td>\n<td>否</td>\n<td>省或直辖市</td>\n</tr>\n<tr>\n<td><code>city</code></td>\n<td>string</td>\n<td>否</td>\n<td>城市</td>\n</tr>\n<tr>\n<td><code>district</code></td>\n<td>string</td>\n<td>否</td>\n<td>区或县</td>\n</tr>\n<tr>\n<td><code>town</code></td>\n<td>string</td>\n<td>否</td>\n<td>街道或镇</td>\n</tr>\n<tr>\n<td><code>street</code></td>\n<td>string</td>\n<td>否</td>\n<td>门牌或街道地址</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求示例（定位授权）</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"reply\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"once\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"data\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">4</span>    <span class=\"token property\">\"province\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"北京市\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">5</span>    <span class=\"token property\">\"city\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"北京市\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">6</span>    <span class=\"token property\">\"district\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"海淀区\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">7</span>    <span class=\"token property\">\"town\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"上地街道\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">8</span>    <span class=\"token property\">\"street\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"信息路\"</span>\n<span class=\"line-number\">9</span>  <span class=\"token punctuation\">}</span>\n<span class=\"line-number\">10</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p><strong>请求示例（拒绝）</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"reply\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"reject\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"message\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"本次不允许获取位置\"</span>\n<span class=\"line-number\">4</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p>响应：HTTP 200 <code>true</code>。</p>\n<p><strong>注意事项（可靠性）：</strong></p>\n<ul>\n<li>权限等待没有内置超时。若回复在到达服务端前丢失，pending 会继续存在、搭子继续等待，客户端应在回复后重新调用 <code>GET /permission</code> 对账并重试。</li>\n<li>服务端已处理但响应丢失时，重新查询该 ID 会从列表消失。</li>\n<li>请求 ID 不存在时回复会静默返回（HTTP 仍为 200 true），因此 200 true 只表示调用成功，需结合 <code>GET /permission</code> 结果与会话状态确认处理成功。</li>\n</ul>\n<h2 id=\"5-文件\"><a href=\"#5-%E6%96%87%E4%BB%B6\" aria-label=\"5 文件 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5 文件</h2>\n<h3 id=\"51-上传文件-createpresessionfile\"><a href=\"#51-%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6-createpresessionfile\" aria-label=\"51 上传文件 createpresessionfile permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5.1 上传文件 <code>CreatePreSessionFile</code></h3>\n<p>将会话输入框中的文件上传至服务端，供会话使用。具体传参字段和值的形状请以接口实际要求为准。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=CreatePreSessionFile</code></td>\n</tr>\n<tr>\n<td>Content-Type</td>\n<td><code>multipart/form-data; boundary=xxx</code>（boundary 部分一般由代码或浏览器自动生成）</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>sessionId</code></td>\n<td>string</td>\n<td>否</td>\n<td>会话 ID；当前会话还未生成会话 ID 时传空字符串</td>\n</tr>\n<tr>\n<td><code>file</code></td>\n<td>string</td>\n<td>是</td>\n<td>本地文件（<code>file=@/path/to/your/file.ext</code>），单个文件不超过 10MB</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token function\">curl</span> -X POST <span class=\"token string\">'https://www.dumate.cn/openapi?Action=CreatePreSessionFile'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">2</span>  -H <span class=\"token string\">'Authorization: Bearer {apiKey}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">3</span>  -H <span class=\"token string\">'X-Dumate-Token: {dumateToken}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">4</span>  -F <span class=\"token string\">'sessionId='</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">5</span>  -F <span class=\"token string\">'file=@/path/to/your/file.ext'</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p><strong>响应参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>filePath</code></td>\n<td>string</td>\n<td>上传后的文件路径（形如 <code>/dumate/{accountId}/workspace/uploads/{accountId}/{uploadId}.mp4</code>），发起会话时作为文件 Part 的引用使用</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"filePath\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"/dumate/{accountId}/workspace/uploads/{uploadId}/example.mp4\"</span>\n<span class=\"line-number\">3</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"52-获取预上传文件访问地址-describepresessionfile\"><a href=\"#52-%E8%8E%B7%E5%8F%96%E9%A2%84%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6%E8%AE%BF%E9%97%AE%E5%9C%B0%E5%9D%80-describepresessionfile\" aria-label=\"52 获取预上传文件访问地址 describepresessionfile permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5.2 获取预上传文件访问地址 <code>DescribePreSessionFile</code></h3>\n<p>获取已上传文件的签名下载地址。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code>（参数为 Query 参数）</td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=DescribePreSessionFile&#x26;path={path}</code>（path 需 URL 编码）</td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>位置</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>path</code></td>\n<td>Query</td>\n<td>string</td>\n<td>是</td>\n<td><code>CreatePreSessionFile</code> 返回的 <code>filePath</code>。<br/>作为 Query 参数传递时请对 path 做 URL 编码</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>path</code></td>\n<td>string</td>\n<td>是</td>\n<td>归一化后路径（形如 <code>/dumate/{accountId}/workspace/uploads/xxx.png</code>）</td>\n</tr>\n<tr>\n<td><code>fileName</code></td>\n<td>string</td>\n<td>是</td>\n<td>文件存储名</td>\n</tr>\n<tr>\n<td><code>mimeType</code></td>\n<td>string</td>\n<td>否</td>\n<td>MIME 类型，无法根据扩展名判断时不返回</td>\n</tr>\n<tr>\n<td><code>size</code></td>\n<td>int64</td>\n<td>是</td>\n<td>文件大小（字节）</td>\n</tr>\n<tr>\n<td><code>downloadUrl</code></td>\n<td>string</td>\n<td>是</td>\n<td>签名下载地址</td>\n</tr>\n<tr>\n<td><code>expireSeconds</code></td>\n<td>int</td>\n<td>是</td>\n<td><code>downloadUrl</code> 有效期（秒）</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"requestId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{requestId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"path\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"/dumate/{accountId}/workspace/uploads/{uploadId}.png\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">4</span>  <span class=\"token property\">\"fileName\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{uploadId}.png\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">5</span>  <span class=\"token property\">\"mimeType\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"image/png\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">6</span>  <span class=\"token property\">\"size\"</span><span class=\"token operator\">:</span> <span class=\"token number\">656471</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">7</span>  <span class=\"token property\">\"downloadUrl\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"http://{bos-host}/{bucket}/{accountId}/workspace/uploads/{uploadId}.png?authorization={signature}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">8</span>  <span class=\"token property\">\"expireSeconds\"</span><span class=\"token operator\">:</span> <span class=\"token number\">3600</span>\n<span class=\"line-number\">9</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p>注意：仅支持通过 <code>CreatePreSessionFile</code> 上传的文件。</p>\n<h3 id=\"53-单个历史会话的文件产出物-describesessionfiles\"><a href=\"#53-%E5%8D%95%E4%B8%AA%E5%8E%86%E5%8F%B2%E4%BC%9A%E8%AF%9D%E7%9A%84%E6%96%87%E4%BB%B6%E4%BA%A7%E5%87%BA%E7%89%A9-describesessionfiles\" aria-label=\"53 单个历史会话的文件产出物 describesessionfiles permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5.3 单个历史会话的文件产出物 <code>DescribeSessionFiles</code></h3>\n<p>获取指定会话生成的文件产出物清单（报告、文档、图片等）。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code>（参数为 Query 参数）</td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=DescribeSessionFiles&#x26;sessionID={sessionID}</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>位置</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>sessionID</code></td>\n<td>Query</td>\n<td>string</td>\n<td>是</td>\n<td>会话 ID</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应参数</strong>：<code>result</code> —— 文件视图数组</p>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"result\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n<span class=\"line-number\">3</span>    <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">4</span>      <span class=\"token property\">\"artifactID\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"art_{artifactId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">5</span>      <span class=\"token property\">\"downloadUrl\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://{bos-host}/{bucket}/artifact/global/ses_{sessionID}/art_{artifactId}/报告.docx?authorization={signature}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">6</span>      <span class=\"token property\">\"errorCode\"</span><span class=\"token operator\">:</span> <span class=\"token null keyword\">null</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">7</span>      <span class=\"token property\">\"errorMessage\"</span><span class=\"token operator\">:</span> <span class=\"token null keyword\">null</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">8</span>      <span class=\"token property\">\"fileType\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"document\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">9</span>      <span class=\"token property\">\"filename\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"报告.docx\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">10</span>      <span class=\"token property\">\"mimeType\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"xxx\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">11</span>      <span class=\"token property\">\"path\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"/home/work/dumate/{accountId}/workspace/ses_{sessionID}/报告.docx\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">12</span>      <span class=\"token property\">\"pdfUrl\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{pdfUrl}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">13</span>      <span class=\"token property\">\"previewMode\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"pdf\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">14</span>      <span class=\"token property\">\"previewStatus\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"ready\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">15</span>      <span class=\"token property\">\"previewUrl\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://{bos-host}/docs/convert/{convertId}.pdf?authorization={signature}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">16</span>      <span class=\"token property\">\"relativePath\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"报告.docx\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">17</span>      <span class=\"token property\">\"timeUpdated\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1784284822612</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">18</span>      <span class=\"token property\">\"uploadStatus\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"ready\"</span>\n<span class=\"line-number\">19</span>    <span class=\"token punctuation\">}</span>\n<span class=\"line-number\">20</span>  <span class=\"token punctuation\">]</span>\n<span class=\"line-number\">21</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"54-单个文件详情-describesessionfile\"><a href=\"#54-%E5%8D%95%E4%B8%AA%E6%96%87%E4%BB%B6%E8%AF%A6%E6%83%85-describesessionfile\" aria-label=\"54 单个文件详情 describesessionfile permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5.4 单个文件详情 <code>DescribeSessionFile</code></h3>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code>（参数为 Query 参数）</td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=DescribeSessionFile&#x26;sessionID={sessionID}&#x26;path={path}</code>（path 需 URL 编码）</td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>位置</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>sessionID</code></td>\n<td>Query</td>\n<td>string</td>\n<td>是</td>\n<td>会话 ID</td>\n</tr>\n<tr>\n<td><code>path</code></td>\n<td>Query</td>\n<td>string</td>\n<td>是</td>\n<td>文件绝对路径（对齐会话文件清单的 <code>path</code> 字段）</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应参数</strong>：单个文件视图</p>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"artifactID\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"art_{artifactId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"downloadUrl\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://{bos-host}/{bucket}/artifact/global/ses_{sessionID}/art_{artifactId}/报告.docx?authorization={signature}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">4</span>  <span class=\"token property\">\"errorCode\"</span><span class=\"token operator\">:</span> <span class=\"token null keyword\">null</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">5</span>  <span class=\"token property\">\"errorMessage\"</span><span class=\"token operator\">:</span> <span class=\"token null keyword\">null</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">6</span>  <span class=\"token property\">\"fileType\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"document\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">7</span>  <span class=\"token property\">\"filename\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"报告.docx\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">8</span>  <span class=\"token property\">\"mimeType\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"xxx\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">9</span>  <span class=\"token property\">\"path\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"/home/work/dumate/{accountId}/workspace/ses_{sessionID}/报告.docx\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">10</span>  <span class=\"token property\">\"pdfUrl\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{pdfUrl}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">11</span>  <span class=\"token property\">\"previewMode\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"pdf\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">12</span>  <span class=\"token property\">\"previewStatus\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"ready\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">13</span>  <span class=\"token property\">\"previewUrl\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://{bos-host}/docs/convert/{convertId}.pdf?authorization={signature}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">14</span>  <span class=\"token property\">\"relativePath\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"报告.docx\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">15</span>  <span class=\"token property\">\"timeUpdated\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1784284822612</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">16</span>  <span class=\"token property\">\"uploadStatus\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"ready\"</span>\n<span class=\"line-number\">17</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"55-文件预览与下载-filepreviewview\"><a href=\"#55-%E6%96%87%E4%BB%B6%E9%A2%84%E8%A7%88%E4%B8%8E%E4%B8%8B%E8%BD%BD-filepreviewview\" aria-label=\"55 文件预览与下载 filepreviewview permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5.5 文件预览与下载 FilePreviewView</h3>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>filename</code></td>\n<td>string</td>\n<td>是</td>\n<td>文件名</td>\n</tr>\n<tr>\n<td><code>path</code></td>\n<td>string</td>\n<td>是</td>\n<td>文件绝对路径</td>\n</tr>\n<tr>\n<td><code>relativePath</code></td>\n<td>string</td>\n<td>是</td>\n<td>相对工作区路径</td>\n</tr>\n<tr>\n<td><code>artifactID</code></td>\n<td>string</td>\n<td>是</td>\n<td>当前路径对应的最新 artifact ID</td>\n</tr>\n<tr>\n<td><code>uploadStatus</code></td>\n<td>string</td>\n<td>是</td>\n<td>上传状态（见下表）</td>\n</tr>\n<tr>\n<td><code>pdfPreviewStatus</code></td>\n<td>string</td>\n<td>是</td>\n<td>预览状态（见下表）</td>\n</tr>\n<tr>\n<td><code>previewMode</code></td>\n<td>string</td>\n<td>是</td>\n<td>pdf / download / none</td>\n</tr>\n<tr>\n<td><code>previewUrl</code></td>\n<td>string/null</td>\n<td>是</td>\n<td>前端推荐直接打开的统一地址</td>\n</tr>\n<tr>\n<td><code>downloadUrl</code></td>\n<td>string/null</td>\n<td>是</td>\n<td>原始文件下载地址（仅 <code>uploadStatus=ready</code> 时保证可用）</td>\n</tr>\n<tr>\n<td><code>pdfUrl</code></td>\n<td>string/null</td>\n<td>是</td>\n<td>PDF 专用预览地址（仅 <code>pdfPreviewStatus=ready</code> 时保证可用）</td>\n</tr>\n<tr>\n<td><code>errorCode</code></td>\n<td>string/null</td>\n<td>是</td>\n<td>失败错误码</td>\n</tr>\n<tr>\n<td><code>errorMessage</code></td>\n<td>string/null</td>\n<td>是</td>\n<td>失败错误信息</td>\n</tr>\n<tr>\n<td><code>timeUpdated</code></td>\n<td>number</td>\n<td>是</td>\n<td>最后更新时间戳（ms）</td>\n</tr>\n</tbody>\n</table>\n<h4 id=\"551-文件状态字段\"><a href=\"#551-%E6%96%87%E4%BB%B6%E7%8A%B6%E6%80%81%E5%AD%97%E6%AE%B5\" aria-label=\"551 文件状态字段 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5.5.1 文件状态字段</h4>\n<p><code>uploadStatus</code></p>\n<table>\n<thead>\n<tr>\n<th>值</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>pending</code></td>\n<td>文件已注册，尚未开始上传</td>\n</tr>\n<tr>\n<td><code>uploading</code></td>\n<td>文件上传中</td>\n</tr>\n<tr>\n<td><code>ready</code></td>\n<td>上传完成，<code>downloadUrl</code> 可用</td>\n</tr>\n<tr>\n<td><code>failed</code></td>\n<td>上传失败，结合 <code>errorCode</code> / <code>errorMessage</code> 处理</td>\n</tr>\n</tbody>\n</table>\n<p><code>pdfPreviewStatus</code></p>\n<table>\n<thead>\n<tr>\n<th>值</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>none</code></td>\n<td>不走 PDF 预览链路</td>\n</tr>\n<tr>\n<td><code>pending</code></td>\n<td>已进入预览流程</td>\n</tr>\n<tr>\n<td><code>converting</code></td>\n<td>PDF 转换中</td>\n</tr>\n<tr>\n<td><code>ready</code></td>\n<td>预览生成完成，<code>pdfUrl</code> 可用</td>\n</tr>\n<tr>\n<td><code>failed</code></td>\n<td>预览生成失败</td>\n</tr>\n</tbody>\n</table>\n<h4 id=\"552-预览相关字段\"><a href=\"#552-%E9%A2%84%E8%A7%88%E7%9B%B8%E5%85%B3%E5%AD%97%E6%AE%B5\" aria-label=\"552 预览相关字段 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5.5.2 预览相关字段</h4>\n<p><code>previewMode</code></p>\n<table>\n<thead>\n<tr>\n<th>值</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>pdf</code></td>\n<td>优先打开 PDF 预览</td>\n</tr>\n<tr>\n<td><code>download</code></td>\n<td>无 PDF 预览，直接消费原始下载地址</td>\n</tr>\n<tr>\n<td><code>none</code></td>\n<td>当前无可用预览入口</td>\n</tr>\n</tbody>\n</table>\n<p><code>previewUrl</code><strong> 与 </strong><code>pdfUrl</code><strong> 的区别</strong></p>\n<p>这两个字段语义不同，必须区分：</p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>pdfUrl</code></td>\n<td>PDF 专用预览地址；只有文档类文件转码成功后才会有值</td>\n</tr>\n<tr>\n<td><code>previewUrl</code></td>\n<td>前端推荐直接打开的统一地址；前端点击“预览/打开”时优先使用它</td>\n</tr>\n</tbody>\n</table>\n<p>计算规则：</p>\n<ul>\n<li>当 <code>previewMode = \"pdf\"</code>：<code>previewUrl = pdfUrl</code></li>\n<li>当 <code>previewMode = \"download\"</code>：<code>previewUrl = downloadUrl</code></li>\n<li>当 <code>previewMode = \"none\"</code>：<code>previewUrl = null</code></li>\n</ul>\n<p><strong>注意事项：</strong></p>\n<ul>\n<li><code>pdfUrl</code> 是 PDF 能力字段，<code>previewUrl</code> 是前端统一消费字段，语义不同，请勿混淆。</li>\n<li><code>pdfPreviewStatus=ready</code> 且 <code>pdfUrl</code> 非空时 <code>previewMode=pdf</code>；<code>pdfPreviewStatus=none</code> 且 <code>downloadUrl</code> 非空时 <code>previewMode=download</code>；failed/无可消费 URL 时 <code>previewMode=none</code>。</li>\n</ul>\n<h2 id=\"6-积分\"><a href=\"#6-%E7%A7%AF%E5%88%86\" aria-label=\"6 积分 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6 积分</h2>\n<h3 id=\"61-获取积分详情-describepointsoverview\"><a href=\"#61-%E8%8E%B7%E5%8F%96%E7%A7%AF%E5%88%86%E8%AF%A6%E6%83%85-describepointsoverview\" aria-label=\"61 获取积分详情 describepointsoverview permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6.1 获取积分详情 <code>DescribePointsOverview</code></h3>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=DescribePointsOverview</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p>请求体：无。</p>\n<p><strong>响应参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>remainingPoints</code></td>\n<td>float64</td>\n<td>当前用户剩余积分</td>\n</tr>\n<tr>\n<td><code>currentPackage</code></td>\n<td>string</td>\n<td>当前会员身份，普通用户为空字符串；枚举 <code>plan_pro</code>、<code>plan_max</code></td>\n</tr>\n<tr>\n<td><code>packageExpireAt</code></td>\n<td>int</td>\n<td>当前用户会员到期时间（UTC 秒数）；普通用户或已过期用户为 0</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"remainingPoints\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1000.0</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"currentPackage\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"plan_pro\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">4</span>  <span class=\"token property\">\"packageExpireAt\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1780416000</span>\n<span class=\"line-number\">5</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"62-发放每日登录积分-issueloginbonus\"><a href=\"#62-%E5%8F%91%E6%94%BE%E6%AF%8F%E6%97%A5%E7%99%BB%E5%BD%95%E7%A7%AF%E5%88%86-issueloginbonus\" aria-label=\"62 发放每日登录积分 issueloginbonus permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6.2 发放每日登录积分 <code>IssueLoginBonus</code></h3>\n<p>每日发放登录积分，幂等（一天仅发放一次）。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=IssueLoginBonus</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p>请求体：无。</p>\n<p><strong>响应参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>result</code></td>\n<td>bool</td>\n<td>是否发放成功</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"result\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span>\n<span class=\"line-number\">3</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"63-获取积分发放记录-describepointscharge\"><a href=\"#63-%E8%8E%B7%E5%8F%96%E7%A7%AF%E5%88%86%E5%8F%91%E6%94%BE%E8%AE%B0%E5%BD%95-describepointscharge\" aria-label=\"63 获取积分发放记录 describepointscharge permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6.3 获取积分发放记录 <code>DescribePointsCharge</code></h3>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=DescribePointsCharge</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求体参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>startAt</code></td>\n<td>int</td>\n<td>是</td>\n<td>开始日期当天 0 点的 UTC Unix 秒数</td>\n</tr>\n<tr>\n<td><code>endAt</code></td>\n<td>int</td>\n<td>是</td>\n<td>结束日期当天 24 点的 UTC Unix 秒数</td>\n</tr>\n<tr>\n<td><code>page</code></td>\n<td>int</td>\n<td>否</td>\n<td>页码，不传默认 1</td>\n</tr>\n<tr>\n<td><code>limit</code></td>\n<td>int</td>\n<td>否</td>\n<td>每页条数，不传默认 10</td>\n</tr>\n<tr>\n<td><code>changeType</code></td>\n<td>string</td>\n<td>否</td>\n<td>发放类型，不传默认返回全部类型数据</td>\n</tr>\n</tbody>\n</table>\n<p><code>changeType</code><strong> 枚举值</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Go</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-text\"><code><span class=\"line-number\">1</span>const (\n<span class=\"line-number\">2</span>    ChangeTypeOrderPlanPro   string = &quot;order_plan_pro&quot;   // 订阅个人版 Pro\n<span class=\"line-number\">3</span>    ChangeTypeOrderPlanMax   string = &quot;order_plan_max&quot;   // 订阅个人版 Max\n<span class=\"line-number\">4</span>    ChangeTypeOrderPlanPoint string = &quot;order_plan_point&quot; // 订阅积分增量包\n<span class=\"line-number\">5</span>    ChangeTypeOrderPlanTeam  string = &quot;order_plan_team&quot;  // 订阅企业 Team 版\n<span class=\"line-number\">6</span>    ChangeTypeRedeemPlan     string = &quot;redeem_plan&quot;      // 会员兑换，使用会员兑换码进行兑换时使用\n<span class=\"line-number\">7</span>    ChangeTypeFreeGrant      string = &quot;free_grant&quot;       // 免费赠送\n<span class=\"line-number\">8</span>    ChangeTypePointClear     string = &quot;point_clear&quot;      // 积分清零\n<span class=\"line-number\">9</span>    ChangeTypeInviteBonus    string = &quot;invite_bonus&quot;     // 邀请奖励\n<span class=\"line-number\">10</span>    ChangeTypeNewbieTask     string = &quot;newbie_task&quot;      // 新手任务\n<span class=\"line-number\">11</span>)</code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p><strong>响应参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>totalCount</code></td>\n<td>int</td>\n<td>总记录数</td>\n</tr>\n<tr>\n<td><code>list</code></td>\n<td>array</td>\n<td>本页数据（积分流水，见下），每个元素结构见 PointRecord 结构体</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"totalCount\"</span><span class=\"token operator\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"list\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n<span class=\"line-number\">4</span>    <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">5</span>      <span class=\"token property\">\"packageId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{packageId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">6</span>      <span class=\"token property\">\"createdAt\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1780416000</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">7</span>      <span class=\"token property\">\"changeType\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"order_plan_point\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">8</span>      <span class=\"token property\">\"pointsChange\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"1000.00\"</span>\n<span class=\"line-number\">9</span>    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">10</span>    <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">11</span>      <span class=\"token property\">\"packageId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{packageId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">12</span>      <span class=\"token property\">\"createdAt\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1780329600</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">13</span>      <span class=\"token property\">\"changeType\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"order_plan_pro\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">14</span>      <span class=\"token property\">\"pointsChange\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"10000.00\"</span>\n<span class=\"line-number\">15</span>    <span class=\"token punctuation\">}</span>\n<span class=\"line-number\">16</span>  <span class=\"token punctuation\">]</span>\n<span class=\"line-number\">17</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p><strong>积分流水（PointRecord）</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>packageId</code></td>\n<td>string</td>\n<td>资源包 ID</td>\n</tr>\n<tr>\n<td><code>createdAt</code></td>\n<td>int</td>\n<td>发生时间（UTC Unix 秒数）</td>\n</tr>\n<tr>\n<td><code>changeType</code></td>\n<td>string</td>\n<td>计费类型</td>\n</tr>\n<tr>\n<td><code>pointsChange</code></td>\n<td>string</td>\n<td>积分变动值（正/负），保留两位小数</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"64-获取积分消耗记录-describepointsusage\"><a href=\"#64-%E8%8E%B7%E5%8F%96%E7%A7%AF%E5%88%86%E6%B6%88%E8%80%97%E8%AE%B0%E5%BD%95-describepointsusage\" aria-label=\"64 获取积分消耗记录 describepointsusage permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6.4 获取积分消耗记录 <code>DescribePointsUsage</code></h3>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=DescribePointsUsage</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求体参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>startAt</code></td>\n<td>int</td>\n<td>是</td>\n<td>开始日期当天 0 点的 UTC Unix 秒数</td>\n</tr>\n<tr>\n<td><code>endAt</code></td>\n<td>int</td>\n<td>是</td>\n<td>结束日期当天 24 点的 UTC Unix 秒数</td>\n</tr>\n<tr>\n<td><code>page</code></td>\n<td>int</td>\n<td>否</td>\n<td>页码，默认 1</td>\n</tr>\n<tr>\n<td><code>limit</code></td>\n<td>int</td>\n<td>否</td>\n<td>每页条数，默认 10</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"startAt\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1780243200</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"endAt\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1780416000</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">4</span>  <span class=\"token property\">\"page\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">5</span>  <span class=\"token property\">\"limit\"</span><span class=\"token operator\">:</span> <span class=\"token number\">10</span>\n<span class=\"line-number\">6</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p><strong>响应参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>totalCount</code></td>\n<td>int</td>\n<td>总记录数</td>\n</tr>\n<tr>\n<td><code>list</code></td>\n<td>array</td>\n<td>本页数据（积分使用，见下）</td>\n</tr>\n</tbody>\n</table>\n<p><strong>积分使用（PointUsage）</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>conversationId</code></td>\n<td>string</td>\n<td>关联会话 ID</td>\n</tr>\n<tr>\n<td><code>conversationTitle</code></td>\n<td>string</td>\n<td>关联会话名称</td>\n</tr>\n<tr>\n<td><code>createdAt</code></td>\n<td>int</td>\n<td>发生时间（UTC Unix 秒数）</td>\n</tr>\n<tr>\n<td><code>packageId</code></td>\n<td>string</td>\n<td>消耗资源包 ID</td>\n</tr>\n<tr>\n<td><code>pointsChange</code></td>\n<td>string</td>\n<td>积分变动值（正/负），保留两位小数</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"totalCount\"</span><span class=\"token operator\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"list\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n<span class=\"line-number\">4</span>    <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">5</span>      <span class=\"token property\">\"conversationId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{conversationId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">6</span>      <span class=\"token property\">\"conversationTitle\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"我的机器人Chat01\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">7</span>      <span class=\"token property\">\"packageId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{packageId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">8</span>      <span class=\"token property\">\"createdAt\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1780416000</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">9</span>      <span class=\"token property\">\"pointsChange\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"-227.08\"</span>\n<span class=\"line-number\">10</span>    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">11</span>    <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">12</span>      <span class=\"token property\">\"conversationId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{conversationId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">13</span>      <span class=\"token property\">\"conversationTitle\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"我的机器人Chat02\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">14</span>      <span class=\"token property\">\"packageId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{packageId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">15</span>      <span class=\"token property\">\"createdAt\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1780329600</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">16</span>      <span class=\"token property\">\"pointsChange\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"-1330.20\"</span>\n<span class=\"line-number\">17</span>    <span class=\"token punctuation\">}</span>\n<span class=\"line-number\">18</span>  <span class=\"token punctuation\">]</span>\n<span class=\"line-number\">19</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"65-计费与限流说明\"><a href=\"#65-%E8%AE%A1%E8%B4%B9%E4%B8%8E%E9%99%90%E6%B5%81%E8%AF%B4%E6%98%8E\" aria-label=\"65 计费与限流说明 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6.5 计费与限流说明</h3>\n<h4 id=\"651-计费机制\"><a href=\"#651-%E8%AE%A1%E8%B4%B9%E6%9C%BA%E5%88%B6\" aria-label=\"651 计费机制 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6.5.1 计费机制</h4>\n<ul>\n<li>计费主体：搭子对话按消息消耗积分。单条回复的消耗通过 <code>DescribeSessionMessages</code> 消息中的 <code>cost</code> 字段（见 3.10）查看，与 <code>DescribePointsUsage</code> 的 <code>pointsChange</code>（负值）相互印证。</li>\n<li>余额口径：<code>DescribePointsOverview</code>.remainingPoints 为当前可用积分；<code>currentPackage</code> 标识会员身份（plan_pro/plan_max），会员用户按会员权益计费。</li>\n<li>流水对账：<code>DescribePointsCharge</code>（发放）与 <code>DescribePointsUsage</code>（消耗）均为按日期的分页流水（UTC 秒），可据此实现积分账单。</li>\n<li>余额不足：余额不足以支付本次消耗时如何处理（按余额扣至 0 / 拒绝本次请求），以接口实际返回为准；建议接入方在 <code>remainingPoints</code> 低于阈值时提前引导用户充值/订阅。</li>\n</ul>\n<h4 id=\"652-限流与并发\"><a href=\"#652-%E9%99%90%E6%B5%81%E4%B8%8E%E5%B9%B6%E5%8F%91\" aria-label=\"652 限流与并发 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6.5.2 限流与并发</h4>\n<p>接口存在请求频率与并发限制，超限时返回限流错误码（见 10.1，以实际 message 为准）。接入方应在客户端实现退避重试，并向用户提示“请求过于频繁”。</p>\n<h2 id=\"7-skill-管理\"><a href=\"#7-skill-%E7%AE%A1%E7%90%86\" aria-label=\"7 skill 管理 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7 Skill 管理</h2>\n<p>Skill 是搭子可调用的能力单元（如地图查询、百科知识、数据分析等）。</p>\n<h3 id=\"71-初始化-skill-initskills\"><a href=\"#71-%E5%88%9D%E5%A7%8B%E5%8C%96-skill-initskills\" aria-label=\"71 初始化 skill initskills permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7.1 初始化 Skill <code>InitSkills</code></h3>\n<p>初始化/更新用户 Skill 沙箱文件。单个用户多次调用只会触发一次初始化，后续调用会对比用户云上沙箱中的 Skill 版本做自动更新（用户无感）。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=InitSkills</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p>请求体：无。</p>\n<p><strong>请求示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token function\">curl</span> -X POST <span class=\"token string\">'https://www.dumate.cn/openapi?Action=InitSkills'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">2</span>  -H <span class=\"token string\">'Authorization: Bearer {apiKey}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">3</span>  -H <span class=\"token string\">'X-Dumate-Token: {dumateToken}'</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p><strong>响应参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>success</code></td>\n<td>bool</td>\n<td>是否初始化成功</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"requestId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{requestId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"success\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">true</span>\n<span class=\"line-number\">4</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"72-获取用户-skill-列表-describeskills\"><a href=\"#72-%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7-skill-%E5%88%97%E8%A1%A8-describeskills\" aria-label=\"72 获取用户 skill 列表 describeskills permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7.2 获取用户 Skill 列表 <code>DescribeSkills</code></h3>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=DescribeSkills</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求体参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>nameFilter</code></td>\n<td>string</td>\n<td>否</td>\n<td>按名称过滤</td>\n</tr>\n<tr>\n<td><code>enable</code></td>\n<td>string</td>\n<td>否</td>\n<td>启用状态过滤</td>\n</tr>\n<tr>\n<td><code>sortBy</code></td>\n<td>string</td>\n<td>否</td>\n<td>排序字段，默认 name</td>\n</tr>\n<tr>\n<td><code>appVersion</code></td>\n<td>string</td>\n<td>否</td>\n<td>应用版本，默认空字符串</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token function\">curl</span> -X POST <span class=\"token string\">'https://www.dumate.cn/openapi?Action=DescribeSkills'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">2</span>  -H <span class=\"token string\">'Authorization: Bearer {apiKey}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">3</span>  -H <span class=\"token string\">'X-Dumate-Token: {dumateToken}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">4</span>  -H <span class=\"token string\">'Content-Type: application/json'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">5</span>  --data <span class=\"token string\">'{\"nameFilter\": \"demo\"}'</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p><strong>响应参数</strong>：<code>skillList</code> —— Skill 元素数组。</p>\n<p><strong>Skill 元素字段</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>name</code></td>\n<td>string</td>\n<td>Skill 唯一标识（code）</td>\n</tr>\n<tr>\n<td><code>description</code></td>\n<td>string</td>\n<td>Skill 描述（英文）</td>\n</tr>\n<tr>\n<td><code>scope</code></td>\n<td>string</td>\n<td>作用域：project（用户级）/ global（全局）</td>\n</tr>\n<tr>\n<td><code>source</code></td>\n<td>string</td>\n<td>来源：official（官方）/ user（用户自定义）</td>\n</tr>\n<tr>\n<td><code>version</code></td>\n<td>string</td>\n<td>当前安装版本（云端广场版本）</td>\n</tr>\n<tr>\n<td><code>labels</code></td>\n<td>array</td>\n<td>标签列表（见 Label）</td>\n</tr>\n<tr>\n<td><code>authorInfo</code></td>\n<td>object</td>\n<td>作者信息（见 AuthorInfo）</td>\n</tr>\n<tr>\n<td><code>displayName</code></td>\n<td>string</td>\n<td>Skill 中文显示名称</td>\n</tr>\n<tr>\n<td><code>icon</code></td>\n<td>string</td>\n<td>Skill 图标 URL（可选）</td>\n</tr>\n<tr>\n<td><code>remark</code></td>\n<td>string</td>\n<td>Skill 中文描述</td>\n</tr>\n</tbody>\n</table>\n<p><strong>Label</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>labelCode</code></td>\n<td>string</td>\n<td>标签代码</td>\n</tr>\n<tr>\n<td><code>labelName</code></td>\n<td>string</td>\n<td>标签名称</td>\n</tr>\n<tr>\n<td><code>labelIcon</code></td>\n<td>string</td>\n<td>标签图标（可选）</td>\n</tr>\n</tbody>\n</table>\n<p><strong>AuthorInfo</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>authorId</code></td>\n<td>string</td>\n<td>作者 ID（可选）</td>\n</tr>\n<tr>\n<td><code>authorName</code></td>\n<td>string</td>\n<td>作者名称（可选）</td>\n</tr>\n<tr>\n<td><code>authorAvatar</code></td>\n<td>string</td>\n<td>作者头像（可选）</td>\n</tr>\n<tr>\n<td><code>fromThirdParty</code></td>\n<td>string</td>\n<td>第三方来源平台标识（可选）</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"requestId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{requestId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"skillList\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n<span class=\"line-number\">4</span>    <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">5</span>      <span class=\"token property\">\"authorInfo\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">6</span>        <span class=\"token property\">\"authorName\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"百度千帆官方\"</span>\n<span class=\"line-number\">7</span>      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">8</span>      <span class=\"token property\">\"description\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"The Baidu Baike Component is a knowledge service tool designed to query authoritative encyclopedia explanations for various nouns. Its core function is given a specific \\\"noun\\\" (object, person, location, concept, event, etc.) provided by the user, it returns a standardized, detailed entry explanation sourced from Baidu Baike.\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">9</span>      <span class=\"token property\">\"displayName\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"百度百科\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">10</span>      <span class=\"token property\">\"icon\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://{cdn-host}/icons/{iconId}.png\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">11</span>      <span class=\"token property\">\"labels\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n<span class=\"line-number\">12</span>        <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">13</span>          <span class=\"token property\">\"labelCode\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"dumate_skill_official\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">14</span>          <span class=\"token property\">\"labelName\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"官方\"</span>\n<span class=\"line-number\">15</span>        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">16</span>        <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">17</span>          <span class=\"token property\">\"labelCode\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"dumate_skill_noauth\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">18</span>          <span class=\"token property\">\"labelName\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"免鉴权\"</span>\n<span class=\"line-number\">19</span>        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">20</span>        <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">21</span>          <span class=\"token property\">\"labelCode\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"tool_square_industry_service\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">22</span>          <span class=\"token property\">\"labelIcon\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://{cdn-host}/icons/{iconId}.svg\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">23</span>          <span class=\"token property\">\"labelName\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"行业服务\"</span>\n<span class=\"line-number\">24</span>        <span class=\"token punctuation\">}</span>\n<span class=\"line-number\">25</span>      <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">26</span>      <span class=\"token property\">\"name\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"baidu-baike-data\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">27</span>      <span class=\"token property\">\"remark\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"百度百科组件是一个知识服务工具，用于查询各类名词的权威百科解释。其核心功能是：给定用户提供的特定名词（事物、人物、地点、概念、事件等），从百度百科返回标准化、详细的词条说明。\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">28</span>      <span class=\"token property\">\"scope\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"global\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">29</span>      <span class=\"token property\">\"source\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"official\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">30</span>      <span class=\"token property\">\"version\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"1.1.3\"</span>\n<span class=\"line-number\">31</span>    <span class=\"token punctuation\">}</span>\n<span class=\"line-number\">32</span>  <span class=\"token punctuation\">]</span>\n<span class=\"line-number\">33</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h3 id=\"73-获取用户-skill-详情-describeskill\"><a href=\"#73-%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7-skill-%E8%AF%A6%E6%83%85-describeskill\" aria-label=\"73 获取用户 skill 详情 describeskill permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7.3 获取用户 Skill 详情 <code>DescribeSkill</code></h3>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=DescribeSkill</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>name</code></td>\n<td>string</td>\n<td>是</td>\n<td>Skill 名称</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Bash</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-bash\"><code><span class=\"line-number\">1</span><span class=\"token function\">curl</span> -X POST <span class=\"token string\">'https://www.dumate.cn/openapi?Action=DescribeSkill'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">2</span>  -H <span class=\"token string\">'Authorization: Bearer {apiKey}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">3</span>  -H <span class=\"token string\">'X-Dumate-Token: {dumateToken}'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">4</span>  -H <span class=\"token string\">'Content-Type: application/json'</span> <span class=\"token punctuation\">\\</span>\n<span class=\"line-number\">5</span>  --data <span class=\"token string\">'{\"name\":\"baidu-ai-map\"}'</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<p><strong>响应参数</strong></p>\n<p><code>result</code> 数据结构（UserSkillDetailResponse）：内嵌 SkillUserItem 全部字段，并附加 <code>files</code>、<code>updatedAt</code>。</p>\n<table>\n<thead>\n<tr>\n<th>字段名</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>name</code></td>\n<td>string</td>\n<td>Skill 唯一标识（code）</td>\n</tr>\n<tr>\n<td><code>description</code></td>\n<td>string</td>\n<td>Skill 描述（英文）</td>\n</tr>\n<tr>\n<td><code>scope</code></td>\n<td>string</td>\n<td>作用域：project（用户级）/ global（全局）</td>\n</tr>\n<tr>\n<td><code>source</code></td>\n<td>string</td>\n<td>来源：official（官方）/ user（用户自定义）</td>\n</tr>\n<tr>\n<td><code>version</code></td>\n<td>string</td>\n<td>当前安装版本（云端广场版本）</td>\n</tr>\n<tr>\n<td><code>labels</code></td>\n<td>array</td>\n<td>标签列表，结构见 Label（可选）</td>\n</tr>\n<tr>\n<td><code>authorInfo</code></td>\n<td>object</td>\n<td>作者信息，结构见 AuthorInfo（可选）</td>\n</tr>\n<tr>\n<td><code>displayName</code></td>\n<td>string</td>\n<td>Skill 中文显示名称</td>\n</tr>\n<tr>\n<td><code>icon</code></td>\n<td>string</td>\n<td>Skill 图标 URL（可选）</td>\n</tr>\n<tr>\n<td><code>remark</code></td>\n<td>string</td>\n<td>Skill 中文描述</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"requestId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{requestId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"authorInfo\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">4</span>    <span class=\"token property\">\"authorName\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"百度地图\"</span>\n<span class=\"line-number\">5</span>  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">6</span>  <span class=\"token property\">\"description\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"百度地图 API 调用工具，用于获取结构化地图数据。支持：地点检索（POI搜索）、路线规划（驾车/步行/骑行/公交）、地理编码（地址转坐标）、逆地理编码（坐标转地址）。需要 BAIDU_MAP_AUTH_TOKEN 环境变量。\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">7</span>  <span class=\"token property\">\"displayName\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"百度地图\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">8</span>  <span class=\"token property\">\"icon\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://{cdn-host}/icons/{iconId}.svg\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">9</span>  <span class=\"token property\">\"labels\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n<span class=\"line-number\">10</span>    <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">11</span>      <span class=\"token property\">\"labelCode\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"dumate_skill_official\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">12</span>      <span class=\"token property\">\"labelName\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"官方\"</span>\n<span class=\"line-number\">13</span>    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">14</span>    <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">15</span>      <span class=\"token property\">\"labelCode\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"tool_square_industry_service\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">16</span>      <span class=\"token property\">\"labelIcon\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://{cdn-host}/icons/{iconId}.svg\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">17</span>      <span class=\"token property\">\"labelName\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"行业服务\"</span>\n<span class=\"line-number\">18</span>    <span class=\"token punctuation\">}</span>\n<span class=\"line-number\">19</span>  <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">20</span>  <span class=\"token property\">\"name\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"baidu-ai-map\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">21</span>  <span class=\"token property\">\"remark\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"百度地图 API 调用工具，用于获取结构化地图数据。支持：地点检索（POI搜索）、路线规划（驾车/步行/骑行/公交）、地理编码（地址转坐标）、逆地理编码（坐标转地址）。需要 BAIDU_MAP_AUTH_TOKEN 环境变量。适用场景：需要精确坐标、结构化路线数据、地址解析等 API 级能力。不适用：一般性路线查询、地点介绍、旅游攻略等搜索类需求。\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">22</span>  <span class=\"token property\">\"scope\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"global\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">23</span>  <span class=\"token property\">\"source\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"official\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">24</span>  <span class=\"token property\">\"version\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"\"</span>\n<span class=\"line-number\">25</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h2 id=\"8-定时任务\"><a href=\"#8-%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1\" aria-label=\"8 定时任务 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8 定时任务</h2>\n<h3 id=\"81-任务列表-describesessionjobs\"><a href=\"#81-%E4%BB%BB%E5%8A%A1%E5%88%97%E8%A1%A8-describesessionjobs\" aria-label=\"81 任务列表 describesessionjobs permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8.1 任务列表 <code>DescribeSessionJobs</code></h3>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=DescribeSessionJobs</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求体参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>workspaceId</code></td>\n<td>string</td>\n<td>否</td>\n<td>按工作区过滤</td>\n</tr>\n<tr>\n<td><code>sort</code></td>\n<td>string</td>\n<td>否</td>\n<td><code>latestTriggeredAtDesc</code>（按最近触发倒序）；默认 <code>created_at DESC</code></td>\n</tr>\n<tr>\n<td><code>page</code></td>\n<td>int</td>\n<td>否</td>\n<td>页码，1-based，默认 1</td>\n</tr>\n<tr>\n<td><code>size</code></td>\n<td>int</td>\n<td>否</td>\n<td>每页条数，默认 20，上限 100</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应参数</strong>：<code>result</code> —— Job 数组（注：返回的是数组而不是 <code>{items, totalCount}</code> 包裹层；满 size 视为可能还有下一页）。</p>\n<p><strong>Job 字段</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>string</td>\n<td>任务 ID（<code>job_</code> 前缀）</td>\n</tr>\n<tr>\n<td><code>workspaceId</code></td>\n<td>string</td>\n<td>所属工作区 ID</td>\n</tr>\n<tr>\n<td><code>name</code></td>\n<td>string</td>\n<td>任务名称</td>\n</tr>\n<tr>\n<td><code>enabled</code></td>\n<td>boolean</td>\n<td>是否启用</td>\n</tr>\n<tr>\n<td><code>cronExpr</code></td>\n<td>string</td>\n<td>调度表达式（5 段格式：分 时 日 月 周）</td>\n</tr>\n<tr>\n<td><code>timezone</code></td>\n<td>string</td>\n<td>时区</td>\n</tr>\n<tr>\n<td><code>executor.message</code></td>\n<td>string</td>\n<td>任务执行的指令消息</td>\n</tr>\n<tr>\n<td><code>executor.model</code></td>\n<td>string</td>\n<td>任务执行模型（实际以服务端返回为准）</td>\n</tr>\n<tr>\n<td><code>concurrency</code></td>\n<td>string</td>\n<td>并发策略：forbid / allow</td>\n</tr>\n<tr>\n<td><code>retry.maxRetries</code></td>\n<td>int</td>\n<td>最大重试次数</td>\n</tr>\n<tr>\n<td><code>retry.maxDelayMs</code></td>\n<td>int</td>\n<td>最大重试延迟（ms）</td>\n</tr>\n<tr>\n<td><code>timeoutSecs</code></td>\n<td>int</td>\n<td>超时时间（秒）</td>\n</tr>\n<tr>\n<td><code>createdAt</code> / <code>updatedAt</code></td>\n<td>int</td>\n<td>创建 / 更新时间戳（ms）</td>\n</tr>\n<tr>\n<td><code>version</code></td>\n<td>int</td>\n<td>版本号</td>\n</tr>\n<tr>\n<td><code>accountId</code></td>\n<td>string</td>\n<td>所属账号</td>\n</tr>\n<tr>\n<td><code>agent</code></td>\n<td>string</td>\n<td>执行 Agent 名称</td>\n</tr>\n<tr>\n<td><code>bindDeviceId</code></td>\n<td>string</td>\n<td>绑定设备 ID（本地调度模式）</td>\n</tr>\n<tr>\n<td><code>deviceName</code></td>\n<td>string</td>\n<td>设备名称（本地调度模式）</td>\n</tr>\n<tr>\n<td><code>schedulerMode</code></td>\n<td>string</td>\n<td>调度模式：cloud / local</td>\n</tr>\n<tr>\n<td><code>taskType</code></td>\n<td>string</td>\n<td>任务类型</td>\n</tr>\n<tr>\n<td><code>createdVia</code></td>\n<td>string</td>\n<td>创建方式：manual 等</td>\n</tr>\n<tr>\n<td><code>source</code></td>\n<td>string</td>\n<td>来源：desktop / cloud 等</td>\n</tr>\n<tr>\n<td><code>syncStatus</code></td>\n<td>string</td>\n<td>同步状态</td>\n</tr>\n<tr>\n<td><code>runStartTimeMs</code></td>\n<td>int</td>\n<td>最近开始运行时间（ms）</td>\n</tr>\n<tr>\n<td><code>template</code></td>\n<td>int</td>\n<td>是否为预置模板任务：1 模板任务 / 0 普通任务</td>\n</tr>\n<tr>\n<td><code>state.nextRunAtMs</code></td>\n<td>int</td>\n<td>下次运行时间（ms）</td>\n</tr>\n<tr>\n<td><code>state.lastRunAtMs</code></td>\n<td>int</td>\n<td>上次运行时间（ms）</td>\n</tr>\n<tr>\n<td><code>state.lastStatus</code></td>\n<td>string</td>\n<td>上次运行状态</td>\n</tr>\n<tr>\n<td><code>state.consecutiveErrors</code></td>\n<td>int</td>\n<td>连续错误次数</td>\n</tr>\n<tr>\n<td><code>state.retryAfterMs</code></td>\n<td>int</td>\n<td>重试等待时间（ms）</td>\n</tr>\n<tr>\n<td><code>state.readStatus</code></td>\n<td>string</td>\n<td>阅读状态</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"result\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n<span class=\"line-number\">3</span>    <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">4</span>      <span class=\"token property\">\"id\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"job_{jobId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">5</span>      <span class=\"token property\">\"workspaceId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"ws_{workspaceId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">6</span>      <span class=\"token property\">\"name\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"每日记忆总结\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">7</span>      <span class=\"token property\">\"enabled\"</span><span class=\"token operator\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">8</span>      <span class=\"token property\">\"cronExpr\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"0 9 * * *\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">9</span>      <span class=\"token property\">\"timezone\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"Local\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">10</span>      <span class=\"token property\">\"executor\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token property\">\"message\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"总结记忆文件，生成结构化的每日总结报告\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">11</span>      <span class=\"token property\">\"concurrency\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"forbid\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">12</span>      <span class=\"token property\">\"retry\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token property\">\"maxRetries\"</span><span class=\"token operator\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"maxDelayMs\"</span><span class=\"token operator\">:</span> <span class=\"token number\">3600000</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">13</span>      <span class=\"token property\">\"timeoutSecs\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1800</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">14</span>      <span class=\"token property\">\"createdAt\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1784272894199</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">15</span>      <span class=\"token property\">\"updatedAt\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1784272894199</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">16</span>      <span class=\"token property\">\"version\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">17</span>      <span class=\"token property\">\"accountId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{accountId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">18</span>      <span class=\"token property\">\"agent\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"daily-summary\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">19</span>      <span class=\"token property\">\"schedulerMode\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"local\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">20</span>      <span class=\"token property\">\"source\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"desktop\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">21</span>      <span class=\"token property\">\"taskType\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"unknown\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">22</span>      <span class=\"token property\">\"createdVia\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"manual\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">23</span>      <span class=\"token property\">\"syncStatus\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"ok\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">24</span>      <span class=\"token property\">\"template\"</span><span class=\"token operator\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">25</span>      <span class=\"token property\">\"state\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token property\">\"nextRunAtMs\"</span><span class=\"token operator\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"lastRunAtMs\"</span><span class=\"token operator\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"lastStatus\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"consecutiveErrors\"</span><span class=\"token operator\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"retryAfterMs\"</span><span class=\"token operator\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"readStatus\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"read\"</span><span class=\"token punctuation\">}</span>\n<span class=\"line-number\">26</span>    <span class=\"token punctuation\">}</span>\n<span class=\"line-number\">27</span>  <span class=\"token punctuation\">]</span>\n<span class=\"line-number\">28</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h2 id=\"9-个性化配置\"><a href=\"#9-%E4%B8%AA%E6%80%A7%E5%8C%96%E9%85%8D%E7%BD%AE\" aria-label=\"9 个性化配置 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9 个性化配置</h2>\n<h3 id=\"91-首页定制-describehomepageconfig\"><a href=\"#91-%E9%A6%96%E9%A1%B5%E5%AE%9A%E5%88%B6-describehomepageconfig\" aria-label=\"91 首页定制 describehomepageconfig permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9.1 首页定制 <code>DescribeHomepageConfig</code></h3>\n<p>下发定制 Logo、slogan 等首页配置，用于渠道/应用首页品牌化展示。</p>\n<table>\n<thead>\n<tr>\n<th>项目</th>\n<th>内容</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>请求方式</td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td>请求路径</td>\n<td><code>/openapi?Action=DescribeHomepageConfig</code></td>\n</tr>\n<tr>\n<td>是否鉴权</td>\n<td>是</td>\n</tr>\n</tbody>\n</table>\n<p><strong>请求体参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>类型</th>\n<th>必填</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>version</code></td>\n<td>string</td>\n<td>是</td>\n<td>客户端版本号</td>\n</tr>\n<tr>\n<td><code>clientType</code></td>\n<td>string</td>\n<td>否</td>\n<td>desktop / mobile，默认 desktop</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应参数</strong></p>\n<table>\n<thead>\n<tr>\n<th>字段</th>\n<th>类型</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>query</code></td>\n<td>String</td>\n<td>首页预置 query 文案</td>\n</tr>\n<tr>\n<td><code>logo</code></td>\n<td>Object</td>\n<td>首页 Logo 配置（静态/动画图、slogan、尺寸）</td>\n</tr>\n<tr>\n<td><code>prompt</code></td>\n<td>String</td>\n<td>首页引导文案</td>\n</tr>\n<tr>\n<td><code>startTime</code></td>\n<td>String</td>\n<td>配置生效时间</td>\n</tr>\n<tr>\n<td><code>expirationTime</code></td>\n<td>String</td>\n<td>配置过期时间</td>\n</tr>\n<tr>\n<td><code>ext</code></td>\n<td>Object</td>\n<td>扩展配置</td>\n</tr>\n</tbody>\n</table>\n<p><strong>响应示例</strong></p>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">JSON</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-json\"><code><span class=\"line-number\">1</span><span class=\"token punctuation\">{</span>\n<span class=\"line-number\">2</span>  <span class=\"token property\">\"expirationTime\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"2026-07-26T18:00:00+08:00\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">3</span>  <span class=\"token property\">\"ext\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token property\">\"skill\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">4</span>  <span class=\"token property\">\"logo\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n<span class=\"line-number\">5</span>    <span class=\"token property\">\"width\"</span><span class=\"token operator\">:</span> <span class=\"token number\">228</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">6</span>    <span class=\"token property\">\"height\"</span><span class=\"token operator\">:</span> <span class=\"token number\">74</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">7</span>    <span class=\"token property\">\"icon\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://{cdn-host}/homepage_config/{customId}/icon.png?md5hash={md5}&amp;timestamp={ts}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">8</span>    <span class=\"token property\">\"slogan\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{定制slogan占位}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">9</span>    <span class=\"token property\">\"primary\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token property\">\"duration\"</span><span class=\"token operator\">:</span> <span class=\"token number\">3.276</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"hold\"</span><span class=\"token operator\">:</span> <span class=\"token number\">10</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"image\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://{cdn-host}/homepage_config/1.0.44/active.png?md5hash={md5}&amp;timestamp={ts}\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">10</span>    <span class=\"token property\">\"hover\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token property\">\"duration\"</span><span class=\"token operator\">:</span> <span class=\"token number\">0.1</span><span class=\"token punctuation\">,</span> <span class=\"token property\">\"image\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"https://{cdn-host}/homepage_config/1.0.44/hover.png?md5hash={md5}&amp;timestamp={ts}\"</span><span class=\"token punctuation\">}</span>\n<span class=\"line-number\">11</span>  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">12</span>  <span class=\"token property\">\"prompt\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"首页引导文案\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">13</span>  <span class=\"token property\">\"query\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"[\\\"欢迎使用搭子\\\"]\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">14</span>  <span class=\"token property\">\"requestId\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"{requestId}\"</span><span class=\"token punctuation\">,</span>\n<span class=\"line-number\">15</span>  <span class=\"token property\">\"startTime\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"2026-07-01T17:45:00+08:00\"</span>\n<span class=\"line-number\">16</span><span class=\"token punctuation\">}</span></code></pre>\n            </div>\n        </div>\n    </div>\n  \n<h2 id=\"10-返回码与错误处理\"><a href=\"#10-%E8%BF%94%E5%9B%9E%E7%A0%81%E4%B8%8E%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86\" aria-label=\"10 返回码与错误处理 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>10 返回码与错误处理</h2>\n<h3 id=\"101-错误码\"><a href=\"#101-%E9%94%99%E8%AF%AF%E7%A0%81\" aria-label=\"101 错误码 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>10.1 错误码</h3>\n<p>接口异常时（HTTP 状态码仍为 200）统一返回 <code>code</code> + <code>message</code> 字段：</p>\n<table>\n<thead>\n<tr>\n<th>code</th>\n<th>示例 message</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>401</td>\n<td>PermissionDenied</td>\n<td>鉴权失败：API Key 或 Token 无效 / 过期</td>\n</tr>\n<tr>\n<td>400</td>\n<td>参数错误:FieldName</td>\n<td>请求参数错误，message 指明出错字段</td>\n</tr>\n<tr>\n<td>400</td>\n<td>业务异常信息</td>\n<td>业务规则校验失败，以 message 描述</td>\n</tr>\n</tbody>\n</table>\n<p>通用处理建议：</p>\n<ul>\n<li>所有接口先校验 <code>requestId</code> 是否返回；异常时读取 <code>code</code> / <code>message</code> 定位问题。</li>\n<li>收到 401：检查沙盒/线上环境是否匹配、API Key 与 Token 是否有效，必要时刷新 Token 后重试。</li>\n<li>收到 400：按 message 提示修正参数（必填缺失、格式错误、枚举越界等）。</li>\n</ul>\n<h3 id=\"102-注意事项与-faq\"><a href=\"#102-%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9%E4%B8%8E-faq\" aria-label=\"102 注意事项与 faq permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>10.2 注意事项与 FAQ</h3>\n<table>\n<thead>\n<tr>\n<th>主题</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Token 过期时间</td>\n<td><code>DescribeToken</code> 返回的 <code>expired_at</code> 为 UTC 格式，需转换为本地时间判断，提前刷新</td>\n</tr>\n<tr>\n<td>Token 过期处理</td>\n<td>收到 401 后按 2.1 标准流程刷新 Token 并重试一次</td>\n</tr>\n<tr>\n<td>API Key 安全</td>\n<td>Key 仅控制台展示一次，妥善保管勿入仓库；泄露后在控制台吊销重建</td>\n</tr>\n<tr>\n<td>环境区分</td>\n<td>沙盒与线上使用不同的 API Key（且 Token 与 Key 环境强绑定），请勿混用；切换按 1.7 清单</td>\n</tr>\n<tr>\n<td>接入前置条件</td>\n<td>未申请 API Key 前无法调用任何接口，见 1.2 申请步骤</td>\n</tr>\n<tr>\n<td>Query 参数</td>\n<td>标注“Query 参数”的接口（如会话详情、文件详情、推荐问、预上传文件地址）需将参数拼接在 URL 上，且 path 类参数需 URL 编码</td>\n</tr>\n<tr>\n<td>分屏规则</td>\n<td>推荐问接口不分页返回，客户端按每 4 条切分一屏</td>\n</tr>\n<tr>\n<td>文件大小</td>\n<td><code>CreatePreSessionFile</code> 单个文件不超过 10MB</td>\n</tr>\n<tr>\n<td>文件生命周期</td>\n<td>上传文件保留时长由服务端策略决定，生产环境请勿长期依赖缓存文件</td>\n</tr>\n<tr>\n<td>文件预览</td>\n<td><code>previewUrl</code> 是前端统一消费字段（点击打开优先用它）；<code>pdfUrl</code> 仅为 PDF 能力字段；两者语义不同</td>\n</tr>\n<tr>\n<td>权限回复对账</td>\n<td><code>POST /permission/:requestID/reply</code> 返回 200 true 只代表调用成功；需重新 <code>GET /permission</code> 确认 pending 已清除</td>\n</tr>\n<tr>\n<td>SSE 粘性路由</td>\n<td>同一账号的 <code>/event</code>、权限查询与回复请求需路由到同一服务实例（通常由网关按账号粘性处理）</td>\n</tr>\n<tr>\n<td>SSE 断线处理</td>\n<td>按 3.3.3 自动重连，重连后用权限/消息/任务三连对账补齐状态</td>\n</tr>\n<tr>\n<td>消息完成判定</td>\n<td>以 SSE“会话空闲”类事件为准，兜底轮询 <code>DescribeSessionStatus</code>（见 3.3.3 / 1.6 Step 4）</td>\n</tr>\n<tr>\n<td>消息 limit</td>\n<td>历史消息接口不支持 offset 分页，limit 仅为数量截断</td>\n</tr>\n<tr>\n<td>定时任务返回结构</td>\n<td><code>DescribeSessionJobs</code> 返回裸 Job 数组（非分页包裹层），满 size 视为可能还有下一页</td>\n</tr>\n</tbody>\n</table>","fields":{"slug":"ymu8cfo0x","title":"标准化OpenAPI接入指南","date":"2026-09-19","extractedHeadings":[]},"headings":[{"value":"1 快速开始","depth":2},{"value":"1.1 接入总览","depth":3},{"value":"1.2 API Key 申请步骤","depth":3},{"value":"1.3 环境与地址","depth":3},{"value":"1.4 请求方式与鉴权","depth":3},{"value":"1.5 第一个请求示例（获取 Token）","depth":3},{"value":"1.6 端到端最小示例","depth":3},{"value":"1.7 沙盒迁移线上切换清单","depth":3},{"value":"2 鉴权","depth":2},{"value":"2.1 获取访问凭证 DescribeToken","depth":3},{"value":"2.2 请求 Header","depth":3},{"value":"2.3 响应结构","depth":3},{"value":"3 会话与消息","depth":2},{"value":"3.1 创建会话 POST /session","depth":3},{"value":"3.2 发送消息 POST /session/:sessionID/prompt_async","depth":3},{"value":"3.3 接收消息 GET /event","depth":3},{"value":"3.3.1 事件流协议","depth":4},{"value":"3.3.2 连接建立时机","depth":4},{"value":"3.3.3 断线重连与对账","depth":4},{"value":"3.4 停止消息 POST /session/:sessionID/abort","depth":3},{"value":"3.5 查询任务进度 GET /session/:sessionID/todo","depth":3},{"value":"3.6 会话对象数据结构","depth":3},{"value":"3.7 历史会话列表 DescribeSessions","depth":3},{"value":"3.8 历史会话详情 DescribeSession","depth":3},{"value":"3.9 查询会话状态 DescribeSessionStatus","depth":3},{"value":"3.10 历史会话消息 DescribeSessionMessages","depth":3},{"value":"3.11 首页推荐问 DescribeRecommendQueries","depth":3},{"value":"4 对话交互","depth":2},{"value":"4.1 澄清问答 DescribeConversationQuestions","depth":3},{"value":"4.2 回复澄清问题 ReplyConversationQuestion","depth":3},{"value":"4.3 权限申请 DescribeConversationPermissions","depth":3},{"value":"4.4 回复权限申请 ReplyConversationPermission","depth":3},{"value":"4.5 查询待处理权限（实时通道） GET /permission","depth":3},{"value":"4.6 回复权限请求（实时通道） POST /permission/:requestID/reply","depth":3},{"value":"5 文件","depth":2},{"value":"5.1 上传文件 CreatePreSessionFile","depth":3},{"value":"5.2 获取预上传文件访问地址 DescribePreSessionFile","depth":3},{"value":"5.3 单个历史会话的文件产出物 DescribeSessionFiles","depth":3},{"value":"5.4 单个文件详情 DescribeSessionFile","depth":3},{"value":"5.5 文件预览与下载 FilePreviewView","depth":3},{"value":"5.5.1 文件状态字段","depth":4},{"value":"5.5.2 预览相关字段","depth":4},{"value":"6 积分","depth":2},{"value":"6.1 获取积分详情 DescribePointsOverview","depth":3},{"value":"6.2 发放每日登录积分 IssueLoginBonus","depth":3},{"value":"6.3 获取积分发放记录 DescribePointsCharge","depth":3},{"value":"6.4 获取积分消耗记录 DescribePointsUsage","depth":3},{"value":"6.5 计费与限流说明","depth":3},{"value":"6.5.1 计费机制","depth":4},{"value":"6.5.2 限流与并发","depth":4},{"value":"7 Skill 管理","depth":2},{"value":"7.1 初始化 Skill InitSkills","depth":3},{"value":"7.2 获取用户 Skill 列表 DescribeSkills","depth":3},{"value":"7.3 获取用户 Skill 详情 DescribeSkill","depth":3},{"value":"8 定时任务","depth":2},{"value":"8.1 任务列表 DescribeSessionJobs","depth":3},{"value":"9 个性化配置","depth":2},{"value":"9.1 首页定制 DescribeHomepageConfig","depth":3},{"value":"10 返回码与错误处理","depth":2},{"value":"10.1 错误码","depth":3},{"value":"10.2 注意事项与 FAQ","depth":3}]}},"pageContext":{"isCreatedByStatefulCreatePages":false,"slug":"ymu8cfo0x","prev":{"id":"7mtva9upo","name":"开发标准","path":"7mtva9upo","filePath":"生态开放平台指南/开发标准/技能（Skill）.md","seo":null,"parentIds":["Vmtv7qrok","xmtv8240h"],"parents":[{"id":"Vmtv7qrok","documentId":"ad2eb084-081e-48e6-b522-48f91f6a55a7","name":"生态开放平台指南","repoName":"Dumate","filePath":"生态开放平台指南","disabled":false,"path":"Vmtv7qrok","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":"","solutionTag":null,"solutionColor":null},{"id":"xmtv8240h","documentId":"6403c234-207c-4089-b0a6-7a42623373d6","name":"开发标准","repoName":"Dumate","filePath":"生态开放平台指南/开发标准","disabled":false,"path":"xmtv8240h","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":"","solutionTag":null,"solutionColor":null}]},"next":{"id":"nmnevrk0l","name":"产品计费","path":"nmnevrk0l","filePath":"产品计费/个人版计费/计费说明.md","seo":null,"parentIds":["lmneuwg9f","Fmqous5za"],"parents":[{"id":"lmneuwg9f","documentId":"48b10f00-6cfd-414b-a78a-bacc0c5a4c36","name":"产品计费","repoName":"Dumate","filePath":"产品计费","disabled":false,"path":"lmneuwg9f","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":"","solutionTag":null,"solutionColor":null},{"id":"Fmqous5za","documentId":"91ddb46d-5946-4961-85be-1b24cc5e9771","name":"个人版计费","repoName":"Dumate","filePath":"产品计费/个人版计费","disabled":false,"path":"Fmqous5za","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":"","solutionTag":null,"solutionColor":null}]},"parents":[{"id":"Vmtv7qrok","documentId":"ad2eb084-081e-48e6-b522-48f91f6a55a7","name":"生态开放平台指南","repoName":"Dumate","filePath":"生态开放平台指南","disabled":false,"path":"Vmtv7qrok","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":"","solutionTag":null,"solutionColor":null}],"specificSeo":null}}}