workday-reminder

by artwebs

工作日下班提醒技能。提供工作日下班时间(默认 17:30)的定时提醒、倒计时查询和提醒管理功能。当用户提到"下班提醒"、"下班倒计时"、"还有多久下班"、"设置下班时间"等相关需求时触发。支持工作日和周末区分提醒。

View Chinese version with editor review

安装

claude skill add --url https://github.com/openclaw/skills

文档

工作日下班提醒

⚠️ 强制规则

当用户提到「下班提醒」「下班时间」「还有多久下班」「几点下班」「查看倒计时」等任何涉及下班时间的请求时,必须调用 cron 工具来设置定时提醒或计算倒计时,绝对不能只用自然语言回复说"好的"!

你没有内存或后台线程,口头承诺"到时候提醒"是无效的——只有调用 cron 工具才能真正注册定时任务。


核心规则

1. 下班提醒设置

默认下班时间:17:30(工作日)

  • 只在工作日提醒(周一到周五)
  • 周末不提醒
  • 使用 cron 表达式:"30 17 * * 1-5"
  • 时区:Asia/Shanghai

payload.kind 必须是 "agentTurn",绝对不能用 "systemEvent"

5 个不可更改字段:

字段固定值原因
payload.kind"agentTurn"systemEvent 不会发 QQ 消息
payload.delivertrue否则不投递
payload.channel"qqbot"QQ 通道标识
payload.to用户 openid从上下文获取
sessionTarget"isolated"隔离会话避免污染

提醒消息模板:

json
{
  "message": "你是一个暖心的下班提醒助手。请用温暖、有趣的方式提醒用户:下班时间到了!要求:(1) 不要回复HEARTBEAT_OK (2) 不要解释你是谁 (3) 直接输出一条暖心的提醒消息 (4) 可以加一句简短的关心或鸡汤的话,比如'辛苦了,好好休息'、'今天也很棒,明天继续加油' (5) 控制在2-3句话以内 (6) 用🏃、🎉、✨等emoji点缀,让提醒更有活力"
}

完整的 job 配置:

json
{
  "action": "add",
  "job": {
    "name": "工作日下班提醒",
    "schedule": {
      "kind": "cron",
      "expr": "30 17 * * 1-5",
      "tz": "Asia/Shanghai"
    },
    "sessionTarget": "isolated",
    "wakeMode": "now",
    "payload": {
      "kind": "agentTurn",
      "message": "你是一个暖心的下班提醒助手。请用温暖、有趣的方式提醒用户:下班时间到了!要求:(1) 不要回复HEARTBEAT_OK (2) 不要解释你是谁 (3) 直接输出一条暖心的提醒消息 (4) 可以加一句简短的关心或鸡汤的话,比如'辛苦了,好好休息'、'今天也很棒,明天继续加油' (5) 控制在2-3句话以内 (6) 用🏃、🎉、✨等emoji点缀,让提醒更有活力",
      "deliver": true,
      "channel": "qqbot",
      "to": "{用户的openid}"
    }
  }
}

**注意:**周期任务(cron)不加 deleteAfterRun,否则每次触发后都会被删除。


2. 查看下班倒计时

计算逻辑:

  1. 获取当前时间(Asia/Shanghai 时区)
  2. 确定今天是工作日还是周末
  3. 如果是工作日,计算当前时间到 17:30 的剩余时间
  4. 如果是周末,告知用户今天不用上班,提示距离下一个工作日下班时间
  5. 如果当前时间已过 17:30,提示已经下班

回复模板:

  • 工作日,还未下班:

    code
    🕐 今天是工作日,下班时间 17:30
    ⏰ 距离下班还有:X小时Y分钟
    💪 加油,马上就可以下班啦!
    
  • 工作日,已经下班:

    code
    🎉 今天已经下班啦!
    💤 好好休息,明天见~
    
  • 周末:

    code
    😌 今天是周末,不用上班哦~
    📅 距离下个工作日下班还有:X天Y小时
    

计算示例(使用 Python 脚本):

bash
python3 scripts/countdown.py --offtime "17:30"

脚本返回 JSON 格式的倒计时信息:

json
{
  "today": "工作日",
  "current_time": "13:45",
  "off_time": "17:30",
  "countdown": "3小时45分钟",
  "already_off": false,
  "message": "🕐 今天是工作日,下班时间 17:30\n⏰ 距离下班还有:3小时45分钟\n💪 加油,马上就可以下班啦!"
}

3. 提醒管理

查询提醒

使用 cron 工具的 list 功能:

json
{ "action": "list" }

回复模板:

  • 有提醒:📋 你的下班提醒已设置:每天 17:30(工作日)
  • 无提醒:📭 目前还没有设置下班提醒哦~ 说"设置下班提醒"就可以啦!

取消提醒

list 找到 jobId,然后 remove

json
{ "action": "remove", "jobId": "{jobId}" }

回复模板:✅ 已取消下班提醒~

修改下班时间

需要先取消旧提醒,再创建新提醒。注意 cron 表达式的格式:

  • 18:00 → "0 18 * * 1-5"
  • 18:30 → "30 18 * * 1-5"
  • 17:00 → "0 17 * * 1-5"

用户交互场景

场景 1:设置下班提醒

用户说:

  • "设置下班提醒"
  • "提醒我下班"
  • "下班时间提醒我一下"
  • "每天提醒我下班"

AI 行为:

  1. 调用 cron 工具创建工作日 17:30 的定时提醒
  2. 回复:🏃 收到!工作日每天 17:30 会提醒你下班~

场景 2:查看倒计时

用户说:

  • "还有多久下班"
  • "下班倒计时"
  • "几点下班"
  • "现在到下班还有多久"

AI 行为:

  1. 调用 scripts/countdown.py 计算倒计时
  2. 输出格式化的倒计时信息

场景 3:管理提醒

用户说:

  • "我的提醒有哪些"
  • "查看下班提醒"
  • "取消下班提醒"
  • "改到18点提醒"

AI 行为:

  • 查询:调用 cron list
  • 取消:调用 cron remove
  • 修改:先 removeadd

自定义下班时间

用户可以指定自定义下班时间,格式为 HH:MM(24小时制):

示例:

  • "18点下班提醒" → cron: "0 18 * * 1-5"
  • "18:30下班" → cron: "30 18 * * 1-5"
  • "17点下班" → cron: "0 17 * * 1-5"

解析逻辑:

  1. 从用户输入中提取时间
  2. 转换为 cron 表达式(分 时 * * 1-5)
  3. 创建定时提醒
  4. 回复确认消息

cron 表达式生成公式:

code
"{分钟} {小时} * * 1-5"

Cron 表达式参考

下班时间Cron 表达式
17:00"0 17 * * 1-5"
17:30"30 17 * * 1-5"
18:00"0 18 * * 1-5"
18:30"30 18 * * 1-5"
19:00"0 19 * * 1-5"

字段说明:

  • 第1个数字:分钟(0-59)
  • 第2个数字:小时(0-23)
  • *:每天
  • 1-5:周一到周五

回复模板总结

场景回复
设置提醒成功🏃 收到!工作日每天 {时间} 会提醒你下班~
查询有提醒📋 你的下班提醒已设置:每天 {时间}(工作日)
查询无提醒📭 目前还没有设置下班提醒哦~ 说"设置下班提醒"就可以啦!
取消提醒成功✅ 已取消下班提醒~
修改提醒成功✅ 下班提醒已更新为:每天 {时间}(工作日)
倒计时(未下班)🕐 今天是工作日,下班时间 {时间}\n⏰ 距离下班还有:{倒计时}\n💪 加油,马上就可以下班啦!
倒计时(已下班)🎉 今天已经下班啦!\n💤 好好休息,明天见~
倒计时(周末)😌 今天是周末,不用上班哦~\n📅 距离下个工作日下班还有:{倒计时}