원클릭으로
QQBot 定时提醒技能。支持一次性和周期性提醒的创建、查询、取消。当通过 QQ 通道通信且涉及提醒/定时任务时使用此技能。
npx skills add https://github.com/zhu-lord/kimi-claw-backup --skill qqbot-cron이 명령을 Claude Code에 복사하여 붙여넣어 스킬을 설치하세요
QQBot 定时提醒技能。支持一次性和周期性提醒的创建、查询、取消。当通过 QQ 通道通信且涉及提醒/定时任务时使用此技能。
npx skills add https://github.com/zhu-lord/kimi-claw-backup --skill qqbot-cron이 명령을 Claude Code에 복사하여 붙여넣어 스킬을 설치하세요
QQBot 图片/语音/视频/文件收发能力。用户发来的图片自动下载到本地,发送图片使用 <qqimg> 标签,发送语音使用 <qqvoice> 标签,发送视频使用 <qqvideo> 标签,发送文件使用 <qqfile> 标签。所有富媒体标签必须正确闭合,即 <qqXXX>内容</qqXXX> 的格式,未闭合的标签会导致消息无法正确解析。当通过 QQ 通道通信时使用此技能。
Guide to set up and configure IM channels(Telegram, Discord, Slack, Feishu(飞书), Dingtalk(钉钉), Weibo(微博) and Wecom AI Bot(企业微信智能机器人) for OpenClaw.
AI图像生成工具。当用户需要生成图片、创建图像、AI绘画时使用此skill。支持多种AI图像生成服务(OpenAI DALL-E、Stability AI、Fal.ai等)。
即梦 Seedance 2.0 视频提示词构建工具。当用户需要生成AI视频提示词、创建视频描述、优化视频脚本时使用。通过引导式对话帮助用户逐步构建高质量、高通过率的提示词,支持安全规范、素材整合、镜头设计等。适用于提示词工程师、视频创作者、内容制作者。
全能 PDF 阅读和处理工具。支持文本提取、表格提取、图片提取、元数据读取、页面渲染、文本搜索等功能。当用户需要读取、解析或处理 PDF 文件时使用此 skill。
通用 Office 三件套(Word/Excel/PPT)处理工具。支持 .docx/.xlsx/.pptx 文件的读取、创建、修改和内容提取。当用户需要操作 Word 文档、Excel 表格或 PowerPoint 演示文稿时使用此 skill。
| name | qqbot-cron |
| description | QQBot 定时提醒技能。支持一次性和周期性提醒的创建、查询、取消。当通过 QQ 通道通信且涉及提醒/定时任务时使用此技能。 |
| metadata | {"openclaw":{"emoji":"⏰","requires":{"config":["channels.qqbot"]}}} |
让 AI 帮用户设置、管理定时提醒,支持私聊和群聊。
调用 cron 工具时,payload.kind 必须是
"agentTurn"。绝对不能用"systemEvent"!
systemEvent只会在 AI 会话里插入一条文本,用户根本收不到 QQ 消息。 只有agentTurn+deliver: true+channel: "qqbot"+to才能真正把消息发到 QQ。
设置提醒前,先确认当前系统时间(查看上下文中的时间信息,或执行
date)。 纯相对时间("5分钟后"、"1小时后")可以跳过确认,直接算Date.now() + 延迟毫秒。
| 用户说法 | 意图 | cron 工具 action |
|---|---|---|
| "5分钟后提醒我喝水" | 创建一次性提醒 | add(schedule.kind=at) |
| "每天8点提醒我打卡" | 创建周期提醒 | add(schedule.kind=cron) |
| "我有哪些提醒" | 查询 | list |
| "取消喝水提醒" | 删除 | remove |
| "修改提醒时间" | 删除+重建 | remove → add |
| "提醒我" (无时间) | 需追问 | 询问具体时间 |
AI 调用 cron 工具时,传的是 JSON 参数,不是 CLI 命令。以下是唯一正确的 JSON 格式:
一次性提醒(N 分钟后):
{
"action": "add",
"job": {
"name": "{任务名}",
"schedule": {
"kind": "at",
"atMs": {当前时间戳毫秒 + N分钟*60000}
},
"sessionTarget": "isolated",
"wakeMode": "now",
"deleteAfterRun": true,
"payload": {
"kind": "agentTurn",
"message": "你是一个暖心的提醒助手。请用温暖、有趣的方式提醒用户:{提醒内容}。要求:(1) 不要回复HEARTBEAT_OK (2) 不要解释你是谁 (3) 直接输出一条暖心的提醒消息 (4) 可以加一句简短的鸡汤或关怀的话 (5) 控制在2-3句话以内 (6) 用emoji点缀",
"deliver": true,
"channel": "qqbot",
"to": "{openid}"
}
}
}
周期提醒(每天/每周):
{
"action": "add",
"job": {
"name": "{任务名}",
"schedule": {
"kind": "cron",
"expr": "0 8 * * *",
"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}"
}
}
}
🚨 绝对不可更改的 5 个字段(改了提醒就废了):
payload.kind必须是"agentTurn"— ❌ 绝对不能用"systemEvent"payload.deliver必须是truepayload.channel必须是"qqbot"payload.to必须是用户的 openidsessionTarget必须是"isolated"🚫
payload.kind: "systemEvent"只会在 AI 会话中注入文本,不会发送 QQ 消息给用户!⚠️
schedule.atMs必须是绝对毫秒时间戳(如1770733800000),不支持相对时间字符串如"5m"! 需要自行计算:当前时间戳 + 延迟毫秒数。例如 5 分钟后 =Date.now() + 5 * 60 * 1000。
使用 cron 工具 action: "list" 查询。
使用 cron 工具 action: "remove" + jobId。
创建提醒后的反馈要简洁友好,不要啰嗦
一次性提醒:
⏰ 好的,{时间}后提醒你{提醒内容}~
周期提醒:
⏰ 收到,{周期描述}提醒你{提醒内容}~
📋 你的提醒:
1. ⏰ {提醒名} - {时间}
2. 🔄 {提醒名} - {周期}
说"取消xx提醒"可删除~
📋 目前没有提醒哦~
说"5分钟后提醒我xxx"试试?
✅ 已取消"{提醒名称}"
⚠️
schedule.atMs只接受绝对毫秒时间戳,需要自己计算!
| 用户说法 | 计算方式 |
|---|---|
| 5分钟后 | Date.now() + 5 * 60 * 1000 |
| 半小时后 | Date.now() + 30 * 60 * 1000 |
| 1小时后 | Date.now() + 60 * 60 * 1000 |
| 明天早上8点 | 先确认当前日期,计算目标时间的毫秒时间戳 |
必须加
"tz": "Asia/Shanghai"
| 用户说法 | schedule.expr |
|---|---|
| 每天早上8点 | "0 8 * * *" |
| 每天晚上10点 | "0 22 * * *" |
| 每个工作日早上9点 | "0 9 * * 1-5" |
| 每周一早上9点 | "0 9 * * 1" |
| 每周末上午10点 | "0 10 * * 0,6" |
| 每小时整点 | "0 * * * *" |
| 字段 | 说明 | 示例 |
|---|---|---|
job.name | 任务名 | "喝水提醒" |
job.schedule.kind | "at" 或 "cron" | "at" |
job.schedule.atMs | 绝对毫秒时间戳(不支持 "5m"!) | 1770734100000 |
job.sessionTarget | 必须 "isolated" | "isolated" |
job.wakeMode | 推荐 "now" | "now" |
job.payload.kind | 必须 "agentTurn"(❌ 不能用 "systemEvent") | "agentTurn" |
job.payload.message | 以 [直接输出] 开头 | "[直接输出] 💧 喝水时间到!" |
job.payload.deliver | 必须 true | true |
job.payload.channel | 必须 "qqbot" | "qqbot" |
job.payload.to | 用户 openid | 从系统消息获取 |
job.deleteAfterRun | 一次性任务必须 true | true |
💡
payload.message是一个 prompt,告诉 AI 以暖心方式生成提醒。每次触发时 AI 会自由发挥,生成不重复的、有温度的提醒消息。
统一模板(把 {提醒内容} 替换成具体事项):
你是一个暖心的提醒助手。请用温暖、有趣的方式提醒用户:{提醒内容}。要求:(1) 不要回复HEARTBEAT_OK (2) 不要解释你是谁 (3) 直接输出一条暖心的提醒消息 (4) 可以加一句简短的鸡汤或关怀的话 (5) 控制在2-3句话以内 (6) 用emoji点缀
效果举例(每次触发内容都不同):
💧 嘿,该喝水啦~身体是革命的本钱,水是身体的燃料!📅 会议时间到~带上你的好想法,闪亮登场吧!🍜 干饭时间到!再忙也要好好吃饭,你值得被善待~🌅 新的一天,记得打卡哦~每一天都是新的开始!为什么用 prompt 而不是固定文本?
用户: 5分钟后提醒我喝水
AI 调用 cron 工具(假设当前时间戳为 1770734000000):
{
"action": "add",
"job": {
"name": "喝水提醒",
"schedule": { "kind": "at", "atMs": 1770734300000 },
"sessionTarget": "isolated",
"wakeMode": "now",
"deleteAfterRun": true,
"payload": {
"kind": "agentTurn",
"message": "你是一个暖心的提醒助手。请用温暖、有趣的方式提醒用户:该喝水了。要求:(1) 不要回复HEARTBEAT_OK (2) 不要解释你是谁 (3) 直接输出一条暖心的提醒消息 (4) 可以加一句简短的鸡汤或关怀的话 (5) 控制在2-3句话以内 (6) 用emoji点缀",
"deliver": true,
"channel": "qqbot",
"to": "{openid}"
}
}
}
atMs= 当前时间戳 + 5 * 60 * 1000 = 1770734000000 + 300000 = 1770734300000
AI 回复: ⏰ 好的,5分钟后提醒你喝水~
用户: 每天早上8点提醒我打卡
AI 调用 cron 工具:
{
"action": "add",
"job": {
"name": "打卡提醒",
"schedule": { "kind": "cron", "expr": "0 8 * * *", "tz": "Asia/Shanghai" },
"sessionTarget": "isolated",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "[直接输出] 🌅 打卡时间到!",
"deliver": true,
"channel": "qqbot",
"to": "{openid}"
}
}
}
周期任务不加
deleteAfterRun
AI 回复: ⏰ 收到,每天早上8点提醒你打卡~
用户: 工作日下午6点提醒我写日报
AI 调用 cron 工具:
{
"action": "add",
"job": {
"name": "日报提醒",
"schedule": { "kind": "cron", "expr": "0 18 * * 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}"
}
}
}
AI 回复: ⏰ 收到,工作日下午6点提醒你写日报~
用户: 3分钟后提醒我开会
AI 调用 cron 工具(假设当前时间戳为 1770734000000):
{
"action": "add",
"job": {
"name": "开会提醒",
"schedule": { "kind": "at", "atMs": 1770734180000 },
"sessionTarget": "isolated",
"wakeMode": "now",
"deleteAfterRun": true,
"payload": {
"kind": "agentTurn",
"message": "[直接输出] 📅 开会时间到!",
"deliver": true,
"channel": "qqbot",
"to": "{openid}"
}
}
}
atMs= 当前时间戳 + 3 * 60 * 1000
AI 回复: ⏰ 好的,3分钟后提醒你开会~
用户(群聊): 每天早上9点提醒大家站会
AI 调用 cron 工具:
{
"action": "add",
"job": {
"name": "站会提醒",
"schedule": { "kind": "cron", "expr": "0 9 * * 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": "group:{group_openid}"
}
}
}
群组使用
"group:{group_openid}"格式
用户: 我有哪些提醒?
AI 调用 cron 工具:{ "action": "list" }
AI 回复(根据返回结果):
📋 你的提醒:
1. ⏰ 喝水提醒 - 3分钟后
2. 🔄 打卡提醒 - 每天08:00
说"取消xx提醒"可删除~
用户: 取消打卡提醒
AI 执行:
{ "action": "list" } 找到对应任务 ID{ "action": "remove", "jobId": "{id}" } 删除AI 回复:
✅ 已取消"打卡提醒"
定时提醒只能发送主动消息,因为:
┌─────────────────────┐
│ 定时任务触发 │
└──────────┬──────────┘
↓
┌─────────────────────┐
│ AI 通过 agentTurn │
│ 在隔离会话中执行 │
└──────────┬──────────┘
↓
┌─────────────────────┐
│ deliver=true 投递 │
│ channel="qqbot" │
│ to="{openid}" │
└──────────┬──────────┘
↓
✅ 用户收到提醒
即时消息发送支持被动回复(如果 message_id 有效):
┌─────────────────────┐
│ 发送即时消息 │
└──────────┬──────────┘
↓
┌──────────────────────────────┐
│ message_id 在 1 小时内有效? │
└──────────────────────────────┘
↓ ↓
是 否
↓ ↓
┌───────────────┐ ┌─────────────────┐
│ 被动消息回复 │ │ 发送主动消息 │
│ (引用原消息) │ │ (直接发送) │
└───────────────┘ └─────────────────┘
| 限制 | 说明 |
|---|---|
| message_id 有效期 | 1 小时内有效,超时自动降级 |
| 回复次数限制 | 同一 message_id 最多回复 4 次 |
| 主动消息权限 | ⚠️ QQ 机器人需要申请主动消息权限,否则定时提醒会发送失败 |
| 主动消息限制 | 只能发给与机器人交互过的用户(24小时内) |
| 消息内容 | payload.message 不能为空 |
定时提醒功能依赖主动消息能力,但 QQ 官方默认不授予此权限。
常见错误:
40034102:"主动消息失败, 无权限"解决方案:
💡 临时替代方案:在没有主动消息权限前,可以让用户使用"回复"方式获得即时提醒,而非定时提醒。
| 场景 | 触发时输出 | Emoji |
|---|---|---|
| 喝水 | 喝水时间到啦! | 💧 🚰 |
| 打卡 | 早上好,打卡时间到! | 🌅 ✅ |
| 会议 | 开会时间到! | 📅 👥 |
| 休息 | 该休息一下了~ | 😴 💤 |
| 日报 | 下班前别忘了写日报哦~ | 📝 ✍️ |
| 运动 | 运动时间到! | 🏃 💪 |
| 吃药 | 该吃药了~ | 💊 🏥 |
| 生日 | 今天是xx的生日! | 🎂 🎉 |
| 类型 | 格式 | 来源 |
|---|---|---|
| 用户 openid | B3EA9A1d-2D3c-5CBD-... | 系统消息自动提供 |
| 群组 openid | group:FeC1ADaf-... | 系统消息自动提供 |
| message_id | ROBOT1.0_xxx | 系统消息自动提供 |
💡 这些信息在系统消息中格式如:
当前用户 openid: B3EA9A1d-...当前消息 message_id: ROBOT1.0_...