Install
openclaw skills install accountingonfeishu帮用户快速记录日常支出和收入到飞书多维表格。支持文字记账和图片小票 OCR 解析。首次使用时会学习用户已有的记账本习惯,或引导新建记账本。
openclaw skills install accountingonfeishu帮用户快速记录日常支出和收入到飞书多维表格。支持文字记账和图片小票 OCR 解析(每个项目单独生成一条记录)。
核心特性:
config.json用户说以下类似的话时触发:
AccountingOnFeishu
文件路径:~/.openclaw/workspace/skills/AccountingOnFeishu/config.json
首次使用时如果不存在,进入初始化流程。
检查 config.json 是否存在。
用自然语言问用户:
还没有配置记账本,你有现成的飞书多维表格记账本吗?
- 有 → 请提供多维表格链接或 app_token + table_id,我来学习你的记账习惯
- 没有 → 我来帮你新建一个记账本
用户可能提供:
https://xxx.feishu.cn/base/APP_TOKEN)从链接中提取 app_token。
获取表结构:
feishu_bitable_app_table_field > list
- app_token: <用户提供>
- table_id: <用户提供>
获取记录样本(学习分类习惯):
feishu_bitable_app_table_record > list
- app_token: <用户提供>
- table_id: <用户提供>
- page_size: 20
从表结构中提取关键信息:
| 学习项 | 说明 |
|---|---|
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:
{
"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": ["早餐", "午餐", "晚餐", ...]
}
告诉用户已学习到的结构:
已学习你的记账习惯!
- 金额字段:「金额」
- 备注字段:「备注」
- 分类字段:「分类」(有 15 个选项)
- 收支字段:「收支」
以后直接说"记账 吃饭 50"就能按你的习惯记录了 ✅
我来帮你新建一个记账本,需要几个分类字段?
- 简单版:备注、金额、收支、日期(4个字段)
- 标准版:+ 一级分类(餐饮/交通/购物等)
- 完整版:+ 一级分类 + 二级分类
根据用户选择,调用建表流程。
feishu_bitable_app > create
- name: "个人记账本"
返回 app_token。
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,自动填充创建日期将新建的信息写入 config.json,格式同分支 A。
记账本已创建!✅
📋 查看记账表格
以后直接说"记账 吃饭 50"就能记了
前提:config.json 已存在。
解析用户输入
50-41.83、100*0.8、60+30),先计算结果config.type_options.incomeconfig.type_options.expense智能分类(可选)
category_field,尝试根据备注关键词匹配分类:
写入多维表格
使用 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>: <智能分类结果>(如果有)
返回确认
https://my.feishu.cn/base/<config.app_token>下载并分析图片
feishu_im_bot_image 或 feishu_im_user_fetch_resource 下载image 工具(Kimi vision)分析图片内容OCR 解析每个项目
<价格> <项目描述>批量写入多维表格
使用 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> } },
...
]
返回确认
| 字段名 | 类型 | 格式 | 示例 |
|---|---|---|---|
| 备注/描述 | 文本 (type=1) | 字符串 | "吃饭"、"小票-咖啡" |
| 金额 | 数字 (type=2) | 数字,不带货币符号 | 50 或 128.5 |
| 收支/类型 | 单选 (type=3) | 字符串,值从 config 读取 | "支出" 或 "收入" |
| 日期 | 日期 (type=5) | 毫秒时间戳 | 自动填充时可不写 |
| 分类 | 单选 (type=3) | 字符串,值从 config 读取 | "餐饮" |
| 二级分类 | 单选 (type=3) | 字符串,值从 config 读取 | "午餐" |
重要:
config.json 中读取,不要假设固定名称¥ 或 元如果用户记账本有分类字段,可尝试按关键词匹配:
| 关键词 | 分类 |
|---|---|
| 饭、餐、吃、外卖、食堂、火锅、烧烤 | 餐饮 |
| 车、地铁、公交、打车、滴滴、油费、停车、高速 | 交通 |
| 买、购、淘宝、京东、拼多多、天猫、商场 | 购物 |
| 电影、游戏、唱K、酒吧、剧本杀、游乐场 | 娱乐 |
| 房租、水电、物业、燃气、宽带 | 住房 |
| 药、医院、诊所、体检、医保 | 医疗 |
| 书、课、培训、考试、学费 | 教育 |
| 话费、流量、宽带、电话 | 通讯 |
| 衣服、鞋、包、化妆品、护肤品 | 服装 |
| 朋友、聚会、送礼、红包 | 社交 |
| 酒店、机票、火车票、景点、签证 | 旅行 |
| 手机、电脑、耳机、键盘、鼠标 | 数码 |
| 纸巾、洗发水、洗衣液、牙膏 | 日用 |
匹配失败时分类留空,不强制填写。
记录完成后,可以根据以下情况给出简短建议:
| 情况 | 建议类型 |
|---|---|
| 单笔 > 500 元 | "这笔开支不小哦,考虑一下是否真的必要?" |
| 同一类别当天多笔 | "今天在[X分类]花了[N]次,要不要合并一下?" |
| 图片识别出多个项目 | "小票解析出[N]项,总共[X]元,平均每项[Y]元" |
| 金额异常(过大或过小) | "这个金额有点奇怪,确定没记错吗?" |
| 无特别情况 | 直接确认即可 |
原则:建议要简短、自然、不啰嗦,可以偶尔调皮一下。
config.json 是核心配置文件,所有字段映射和 token 都在这里/tmp/openclaw/ 下