Install
openclaw skills install wecom-smartsheet企业微信智能表格全流程自动化操作技能。触发词:企微智能表格、智能表格、工作任务表格、费用申请表格、视频制作表格、企微表格、新建任务、添加任务、添加费用、费用申请、报销、视频制作流程、工作流、任务提醒、到期提醒、巡检、企微工作流。 任何涉及在企微智能表格中新增/查询/提醒/通知的操作,均触发此技能。
openclaw skills install wecom-smartsheet企业微信智能表格全流程自动化操作技能。 将用户的自然语言请求转化为企微智能表格写入 + 群机器人通知 + 本地追踪 + 定时提醒的完整闭环。
| 表格名称 | 标识符 | 说明 |
|---|---|---|
| 费用申请系统 | expense | 费用报销全流程审批 |
| 工作任务系统 | task | 工作任务分配与进度追踪 |
| 视频制作工作流 | video | 视频制作多阶段协同 |
配置方式:首次使用前,需将企微智能表格的 Webhook Key 填入下方的占位符。Webhook Key 在企微文档 → 智能表格 → 更多 → Webhook 中获取。
表格写入 URL 格式:https://qyapi.weixin.qq.com/cgi-bin/wedoc/smartsheet/webhook?key={Webhook_Key}
| 群名称 | 对应表格 | 说明 |
|---|---|---|
| 费用审批群 | expense | 费用申请通知与审批提醒 |
| 工作任务群 | task | 任务分配与到期提醒 |
| 视频制作群 | video | 视频制作进度通知 |
群通知 URL 格式:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={Bot_Key}
费用申请系统 (expense) ──→ 费用审批群 (expense bot)
工作任务系统 (task) ──→ 工作任务群 (task bot)
视频制作工作流 (video) ──→ 视频制作群 (video bot)
⚠️ 绝对不能搞混! 每个表格的通知必须发到它自己对应的群,不能统一发到所有群。
这是核心规则。每次操作企微智能表格,必须完整执行以下四步,缺一不可。
| 步骤 | 操作 | 执行方式 | 说明 |
|---|---|---|---|
| ① 写入表格 | 构造 payload,POST 到表格 Webhook | curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/wedoc/smartsheet/webhook?key={key}" -H "Content-Type: application/json" -d '{payload}' | payload 中 add_records[0].values 的 key 是字段 ID,value 按字段类型传值 |
| ② 群通知 | 发送 Markdown 消息到对应群机器人 | curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={bot_key}" -H "Content-Type: application/json" -d '{markdown_payload}' | 必须发到该表格对应的群,不能发错 |
| ③ 本地追踪 | 同步写入 wecom_deadline_tracker.json | 调用 Python 脚本 track_record() 或手动追加 JSON | 记录到期信息,供每日巡检脚本读取 |
| ④ 设置提醒 | 创建一次性定时提醒,到期前发到对应群 | WorkBuddy automation_update 工具,scheduleType="once",prompt 中用 curl 调群机器人 | 提醒消息发到对应群 |
请求格式:
{
"add_records": [
{
"values": {
"字段ID": "字段值",
"字段ID": "字段值"
}
}
]
}
curl 完整示例(工作任务系统):
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/wedoc/smartsheet/webhook?key={TASK_WEBHOOK_KEY}" \
-H "Content-Type: application/json" \
-d '{
"add_records": [{
"values": {
"ftQMc5": "查看公司写字楼附近的商业情况",
"fMAfWQ": [{"user_id": "USER_ID_1"}],
"fn8TJd": [{"user_id": "USER_ID_2"}],
"fsaQFC": [{"user_id": "USER_ID_3"}],
"fSP1Xe": "1777353600000",
"fIH343": "1777447060000",
"fp6iMs": [{"text": "未开始"}],
"f9ftBb": 0
}
}]
}'
成功响应:
{"errcode": 0, "errmsg": "ok", "add_records": [{"record_id": "recXXXXXX"}]}
失败响应示例:
{"errcode": 40001, "errmsg": "invalid userid"}
Markdown 消息格式:
{
"msgtype": "markdown",
"markdown": {
"content": "**📌 新任务通知**\n\n> 任务:<font color=\"info\">任务名称</font>\n> 责任人:XXX\n> 截止日期:2026-05-01\n> 状态:未开始\n\n请及时处理!"
}
}
curl 完整示例(工作任务群):
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={TASK_BOT_KEY}" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "markdown",
"markdown": {
"content": "**📌 新任务通知**\n\n> 任务:<font color=\"info\">查看公司写字楼附近的商业情况</font>\n> 责任人:XXX\n> 协作人:XXX\n> 知会人:XXX\n> 截止日期:2026-05-01\n> 状态:未开始\n\n请及时处理!"
}
}'
通知模板(按表格类型):
| 表格类型 | 标题 emoji | 标题前缀 | 关键字段 |
|---|---|---|---|
| expense | 💰 | 费用审批通知 | 报销描述、金额、申请人、付款截止 |
| task | 📌 | 工作任务通知 | 任务描述、责任人、协作人、知会人、截止日期 |
| video | 🎬 | 视频制作通知 | 视频标题、当前阶段、负责人、截止日期 |
每次成功写入表格后,需将关键信息追加到本地 JSON 文件。
文件路径:{WORKDIR}/wecom_deadline_tracker.json
记录格式:
{
"table": "task",
"record_id": "recXXXXXX",
"name": "任务名称",
"deadline": "2026-05-01",
"responsible": "userid",
"data": { ... },
"tracked_at": "2026-04-27T16:30:00",
"notified": false
}
可用 Python 函数(来自 wecom_smartsheet.py):
track_record(table, data, record_id) — 自动追加记录load_tracker() — 读取所有追踪记录get_upcoming_deadlines(days=3) — 获取未来 N 天内到期的记录使用 WorkBuddy 的 automation_update 工具创建一次性定时任务。
参数:
mode: "suggested create"name: "任务提醒-{任务名称}"scheduleType: "once"scheduledAt: ISO 8601 格式,如 "2026-04-28T09:00"status: "ACTIVE"prompt: 包含 curl 命令,直接调群机器人发送提醒prompt 模板:
发送一条提醒消息到工作任务群。执行以下命令:
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={TASK_BOT_KEY}" -H "Content-Type: application/json" -d '{"msgtype":"markdown","markdown":{"content":"**⏰ 任务提醒**\n\n> 任务:<font color=\"warning\">{任务名称}</font>\n> 责任人:{责任人}\n> 截止日期:{截止日期}\n> 状态:{状态}\n\n请尽快处理!"}}'
发送完成后简要报告结果。
| 字段中文名 | 字段 ID | 字段类型 | 格式说明 | 可选值 |
|---|---|---|---|---|
| 报销描述 | f95bql | 文本 | 字符串 | — |
| 报销费用类型 | fSIkwz | 文本数组 | [{"text": "选项"}] | 房租税金、办公用品、差旅费、餐饮费、其他 |
| 费用类型 | fV2Vy0 | 文本数组 | [{"text": "选项"}] | — |
| 费用内容 | ftQMc5 | 文本 | 字符串 | — |
| 金额 | ftk5Tx | 文本 | ⚠️ 必须传字符串,如 "4800" | — |
| 实发工资金额 | fv0Ji4 | 文本 | 字符串 | — |
| 单据图片 | ffC9Tb | 附件 | Webhook 不支持,传 [] | — |
| 收款户名 | fQgUks | 文本 | 字符串 | — |
| 收款人开户银行 | fFh8FX | 文本 | 字符串 | — |
| 收款人银行账号 | fpe6NV | 文本 | 字符串 | — |
| 财务初审人 | fMAfWQ | 人员 | [{"user_id": "xxx"}] | — |
| 财务初审意见 | f2hMiW | 文本 | 字符串 | — |
| 终审人员 | fn8TJd | 人员 | [{"user_id": "xxx"}] | — |
| 终审人员意见 | ff1LL6 | 文本 | 字符串 | — |
| 终审结果 | fMRZPT | 文本数组 | [{"text": "选项"}] | 同意、驳回、待审批 |
| 终审审批时间 | fs4s7u | 日期 | 毫秒时间戳字符串 | — |
| 支付账户 | fBOypp | 文本数组 | [{"text": "选项"}] | 示例账户 |
| 银行制单日期 | fgbqSn | 日期 | 毫秒时间戳字符串 | — |
| 支付人 | fbA3YP | 人员 | [{"user_id": "xxx"}] | — |
| 付款截止日期 | fgeUSZ | 日期 | 毫秒时间戳字符串 | — |
| 支付人意见 | f4JIH4 | 文本数组 | [{"text": "选项"}] | 已支付、待支付 |
| 支付日期 | fafRRt | 日期 | 毫秒时间戳字符串 | — |
| 支付凭据 | fowtyf | 附件 | Webhook 不支持,传 [] | — |
| 流程结果 | fG5K0s | 文本数组 | [{"text": "选项"}] | 已完成、进行中、已取消 |
| 终审日期 | fy8sMG | 日期 | 毫秒时间戳字符串 | — |
| 审批进度 | fZPqRZ | 文本数组 | [{"text": "选项"}] | 待初审、初审通过、待终审、终审通过、终审驳回 |
| 字段中文名 | 字段 ID | 字段类型 | 格式说明 | 可选值 |
|---|---|---|---|---|
| 任务详细描述 | ftQMc5 | 文本 | 字符串 | — |
| 填写任务最新进展 | fAUNqS | 文本 | 字符串 | — |
| 填写时间 | fJtBHe | 日期 | 毫秒时间戳字符串 | — |
| 完全责任人 | fMAfWQ | 人员 | [{"user_id": "xxx"}] | — |
| 任务结果交付给谁 | fvMIN1 | 人员 | [{"user_id": "xxx"}] | — |
| 任务重要紧急分类 | fLjDXp | 文本数组 | [{"text": "选项"}] | 重要紧急、重要不紧急、紧急不重要、不紧急不重要 |
| 任务类型 | ftk5Tx | 文本数组 | [{"text": "选项"}] | 财务类、市场与销售类、人力资源类、技术类、行政类 |
| 任务优先级 | f8lJy9 | 文本数组 | [{"text": "选项"}] | 星标任务(极其重要紧急)、高、中、低 |
| 图片 | far6pU | 附件 | Webhook 不支持,传 [] | — |
| 协同任务完成的人 | fn8TJd | 人员 | [{"user_id": "xxx"}] | — |
| 不参与任务但需要知会的人 | fsaQFC | 人员 | [{"user_id": "xxx"}] | — |
| 计划开始时间 | fSP1Xe | 日期 | 毫秒时间戳字符串 | — |
| 计划结束时间 | fIH343 | 日期 | 毫秒时间戳字符串 | — |
| 实际开始时间 | fnmp0N | 日期 | 毫秒时间戳字符串 | — |
| 实际结束时间 | fNxWUG | 日期 | 毫秒时间戳字符串 | — |
| 任务工作小时数 | f5mcXr | 数值 | 整数 | — |
| 任务状态 | fp6iMs | 文本数组 | [{"text": "选项"}] | 未开始、进行中、已完成、已取消 |
| 进度 | f9ftBb | 数值 | 浮点数,如 0、0.5、1 | — |
| 每周回顾任务 | fOinuX | 文本数组 | [{"text": "选项"}] | — |
| 每月回顾任务 | furcM5 | 文本数组 | [{"text": "选项"}] | — |
| 任务完成总结 | f2CRNT | 文本 | 字符串 | — |
| 备注 | fCpF71 | 文本 | 字符串 | — |
| 字段中文名 | 字段 ID | 字段类型 | 格式说明 | 可选值 |
|---|---|---|---|---|
| 视频类别 | fIxg8J | 文本数组 | [{"text": "选项"}] | 短视频、长视频、直播、其他 |
| 逐字稿文档 | flj0f9 | 文本 | 字符串(URL) | — |
| AI 生成的视频标题 | fRZCUc | 文本 | 字符串 | — |
| 逐字稿负责人 | ftQMc5 | 人员 | [{"user_id": "xxx"}] | — |
| 文字稿提供日期 | ftk5Tx | 日期 | 毫秒时间戳字符串 | — |
| 视频营销完全责任人 | fExzxn | 人员 | [{"user_id": "xxx"}] | — |
| 视频生成完全责任人 | f0WI70 | 人员 | [{"user_id": "xxx"}] | — |
| 音频负责人 | ffFwIh | 人员 | [{"user_id": "xxx"}] | — |
| 音频制作计划完成日期 | fGP81d | 日期 | 毫秒时间戳字符串 | — |
| 音频制作实际完成日期 | fgbWRh | 日期 | 毫秒时间戳字符串 | — |
| 视频生成负责人 | fn8TJd | 人员 | [{"user_id": "xxx"}] | — |
| 视频制作计划完成日期 | faGcmb | 日期 | 毫秒时间戳字符串 | — |
| 视频制作实际完成日期 | f8SU87 | 日期 | 毫秒时间戳字符串 | — |
| 后期合成负责人 | fsPk4D | 人员 | [{"user_id": "xxx"}] | — |
| 后期计划完成日期 | fRGWEC | 日期 | 毫秒时间戳字符串 | — |
| 后期实际完成日期 | fdRqlx | 日期 | 毫秒时间戳字符串 | — |
| 计划上传发布日期 | fa4rBU | 日期 | 毫秒时间戳字符串 | — |
| 发布负责人 | fQg3so | 人员 | [{"user_id": "xxx"}] | — |
| 实际上传发布日期和时间 | fh0mD5 | 日期 | 毫秒时间戳字符串 | — |
| 备注和总结 | fJSKId | 文本 | 字符串 | — |
| 字段类型 | 传值格式 | 示例 |
|---|---|---|
| 文本 | "字符串" | "查看公司写字楼附近的商业情况" |
| 人员 | [{"user_id": "xxx"}] | [{"user_id": "USER_ID"}] |
| 多人员 | [{"user_id": "A"}, {"user_id": "B"}] | [{"user_id": "USER_ID_1"}, {"user_id": "USER_ID_2"}] |
| 日期 | "Unix毫秒时间戳字符串" | "1777447060000" |
| 文本数组(选择型) | [{"text": "选项文本"}] | [{"text": "未开始"}] |
| 进度 | 数字(浮点) | 0、0.5、1 |
| 数值(整数) | 数字 | 8(工作小时数) |
| 附件 | [] | Webhook 不支持上传附件 |
日期字段必须传 Unix 毫秒时间戳字符串。
计算方法(macOS 终端):
# 将日期转为毫秒时间戳
date -j -f "%Y-%m-%d" "2026-05-01" "+%s000"
# 输出: 1777353600000
Python 方法:
from datetime import datetime
ts = str(int(datetime.strptime("2026-05-01", "%Y-%m-%d").timestamp() * 1000))
# ts = "1777353600000"
⚠️ 绝不能手动计算时间戳! 必须用 date 命令或 Python 计算。
⚠️ 传入无效 userid 会导致整条写入失败!
在首次使用前,请在企微通讯录中确认每个成员的 userid。如果不确定某个人的 userid,先移除该人,写入成功后再补。
用户说:"在工作任务表格中新建一个任务,任务描述:查看公司写字楼附近的商业情况,完全责任人:张三,协作人:李四,知会人:王五,2026-05-01 前完成,2026-04-28 提醒"
执行步骤:
① 计算时间戳:
# 计划开始时间(今天)
date -j -f "%Y-%m-%d" "2026-04-27" "+%s000"
# 计划结束时间
date -j -f "%Y-%m-%d" "2026-05-01" "+%s000"
② 写入表格:
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/wedoc/smartsheet/webhook?key={TASK_WEBHOOK_KEY}" \
-H "Content-Type: application/json" \
-d '{
"add_records": [{
"values": {
"ftQMc5": "查看公司写字楼附近的商业情况",
"fMAfWQ": [{"user_id": "USER_ID_1"}],
"fn8TJd": [{"user_id": "USER_ID_2"}],
"fsaQFC": [{"user_id": "USER_ID_3"}],
"fSP1Xe": "1742697600000",
"fIH343": "1777353600000",
"fp6iMs": [{"text": "未开始"}],
"f9ftBb": 0
}
}]
}'
③ 群通知(工作任务群):
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={TASK_BOT_KEY}" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "markdown",
"markdown": {
"content": "**📌 新任务通知**\n\n> 任务:<font color=\"info\">查看公司写字楼附近的商业情况</font>\n> 责任人:张三\n> 协作人:李四\n> 知会人:王五\n> 截止日期:2026-05-01\n> 状态:未开始\n\n请及时处理!"
}
}'
④ 本地追踪: 调用 track_record("task", data, record_id)
⑤ 设置提醒: 用 automation_update 创建一次性定时任务:
scheduledAt: "2026-04-28T09:00"prompt: 包含 curl 命令调工作任务群机器人发送提醒① 写入表格(费用申请系统):
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/wedoc/smartsheet/webhook?key={EXPENSE_WEBHOOK_KEY}" \
-H "Content-Type: application/json" \
-d '{
"add_records": [{
"values": {
"f95bql": "4月办公室租金",
"fSIkwz": [{"text": "房租税金"}],
"ftk5Tx": "4800",
"fMAfWQ": [{"user_id": "USER_ID"}],
"fgeUSZ": "1777353600000"
}
}]
}'
② 群通知(费用审批群):
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={EXPENSE_BOT_KEY}" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "markdown",
"markdown": {
"content": "**💰 费用审批通知**\n\n> 报销描述:<font color=\"info\">4月办公室租金</font>\n> 费用类型:房租税金\n> 金额:<font color=\"warning\">¥4800</font>\n> 申请人:XXX\n> 付款截止:2026-05-01\n\n请审批!"
}
}'
③ 本地追踪 + ④ 设置提醒:同上
① 写入表格(视频制作工作流):
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/wedoc/smartsheet/webhook?key={VIDEO_WEBHOOK_KEY}" \
-H "Content-Type: application/json" \
-d '{
"add_records": [{
"values": {
"fIxg8J": [{"text": "短视频"}],
"fRZCUc": "AI创业入门5步法",
"ftQMc5": [{"user_id": "USER_ID"}],
"f0WI70": [{"user_id": "USER_ID"}],
"faGcmb": "1777353600000"
}
}]
}'
② 群通知(视频制作群):
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={VIDEO_BOT_KEY}" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "markdown",
"markdown": {
"content": "**🎬 视频制作通知**\n\n> 视频标题:<font color=\"info\">AI创业入门5步法</font>\n> 类别:短视频\n> 逐字稿负责人:XXX\n> 计划完成日期:2026-05-01\n\n请及时推进!"
}
}'
wecom_daily_check.pywecom_deadline_tracker.json 读取所有追踪记录有到期记录时:
**📌 工作任务提醒**
> 日期:2026-04-28
🔴 **任务名称**
截止:2026-05-01(剩余3天)
责任人:XXX
_定时巡检_
无到期记录时:
**📌 工作任务提醒**
> 日期:2026-04-28
> 任务追踪记录:X 条
> 即将到期:0 条(3天内)
> 今日暂无紧急到期任务 ✅
_定时巡检_
紧急程度标识:
| # | 问题 | 原因 | 解决方案 | 日期 |
|---|---|---|---|---|
| 1 | 金额字段写入失败 | 费用表格的 ftk5Tx(金额)是文本类型,传了数字 | 金额必须传字符串,如 "4800" 而非 4800 | — |
| 2 | 三个群收到相同通知 | 巡检脚本只发一条通用摘要到一个群 | 必须按表格类型分别发到对应群,每个群有专属内容 | — |
| 3 | wecom-cli 写入失败 | CLI 的 smartsheet_add_records 需要 sheet_id 且参数复杂 | 放弃 CLI,直接 POST Webhook 更简单可靠 | — |
| 4 | Bot 读取返回 851003 | Bot 未被授权文档访问权限 | 用本地 tracker 文件替代读取,需在企微管理后台添加授权才能启用 | — |
| 5 | xxx userid 无效 | 该用户 ID 在企微中不存在或格式错误 | 移除无效 userid,只传已验证有效的 ID | — |
date -j 命令或 Python datetime 计算。[{"user_id": "xxx"}]。[{"text": "选项"}]。[] 即可。| 文件 | 功能 |
|---|---|
references/wecom_smartsheet.py | 包含所有字段映射、格式转换、Webhook 推送、群通知、本地追踪函数 |
references/wecom_daily_check.py | 读取 tracker,按表格类型分组发送到期提醒到对应群 |
wecom_deadline_tracker.json | JSON 格式的到期追踪记录 |
| Token 存储 | 所有 Webhook URL 和群机器人 URL 的集中存储(本地,不对外发布) |
curl POST Webhook# 推送到表格
push_to_table(table, data, track=True)
# 构造 Webhook payload
build_webhook_payload(table, data)
# 发送群通知
send_notification(notify_type, title, fields, mention_list=None)
# 场景化通知
notify_expense_pending(description, amount, deadline, applicant, reviewer)
notify_task_deadline(task_name, responsible, deadline, priority, progress)
notify_video_milestone(video_title, stage, deadline, responsible)
# 本地追踪
track_record(table, data, record_id)
load_tracker()
save_tracker(records)
get_upcoming_deadlines(days=3)
# 日期转换
date_to_timestamp(date_str) # "2026-05-01" → "1777353600000"
# 字段值自动转换
convert_field_value(table, field_title, value)
企微群机器人 Markdown 仅支持以下语法:
**文本**> 文本<font color="warning">文本</font>(支持 info/warning/comment)[文本](URL)不支持:标题(#)、代码块(```)、表格、图片、列表等。
| 颜色关键字 | 显示效果 | 适用场景 |
|---|---|---|
info | 绿色 | 正常信息、任务名称 |
warning | 橙红色 | 截止日期、金额、紧急提醒 |
comment | 灰色 | 进度、状态等辅助信息 |
克隆此技能后,按以下步骤配置凭证:
在企微智能表格中获取三个表格的 Webhook Key:
在企微群中添加群机器人,获取群机器人 Webhook Key:
配置 userid 映射:
每次操作前,用此清单自查:
[{"user_id": "xxx"}] 格式[{"text": "选项"}] 格式