OA全流程自动提交技能
通过浏览器自动化登录泛微OA系统,根据用户指令匹配流程ID,填写并提交流程表单。
支持两种操作模式:
- 混合模式(bua+browser):bua未安装时自动降级为browser模式
- browser模式:仅使用OpenClaw内置browser工具,无外部依赖
📂 技能文件结构
oa-email-apply/
├── SKILL.md # 本文件(主技能)
├── _meta.json # 版本元数据
├── scripts/
│ └── check_deps.sh # 依赖检查+模式判定
└── references/
├── workflow_ids.md # 流程ID速查表(129个)
├── emailapplysop.md # 邮箱申请详细SOP
├── fixedassetsop.md # 固定资产申购详细SOP
├── expensereportsop.md # 费用报销详细SOP
└── retractsop.md # 流程撤回/删除SOP
扩展方式: 新增流程只需在「已支持流程」加条目 + references/ 加SOP文件。
🔍 流程ID匹配规则
流程ID完整列表见 references/workflow_ids.md,每次执行前必须读取该文件匹配workflowid。
匹配优先级:
- 精确匹配:用户说的流程名与表完全一致 → 直接使用
- 关键词匹配:用户说"邮箱流程" → 匹配含"邮箱"的流程
- 默认使用通用流程:用户未指定时使用通用流程
- SQ前缀:用户说"采购申请" → 优先匹配SQ-采购申请流程(122)
- JTHR/FBHR:用户说"出差" → 区分JTHR(366/368)和FBHR(367/369),默认询问
常用匹配示例:
| 用户说的 | 匹配结果 | workflowid | |---|---|---| | "走一个邮箱流程" | 企业邮箱账号新增/调整/关闭申请 | 1012 | | "差旅费报销" | 差旅费报销流程 | 1549 | | "费用报销" | 费用报销流程(差旅费和招待费除外) | 1547 | | "员工离职" | 员工离职审批流程 | 1010 | | "付款申请" | 提示选择:1454/1455/1456或代总部1607/1608 | | "合同审批" | 提示选择:1287供应商类/1288客户及其他 | | "请假" | 提示选择:1055 FBHR/1056 JTHR |
⚠️ 多结果时必须询问:关键词匹配到多个结果时,列出所有候选项供用户确认。
已支持流程
| workflowid | 流程名称 | 详细SOP | |---|---|---| | 1012 | 企业邮箱账号新增/调整/关闭申请 | 邮箱申请SOP | | 667 | SQ-固定资产申购流程 | 固定资产申购SOP | | 1547 | 费用报销流程(差旅费和招待费除外) | 费用报销SOP | | 其他126个 | 见 流程ID速查表 | 待补充SOP |
流程撤回/删除
当用户要求撤回或删除已提交的流程时,参考 流程撤回/删除SOP。
⚠️ 前置检查(每次触发必须执行)
检查1:依赖检查与模式判定
bash scripts/check_deps.sh
脚本输出操作模式:
MODE=hybrid→ bua+browser混合模式(推荐)MODE=browser→ 仅browser降级模式MODE=unavailable→ 不可用,需联系管理员
根据模式选择后续操作方式。
检查2:OA账号密码
从长期记忆(memory_recall)中检索OA账号信息,搜索关键词:OA账号 或 OA系统账号。
如果记忆中存在: 直接使用,跳过询问。
如果不存在,必须询问:
📋 首次使用OA流程技能,请提供以下信息:
- OA 登录账号:
- OA 登录密码:
账号密码将长期保存,后续无需重复提供。
用户回复后保存到长期记忆(memory_store),category: entity, importance: 0.95。
检查3:OA系统地址
从长期记忆检索OA地址,默认为 http://oa.lcang.com:8080/。其他环境需用户确认。
双模式操作指南
模式A:bua+browser 混合模式
bua snapshot能看到表单值和详细DOM标签,browser act/evaluate做交互更稳定。两者结合最佳。
登录OA:
bua open --url "<OA系统地址>"
sleep 2
bua snapshot --interactive
# 填写账号密码 → bua click @<登录按钮ref>
打开表单:
bua open --url "<OA系统地址>workflow/request/AddRequest.jsp?workflowid=<workflowid>&isagent=0"
sleep 3
bua snapshot --interactive
填写+提交: bua snapshot → bua fill/click → 重新snapshot确认 → bua click @提交
bua断连恢复:
bua tabs list
bua focus <Tn> # 切到活跃tab
bua snapshot --interactive # 重试
如果恢复失败,切换到模式B继续。
模式B:browser 降级模式
当bua不可用(未安装/服务未启动/持续断连)时,使用OpenClaw内置browser工具。
核心差异: browser snapshot只能看到交互元素(按钮、输入框),看不到表单字段标签和值。必须配合JS evaluate获取字段信息。
登录OA:
browser action=open url=<OA系统地址>
browser action=snapshot interactive=true
browser action=act request.kind=type ref=<账号输入框ref> request.text=账号
browser action=act request.kind=type ref=<密码输入框ref> request.text=密码
browser action=act request.kind=click ref=<登录按钮ref>
打开表单:
browser action=navigate url=<OA系统地址>workflow/request/AddRequest.jsp?workflowid=<workflowid>&isagent=0
填写表单(关键:用JS获取字段,用browser act做交互):
步骤1:JS获取字段列表和值
// browser action=act request.kind=evaluate
() => {
const inputs = document.querySelectorAll('input[type=text], input:not([type]), textarea');
const result = [];
inputs.forEach((inp, i) => {
const val = inp.value || '';
const name = inp.name || '';
if(name || val) result.push('idx=' + i + ' name=' + name.substring(0,20) + ' val=[' + val.substring(0,30) + ']');
});
return result.join('\n');
}
步骤2:JS获取字段标签映射
() => {
const browsers = document.querySelectorAll('.wea-browser, .wea-associative-search');
const result = [];
browsers.forEach((b, i) => {
const parent = b.closest('td');
const prevTd = parent ? parent.previousElementSibling : null;
const label = prevTd ? prevTd.textContent.trim() : '';
const val = b.textContent.trim().substring(0,30);
result.push('idx=' + i + ' label=' + label.substring(0,15) + ' val=[' + val + ']');
});
return result.join('\n');
}
步骤3:根据获取的信息,用browser snapshot+act填写
提交验证(JS方式):
() => {
const url = window.location.href;
const hasRequestId = url.includes('requestid=');
const title = document.title;
return 'url_has_requestid=' + hasRequestId + ' title=' + title;
}
隐藏菜单操作(撤回等,JS方式):
() => {
const items = document.querySelectorAll('.ant-menu-item');
for(const item of items) {
if(item.textContent.trim() === '强制收回') {
item.click();
return 'clicked 强制收回';
}
}
return 'not found';
}
执行步骤(通用流程)
第1步:确认流程ID
根据用户指令,读取 references/workflow_ids.md 匹配 workflowid。多结果时询问。
第2步:登录OA系统
根据检测到的模式选择操作方式(见上方双模式指南)。
校验: 页面标题包含公司名称或跳转到门户页。
第3步:打开流程表单
⚠️ 不要通过菜单导航,直接用 AddRequest.jsp 直链
URL格式:<OA系统地址>workflow/request/AddRequest.jsp?workflowid=<workflowid>&isagent=0
校验: 页面标题包含"创建"和流程名称。
第4步:确认必填字段
⚠️ 提交前必须逐项与用户确认所有必填字段! 列出清单让用户确认,不要遗漏。
第5步:填写表单
根据流程类型参考对应SOP,按当前模式操作。
通用填写规则:
- 下拉选择(combobox):先 click 打开下拉 → snapshot/JS → click 对应选项
- 人员搜索:click 输入框 → type 姓名 → 等待弹出候选列表 → click 精确匹配项
- 文本输入:fill 替换内容,type 追加内容
- 每次 DOM 变化后必须重新 snapshot,ref 会重新分配
- 人员选择精确匹配:注意区分同名人员
第6步:提交
提交成功标志:
- URL 从
iscreate=1变为包含requestid=数字 - 页面标题从"创建 - xxx"变为"xxx"或"处理 - xxx"
第7步:截图保存并反馈
截图保存到 /root/.openclaw/workspace/arkdrive_user_uploads/oa_<流程简称>_<日期>.png
推送流程信息:requestid、流程名称、关键字段。
故障排查
| 问题 | 解决方案 |
|---|---|
| bua报--session required | bua tabs list → bua focus <Tn> → 重试;恢复失败则切换browser模式 |
| bua完全不可用 | 切换到browser降级模式,用snapshot+act+evaluate操作 |
| OA session超时 | 在重新登录对话框内填写账号密码,点击"登 录" |
| AddRequest.jsp页面空白 | Session已失效,重新登录 |
| 人员搜索无候选 | 多输几个字或确认姓名是否在OA通讯录中 |
| 提交后页面未跳转 | 检查必填字段是否已填写 |
| iframe显示about:blank | 不要用菜单导航,用AddRequest.jsp直链 |
| 下拉菜单项snapshot看不到 | OA隐藏菜单必须用JS document.querySelectorAll 遍历查找并click |
| browser snapshot看不到字段标签 | 用JS evaluate获取字段映射(见模式B步骤1-2) |
| combobox下拉选项snapshot后消失 | click combobox后立即snapshot,不要sleep |
| 收款人等浏览器字段无法填写 | 需通过OA人员浏览器组件交互,click搜索框→输入→选择候选 |
| Chrome调试端口未开启 | 执行 bash /opt/browser-vnc/start-chromium.sh 或联系管理员 |
⚠️ 核心规则(强制执行)
- 标题不自行修改:提交流程时标题采用系统默认,除非用户明确要求修改
- 必填字段必须逐项确认:提交前列出所有必填字段让用户确认,不要遗漏
- 隐藏菜单必须用JS操作:OA隐藏菜单项(如"强制收回")必须用JS遍历DOM查找并点击
- 提交后确认requestid:成功标志是URL出现
requestid=数字+标题变化 - 流程撤回路径:流程详情页 → JS点击"强制收回" → 删除 → 确认。详见 retractsop.md
- bua断连立即切browser:bua连续2次报
--session required后立即切换到browser工具操作 - 不要使用菜单导航:始终使用AddRequest.jsp直链打开流程表单
- 可扩展:新增流程只需 workflow_ids.md 确认ID + references/ 加SOP文件 + SKILL.md加条目
版本变更
| 版本 | 日期 | 变更 | |---|---|---| | 1.0.1 | 2026-05-27 | 去掉bua硬依赖,增加browser降级模式;依赖检查改为模式判定;增加JS evaluate操作模板 | | 1.0.0 | 2026-05-27 | 增加固定资产申购SOP、流程撤回SOP、核心规则 | | 0.0.4 | 2026-05-26 | 重构为通用流程技能,129个workflowid,可扩展架构 |
微信扫一扫