# Dingtalk Workflow Health Diary

> 健康日记 — 通过对话记录饮食和身体状态，AI 分析关联模式，追踪饮食和身体状态关系。钉钉独有：可整合考勤数据推断作息规律

- Skill: `liangdabiao/dingtalk-workflow-health-diary` (Agent Skill)
- Install (CLI): `npx skillmds@latest add liangdabiao/dingtalk-workflow-health-diary`
- Raw SKILL.md: https://api.skillmd.com/api/skills/liangdabiao/dingtalk-workflow-health-diary/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: liangdabiao (https://skillmd.com/u/liangdabiao)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/liangdabiao/dingtalk-workflow-health-diary

---


# 健康日记 (dingtalk-workflow-health-diary)

> 通过对话记录饮食和身体状态，AI 分析食物与身体不适的关联模式。
> 相比飞书版本，钉钉独有优势：可整合考勤打卡数据间接推断作息规律。

## 触发方式

```
"记录饮食"  "健康日记"  "吃了什么"  "身体不舒服"  "健康追踪"  "午餐记录"
```

## 工作模式

### 模式 1: 文字描述记录

**触发：** "午餐吃了红烧牛肉面和一杯冰美式" / "今天早餐吃了一个三明治"

**工作流：**

```
Step 0: 确保数据表已初始化（见下方"数据初始化"章节）
    └── dws aitable base list → 检查是否存在"健康日记" Base
        不存在 → 执行完整初始化流程（创建 Base → 创建表 → 创建字段）

Step 1: 解析用户输入
├── 提取餐次（早餐/午餐/晚餐/加餐）
├── 提取食物列表和份量
└── 推断日期（"昨天"→-1天、"前天"→-2天，默认今天）

Step 2: AI 检查关联风险
└── dws aitable record query --base-id <hd-base-id> --table-id <correlation-table-id> --keyword "<食物名>" --yes -f json
    如果有高风险食物（关联强度="高"） → 立即提醒

Step 3: 写入饮食记录（⚠️ 必须包含"标题"主字段）
└── dws aitable record create --base-id <hd-base-id> --table-id <diet-table-id> --records '[{"cells":{"标题":"2026-04-06 午餐","日期":"2026-04-06","餐次":"午餐","食物列表":"红烧牛肉面, 冰美式"}}]' --yes -f json

Step 4: 如果有风险，发送提醒
└── dws ding message send --robot-code "bot_code" --users "manager6950" --content "..." --type "1" --yes
```

**输出格式：**

```markdown
已记录饮食：
| 日期 | 餐次 | 食物 |
|------|------|------|
| 2026-04-06 | 午餐 | 红烧牛肉面(一大碗), 冰美式(大杯) |

⚠️ 提醒：之前 3 次喝冰美式后 1-2 小时内都出现了胃部不适，请注意观察。
```

### 模式 2: 身体状态记录

**触发：** "下午胃有点不舒服" / "今天睡得不好" / "头有点晕"

**工作流：**

```
Step 1: 解析身体状态
├── 状态描述（胃部不适/头痛/疲劳/失眠等）
├── 严重程度（轻微/中度/严重）
└── 时间（自动记录当前时间，格式 "YYYY-MM-DDTHH:mm:ss"）

Step 2: AI 回溯检查今日饮食
└── dws aitable record query --base-id <hd-base-id> --table-id <diet-table-id> --limit 50 --yes -f json
    → 从中筛选今日记录，检查时间差

Step 3: 查询历史关联模式
└── dws aitable record query --base-id <hd-base-id> --table-id <correlation-table-id> --limit 50 --yes -f json
    → 查看是否有食物关联

Step 4: 写入身体状态记录
└── dws aitable record create --base-id <hd-base-id> --table-id <health-table-id> --records '[{"cells":{"标题":"2026-04-06 胃部不适","时间":"2026-04-06T15:00:00","状态描述":"胃部不适","严重程度":"轻微"}}]' --yes -f json

Step 5: 如果发现新的关联模式，更新关联分析表
└── dws aitable record create --base-id <hd-base-id> --table-id <correlation-table-id> --records '[{"cells":{"标题":"冰美式-胃部不适","食物":"冰美式","状态":"胃部不适","时间差":"1-2小时","出现次数":1,"关联强度":"中"}}]' --yes -f json
    或更新已有记录：
    dws aitable record update --base-id <hd-base-id> --table-id <correlation-table-id> --records '[{"recordId":"<id>","cells":{"出现次数":3,"关联强度":"高"}}]' --yes -f json
```

### 模式 3: 关联分析

**触发：** "吃什么容易胃不舒服？" / "分析一下饮食和健康的关系" / "有没有食物关联"

**工作流：**

```
Step 1: 查询所有饮食记录和身体状态记录
├── dws aitable record query --base-id <hd-base-id> --table-id <diet-table-id> --limit 100 --yes -f json
└── dws aitable record query --base-id <hd-base-id> --table-id <health-table-id> --limit 100 --yes -f json

Step 2: 查询已有关联分析
└── dws aitable record query --base-id <hd-base-id> --table-id <correlation-table-id> --limit 50 --yes -f json

Step 3: AI 执行关联分析
├── 按食物分组统计身体状态出现频率
├── 计算时间差模式（吃X后多久出现症状）
├── 计算关联强度（高/中/低，基于出现次数和时间一致性）
└── 排除偶然关联（出现次数 < 2 的不报告）

Step 4: 更新关联分析表并输出报告
└── 对每对新的食物-状态关联，写入或更新 correlation 表
```

### 模式 4: 周报生成

**触发：** "生成本周健康报告" / "健康周报"

**工作流：**

```
Step 1: 查询本周数据
├── dws aitable record query --base-id <hd-base-id> --table-id <diet-table-id> --limit 100 --yes -f json
├── dws aitable record query --base-id <hd-base-id> --table-id <health-table-id> --limit 100 --yes -f json
└── dws aitable record query --base-id <hd-base-id> --table-id <correlation-table-id> --limit 50 --yes -f json

Step 2: 查询考勤数据（钉钉独有）
└── dws attendance record get --user "manager6950" --date "2026-04-06" --yes -f json
    → 推断作息规律（上班时间 → 间接了解起床时间）
    → 注意：dws attendance summary 不可用，仅使用 record get 获取考勤数据

Step 3: AI 生成周报
```

**周报格式：**

```markdown
## 健康周报（MM/DD - MM/DD）

### 饮食概览
- 记录天数：N 天
- 总餐次：M 次
- 饮食规律性：较好/一般/较差

### 身体状态
- 不适记录：N 次
- 主要症状：胃部不适 X 次、疲劳 Y 次

### 作息规律（钉钉独有）
- 平均上班打卡时间：HH:MM
- 平均下班打卡时间：HH:MM
- 工作时长：约 N 小时

### 关联发现
| 食物 | 状态 | 出现次数 | 典型时间差 | 关联强度 |
|------|------|---------|-----------|---------|
| 冰美式 | 胃部不适 | 3次 | 1-2小时 | 高 |
| 辣味火锅 | 失眠 | 1次 | 6-8小时 | 中 |

### 建议
- 冰美式与胃部不适有强关联，建议减少摄入或改用热饮
- 辣味火锅建议避免晚餐食用
```

### 模式 5: 主动提醒

**触发：** 用户记录含有高风险食物的饮食时自动触发（嵌入在模式 1 的 Step 2 中）

**工作流：**

```
Step 1: 用户记录饮食 → 提取食物名称关键词

Step 2: 查询关联分析表
└── dws aitable record query --base-id <hd-base-id> --table-id <correlation-table-id> --keyword "<食物名>" --yes -f json

Step 3: 如果发现高关联强度记录（出现次数 ≥ 3 且关联强度="高"） → 立即提醒
```

## 数据初始化

首次使用时，先检查 Base 是否已存在，不存在则按完整流程创建：

```bash
# Step 0: 检查是否已初始化
dws aitable base list --yes -f json | grep "健康日记"
# 如果不存在，执行以下步骤：

# Step 1: 创建 Base
dws aitable base create --name "健康日记" --yes -f json
# 返回 baseId，记为 <hd-base-id>

# Step 2: 创建 3 张表（⚠️ 每张表自动创建一个 primaryDoc 类型的"标题"主字段）
dws aitable table create --base-id <hd-base-id> --name "饮食记录" --yes -f json
# 返回 tableId，记为 <diet-table-id>
dws aitable table create --base-id <hd-base-id> --name "身体状态" --yes -f json
# 返回 tableId，记为 <health-table-id>
dws aitable table create --base-id <hd-base-id> --name "关联分析" --yes -f json
# 返回 tableId，记为 <correlation-table-id>

# Step 3: 为每张表添加业务字段
# ⚠️ 字段类型必须用英文名: text / date / number / select / multiselect
# ⚠️ 字段参数名必须用 "fieldName"（不是 "name"）

# 饮食记录表
dws aitable field create --base-id <hd-base-id> --table-id <diet-table-id> \
  --fields '[{"fieldName":"日期","type":"date"},{"fieldName":"餐次","type":"text"},{"fieldName":"食物列表","type":"text"}]' \
  --yes -f json

# 身体状态表
dws aitable field create --base-id <hd-base-id> --table-id <health-table-id> \
  --fields '[{"fieldName":"时间","type":"text"},{"fieldName":"状态描述","type":"text"},{"fieldName":"严重程度","type":"text"},{"fieldName":"睡眠质量","type":"text"}]' \
  --yes -f json

# 关联分析表
dws aitable field create --base-id <hd-base-id> --table-id <correlation-table-id> \
  --fields '[{"fieldName":"食物","type":"text"},{"fieldName":"状态","type":"text"},{"fieldName":"时间差","type":"text"},{"fieldName":"出现次数","type":"number"},{"fieldName":"关联强度","type":"text"}]' \
  --yes -f json
```

### 表结构总览

**表1: 饮食记录** — tableId: `<diet-table-id>`

| 字段名 | 类型 | 来源 | 说明 |
|--------|------|------|------|
| 标题 | primaryDoc | 自动创建 | 主字段，建议填 "YYYY-MM-DD 餐次" |
| 日期 | date | 手动创建 | 记录日期，格式 "YYYY-MM-DD" |
| 餐次 | text | 手动创建 | 早餐/午餐/晚餐/加餐 |
| 食物列表 | text | 手动创建 | 食物名称和份量，逗号分隔 |

**表2: 身体状态** — tableId: `<health-table-id>`

| 字段名 | 类型 | 来源 | 说明 |
|--------|------|------|------|
| 标题 | primaryDoc | 自动创建 | 主字段，建议填 "YYYY-MM-DD 状态描述" |
| 时间 | text | 手动创建 | 状态记录时间，格式 "YYYY-MM-DDTHH:mm:ss" |
| 状态描述 | text | 手动创建 | 如"胃部不适"、"疲劳" |
| 严重程度 | text | 手动创建 | 轻微/中度/严重 |
| 睡眠质量 | text | 手动创建 | 好/一般/差（可选，需用户主动提供） |

**表3: 关联分析** — tableId: `<correlation-table-id>`

| 字段名 | 类型 | 来源 | 说明 |
|--------|------|------|------|
| 标题 | primaryDoc | 自动创建 | 主字段，建议填 "食物 - 状态" |
| 食物 | text | 手动创建 | 关联的食物 |
| 状态 | text | 手动创建 | 关联的身体状态 |
| 时间差 | text | 手动创建 | 典型延迟（如"1-2小时"） |
| 出现次数 | number | 手动创建 | 关联出现次数 |
| 关联强度 | text | 手动创建 | 高/中/低 |

## dws CLI 命令参考

### 创建健康日记（完整初始化）

```bash
# 1. 创建 Base
dws aitable base create --name "健康日记" --yes -f json

# 2. 创建表（每张表自动生成"标题"主字段）
dws aitable table create --base-id <hd-base-id> --name "饮食记录" --yes -f json
dws aitable table create --base-id <hd-base-id> --name "身体状态" --yes -f json
dws aitable table create --base-id <hd-base-id> --name "关联分析" --yes -f json

# 3. 创建业务字段（类型用英文: text/date/number，参数用 fieldName）
dws aitable field create --base-id <hd-base-id> --table-id <diet-table-id> \
  --fields '[{"fieldName":"日期","type":"date"},{"fieldName":"餐次","type":"text"},{"fieldName":"食物列表","type":"text"}]' --yes -f json
dws aitable field create --base-id <hd-base-id> --table-id <health-table-id> \
  --fields '[{"fieldName":"时间","type":"text"},{"fieldName":"状态描述","type":"text"},{"fieldName":"严重程度","type":"text"},{"fieldName":"睡眠质量","type":"text"}]' --yes -f json
dws aitable field create --base-id <hd-base-id> --table-id <correlation-table-id> \
  --fields '[{"fieldName":"食物","type":"text"},{"fieldName":"状态","type":"text"},{"fieldName":"时间差","type":"text"},{"fieldName":"出现次数","type":"number"},{"fieldName":"关联强度","type":"text"}]' --yes -f json
```

### 记录饮食（⚠️ 必须包含"标题"主字段）

```bash
dws aitable record create --base-id <hd-base-id> --table-id <diet-table-id> \
  --records '[{"cells":{"标题":"2026-04-06 午餐","日期":"2026-04-06","餐次":"午餐","食物列表":"红烧牛肉面(一大碗), 冰美式(大杯)"}}]' \
  --yes -f json
```

### 记录身体状态（⚠️ 必须包含"标题"主字段）

```bash
dws aitable record create --base-id <hd-base-id> --table-id <health-table-id> \
  --records '[{"cells":{"标题":"2026-04-06 胃部不适","时间":"2026-04-06T15:00:00","状态描述":"胃部不适","严重程度":"轻微"}}]' \
  --yes -f json
```

### 查询记录

```bash
# 查询饮食记录
dws aitable record query --base-id <hd-base-id> --table-id <diet-table-id> --limit 50 --yes -f json

# 按关键词查询
dws aitable record query --base-id <hd-base-id> --table-id <correlation-table-id> --keyword "冰美式" --yes -f json

# 查询身体状态
dws aitable record query --base-id <hd-base-id> --table-id <health-table-id> --limit 50 --yes -f json

# 查询关联分析
dws aitable record query --base-id <hd-base-id> --table-id <correlation-table-id> --limit 50 --yes -f json
```

### 更新记录

```bash
# 更新关联分析记录（需要 recordId）
dws aitable record update --base-id <hd-base-id> --table-id <correlation-table-id> \
  --records '[{"recordId":"<recordId>","cells":{"出现次数":3,"关联强度":"高"}}]' --yes -f json
```

### 查询考勤（作息参考，钉钉独有）

```bash
# 获取打卡记录（测试通过；未设考勤组时返回空记录，属正常现象）
dws attendance record get --user "manager6950" --date "2026-04-06" --yes -f json

# 注意：dws attendance summary 服务端报"统计类型错误"(code C0002)，不可用
```

### DING 紧急提醒

```bash
dws ding message send --robot-code "bot_code" --users "manager6950" --content "提醒：你刚吃了冰美式，之前多次在喝完后出现胃部不适" --type "1" --yes
```

## 定时任务

| 任务 | Cron | 说明 |
|------|------|------|
| 健康周报 | `0 20 * * 0` | 每周日 20:00 生成周报 |

```bash
CronCreate: cron="0 20 * * 0", prompt="生成本周的健康报告并保存到知识库", recurring=true, durable=true
```

## 联动 Skill

| 联动 Skill | 数据交互 | 说明 |
|-----------|---------|------|
| morning-brief | 提供饮食提醒 | 晨间简报中增加饮食注意事项 |
| business-advisor | 提供健康数据 | 顾问团关注工作效率与健康的关系 |

## 注意事项

1. 所有 `dws` 命令必须加 `--yes` 标志
2. aitable 字段创建：
   - 类型必须用**英文名**：`text` / `date` / `number` / `select` / `multiselect`（不能用中文"文本"或数字编号 1/2）
   - 参数名必须用 `"fieldName"`（不能用 `"name"`）
3. 每张表自动创建一个 `primaryDoc` 类型的"标题"主字段，创建记录时**必须包含**该字段
4. 关联分析需要积累至少 2 次数据才报告，避免误报
5. 关联强度判断：出现 3 次以上 = 高，2 次 = 中，1 次 = 不报告
6. 考勤数据仅作为作息参考，不作为健康判断依据
7. DING 消息仅用于高风险食物提醒，避免频繁打扰
8. 钉钉 CLI 无图片识别命令（与飞书不同），用户需文字描述食物
9. 考勤查询 `dws attendance record get` 正常工作，但 `dws attendance summary` 服务端报错，不可用
10. 组织未设置考勤组时，attendance record get 返回空记录，属正常现象

## 已知问题

- `dws attendance summary` 服务端报 "统计类型错误"(code C0002)，不可用。考勤数据改用 `dws attendance record get` 获取

