配置文件路径: ~/.openclaw/workspace/skills/shelflife/config.json
首次使用时读取此文件,如果 initialized 为 false 或 app_token 为空,则执行 自动初始化流程。
json
{
"bitable": {
"app_token": "",
"table_id": "",
"initialized": false
},
"cron": {
"reminder_job_id": ""
}
}
当 config.json 中 initialized 为 false 或 app_token 为空时, 在用户首次触发保质期相关操作前自动执行:
调用 feishu_bitable_app create,创建名为 "日用品保质期管理" 的多维表格。
调用 feishu_bitable_app_table create,创建表 "商品列表",一次性定义所有字段:
字段名类型说明商品名称文本(1)主键,必填生产日期日期(5)可选保质期截止日期(5)录入时必填有效期时长文本(1)如"12个月",可选剩余天数数字(2)公式自动计算状态单选(3)公式自动计算:正常/即将过期/已过期已用完复选框(7)默认 false标签单选(3)食品/罐装/日用品/洗护用品
字段定义(create 时传入的 fields 数组):
text
商品名称: type=1 (文本)
生产日期: type=5 (日期)
保质期截止: type=5 (日期)
有效期时长: type=1 (文本)
已用完: type=7 (复选框)
标签: type=3 (单选), property.options=["食品","罐装","日用品","洗护用品"]
注意: 剩余天数和状态两个字段依赖公式,多维表格 API 不支持直接创建公式字段,需在表格创建后通过 feishu_bitable_app_table_field create 补充:
剩余天数:数字类型,公式为 DATETIME_DIFF(保质期截止, TODAY(), "day")
状态:单选类型,公式逻辑:
["正常", "即将过期", "已过期"]实际操作: 由于多维表格字段 API 对公式字段的支持有限,如果无法通过 API 创建公式字段,则退化为 由 agent 在每次操作时手动计算 剩余天数和状态字段。此时字段类型仍为数字和单选,但不设置公式,而是在录入/查询时由 agent 计算。
推荐方案: 先尝试创建公式字段,如果 API 不支持则手动计算。在 SKILL 使用中统一按"agent 计算"方式处理,保持兼容。
调用 feishu_bitable_app_table_view create:
将 app_token 和 table_id 写入 config.json,设置 initialized=true。使用 edit 工具更新文件。
调用 cron add,创建每日定时检查任务:
json
{
"name": "保质期过期提醒",
"schedule": { "kind": "cron", "expr": "0 9 * * *", "tz": "Asia/Shanghai" },
"payload": {
"kind": "agentTurn",
"message": "执行保质期过期提醒检查:读取 config.json 获取多维表格信息,查询所有「状态」为「即将过期」或「已过期」且「已用完」为 false 的商品记录。如果有,整理成简洁列表通过飞书发送给当前用户(从消息上下文获取 SenderId);如果没有,静默结束不发消息。config.json 路径:~/.openclaw/workspace/skills/shelflife/config.json"
},
"sessionTarget": "isolated",
"delivery": { "mode": "none" }
}
将返回的 jobId 写入 config.json 的 cron.reminder_job_id。
多维表格创建后,将所有权转移给当前用户(从消息上下文获取 SenderId)。
告知用户:"✅ 保质期管理已初始化完成!已创建多维表格并设置每日 9:00 自动过期提醒。"
字段名类型说明商品名称文本(1)主键,必填生产日期日期(5)可选保质期截止日期(5)录入时必填有效期时长文本(1)如"12个月",可选剩余天数数字(2)由 agent 计算填入状态单选(3)由 agent 计算填入:正常/即将过期/已过期已用完复选框(7)默认 false标签单选(3)食品/罐装/日用品/洗护用品,可选
每次执行操作前:
config.jsoninitialized 为 false 或 app_token 为空 → 执行自动初始化流程在录入、查询时,agent 需要计算并填入 剩余天数 和 状态 字段:
剩余天数 = 保质期截止日期 - 今天(天数)
状态:
用户说"添加xxx"、"录入xxx"、"加个xxx"时:
从用户输入提取:商品名称、保质期截止日期、标签(可选)、生产日期(可选)、有效期时长(可选)
如果用户只给了商品名和保质期时长(如"12个月"),自动计算截止日期
调用 feishu_bitable_app_table_record 的 create,写入字段:
日期格式传毫秒时间戳(number 类型)
录入成功后简要确认
查所有: 用户说"看一下"、"列表"、"都有什么"
→ list action,sort 按剩余天数升序排列
查临期/过期: 用户说"快过期的"、"临期"、"已过期"
→ list + filter,状态 is "即将过期" 或 "已过期",且已用完 is false
查具体商品: 用户说"xxx还有多久"
→ list + filter 商品名称 contains 关键词
当收到飞书卡片按钮回调(action: shelflife_used)或用户说"用完xxx"、"吃完xxx"时:
update action 将「已用完」设为 true用户说"删除xxx"、"去掉xxx"时:
delete action 删除用户说"检查过期"、"过期提醒"时: