从"跑腿帮办"到"一句话搞定":AI Agent 自动化 OA 流程实战

作者:金融马 日期:2025年5月27日 标签:AI Agent · 自动化 · 泛微OA · 钉钉

---

一、痛点

每次发起 OA 流程,都要:

1. 打开 OA 系统 2. 登录账号 3. 找到对应的流程模板 4. 填写一堆表单字段 5. 上传附件(表格、扫描件、压缩包...) 6. 提交后时不时点进去看审批到哪了 7. 等审批完了还要手动归档

一套流程下来,10 分钟起步,如果是出差报销、项目付款这种高频流程,每天要跑好几遍。

更烦的是:人在外面、只能用手机的时候,根本没法操作 OA

---

二、解决思路

能不能像发微信一样,发条消息就把流程搞定了

用户(钉钉):发一个付款申请,附件发你了
Agent:收到!请发送附件
用户:[发送 Excel 文件]
Agent:✓ 附件已上传泛微
      ✓ 流程已发起:付款申请 #WF20250627001
      ✓ 当前节点:部门主管审批中
      ...
      ● 流程已通过,附件已归档

核心理念:人只做决策,机器执行流程。

---

三、技术方案

3.1 整体架构

┌──────────────────────────────────────────────────────────────┐
│                          钉钉                                 │
│         用户 ──消息/文件──▶ 钉钉 Server ──Stream──▶         │
└──────────────────────────────────────────────────────────────┘
                                                                 │
                                                                 ▼
┌──────────────────────────────────────────────────────────────┐
│                       Hermes Agent                            │
│                                                              │
│   ┌──────────┐   ┌──────────┐   ┌──────────┐   ┌─────────┐│
│   │ 钉钉客户端 │   │ 意图解析器 │   │ 泛微客户端 │   │状态监控器││
│   │          │   │          │   │          │   │         ││
│   │ • 消息接收│   │ • 指令识别│   │ • 登录    │   │• 轮询状态││
│   │ • 文件下载│   │ • 流程匹配│   │ • 发起流程│   │• 超时告警││
│   │ • 结果推送│   │ • 字段提取│   │ • 上传附件│   │• 钉钉回报││
│   └──────────┘   └──────────┘   └──────────┘   └─────────┘│
│                                                              │
│                              本地存储                         │
│                        /tmp/oa-flows/{id}/                    │
└──────────────────────────────────────────────────────────────┘
                                                                 │
                                                                 ▼
┌──────────────────────────────────────────────────────────────┐
│                         泛微 OA                               │
│   POST /api/login → POST /api/createRequest                  │
│   POST /api/upload → GET /api/getRequestInfo                  │
└──────────────────────────────────────────────────────────────┘

3.2 技术选型

组件选型说明
运行环境Python 3.10+主力开发语言
钉钉接入dingtalk-stream-sdkStream 模式实时接收,支持文件消息
OA 接入requests + 泛微 REST APIHTTP 直连,无需浏览器
文件存储本地 /tmp/oa-flows/按 request_id 分目录,流程结束后清理
配置config.yaml + 环境变量敏感信息不写死在代码里
日志loguru结构化日志,支持文件 + 钉钉双输出

3.3 核心模块

钉钉客户端(dingtalk_client.py

负责与钉钉的实时通信:

class DingTalkClient:
    def start(self, on_message_callback):
        """启动 Stream 长连接,收到消息触发回调"""
        ...

def download_file(self, file_key: str) -> Path: """下载钉钉文件到本地临时目录""" ...

def send_message(self, user_id: str, content: str): """推送结果消息给用户""" ...

关键能力

  • Stream 模式:长连接实时收消息,不丢消息
  • 支持文本、图片、压缩包等各类文件
  • 自动重连,断线不怕

泛微客户端(weaver_client.py

封装泛微 OA 的 REST API:

class WeaverClient:
    def login(self) -> bool:
        """登录泛微,维护 cookie session"""
        ...

def create_request(self, workflow_id: str, fields: dict, attachments: list) -> str: """发起流程,返回 request_id""" ...

def upload_attachment(self, file_path: Path, request_id: str) -> str: """上传附件,返回附件 ID""" ...

def get_request_status(self, request_id: str) -> dict: """查询流程当前状态""" ...

def get_workflow_progress(self, request_id: str) -> list: """获取各审批节点进度""" ...

关键能力

  • Cookie 持久化,不用每次都登录
  • 支持批量上传附件(表格、图片、ZIP 都能传)
  • 统一的错误处理和重试机制

流程引擎(flow_engine.py

编排完整执行链路:

用户发消息
    │
    ▼
意图解析 ──缺字段──▶ 追问用户
    │
    ▼
下载钉钉文件
    │
    ▼
泛微登录
    │
    ▼
上传附件
    │
    ▼
发起流程 → 返回 request_id
    │
    ▼
轮询监控 ◄─────────────┐
    │                  │
 ┌──┴──┐              │
 │结束?│              │
 └──┬──┘              │
    │ 否               │
    ▼                  │
回报结果  等待 30 秒 ─────┘

状态监控器(monitor.py

class FlowStatus(Enum):
    PENDING = "待提交"
    RUNNING = "审批中"
    APPROVED = "已通过"
    REJECTED = "已驳回"
    TERMINATED = "已终止"

监控策略

  • 每 30 秒轮询一次状态
  • 超时(默认 1 小时)自动告警
  • 每 5 分钟推送一次进度到钉钉
---

四、应用场景

场景 1:付款申请

用户:发一个付款申请,金额10万
Agent:请发送附件(合同/发票/清单等)
用户:[发送 PDF 合同]
Agent:收到!
      ✓ 流程已发起:付款申请
      ✓ 流程编号:WF20250627001
      ✓ 附件已上传
      
      正在监控...
      ○ 部门主管审批(待处理)
      ○ 财务审批(待处理)
      ● 流程已通过
      
      完成!

场景 2:差旅报销

用户:报销差旅,李四,5000元
Agent:请发送发票照片或电子发票
用户:[发送 ZIP 包,内含多张发票]
Agent:收到 5 张发票,正在上传...
      ✓ 流程已发起:差旅报销
      ✓ 金额:5000 元
      ...

场景 3:查询进度

用户:查一下 WF20250627001
Agent:流程编号:WF20250627001
      类型:付款申请
      状态:审批中
      当前节点:财务审批 - 张三
      已用时:2小时15分
      预计:今日内完成

---

五、效果对比

操作传统方式AI Agent
操作入口打开 OA 网页/APP钉钉发消息
附件上传手动选择文件直接发文件
填写表单逐项填写说一句话,AI 提取
查看进度反复登录 OA自动推送
操作耗时10-15 分钟< 1 分钟
移动场景不方便手机一句话搞定
---

六、技术亮点

1. 钉钉 Stream 模式

相比轮询拉取消息,Stream 模式是服务端推送,优势:

  • 实时性:消息秒到
  • 低延迟:不用频繁调接口查新消息
  • 省资源:长连接,不用每次都建立 HTTP

2. 意图解析 + 字段提取

不用让用户填写标准的表单字段,直接说人话:

  • "发个付款申请,10万" → 自动识别流程类型、金额
  • 缺少必填字段时,AI 会主动追问

3. 全链路自动化

发起 → 上传 → 监控 → 推送,一条龙。 用户只需要发一条消息,躺平等结果就行。

---

七、后续规划

阶段内容
Phase 1跑通泛微核心 API(登录、发起、上传、查询)
Phase 2接入钉钉 Stream,消息和文件收发
Phase 3完善意图解析,支持更多流程类型
Phase 4增加多级审批、超时告警、统计报表
Phase 5支持审批节点自动处理(充当审批人角色)
---

八、总结

技术只是手段,解决问题才是目的。

这套方案把原本分散在 OA 系统、手机、邮件里的流程,统一收口到钉钉这一个入口。

人从"操作者"变成"决策者",真正实现了动动嘴就能办事

---

你也有类似的自动化需求?想了解具体实现细节?欢迎交流。