OA系统通用流程自动化技能
通过 bua + agent-browser 自动化操作泛微E9 OA系统,支持登录、表单填写、流程提交、审批状态查询等操作。
⚠️ 前置检查(每次触发必须执行)
检查1:bua + agent-browser 是否已安装
which bua 2>/dev/null && bua --version
which agent-browser 2>/dev/null && agent-browser --version
如果 bua 未安装:
npm install -g bua
bua doctor
如果 agent-browser 未安装:
npm install -g agent-browser
agent-browser install --with-deps
安装后再次验证版本号。如果安装失败,停止执行并告知用户手动安装。
如果 bua 和 agent-browser 均已安装: 执行健康检查:
bua doctor
确认 chrome_alive: true,否则执行 bua open --url "about:blank" 启动浏览器。
检查2:OA账号密码是否已保存
从长期记忆(memory_recall)中检索 OA 账号信息,搜索关键词:OA账号 或 OA系统账号。
如果记忆中存在账号密码: 直接使用,跳过询问。
如果记忆中不存在,必须向用户询问:
🏢 首次使用 OA 流程技能,请提供以下信息:
- OA 系统登录账号:
- OA 系统登录密码:
- OA 系统地址(如无特殊说明,默认为 http://oa.example.com:8080/):
账号密码将长期保存,后续无需重复提供。
用户回复后,保存到长期记忆:
category: entity
importance: 0.95
text: OA系统登录凭证:账号=<用户提供的账号>,密码=<用户提供的密码>,地址=<用户提供的地址>
同时更新 MEMORY.md 的账号信息部分。
核心配置
| 配置项 | 来源 | 默认值 | 说明 |
|---|---|---|---|
| OA_ACCOUNT | 长期记忆 / 用户输入 | (空) | OA系统登录账号 |
| OA_PASSWORD | 长期记忆 / 用户输入 | (空) | OA系统登录密码 |
| OA_URL | 长期记忆 / 用户输入 | http://oa.example.com:8080/ | OA系统地址 |
| OA_SESSION | 自动获取 | - | bua session ID |
流程ID速查
各流程的 workflowid 不同,首次使用时需确认对应公司的流程ID。已知的流程ID记录在 references/workflow_ids.md 中。
获取方式:登录OA后,在流程管理页面搜索流程名称,从URL或接口获取 workflowid。
通用操作步骤
第1步:登录OA系统
bua open --url "<OA_URL>"
sleep 2
bua snapshot --interactive
找到账号输入框、密码输入框、登录按钮的 ref:
bua fill @<账号框ref> "<OA_ACCOUNT>"
bua fill @<密码框ref> "<OA_PASSWORD>"
bua click @<登录按钮ref>
sleep 3
校验登录成功:
bua snapshot --interactive
页面出现菜单栏(门户、流程、人事等)即表示登录成功。如仍在登录页,提示用户确认账号密码。
第2步:打开流程表单
⚠️ 重要:不要通过门户菜单导航! 泛微E9的SPA路由+iframe加载机制导致菜单方式不可靠。
正确方式:直接跳转 AddRequest.jsp
bua goto "<OA_URL>workflow/request/AddRequest.jsp?workflowid=<流程ID>&isagent=0"
sleep 4
bua snapshot --interactive
校验标题包含"创建"字样,确认表单页面已正确加载。
如果页面跳转到门户首页(session失效): 重新执行第1步登录。
第3步:填写表单
每次操作前先 snapshot 获取最新 ref(ref 在DOM变化后会重新分配):
bua snapshot --interactive
通用填写原则
- 下拉选择:click combobox → snapshot → click menuitem
- 文本输入:fill @ref "内容"(替换);type @ref "内容"(追加)
- 人员选择:click输入框 → fill姓名 → 等待弹出候选列表 → snapshot → click精确匹配项
- 自动带出字段:选择人员后,性别/手机号/部门等字段会自动填充,无需手动操作
人员选择器操作细节
# 点击姓名输入框旁的搜索按钮
bua click @<搜索按钮ref>
sleep 1
# 在弹出的人力资源对话框中输入姓名
bua snapshot --interactive
bua fill @<搜索输入框ref> "张三"
bua press Enter
sleep 2
# 查看候选列表,选择精确匹配项
bua snapshot --interactive
bua click @<精确匹配的listitem ref> # 注意区分"张三"和"张三(兼)"
sleep 2
第4步:提交流程
bua snapshot --interactive # 重新获取提交按钮 ref
bua click @<提交按钮ref>
sleep 3
校验提交成功:
bua tabs list
- URL 从
iscreate=1变为包含requestid=数字→ 提交成功 - 页面标题去掉"创建-"前缀 → 提交成功
如果提交后页面未跳转: 重新 snapshot 检查是否有确认弹窗或必填字段未填。
第5步:截图保存并反馈
bua screenshot
# 截图默认保存到 /root/.agent-browser/tmp/screenshots/
# 复制到用户目录
cp <截图路径> /root/.openclaw/workspace/arkdrive_user_uploads/oa_<流程名>_<日期>.png
通过 message 工具将截图推送给用户,并附上流程信息摘要。
第6步:查看审批状态(可选)
如需查看流程流转到谁审批:
bua snapshot --interactive
bua click @<流程状态 tab ref>
sleep 2
bua snapshot --interactive
读取审批节点信息,反馈给用户:当前节点、操作人、操作状态。
已支持流程
流程1:企业邮箱账号新增/调整/关闭申请
触发条件: 用户说"OA走一个邮箱创建流程"、"OA邮箱申请新增/调整/关闭"
必填参数:
| 参数 | 变量名 | 说明 | 示例 |
|---|---|---|---|
| 申请类型 | apply_type | 新增 / 调整 / 关闭 | 新增 |
| 姓名 | name | 申请人姓名(OA通讯录中的名字) | 张三 |
| 英文名 | english_name | 邮箱英文名 | sam |
可选参数: 所属公司(决定workflowid)
表单填写步骤:
- 选择类型(combobox → 新增/调整/关闭)
- 填写姓名(人力资源弹窗搜索 → 选择精确匹配项)
- 填写英文名(直接fill)
- 性别/手机号/部门/岗位自动带出,确认即可
- 点击"提 交"
详细SOP参见 references/email_apply_sop.md
故障排查
| 问题 | 原因 | 解决方案 |
|---|---|---|
| bua/agent-browser 未找到 | 未安装 | npm install -g bua agent-browser && agent-browser install --with-deps |
| bua doctor 显示 chrome_alive: false | Chrome未启动 | bua open --url "about:blank" 启动浏览器 |
| 登录后停留在登录页 | 账号密码错误 | 确认凭证后重试,必要时更新长期记忆 |
| AddRequest.jsp 页面跳转到门户 | Session失效 | 重新登录后再打开 |
| goto后bua报"no window" | session断连 | bua open 重新创建session |
| 姓名搜索无候选 | 输入太短或姓名不存在 | 多输几个字或确认姓名是否在OA通讯录中 |
| 提交后页面未跳转 | 必填字段未填或有确认弹窗 | snapshot检查必填项和弹窗 |
| 提交后snapshot报session丢失 | 已知问题 | bua tabs list → bua tabs switch T1 → 重试snapshot |
| submenu无法展开 | hover渲染机制 | 不要用菜单导航,用AddRequest.jsp直链 |
| iframe显示about:blank | OA前端bug | 使用AddRequest.jsp直链绕过 |
扩展指南
本技能设计为可扩展架构,新增流程只需:
- 在「已支持流程」章节添加新流程条目
- 在
references/目录下创建对应的SOP文件(如references/leave_apply_sop.md) - 在
references/workflow_ids.md中补充新流程的workflowid - 更新 SKILL.md 中的 description 字段,加入新流程的触发关键词
注意事项
- 前置检查不可跳过: 每次触发必须检查 bua + agent-browser 安装状态和 OA 凭证。
- 凭证长期保存: 用户首次提供的账号密码通过 memory_store 永久保存。
- 登录态复用: bua 保持 session,同一会话内无需重复登录;session过期时重新登录。
- ref 时效性: DOM变化后ref重新分配,操作前必须重新snapshot。
- 人员选择精确匹配: 注意区分同名人员(如"张三"和"张三(兼)")。
- 不要使用菜单导航: 泛微E9的SPA+iframe机制不可靠,始终用直链。
- bua优先原则: 浏览器操作优先使用bua,bua不可用时降级到browser工具。
Scan to join WeChat group