Skill: haojie0114-lang/accountingonfeishu (version 1.0.0)

--- name: AccountingOnFeishu description: 帮用户快速记录日常支出和收入到飞书多维表格。支持文字记账和图片小票 OCR 解析。首次使用时会学习用户已有的记账本习惯，或引导新建记账本。 --- # AccountingOnFeishu ## 描述 帮用户快速记录日常支出和收入到飞书多维表格。支持文字记账和图片小票 OCR 解析（每个项目单独生成一条记录）。 **核心特性**： - 首次使用时，先询问用户是否有现成记账本 - 如有：读取并学习其字段结构、分类习惯，后续按用户习惯记账 - 如无：引导用户新建记账本（支持自定义分类体系） - 所有配置持久化到本地 `config.json` ## 使用场景 用户说以下类似的话时触发： - "记账 吃饭 50" - "记一笔 200 支出 购物" - "收入 5000 工资" - 发送图片小票说"记账" - "这个月花了多少" - "我要记账"（首次使用触发初始化） ## Skill 名称 `AccountingOnFeishu` ## 配置文件 文件路径：`~/.openclaw/workspace/skills/AccountingOnFeishu/config.json` 首次使用时如果不存在，进入**初始化流程**。 ## 初始化流程（首次使用） ### 步骤 1：检查配置 检查 `config.json` 是否存在。 - 存在 → 直接读取配置，进入记账流程 - 不存在 → 进入步骤 2 ### 步骤 2：询问用户 用自然语言问用户： > 还没有配置记账本，你有现成的飞书多维表格记账本吗？ > > 1. **有** → 请提供多维表格链接或 app_token + table_id，我来学习你的记账习惯 > 2. **没有** → 我来帮你新建一个记账本 ### 分支 A：用户有现成记账本 #### A1. 获取用户提供的链接或 token 用户可能提供： - 飞书多维表格链接（如 `https://xxx.feishu.cn/base/APP_TOKEN`） - 或直接说 app_token 和 table_id 从链接中提取 `app_token`。 #### A2. 学习记账本结构 **获取表结构：** ``` feishu_bitable_app_table_field > list - app_token: <用户提供> - table_id: <用户提供> ``` **获取记录样本（学习分类习惯）：** ``` feishu_bitable_app_table_record > list - app_token: <用户提供> - table_id: <用户提供> - page_size: 20 ``` #### A3. 分析并保存配置 从表结构中提取关键信息： | 学习项 | 说明 | |--------|------| | `fields` | 所有字段名和类型 | | `amount_field` | 金额字段名（通常是"金额"或"钱数"） | | `note_field` | 备注字段名（通常是"备注"、"说明"、"描述"） | | `type_field` | 收支类型字段名（通常是"收支"、"类型"、"收入/支出"） | | `date_field` | 日期字段名（如果有） | | `category_field` | 一级分类字段名（如果有） | | `sub_category_field` | 二级分类字段名（如果有） | | `category_options` | 一级分类的所有选项值（单选/多选字段的 options） | | `sub_category_options` | 二级分类的所有选项值 | | `income_value` | 收入类型的选项值（如"收入"、"进账"） | | `expense_value` | 支出类型的选项值（如"支出"、"出账"） | **保存到 config.json：** ```json { "app_token": "xxx", "table_id": "xxx", "table_name": "用户记账本", "fields": { "amount": "金额", "note": "备注", "type": "收支", "date": "日期", "category": "分类", "sub_category": "二级分类" }, "type_options": { "income": "收入", "expense": "支出" }, "category_options": ["餐饮", "交通", "购物", ...], "sub_category_options": ["早餐", "午餐", "晚餐", ...] } ``` #### A4. 向用户确认 告诉用户已学习到的结构： > 已学习你的记账习惯！ > - 金额字段：「金额」 > - 备注字段：「备注」 > - 分类字段：「分类」（有 15 个选项） > - 收支字段：「收支」 > > 以后直接说"记账 吃饭 50"就能按你的习惯记录了 ✅ ### 分支 B：用户没有记账本（新建） #### B1. 询问分类需求 > 我来帮你新建一个记账本，需要几个分类字段？ > > 1. **简单版**：备注、金额、收支、日期（4个字段） > 2. **标准版**：+ 一级分类（餐饮/交通/购物等） > 3. **完整版**：+ 一级分类 + 二级分类 根据用户选择，调用建表流程。 #### B2. 创建多维表格 ``` feishu_bitable_app > create - name: "个人记账本" ``` 返回 `app_token`。 #### B3. 创建数据表（带字段） ``` feishu_bitable_app_table > create - app_token: <上一步返回的> - name: "记账明细" - fields: [ {"field_name": "备注", "type": 1}, {"field_name": "金额", "type": 2, "property": {"formatter": "0.00"}}, {"field_name": "收支", "type": 3, "property": {"options": [ {"name": "收入", "color": 0}, {"name": "支出", "color": 1} ]}}, {"field_name": "日期", "type": 5, "property": {"auto_fill": true, "date_formatter": "yyyy-MM-dd"}}, {"field_name": "分类", "type": 3, "property": {"options": [ {"name": "餐饮", "color": 0}, {"name": "交通", "color": 1}, {"name": "购物", "color": 2}, {"name": "娱乐", "color": 3}, {"name": "住房", "color": 4}, {"name": "医疗", "color": 5}, {"name": "教育", "color": 6}, {"name": "通讯", "color": 7}, {"name": "服装", "color": 8}, {"name": "社交", "color": 9}, {"name": "旅行", "color": 10}, {"name": "数码", "color": 11}, {"name": "日用", "color": 12}, {"name": "其他", "color": 13} ]}} ] ``` **注意**： - 如果用户选择"完整版"，再添加 `二级分类` 字段 - 二级分类可以选项根据`~/.openclaw/workspace/skills/AccountingOnFeishu/config.json.example`来预设，或者也可以先留空让用户自己添加 - `日期` 字段设置 `auto_fill: true`，自动填充创建日期 #### B4. 保存配置 将新建的信息写入 `config.json`，格式同分支 A。 #### B5. 返回确认 > 记账本已创建！✅ > > 📋 [查看记账表格](https://my.feishu.cn/base/APP_TOKEN) > > 以后直接说"记账 吃饭 50"就能记了 ## 工作流程 ### 流程 1：文字记账 **前提**：`config.json` 已存在。 1. **解析用户输入** - 提取备注描述 - 提取金额（数字或数学表达式） - 如果金额是表达式（如 `50-41.83`、`100*0.8`、`60+30`），先计算结果 - 支持 + - * / 和括号 - 计算后取绝对值（避免负数） - 判断收支类型： - 有"收入"/"进账"/"到账"等关键词 → 收支 = `config.type_options.income` - 其他情况 → 收支 = `config.type_options.expense` - 备注 = 用户描述中的消费内容 2. **智能分类（可选）** - 如果配置中有 `category_field`，尝试根据备注关键词匹配分类： - 关键词包含 "饭"/"餐"/"吃"/"外卖" → 餐饮 - 关键词包含 "车"/"地铁"/"公交"/"打车"/"油" → 交通 - 关键词包含 "买"/"购"/"淘宝"/"京东" → 购物 - 关键词包含 "电影"/"游戏"/"唱" → 娱乐 - ...（其他关键词匹配） - 如果无法匹配，分类字段留空 3. **写入多维表格** 使用 `config.json` 中学习到的字段名： ``` feishu_bitable_app_table_record > create - app_token: <config.app_token> - table_id: <config.table_id> - fields: <config.fields.note>: <备注> <config.fields.amount>: <金额> <config.fields.type>: <收入/支出> <config.fields.category>: <智能分类结果>（如果有） ``` - 日期字段如果设置了 auto_fill，无需手动写入 4. **返回确认** - 简要告诉用户已记录 - 附上多维表格链接：`https://my.feishu.cn/base/<config.app_token>` ### 流程 2：图片小票记账 1. **下载并分析图片** - 如果图片在消息中，先用 `feishu_im_bot_image` 或 `feishu_im_user_fetch_resource` 下载 - 用 `image` 工具（Kimi vision）分析图片内容 2. **OCR 解析每个项目** - 提示词应要求：列出小票上每个商品/项目，单独一行 - 格式：`<价格> <项目描述>` - 忽略店名、总计、找零等无关信息 3. **批量写入多维表格** 使用 `config.json` 中学习到的字段名： ``` feishu_bitable_app_table_record > batch_create - app_token: <config.app_token> - table_id: <config.table_id> - records: [ { fields: { <note_field>: "项目描述1", <amount_field>: <价格>, <type_field>: <expense_value> } }, { fields: { <note_field>: "项目描述2", <amount_field>: <价格>, <type_field>: <expense_value> } }, ... ] ``` 4. **返回确认** - 告诉用户共解析出 N 个项目 - 总金额是多少 - 附上多维表格链接 ## 字段格式参考 | 字段名 | 类型 | 格式 | 示例 | |--------|------|------|------| | 备注/描述 | 文本 (type=1) | 字符串 | "吃饭"、"小票-咖啡" | | 金额 | 数字 (type=2) | 数字，不带货币符号 | 50 或 128.5 | | 收支/类型 | 单选 (type=3) | 字符串，值从 config 读取 | "支出" 或 "收入" | | 日期 | 日期 (type=5) | 毫秒时间戳 | 自动填充时可不写 | | 分类 | 单选 (type=3) | 字符串，值从 config 读取 | "餐饮" | | 二级分类 | 单选 (type=3) | 字符串，值从 config 读取 | "午餐" | **重要**： - 所有字段名都从 `config.json` 中读取，不要假设固定名称 - 金额只写数字，不带 `¥` 或 `元` - 日期字段如设置了 auto_fill，无需手动写入 ## 智能分类关键词映射 如果用户记账本有分类字段，可尝试按关键词匹配： | 关键词 | 分类 | |--------|------| | 饭、餐、吃、外卖、食堂、火锅、烧烤 | 餐饮 | | 车、地铁、公交、打车、滴滴、油费、停车、高速 | 交通 | | 买、购、淘宝、京东、拼多多、天猫、商场 | 购物 | | 电影、游戏、唱K、酒吧、剧本杀、游乐场 | 娱乐 | | 房租、水电、物业、燃气、宽带 | 住房 | | 药、医院、诊所、体检、医保 | 医疗 | | 书、课、培训、考试、学费 | 教育 | | 话费、流量、宽带、电话 | 通讯 | | 衣服、鞋、包、化妆品、护肤品 | 服装 | | 朋友、聚会、送礼、红包 | 社交 | | 酒店、机票、火车票、景点、签证 | 旅行 | | 手机、电脑、耳机、键盘、鼠标 | 数码 | | 纸巾、洗发水、洗衣液、牙膏 | 日用 | 匹配失败时分类留空，不强制填写。 ## 财务建议生成（可选） 记录完成后，可以根据以下情况给出简短建议： | 情况 | 建议类型 | |------|---------| | 单笔 > 500 元 | "这笔开支不小哦，考虑一下是否真的必要？" | | 同一类别当天多笔 | "今天在[X分类]花了[N]次，要不要合并一下？" | | 图片识别出多个项目 | "小票解析出[N]项，总共[X]元，平均每项[Y]元" | | 金额异常（过大或过小） | "这个金额有点奇怪，确定没记错吗？" | | 无特别情况 | 直接确认即可 | **原则**：建议要简短、自然、不啰嗦，可以偶尔调皮一下。 ## 注意事项 - `config.json` 是核心配置文件，所有字段映射和 token 都在这里 - 金额需要是数字类型，不是字符串 - 单次批量创建最多 500 条（图片小票一般不会超） - 图片下载后保存在 `/tmp/openclaw/` 下 - 解析图片时，prompt 要明确要求输出每个项目的价格和描述 - 学习现有记账本时，如果字段类型不匹配（如金额字段是文本而非数字），向用户说明并询问是否需要调整

path: README.md
content: # AccountingOnFeishu

> 飞书多维表格智能记账助手 —— 支持文字记账、图片小票OCR识别，首次使用自动学习你的记账习惯。

## ✨ 功能特性

- **📝 文字记账**：一句话记账，支持数学表达式（如 `100*0.8`）
- **📷 图片 OCR**：拍照小票自动识别，批量记账
- **🧠 智能学习**：首次使用读取你的现有记账本，学习字段结构和分类习惯
- **🏗️ 一键建表**：没有记账本时自动创建飞书多维表格
- **🎯 自动分类**：根据关键词智能匹配一级/二级分类
- **📅 日期自动**：日期和月份自动填充，无需手动填写

## 🚀 安装

```bash
openclaw skill install accounting-on-feishu
```

或通过 ClawHub 安装：
```
https://clawhub.ai/YOUR_USERNAME/accounting-on-feishu
```

## 📖 使用方法

### 首次使用（初始化）

直接说：
```
我要记账
```

助手会询问：
1. **有现成记账本** → 提供飞书多维表格链接，助手学习你的字段结构
2. **没有记账本** → 引导创建新的记账本（简单/标准/完整版可选）

### 文字记账

```
记账 吃饭 50
记账 打车 23.5
收入 工资 5000
记账 超市购物 128 支出
```

**支持表达式：**
```
记账 分摊 150/3
记账 折扣 200*0.85
```

### 图片小票记账

发送图片并说：
```
记账
```

助手自动 OCR 识别小票上的每个项目，批量写入。

## 🗂️ 表格结构

默认创建的记账本包含以下字段：

| 字段 | 类型 | 说明 |
|------|------|------|
| 备注 | 文本 | 消费描述（主键） |
| 日期 | 日期 | 自动填充 |
| 金额 | 数字 | 消费金额 |
| 收支 | 单选 | 收入 / 支出 |
| 分类 | 单选 | 餐饮、交通、购物、娱乐等 |
| 二级分类 | 单选 | 餐饮-日常/蔬果、餐饮-外卖等 |
| 月份 | 公式 | 自动计算 |
| 复盘 | 单选 | 必要 / 想要 / 稳定 / 风险 |

**一级分类选项：**
`收入`、`居住`、`餐饮`、`交通`、`购物`、`娱乐`、`健康`、`学习`、`社交`、`投资/储蓄`、`宠物`、`长辈`、`无匹配类别`

**二级分类示例：**
- `餐饮-日常/蔬果`、`餐饮-零食`、`餐饮-大餐/外卖`、`餐饮-饮品`
- `交通-停车`、`交通-油费电费`、`交通-保养维修`、`交通-路费`
- `购物-生活日用`、`购物-衣物鞋包`、`购物-电子产品`、`购物-兴趣爱好`
- `居住-房贷/房租/物业`、`居住-电费/水费`、`居住-通讯/其他`
- `宠物-洗护/医疗`、`宠物-狗粮/零食`、`宠物-用品`
- `健康-医疗/药品`、`健康-保健`
- `学习-书籍`、`学习-课程资料`
- `社交-礼物`、`社交-红包`、`社交-捐赠`
- `收入-工资`、`收入-补贴`

## ⚙️ 配置

### 使用现有记账本

提供你的飞书多维表格链接：
```
https://my.feishu.cn/base/APP_TOKEN?table=TABLE_ID
```

助手会自动学习你的字段名和分类体系。

### 配置文件

学习后的配置保存在：
```
~/.openclaw/workspace/skills/AccountingOnFeishu/config.json
```

### 自定义分类

如果你希望使用自己的分类体系，可以：
1. 在飞书中先创建好多维表格，设置好分类字段
2. 让助手学习你的表格结构

## 🎯 智能分类关键词

助手会根据备注自动匹配分类：

| 关键词 | 匹配分类 |
|--------|---------|
| 饭、餐、吃、外卖、食堂、火锅、烧烤 | 餐饮 |
| 车、地铁、公交、打车、滴滴、油费、停车 | 交通 |
| 买、购、淘宝、京东、拼多多、天猫 | 购物 |
| 电影、游戏、唱K、酒吧、剧本杀 | 娱乐 |
| 房租、水电、物业、燃气、宽带 | 居住 |
| 药、医院、诊所、体检 | 健康 |
| 书、课、培训、考试、学费 | 学习 |
| 话费、流量、宽带、电话 | 居住-通讯/其他 |
| 衣服、鞋、包、化妆品 | 购物-衣物鞋包 |
| 朋友、聚会、送礼、红包 | 社交 |
| 酒店、机票、火车票、景点 | （暂不归入旅行，需手动选择） |
| 手机、电脑、耳机、键盘 | 购物-电子产品 |
| 纸巾、洗发水、洗衣液、牙膏 | 购物-生活日用 |

## 📝 示例

```
用户：记账 蜜雪冰城 10.6
助手：记好啦！
- 支出：蜜雪冰城 10.6元
- 分类：餐饮
- 二级分类：餐饮-饮品
- 复盘：（留空，可手动填写）

用户：记账 绝味鸭脖 26.18
助手：记好啦！
- 支出：绝味鸭脖 26.18元
- 分类：餐饮
- 二级分类：餐饮-零食

用户：记账 嘤嘤洗澡 50
助手：记好啦！
- 支出：嘤嘤洗澡 50元
- 分类：宠物
- 二级分类：宠物-洗护/医疗
```

## ⚠️ 注意事项

1. **金额只写数字**，不要带 ¥ 或 元
2. **日期自动填充**，不需要手动填写
3. **复盘字段留空**，供用户后续手动复盘时填写
4. **图片小票**需清晰可辨认，系统会自动解析每个项目
5. **配置文件中不要包含敏感 token**（发布版本请删除 config.json，保留 config.json.example）

## 🤝 贡献

欢迎提交 Issue 和 PR！

## 📄 许可证

MIT License


path: clawhub.json
content: {
  "name": "accounting-on-feishu",
  "version": "1.0.0",
  "description": "帮用户快速记录日常支出和收入到飞书多维表格。支持文字记账和图片小票OCR解析。首次使用时会学习用户已有的记账本习惯，或引导新建记账本。",
  "author": "haojie0114-lang",
  "license": "MIT",
  "keywords": [
    "feishu",
    "lark",
    "accounting",
    "记账",
    "bitable",
    "多维表格",
    "expense",
    "income",
    "OCR",
    "receipt"
  ],
  "category": "效率工具",
  "openclaw": {
    "minVersion": "1.0.0"
  },
  "repository": "",
  "homepage": "",
  "bugs": {
    "url": "https://github.com/YOUR_USERNAME/accounting-on-feishu/issues"
  }
}


path: config.local.json
content: {
  "app_token": "EhS4bkmArao334s8NHYcZU5tnob",
  "table_id": "tblziJwDxWqGPyWM",
  "table_name": "个人记账本",
  "fields": {
    "amount": "金额",
    "note": "备注",
    "type": "收支",
    "date": "日期",
    "category": "分类",
    "sub_category": "二级分类",
    "month": "月份",
    "review": "复盘"
  },
  "type_options": {
    "income": "收入",
    "expense": "支出"
  },
  "category_options": [
    "收入", "居住", "餐饮", "交通", "购物",
    "娱乐", "健康", "学习", "社交",
    "投资/储蓄", "宠物", "长辈", "无匹配类别"
  ],
  "sub_category_options": [
    "餐饮-日常/蔬果", "餐饮-零食", "餐饮-大餐/外卖", "餐饮-外卖", "餐饮-饮品",
    "居住-房贷/房租/物业", "居住-电费/水费", "居住-通讯/其他",
    "购物-生活日用", "购物-衣物鞋包", "购物-电子产品", "购物-兴趣爱好",
    "娱乐-会员订阅", "娱乐-游戏/电影", "娱乐-其他",
    "学习-书籍", "学习-课程资料",
    "社交-礼物", "社交-红包", "社交-捐赠",
    "交通-停车", "交通-油费电费", "交通-保养维修", "交通-路费",
    "宠物-洗护/医疗", "宠物-狗粮/零食", "宠物-用品",
    "健康-医疗/药品", "健康-保健",
    "收入-工资", "收入-补贴",
    "长辈-红包",
    "医疗-挂号", "医疗-治疗",
    "办公-文具",
    "无匹配类别"
  ],
  "review_options": ["必要", "想要", "稳定", "风险"],
  "auto_detect_category": true,
  "date_auto_fill": true,
  "month_formula": true
}


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)