← 返回
未分类

oa-workflow-apply

泛微OA系统全流程自动提交技能。当用户说"OA创建/提交/走一个XX流程"时使用此技能,自动匹配workflowid并完成表单提交。支持129个通用流程,可扩展。支持bua和browser双模式。
泛微OA系统全流程自动提交技能。当用户说"OA创建/提交/走一个XX流程"时使用此技能,自动匹配workflowid并完成表单提交。支持129个通用流程,可扩展。支持bua和browser双模式。
乐舱
未分类 community v1.0.1 2 版本 98275.9 Key: 无需
★ 0
Stars
📥 57
下载
💾 0
安装
2
版本
#latest

概述

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。

匹配优先级:

  1. 精确匹配:用户说的流程名与表完全一致 → 直接使用
  2. 关键词匹配:用户说"邮箱流程" → 匹配含"邮箱"的流程
  3. 默认使用通用流程:用户未指定时使用通用流程
  4. SQ前缀:用户说"采购申请" → 优先匹配SQ-采购申请流程(122)
  5. 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
667SQ-固定资产申购流程固定资产申购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格式:workflow/request/AddRequest.jsp?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 requiredbua tabs listbua focus → 重试;恢复失败则切换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 或联系管理员

⚠️ 核心规则(强制执行)

  1. 标题不自行修改:提交流程时标题采用系统默认,除非用户明确要求修改
  2. 必填字段必须逐项确认:提交前列出所有必填字段让用户确认,不要遗漏
  3. 隐藏菜单必须用JS操作:OA隐藏菜单项(如"强制收回")必须用JS遍历DOM查找并点击
  4. 提交后确认requestid:成功标志是URL出现requestid=数字+标题变化
  5. 流程撤回路径:流程详情页 → JS点击"强制收回" → 删除 → 确认。详见 retractsop.md
  6. bua断连立即切browser:bua连续2次报--session required后立即切换到browser工具操作
  7. 不要使用菜单导航:始终使用AddRequest.jsp直链打开流程表单
  8. 可扩展:新增流程只需 workflow_ids.md 确认ID + references/ 加SOP文件 + SKILL.md加条目

版本变更

版本日期变更
---------
1.0.12026-05-27去掉bua硬依赖,增加browser降级模式;依赖检查改为模式判定;增加JS evaluate操作模板
1.0.02026-05-27增加固定资产申购SOP、流程撤回SOP、核心规则
0.0.42026-05-26重构为通用流程技能,129个workflowid,可扩展架构

版本历史

共 2 个版本

  • v1.0.1 Initial release 当前
    2026-05-27 11:57 安全 安全
  • v1.0.0 Initial release
    2026-05-27 10:29 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

security-compliance

Skill Vetter

spclaudehome
AI智能体技能安全预审工具。安装ClawdHub、GitHub等来源技能前,检查风险信号、权限范围及可疑模式。
★ 1,215 📥 266,415
ai-intelligence

ontology

oswalpalash
类型化知识图谱,用于结构化智能体记忆与可组合技能。支持创建/查询实体(人员、项目、任务、事件、文档)及关联...
★ 711 📥 243,714
ai-intelligence

Self-Improving + Proactive Agent

ivangdavila
自我反思+自我批评+自我学习+自组织记忆。智能体评估自身工作、发现错误并持续改进。
★ 1,356 📥 318,049