summaryrefslogtreecommitdiff
path: root/data/zh_cn/wuyingai/2026-03-11/api-docs.php
diff options
context:
space:
mode:
authorZhineng Li <im@zhineng.li>2026-07-12 17:11:17 +0800
committerZhineng Li <im@zhineng.li>2026-07-12 17:11:17 +0800
commit1c7f908ce09f98fdcbf79ed2a8ae21be60eaa634 (patch)
tree5f0857666365b7e40cdaa3733ebe1f3ba9e13c67 /data/zh_cn/wuyingai/2026-03-11/api-docs.php
parent7347bac4ab7e136157fc94777e6cf87ef9e08599 (diff)
downloadafterglow-metadata-full-1c7f908ce09f98fdcbf79ed2a8ae21be60eaa634.tar.gz
afterglow-metadata-full-1c7f908ce09f98fdcbf79ed2a8ae21be60eaa634.zip
update APIs 20260712
Diffstat (limited to 'data/zh_cn/wuyingai/2026-03-11/api-docs.php')
-rw-r--r--data/zh_cn/wuyingai/2026-03-11/api-docs.php520
1 files changed, 520 insertions, 0 deletions
diff --git a/data/zh_cn/wuyingai/2026-03-11/api-docs.php b/data/zh_cn/wuyingai/2026-03-11/api-docs.php
new file mode 100644
index 0000000..055522d
--- /dev/null
+++ b/data/zh_cn/wuyingai/2026-03-11/api-docs.php
@@ -0,0 +1,520 @@
+<?php return [
+ 'version' => '1.0',
+ 'info' => ['style' => 'RPC', 'product' => 'WuyingAI', 'version' => '2026-03-11'],
+ 'directories' => [
+ [
+ 'children' => ['GetAccessToken', 'Chat'],
+ 'type' => 'directory',
+ 'title' => '会话交互',
+ 'id' => 452273,
+ ],
+ ],
+ 'components' => [
+ 'schemas' => [],
+ ],
+ 'apis' => [
+ 'Chat' => [
+ 'path' => '/api/agent/chat',
+ 'methods' => ['post', 'get'],
+ 'schemes' => ['https', 'sse'],
+ 'security' => [
+ [
+ 'Anonymous' => [],
+ ],
+ ],
+ 'operationType' => 'read',
+ 'deprecated' => false,
+ 'systemTags' => ['operationType' => 'update', 'riskType' => 'none', 'chargeType' => 'free'],
+ 'parameters' => [
+ [
+ 'name' => 'Input',
+ 'in' => 'formData',
+ 'style' => 'json',
+ 'schema' => [
+ 'title' => '消息列表(JSON 字符串),按时间顺序排列',
+ 'description' => '消息列表(JSON 字符串),按时间顺序排列',
+ 'type' => 'array',
+ 'items' => [
+ 'type' => 'object',
+ 'properties' => [
+ 'Role' => [
+ 'title' => '消息角色',
+ 'description' => '消息角色',
+ 'type' => 'string',
+ 'required' => false,
+ 'enumValueTitles' => ['user / assistant / system / tool' => 'user / assistant / system / tool'],
+ 'example' => 'user',
+ ],
+ 'Content' => [
+ 'title' => '内容块列表',
+ 'description' => '内容块列表',
+ 'type' => 'array',
+ 'items' => [
+ 'type' => 'object',
+ 'properties' => [
+ 'Type' => [
+ 'title' => '内容类型',
+ 'description' => '内容类型',
+ 'type' => 'string',
+ 'required' => false,
+ 'enumValueTitles' => ['text/file/image' => 'text/file/image'],
+ 'example' => 'text',
+ ],
+ 'Text' => ['title' => '文本内容(Type=text)', 'description' => '文本内容(Type=text)', 'type' => 'string', 'required' => false, 'example' => '帮我分析这张图片'],
+ 'ImageUrl' => ['title' => '图片 URL 或 base64(Type=image)', 'description' => '图片 URL 或 base64(Type=image)', 'type' => 'string', 'required' => false, 'example' => 'https://example.com/img.jpg'],
+ 'FileUrl' => ['title' => '文件路径或 URL(Type=file)', 'description' => '文件路径或 URL(Type=file)', 'type' => 'string', 'required' => false, 'example' => '/workspace/report.pdf'],
+ 'FileName' => ['type' => 'string', 'example' => 'report.pdf'],
+ ],
+ 'required' => false,
+ 'description' => '',
+ ],
+ 'required' => false,
+ ],
+ ],
+ 'required' => false,
+ 'description' => '',
+ ],
+ 'required' => false,
+ 'example' => '[{"Role":"user","Content":[{"Type":"text","Text":"你好"}]}]',
+ ],
+ ],
+ [
+ 'name' => 'SessionId',
+ 'in' => 'formData',
+ 'schema' => ['title' => '会话 ID,用于多轮对话上下文保持', 'description' => '会话 ID,用于多轮对话上下文保持', 'type' => 'string', 'required' => false, 'example' => 'test-session-001'],
+ ],
+ [
+ 'name' => 'RoutingKey',
+ 'in' => 'formData',
+ 'schema' => ['title' => '路由键,用于指定处理请求的后端实例', 'description' => '路由键,用于指定处理请求的后端实例', 'type' => 'string', 'required' => false, 'example' => '""'],
+ ],
+ [
+ 'name' => 'Authorization',
+ 'in' => 'query',
+ 'schema' => ['title' => 'Bearer + 由 GetAccessToken 返回的 JWT,整段 URL 编码后放入 Query', 'description' => 'Bearer + 由 GetAccessToken 返回的 JWT,整段 URL 编码后放入 Query', 'type' => 'string', 'required' => false, 'example' => 'Bearer%20eyJhb****...****k'],
+ ],
+ [
+ 'name' => 'ExternalUserId',
+ 'in' => 'formData',
+ 'schema' => ['title' => '用户 ID', 'description' => '外部系统用户ID', 'type' => 'string', 'required' => false, 'example' => 'test-user'],
+ ],
+ [
+ 'name' => 'TemplateId',
+ 'in' => 'query',
+ 'schema' => ['title' => 'Agent 模板 ID', 'description' => 'Agent 模板 ID', 'type' => 'string', 'required' => false, 'example' => 'template-abc123'],
+ ],
+ [
+ 'name' => 'StreamOptions',
+ 'in' => 'formData',
+ 'style' => 'json',
+ 'schema' => [
+ 'title' => '流式输出控制选项。包含 IncludeReasoning(boolean,默认 true,是否包含模型思考过程)和 IncludeToolCalls(boolean,默认 true,是否包含工具调用详细信息)。不传或传空对象时行为与旧版一致。',
+ 'description' => '流式输出控制选项。包含 IncludeReasoning(boolean,默认 true,是否包含模型思考过程)和 IncludeToolCalls(boolean,默认 true,是否包含工具调用详细信息)。不传或传空对象时行为与旧版一致。',
+ 'type' => 'object',
+ 'properties' => [
+ 'IncludeReasoning' => ['title' => '是否包含模型思考过程。设为 false 时,SSE 流中将不包含 Type="reasoning" 的 message 和其 content 事件', 'description' => '是否包含模型思考过程。设为 false 时,SSE 流中将不包含 Type="reasoning" 的 message 和其 content 事件', 'type' => 'boolean', 'required' => false, 'example' => 'true'],
+ 'IncludeToolCalls' => ['title' => '是否包含工具调用详情。设为 false 时,SSE 流中将不包含 plugin_call/plugin_call_output/mcp_call/mcp_call_output 类型的 message 和其 content 事件', 'description' => '是否包含工具调用详情。设为 false 时,SSE 流中将不包含 plugin_call/plugin_call_output/mcp_call/mcp_call_output 类型的 message 和其 content 事件', 'type' => 'boolean', 'required' => false, 'example' => 'true'],
+ ],
+ 'required' => false,
+ 'example' => '{"IncludeReasoning": false, "IncludeToolCalls": false}',
+ ],
+ ],
+ [
+ 'name' => 'Settings',
+ 'in' => 'formData',
+ 'style' => 'json',
+ 'schema' => [
+ 'title' => '其他设置信息。包含输出文件模式控制参数OutputFileMode(string,可选url或base64,当前为兼容旧版默认 base64,推荐使用url)',
+ 'description' => '其他设置信息。包含输出文件模式控制参数OutputFileMode(string,可选url或base64,当前为兼容旧版默认 base64,推荐使用url)',
+ 'type' => 'object',
+ 'properties' => [
+ 'OutputFileMode' => ['title' => '控制文件输出模式的参数,可选url或base64, 当前为兼容旧版不传本参数默认使用 base64', 'description' => '控制文件输出模式的参数,可选url或base64, 当前为兼容旧版不传本参数默认使用 base64', 'type' => 'string', 'required' => false, 'example' => 'base64'],
+ ],
+ 'required' => false,
+ 'example' => '{"OutputFileMode": "url"}',
+ ],
+ ],
+ [
+ 'name' => 'Model',
+ 'in' => 'formData',
+ 'schema' => ['type' => 'string'],
+ ],
+ [
+ 'name' => 'Resume',
+ 'in' => 'formData',
+ 'schema' => ['type' => 'boolean'],
+ ],
+ ],
+ 'responses' => [
+ 200 => [
+ 'schema' => [
+ 'type' => 'object',
+ 'properties' => [
+ 'RequestId' => ['title' => '请求 ID', 'description' => '请求 ID', 'type' => 'string', 'example' => 'EA12****-****-****-****-****E5C'],
+ 'Role' => ['title' => '角色(user / assistant / system / tool)', 'description' => '角色(user / assistant / system / tool)', 'type' => 'string', 'example' => 'user'],
+ 'Status' => ['title' => '回复状态(created / in_progress / completed)', 'description' => '回复状态(created / in_progress / completed)', 'type' => 'string', 'example' => 'in_progress'],
+ 'Type' => ['title' => '消息类型(reasoning(模型思考过程) / message(正式回复))', 'description' => '消息类型(reasoning(模型思考过程) / message(正式回复))', 'type' => 'string', 'example' => 'message / text'."\n"],
+ 'Content' => [
+ 'title' => '内容块列表(仅 completed 时携带)',
+ 'description' => '内容块列表(仅 completed 时携带)',
+ 'type' => 'array',
+ 'items' => [
+ 'type' => 'object',
+ 'properties' => [
+ 'Object' => ['title' => '对象类型', 'description' => '对象类型', 'type' => 'string', 'example' => '""'],
+ 'Text' => ['title' => '文本内容', 'description' => '文本内容', 'type' => 'string', 'example' => '您好'],
+ 'Type' => ['title' => '内容类型("text" / "data")', 'description' => '内容类型("text" / "data")', 'type' => 'string', 'example' => 'text'],
+ 'Data' => ['title' => '结构化数据(如工具调用)。示例:{"call_id":"call_xxx","name":"get_weather", "output":"工具返回明细,文本格式"}', 'description' => '结构化数据(如工具调用)。示例:{"call_id":"call_xxx","name":"get_weather", "output":"工具返回明细,文本格式"}', 'type' => 'object', 'example' => '{"call_id":"call_xxx","name":"get_weather","arguments":"{"city":"Beijing"}"}'],
+ ],
+ 'description' => '',
+ ],
+ ],
+ 'SequenceNumber' => ['title' => '事件序号(字符串形式的递增整数,用于保证顺序)。注意:当 StreamOptions 过滤掉某类事件时,被过滤事件仍占用序号,因此客户端收到的序号可能不连续', 'description' => '事件序号(字符串形式的递增整数,用于保证顺序)。注意:当 StreamOptions 过滤掉某类事件时,被过滤事件仍占用序号,因此客户端收到的序号可能不连续', 'type' => 'string', 'example' => '1'],
+ 'Object' => [
+ 'title' => '事件对象类型',
+ 'description' => '事件对象类型',
+ 'type' => 'string',
+ 'enumValueTitles' => ['response / message / content' => 'response / message / content'],
+ 'example' => 'response',
+ ],
+ 'Id' => ['title' => '消息唯一标识', 'description' => '消息唯一标识', 'type' => 'string', 'example' => 'msg_xxx'],
+ 'Text' => ['title' => '增量文本内容(Object=content 事件携带)', 'description' => '增量文本内容(Object=content 事件携带)', 'type' => 'string', 'example' => '"hello"'],
+ 'Created' => ['description' => '(已废弃)创建时间戳', 'type' => 'string', 'example' => '1773380609'],
+ 'CreatedAt' => ['title' => '创建时间戳(Unix 秒)', 'description' => '创建时间戳(Unix 秒)', 'type' => 'string', 'example' => '1773380609'],
+ 'SessionId' => ['title' => '会话 ID', 'description' => '会话 ID', 'type' => 'string', 'example' => '176405663****961'],
+ 'Success' => ['title' => '是否成功', 'description' => '是否成功', 'type' => 'boolean', 'example' => 'true'],
+ 'Code' => ['title' => '业务状态码', 'description' => '业务状态码', 'type' => 'string', 'example' => '200'],
+ 'HttpStatusCode' => ['title' => 'HTTP 状态码', 'description' => 'HTTP 状态码', 'type' => 'integer', 'format' => 'int32', 'example' => '200'],
+ 'Message' => ['title' => '错误详情(失败时返回)', 'description' => '错误详情(失败时返回)', 'type' => 'string', 'example' => 'null'],
+ 'TraceId' => ['type' => 'string', 'example' => '0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d'],
+ ],
+ 'description' => '',
+ ],
+ ],
+ ],
+ 'staticInfo' => ['returnType' => 'synchronous'],
+ 'title' => '流式对话',
+ 'summary' => '与 JVS Crew 进行流式对话,采用 Server-Sent Events (SSE) 协议实时推送对话内容。',
+ 'description' => '**特性**'."\n"
+ ."\n"
+ .'- 实时流式响应,降低首字延迟'."\n"
+ .'- 支持多模态输入(文本、图片、文件)'."\n"
+ .'- 会话保持,支持多轮对话'."\n"
+ .'- 事件驱动,精确控制消息状态'."\n"
+ ."\n"
+ .'**请求信息**'."\n"
+ ."\n"
+ .'- **请求方法**: `POST`'."\n"
+ .'- **Content-Type**: `application/json`'."\n"
+ .'- **响应 Content-Type**: `text/event-stream`',
+ 'requestParamsDescription' => '##### StreamOptions 结构说明'."\n"
+ ."\n"
+ .'`StreamOptions` 是可选的流式输出控制参数,用于精简 SSE 流返回的事件内容。'."\n"
+ ."\n"
+ .'**使用建议**:面向终端用户的 C 端场景建议设置 `"IncludeReasoning": false, "IncludeToolCalls": false`,可大幅简化客户端解析逻辑。'."\n"
+ ."\n"
+ .'**注意**:'."\n"
+ .'- 未传 `StreamOptions` 或传空对象 `{}` 时,默认行为与旧版完全一致'."\n"
+ .'- 过滤仅影响 SSE 输出,不影响模型推理过程和工具调用的实际执行'."\n"
+ .'- 过滤后 `SequenceNumber` 不保证连续,但顺序正确'."\n"
+ ."\n"
+ .'##### Settings 结构说明'."\n"
+ ."\n"
+ .'**使用建议**:传递`base64`时,工具输出的file类型数据结构,以base64形式返回,但base64大小过大会影响SSE传输稳定性,故不推荐使用。传递`url`时,会传递临时可下载的url。'."\n"
+ ."\n"
+ .'**注意**:'."\n"
+ .'- 未传`Settings` 或传空对象 `{}` 时,默认行为为使用`base64`'."\n"
+ .'- 后续计划会切换为默认模式为`url`,故建议接入时使用`url`模式'."\n"
+ ."\n"
+ .'##### Input 结构说明'."\n"
+ ."\n"
+ .'`Input` 参数是一个 **JSON 字符串**(非对象数组),包含 Message 数组,需要先序列化为字符串再传递。'."\n"
+ ."\n\n"
+ .'#### 请求示例'."\n"
+ ."\n"
+ .'```bash'."\n"
+ .'curl -N -X POST \\'."\n"
+ .' \'https://wuyingai.cn-shanghai.aliyuncs.com/api/agent/chat?Authorization=Bearer%20<access_token>&TemplateId=<template_id>\' \\'."\n"
+ .' -H \'Content-Type: application/json\' \\'."\n"
+ .' -H \'Accept: text/event-stream\' \\'."\n"
+ .' -H \'Cache-Control: no-cache\' \\'."\n"
+ .' -H \'Connection: keep-alive\' \\'."\n"
+ .' -H \'x-acs-version: 2026-03-11\' \\'."\n"
+ .' -H \'x-acs-action: Chat\' \\'."\n"
+ .' -H \'x-acs-date: 2026-03-18T06:21:31Z\' \\'."\n"
+ .' -d \'{'."\n"
+ .' "Input": "[{\\"Role\\":\\"user\\",\\"Content\\":[{\\"Type\\":\\"text\\",\\"Text\\":\\"你好\\"}]}]",'."\n"
+ .' "ExternalUserId": "test-user",'."\n"
+ .' "SessionId": "test-session-001",'."\n"
+ .' "StreamOptions": {'."\n"
+ .' "IncludeReasoning": false,'."\n"
+ .' "IncludeToolCalls": false'."\n"
+ .' },'."\n"
+ .' "Settings": {'."\n"
+ .' "OutputFileMode": "url"'."\n"
+ .' }'."\n"
+ .' }\''."\n"
+ ."\n"
+ .'```'."\n"
+ ."\n"
+ .'**注意**:'."\n"
+ ."\n"
+ .'* `-N` 参数用于禁用缓冲,实时接收 SSE 流'."\n"
+ ."\n"
+ .'* `x-acs-date` 需要设置为当前 UTC 时间(ISO 8601 格式)'."\n"
+ ."\n"
+ .'* `Input` 是 JSON 字符串,需要转义引号'."\n"
+ ."\n"
+ .'* `<access_token>` 替换为实际的访问令牌,若令牌过期(401 错误),需重新调用 GetAccessToken 获取',
+ 'responseParamsDescription' => '#### Response 事件字段'."\n"
+ ."\n"
+ .'`Object=response` 事件是整个回复的生命周期包装,标记回复的开始与结束。'."\n"
+ ."\n"
+ .'#### Message 事件字段'."\n"
+ ."\n"
+ .'`Object=message` 事件表示一段具体的消息,通过 `Type` 字段区分消息类型。'."\n"
+ ."\n"
+ .'#### 事件类型说明'."\n"
+ ."\n"
+ .'| 事件类型 | Object | 描述 | 触发时机 |'."\n"
+ .'| --- | --- | --- | --- |'."\n"
+ .'| 回复创建 | `response` | Status=`created`,整个回复的生命周期开始 | SSE 流开始 |'."\n"
+ .'| 回复进行中 | `response` | Status=`in_progress` | 开始生成内容 |'."\n"
+ .'| 思考开始 | `message` | Type=`reasoning`, Status=`in_progress` | 模型开始推理 |'."\n"
+ .'| 思考内容增量 | `content` | 思考阶段的文本片段(Status=`in_progress`) | 每生成一段思考文本 |'."\n"
+ .'| 思考完成 | `message` | Type=`reasoning`, Status=`completed` | 推理结束 |'."\n"
+ .'| 消息开始 | `message` | Type=`message`, Status=`in_progress` | 开始生成正式回复 |'."\n"
+ .'| 消息内容增量 | `content` | 正式回复的文本片段(Status=`in_progress`) | 每生成一段回复文本 |'."\n"
+ .'| 消息内容完成 | `content` | 聚合后的完整文本(Status=`completed`) | 正式回复文本生成完毕 |'."\n"
+ .'| 消息完成 | `message` | Type=`message`, Status=`completed` | 正式回复结束 |'."\n"
+ .'| 回复完成 | `response` | Status=`completed` | SSE 流结束 |'."\n"
+ .'| 错误 | `error` | 错误信息 | 发生错误时 |'."\n"
+ .'| 心跳 | `:ping`(注释行) | 保持长连接,客户端忽略即可 | 空闲时每隔数秒 |'."\n"
+ ."\n"
+ .'> **注意**:思考阶段(`reasoning`)的 content 是模型内部推理过程,通常不应展示给终端用户。客户端应通过判断当前 message 的 Type 来决定是否展示对应的 content。'."\n"
+ ."\n"
+ .'#### SSE 响应示例'."\n"
+ ."\n"
+ .'**完整流程**:'."\n"
+ ."\n"
+ .'```text'."\n"
+ .'data: {"Object":"response","Status":"created","SequenceNumber":"0"}'."\n"
+ ."\n"
+ .'data: {"Object":"response","Status":"in_progress","SequenceNumber":"1"}'."\n"
+ ."\n"
+ .': ping'."\n"
+ ."\n"
+ .'data: {"Object":"message","Id":"msg_001","SessionId":"176405663****961","Type":"reasoning","Status":"in_progress","SequenceNumber":"2"}'."\n"
+ ."\n"
+ .'data: {"Object":"content","Id":"msg_001","Type":"text","Status":"in_progress","Text":"用户在打招呼","SequenceNumber":"3"}'."\n"
+ ."\n"
+ .'data: {"Object":"content","Id":"msg_001","Type":"text","Status":"in_progress","Text":",我简单回复即可","SequenceNumber":"4"}'."\n"
+ ."\n"
+ .'data: {"Object":"message","Id":"msg_001","Type":"message","Status":"in_progress","SequenceNumber":"5"}'."\n"
+ ."\n"
+ .'data: {"Object":"content","Id":"msg_001","Type":"text","Status":"in_progress","Text":"您好","SequenceNumber":"6"}'."\n"
+ ."\n"
+ .'data: {"Object":"content","Id":"msg_001","Type":"text","Status":"in_progress","Text":"!","SequenceNumber":"7"}'."\n"
+ ."\n"
+ .'data: {"Object":"content","Id":"msg_001","Type":"text","Status":"completed","Text":"用户在打招呼,我简单回复即可","SequenceNumber":"8"}'."\n"
+ ."\n"
+ .'data: {"Object":"message","Id":"msg_001","Type":"reasoning","Status":"completed","SequenceNumber":"9"}'."\n"
+ ."\n"
+ .'data: {"Object":"message","Id":"msg_001","Type":"message","Status":"completed","Content":[{"Type":"text","Text":"您好!"}],"SequenceNumber":"10"}'."\n"
+ ."\n"
+ .'data: {"Object":"response","Status":"completed","SequenceNumber":"11"}'."\n"
+ .'```'."\n"
+ ."\n"
+ .'> **提示**:'."\n"
+ .'> - `SequenceNumber=3~4` 的 content 属于 `reasoning`(思考)阶段,`SequenceNumber=6~7` 的 content 属于 `message`(正式回复)阶段。客户端应只展示 `message` 阶段的 content。'."\n"
+ .'> - `SequenceNumber=8` 是 `Status=completed` 的聚合 content,包含某阶段的完整文本;它可能出现在后续阶段的增量事件之后(异步聚合),客户端应通过跟踪最近一个 `Object=message` 事件的 `Type` 来判定当前 content 归属。'."\n"
+ .'> - `: ping` 是 SSE 协议注释行,浏览器 EventSource 和主流 SSE 库会自动忽略。'."\n"
+ ."\n"
+ .'***url类型文件数据结构示例***:'."\n"
+ .'```text'."\n"
+ .'{'."\n"
+ .' "Status": "completed",'."\n"
+ .' "Role": "tool",'."\n"
+ .' "Type": "plugin_call_output",'."\n"
+ .' "Content": [{'."\n"
+ .' "Object": "content",'."\n"
+ .' "Type": "data",'."\n"
+ .' "Data": {'."\n"
+ .' "name": "sandbox_send_file_to_user",'."\n"
+ .' "output": "[{\\"type\\": \\"file\\", \\"source\\": {\\"type\\": \\"url\\", \\"url\\": \\"https://jvs-crew-san****k%3D\\"}, \\"filename\\": \\"test_write.txt\\"}, {\\"type\\": \\"text\\", \\"text\\": \\"Sent file: test_write.txt\\"}]",'."\n"
+ .' "call_id": "call_f0***2a661"'."\n"
+ .' }'."\n"
+ .' }],'."\n"
+ .' "SequenceNumber": "106",'."\n"
+ .' "Object": "message",'."\n"
+ .' "Id": "msg_85a*****7de40a2eba"'."\n"
+ .'}'."\n"
+ .'```'."\n"
+ ."\n"
+ .'***base64类型文件数据结构示例***:'."\n"
+ .'```text'."\n"
+ .'{'."\n"
+ .' "Role": "tool",'."\n"
+ .' "Status": "completed",'."\n"
+ .' "Type": "plugin_call_output",'."\n"
+ .' "Content": [{'."\n"
+ .' "Type": "data",'."\n"
+ .' "Object": "content",'."\n"
+ .' "Data": {'."\n"
+ .' "name": "sandbox_send_file_to_user",'."\n"
+ .' "output": "[{\\"type\\": \\"file\\", \\"source\\": {\\"type\\": \\"base64\\", \\"media_type\\": \\"text/markdown\\", \\"data\\": \\"IyDmrKL*****15bm0Kgo=\\"}, \\"filename\\": \\"welcome.md\\"}, {\\"type\\": \\"text\\", \\"text\\": \\"Sent file: welcome.md\\"}]",'."\n"
+ .' "call_id": "call_7*****92b0dc"'."\n"
+ .' }'."\n"
+ .' }],'."\n"
+ .' "SequenceNumber": "121",'."\n"
+ .' "Object": "message",'."\n"
+ .' "Id": "msg_655f******b84e"'."\n"
+ .'}'."\n"
+ .'```',
+ 'changeSet' => [],
+ 'ramActions' => [],
+ 'responseDemo' => '[{"errorExample":"","example":"{\\n \\"RequestId\\": \\"EA12****-****-****-****-****E5C\\",\\n \\"Role\\": \\"user\\",\\n \\"Status\\": \\"in_progress\\",\\n \\"Type\\": \\"message / text\\\\n\\",\\n \\"Content\\": [\\n {\\n \\"Object\\": \\"\\\\\\"\\\\\\"\\",\\n \\"Text\\": \\"您好\\",\\n \\"Type\\": \\"text\\",\\n \\"Data\\": {\\n \\"test\\": \\"test\\",\\n \\"test2\\": 1\\n }\\n }\\n ],\\n \\"SequenceNumber\\": \\"1\\",\\n \\"Object\\": \\"response\\",\\n \\"Id\\": \\"msg_xxx\\",\\n \\"Text\\": \\"\\\\\\"hello\\\\\\"\\",\\n \\"Created\\": \\"1773380609\\",\\n \\"CreatedAt\\": \\"1773380609\\",\\n \\"SessionId\\": \\"176405663****961\\",\\n \\"Success\\": true,\\n \\"Code\\": \\"200\\",\\n \\"HttpStatusCode\\": 200,\\n \\"Message\\": \\"null\\",\\n \\"TraceId\\": \\"0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d\\"\\n}","type":"json"}]',
+ ],
+ 'GetAccessToken' => [
+ 'methods' => ['get', 'post'],
+ 'schemes' => ['https'],
+ 'security' => [
+ [
+ 'AK' => [],
+ ],
+ ],
+ 'operationType' => 'readAndWrite',
+ 'deprecated' => false,
+ 'systemTags' => ['operationType' => 'get', 'riskType' => 'none', 'chargeType' => 'free'],
+ 'parameters' => [
+ [
+ 'name' => 'ExternalUserId',
+ 'in' => 'query',
+ 'schema' => ['title' => '外部系统用户唯一标识', 'description' => '外部系统用户唯一标识', 'type' => 'string', 'required' => false, 'example' => '"user-38764"'],
+ ],
+ [
+ 'name' => 'TemplateId',
+ 'in' => 'query',
+ 'schema' => ['title' => 'Agent模板ID。', 'description' => 'Agent模板ID。', 'type' => 'string', 'required' => false, 'example' => '1600112233445566'],
+ ],
+ ],
+ 'responses' => [
+ 200 => [
+ 'schema' => [
+ 'title' => 'GetAccessToken成功响应',
+ 'description' => 'PlainResult<CreateRepositoryItemResponseDTO>',
+ 'type' => 'object',
+ 'properties' => [
+ 'Success' => ['title' => '是否成功', 'description' => '是否成功', 'type' => 'boolean', 'example' => 'true'],
+ 'Code' => ['title' => '业务状态码', 'description' => '业务状态码', 'type' => 'string', 'example' => '"200"'],
+ 'Message' => ['title' => '错误详情(失败时返回)', 'description' => '错误详情(失败时返回)', 'type' => 'string', 'example' => 'null'],
+ 'HttpStatusCode' => ['title' => 'HTTP 状态码', 'description' => 'HTTP 状态码', 'type' => 'integer', 'format' => 'int32', 'example' => '200'],
+ 'RequestId' => ['title' => '请求唯一标识(UUID 形态)', 'description' => '请求唯一标识(UUID 形态,首尾保留示意)', 'type' => 'string', 'example' => '"EA12****-****-****-****-****E5C"'],
+ 'AccessToken' => ['title' => 'JWT,用于 Chat 的 Query 参数 Authorization;在一段时间内有效', 'description' => 'JWT,用于 Chat 的 Query 参数 Authorization;在一段时间内有效', 'type' => 'string', 'example' => '"eyJhbGc****.eyJ********.****TCk"'],
+ 'AccessDeniedDetail' => ['title' => '鉴权失败详情', 'description' => '鉴权失败详情', 'type' => 'string', 'example' => 'null'],
+ ],
+ ],
+ ],
+ ],
+ 'staticInfo' => ['returnType' => 'synchronous'],
+ 'title' => '获取访问令牌',
+ 'summary' => '获取用户进行对话所需的访问令牌(AccessToken),用于后续调用 Chat 接口进行身份验证。',
+ 'description' => '**令牌格式**: AccessToken 为 **JWT**,由 **Header.Payload.Signature** 三段经 Base64URL 编码后以 `.` 连接成一行;下表示例为脱敏示意,实际 RequestId、JWT 各段均更长。'."\n"
+ ."\n"
+ .'**令牌有效期**: AccessToken **在一段时间内有效**,过期后须重新调用本接口获取新令牌。'."\n"
+ ."\n"
+ .'**认证方式**: POP V1 签名(AK/SK)'."\n"
+ ."\n"
+ .'**Action**: `GetAccessToken`',
+ 'requestParamsDescription' => '#### 请求示例'."\n"
+ ."\n"
+ .'```python'."\n"
+ .'params = {'."\n"
+ .' "Format": "JSON",'."\n"
+ .' "Version": "2026-03-11",'."\n"
+ .' "AccessKeyId": ak,'."\n"
+ .' "SignatureMethod": "HMAC-SHA1",'."\n"
+ .' "Timestamp": _now_utc(),'."\n"
+ .' "SignatureVersion": "1.0",'."\n"
+ .' "SignatureNonce": str(uuid.uuid4()),'."\n"
+ .' "Action": "GetAccessToken",'."\n"
+ .' "RegionId": "cn-shanghai",'."\n"
+ .' "ExternalUserId": "user-38764",'."\n"
+ .'}'."\n"
+ .'params["Signature"] = _sign_v1(params, sk)'."\n"
+ .'```',
+ 'responseParamsDescription' => '#### 响应示例'."\n"
+ ."\n"
+ .'**成功**:'."\n"
+ ."\n"
+ .'```json'."\n"
+ .'{'."\n"
+ .' "Success": true,'."\n"
+ .' "Code": "200",'."\n"
+ .' "HttpStatusCode": 200,'."\n"
+ .' "RequestId": "EA12****-****-****-****-****E5C",'."\n"
+ .' "AccessToken": "eyJhbGc****.eyJ********.****TCk"'."\n"
+ .'}'."\n"
+ .'```'."\n"
+ ."\n"
+ .'**失败**:'."\n"
+ ."\n"
+ .'```json'."\n"
+ .'{'."\n"
+ .' "Success": false,'."\n"
+ .' "Code": "400",'."\n"
+ .' "Message": "Invalid ExternalUserId",'."\n"
+ .' "HttpStatusCode": 400'."\n"
+ .'}'."\n"
+ .'```',
+ 'changeSet' => [],
+ 'ramActions' => [
+ [
+ 'operationType' => 'get',
+ 'ramAction' => [
+ 'action' => 'agentbay:GetAccessToken',
+ 'authLevel' => 'operate',
+ 'actionConditions' => [],
+ 'resources' => [
+ ['validationType' => 'always', 'product' => 'WuyingAI', 'resourceType' => '全部资源', 'arn' => '*'],
+ ],
+ ],
+ ],
+ ],
+ 'responseDemo' => '[{"errorExample":"","example":"{\\n \\"Success\\": true,\\n \\"Code\\": \\"\\\\\\"200\\\\\\"\\",\\n \\"Message\\": \\"null\\",\\n \\"HttpStatusCode\\": 200,\\n \\"RequestId\\": \\"\\\\\\"EA12****-****-****-****-****E5C\\\\\\"\\",\\n \\"AccessToken\\": \\"\\\\\\"eyJhbGc****.eyJ********.****TCk\\\\\\"\\",\\n \\"AccessDeniedDetail\\": \\"null\\"\\n}","type":"json"}]',
+ ],
+ ],
+ 'endpoints' => [],
+ 'errorCodes' => [
+ ['code' => 'Channels.CredentialConflictError', 'message' => 'Credential is already in use.', 'http_code' => 409, 'description' => '该凭证已被其他配置使用。'],
+ ['code' => 'SandboxImages.ImageBusy', 'message' => 'Image is being deployed/removed, please try again later.', 'http_code' => 409, 'description' => '镜像正在部署/删除中,请稍后重试。'],
+ ['code' => 'SandboxImages.ImageInUse', 'message' => 'The image is being used by the template. Switch to another image first.', 'http_code' => 409, 'description' => '镜像正在被模板使用,请先切换到其他镜像。'],
+ ['code' => 'SandboxImages.ImageNameDuplicate', 'message' => 'The image name already exists. Modify it and try again.', 'http_code' => 409, 'description' => '镜像名称已存在,请修改后重试。'],
+ ['code' => 'SandboxImages.InternalError', 'message' => 'Internal service error, please try again later.', 'http_code' => 500, 'description' => '服务内部错误,请稍后重试。'],
+ ['code' => 'SandboxImages.InvalidStatus', 'message' => 'The current operation cannot be performed because the mirror status does not match.', 'http_code' => 409, 'description' => '镜像状态不匹配,无法执行当前操作。'],
+ ],
+ 'changeSet' => [],
+ 'ram' => [
+ 'productCode' => 'WuyingAI',
+ 'productName' => '无影云电脑',
+ 'ramCodes' => ['agentbay', 'ecd'],
+ 'ramLevel' => '操作级',
+ 'ramConditions' => [],
+ 'ramActions' => [
+ [
+ 'apiName' => 'GetAccessToken',
+ 'description' => '获取访问令牌',
+ 'operationType' => 'get',
+ 'ramAction' => [
+ 'action' => 'agentbay:GetAccessToken',
+ 'authLevel' => 'operate',
+ 'actionConditions' => [],
+ 'resources' => [
+ ['validationType' => 'always', 'product' => 'WuyingAI', 'resourceType' => '全部资源', 'arn' => '*'],
+ ],
+ ],
+ ],
+ ],
+ 'resourceTypes' => [],
+ ],
+];