{
    "version": "0.0.1",
    "articles": [
        {
            "id": "quick-start",
            "title": "快速入门",
            "category": "使用指南",
            "status": "guide",
            "summary": "从设备接入到第一条任务，使用本站服务地址与自己的机器人 ID。",
            "sections": [
                {
                    "title": "1. 准备机器人",
                    "body": "由管理员或代理商登记并授权机器人 ID，确认有效期与设备数量。安卓填写服务地址、机器人 ID，并按提示配置无障碍服务。读取群码需要照片访问权限。"
                },
                {
                    "title": "2. 检查在线",
                    "body": "使用在线查询接口确认机器人状态；接入多台设备时仍按同一 ID 串行执行任务，实际执行设备会记录在任务详情。"
                },
                {
                    "title": "3. 发布并查询",
                    "body": "POST /wework/sendRawMessage?robotId=YOUR_ROBOT_ID 提交1至100条指令。保存受理返回的消息或批次编号，再 GET /wework/taskResult 查询，或配置 task.result 回调。"
                },
                {
                    "title": "文档范围",
                    "body": "目录覆盖当前安卓源码的50个 type 编号以及业务、配置和回调接口。已接入表示已建立本项目服务端契约，不表示所有企微版本和真实场景均已验收。未实现项目仅保留协议参考。示例均使用占位数据。"
                }
            ]
        },
        {
            "id": "access",
            "title": "鉴权与公共约定",
            "category": "使用指南",
            "status": "guide",
            "summary": "机器人接入只使用 robotId；管理员和代理商身份分别隔离。",
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                }
            ],
            "sections": [
                {
                    "title": "服务地址",
                    "body": "将示例中的路径拼接到你部署的服务域名。生产环境使用 HTTPS / WSS。不要使用第三方服务域名作为本站地址；不要把真实 ID 写入公开链接或截图。"
                },
                {
                    "title": "正文与编号",
                    "body": "POST 正文使用 application/json。socketType 必须为数字2，list 当前只允许一条。requestId 对同一 ID 幂等，原编号改变参数返回409，不可用新编号自动重试未知任务。"
                },
                {
                    "title": "响应契约",
                    "body": "业务任务接口成功 code=0；设备配置接口成功 code=200；后台和代理商接口成功 code=1。非2xx请读取 message 或 msg。不能把不同入口的成功码混用。"
                },
                {
                    "title": "时间",
                    "body": "HTTP 查询时间通常为 Unix 秒。安卓结果 runTime 是毫秒，timeCost 是秒。页面显示北京时间，设备时间依赖设备时钟。"
                }
            ]
        },
        {
            "id": "task-envelope",
            "title": "任务信封与受理",
            "category": "使用指南",
            "status": "ready",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "summary": "统一下发203、206、207、501、504、506；其他类型当前拒绝。",
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "socketType",
                    "type": "integer",
                    "required": "必填",
                    "description": "固定2。"
                },
                {
                    "name": "list",
                    "type": "object[]",
                    "required": "必填",
                    "description": "仅一条指令；字段请查看相应类型详情。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 203,\n            \"titleList\": [\n                \"示例群\"\n            ],\n            \"receivedContent\": \"你好，来自 QU-helper\"\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}"
        },
        {
            "id": "task-result",
            "title": "查询任务结果",
            "category": "使用指南",
            "status": "ready",
            "method": "GET",
            "path": "/wework/taskResult",
            "summary": "按机器人 ID 和受理返回的 messageId 查询，不接受其他机器人任务。",
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "messageId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "提交时返回的消息编号，最多64字符。"
                }
            ],
            "request": "GET /wework/taskResult?robotId=YOUR_ROBOT_ID&messageId=MESSAGE_ID",
            "sections": [
                {
                    "title": "data 主要字段",
                    "body": "task_id、message_id、robot_id、type、command、state、result、outcome；并包含执行设备信息及各阶段时间。字段缺失或null表示尚未发生，不要补造时间。"
                },
                {
                    "title": "状态流转",
                    "body": "PENDING 待投递 → DISPATCHED 已投递 → RECEIVED 设备接收；终态包括 SUCCEEDED 成功、PARTIAL 部分成功、FAILED 失败、UNKNOWN 结果未知、EXPIRED 待投递过期、CANCELLED 已取消。UNKNOWN 不自动重发。"
                },
                {
                    "title": "超时",
                    "body": "未投递最多等待5分钟；文本、群资料、群码和企业采集等待结果120秒，群操作及其他扩展操作600秒。回报超时自动FAILED并继续后续任务；result.source=server_timeout、outcome.executionUncertain=true，表示执行结果未确认，不是设备确认失败，不自动重发。同名建群保护保留。迟到的原设备结果经关联校验后可更新真实状态并通知；人工核验后不再覆盖。在线且空闲时立即投递。"
                },
                {
                    "title": "时间字段",
                    "body": "created_at 提交、dispatched_at 投递、received_at 设备接收、execution_finished_at 设备结束、finished_at 服务端终态登记、callback_at 安卓结果到达。最后一项不是外部 HTTP 通知到达时间。"
                },
                {
                    "title": "result / outcome",
                    "body": "result 保留 errorCode、errorReason、successList、failList、metaJson、runTime、timeCost、qrcode 等安卓结果。outcome 汇总 steps、added、addFailed、removed、removeFailed、qrcodeStatus。群模板失败不阻断取码，群码失败不应触发重复建群。"
                }
            ]
        },
        {
            "id": "errors",
            "title": "错误码与安全重试",
            "category": "使用指南",
            "status": "guide",
            "summary": "HTTP错误、任务状态与安卓步骤错误是三种不同信息。",
            "sections": [
                {
                    "title": "HTTP 错误",
                    "body": "401 未认证；403 授权、有效期或权限不满足；404 记录不存在；405 方法不支持；409 幂等、版本、重名或额度冲突；422 参数校验失败；429 登录频率限制；500 请求结果未确认。请以响应消息解释具体原因。"
                },
                {
                    "title": "群步骤错误",
                    "body": "201011 创建群；201012 改名；201013 添加成员；201014 移除成员；201015 公告；201016 备注；201017 模板；201018 建群上限。读取群码的状态和错误独立保存在 qrcodeStatus / qrcodeError。"
                },
                {
                    "title": "重试边界",
                    "body": "网络失败先按原 requestId 核对。PARTIAL 和 UNKNOWN 需核验已执行步骤，不能自动重发建群或加人。回调重试仅重发通知，不再次执行手机任务。"
                }
            ]
        },
        {
            "id": "faq",
            "title": "常见问题与功能开启",
            "category": "使用指南",
            "status": "guide",
            "summary": "设备在线、授权上限、群模板和照片权限排查。",
            "sections": [
                {
                    "title": "任务没投递",
                    "body": "核对机器人有效授权、在线心跳、设备是否执行中以及客户端能力声明。旧版设备不支持的任务不降级下发；等待期间仍遵循未投递过期规则。"
                },
                {
                    "title": "设备数达到上限",
                    "body": "安卓提示后由用户确认替换最早连接的空闲设备，执行中的设备不自动踢出。后台可查看设备型号、版本与服务端读取的连接 IP。"
                },
                {
                    "title": "群模板或群码失败",
                    "body": "模板填写企微已有模板的准确名称，机器人会翻页查找。群码流程进入群设置、核对群名、保存到相册并解码本次图片；照片权限不足时请在系统中授予适当访问。可以单独获取已有群群码，无须重复建群。"
                }
            ]
        },
        {
            "id": "type-11",
            "title": "心跳",
            "type": 11,
            "category": "设备上报",
            "status": "report",
            "summary": "设备上报；后端已支持",
            "notes": [
                "由安卓设备通过通讯通道上报，不是对外 HTTP 下发接口。"
            ],
            "params": [],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=11 · HEART_BEAT"
                }
            ]
        },
        {
            "id": "type-101",
            "title": "接收消息列表",
            "type": 101,
            "category": "设备上报",
            "status": "report",
            "summary": "设备上报；后端已落库",
            "notes": [
                "由安卓设备通过通讯通道上报，不是对外 HTTP 下发接口。"
            ],
            "params": [],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=101 · TYPE_RECEIVE_MESSAGE_LIST"
                }
            ]
        },
        {
            "id": "type-102",
            "title": "企业微信客服端反转",
            "type": 102,
            "category": "指令消息",
            "status": "pending",
            "summary": "安卓有处理代码；后端未接入",
            "notes": [
                "当前服务端不受理此类型。以下仅为源码协议字段清单，必填规则、默认值和返回值尚未建立可调用契约；不提供可执行请求示例。"
            ],
            "params": [
                {
                    "name": "errorCode",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                },
                {
                    "name": "errorReason",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                }
            ],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=102 · TYPE_CONSOLE_TOAST"
                }
            ]
        },
        {
            "id": "type-201",
            "title": "停止所有任务并返回首页待命",
            "type": 201,
            "category": "指令消息",
            "status": "pending",
            "summary": "安卓有处理代码；后端未接入",
            "notes": [
                "当前服务端不受理此类型。以下仅为源码协议字段清单，必填规则、默认值和返回值尚未建立可调用契约；不提供可执行请求示例。"
            ],
            "params": [],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=201 · STOP_AND_GO_HOME"
                }
            ]
        },
        {
            "id": "type-202",
            "title": "回到首页等待接收新消息",
            "type": 202,
            "category": "指令消息",
            "status": "pending",
            "summary": "安卓有处理代码；后端未接入",
            "notes": [
                "当前服务端不受理此类型。以下仅为源码协议字段清单，必填规则、默认值和返回值尚未建立可调用契约；不提供可执行请求示例。"
            ],
            "params": [],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=202 · LOOP_RECEIVE_NEW_MESSAGE"
                }
            ]
        },
        {
            "id": "type-203",
            "title": "发送文本消息",
            "type": 203,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "titleList",
                    "type": "string[]",
                    "required": "必填",
                    "description": "仅一个完整联系人或群名称，最长100字符。"
                },
                {
                    "name": "receivedContent",
                    "type": "string",
                    "required": "必填",
                    "description": "文本内容，最多2000字符。"
                },
                {
                    "name": "at",
                    "type": "string",
                    "required": "可选",
                    "description": "一个准确成员名称，最多100字符；与 atList 二选一，不支持正则名称。"
                },
                {
                    "name": "atList",
                    "type": "string[]",
                    "required": "可选",
                    "description": "1至50个不重复成员名称，每个最多100字符；与 at 二选一。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 203,\n            \"titleList\": [\n                \"示例群\"\n            ],\n            \"receivedContent\": \"你好，来自 QU-helper\"\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=203 · SEND_MESSAGE"
                }
            ]
        },
        {
            "id": "type-204",
            "title": "回复消息",
            "type": 204,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "titleList",
                    "type": "string[]",
                    "required": "必填",
                    "description": "只能包含一个准确的来源联系人或群名称，每项最多100字符，不支持正则。"
                },
                {
                    "name": "originalContent",
                    "type": "string",
                    "required": "必填",
                    "description": "原消息准确正文或小程序页面路径，最多2000字符。"
                },
                {
                    "name": "textType",
                    "type": "integer",
                    "required": "必填",
                    "description": "原消息类型，JSON整数1至18；例如1为文本。"
                },
                {
                    "name": "receivedContent",
                    "type": "string",
                    "required": "必填",
                    "description": "回复内容、待办内容或卡片说明，最多2000字符。"
                },
                {
                    "name": "receivedName",
                    "type": "string",
                    "required": "可选",
                    "description": "原消息发送者名称，最多100字符；不指定时匹配原消息正文。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 204,\n            \"titleList\": [\n                \"示例群\"\n            ],\n            \"originalContent\": \"原始消息\",\n            \"textType\": 1,\n            \"receivedContent\": \"回复内容\"\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=204 · REPLY_MESSAGE"
                }
            ]
        },
        {
            "id": "type-205",
            "title": "转发消息",
            "type": 205,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "titleList",
                    "type": "string[]",
                    "required": "必填",
                    "description": "只能包含一个准确的来源联系人或群名称，每项最多100字符，不支持正则。"
                },
                {
                    "name": "originalContent",
                    "type": "string",
                    "required": "必填",
                    "description": "原消息准确正文或小程序页面路径，最多2000字符。"
                },
                {
                    "name": "textType",
                    "type": "integer",
                    "required": "必填",
                    "description": "原消息类型，JSON整数1至18；例如1为文本。"
                },
                {
                    "name": "nameList",
                    "type": "string[]",
                    "required": "必填",
                    "description": "只能包含一个准确的转发接收联系人或群名称，最多100字符。"
                },
                {
                    "name": "receivedName",
                    "type": "string",
                    "required": "可选",
                    "description": "原消息发送者名称，最多100字符；不指定时匹配原消息正文。"
                },
                {
                    "name": "extraText",
                    "type": "string",
                    "required": "可选",
                    "description": "附加留言，最多2000字符。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 205,\n            \"titleList\": [\n                \"来源群\"\n            ],\n            \"originalContent\": \"原始消息\",\n            \"textType\": 1,\n            \"nameList\": [\n                \"接收群\"\n            ]\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=205 · RELAY_MESSAGE"
                }
            ]
        },
        {
            "id": "type-206",
            "title": "创建外部群",
            "type": 206,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "同名群、未决建群记录或搜索结果不确定时停止，勿重复建群。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "groupName",
                    "type": "string",
                    "required": "必填",
                    "description": "完整群名称，最多100字符。创建时必须为新名称，不可借建群操作修改已有群。"
                },
                {
                    "name": "selectList",
                    "type": "string[]",
                    "required": "可选",
                    "description": "添加成员，最多50个不重复名称，每个最多100字符。查询群资料时必填且仅一个群名称。"
                },
                {
                    "name": "groupAnnouncement",
                    "type": "string",
                    "required": "可选",
                    "description": "建群公告，最多2000字符。留空跳过，不支持借空字符串清除公告。"
                },
                {
                    "name": "groupRemark",
                    "type": "string",
                    "required": "可选",
                    "description": "群备注，最多500字符。"
                },
                {
                    "name": "groupTemplate",
                    "type": "string",
                    "required": "可选",
                    "description": "企微已有模板名称，最多100字符。模板失败与群码获取分别记录。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 206,\n            \"groupName\": \"业务测试群_唯一名称\",\n            \"selectList\": [\n                \"示例联系人\"\n            ],\n            \"groupAnnouncement\": \"欢迎加入\",\n            \"groupRemark\": \"业务群\",\n            \"groupTemplate\": \"示例模板\"\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=206 · INIT_GROUP"
                }
            ]
        },
        {
            "id": "type-207",
            "title": "修改群信息（含拉人等）",
            "type": 207,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "至少提供一项群修改；各步骤可部分成功，勿直接重发整条任务。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "groupName",
                    "type": "string",
                    "required": "必填",
                    "description": "完整群名称，最多100字符。创建时必须为新名称，不可借建群操作修改已有群。"
                },
                {
                    "name": "newGroupName",
                    "type": "string",
                    "required": "可选",
                    "description": "新的完整群名，最多100字符。"
                },
                {
                    "name": "newGroupAnnouncement",
                    "type": "string",
                    "required": "可选",
                    "description": "修改群公告，最多2000字符。"
                },
                {
                    "name": "groupRemark",
                    "type": "string",
                    "required": "可选",
                    "description": "群备注，最多500字符。"
                },
                {
                    "name": "groupTemplate",
                    "type": "string",
                    "required": "可选",
                    "description": "企微已有模板名称，最多100字符。模板失败与群码获取分别记录。"
                },
                {
                    "name": "selectList",
                    "type": "string[]",
                    "required": "可选",
                    "description": "添加成员，最多50个不重复名称，每个最多100字符。查询群资料时必填且仅一个群名称。"
                },
                {
                    "name": "showMessageHistory",
                    "type": "boolean",
                    "required": "可选",
                    "description": "向新加入成员附带历史消息；true 时必须同时添加成员。"
                },
                {
                    "name": "removeList",
                    "type": "string[]",
                    "required": "可选",
                    "description": "移除成员，最多50个；不能与添加名单重叠。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 207,\n            \"groupName\": \"示例群\",\n            \"selectList\": [\n                \"示例联系人\"\n            ],\n            \"newGroupAnnouncement\": \"更新后的公告\"\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=207 · UPDATE_GROUP"
                }
            ]
        },
        {
            "id": "type-208",
            "title": "推送微盘图片",
            "type": 208,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "titleList",
                    "type": "string[]",
                    "required": "必填",
                    "description": "只能包含一个准确的来源联系人或群名称，每项最多100字符，不支持正则。"
                },
                {
                    "name": "objectName",
                    "type": "string",
                    "required": "必填",
                    "description": "内容标题、微盘文件名、企业名称或发送文件名，最多100字符；文件名不得含路径。"
                },
                {
                    "name": "extraText",
                    "type": "string",
                    "required": "可选",
                    "description": "附加留言，最多2000字符。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 208,\n            \"titleList\": [\n                \"示例群\"\n            ],\n            \"objectName\": \"图片名称\"\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=208 · PUSH_MICRO_DISK_IMAGE"
                }
            ]
        },
        {
            "id": "type-209",
            "title": "推送微盘文件",
            "type": 209,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "titleList",
                    "type": "string[]",
                    "required": "必填",
                    "description": "只能包含一个准确的来源联系人或群名称，每项最多100字符，不支持正则。"
                },
                {
                    "name": "objectName",
                    "type": "string",
                    "required": "必填",
                    "description": "内容标题、微盘文件名、企业名称或发送文件名，最多100字符；文件名不得含路径。"
                },
                {
                    "name": "extraText",
                    "type": "string",
                    "required": "可选",
                    "description": "附加留言，最多2000字符。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 209,\n            \"titleList\": [\n                \"示例群\"\n            ],\n            \"objectName\": \"文件名称\"\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=209 · PUSH_MICRO_DISK_FILE"
                }
            ]
        },
        {
            "id": "type-210",
            "title": "推送小程序",
            "type": 210,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。",
                "需要有效的企业微信应用/SDK及关联小程序配置；未配置或SDK拒绝时返回执行失败，不承诺发送成功。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "titleList",
                    "type": "string[]",
                    "required": "必填",
                    "description": "只能包含一个准确的来源联系人或群名称，每项最多100字符，不支持正则。"
                },
                {
                    "name": "objectName",
                    "type": "string",
                    "required": "必填",
                    "description": "内容标题、微盘文件名、企业名称或发送文件名，最多100字符；文件名不得含路径。"
                },
                {
                    "name": "receivedContent",
                    "type": "string",
                    "required": "必填",
                    "description": "回复内容、待办内容或卡片说明，最多2000字符。"
                },
                {
                    "name": "originalContent",
                    "type": "string",
                    "required": "必填",
                    "description": "原消息准确正文或小程序页面路径，最多2000字符。"
                },
                {
                    "name": "fileUrl",
                    "type": "string",
                    "required": "必填",
                    "description": "公开HTTPS文件或封面地址，最多2000字符；文件下载最多5MB，不跟随跳转。"
                },
                {
                    "name": "extraText",
                    "type": "string",
                    "required": "可选",
                    "description": "附加留言，最多2000字符。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 210,\n            \"titleList\": [\n                \"示例群\"\n            ],\n            \"objectName\": \"示例小程序\",\n            \"receivedContent\": \"小程序说明\",\n            \"originalContent\": \"pages/index/index\",\n            \"fileUrl\": \"https://example.com/cover.png\"\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=210 · PUSH_MICROPROGRAM"
                }
            ]
        },
        {
            "id": "type-211",
            "title": "推送腾讯文档",
            "type": 211,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "titleList",
                    "type": "string[]",
                    "required": "必填",
                    "description": "只能包含一个准确的来源联系人或群名称，每项最多100字符，不支持正则。"
                },
                {
                    "name": "objectName",
                    "type": "string",
                    "required": "必填",
                    "description": "内容标题、微盘文件名、企业名称或发送文件名，最多100字符；文件名不得含路径。"
                },
                {
                    "name": "extraText",
                    "type": "string",
                    "required": "可选",
                    "description": "附加留言，最多2000字符。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 211,\n            \"titleList\": [\n                \"示例群\"\n            ],\n            \"objectName\": \"文档名称\"\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=211 · PUSH_OFFICE"
                }
            ]
        },
        {
            "id": "type-212",
            "title": "通过全部好友请求",
            "type": 212,
            "category": "指令消息",
            "status": "pending",
            "summary": "分发分支为空",
            "notes": [
                "当前服务端不受理此类型。以下仅为源码协议字段清单，必填规则、默认值和返回值尚未建立可调用契约；不提供可执行请求示例。"
            ],
            "params": [],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=212 · PASS_ALL_FRIEND_REQUEST"
                }
            ]
        },
        {
            "id": "type-213",
            "title": "添加或修改好友",
            "type": 213,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "friend",
                    "type": "object",
                    "required": "必填",
                    "description": "name（最多100字符）或phone（可选+及6至20位数字）至少一项。可选markName、markCorp（100字符）、markExtra（500字符）、leavingMsg（200字符）、tagList（最多20个不重复标签，各100字符）、newFriend（布尔）。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 213,\n            \"friend\": {\n                \"phone\": \"13800000000\"\n            }\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=213 · ADD_FRIEND_BY_PHONE"
                }
            ]
        },
        {
            "id": "type-214",
            "title": "展示群信息",
            "type": 214,
            "category": "指令消息",
            "status": "pending",
            "summary": "安卓有处理代码；后端未接入",
            "notes": [
                "当前服务端不受理此类型。以下仅为源码协议字段清单，必填规则、默认值和返回值尚未建立可调用契约；不提供可执行请求示例。"
            ],
            "params": [
                {
                    "name": "titleList",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                },
                {
                    "name": "receivedName",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                },
                {
                    "name": "originalContent",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                },
                {
                    "name": "textType",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                }
            ],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=214 · SHOW_GROUP_INFO"
                }
            ]
        },
        {
            "id": "type-215",
            "title": "创建防骚扰规则",
            "type": 215,
            "category": "指令消息",
            "status": "pending",
            "summary": "只有常量，无分发入口",
            "notes": [
                "当前服务端不受理此类型。以下仅为源码协议字段清单，必填规则、默认值和返回值尚未建立可调用契约；不提供可执行请求示例。"
            ],
            "params": [],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=215 · INIT_ANTI_HARASSMENT_RULE"
                }
            ]
        },
        {
            "id": "type-216",
            "title": "修改防骚扰规则",
            "type": 216,
            "category": "指令消息",
            "status": "pending",
            "summary": "只有常量，无分发入口",
            "notes": [
                "当前服务端不受理此类型。以下仅为源码协议字段清单，必填规则、默认值和返回值尚未建立可调用契约；不提供可执行请求示例。"
            ],
            "params": [],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=216 · UPDATE_ANTI_HARASSMENT_RULE"
                }
            ]
        },
        {
            "id": "type-217",
            "title": "删除防骚扰规则",
            "type": 217,
            "category": "指令消息",
            "status": "pending",
            "summary": "只有常量，无分发入口",
            "notes": [
                "当前服务端不受理此类型。以下仅为源码协议字段清单，必填规则、默认值和返回值尚未建立可调用契约；不提供可执行请求示例。"
            ],
            "params": [],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=217 · DELETED_ANTI_HARASSMENT_RULE"
                }
            ]
        },
        {
            "id": "type-218",
            "title": "推送任意图片、音视频及文件",
            "type": 218,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。",
                "仅支持fileUrl公开HTTPS文件，最大5MB；文件名不可带路径。fileType为image/video/audio/application/text；暂不接收fileBase64。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "titleList",
                    "type": "string[]",
                    "required": "必填",
                    "description": "只能包含一个准确的来源联系人或群名称，每项最多100字符，不支持正则。"
                },
                {
                    "name": "objectName",
                    "type": "string",
                    "required": "必填",
                    "description": "内容标题、微盘文件名、企业名称或发送文件名，最多100字符；文件名不得含路径。"
                },
                {
                    "name": "fileUrl",
                    "type": "string",
                    "required": "必填",
                    "description": "公开HTTPS文件或封面地址，最多2000字符；文件下载最多5MB，不跟随跳转。"
                },
                {
                    "name": "fileType",
                    "type": "string",
                    "required": "必填",
                    "description": "文件类别：image、video、audio、application或text。"
                },
                {
                    "name": "extraText",
                    "type": "string",
                    "required": "可选",
                    "description": "附加留言，最多2000字符。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 218,\n            \"titleList\": [\n                \"示例群\"\n            ],\n            \"objectName\": \"example.png\",\n            \"fileUrl\": \"https://example.com/example.png\",\n            \"fileType\": \"image\"\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=218 · PUSH_FILE"
                }
            ]
        },
        {
            "id": "type-219",
            "title": "解散群",
            "type": 219,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "groupName",
                    "type": "string",
                    "required": "必填",
                    "description": "准确群名称，最多100字符，不支持正则。"
                },
                {
                    "name": "confirmTarget",
                    "type": "string",
                    "required": "必填",
                    "description": "再次输入与操作目标完全相同的准确名称；解散群、撤回消息和删除联系人必填。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 219,\n            \"groupName\": \"示例群\",\n            \"confirmTarget\": \"示例群\"\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=219 · DISMISS_GROUP"
                }
            ]
        },
        {
            "id": "type-220",
            "title": "从群添加好友",
            "type": 220,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "groupName",
                    "type": "string",
                    "required": "必填",
                    "description": "准确群名称，最多100字符，不支持正则。"
                },
                {
                    "name": "friend",
                    "type": "object",
                    "required": "必填",
                    "description": "name必填，最多100字符。可选markName、markCorp（100字符）、markExtra（500字符）、leavingMsg（200字符）、tagList（最多20个不重复标签，各100字符）、newFriend（布尔）。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 220,\n            \"groupName\": \"示例群\",\n            \"friend\": {\n                \"name\": \"示例联系人\"\n            }\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=220 · ADD_FRIEND_BY_GROUP"
                }
            ]
        },
        {
            "id": "type-221",
            "title": "添加待办",
            "type": 221,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "titleList",
                    "type": "string[]",
                    "required": "必填",
                    "description": "只能包含一个准确的来源联系人或群名称，每项最多100字符，不支持正则。"
                },
                {
                    "name": "receivedContent",
                    "type": "string",
                    "required": "必填",
                    "description": "回复内容、待办内容或卡片说明，最多2000字符。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 221,\n            \"titleList\": [\n                \"示例联系人\"\n            ],\n            \"receivedContent\": \"待办内容\"\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=221 · ADD_NEED_DEAL"
                }
            ]
        },
        {
            "id": "type-222",
            "title": "打卡",
            "type": 222,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 222\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=222 · CLOCK_IN"
                }
            ]
        },
        {
            "id": "type-223",
            "title": "切换企业",
            "type": 223,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "objectName",
                    "type": "string",
                    "required": "必填",
                    "description": "内容标题、微盘文件名、企业名称或发送文件名，最多100字符；文件名不得含路径。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 223,\n            \"objectName\": \"示例企业\"\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=223 · SWITCH_CORP"
                }
            ]
        },
        {
            "id": "type-224",
            "title": "推送链接",
            "type": 224,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。",
                "需要有效的企业微信应用/SDK及关联小程序配置；未配置或SDK拒绝时返回执行失败，不承诺发送成功。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "titleList",
                    "type": "string[]",
                    "required": "必填",
                    "description": "只能包含一个准确的来源联系人或群名称，每项最多100字符，不支持正则。"
                },
                {
                    "name": "objectName",
                    "type": "string",
                    "required": "必填",
                    "description": "内容标题、微盘文件名、企业名称或发送文件名，最多100字符；文件名不得含路径。"
                },
                {
                    "name": "receivedContent",
                    "type": "string",
                    "required": "必填",
                    "description": "回复内容、待办内容或卡片说明，最多2000字符。"
                },
                {
                    "name": "originalContent",
                    "type": "string",
                    "required": "必填",
                    "description": "公开HTTPS链接，最多2000字符，不允许凭据、内网地址或非443端口。"
                },
                {
                    "name": "fileUrl",
                    "type": "string",
                    "required": "必填",
                    "description": "公开HTTPS文件或封面地址，最多2000字符；文件下载最多5MB，不跟随跳转。"
                },
                {
                    "name": "extraText",
                    "type": "string",
                    "required": "可选",
                    "description": "附加留言，最多2000字符。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 224,\n            \"titleList\": [\n                \"示例群\"\n            ],\n            \"objectName\": \"链接标题\",\n            \"receivedContent\": \"链接说明\",\n            \"originalContent\": \"https://example.com/page\",\n            \"fileUrl\": \"https://example.com/cover.png\"\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=224 · PUSH_LINK"
                }
            ]
        },
        {
            "id": "type-225",
            "title": "修改群成员备注",
            "type": 225,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "groupName",
                    "type": "string",
                    "required": "必填",
                    "description": "准确群名称，最多100字符，不支持正则。"
                },
                {
                    "name": "friend",
                    "type": "object",
                    "required": "必填",
                    "description": "name必填，最多100字符。可选markName、markCorp（100字符）、markExtra（500字符）、leavingMsg（200字符）、tagList（最多20个不重复标签，各100字符）、newFriend（布尔）。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 225,\n            \"groupName\": \"示例群\",\n            \"friend\": {\n                \"name\": \"示例联系人\",\n                \"markName\": \"新备注\"\n            }\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=225 · MODIFY_GROUP_MEMBER_INFO"
                }
            ]
        },
        {
            "id": "type-226",
            "title": "撤回消息",
            "type": 226,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "titleList",
                    "type": "string[]",
                    "required": "必填",
                    "description": "只能包含一个准确的来源联系人或群名称，每项最多100字符，不支持正则。"
                },
                {
                    "name": "originalContent",
                    "type": "string",
                    "required": "必填",
                    "description": "原消息准确正文或小程序页面路径，最多2000字符。"
                },
                {
                    "name": "textType",
                    "type": "integer",
                    "required": "必填",
                    "description": "原消息类型，JSON整数1至18；例如1为文本。"
                },
                {
                    "name": "confirmTarget",
                    "type": "string",
                    "required": "必填",
                    "description": "再次输入与操作目标完全相同的准确名称；解散群、撤回消息和删除联系人必填。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 226,\n            \"titleList\": [\n                \"示例群\"\n            ],\n            \"originalContent\": \"待撤回内容\",\n            \"textType\": 1,\n            \"confirmTarget\": \"示例群\"\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=226 · RECALL_MESSAGE"
                }
            ]
        },
        {
            "id": "type-227",
            "title": "批量转发",
            "type": 227,
            "category": "指令消息",
            "status": "pending",
            "summary": "安卓有处理代码；后端未接入",
            "notes": [
                "当前服务端不受理此类型。以下仅为源码协议字段清单，必填规则、默认值和返回值尚未建立可调用契约；不提供可执行请求示例。"
            ],
            "params": [
                {
                    "name": "titleList",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                },
                {
                    "name": "messageList",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                },
                {
                    "name": "nameList",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                },
                {
                    "name": "extraText",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                }
            ],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=227 · RELAY_MULTI_MESSAGE"
                }
            ]
        },
        {
            "id": "type-228",
            "title": "合并转发",
            "type": 228,
            "category": "指令消息",
            "status": "pending",
            "summary": "安卓有处理代码；后端未接入",
            "notes": [
                "当前服务端不受理此类型。以下仅为源码协议字段清单，必填规则、默认值和返回值尚未建立可调用契约；不提供可执行请求示例。"
            ],
            "params": [
                {
                    "name": "titleList",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                },
                {
                    "name": "messageList",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                },
                {
                    "name": "nameList",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                },
                {
                    "name": "extraText",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                }
            ],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=228 · RELAY_MERGE_MESSAGE"
                }
            ]
        },
        {
            "id": "type-229",
            "title": "批量发送",
            "type": 229,
            "category": "指令消息",
            "status": "pending",
            "summary": "安卓有处理代码；后端未接入",
            "notes": [
                "当前服务端不受理此类型。以下仅为源码协议字段清单，必填规则、默认值和返回值尚未建立可调用契约；不提供可执行请求示例。"
            ],
            "params": [
                {
                    "name": "weworkMessageList",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                },
                {
                    "name": "nameList",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                },
                {
                    "name": "extraText",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                }
            ],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=229 · SEND_MULTI_MESSAGE"
                }
            ]
        },
        {
            "id": "type-230",
            "title": "合并发送",
            "type": 230,
            "category": "指令消息",
            "status": "pending",
            "summary": "安卓有处理代码；后端未接入",
            "notes": [
                "当前服务端不受理此类型。以下仅为源码协议字段清单，必填规则、默认值和返回值尚未建立可调用契约；不提供可执行请求示例。"
            ],
            "params": [
                {
                    "name": "weworkMessageList",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                },
                {
                    "name": "nameList",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                },
                {
                    "name": "extraText",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                }
            ],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=230 · SEND_MERGE_MESSAGE"
                }
            ]
        },
        {
            "id": "type-231",
            "title": "语音通话",
            "type": 231,
            "category": "指令消息",
            "status": "pending",
            "summary": "只有常量，无分发入口",
            "notes": [
                "当前服务端不受理此类型。以下仅为源码协议字段清单，必填规则、默认值和返回值尚未建立可调用契约；不提供可执行请求示例。"
            ],
            "params": [],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=231 · VOICE_CALL"
                }
            ]
        },
        {
            "id": "type-232",
            "title": "视频通话",
            "type": 232,
            "category": "指令消息",
            "status": "pending",
            "summary": "只有常量，无分发入口",
            "notes": [
                "当前服务端不受理此类型。以下仅为源码协议字段清单，必填规则、默认值和返回值尚未建立可调用契约；不提供可执行请求示例。"
            ],
            "params": [],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=232 · VIDEO_CALL"
                }
            ]
        },
        {
            "id": "type-233",
            "title": "扫一扫",
            "type": 233,
            "category": "指令消息",
            "status": "pending",
            "summary": "安卓有处理代码；后端未接入",
            "notes": [
                "当前服务端不受理此类型。以下仅为源码协议字段清单，必填规则、默认值和返回值尚未建立可调用契约；不提供可执行请求示例。"
            ],
            "params": [
                {
                    "name": "fileUrl",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                },
                {
                    "name": "fileBase64",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                }
            ],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=233 · SCAN_QR_CODE"
                }
            ]
        },
        {
            "id": "type-234",
            "title": "删除联系人",
            "type": 234,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "friend",
                    "type": "object",
                    "required": "必填",
                    "description": "name必填，最多100字符。可选markName、markCorp（100字符）、markExtra（500字符）、leavingMsg（200字符）、tagList（最多20个不重复标签，各100字符）、newFriend（布尔）。"
                },
                {
                    "name": "confirmTarget",
                    "type": "string",
                    "required": "必填",
                    "description": "再次输入与操作目标完全相同的准确名称；解散群、撤回消息和删除联系人必填。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 234,\n            \"friend\": {\n                \"name\": \"示例联系人\"\n            },\n            \"confirmTarget\": \"示例联系人\"\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=234 · DELETE_CONTACT"
                }
            ]
        },
        {
            "id": "type-301",
            "title": "普通日志",
            "type": 301,
            "category": "设备上报",
            "status": "report",
            "summary": "设备上报；后端已落库",
            "notes": [
                "由安卓设备通过通讯通道上报，不是对外 HTTP 下发接口。"
            ],
            "params": [],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=301 · ROBOT_LOG"
                }
            ]
        },
        {
            "id": "type-302",
            "title": "错误日志",
            "type": 302,
            "category": "设备上报",
            "status": "report",
            "summary": "设备上报；后端已落库",
            "notes": [
                "由安卓设备通过通讯通道上报，不是对外 HTTP 下发接口。"
            ],
            "params": [],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=302 · ROBOT_ERROR_LOG"
                }
            ]
        },
        {
            "id": "type-303",
            "title": "机器人接口测试",
            "type": 303,
            "category": "指令消息",
            "status": "pending",
            "summary": "安卓有处理代码；后端未接入",
            "notes": [
                "当前服务端不受理此类型。以下仅为源码协议字段清单，必填规则、默认值和返回值尚未建立可调用契约；不提供可执行请求示例。"
            ],
            "params": [],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=303 · ROBOT_CONTROLLER_TEST"
                }
            ]
        },
        {
            "id": "type-304",
            "title": "清空执行队列",
            "type": 304,
            "category": "指令消息",
            "status": "ready",
            "summary": "服务端已接入：只清理待执行任务。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "本站只清空尚未投递的任务；已投递、执行中及结果未知的任务保留。结果 source=server_queue，非安卓执行回调。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 304\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=304 · ROBOT_QUEUE_CLEAR"
                }
            ]
        },
        {
            "id": "type-501",
            "title": "获取群信息",
            "type": 501,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "selectList",
                    "type": "string[]",
                    "required": "必填",
                    "description": "添加成员，最多50个不重复名称，每个最多100字符。查询群资料时必填且仅一个群名称。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 501,\n            \"selectList\": [\n                \"示例群\"\n            ]\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=501 · GET_GROUP_INFO"
                },
                {
                    "title": "返回群资料",
                    "body": "成功结果的 metaJson 中含 groupInfo：groupName、groupNumber、nameList、membersComplete，以及可用的群主、公告、备注。membersComplete=false 表示成员采集不完整。"
                }
            ]
        },
        {
            "id": "type-502",
            "title": "获取指定好友信息",
            "type": 502,
            "category": "指令消息",
            "status": "pending",
            "summary": "有入口，但查询方法仅返回 true，无数据处理",
            "notes": [
                "当前服务端不受理此类型。以下仅为源码协议字段清单，必填规则、默认值和返回值尚未建立可调用契约；不提供可执行请求示例。"
            ],
            "params": [
                {
                    "name": "selectList",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                }
            ],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=502 · GET_FRIEND_INFO"
                }
            ]
        },
        {
            "id": "type-503",
            "title": "读取我的信息",
            "type": 503,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。",
                "metaJson.myInfo 返回采集时的个人信息，不修改实名认证或昵称；未采集到姓名判失败。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 503\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=503 · GET_MY_INFO"
                }
            ]
        },
        {
            "id": "type-504",
            "title": "获取群二维码",
            "type": 504,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                },
                {
                    "name": "groupName",
                    "type": "string",
                    "required": "必填",
                    "description": "完整群名称，最多100字符。创建时必须为新名称，不可借建群操作修改已有群。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 504,\n            \"groupName\": \"示例群\"\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=504 · GET_GROUP_QRCODE"
                },
                {
                    "title": "群码含义",
                    "body": "qrcode 是二维码解码后的原始文本，通常为企微群链接；不是二维码图片地址。普通浏览器打不开不代表失效。"
                }
            ]
        },
        {
            "id": "type-505",
            "title": "读取最近聊天列表",
            "type": 505,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。",
                "metaJson.recentList 最多20条，各条文字限制100字符，truncated标记截断；属于近期页面快照，不是完整历史消息。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 505\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=505 · GET_RECENT_LIST"
                }
            ]
        },
        {
            "id": "type-506",
            "title": "获取机器人企业列表",
            "type": 506,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 506\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=506 · GET_CORP_LIST"
                },
                {
                    "title": "企业采集",
                    "body": "仅读取企业切换列表，不切换或创建企业。成功 metaJson.corpList 保存为设备快照；失败保留上次快照。"
                }
            ]
        },
        {
            "id": "type-507",
            "title": "读取客户列表",
            "type": 507,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。",
                "metaJson.contactList 为“我的客户”范围，最多50个名称、每项100字符；totalObserved和truncated说明采集范围，不代表完整联系人详情。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 507\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=507 · GET_ALL_FRIEND_INFO"
                }
            ]
        },
        {
            "id": "type-508",
            "title": "读取已保存群列表",
            "type": 508,
            "category": "指令消息",
            "status": "ready",
            "summary": "后端与安卓可靠任务链路已接入；实际执行结果通过任务查询或回调获取。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "notes": [
                "受理成功仅代表进入任务队列；请查询执行结果或订阅回调。",
                "需安卓扩展能力 extended_operations_v1；每条任务仅一个来源和一个目标。危险操作需 confirmTarget 与目标完全一致；不会自动重试。",
                "metaJson.groupList 只读取通讯录已保存群，最多20个；complete=false，不代表全企业或所有会话群。"
            ],
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "type",
                    "type": "integer",
                    "required": "必填",
                    "description": "指令类型编号；必须为 JSON 数字。"
                }
            ],
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"example_request_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 508\n        }\n    ]\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"任务已受理，执行结果需查询\",\n    \"data\": \"MESSAGE_ID\"\n}",
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=508 · GET_ALL_GROUP_INFO"
                }
            ]
        },
        {
            "id": "type-509",
            "title": "获取本地文件",
            "type": 509,
            "category": "指令消息",
            "status": "pending",
            "summary": "安卓有处理代码；后端未接入",
            "notes": [
                "当前服务端不受理此类型。以下仅为源码协议字段清单，必填规则、默认值和返回值尚未建立可调用契约；不提供可执行请求示例。"
            ],
            "params": [
                {
                    "name": "fileUrl",
                    "type": "协议字段",
                    "required": "待核验",
                    "description": "当前安卓源码中出现的字段，尚未开放业务接口。"
                }
            ],
            "sections": [
                {
                    "title": "协议标识",
                    "body": "type=509 · GET_LOCAL_FILE"
                }
            ]
        },
        {
            "id": "robot-info",
            "title": "获取机器人信息",
            "method": "GET",
            "path": "/robot/robotInfo/get",
            "summary": "读取共享配置。data 包含 robotId、createTime、replyAll、openCallback、encryptType、encryptionVersion、callbackConfig 等。兼容字段不意味着所有定制功能已实现。",
            "category": "机器人配置",
            "status": "ready",
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                }
            ],
            "request": "GET /robot/robotInfo/get?robotId=YOUR_ROBOT_ID",
            "notes": [
                "成功响应采用设备协议 code=200，实际业务数据位于 data。"
            ]
        },
        {
            "id": "robot-online",
            "title": "查询机器人是否在线",
            "method": "GET",
            "path": "/robot/robotInfo/online",
            "summary": "data.robotId 和 data.online。按有效授权与心跳判断，不仅检查最后连接时间。",
            "category": "机器人配置",
            "status": "ready",
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                }
            ],
            "request": "GET /robot/robotInfo/online?robotId=YOUR_ROBOT_ID",
            "notes": [
                "成功响应采用设备协议 code=200，实际业务数据位于 data。"
            ]
        },
        {
            "id": "robot-logins",
            "title": "查询机器人登录日志",
            "method": "GET",
            "path": "/robot/robotInfo/onlineInfos",
            "summary": "date 可省略；填写有效北京时间 YYYY-MM-DD。page 默认1，size 默认20、最多100。返回 lists/count/page/size；记录设备标识、型号/版本、连接IP、心跳、断开时间与原因。",
            "category": "机器人配置",
            "status": "ready",
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "date",
                    "type": "string",
                    "required": "可选 · Query",
                    "description": "有效北京时间 YYYY-MM-DD；省略查询全部日期。"
                },
                {
                    "name": "page",
                    "type": "integer",
                    "required": "可选 · Query",
                    "description": "默认1。"
                },
                {
                    "name": "size",
                    "type": "integer",
                    "required": "可选 · Query",
                    "description": "默认20，最多100。"
                }
            ],
            "request": "GET /robot/robotInfo/onlineInfos?robotId=YOUR_ROBOT_ID",
            "notes": [
                "成功响应采用设备协议 code=200，实际业务数据位于 data。"
            ]
        },
        {
            "id": "robot-corps",
            "title": "获取机器人企业列表",
            "method": "GET",
            "path": "/robot/robotInfo/corpList",
            "summary": "返回 known、corpList、devices；尚未采集 known=false。各设备快照包含 corpList、observed_at，离线快照可能过时。刷新使用506任务。",
            "category": "机器人配置",
            "status": "ready",
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                }
            ],
            "request": "GET /robot/robotInfo/corpList?robotId=YOUR_ROBOT_ID",
            "notes": [
                "成功响应采用设备协议 code=200，实际业务数据位于 data。"
            ]
        },
        {
            "id": "robot-verify",
            "title": "设备接入验证",
            "method": "POST",
            "path": "/robot/verify",
            "summary": "安卓接入使用的校验入口，机器人必须已登记且启用、授权有效；设备接入还需遵守授权设备上限。",
            "category": "机器人配置",
            "status": "ready",
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                }
            ],
            "request": "{\n    \"robotId\": \"YOUR_ROBOT_ID\"\n}",
            "notes": [
                "接入验证成功返回 ok=true、error=null、expiresAt；robotId 可放POST正文或Query。它不创建 WebSocket 会话。"
            ]
        },
        {
            "id": "robot-update",
            "title": "通讯加密与机器人配置",
            "category": "机器人配置",
            "status": "ready",
            "method": "POST",
            "path": "/robot/robotInfo/update",
            "summary": "沿用安卓配置入口；加密、回复策略和业务回调配置共享服务端版本。",
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "encryptType",
                    "type": "integer",
                    "required": "加密配置",
                    "description": "0明文、1 AES。"
                },
                {
                    "name": "secretKey",
                    "type": "string",
                    "required": "可选",
                    "description": "16/24/32字节可打印 ASCII；留空保留。"
                },
                {
                    "name": "encryptionVersion",
                    "type": "integer",
                    "required": "加密变更必填",
                    "description": "当前版本，冲突409。"
                }
            ],
            "request": "{\n    \"encryptType\": 1,\n    \"secretKey\": \"EXAMPLE_16_BYTES\",\n    \"encryptionVersion\": 0\n}",
            "sections": [
                {
                    "title": "通讯兼容",
                    "body": "AES/CBC/PKCS7Padding、固定IV、十六进制 encryptedList。仅加密消息列表，心跳与ACK控制帧保留；客户端需同步配置并声明 aes_list_v1。执行中或结果未知时禁止变更，成功后关闭旧会话并重连。通讯密钥与外部回调签名密钥用途不同。示例密钥需替换为合法长度，公网上同时使用 HTTPS/WSS。"
                }
            ]
        },
        {
            "id": "group-qrcode",
            "title": "独立获取群码",
            "category": "群管理",
            "status": "ready",
            "method": "POST",
            "path": "/wework/getGroupQrcode",
            "summary": "只读取已有群，不创建群，不变更成员。",
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                },
                {
                    "name": "groupName",
                    "type": "string",
                    "required": "必填",
                    "description": "完整群名称，最多100字符。创建时必须为新名称，不可借建群操作修改已有群。"
                }
            ],
            "request": "{\n    \"groupName\": \"示例群\",\n    \"requestId\": \"example_qrcode_20261002_001\"\n}",
            "response": "{\n    \"code\": 0,\n    \"message\": \"取码任务已受理，请查询结果或等待回调\",\n    \"data\": {\n        \"taskId\": \"TASK_ID\",\n        \"messageId\": \"MESSAGE_ID\",\n        \"state\": \"PENDING\"\n    }\n}",
            "sections": [
                {
                    "title": "结果读取",
                    "body": "使用 /wework/taskResult 查询 data.result.qrcode 和 data.outcome.qrcodeStatus。成功为解码文本/链接，失败附错误，不返回历史缓存群码。可同时订阅 task.result 和 group.qrcode 两个事件。"
                }
            ]
        },
        {
            "id": "callback-config",
            "title": "配置、查询和停用业务回调",
            "category": "机器人回调",
            "status": "ready",
            "method": "POST",
            "path": "/robot/robotInfo/update",
            "summary": "安卓与后台编辑同一份配置；通过信息接口查询 callbackConfig，删除效果用 enabled=0 停用。",
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "callbackConfig",
                    "type": "object",
                    "required": "必填",
                    "description": "enabled、url、events、secret、version、reason。"
                },
                {
                    "name": "events",
                    "type": "string[]",
                    "required": "必填",
                    "description": "task.result / message.received / group.qrcode 的订阅集合。"
                },
                {
                    "name": "secret",
                    "type": "string",
                    "required": "首次配置必填",
                    "description": "至少32字节，仅写不读；空值保留。"
                },
                {
                    "name": "version",
                    "type": "integer",
                    "required": "必填",
                    "description": "共享配置版本，冲突409。"
                }
            ],
            "request": "{\n    \"callbackConfig\": {\n        \"enabled\": 1,\n        \"url\": \"https://your-service.example/callback\",\n        \"events\": [\n            \"task.result\",\n            \"message.received\",\n            \"group.qrcode\"\n        ],\n        \"secret\": \"REPLACE_WITH_A_SECRET_AT_LEAST_32_BYTES\",\n        \"version\": 0,\n        \"reason\": \"配置业务通知\"\n    }\n}",
            "sections": [
                {
                    "title": "读取与停用",
                    "body": "GET /robot/robotInfo/get 返回 callbackConfig 的 enabled、url、events、version、hasSecret，不返回签名密钥。停用使用同一更新入口，配置 enabled=0，保留当前 url/events/version 并填写原因。"
                },
                {
                    "title": "接收目标",
                    "body": "默认仅允许公网HTTP/HTTPS的80/443端口，不跟随跳转；拒绝内网和保留地址。局域网目标须由部署者精确配置允许主机。更改配置取消旧版本尚未完成的通知，已发请求可能仍完成。"
                }
            ]
        },
        {
            "id": "callback-standard",
            "title": "回调格式、签名与应答",
            "category": "机器人回调",
            "status": "ready",
            "method": "POST",
            "path": "你的回调接收地址",
            "summary": "服务端向业务系统通知，机器人接入地址与回调接收地址不同。",
            "request": "{\n    \"eventId\": \"EVENT_ID\",\n    \"eventType\": \"group.qrcode\",\n    \"robotId\": \"YOUR_ROBOT_ID\",\n    \"createdAt\": 1790880000,\n    \"data\": {\n        \"taskId\": \"TASK_ID\",\n        \"messageId\": \"MESSAGE_ID\",\n        \"groupName\": \"示例群\",\n        \"qrcode\": \"https://c.weixin.com/g/EXAMPLE\",\n        \"qrcodeStatus\": \"SUCCEEDED\",\n        \"qrcodeError\": null\n    }\n}",
            "sections": [
                {
                    "title": "事件与正文",
                    "body": "外层 eventId、eventType、robotId、createdAt（秒）、data。task.result 为任务详情；message.received 为接收消息；group.qrcode 为群码状态，失败时 qrcode=null。人工核验、过期和取消通过查询获取，不冒充安卓结果事件。"
                },
                {
                    "title": "签名",
                    "body": "请求头 X-Worktool-Event-Id、X-Worktool-Timestamp、X-Worktool-Signature。签名为 sha256= + HMAC-SHA256十六进制；原文为 timestamp.eventId.rawBody。验证原始正文，不要先重新编码JSON。检查时间窗口，验签并幂等落库后返回 HTTP 2xx，5秒内应答。"
                },
                {
                    "title": "重试",
                    "body": "至少一次通知，按 eventId 去重。默认最多5次，重试间隔30、120、600、1800秒。手动重试仍使用原eventId，总尝试上限50次；不重新执行安卓任务。停用或到期机器人停止后续推送，历史未订阅事件不补发。"
                }
            ]
        },
        {
            "id": "callback-demo",
            "title": "PHP 回调验签示例",
            "category": "回调示例",
            "status": "guide",
            "summary": "示例只展示验签，生产接收方仍需校验时间、幂等落库并返回2xx。",
            "request": "$expected = 'sha256=' . hash_hmac('sha256',\n    $timestamp . '.' . $eventId . '.' . $rawBody, $secret);\n$valid = hash_equals($expected, $receivedSignature);"
        },
        {
            "id": "legacy-0",
            "title": "旧版独立配置回调",
            "category": "机器人回调",
            "status": "pending",
            "summary": "尚未建立本站可调用接口契约。请使用已实现的共享配置入口；外部服务定制功能不视为本地已实现。"
        },
        {
            "id": "legacy-1",
            "title": "旧版独立查询回调",
            "category": "机器人回调",
            "status": "pending",
            "summary": "尚未建立本站可调用接口契约。请使用已实现的共享配置入口；外部服务定制功能不视为本地已实现。"
        },
        {
            "id": "legacy-2",
            "title": "旧版独立删除回调",
            "category": "机器人回调",
            "status": "pending",
            "summary": "尚未建立本站可调用接口契约。请使用已实现的共享配置入口；外部服务定制功能不视为本地已实现。"
        },
        {
            "id": "legacy-3",
            "title": "机器人集成微信对话开放平台",
            "category": "机器人配置",
            "status": "pending",
            "summary": "尚未建立本站可调用接口契约。请使用已实现的共享配置入口；外部服务定制功能不视为本地已实现。"
        },
        {
            "id": "agents",
            "title": "代理商账号与授权规则",
            "category": "授权管理",
            "status": "guide",
            "summary": "后台开通账号，前台代理商中心用账号密码登录，最低6位密码。",
            "sections": [
                {
                    "title": "额度规则",
                    "body": "有效且未过期的机器人 ID 占用总额度，续期不重复占用，过期或撤销释放。单 ID 设备数不超过代理商上限，也不能低于当前在线设备数；机器人到期不超过代理商到期。"
                },
                {
                    "title": "身份边界",
                    "body": "代理商只登记新的未占用ID和管理自己名下机器人；已有ID由管理员分配。停用或到期代理商不能登录、授权或接入设备。代理商 Cookie 与管理员 token 独立。"
                },
                {
                    "title": "前台接口",
                    "body": "POST /agentapi/login、logout、add、grant、revoke；GET /agentapi/me、robots。使用同源 HttpOnly Cookie；变更必须 JSON 并携带登录/身份接口返回的 X-Agent-CSRF。这是代理商中心的会话接口，不代替业务 robotId 接口。"
                }
            ]
        },
        {
            "id": "reserved-api-0",
            "title": "批量发送指令",
            "category": "指令消息",
            "status": "ready",
            "summary": "一次原子受理1至100条独立任务；任一参数失败整批拒绝，同机器人仍串行执行。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"batch_example_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 203,\n            \"titleList\": [\n                \"示例群\"\n            ],\n            \"receivedContent\": \"你好，来自 QU-helper\"\n        },\n        {\n            \"type\": 501,\n            \"selectList\": [\n                \"示例群\"\n            ]\n        }\n    ]\n}",
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                }
            ],
            "notes": [
                "批量成功 data 为批次编号；单条成功为消息编号。都通过 /wework/taskResult?robotId=YOUR_ROBOT_ID&messageId=ID 查询。批次返回 tasks 数组，回调按子任务分别发送。",
                "网络失败使用相同 requestId 和原内容重试；取消结果 source=server_queue，不代表设备撤销已发生的操作。"
            ]
        },
        {
            "id": "reserved-api-1",
            "title": "指令插队",
            "category": "指令消息",
            "status": "ready",
            "summary": "指令内 up=true 优先于普通待执行任务；同优先级按提交顺序，不中断当前任务。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"priority_example_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 203,\n            \"titleList\": [\n                \"示例群\"\n            ],\n            \"receivedContent\": \"你好，来自 QU-helper\",\n            \"up\": true\n        }\n    ]\n}",
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                }
            ],
            "notes": [
                "批量成功 data 为批次编号；单条成功为消息编号。都通过 /wework/taskResult?robotId=YOUR_ROBOT_ID&messageId=ID 查询。批次返回 tasks 数组，回调按子任务分别发送。",
                "网络失败使用相同 requestId 和原内容重试；取消结果 source=server_queue，不代表设备撤销已发生的操作。"
            ]
        },
        {
            "id": "reserved-api-2",
            "title": "清除指定客户端指令",
            "category": "指令消息",
            "status": "ready",
            "summary": "只取消尚未投递的指定任务；不存在404，已投递或终态409。清空待执行队列使用type304。",
            "method": "POST",
            "path": "/wework/sendRawMessage",
            "request": "{\n    \"socketType\": 2,\n    \"requestId\": \"cancel_example_20261002_001\",\n    \"list\": [\n        {\n            \"type\": 305,\n            \"originalContent\": \"MESSAGE_ID\"\n        }\n    ]\n}",
            "params": [
                {
                    "name": "robotId",
                    "type": "string",
                    "required": "必填 · Query",
                    "description": "已登记、启用且授权有效的机器人 ID；最长64字符，首位字母或数字，其余允许下划线和横线。"
                },
                {
                    "name": "requestId",
                    "type": "string",
                    "required": "必填 · 正文外层",
                    "description": "16至64位字母、数字、下划线或横线。新操作使用新编号；网络失败重试使用原编号及原内容。"
                }
            ],
            "notes": [
                "批量成功 data 为批次编号；单条成功为消息编号。都通过 /wework/taskResult?robotId=YOUR_ROBOT_ID&messageId=ID 查询。批次返回 tasks 数组，回调按子任务分别发送。",
                "网络失败使用相同 requestId 和原内容重试；取消结果 source=server_queue，不代表设备撤销已发生的操作。"
            ]
        },
        {
            "id": "reserved-api-3",
            "title": "日志问题排查指令",
            "category": "指令消息",
            "status": "pending",
            "summary": "当前服务端未提供此入口。已有协议能力或相近安卓处理不等于可靠任务接口已完成；开放前需要独立校验参数、确认语义与执行结果。"
        },
        {
            "id": "reserved-api-4",
            "title": "历史消息查询",
            "category": "历史消息",
            "status": "pending",
            "summary": "当前服务端未提供此入口。已有协议能力或相近安卓处理不等于可靠任务接口已完成；开放前需要独立校验参数、确认语义与执行结果。"
        },
        {
            "id": "reserved-api-5",
            "title": "独立群模板管理",
            "category": "群管理",
            "status": "pending",
            "summary": "当前服务端未提供此入口。已有协议能力或相近安卓处理不等于可靠任务接口已完成；开放前需要独立校验参数、确认语义与执行结果。"
        },
        {
            "id": "workflow",
            "title": "机器人流程与功能演示",
            "category": "使用指南",
            "status": "guide",
            "summary": "业务系统 → 服务端受理 → 设备执行 → 结果落库 → 业务回调。",
            "sections": [
                {
                    "title": "正常流程",
                    "body": "先授权并检查在线，再发布带唯一编号的任务，保存messageId。服务端记录投递及执行设备，安卓确认接收后操作企微；结果落库后向安卓确认，最后按事件订阅通知业务系统。"
                },
                {
                    "title": "演示建议",
                    "body": "先对允许测试的目标发送一条文本，并核对任务结果；再测试已有群资料查询或独立群码。建群和加人会改变实际企微数据，应选用授权的测试联系人及唯一群名。文档示例不会自动操作真实联系人。"
                }
            ]
        }
    ]
}
