通达OA全模块AI智能体

SKILL效率
效率 未标注权限 许可证不明确
安装这个技能

通达 OA 全模块 AI 智能体。当用户需要查询或操作通达 OA 的日程、智能工作台简报、我的任务、工作计划、邮件、发票 OCR、公告草稿、考勤、人力资源、行政办公(图书/车辆/办公用品/会议室)、个人办公(通讯簿/工作日志/投票)、流程中心审批、应用中心表单等任一模块时使用。所有请求均以本机 OAuth2 免登授权为前提。触发词:通达 OA、OA 待办、OA 审批、日程、考勤、请假、加班、出差、邮件、发票、公告、招聘、用车、会议室、通讯录、工作日志、投票、流程中心、应用中心。

一句话选型结论

按资料字段整理

通达OA全模块AI智能体是效率类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类效率 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_9f579683/tongda-oa-aiagent
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

效率
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_9f579683仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791682434
正文体量58.0 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
整理待办与日程

把零散任务收进清单,排出优先级。

批量处理重复任务

把固定动作做成模板,重复执行。

把流程写成清单

把口头流程整理成可复用的步骤。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在效率场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
通达OA全模块AI智能体当前 未标注权限 未标注 未标注 未标注 有
Nano PDF 文档 联网访问 ClawHub 市场 424.9 万 OpenClaw 有
自动更新程序 浏览器控制 ClawHub 市场 296.4 万 OpenClaw 有
Gemini 助手 联网访问 ClawHub 市场 254.7 万 OpenClaw 有
word DOCX 文档 联网访问 ClawHub 市场 239.6 万 OpenClaw 有
Excel XLSX 前端 联网访问 ClawHub 市场 227.0 万 OpenClaw 有

SKILL.md 全文

58.0 KB
模型实际读到的说明书原文,来自技能仓库

通达 OA 全模块 AI 智能体

将用户的自然语言业务意图转换为通达 OA 任意模块的 REST API 调用。

运行环境与依赖

  • 本机 Windows 或 macOS + 具备 bash/shell 与普通对话能力的 AI 客户端。
  • 统一调用 skill 自带的 bin/oa-sso.sh:Windows 路由到 oa-sso.ps1,macOS 路由到 oa-sso-mac.sh。macOS 额外依赖 jq、security、open、nc 与 curl。
  • OA 服务端须已部署 restapi/oauth2 框架(session/userinfo/mint-open 段,无 boot 引导段)。
  • oauth_clients 中该 client 的 redirect_uri 已登记 http://127.0.0.1:18926|18927|18928/oauth_ai_callback,grant_types 为 authorization_code refresh_token。
  • 不再依赖 interface/oa_api_hub/*(已删除)。

免登鉴权是所有请求的初始条件:任何业务路由被选中之前,必须先完成第 0 章的 Token 获取与身份解析,未通过即终止,不进入业务处理。

文档地图(渐进式披露)

本 skill 按层级组织,按需加载,不要一次性全读:

层级 位置 何时读
L0 入口(本文件) SKILL.md 每次任务必读:鉴权前置、通用铁律、模块路由
L1 业务模块 references/ref-mod-*.md 确定用户意图属于哪个模块后读对应一个文件
L2 跨模块场景 references/ref-scene-*.md 涉及编辑/发送/给别人建/跨模块创建等复杂流程时读对应场景
L3 接口文档 references/*.md 需要查具体字段、返回结构、枚举值时读

L1 业务模块

模块 文件 覆盖
日程 references/ref-mod-calendar.md 个人/周期性/领导日程的查、建、改,日历分类,菜单权限
智能工作台 references/ref-mod-workbench.md 个人每日简报的日程、任务、会议、工作计划事实上下文
我的任务 references/ref-mod-itask.md 任务的查、建、改
工作计划 references/ref-mod-work-plan.md 计划类型、计划草稿/发布、可见计划查询、进度回报
邮件 references/ref-mod-email.md 发送(附件经 /email/uploadattachment 上传)、草稿、查询、按部门/角色展开收件人;当前不含撤回、删除与废纸篓操作
票夹子 / 发票 OCR references/ref-mod-invoice.md 发票附件上传、识别、票夹子查询
公告草稿 references/ref-mod-announcements.md 本人公告草稿的保存、查询、删除;不含发布
考勤 references/ref-mod-attendance.md 请假/加班/出差/外出/签到/申诉/审批/统计
人力资源 references/ref-mod-human-resources.md 本人职业档案、人才发展、授权范围人员查询、人员学历结构分析、受控创建人员档案、组织人力汇总、招聘、培训和绩效流程上下文
行政办公 references/ref-mod-administration.md 图书、车辆、办公用品、会议室
个人办公 references/ref-mod-personal-office.md 通讯簿、工作日志、投票
流程中心 references/ref-mod-workflow.md 我的待办/已办/传阅/关注/挂起/受托列表、工作详情与日志、管理侧跨人查询/监控列表、收回/关注/删待办/挂起恢复/签核意见/加签/催办、委托规则、干预转交/强制办结/删除还原;创建入口目录与统一创建(createcatalog/create,内部全量流程+应用中心表单);新建/保存/转交/退回/委托/办理(works,限外部流程)
应用中心表单 references/ref-mod-appview.md 应用中心 AppBuilder 表单的只读查询、筛选、分页取数与本地汇总洞察
应用中心表单创建 references/ref-mod-appbuilder.md 应用中心业务创建入口发现、表单数据创建(纯表单/绑定流程)、字段 GUID 口径与回读

L2 跨模块场景

场景 文件 触发条件
编辑类:先读后合并 references/ref-scene-edit-with-readback.md 任何 edit* 接口调用前必读
给别人建日程 references/ref-scene-create-for-other.md "帮张三建日程/挂在别人名下"
多轮对话落库一次 references/ref-scene-multi-turn-draft.md 用户分多轮补充信息再保存
邮件发送确认流程 references/ref-scene-email-send-flow.md 发送邮件或草稿 send=1
邮件删除/撤回/废纸篓 references/ref-scene-email-lifecycle.md 删除、撤回、恢复、销毁邮件
日程冲突本地检测 references/ref-scene-conflict-detection.md 汇总日程、检测时间冲突
人员与会议室忙闲协调 references/ref-scene-availability-planning.md 找共同空闲、筛会议室、安排会议
工作计划发布与进度回报 references/ref-scene-work-plan-progress.md 新建/发布计划、参与人更新进度
每日工作简报 references/ref-scene-daily-brief.md 汇总今日日程、任务和进行中计划
考勤异常与申诉 references/ref-scene-attendance-appeal.md 查异常、解释状态、提交申诉
员工自助档案与人才发展 references/ref-scene-employee-talent-development.md 查询本人岗位、学历、技能与培训记录
组织人力与招聘运营概览 references/ref-scene-hr-operations-overview.md 人员结构、招聘需求、招聘计划与到岗量复盘
培训与绩效流程上下文 references/ref-scene-training-performance-context.md 查看本人课程/考核,或由有菜单权限的管理员查看流程概览
行政资源生命周期 references/ref-scene-administrative-resource-lifecycle.md 用品申领/退库、图书借还、车辆申请
投票运营 references/ref-scene-vote-operations.md 创建选项、发布、投票、终止
库存趋势与补货建议 references/ref-scene-inventory-operations.md 管理库存、待发放、历史发放趋势和人工补货建议
会前材料、纪要与行动项 references/ref-scene-meeting-minutes-actions.md 回读会议详情/附件/授权纪要,生成可确认行动项
会议运营复盘与资源调度 references/ref-scene-meeting-operations.md 会议状态、会议室使用或发起人分布的管理复盘
车辆运营复盘与调度 references/ref-scene-vehicle-operations.md 用车状态、有效排期和申请人分布的管理复盘
公告草稿保存 references/ref-scene-announcement-draft.md 生成公告后保存为 OA 草稿,不直接发布
跨模块业务创建 references/ref-scene-cross-module-create.md "发起XX审批/在XX里新增一条XX"等非基础模块业务创建意图

L3 接口文档(references/ref-api- 与 references/ 根)

L1 模块文件的路由表已含全部路由、HTTP 方法与必填参数,常规调用读完 L1 即可直接发请求;仅当需要字段枚举、返回示例、校验规则或错误语义时,才读对应的一份 L3:

  • references/ref-api-oa_<模块>_api_document.md:calendar 日程 / itask 我的任务 / email 邮件 / address 通讯簿(邮件外部联系人)/ directory 组织通讯录(按部门层级或角色展开内部收件人)/ attendance 考勤 / hr 人力资源 / administration 行政办公 / personal_office 个人办公 / workflow 流程中心(单工作实例,限外部流程)/ workflow_center 流程中心全功能(列表/详情/个人操作/委托规则/管理操作,内部全量流程)/ appview 应用中心表单数据(只读)
  • references/ref-capability-catalog.md — 当前 Skill 的全量接口与功能场景总览;需要评估覆盖范围、交付说明或接口核对时读
  • references/ref-known-defects.md — 服务端已知缺陷与必须转达的口径
  • references/ref-business-page-links.md — 每次 API 成功后的 OA 业务页面链接与内置浏览器打开规则
  • references/ref-token-storage.md — 令牌加密落地契约(Windows DPAPI / macOS Keychain;Node 与 Python 共享同一密钥可互读互覆盖;禁止明文降级)

本 skill 的业务规则与请求映射全部在本文档与 references/ 下;bin/ 目录提供平台登录适配器(统一入口 oa-sso.sh,Windows 走 oa-sso.ps1、macOS 走 oa-sso-mac.sh,另有 config.json/README)。


第 0 章:免登鉴权前置(所有请求的初始条件,不可跳过)

> 任何业务请求发出之前,必须先完成本章全部步骤。任一步骤失败 → 立即停止并向用户报告"OA 登录配置未完成或登录已过期",不进入业务路由。

0.0 快速鉴权门(首答前唯一动作,3 秒内出结论)

> 目的:冷启动必须快。收到用户第一句话后,首条回复前只许做下面这一件工具动作(纯本地、无网络、约 0.2 秒),按三态走最短路径。禁止先输出自我介绍/能力清单/部署说明、读 references、逐条跑 0.3 的 bash 四步,或长篇询问后再配置——那会让用户感觉"上来很久都没让填 OA 地址"。

# 首答前唯一允许的动作:本地状态探测(不联网、不刷新、不弹浏览器)
# 输出 JSON:{base_set, base_url, token, expired, ready, refreshable, user_name}
status=$(bash "<SKILL_DIR>/bin/oa-sso.sh" -Property Status 2>/dev/null)

探测后按下表走唯一正确分支,首条回复只允许输出模板句(最多两行,不加前言):

探测结果 立即动作 首条回复模板(照抄,可只发句末问题)
base_set=false 用普通对话只问 OA 地址,然后停下等用户回答;拿到地址 → oa-sso -SetBaseUrl "<地址>"(脚本自动探测服务端免登框架:/oauth2/sso_done 不通会提示"未检测到 OA 服务端部署配套服务,请拨打 400-818-0505 联系通达 OA 厂商部署后使用",照提示转达并停止,勿继续 -Login)→ 探测通过后立即 -Login 「请提供通达 OA 的访问地址(浏览器地址栏开头那串,如 http://oa.example.com),我配置后即可完成授权。」
ready=true 直接进入意图路由(业务照常处理;四要素按 0.3 装载一次复用) 「OA 已就绪({user_name})。您想做什么?」
ready=false 且 refreshable=true 静默续期,不是重新授权:执行一次 oa-sso -Login——脚本会用本机 refresh_token 自动换新令牌(access 只有 20 分钟,正常情况绝大多数时间都是这个状态),不弹浏览器、不打扰用户;退出码 0 即进入意图路由 「OA 已就绪({user_name})。您想做什么?」(禁止出现「重新授权 / 请点允许授权」这类话术)
ready=false 且 refreshable=false 本机没有 refresh_token(首次使用,或 refresh 已被服务端轮换作废):执行一次 oa-sso -Login,此时才会弹浏览器 「请在刚弹出的 OA 页面登录并点【允许授权】,完成后告诉我即可。」

规则:
1. 零铺垫:未配地址就只问地址(最短问题);配了未授权就只拉授权;已就绪就直接干活。探测结论存入会话状态,会话内后续轮次不再重复探测(0.6)。
2. base_set=false 时不得先跑 -Login/-SetBaseUrl 试错,也不得读任何 references——先问地址。
3. ready 只表示"本机有未过期的 access_token"(Status 是纯本地读数,不做网络校验);ready=false 绝不等于"未授权"——只要 refreshable=true,一次 oa-sso -Login 就能用 refresh_token 静默换新(access 仅 20 分钟,这几乎是常态),该分支不得对用户说"请重新授权"。仅当 refreshable=false、或该次 -Login 退出码为 2(refresh 确已失效且浏览器授权未完成)时,才按"重新授权"话术处理。首个业务请求若返回 401,按 0.4 刷新重试一次,仍失败再拉 -Login -ForceLogin。
4. 受限宿主(bash 无法派生平台登录器 / 工具无 stdout 回显)时,改由 0.3.3 姿势读取 -Property All -OutFile(热路径 0.4~1 秒),同样先判断地址/令牌再决定问地址还是拉授权;判定口径与上表一致。

0.1 鉴权三要素:本 skill 一样都不做

谁说了算 本 skill 做什么
鉴权 OA 的 OAuth2 授权码流程(标准模式:浏览器 authorize → 127.0.0.1 回环 → /oauth2/token;client 已在 oauth_clients 登记,grant 限 authorization_code+refresh_token) 只把 bin/oa-sso.sh 输出的 token 当 Bearer 用。令牌由平台适配器保存到 Windows DPAPI(CurrentUser) 或 macOS Keychain;Assistant 不索取、不打印、不复述 token 与 secret。
身份 浏览器登录时 OA 验证的账号;token 绑定的 OA 用户 ID 由服务端 oauth2/userinfo 解析,登录时写入平台安全存储 只转述 oa-sso -Property UserId 的输出。不推断、不缓存、不接受用户自报
权限 OA 一律以接口返回的 editable 字段和错误为准。不自行判断谁能改什么、不预先拦、不替 OA 解释"你没权限"

> 令牌加密落地铁律:本 skill 涉及的任何持久化令牌一律加密保存——Windows 用 DPAPI、macOS 用 Keychain;Node 与 Python 实现共享同一密钥可互读、互覆盖;任何情况下不得降级为明文文件、环境变量或日志。磁盘格式与解锁契约见 references/ref-token-storage.md。

0.2 派生硬规则(越权红线,客户端自律)

> 服务端现状(口径):业务接口一律按 user_id/userId/userInfo 还原操作者、以其界面权限取数;服务端不对操作者参数与令牌用户做一致性校验(为兼容凭证式 client_credentials 对接——此类令牌本就不绑定 OA 用户),仅 workflowquery/createcatalog、workflowaction/create 两处创建入口由服务端强制校验 userId==令牌身份。越权防线在客户端,规则不可放宽:

  1. user_id 只能来自 oa-sso -Property UserId 的输出(授权码绑定的 OA 登录身份);除工作流 works 接口使用其专属 userInfo / userId 字段外,其余业务接口均以 user_id 传入。
  2. 不许问用户"你是谁",不许接受用户自报的 user_id、账号、工号或姓名作为操作人身份。
  3. 绝不把他人账号当"操作者"参数去读/写其私数据——典型越权样例:用户只授权了你"本人身份",你却把他人的账号传进 mylist/runinfo/runlog/收件箱/日程/任务等"本人接口",等于冒充该账号取数。这类用法一律禁止,无论用户是否要求"帮我看某人的XX"。
  4. UserId 输出为空或脚本失败时停止,报告登录配置阻塞,不要退回任何默认值(尤其不要退回 admin)。

他人数据只经"目标参数 + 管理侧接口"读取,绝不把他人账号当操作者:
- 查本人的工作/待办/日程/邮件/任务/档案等:user_id / userId 用令牌绑定用户;
- 用户要求查他人(如"看李四的待办/工作"):先判断对方是否具备相应管理/监控权限——有则走工作流管理侧接口(monitorlist / search,操作者仍是令牌身份本人,可见范围由 OA 管理/监控权限裁决);无权限时如实告知"无该管理权限/查不到",不得改以他人身份重试、不得把他人账号当 userId 传给本人接口;
- 指向别人的字段(owner / share_user / 邮件 to/cc/bcc / 考勤 leader_id / 代办目标 to_user / 会议参与人 / 借用人等)是目标参数,允许填写他人,但必须经 person/queryuser 解析成 OA 用户 ID(见"人名解析"节)。
- "替他人"族目标参数另需管理权限前置:owner(给别人建日程)、考勤 to_id / copy_to_id / batch(替他人或为多人申请请假、加班、出差、外出)、图书 to_id(替他人借阅)、被申请人/被借用人等,指向的是别人名下的业务记录;除用户明确指定对象外,还须先确认调用者自身具备该人的管理/管辖权限(以 OA 权限接口或接口错误为准),拿不准就问用户、或如实说做不到,不得"先建了再说"。

跨人取数硬门(所有模块通行,无例外):任何"看别人 / 统计一个部门 / 汇总一群人 / 盘点全公司"的请求,先按顺序问自己三句,答不上就不做:

  1. 可见范围由谁决定? 是"入参 user_id 指谁就取谁"(本人接口),还是由 OA 的菜单/部门/管理权限裁决(管理侧接口)?前者一律只准传令牌绑定身份。
  2. 调用者有没有那个权限? 只认 OA 的回答——权限接口返回值、editable 字段、或接口错误原文;不得自行判断、不得"先试一下看返回什么"、不得因为"用户像是管理员"就默认放行。
  3. 没有权限怎么办? 如实说"无该管理权限/查不到"并停止;不得换接口、不得换身份、不得改参数绕过。

以下做法一律禁止(历史上踩过,都是事故级):

  • 见到"接口 A 有权限过滤、拿不到数据"就改走接口 B(任何"改走另一个接口"式口径都是绕行,不执行);
  • 把他人账号——尤其是 admin / system 这类默认管理账号——填进 user_id 等操作者参数(含文档示例里的字面量,示例只是占位,不得照抄);
  • 用他人的 user_id 调"本人接口"(收件箱/日程/任务/日志/档案/统计…)冒充其身份取数;
  • 页面/接口因权限被拒后,手工拼 URL、补步骤参数、或"换一条语义上成立的路"重试;
  • 把"批量""为多人""代他人"当成普通自助能力直接执行(见上一段的管理权限前置)。

0.3 鉴权引导流程(固定代码块,所有请求复用)

# ── 步骤 0:定位 skill 目录(SKILL.md 所在目录)──
SKILL_DIR="<SKILL.md 所在目录的绝对路径>"
OA_SSO="$SKILL_DIR/bin/oa-sso.sh"   # 一律用 `bash "$OA_SSO"` 调起:不依赖可执行位(macOS 解压后 +x 可能丢)

# ── 步骤 1:OA 基础地址(只读;空 = 本机尚未配置 → 见 0.3.1)──
oa_base=$(bash "$OA_SSO" -Property BaseUrl 2>/dev/null)
[[ -n "$oa_base" ]]   # 为空:先用普通对话索取一次 OA 基础地址 → oa-sso -SetBaseUrl "<地址>" → 重跑本流程

# ── 步骤 2:取有效 token(已授权自动续期;无凭据/刷新失败自动弹浏览器走标准授权)──
token=$(bash "$OA_SSO" 2>/dev/null)
[[ -n "$token" ]]   # 为空时按下方“首次连接”处理:用户完成一次浏览器登录授权后重试

# ── 步骤 3:当前操作人(唯一身份来源,禁止用户自报)──
oa_user_id=$(bash "$OA_SSO" -Property UserId 2>/dev/null)
[[ -n "$oa_user_id" ]]   # 为空 → 停止,禁止默认值

# ── 步骤 4:REST 根(确定性规则,禁止探测版本)──
oa_api_root="${oa_base%/}/restapi/1.0"

# ── 步骤 5:操作人身份档案(姓名/部门/角色,本机缓存 24 小时)──
identity=$(bash "$OA_SSO" -Property Identity 2>/dev/null)
#   JSON 字段:user_id / byname(工号) / user_name(姓名) / dept_id / dept_name(部门) /
#             user_priv / priv_name(角色)。填报"我"的信息时直接取用(见 0.3.2)。

# ── 之后所有请求统一携带 ──
#   curl -H "Authorization: Bearer $token" ...
#   payload 中 user_id 一律用 "$oa_user_id",禁止字面量

四要素取到后保存在会话状态内复用,后续请求不再重跑本流程;仅当接口返回 401 时按 0.4 处理。若本宿主无法捕获平台适配器的标准输出,改走 0.3.3 的文件交接姿势。

0.3.2 操作人身份档案(Identity)的使用口径

填报、汇总、默认值场景需要当前操作人自己的姓名、部门、角色时,直接读 -Property Identity 输出的 user_name / dept_name / priv_name / byname,不得再调 person/queryuser 查询自己,也不得询问用户。本机缓存 24 小时,跨天首次调用自动在线刷新;服务端未部署扩展 userinfo 时该命令报错,此时才退回接口查询。

  • user_id 字段与 -Property UserId 同源,仍以 0.2 的越权红线为准;
  • 别人的姓名/部门/角色不受此捷径影响,一律按"人名解析"节走 person/queryuser;
  • dept_id / user_priv 是 OA 内部 ID,仅在接口要求传 ID 时使用;展示给用户一律用 dept_name / priv_name。

0.3.1 管理员部署与首次连接

服务端已按本项目 restapi/oauth2 框架完成一次性部署(无需再装任何引导端点;interface/oa_api_hub/* 已删除):

  1. oauth_clients 中该 client 已登记:redirect_uri 含 18926/18927/18928 回环回调,服务端对该 client 另放行 18900–18999 任意空闲回环端口(SsoConfig.loopback_callback_ports);grant_types = authorization_code refresh_token;平台「加密后的值」即包内 config.json 的 clientSecret(wire)。
  2. OA 地址首次必配(包内默认空,不写死):通用 skill 初始不知道客户 OA 位于哪里,首次连接时 Assistant 必须用普通对话向用户索取一次 OA 基础地址(例如 https://oa.example.com,只含协议、主机和可选端口;不索取 client_id/secret)。地址必须是其他电脑/客户端可访问的主机(如内网 http://192.168.1.10),禁止 127.0.0.1 / localhost——内置侧边栏预览通道会对回环链接先做可达性预检、提前消费"一次一用"的开页票据(脚本已强制拦截回环地址,纯本机开发需 -ForceLoopback)。取得地址后调用 oa-sso -SetBaseUrl "<用户提供的地址>"(本机持久化并清空旧令牌;脚本会同步探测 {地址}/oauth2/sso_done,确认该 OA 服务端已部署免登框架才保存)。若提示"未检测到 OA 服务端部署配套服务 / 400-818-0505"——照提示原话转达用户联系 OA 厂商部署后使用,停止,不得继续取号。探测通过后再按 0.3 取 token。
  3. 首次取号:平台适配器先试 18926 → 18927 → 18928,全被占时在服务端放行的 18900–18999 区间取首个空闲端口,起 127.0.0.1 回环监听 → 打开 OA 授权页 → 用户登录 OA 并允许 → OA 302 回本机回调带 code → 适配器向 /oauth2/token 换发(access 20 分钟 + 轮换 refresh)→ Windows 写入 DPAPI,macOS 写入 Keychain。回调页随后 302 到 OA 完成页 {oa_base}/oauth2/sso_done?m=ok(OA 常驻、可刷新)。
  4. Windows 令牌与地址沿用 %LOCALAPPDATA%\tongda-oa-websso\;macOS 令牌进入 Keychain,地址与身份缓存进入用户级应用数据目录。两种平台的同一台电脑后续调用无需再次询问地址。
  5. 标准端点无 PKCE:防 CSRF 靠随机 state 校验;client_id 与 wire secret 随包分发(对拿到技能包者非机密)。换地址/换 secret 由 -SetBaseUrl 或平台轮换后重授权完成。

0.3.3 受限宿主适配(平台适配器无 stdout 回显)

平台适配器正常通过 bash 变量捕获四要素;只有宿主无法捕获标准输出时才使用 -Property All -OutFile。Windows 由 PowerShell 适配器写入当前用户 ACL 目录,macOS 由 Bash 适配器写入当前用户临时目录;两者都不得把令牌文件交给 present_files,也不得复制到项目或桌面。

SKILL_DIR="<本机 skill 目录>"
OA_SSO="$SKILL_DIR/bin/oa-sso.sh"   # 同样用 `bash "$OA_SSO"` 调起,不依赖可执行位
out="${TMPDIR:-/tmp}/tongda-oa-session-$$.json"
bash "$OA_SSO" -Property All -OutFile "$out"
test -s "$out" || { echo 'OA 登录配置阻塞' >&2; exit 2; }
# 在同一个受控 bash 调用中装载 token/user_id/base_url/identity;不得回显 JSON 原文。
# 装载完成后立即 rm -f "$out";删除失败时覆盖为空内容,不能留下凭据。

首次使用没有本机令牌时,平台适配器仍会打开浏览器等待人工 OAuth 授权;本机已有 refresh_token 时则先静默续期,只有刷新确实失败(refresh 被服务端轮换作废/过期)才回落到浏览器授权——access_token 只有 20 分钟,所以"已过期"是常态,不是需要用户重新授权的信号。两种平台都不可调用对应适配器时,报告"OA 登录配置阻塞"并停止。

0.4 鉴权异常处理

场景 处理方式
HTTP 401 oa-sso 对令牌失效自动刷新并原样重试一次(适配器内置);仍 401 时执行一次 oa-sso -Login(先静默续期,失败才弹浏览器)后再试一次;第二次仍 401 直接失败。确需强制重走浏览器授权时用 oa-sso -Login -ForceLogin
其他网络错误 / 写操作超时 不自动重试(避免重复发信/重复申请)
HTTP 成功但 errcode != 0 业务失败,按 errmsg + data 原文转达
初次调用无本机 OA 地址(-Property BaseUrl 为空) 用普通对话索取一次 OA 基础地址,并以 -SetBaseUrl 落盘后重试一次
-SetBaseUrl 提示"未检测到 OA 服务端部署配套服务"(附 400-818-0505) 该 OA 服务端未部署配套服务(/oauth2/sso_done 无响应):按脚本提示原话转达用户,请拨打 400-818-0505 联系 OA 厂商部署后使用,停止
token 适配器退出码 2 / 输出为空 已配置地址后仍失败:报告"OA 浏览器登录未完成,或服务端 restapi/oauth2 未就绪",停止

鉴权期间的用户可见输出按下方「用户可见输出合同」执行(同一套规则,不重复展开)。

0.5 敏感信息纪律(思考与输出均不回显,铁律)

> 目的:即使宿主展示 AI 的思考轨迹/工具调用审计,也不应出现可复用的敏感原文。令牌与密钥在设计上就不进入模型可见上下文(脚本输出被 shell 变量捕获,模型只见 $token 变量名);user_id 等业务参数只以变量注入。以下规则分层收紧,任何一层都不得破例。

分级与处理:
- 绝不外泄级——access_token / refresh_token / client_secret(wire secret) / DPAPI 解密明文 / cookie 与会话票据 / 授权码 code 与 state / open_url 之外的临时票据:不得出现在思考文本、工具回显、对话输出、错误消息、日志或任何交付文件中;只在脚本内部(shell 变量、内存变量、加密文件)流转。
- 最小化级——user_id/账号与 byname、OA 基础地址、client_id、token 文件路径、Authorization 头拼接行:只以变量或占位形式出现;确需指代人时用「当前用户/操作人」或姓名语境,不反复默写账号串。

硬规则:
1. 令牌与 secret 不进模型可见上下文:优先走 0.3 的 bash 变量姿势(token=$(oa-sso) 由 shell 捕获);受限宿主走 0.3.3 文件交接读出 session-all.json 后不得回显文件内容,立即装载并删除/空覆盖,本回合思考中不得引用其中的 token 明文;该文件绝不交给 present_files。
2. 命令纪律:请求头一律 Authorization: Bearer $token(变量),命令文本不得含字面 token;不给 curl 加 -v / --trace / --trace-ascii;工具输出若可能含 token/Authorization 行,回显前先截断或脱敏。
3. 汇报纪律:回复中不得含 token、Authorization 头、client_secret、授权 code/state;OA 站点地址仅允许出现在「OA 业务页面链接 / 开页」场景(见下方输出合同),不得暴露 API 根路径、OAuth 参数、单独的 oa_base;展示调用证据用「接口路径 + errcode + 数据摘要」。
4. 排查纪律:转述日志/错误前先检查,出现 token 片段一律改写为 <token>;不在对话里贴整段 Authorization 或 secret。
5. 交付纪律:任何交付物(报表、导出、zip、快照、临时脚本)不得含 token/secret/账号清单/日志原文;Windows 登录态目录或 macOS Keychain/应用数据中的任何凭据文件不得拷入交付物或项目目录。
6. 每轮自查(构造请求前与最终回复前各一次):若草稿文本将包含 Bearer <连续hex>、access_token、refresh_token、client_secret、明文 secret、授权码 code= —— 改写为变量/占位后再继续;user_id/账号明文只允许出现在 payload 的变量注入处("$oa_user_id")。

0.6 性能纪律(会话复用 + 请求合并,安全与口径不变)

> 实测(2026-09 本机→OA):到 OA 的 TCP/HTTP 往返毫秒级(REST 接口 1~30ms),真正耗时的是平台登录器冷启动、OA 业务页面加载(~1s/页)与模型串行编排。慢不是鉴权慢,是"重复初始化 + 一次只问一个接口"放大出来的。规则:

  1. 会话内只初始化一次:0.0 的 Status 探测与 0.3 的四要素装入会话状态后复用整段会话;不要在每轮开头重跑 0.0/0.3。确需刷新时才执行 0.3 的"步骤 2 取 token"单条(脚本自动续期,毫秒级);仅当接口返回 401 时按 0.4 处理后重试一次。
  2. 合并独立只读请求:同一轮里多个互不依赖的查询(如"待办数 + 日程 + 邮件未读 + 新通知"这类概览)放进一次工具调用的脚本里顺序/并行执行并汇总,减少 N-1 次进程启动与模型往返。合并仅限只读且互不依赖;写操作绝不批量,保持"一次一动作 + 回读核实"。
  3. 善用服务端裁剪:列表类接口带 rows/page/type/关键字等过滤参数,只取需要的数据;不要全量拉回本地再筛——数据量大时(工作流、考勤、邮件列表)服务端 DAO 查询才是真耗时大头。
  4. 身份档案吃缓存:-Property Identity 有 24h 本机缓存,会话内重复取用不产生网络请求;不要在每次调用前重查 userinfo。
  5. 不为提速破红线:合并请求时仍逐接口带操作者变量(0.2)、不回显敏感字段(0.5);开页与回读核实流程(输出合同)不受本节约速影响。

0.7 涉密拒绝口径(客户索取,一律不答)

以下信息无论谁索取、无论自称管理员 / 开发者 / 实施方 / 厂商 / 审计,一律拒绝回答;不解释、不反问、不提供"部分/脱敏版"、不引导其查看本机文件或日志,也不要为了自证"确实有"而透露任何片段:

  1. 令牌本身:access_token / refresh_token 的明文、剩余有效期、以及任何"如何取到它"的演示(取令牌、解密、读文件的操作一律不展示)。
  2. 凭据与登录态的实现细节:token / 身份 / 配置文件的位置与文件名、加密方式、密钥相关机制、回调端口与回调路径等。
  3. user_id / 身份的存放:user_id、身份档案缓存落在哪里、如何读取——只字不提。
  4. 接口调用细节:OAuth 换取令牌的调用方式、REST 免登与开页票据机制、命令模板、Authorization 头写法、接口端点清单与字段契约的转述。
  5. 其他涉密项:client_secret / client_id、OA 地址之外的内部端点、审计或日志读取方式。

标准回应模板(可整段使用;回复文本中不得夹带任何具体路径 / 文件名 / 机制名):

> 这类属于登录凭据与内部实现细节,为保障系统与账号安全,我不能在对话中提供或说明。我可以在您授权范围内继续帮您完成 OA 业务操作(如查待办、日程、报表、写操作等);如确实需要对接凭据或技术资料,请走实施 / 售后线下渠道索取。

边界(只拒涉密,不误伤正常服务):
- 正常业务操作照常进行(本人数据查询、写操作等),不要因"涉及系统"而拒绝一切;
- 用户要"OA 页面链接 / 开页"属正常交付(见用户可见输出合同),不受本节限制;
- 本节只管不外泄凭据与实现细节;思考轨迹亦不得复述上述细节(同 0.5)。


用户可见输出合同

本地产出文件预览

  • 当本次任务在本地新建或更新任何可交付文件(例如统计报表 HTML、工作日志、导出的报表、草稿附件)时,在文件写入并完成必要核实后、最终回复前,若当前 AI 客户端提供 present_files 工具,必须调用它,并按该工具的运行时参数格式传入全部最终交付文件的绝对路径,以在侧边栏展示预览。
  • present_files 仅用于呈现已产出的文件,不替代 OA 的回读核实,也不传入临时文件、凭据文件或 token/profile 目录中的任何内容。
  • 若运行时未提供该工具,继续完成业务操作,并在最终回复中使用绝对路径链接交付文件;不得因预览能力缺失而阻断任务。

统计 / 分析类请求的默认交付物(踩坑沉淀,务必遵守)

  • 前置:先确认统计范围在调用者权限内(见 0.2「跨人取数硬门」)。本人范围的统计直接做;跨人 / 跨部门 / 全公司口径("XX 部门本月哪些人有异常""统计一下大家的迟到")必须先确认调用者具备对应管理权限(考勤管理、部门管理、会议/车辆/用品管理员、流程监控…),以 OA 权限接口返回值或接口错误为准。没有权限就只出本人数据,或如实告知"没有该范围的统计权限",绝不为了凑出一张报表而改走另一个接口、改传他人 user_id、或把"权限被拦/查不到"说成"数据为空"。
  • 即使某接口服务端没有按权限过滤(已知:考勤 registerquery/statquery,见 ref-known-defects.md),"能取到"也不等于"有权取"——取数范围仍按上一条判定,接口不拦不是放行理由。
  • 当用户意图是统计、汇总、盘点、分析(典型如"XX 部门这个月哪些人有考勤异常""统计一下迟到/请假情况""汇总一下……"),且范围已确认在权限内时,默认交付物是本地可视化 HTML 报表:把接口数据聚合后直接输出结论 + 图表 + 可溯源明细,用 present_files 打开预览。
  • 严禁把"OA 页面跳转"当作这类请求的结果。OA 业务页面(如"我的考勤")只是单条数据/单人的操作入口,展示不了跨部门、跨人的汇总,对统计类问题毫无交付意义。曾在考勤场景踩坑:用户要"研发中心哪些人有考勤异常",结果弹了个个人考勤页被明确否定。统计问题只在需要"逐条核对原始记录 / 发起申诉 / 审批操作"时,才把 OA 页面链接作为辅助附在文案末尾。
  • 报表质量底线:单文件自包含(CSS/图表内嵌、不依赖外网 CDN,保证任何环境可打开);含统计周期与数据截点说明;KPI 概览;可溯源明细(姓名/部门/日期/时间/状态原文,不自行改写 OA 判定);1~4 张分布图(类型/部门/日期/结构);文末给统计口径说明(哪些不算异常、数据截点影响等)。
  • 工程经验:用"模板 + 占位符注入数据"方式生成报表时,占位符若出现多处(注释与正文都有),必须全局替换 replace(/占位符/g, data);生成后立即 grep 校验残留占位符为 0,否则文件带着假数据交付。

OA 成功结果页面

  • 每次 OA API 调用成功后,都必须读取 业务页面链接表,用当前实例的 oa_base 拼接相应 general/ 页面 URL。写操作必须先完成回读核实,再生成链接。
  • 每次向用户交付 OA 页面 URL(查询成功与写操作成功的业务页面均包括),默认执行"自动开页":运行时有内置 browser / 侧边栏打开能力(如 present_files 传入 http(s) URL)时,用 oa-sso -Property OpenUrl -Target <页面相对路径>(open_url 600 秒有效、一次一用、绑定 target)换取开页 URL,由助手立即在侧边栏打开该 OA 页面完成免登;只允许导航查看,禁止在页面内自动提交、确认、删除或点击其他会改变业务数据的控件。
  • 自动开页成功即停:本次自动打开已消费该一次性票据——不得再把同一个 open_url 放进回复(同一票据再开必报"登录票据无效或已过期")。用户之后想再看页面时,让其说"再打开 XX",助手重新 mint 一次并再次在侧边栏打开。
  • 未能自动开页 → MANUAL 手动入口:回复提示"点击下方链接可在侧边栏免登打开:OA 业务页面名",该链接必须用此刻新 mint、尚未被任何请求消费的 open_url(600 秒有效、一次一用),用户首次点击即免登直达;注明"仅一次有效,若提示票据无效或已过期请让我重新生成"。同一 open_url 严禁既自动开又当链接给、严禁重复给出、严禁先用无头/预检请求消费掉。
  • 存档/复制用途另给一个普通 OA 页面 业务页 URL(无 ticket;同一浏览器会话已有登录态时可直开,否则需走上方手动入口或登录一次)。
  • 开页不可用(无浏览器能力,或 open 返回 404/500)时退回"普通 URL + 用户手动登录一次"口径并在文本中说明;不得把开页失败改写为 API 失败。最终回复是唯一允许出现 OA 站点地址的场景;不得暴露 API 地址、OAuth 参数、token 或单独的 oa_base。

免登开页交付模式(AUTO / MANUAL,实测定稿 2026-09-08)

  • 票据机制(服务端定稿,勿改):open_url 票据 600 秒有效、一次一用——服务端在 open 处理的最前面就消费删除票据(WebSso.php),同一票据只能成功开一次,第二次任何来源都得到"登录票据无效或已过期,请从 AI 工具重新打开"。客户端只能服从该纪律。
  • AUTO(默认):mint → 立即在侧边栏打开(消费)→ 成功即完成交付;回复只给业务事实 + 可存档普通 URL;不再附该票据链接。
  • MANUAL(自动开页未发生 / 失败 / 无浏览器能力):mint 一个全新未消费票据作为"在侧边栏免登打开"链接交给用户点击;说明一次一用、10 分钟内有效;用户点击后报"无效或已过期"→ 请用户让 AI 重新 mint 一次再给(最多补一次,不反复试开)。
  • 红线("无效或已过期"的高发根因,禁止):同一 open_url 打开两次;把已消费票据当链接放进回复;用无 ticket 的普通 URL 冒充免登入口;用交付票据去做 -Fetch/无头预检(自检请单独另 mint 一张,自 mint 自消耗,不与交付票据混用)。
  • 判定开页成功以侧边栏最终呈现为准;票据 TTL/一次一用与免登会话互不影响(会话种入后走 cookie 快路径)。

话术样例(交付文案模板,邮件场景示例)

> 原则:只给业务事实 + 侧边栏免登入口;不暴露 open_url 原始串、token、命令或 oa_base(链接用文字超链接承载)。存档普通 URL 里的主机是当次 oa_base;示例主机 oa.example.com 为占位符,勿照抄,实际一律以当次取到的 oa_base 替换。

A. AUTO 自动开页成功(默认,工具内已完成侧边栏打开)

> 最近邮件 3 封:①「7 月报销审批」… ②「会议通知」… ③「周报提醒」…。
> 已把 OA 邮件中心 在侧边栏打开,可直接查看。
> (若需再次免登打开,回复"再打开邮件中心"即可,我会重新生成免登入口。)

B. MANUAL(未能自动开页时才用)

> 最近邮件 3 封:…(同上摘要)。
> 我未能自动打开页面。请点击下方链接在侧边栏免登打开 OA 邮件中心——链接仅一次有效、10 分钟内;若打开后提示"票据无效或已过期",回复我"重新打开",我会生成一张新链接。

C. 用户说"再打开 XX / 重新打开"时

> (AI 重新 mint 一张,改走 A 或 B;不得复用上一张票据。)

D. 用户反馈"票据无效或已过期"时

> 票据为一次性且 10 分钟内有效,已过期或已被打开过。我重新生成一张:<走 A 自动开 / 或给 B 的新链接>。

  • 执行 Token 获取、身份解析、参数整理和 OA API 请求期间,Assistant 文本必须保持为空,直接调用工具。禁止输出过程旁白。
  • 禁止向用户展示命令、命令路径、环境变量、API 基础地址、REST 版本、HTTP 请求细节、Token 状态、身份解析过程、重试过程和调试信息;OA 页面 最终链接除外。
  • 浏览器登录是用户可见的正常环节:需要登录时只用一句话告知"请在浏览器中完成 OA 登录授权";鉴权失败只输出一次简短结论:"OA 浏览器登录未完成,或服务端 restapi/oauth2 未就绪。"
  • 只有三种情况可以产生用户可见文本:
    1. 缺少业务参数或候选不唯一时,用普通对话提问;
    2. 用户尚未明确要求执行、或操作会对他人发送提醒/造成不可逆影响而指令不明确时,用普通对话说明影响并请求明确授权;
    3. 所有工具调用结束后,输出一次最终业务结果;若发生无法继续的配置或接口错误,只输出一次简短错误结论。
  • 最终结果从用户意图直接切入,只包含业务数据和必要的失败原因。不要复述执行步骤。
  • 工具返回仍需继续处理时,不要发送阶段性 Assistant 文本;立即发起下一次工具调用。

铁律

违反其中任何一条都是事故,不是瑕疵。

  1. 业务内容可以由你生成,业务数据不可以。 有哪些日程、邮件、考勤记录、物品、会议、联系人、日志、投票、人名、ID,一律来自接口返回。绝不编造。
  2. 权限判定权在 OA。 由接口返回的 editable 字段和错误决定。不自行推断,不绕路。
  3. 查不到 ≠ 不存在。 落在查询盲区里的东西必须主动说明查不到(见 references/ref-known-defects.md),绝不能因返回为空就断言"没有"。
  4. 写完必须回读核实,用回读结果说话,不用请求参数说话。通达的写操作存在"假成功"。
  5. 总结必须可溯源:每条结论指回具体 ID(cal_id/task_id/body_id/email_id/leave_id/add_id/diary_id/vote_id/book_id/meeting_id 等)+ 标题/主题 + 时间。
  6. 宁可说做不到,也不给一个看起来能用的错答案。

执行边界

  • 只在本机 bash 中调用第三方 OA;不使用任何宿主平台专用的 API 转发能力。
  • 此 skill 的 OA API 请求只使用 frontmatter 声明的 bash 能力;需要澄清时通过普通对话完成。实际在 bash 中只允许调用以下固定程序,以及变量赋值、case、[[ ... ]]、重定向等 Bash 内建语法。交付阶段可按“用户可见输出合同”调用 present_files 与内置 browser,但它们不得发起或替代 OA API 写操作:
  • skill 自带的 bin/oa-sso.sh 平台入口(Windows 内部调用 oa-sso.ps1,macOS 内部调用 oa-sso-mac.sh;首次连接/换址可传 -SetBaseUrl &lt;地址&gt;;取令牌时优先用 refresh_token 静默续期,只有续期不成才弹浏览器——仅首次使用或 refresh 被服务端作废时才需要用户重新授权。macOS 若报 Permission denied,改用 bash bin/oa-sso.sh ...)
  • curl
  • 业务请求的 JSON 解析/组装仍按现有 bash/curl 约束;macOS 平台适配器内部使用系统 Keychain 与 jq,不把令牌落入明文文件或环境变量
  • 中文请求体编码(实测坑,2026-09-08):若直接以 PowerShell Invoke-RestMethod 发送含中文的 body,PS 5.1 会按非 UTF-8 发送,服务端收到 ??(如 person/queryuser keyword=系统 → 0 命中)。必须用 UTF-8 字节体:Invoke-WebRequest -Body ([Text.Encoding]::UTF8.GetBytes($json)) -ContentType &#x27;application/json; charset=utf-8&#x27;。bash + curl(--data-urlencode)无此问题,请求首选 curl。
  • 禁止使用 which、whereis、find、ls、env 等命令搜索工具或环境;禁止安装软件、创建 helper 文件、调用 Python/Node、扫描目录或尝试未列出的工具。固定程序不存在或执行失败时直接报告配置阻塞。
  • OA 部署地址通常只能来自 oa-sso -Property BaseUrl 的输出;首次连接且本机未配置地址(输出为空)时,可接受用户提供的一次 OA 基础地址,仅用于 oa-sso -SetBaseUrl &lt;地址&gt;(本机持久化)。不要接受路径、API 地址或猜测候选 URL,也不要探测 API 版本。回环地址(127.0.0.1/localhost)会被脚本拒绝——如实转达"OA 地址不能是回环地址,请输入其他电脑/客户端可访问的主机地址(如内网 http://192.168.1.10)"。
  • OA REST 根路径固定按"第 0 章"的确定性规则计算为 /restapi/1.0;禁止通过请求 /、/restapi、/api 或其他版本来试探。
  • 缺少参数、候选不唯一或用户只表达意图未明确执行时,用普通对话澄清。用户已给出完整且明确的执行指令时,该指令即为写操作授权,无需额外确认步骤。涉及向他人发送提醒、批量影响或删除/强制办结等高影响操作时,若用户指令未明确覆盖该影响,先说明影响并取得普通文本的明确授权。
  • 不创建或运行 Python/Node/Shell helper 文件。只在一次性 bash 工具调用中使用上述固定程序完成请求。

人名解析

owner、share_user、邮件的 to/cc/bcc、考勤的 leader_id/to_id/chuanyue_to_id/copy_to_id 要的都是 OA 用户 ID,不是姓名。传姓名进去在部分服务端版本上会被静默收下并存坏,对方根本收不到共享/邮件/审批,而且不报错。

固定动作:

用户说&quot;共享给王经理&quot;
  → curl -X POST &quot;$oa_api_root/person/queryuser&quot; \
        -H &quot;Authorization: Bearer $token&quot; \
        --data-urlencode &quot;user_id=$oa_user_id&quot; \
        --data-urlencode &quot;keyword=王经理&quot;
  → 候选唯一         → 用这个 user_id
  → 候选多于一个     → 用普通对话让用户挑,把姓名+部门列给他,不要替他选
  → 候选为空         → 如实说&quot;按这个名字查不到人,请确认姓名或提供 OA 账号&quot;,停止

绝不猜一个 ID,绝不拿姓名当 ID 传,绝不把"查不到人"降级成"先建了再说"。

邮件收件人的特殊处理规则(外部邮箱、通讯簿查询、多角色去重等)见 references/ref-scene-email-send-flow.md。按部门/角色展开收件人见 references/ref-api-oa_directory_api_document.md。


时间基准

任何"今天/明天/本周/上个月"的换算,必须先用 bash 的 date 命令取本机当前时间,不许用你以为的今天。

  • 日程的时间参数格式固定 Y-m-d H:i:s;任务的日期参数格式固定 Y-m-d。考勤与行政(用车/会议)的时间参数也固定 Y-m-d H:i:s,以各接口文档为准。
  • 结束时间必须严格晚于开始时间。组装 payload 前自行比较(同格式字符串可直接比较),不满足就向用户问清楚,不要发请求让服务端去拦——部分版本的服务端不拦。
  • 用户没给年份时按"最近的将来"解释,并在最终结果里写明你用的是哪一天,让用户能一眼看出理解错没错。

意图路由(选择模块)

根据用户意图,按下表进入对应 L1 模块文件读取详细规则:

用户说 进入模块
"日程 / 安排 / 会议(日程义) / 提醒我 / 周期性 / 领导日程" references/ref-mod-calendar.md
"今日简报 / 晨报 / 今天有什么要做 / 工作台" references/ref-mod-workbench.md
"我的任务 / 待办 / 进度" references/ref-mod-itask.md
"工作计划 / 周计划 / 月计划 / 计划进度 / 进度回报" references/ref-mod-work-plan.md
"邮件 / 发信 / 草稿 / 撤回 / 收件箱 / 废纸篓" references/ref-mod-email.md
"请假 / 加班 / 出差 / 外出 / 签到 / 考勤 / 审批" references/ref-mod-attendance.md
"人事 / 员工档案 / 我的档案 / 技能 / 培训 / 招聘 / 人员结构 / 绩效" references/ref-mod-human-resources.md
"图书 / 用车 / 车辆 / 办公用品 / 申领 / 会议室" references/ref-mod-administration.md
"联系人 / 通讯录 / 日志 / 投票" references/ref-mod-personal-office.md
"流程 / 工作流 / 审批流 / 新建工作 / 转交 / 退回 / 委托 / 办理 / 流水号 / 表单数据" references/ref-mod-workflow.md
"表单数据分析 / appview / 应用中心表单 / 应用中心数据查询分析" references/ref-mod-appview.md
"发起XX审批 / 提交XX申请 / 在XX应用里新增一条XX"(XX 不是上面列出的基础模块固定功能) references/ref-scene-cross-module-create.md → references/ref-mod-appbuilder.md

涉及编辑(edit)操作时,必须同时读* references/ref-scene-edit-with-readback.md。

跨模块创建的强制路由规则(双源联合校验)

当业务意图不属于个人事务、行政办公、考勤、邮件等基础模块固定功能(即目标可能是流程或应用搭建的业务)时,必须同时检查两个来源并联合校验,禁止默认按流程中心处理:

  1. 流程中心有没有该名称的流程;
  2. 应用中心有没有该名称的表单,并按表单与流程的绑定关系联合判定。

理由:流程中心可新建列表里的同名流程,真实入口可能是应用中心搭建的表单(创建入口是表单不是流程);反过来应用中心业务也可以配置为不走流程(纯表单),只查流程中心会漏掉整类业务。具体判定矩阵与接口见 references/ref-scene-cross-module-create.md。候选不唯一时列出让用户选择,查无时如实报告,禁止按表名或页面路径猜测创建入口。

产物链接:workflowaction/create 成功响应带 page_url(该业务具体页面的相对路径),form_with_flow 另有 work_url。汇报与打开链接一律优先用它们拼 oa_base,不得退回流程中心/应用中心列表页(列表页仅作其他 workflow 接口的兜底,见 references/ref-business-page-links.md)。需要在内置浏览器免登打开时,用 oa-sso -Property OpenUrl -Target &quot;&lt;page_url&gt;&quot; 换取一次性开页 URL(同一链接表的开页规则)。

“进度”语义不明确时先区分:某条个人任务的完成比例进入 Itask;某个工作计划下负责人/参与人的阶段回报进入 WorkPlan。不要用两个模块互相代写。


写操作通用流程

编辑类

任何 edit* 接口调用前,必读 references/ref-scene-edit-with-readback.md。核心:强制先读后合并,这些接口都是全量覆盖,没传的字段会被按默认值写回库。

新建类

  1. 参数齐全且用户已明确要求创建时,直接发请求;用户只要求起草、或尚未明确是否执行时,先用普通对话问清楚。
  2. 涉及向他人发送提醒、批量影响或不可逆动作时,用户指令未明确覆盖该影响的,先说明影响并取得明确文本授权。
  3. 成功后回读核实,用回读到的 ID + 标题 + 时间向用户汇报。

多轮对话

草稿留在会话里,落库只发生一次。详见 references/ref-scene-multi-turn-draft.md。

单次写操作(考勤/行政/个人办公)

参数齐全且用户已明确要求执行即可调用;审批类操作前必须展示待审批记录摘要,且用户指令必须明确审批结果。写操作成功后回读核实。


查询、总结通用规则

  • 查询类是只读操作,参数齐全后直接调用。
  • over_status(用户点了完成)和 state_type(时间过去了)是两回事,做总结时别混。
  • 一次查询的结果留在会话状态里,追问从缓存里算;只有查询条件变了才重新调接口。缓存里答不出来就说"这批数据里没有",不得为了回答而编。

返回和安全

  • 统一返回信封 {&quot;errcode&quot;:0|1, &quot;errmsg&quot;:&quot;ok|error&quot;, &quot;data&quot;:{...}|&quot;错误中文串&quot;}。errcode=0 才表示业务成功;errcode=1 时同时解释 errmsg 和 data。
  • 失败时 data 是中文错误串,没有机器可读错误码。把 OA 的原文转达给用户,不要改写含义、不要归纳成"操作失败"。
  • editable 是 OA 给出的权限判定结果,一律以它为准。
  • 不许拿一次查询的结果去预判另一个写操作会不会被拒。 查询返回空只说明"这个清单是空的",不等于"接下来那个写操作会失败"。禁止"OA 很可能因权限拒绝"这类措辞——那是在替 OA 判权限。
    正确做法:直接发请求让 OA 自己回答;只有 OA 真的返回了错误,才把它的原话转达给用户。
  • 被权限拒绝时不许改道重试:OA 回"无权限 / 不在你所管辖的部门 / 未找到该领导的日程设置 / 您没有此操作权限"这类结果时,一律原文转达并停止——不得改走另一个接口、不得改传他人身份、不得手工补 URL 或步骤参数、不得因为"另一条路语义上也说得通"就把请求改道(见 0.2「跨人取数硬门」)。要判断"是不是权限问题"只以 OA 的回答为准,不自行推断。
  • 不把接口错误中的内部凭据、Authorization Header 或 Token 回显给用户。
  • 不把"请求已提交"说成"已生效";不把回读没核实上的写操作说成成功。
  • 只依据 references/ 下的文档选择路径和参数;文档没有定义的删除、批量、分页或状态语义不要自行发明。

常见问题

5 问
答案由本站依据条目字段整理
通达OA全模块AI智能体怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_9f579683/tongda-oa-aiagent。安装方式为未标注。装完刷新技能列表或重开客户端。

通达OA全模块AI智能体支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

通达OA全模块AI智能体权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

通达OA全模块AI智能体收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

通达OA全模块AI智能体用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。