Back to skills
extension
Category: OtherAPI key required

企业微信审批助手

企业微信审批集成 Skill。当用户提到'审批'、'请假'、'报销'、'采购'、'出差'等关键词,或需要提交审批申请、查看审批模板、处理审批流程时,自动调用此 Skill。支持列出审批模板、解析模板控件、提交审批申请、自然语言一句话提交审批等功能。

personAuthor: user_e7bc6b23hubcommunity

企业微信审批 Skill

这个 Skill 为 OpenClaw 提供企业微信审批功能集成,支持:

功能特性

  1. 企业微信聊天 - 可见范围内的员工可与 OpenClaw 对话
  2. 审批模板列出 - 列出所有可用的审批模板
  3. 审批模板获取 - 获取企业微信审批模板详情
  4. 模板控件解析 - 解析模板需要填写的内容
  5. 控件值验证 - 验证用户输入的值是否符合要求
  6. 控件值格式化 - 自动格式化控件值为API需要的格式
  7. 摘要信息生成 - 自动生成审批申请的摘要信息(最多3行)
  8. 审批申请提交 - 提交审批申请到企业微信
  9. 自然语言理解 - 支持通过一句话直接提交审批,自动提取表单字段
  10. 智能提示 - 信息不完整时一次性列出所有缺失的必填项
  11. 多种交互方式 - 支持一句话提交和逐步填写两种方式

配置要求

环境变量

# 企业微信应用配置
WECOM_CORP_ID="your_corp_id"
WECOM_SECRET="your_agent_secret"
WECOM_AGENT_ID=your_agent_id

审批模板配置

templates.json 文件中配置审批模板:

{
  "templates": [
    {
      "id": "88219328193",
      "name": "请假审批",
      "description": "员工请假申请审批"
    },
    {
      "id": "88219328194",
      "name": "报销审批",
      "description": "费用报销申请审批"
    }
  ]
}

企业微信设置

  1. 创建自建应用
  2. 配置应用可见范围
  3. 获取应用凭证(CorpID、Secret、AgentID)
  4. 配置审批模板

使用示例

列出所有审批模板

from wecom_approval import WeComApproval

approval = WeComApproval()
templates = approval.list_templates()
for template in templates:
    print(f"{template['name']}: {template['description']}")

获取审批模板详情

from wecom_approval import WeComApproval

approval = WeComApproval()
template = approval.get_template_detail(template_id="88219328193")
print(template)

模板详情格式示例(Vacation 控件)

当获取请假模板详情时,Vacation 控件的返回格式如下:

{
  "template_content": {
    "controls": [
      {
        "property": {
          "control": "Vacation",
          "id": "Vacation-15111111111",
          "title": [
            {
              "text": "请假",
              "lang": "zh_CN"
            }
          ],
          "require": 1
        },
        "config": {
          "vacation": {
            "selector": {
              "type": "single",
              "options": [
                {
                  "key": "1",
                  "value": [
                    {
                      "text": "事假",
                      "lang": "zh_CN"
                    }
                  ]
                },
                {
                  "key": "2",
                  "value": [
                    {
                      "text": "病假",
                      "lang": "zh_CN"
                    }
                  ]
                },
                {
                  "key": "3",
                  "value": [
                    {
                      "text": "年假",
                      "lang": "zh_CN"
                    }
                  ]
                }
              ],
              "exp_type": 0
            },
            "attendance": {
              "date_range": {
                "type": "hour",
                "new_begin": 1568077200,
                "new_end": 1568368800,
                "new_duration": 291600
              },
              "type": 1
            }
          }
        }
      }
    ]
  }
}

说明:

  • vacation.selector: 请假类型选择器(事假、病假、年假等)
  • vacation.attendance.date_range: 时间范围配置
    • type: "hour" 表示按小时计算
    • new_begin: 开始时间戳(Unix时间戳,单位秒)
    • new_end: 结束时间戳(Unix时间戳,单位秒)
    • new_duration: 时长(秒)

解析模板控件

from wecom_approval import WeComApproval

approval = WeComApproval()
template_detail = approval.get_template_detail(template_id="88219328193")
controls = approval.parse_template_controls(template_detail)

for control in controls:
    print(f"{control['title']} [{control['type_name']}]")
    if control['required']:
        print("  * 必填")

提交审批申请

from wecom_approval import WeComApproval

approval = WeComApproval()

# 获取模板详情
template_detail = approval.get_template_detail(template_id="88219328193")
controls = approval.parse_template_controls(template_detail)

# 构建表单数据
form_data = []
for control in controls:
    # 这里可以根据实际情况获取用户输入
    value = "用户输入的值"
    
    # 验证值
    is_valid, error_msg = approval.validate_control_value(control, value)
    if not is_valid:
        print(error_msg)
        continue
    
    # 构建表单项
    form_item = approval.build_form_item(control, value)
    form_data.append(form_item)

# 生成摘要信息
summary_list = approval.generate_summary_list(form_data, template_name="请假审批")

# 提交审批申请
result = approval.apply_event(
    template_id="88219328193",
    creator_userid="zhangsan",
    form_data=form_data,
    summary_list=summary_list,
    use_template_approver=1
)
print(result)

提交审批数据格式示例(Vacation 控件)

当提交包含 Vacation 控件的审批时,数据格式如下:

{
  "creator_userid": "zhangsan",
  "template_id": "88219328193",
  "use_template_approver": 1,
  "apply_data": {
    "contents": [
      {
        "control": "Vacation",
        "id": "Vacation-15111111111",
        "value": {
          "vacation": {
            "selector": {
              "type": "single",
              "options": [
                {
                  "key": "1",
                  "value": [
                    {
                      "text": "事假",
                      "lang": "zh_CN"
                    }
                  ]
                }
              ],
              "exp_type": 0
            },
            "attendance": {
              "date_range": {
                "type": "hour",
                "new_begin": 1568077200,
                "new_end": 1568368800,
                "new_duration": 291600
              },
              "type": 1
            }
          }
        }
      }
    ]
  },
  "summary_list": [
    {
      "summary_info": [
        {
          "text": "请假审批",
          "lang": "zh_CN"
        }
      ]
    },
    {
      "summary_info": [
        {
          "text": "事假",
          "lang": "zh_CN"
        }
      ]
    },
    {
      "summary_info": [
        {
          "text": "2024-01-15到2024-01-16",
          "lang": "zh_CN"
        }
      ]
    }
  ]
}

简化的用户输入格式

用户也可以使用简化的字符串格式输入,系统会自动转换为企业微信API需要的格式:

# 用户输入:"2024-01-15 08:00:00到2024-01-15 17:00:00"
# 系统自动转换为:
{
  "vacation": {
    "attendance": {
      "date_range": {
        "type": "hour",
        "new_begin": 1705276800,
        "new_end": 1705309200,
        "new_duration": 32400
      },
      "type": 1
    }
  }
}

时间格式支持:

  • 完整格式:"2024-01-15 08:00:00到2024-01-15 17:00:00"
  • 日期格式:"2024-01-15到2024-01-16"
  • 中文时间:"上午8点到下午5点"

MCP 协议接口

| 操作 | 参数 | 说明 | |------|------|------| | list_templates | - | 列出所有审批模板 | | get_template | template_id | 获取审批模板详情 | | get_template_by_name | name | 根据名称获取模板 | | parse_template_controls | template_idtemplate_detail | 解析模板控件 | | submit_approval | template_id, creator_userid, form_data, summary_list | 提交审批申请 | | get_approval_detail | sp_no | 获取审批详情 | | chat | message, sender_id, user_id | 聊天交互 |

聊天交互示例

场景1:查询审批模板

  • 用户:有哪些审批模板? 机器人:列出所有可用的审批模板

场景2:完整信息一次性提交审批

  • 用户:帮我完成请假审批,请假类型为事假,请假理由为外出办事,请假时间为上午8点到下午5点 机器人:审批申请提交成功!审批编号:202401150001,你可以继续提交其他审批申请。

场景3:信息不完整时一次性提示缺失内容

  • 用户:帮我提交请假审批,请假理由为家里有事 机器人:还需要补充以下必填内容: 1. 请假类型 2. 请假时间

        请重新提供完整信息,例如:
        '帮我完成请假审批,请假类型为事假,请假理由为外出办事,请假时间为上午8点到下午5点'
    

场景4:逐步填写表单

  • 用户:我要请假 机器人:选择请假模板,列出需要填写的内容,引导用户一步步填写

场景5:报销审批

  • 用户:帮我提交报销审批,报销类型为差旅费,报销金额为500元,报销原因为出差 机器人:审批申请提交成功!审批编号:202401150002,你可以继续提交其他审批申请。

完整交互流程

流程1:一句话完成审批提交(推荐)

用户(sender_id: "WangXiaoMing"):帮我完成请假审批,请假类型为事假,请假理由为外出办事,请假时间为上午8点到下午5点
机器人:审批申请提交成功!
       
       审批编号:202401150001
       
       你可以继续提交其他审批申请。

流程2:信息不完整时一次性提示缺失内容

用户(sender_id: "WangXiaoMing"):帮我提交请假审批,请假理由为家里有事
机器人:还需要补充以下必填内容:
       
       1. 请假类型
       2. 请假时间
       
       请重新提供完整信息,例如:
       '帮我完成请假审批,请假类型为事假,请假理由为外出办事,请假时间为上午8点到下午5点'

用户:帮我完成请假审批,请假类型为病假,请假理由为身体不适,请假时间为2024-01-15到2024-01-16
机器人:审批申请提交成功!
       
       审批编号:202401150002
       
       你可以继续提交其他审批申请。

流程3:逐步填写表单(传统方式)

用户(sender_id: "WangXiaoMing"):我要请假
机器人:好的,为你选择了【请假审批】模板!
       
       需要填写以下内容:
       1. 请假类型[单选/多选] *
          选项:事假、病假、年假
       2. 开始日期[日期] *
       3. 结束日期[日期] *
       4. 请假原因[多行文本]
       
       让我们开始填写吧!
       
【1/4】请假类型[单选/多选] *
选项:事假、病假、年假
请输入内容(或回复'取消'退出):

用户:事假
机器人:【2/4】开始日期[日期] *
请输入内容...

用户:abc
机器人:输入有误:控件 开始日期 必须是日期
       
       请重新输入(或回复'取消'退出):

用户:2024-01-15
机器人:【3/4】结束日期[日期] *
请输入内容...

用户:2024-01-16
机器人:【4/4】请假原因[多行文本]
请输入内容...

用户:家里有事
机器人:审批申请提交成功!
       
       审批编号:202401150003
       
       你可以继续提交其他审批申请。

流程4:报销审批示例

用户(sender_id: "LiSi"):帮我提交报销审批,报销类型为差旅费,报销金额为800元,报销原因为去上海出差,开始日期为2024-01-10,结束日期为2024-01-12
机器人:审批申请提交成功!
       
       审批编号:202401150004
       
       你可以继续提交其他审批申请。

控件类型

| 类型 | 说明 | |------|------| | Text | 文本 | | Textarea | 多行文本 | | Number | 数字 | | Money | 金额 | | Date | 日期/日期+时间 | | Selector | 单选/多选 | | Contact | 成员/部门 | | Tips | 说明文字 | | File | 附件 | | Table | 明细 | | Attendance | 假勤控件 | | Vacation | 请假控件 | | Location | 位置 | | RelatedApproval | 关联审批单 | | Formula | 公式 | | DateRange | 时长 | | BankAccount | 收款账户 |

API 端点

| 功能 | 接口 | |------|------| | 获取审批模板详情 | /cgi-bin/oa/gettemplatedetail | | 提交审批申请 | /cgi-bin/oa/applyevent |