企业微信智能表格全流程自动化操作技能。触发词:企微智能表格、智能表格、工作任务表格、费用申请表格、视频制作表格、企微表格、新建任务、添加任务、添加费用、费用申请、报销、视频制作流程、工作流、任务提醒、到期提醒、巡检、企微工作流。 任何涉及在企微智能表格中新增/查询/提醒/通知的操作,均触发此技能。
---
name: 企微智能表格
description: |
企业微信智能表格全流程自动化操作技能。触发词:企微智能表格、智能表格、工作任务表格、费用申请表格、视频制作表格、企微表格、新建任务、添加任务、添加费用、费用申请、报销、视频制作流程、工作流、任务提醒、到期提醒、巡检、企微工作流。
任何涉及在企微智能表格中新增/查询/提醒/通知的操作,均触发此技能。
version: 1.0.0
author: Jason Xie
disable: false
---
# 企微智能表格 操作技能
> 企业微信智能表格全流程自动化操作技能。
> 将用户的自然语言请求转化为企微智能表格写入 + 群机器人通知 + 本地追踪 + 定时提醒的完整闭环。
---
## 一、系统架构总览
### 1.1 三大智能表格
| 表格名称 | 标识符 | 说明 |
|---|---|---|
| 费用申请系统 | `expense` | 费用报销全流程审批 |
| 工作任务系统 | `task` | 工作任务分配与进度追踪 |
| 视频制作工作流 | `video` | 视频制作多阶段协同 |
> **配置方式**:首次使用前,需将企微智能表格的 Webhook Key 填入下方的占位符。Webhook Key 在企微文档 → 智能表格 → 更多 → Webhook 中获取。
**表格写入 URL 格式**:`https://qyapi.weixin.qq.com/cgi-bin/wedoc/smartsheet/webhook?key={Webhook_Key}`
### 1.2 三个群机器人
| 群名称 | 对应表格 | 说明 |
|---|---|---|
| 费用审批群 | `expense` | 费用申请通知与审批提醒 |
| 工作任务群 | `task` | 任务分配与到期提醒 |
| 视频制作群 | `video` | 视频制作进度通知 |
**群通知 URL 格式**:`https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={Bot_Key}`
### 1.3 表格与群严格一一对应
```
费用申请系统 (expense) ──→ 费用审批群 (expense bot)
工作任务系统 (task) ──→ 工作任务群 (task bot)
视频制作工作流 (video) ──→ 视频制作群 (video bot)
```
**⚠️ 绝对不能搞混!** 每个表格的通知必须发到它自己对应的群,不能统一发到所有群。
---
## 二、四步闭环 SOP(标准操作流程)
> **这是核心规则。每次操作企微智能表格,必须完整执行以下四步,缺一不可。**
| 步骤 | 操作 | 执行方式 | 说明 |
|---|---|---|---|
| **① 写入表格** | 构造 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 调群机器人 | 提醒消息发到对应群 |
### 2.1 步骤①详细:写入表格
**请求格式:**
```json
{
"add_records": [
{
"values": {
"字段ID": "字段值",
"字段ID": "字段值"
}
}
]
}
```
**curl 完整示例(工作任务系统):**
```bash
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
}
}]
}'
```
**成功响应:**
```json
{"errcode": 0, "errmsg": "ok", "add_records": [{"record_id": "recXXXXXX"}]}
```
**失败响应示例:**
```json
{"errcode": 40001, "errmsg": "invalid userid"}
```
### 2.2 步骤②详细:群通知
**Markdown 消息格式:**
```json
{
"msgtype": "markdown",
"markdown": {
"content": "**📌 新任务通知**\n\n> 任务:<font color=\"info\">任务名称</font>\n> 责任人:XXX\n> 截止日期:2026-05-01\n> 状态:未开始\n\n请及时处理!"
}
}
```
**curl 完整示例(工作任务群):**
```bash
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 | 🎬 | 视频制作通知 | 视频标题、当前阶段、负责人、截止日期 |
### 2.3 步骤③详细:本地追踪
每次成功写入表格后,需将关键信息追加到本地 JSON 文件。
**文件路径**:`{WORKDIR}/wecom_deadline_tracker.json`
**记录格式:**
```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 天内到期的记录
### 2.4 步骤④详细:设置提醒
使用 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请尽快处理!"}}'
发送完成后简要报告结果。
```
---
## 三、字段映射表(完整)
### 3.1 费用申请系统(expense)
| 字段中文名 | 字段 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": "选项"}]` | 待初审、初审通过、待终审、终审通过、终审驳回 |
### 3.2 工作任务系统(task)
| 字段中文名 | 字段 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` | 文本 | 字符串 | — |
### 3.3 视频制作工作流(video)
| 字段中文名 | 字段 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` | 文本 | 字符串 | — |
---
## 四、字段格式规范(严格执行)
### 4.1 类型→格式映射表
| 字段类型 | 传值格式 | 示例 |
|---|---|---|
| 文本 | `"字符串"` | `"查看公司写字楼附近的商业情况"` |
| 人员 | `[{"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 不支持上传附件 |
### 4.2 时间戳计算
**日期字段必须传 Unix 毫秒时间戳字符串。**
**计算方法**(macOS 终端):
```bash
# 将日期转为毫秒时间戳
date -j -f "%Y-%m-%d" "2026-05-01" "+%s000"
# 输出: 1777353600000
```
**Python 方法**:
```python
from datetime import datetime
ts = str(int(datetime.strptime("2026-05-01", "%Y-%m-%d").timestamp() * 1000))
# ts = "1777353600000"
```
**⚠️ 绝不能手动计算时间戳!** 必须用 `date` 命令或 Python 计算。
### 4.3 userid 注意事项
> ⚠️ **传入无效 userid 会导致整条写入失败!**
>
> 在首次使用前,请在企微通讯录中确认每个成员的 userid。如果不确定某个人的 userid,先移除该人,写入成功后再补。
---
## 五、完整操作示例
### 5.1 新建工作任务(最常用场景)
**用户说**:"在工作任务表格中新建一个任务,任务描述:查看公司写字楼附近的商业情况,完全责任人:张三,协作人:李四,知会人:王五,2026-05-01 前完成,2026-04-28 提醒"
**执行步骤:**
**① 计算时间戳:**
```bash
# 计划开始时间(今天)
date -j -f "%Y-%m-%d" "2026-04-27" "+%s000"
# 计划结束时间
date -j -f "%Y-%m-%d" "2026-05-01" "+%s000"
```
**② 写入表格:**
```bash
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
}
}]
}'
```
**③ 群通知(工作任务群):**
```bash
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 命令调工作任务群机器人发送提醒
### 5.2 新建费用申请
**① 写入表格(费用申请系统):**
```bash
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"
}
}]
}'
```
**② 群通知(费用审批群):**
```bash
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请审批!"
}
}'
```
**③ 本地追踪** + **④ 设置提醒**:同上
### 5.3 新建视频制作任务
**① 写入表格(视频制作工作流):**
```bash
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"
}
}]
}'
```
**② 群通知(视频制作群):**
```bash
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请及时推进!"
}
}'
```
---
## 六、每日巡检自动化
### 6.1 配置方式
- **运行时间**:每日 09:00
- **执行内容**:运行 `wecom_daily_check.py`
- **工作目录**:本技能所在目录
### 6.2 巡检逻辑
1. 从 `wecom_deadline_tracker.json` 读取所有追踪记录
2. 筛选未来 3 天内到期的记录
3. **按表格类型分组**(task/video/expense)
4. 逐组发送到对应群:
- 有到期记录 → 发送到期提醒(🔴/🟡/🟢 标识紧急程度)
- 无到期记录 → 发送日常摘要
### 6.3 巡检消息模板
**有到期记录时:**
```
**📌 工作任务提醒**
> 日期:2026-04-28
🔴 **任务名称**
截止:2026-05-01(剩余3天)
责任人:XXX
_定时巡检_
```
**无到期记录时:**
```
**📌 工作任务提醒**
> 日期:2026-04-28
> 任务追踪记录:X 条
> 即将到期:0 条(3天内)
> 今日暂无紧急到期任务 ✅
_定时巡检_
```
**紧急程度标识:**
- 🔴 剩余 ≤1 天
- 🟡 剩余 ≤2 天
- 🟢 剩余 ≤3 天
---
## 七、踩坑记录与注意事项
### 7.1 已踩过的坑
| # | 问题 | 原因 | 解决方案 | 日期 |
|---|---|---|---|---|
| 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 | — |
### 7.2 操作注意事项
1. **绝对不要用 wecom-cli 写入智能表格**。直接 POST Webhook 是唯一推荐方式。
2. **绝对不要手动计算时间戳**。用 `date -j` 命令或 Python `datetime` 计算。
3. **金额字段永远传字符串**。即使看起来像数字,也必须用引号包裹。
4. **人员字段必须是数组格式**。即使只有一个人,也要用 `[{"user_id": "xxx"}]`。
5. **文本数组字段必须是数组格式**。即使只有一个选项,也要用 `[{"text": "选项"}]`。
6. **无效 userid 会导致整条记录写入失败**。不确定的 userid 先跳过。
7. **每个表格的通知只发到它对应的群**。task→工作任务群,expense→费用审批群,video→视频制作群。
8. **附件字段无法通过 Webhook 上传**。传 `[]` 即可。
9. **四步闭环必须完整执行**。写入→通知→追踪→提醒,缺一不可。
10. **日期字段传毫秒时间戳字符串**。注意是字符串格式,不是数字。
---
## 八、工具链与脚本
### 8.1 脚本文件
| 文件 | 功能 |
|---|---|
| `references/wecom_smartsheet.py` | 包含所有字段映射、格式转换、Webhook 推送、群通知、本地追踪函数 |
| `references/wecom_daily_check.py` | 读取 tracker,按表格类型分组发送到期提醒到对应群 |
| `wecom_deadline_tracker.json` | JSON 格式的到期追踪记录 |
| Token 存储 | 所有 Webhook URL 和群机器人 URL 的集中存储(本地,不对外发布) |
### 8.2 CLI 工具
- **wecom-cli**(如已安装):**不推荐用于智能表格写入**(参数复杂且需 sheet_id)
- **推荐方式**:直接 `curl` POST Webhook
### 8.3 Python 可用函数(from wecom_smartsheet.py)
```python
# 推送到表格
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 通知格式规范
### 9.1 企微群 Markdown 支持范围
企微群机器人 Markdown 仅支持以下语法:
- **粗体**:`**文本**`
- 引用:`> 文本`
- 字体颜色:`<font color="warning">文本</font>`(支持 `info`/`warning`/`comment`)
- 链接:`[文本](URL)`
**不支持**:标题(#)、代码块(```)、表格、图片、列表等。
### 9.2 颜色值
| 颜色关键字 | 显示效果 | 适用场景 |
|---|---|---|
| `info` | 绿色 | 正常信息、任务名称 |
| `warning` | 橙红色 | 截止日期、金额、紧急提醒 |
| `comment` | 灰色 | 进度、状态等辅助信息 |
---
## 十、首次配置指南
> 克隆此技能后,按以下步骤配置凭证:
1. 在企微智能表格中获取三个表格的 Webhook Key:
- 企微文档 → 智能表格 → 更多 → Webhook
- 将 Key 填入脚本的对应位置
2. 在企微群中添加群机器人,获取群机器人 Webhook Key:
- 群设置 → 群机器人 → 添加机器人
- 记录每个群对应的 Key
3. 配置 userid 映射:
- 在企微通讯录中确认每个成员的 userid
- 建立中文名→userid 的映射表
---
## 十一、执行检查清单
每次操作前,用此清单自查:
- [ ] 确定目标表格类型(expense / task / video)
- [ ] 字段 ID 是否正确(查本文第三章映射表)
- [ ] 人员字段是否用 `[{"user_id": "xxx"}]` 格式
- [ ] 日期字段是否用毫秒时间戳字符串(用命令计算,不手算)
- [ ] 金额字段是否传了字符串(不是数字)
- [ ] 文本数组字段是否用 `[{"text": "选项"}]` 格式
- [ ] userid 是否在已验证列表中(不在则先跳过)
- [ ] 通知是否发到了正确的群(对照对应关系)
- [ ] 本地 tracker 是否已更新
- [ ] 提醒自动化是否已创建
- [ ] 四步闭环是否全部完成
don't have the plugin yet? install it then click "run inline in claude" again.