问题:定时提醒触发时,--session isolated 导致消息被当作新会话处理, AI 会输出初始化对话(询问用户是谁等),提醒内容显得生硬且冗长。 修改: - 删除 SKILL.md 中所有命令模板的 --session isolated 参数 - 删除 SKILL.md 中结构化载荷格式章节(已选择命令行方案) - 更新 gateway.ts 中的示例命令 效果:提醒触发时直接发送消息内容,不再启动 AI 会话。 支持 </img> 闭合标签
12 KiB
12 KiB
name, description, metadata
| name | description | metadata | ||||
|---|---|---|---|---|---|---|
| qqbot-cron | QQ Bot 智能提醒技能。支持一次性提醒、周期性任务、自动降级确保送达。可设置、查询、取消提醒。 |
|
QQ Bot 智能提醒
让 AI 帮用户设置、管理定时提醒,支持私聊和群聊。
🤖 AI 决策指南
本节专为 AI 理解设计,帮助快速决策
用户意图识别
| 用户说法 | 意图 | 执行动作 |
|---|---|---|
| "5分钟后提醒我喝水" | 创建提醒 | openclaw cron add |
| "每天8点提醒我打卡" | 创建周期提醒 | openclaw cron add --cron |
| "我有哪些提醒" | 查询提醒 | openclaw cron list |
| "取消喝水提醒" | 删除提醒 | openclaw cron remove |
| "修改提醒时间" | 删除+重建 | 先 remove 再 add |
| "提醒我" (无时间) | 需追问 | 询问具体时间 |
必须追问的情况
当用户说法缺少以下信息时,必须追问:
- 没有时间:"提醒我喝水" → 询问"请问什么时候提醒你?"
- 时间模糊:"晚点提醒我" → 询问"具体几点呢?"
- 周期不明:"定期提醒我" → 询问"多久一次?每天?每周?"
无需追问可直接执行
| 用户说法 | 理解为 |
|---|---|
| "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-event(cron 不支持这些参数)- 保持消息简洁,如:
🔔 喝水时间到!、📅 开会时间到!
⚠️ 注意:
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 执行:
- 先执行
openclaw cron list找到对应任务 ID - 执行
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:"主动消息失败, 无权限" - 这表示机器人没有主动消息权限
解决方案:
- 登录 QQ 开放平台
- 进入机器人开发-沙箱管理,消息列表配置中添加自己。
💡 临时替代方案:在没有主动消息权限前,可以让用户使用"回复"方式获得即时提醒,而非定时提醒。
📝 消息模板
| 场景 | 触发时输出 | Emoji |
|---|---|---|
| 喝水 | 喝水时间到啦! | 💧 🚰 |
| 打卡 | 早上好,打卡时间到! | 🌅 ✅ |
| 会议 | 开会时间到! | 📅 👥 |
| 休息 | 该休息一下了~ | 😴 💤 |
| 日报 | 下班前别忘了写日报哦~ | 📝 ✍️ |
| 运动 | 运动时间到! | 🏃 💪 |
| 吃药 | 该吃药了~ | 💊 🏥 |
| 生日 | 今天是xx的生日! | 🎂 🎉 |
🔧 用户标识
| 类型 | 格式 | 来源 |
|---|---|---|
| 用户 openid | B3EA9A1d-2D3c-5CBD-... |
系统消息自动提供 |
| 群组 openid | group:FeC1ADaf-... |
系统消息自动提供 |
| message_id | ROBOT1.0_xxx |
系统消息自动提供 |
💡 这些信息在系统消息中格式如:
当前用户 openid: B3EA9A1d-...当前消息 message_id: ROBOT1.0_...