Files
qqbot/skills/qqbot-cron/SKILL.md
rianli 0abbcb06b3 fix(qqbot-cron): 移除 --session isolated 避免提醒触发时启动 AI 会话
问题:定时提醒触发时,--session isolated 导致消息被当作新会话处理,
AI 会输出初始化对话(询问用户是谁等),提醒内容显得生硬且冗长。

修改:
- 删除 SKILL.md 中所有命令模板的 --session isolated 参数
- 删除 SKILL.md 中结构化载荷格式章节(已选择命令行方案)
- 更新 gateway.ts 中的示例命令

效果:提醒触发时直接发送消息内容,不再启动 AI 会话。

支持 </img> 闭合标签
2026-02-03 17:27:44 +08:00

12 KiB
Raw Permalink Blame History

name, description, metadata
name description metadata
qqbot-cron QQ Bot 智能提醒技能。支持一次性提醒、周期性任务、自动降级确保送达。可设置、查询、取消提醒。
clawdbot
emoji

QQ Bot 智能提醒

让 AI 帮用户设置、管理定时提醒,支持私聊和群聊。


🤖 AI 决策指南

本节专为 AI 理解设计,帮助快速决策

用户意图识别

用户说法 意图 执行动作
"5分钟后提醒我喝水" 创建提醒 openclaw cron add
"每天8点提醒我打卡" 创建周期提醒 openclaw cron add --cron
"我有哪些提醒" 查询提醒 openclaw cron list
"取消喝水提醒" 删除提醒 openclaw cron remove
"修改提醒时间" 删除+重建 先 remove 再 add
"提醒我" (无时间) 需追问 询问具体时间

必须追问的情况

当用户说法缺少以下信息时,必须追问

  1. 没有时间"提醒我喝水" → 询问"请问什么时候提醒你?"
  2. 时间模糊"晚点提醒我" → 询问"具体几点呢?"
  3. 周期不明"定期提醒我" → 询问"多久一次?每天?每周?"

无需追问可直接执行

用户说法 理解为
"5分钟后" --at 5m
"半小时后" --at 30m
"1小时后" --at 1h
"明天早上8点" --at 2026-02-02T08:00:00+08:00
"每天早上8点" --cron "0 8 * * *"
"工作日9点" --cron "0 9 * * 1-5"

📋 命令速查

创建提醒(完整模板)

openclaw cron add \
  --name "{任务名}" \
  --at "{时间}" \
  --message "🔔 {提醒内容}时间到!" \
  --deliver \
  --channel qqbot \
  --to "{openid}" \
  --delete-after-run

⚠️ 极其重要

  • --message 参数直接写最终要发送的提醒内容
  • 提醒内容格式:🔔 {内容}时间到!
  • 不要使用 --system-prompt--system-eventcron 不支持这些参数)
  • 保持消息简洁,如:🔔 喝水时间到!📅 开会时间到!

⚠️ 注意cron add 命令不支持 --reply-to 参数。提醒消息将作为主动消息直接发送给用户。

查询提醒列表

openclaw cron list

删除提醒

openclaw cron remove {jobId}

立即发送消息(主动消息)

openclaw message send \
  --channel qqbot \
  --target "{openid}" \
  --message "{消息内容}"

立即发送消息(被动回复)

openclaw message send \
  --channel qqbot \
  --target "{openid}" \
  --reply-to "{message_id}" \
  --message "{消息内容}"

⚠️ 注意--reply-to 仅在 message send 命令中支持,且 message_id 必须在 1 小时内有效。定时提醒不支持被动回复。


💬 用户交互模板

创建提醒后的反馈要简洁友好,不要啰嗦

创建成功反馈(推荐简洁版)

一次性提醒

⏰ 好的,{时间}后提醒你{提醒内容}~

周期提醒

⏰ 收到,{周期描述}提醒你{提醒内容}~

查询提醒反馈

📋 你的提醒:

1. ⏰ {提醒名} - {时间}
2. 🔄 {提醒名} - {周期}

说"取消xx提醒"可删除~

无提醒时反馈

📋 目前没有提醒哦~

说"5分钟后提醒我xxx"试试?

删除成功反馈

✅ 已取消"{提醒名称}"

⏱️ 时间格式

相对时间(--at

⚠️ 不要加 + 号!5m 而不是 +5m

用户说法 参数值
5分钟后 5m
半小时后 30m
1小时后 1h
2小时后 2h
明天这时候 24h

绝对时间(--at

用户说法 参数值
今天下午3点 2026-02-01T15:00:00+08:00
明天早上8点 2026-02-02T08:00:00+08:00
2月14日中午 2026-02-14T12:00:00+08:00

Cron 表达式(--cron

用户说法 Cron 表达式 必须加 --tz "Asia/Shanghai"
每天早上8点 0 8 * * *
每天晚上10点 0 22 * * *
每个工作日早上9点 0 9 * * 1-5
每周一早上9点 0 9 * * 1
每周末上午10点 0 10 * * 0,6
每小时整点 0 * * * *

📌 参数说明

必填参数

参数 说明 示例
--name 任务名,含用户标识 "喝水提醒"
--at / --cron 触发时间(二选一) 5m / 0 8 * * *
--message 提醒内容(见下方模板) "🔔 喝水时间到!"
--deliver 启用投递 固定值
--channel qqbot QQ 渠道 固定值
--to 接收者 openid 从系统消息获取

推荐参数

参数 说明 何时使用
--delete-after-run 执行后删除 一次性任务必须
--tz "Asia/Shanghai" 时区 周期任务必须

--message 提醒内容模板(最关键)

⚠️ --message 的内容会直接发送给用户,所以要写清楚提醒内容!

模板格式

--message "🔔 {提醒内容}时间到!"

示例

  • 喝水:--message "💧 喝水时间到!"
  • 开会:--message "📅 开会时间到!"
  • 打卡:--message "🌅 打卡时间到!"
  • 日报:--message "📝 写日报时间到!"

为什么这样写?

  • 消息内容会直接发送,不经过 AI 处理
  • 保持简洁,一目了然

🎯 使用场景示例

场景1一次性提醒

用户: 5分钟后提醒我喝水

AI 执行:

openclaw cron add \
  --name "喝水提醒" \
  --at "5m" \
  --message "💧 喝水时间到!" \
  --deliver \
  --channel qqbot \
  --to "{openid}" \
  --delete-after-run

AI 回复:

⏰ 好的5分钟后提醒你喝水~

5分钟后用户收到:

💧 喝水时间到!

场景2每日周期提醒

用户: 每天早上8点提醒我打卡

AI 执行:

openclaw cron add \
  --name "打卡提醒" \
  --cron "0 8 * * *" \
  --tz "Asia/Shanghai" \
  --message "🌅 打卡时间到!" \
  --deliver \
  --channel qqbot \
  --to "{openid}"

AI 回复:

⏰ 收到每天早上8点提醒你打卡~

💡 周期任务不加 --delete-after-run


场景3工作日提醒

用户: 工作日下午6点提醒我写日报

AI 执行:

openclaw cron add \
  --name "日报提醒" \
  --cron "0 18 * * 1-5" \
  --tz "Asia/Shanghai" \
  --message "📝 写日报时间到!" \
  --deliver \
  --channel qqbot \
  --to "{openid}"

AI 回复:

⏰ 收到工作日下午6点提醒你写日报~

场景4会议提醒

用户: 3分钟后提醒我开会

AI 执行:

openclaw cron add \
  --name "开会提醒" \
  --at "3m" \
  --message "📅 开会时间到!" \
  --deliver \
  --channel qqbot \
  --to "{openid}" \
  --delete-after-run

AI 回复:

⏰ 好的3分钟后提醒你开会~

3分钟后用户收到:

📅 开会时间到!

场景5群组提醒

用户(群聊): 每天早上9点提醒大家站会

AI 执行:

openclaw cron add \
  --name "站会提醒" \
  --cron "0 9 * * 1-5" \
  --tz "Asia/Shanghai" \
  --message "📢 站会时间到!" \
  --deliver \
  --channel qqbot \
  --to "group:{group_openid}"

💡 群组使用 group:{group_openid} 格式


场景6查询提醒

用户: 我有哪些提醒?

AI 执行:

openclaw cron list

AI 回复(根据返回结果):

📋 你的提醒:

1. ⏰ 喝水提醒 - 3分钟后
2. 🔄 打卡提醒 - 每天08:00

说"取消xx提醒"可删除~

场景7取消提醒

用户: 取消打卡提醒

AI 执行:

  1. 先执行 openclaw cron list 找到对应任务 ID
  2. 执行 openclaw cron remove {jobId}

AI 回复:

✅ 已取消"打卡提醒"

⚙️ 消息发送说明

定时提醒cron add

定时提醒只能发送主动消息,因为:

  • 提醒执行时,原始 message_id 通常已超过 1 小时有效期
  • openclaw cron add 命令不支持 --reply-to 参数
┌─────────────────────┐
│ 定时任务触发         │
└──────────┬──────────┘
           ↓
┌─────────────────────┐
│ AI 通过 system-event │
│ 获取用户上下文信息   │
└──────────┬──────────┘
           ↓
┌─────────────────────┐
│ 发送主动消息到用户   │
│ --channel qqbot     │
│ --to {openid}       │
└──────────┬──────────┘
           ↓
    ✅ 用户收到提醒

即时回复message send

即时消息发送支持被动回复(如果 message_id 有效):

                ┌─────────────────────┐
                │ 发送即时消息         │
                └──────────┬──────────┘
                           ↓
         ┌──────────────────────────────┐
         │ 有 --reply-to 且 message_id  │
         │ 在 1 小时内有效?             │
         └──────────────────────────────┘
               ↓                ↓
              是               否
               ↓                ↓
    ┌───────────────┐  ┌─────────────────┐
    │ 被动消息回复   │  │ 发送主动消息     │
    │ (引用原消息)   │  │ (直接发送)      │
    └───────────────┘  └─────────────────┘

⚠️ 重要限制

限制 说明
message_id 有效期 1 小时内有效,超时自动降级
回复次数限制 同一 message_id 最多回复 4 次
主动消息权限 ⚠️ QQ 机器人需要申请主动消息权限,否则定时提醒会发送失败
主动消息限制 只能发给与机器人交互过的用户24小时内
消息内容 --message 不能为空

⚠️ 主动消息权限说明

定时提醒功能依赖主动消息能力,但 QQ 官方默认不授予此权限。

常见错误

  • 错误码 40034102"主动消息失败, 无权限"
  • 这表示机器人没有主动消息权限

解决方案

  1. 登录 QQ 开放平台
  2. 进入机器人开发-沙箱管理,消息列表配置中添加自己。

💡 临时替代方案:在没有主动消息权限前,可以让用户使用"回复"方式获得即时提醒,而非定时提醒。


📝 消息模板

场景 触发时输出 Emoji
喝水 喝水时间到啦! 💧 🚰
打卡 早上好,打卡时间到! 🌅
会议 开会时间到! 📅 👥
休息 该休息一下了~ 😴 💤
日报 下班前别忘了写日报哦~ 📝 ✍️
运动 运动时间到! 🏃 💪
吃药 该吃药了~ 💊 🏥
生日 今天是xx的生日 🎂 🎉

🔧 用户标识

类型 格式 来源
用户 openid B3EA9A1d-2D3c-5CBD-... 系统消息自动提供
群组 openid group:FeC1ADaf-... 系统消息自动提供
message_id ROBOT1.0_xxx 系统消息自动提供

💡 这些信息在系统消息中格式如:

  • 当前用户 openid: B3EA9A1d-...
  • 当前消息 message_id: ROBOT1.0_...