Files

3.8 KiB
Raw Blame History

name, description, status, version, date
name description status version date
birthday-reminder "管理家人/朋友生日提醒。农历或阳历生日,每年换算公历,生日前7天、前3天、当天通过钉钉提醒杨轩。" proposal v1 2026-09-01T02:42:55.330Z

生日提醒 skill

统一管理杨轩的家人/朋友生日提醒。支持农历或阳历生日,每年换算公历日期,在生日前7天、前3天、当天通过钉钉当前对话提醒杨轩。

触发场景

  • 杨轩提供新的生日信息(农历或阳历)
  • 需要查询/修改/删除某个人的生日提醒
  • 需要为下一年设置生日提醒

成员生日库(记录于 MEMORY.md)

人物 生日类型 出生日期 说明
汪礼平 农历 1968年六月二十日 三次提醒
杨安顺 农历 1968年八月十八日 三次提醒
王芳 农历 1993年十月初七日 三次提醒
杨锦书 阳历 2021年11月10日 卷儿,阳历固定

换算规则

  • 农历生日:每年农历日期对应的公历日期都不同,需要用 lunar_python 逐年换算
  • 阳历生日:日期固定,不换算(如杨锦书每年都是11月10日)

农历换算命令(需要 lunar_python 已安装):

python3 -c "
from lunar_python import Lunar
for year in range(2026, 2031):
    lunar = Lunar.fromYmd(year, 8, 18)  # 月, 日(农历)
    solar = lunar.getSolar()
    print(f'{year}年农历8月18日 = 公历 {solar.getYear()}-{solar.getMonth():02d}-{solar.getDay():02d}')
"

提醒时间点计算

每年按公历生日计算三个提醒日,当天 0 点(UTC)触发

  • 前7天 = 生日 - 7天
  • 前3天 = 生日 - 3天
  • 当天 = 生日当天

创建 cron 任务(核心流程)

每个生日创建3个一次性 cron 任务(前7天/前3天/当天),使用 isolated session + announce 投递到钉钉。

关键投递参数(必须显式设置,否则不会推送到钉钉):

  • --session isolated
  • --announce --channel dingtalk-connector --to 0464031658857345
  • --wake now --delete-after-run

命令模板:

cd /home/yangxuan/.openclaw && openclaw cron create "<UTC时间ISO>" \
  --name "<姓名>生日提前7天" \
  --message "🎂 提醒:<姓名>生日快到了!7天后<br>就是生日。" \
  --session isolated --announce --channel dingtalk-connector \
  --to "0464031658857345" --wake now --delete-after-run

注意:--at 时间不带时区按 UTC 处理。北京时间 = UTC+8。

步骤

  1. 记录/更新生日信息到 MEMORY.md 的"🎂 生日提醒"区域
  2. 若农历生日,用 lunar_python 换算当年及下一年的公历日期;若阳历则固定
  3. 计算三个提醒日(前7天/前3天/当天)
  4. 为每年分别创建3个一次性 cron 任务(isolated + announce 钉钉),必须带 --agent main(多 agent 环境下无 owner 任务会让调度器卡死,阻塞所有提醒);投递只交给 delivery(--announce --channel dingtalk-connector),禁止在 --message/command 里手动调 openclaw message sendCLI 不认识 dingtalk-connector,会失败)
  5. 验证:openclaw cron get <id> 确认任务 delivery 为 dingtalk-connector 且 agentId=main"message send" 在整库应无残留
  6. 更新 MEMORY.md 记录已完成设置的年份

验证

创建后必须确认任务 delivery 已配置为 dingtalk-connector:0464031658857345,否则提醒不会推送到钉钉(main session 的 system-event 默认不投递)。

注意事项

  • 当年提醒时效:若当年提醒日已过,从下一年开始设置
  • 任务为一次性,运行后自动删除;下一年需重新换算农历并新建
  • 农历生日每年代入 lunar_python 换算公历日期(lunar_python 已通过 pip install --break-system-packages --user lunar_python 安装)