alarm
by @hei-maom
读取飞书/lark 的文本或语音消息,识别是否包含需要提醒的待办和截止时间,并根据消息语义和时间跨度自动判断一个偏宽松的提醒时间。适用于飞书机器人处理“今天 5 点前给我”“明天下午三点提醒我”“发语音说周五前记得提交”这类消息。支持先用 senseaudio asr 把语音转文字,再分析并建立提醒;启用 asr...
clawhub install alarm📖 About This Skill
name: feishu-smart-alarm description: 读取飞书/lark 的文本或语音消息,识别是否包含需要提醒的待办和截止时间,并根据消息语义和时间跨度自动判断一个偏宽松的提醒时间。适用于飞书机器人处理“今天 5 点前给我”“明天下午三点提醒我”“发语音说周五前记得提交”这类消息。支持先用 senseaudio asr 把语音转文字,再分析并建立提醒;启用 asr 时会把传入的本地音频上传到配置的 senseaudio 接口。会将提醒持久化到本地 sqlite,并使用飞书应用凭证向原会话发送确认消息和到点提醒。当前版本硬性要求通过进程环境变量提供 feishu_app_id、feishu_app_secret、senseaudio_api_key;不会读取 .env / .env.local,也不会临时提示输入。 metadata: required_env_vars: - FEISHU_APP_ID - FEISHU_APP_SECRET - SENSEAUDIO_API_KEY optional_env_vars: - FEISHU_BASE_URL - SENSEAUDIO_BASE_URL - REMINDER_DB_PATH - TIMEZONE external_network: - asr 会把传入的本地音频上传到配置的 SenseAudio API(默认 https://api.senseaudio.cn) - 飞书确认消息和提醒消息会发送到配置的 Feishu API(默认 https://open.feishu.cn) persistence: - 提醒内容与状态会持久化到本地 SQLite(默认 ./data/reminders.db) credentials_policy: - 仅从进程环境变量读取凭证,不读取 .env / .env.local,不提供临时输入兜底
Feishu Smart Alarm
概述
这个 Skill 用于在飞书消息中自动识别“需要在某个时间前提醒”的内容,并完成四类动作:
1. 读取文本消息并判断是否需要建立提醒
2. 读取语音消息,先调用 SenseAudio ASR 转写,再判断是否需要建立提醒
3. 解析截止时间,并计算由系统根据消息语义和时间跨度自动判断,更偏宽松一点的预留时间 的提醒时间
4. 立即在原会话发送确认消息:我已经记住并在$时间点$提醒
5. 到点后仅提醒一次,并把提醒发回原飞书会话
默认约定:
Asia/Shanghai适用消息
优先识别以下类型:
今天 5 点前给我明天下午三点提醒我开会周五前记得把这个提交今晚 8 点前把材料发我后天上午记得找我确认下周一 10 点别忘了评审周五前提醒我把材料发出去明天下午三点提醒我开会不建立提醒的情况
以下情况默认不建提醒:
时间解析规则
脚本支持以下常见时间表达:
2026-03-20 15:00、2026/3/20 15:003月20日 15:00、3月20号下午3点今天、明天、后天周一、周五、下周二上午、中午、下午、晚上、凌晨5点、5:30、下午三点默认补全策略:
18:0010:00 / 15:00 / 20:00消息分析规则
建立提醒必须同时满足:
1. 能解析出未来时间 2. 消息里存在待办/提醒/截止语义中的至少一种
强触发关键词示例:
提醒记得别忘截止前给我前发我前提交要做要交开会评审确认安排如果消息虽然没有“提醒”字样,但具有明显的“任务 + 时间”结构,也可以建立提醒。
确认消息规则
一旦建立提醒,必须立刻在原会话发送确认消息:
我已经记住并在$时间点$提醒
其中 $时间点$ 填入提醒时间,不是截止时间。例如:
今天 17:00 前给我 → 可能提醒在 16:20 或 15:30,取决于任务紧急程度下周一开会别忘了 → 可能更早预留数小时甚至前一天提醒到点提醒规则
到达提醒时间后,发送一次提醒消息到原飞书会话。
建议提醒模板:
提醒你:{summary}(截止时间 {deadline_text})提醒 {sender_name}:{summary}(截止时间 {deadline_text})发送成功后,将提醒状态标记为已发送,不再重复提醒。
环境变量(硬性要求)
当前版本硬性要求以下环境变量由运行时注入:
FEISHU_APP_ID=...
FEISHU_APP_SECRET=...
SENSEAUDIO_API_KEY=...
可选项:
FEISHU_BASE_URL=https://open.feishu.cn
FEISHU_SMART_ALARM_DB=./data/reminders.db
FEISHU_SMART_ALARM_TZ=Asia/Shanghai
SENSEAUDIO_BASE_URL=https://api.senseaudio.cn
SENSEAUDIO_ASR_MODEL=sense-asr
强约束:
1. 不读取 .env、.env.local 或其他本地配置文件
2. 不在交互式终端里临时询问 API Key
3. 缺少 SENSEAUDIO_API_KEY 时,所有音频相关入口必须直接失败
4. 缺少 FEISHU_APP_ID / FEISHU_APP_SECRET 时,所有发送确认或发送提醒的入口必须直接失败
脚本入口
1. 分析文本消息
python scripts/main.py analyze-message --text "今天 5 点前给我"
2. 先转写语音,再只做分析
python scripts/main.py analyze-audio --audio /abs/path/input.m4a --sender-name 张三
返回:
transcript3. 只做 ASR 转写
python scripts/main.py transcribe-audio --audio /abs/path/input.m4a
4. 根据文本建立提醒并立即回确认
python scripts/main.py create-reminder \
--text "今天 5 点前给我" \
--receive-id oc_xxx \
--receive-id-type chat_id \
--sender-open-id ou_xxx \
--sender-name 张三
5. 根据语音建立提醒并立即回确认
python scripts/main.py create-reminder-audio \
--audio /abs/path/input.m4a \
--receive-id oc_xxx \
--receive-id-type chat_id \
--sender-open-id ou_xxx \
--sender-name 张三
这个命令会:
6. 轮询并发送到期提醒
python scripts/main.py poll-due
7. 以常驻循环方式运行
python scripts/main.py run-loop --interval 30
表示每 30 秒检查一次是否有到期提醒。
与 PicoClaw 的接法
推荐在飞书消息进入后这样使用:
文本消息
1. 对文本消息调用create-reminder
2. 如果返回 need_reminder=false,继续普通聊天逻辑
3. 如果返回 need_reminder=true:
- 确认消息已发出
- 后台由 run-loop 常驻检查并在到点时发送提醒语音消息
1. 先把飞书语音下载到本地临时文件 2. 对本地文件调用create-reminder-audio
3. 如果返回 need_reminder=false,继续普通聊天逻辑
4. 如果返回 need_reminder=true:
- 确认消息已发出
- 后台由 run-loop 常驻检查并在到点时发送提醒更详细的接法见:
references/integration_cn.mdreferences/time_rules_cn.md