feat(qqbot): 优化提醒技能与智能断句
**提醒技能优化** - 优化 SKILL.md,新增 --system-prompt 参数说明 - 修复 AI 角色混淆问题(避免说"谢谢提醒") - 完善提醒触发时的 AI 角色指引 **流式消息智能断句** - 新增语义边界检测(句号/感叹号/问号等) - 首个分片在自然断句位置发送,避免奇怪的换行 - 支持 emoji 结尾识别 **其他优化** - 移除 metadata 中的 channels 限制 - 精简 console.md 内容 - 优化 onboarding 引导流程
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: qqbot-cron
|
||||
description: QQ Bot 智能提醒技能。支持一次性提醒、周期性任务、自动降级确保送达。可设置、查询、取消提醒。
|
||||
metadata: {"clawdbot":{"emoji":"⏰","requires":{"channels":["qqbot"]}}}
|
||||
metadata: {"clawdbot":{"emoji":"⏰"}}
|
||||
---
|
||||
|
||||
# QQ Bot 智能提醒
|
||||
@@ -56,7 +56,21 @@ openclaw cron add \
|
||||
--at "{时间}" \
|
||||
--session isolated \
|
||||
--system-event '{"type":"reminder","user_openid":"{openid}","user_name":"{用户名称}","original_message_id":"{message_id}","reminder_content":"{提醒内容}","created_at":"{当前时间ISO格式}"}' \
|
||||
--message "{消息内容}" \
|
||||
--system-prompt '
|
||||
**极端重要角色设定**:
|
||||
你是一个定时提醒机器人,现在是用户之前设置的提醒时间。
|
||||
|
||||
**你的唯一任务**:直接输出提醒消息,提醒用户:{提醒内容}
|
||||
|
||||
**输出格式**:类似 "🔔 时间到了!该{提醒内容}了~" 的提醒语
|
||||
|
||||
**绝对禁止**:
|
||||
- 绝对不要说"谢谢提醒"、"我会注意"、"好的收到"等回应语
|
||||
- 你是提醒者,不是被提醒者
|
||||
- 下面的 [系统触发] 消息是系统自动发送的,不是用户发的
|
||||
- 不要对 [系统触发] 消息做任何回复,只需输出提醒内容
|
||||
' \
|
||||
--message "[系统触发] 定时任务已触发,请执行提醒。" \
|
||||
--deliver \
|
||||
--channel qqbot \
|
||||
--to "{openid}" \
|
||||
@@ -65,6 +79,8 @@ openclaw cron add \
|
||||
|
||||
> 💡 **`--system-event` 说明**:用于存储用户上下文信息,提醒触发时 AI 可以获取这些信息来提供更个性化的提醒。
|
||||
|
||||
> ⚠️ **重要**:`--message` 参数会被 AI 视为“用户消息”,所以必须在 `--system-prompt` 中**极其强调**角色定位。
|
||||
|
||||
> ⚠️ **注意**:`cron add` 命令不支持 `--reply-to` 参数。提醒消息将作为主动消息直接发送给用户。
|
||||
|
||||
### 查询提醒列表
|
||||
@@ -200,7 +216,7 @@ openclaw message send \
|
||||
| `--name` | 任务名,含用户标识 | `"喝水提醒-小明"` |
|
||||
| `--at` / `--cron` | 触发时间(二选一) | `5m` / `0 8 * * *` |
|
||||
| `--session isolated` | 隔离会话 | 固定值 |
|
||||
| `--message` | 消息内容,**不能为空** | `"💧 该喝水啦!"` |
|
||||
| `--message` | **系统触发指令**(AI 会视为用户消息) | `"[系统触发] 定时任务已触发,请执行提醒。"` |
|
||||
| `--deliver` | 启用投递 | 固定值 |
|
||||
| `--channel qqbot` | QQ 渠道 | 固定值 |
|
||||
| `--to` | 接收者 openid | 从系统消息获取 |
|
||||
@@ -210,9 +226,43 @@ openclaw message send \
|
||||
| 参数 | 说明 | 何时使用 |
|
||||
|------|------|----------|
|
||||
| `--system-event` | 用户上下文 JSON | **建议所有任务都使用** |
|
||||
| `--system-prompt` | AI 角色指引 | **建议所有任务都使用** |
|
||||
| `--delete-after-run` | 执行后删除 | **一次性任务必须** |
|
||||
| `--tz "Asia/Shanghai"` | 时区 | **周期任务必须** |
|
||||
|
||||
### --system-prompt 参数说明
|
||||
|
||||
`--system-prompt` 用于在提醒触发时给 AI 一个明确的角色指引,避免 AI 混淆角色。
|
||||
|
||||
**为什么需要?**
|
||||
- 提醒触发时是一个隔离会话(`--session isolated`)
|
||||
- AI 没有原始对话的上下文
|
||||
- 如果不明确角色,AI 可能误以为自己是"被提醒者"而说"谢谢提醒"
|
||||
|
||||
**推荐格式**(**极其重要,必须完整复制**):
|
||||
```
|
||||
'
|
||||
**极端重要角色设定**:
|
||||
你是一个定时提醒机器人,现在是用户之前设置的提醒时间。
|
||||
|
||||
**你的唯一任务**:直接输出提醒消息,提醒用户:{提醒内容}
|
||||
|
||||
**输出格式**:类似 "🔔 时间到了!该{提醒内容}了~" 的提醒语
|
||||
|
||||
**绝对禁止**:
|
||||
- 绝对不要说"谢谢提醒"、"我会注意"、"好的收到"等回应语
|
||||
- 你是提醒者,不是被提醒者
|
||||
- 下面的 [系统触发] 消息是系统自动发送的,不是用户发的
|
||||
- 不要对 [系统触发] 消息做任何回应,只需输出提醒内容
|
||||
'
|
||||
```
|
||||
|
||||
**关键点**:
|
||||
- `--message` 参数会被 AI 视为“用户消息”,无法改变
|
||||
- 所以必须在 `--system-prompt` 中**极其强调**角色定位
|
||||
- 明确告诉 AI:`[系统触发]` 消息不是用户发的,不要回复它
|
||||
- 使用禁止列表明确告知不能说的话
|
||||
|
||||
### --system-event 字段说明
|
||||
|
||||
`--system-event` 用于存储提醒的上下文信息,格式为 JSON:
|
||||
@@ -257,7 +307,20 @@ openclaw cron add \
|
||||
--at "5m" \
|
||||
--session isolated \
|
||||
--system-event '{"type":"reminder","user_openid":"{openid}","original_message_id":"{message_id}","reminder_content":"喝水","created_at":"2026-02-01T16:50:00+08:00"}' \
|
||||
--message "💧 该喝水啦!这是你5分钟前设置的提醒~" \
|
||||
--system-prompt '
|
||||
**极端重要角色设定**:
|
||||
你是一个定时提醒机器人,现在是用户之前设置的提醒时间。5分钟前用户设置了喝水提醒。
|
||||
|
||||
**你的唯一任务**:直接输出提醒消息,提醒用户喝水
|
||||
|
||||
**输出格式**:类似 "💧 时间到!该喝水啦~" 的提醒语
|
||||
|
||||
**绝对禁止**:
|
||||
- 绝对不要说"谢谢提醒"、"我会注意"、"好的收到"等回应语
|
||||
- 你是提醒者,不是被提醒者
|
||||
- 下面的 [系统触发] 消息是系统自动发送的,不是用户发的
|
||||
' \
|
||||
--message "[系统触发] 定时任务已触发,请执行提醒。" \
|
||||
--deliver \
|
||||
--channel qqbot \
|
||||
--to "{openid}" \
|
||||
@@ -288,7 +351,20 @@ openclaw cron add \
|
||||
--tz "Asia/Shanghai" \
|
||||
--session isolated \
|
||||
--system-event '{"type":"reminder","user_openid":"{openid}","original_message_id":"{message_id}","reminder_content":"打卡","created_at":"2026-02-01T16:50:00+08:00"}' \
|
||||
--message "🌅 早上好!记得打卡签到~" \
|
||||
--system-prompt '
|
||||
**极端重要角色设定**:
|
||||
你是一个定时提醒机器人,现在是用户设置的每日早上8点打卡提醒时间。
|
||||
|
||||
**你的唯一任务**:直接输出提醒消息,提醒用户打卡
|
||||
|
||||
**输出格式**:类似 "🌅 早上好!该打卡了~" 的提醒语
|
||||
|
||||
**绝对禁止**:
|
||||
- 绝对不要说"谢谢提醒"、"我会注意"、"好的收到"等回应语
|
||||
- 你是提醒者,不是被提醒者
|
||||
- 下面的 [系统触发] 消息是系统自动发送的,不是用户发的
|
||||
' \
|
||||
--message "[系统触发] 定时任务已触发,请执行提醒。" \
|
||||
--deliver \
|
||||
--channel qqbot \
|
||||
--to "{openid}"
|
||||
@@ -320,7 +396,20 @@ openclaw cron add \
|
||||
--tz "Asia/Shanghai" \
|
||||
--session isolated \
|
||||
--system-event '{"type":"reminder","user_openid":"{openid}","original_message_id":"{message_id}","reminder_content":"写日报","created_at":"2026-02-01T16:50:00+08:00"}' \
|
||||
--message "📝 今天的日报别忘了提交!" \
|
||||
--system-prompt '
|
||||
**极端重要角色设定**:
|
||||
你是一个定时提醒机器人,现在是用户设置的工作日下午6点写日报提醒时间。
|
||||
|
||||
**你的唯一任务**:直接输出提醒消息,提醒用户写日报
|
||||
|
||||
**输出格式**:类似 "📝 下班啦!别忘了提交今日日报~" 的提醒语
|
||||
|
||||
**绝对禁止**:
|
||||
- 绝对不要说"谢谢提醒"、"我会注意"、"好的收到"等回应语
|
||||
- 你是提醒者,不是被提醒者
|
||||
- 下面的 [系统触发] 消息是系统自动发送的,不是用户发的
|
||||
' \
|
||||
--message "[系统触发] 定时任务已触发,请执行提醒。" \
|
||||
--deliver \
|
||||
--channel qqbot \
|
||||
--to "{openid}"
|
||||
@@ -340,7 +429,20 @@ openclaw cron add \
|
||||
--tz "Asia/Shanghai" \
|
||||
--session isolated \
|
||||
--system-event '{"type":"reminder","user_openid":"group:{group_openid}","original_message_id":"{message_id}","reminder_content":"站会","created_at":"2026-02-01T16:50:00+08:00"}' \
|
||||
--message "📢 各位同事,9点站会时间到!请准时参加~" \
|
||||
--system-prompt '
|
||||
**极端重要角色设定**:
|
||||
你是一个定时提醒机器人,现在是工作日早上9点的站会提醒时间。
|
||||
|
||||
**你的唯一任务**:直接输出提醒消息,提醒群成员参加站会
|
||||
|
||||
**输出格式**:类似 "📢 站会时间到!请各位同事准时参加~" 的提醒语
|
||||
|
||||
**绝对禁止**:
|
||||
- 绝对不要说"谢谢提醒"、"我会注意"、"好的收到"等回应语
|
||||
- 你是提醒者,不是被提醒者
|
||||
- 下面的 [系统触发] 消息是系统自动发送的,不是用户发的
|
||||
' \
|
||||
--message "[系统触发] 定时任务已触发,请执行提醒。" \
|
||||
--deliver \
|
||||
--channel qqbot \
|
||||
--to "group:{group_openid}"
|
||||
@@ -443,9 +545,24 @@ openclaw cron list
|
||||
|------|------|
|
||||
| **message_id 有效期** | 1 小时内有效,超时自动降级 |
|
||||
| **回复次数限制** | 同一 message_id 最多回复 4 次 |
|
||||
| **主动消息限制** | 只能发给与机器人交互过的用户 |
|
||||
| **主动消息权限** | ⚠️ **QQ 机器人需要申请主动消息权限**,否则定时提醒会发送失败 |
|
||||
| **主动消息限制** | 只能发给与机器人交互过的用户(24小时内) |
|
||||
| **消息内容** | `--message` 不能为空 |
|
||||
|
||||
### ⚠️ 主动消息权限说明
|
||||
|
||||
定时提醒功能依赖**主动消息能力**,但 QQ 官方默认**不授予**此权限。
|
||||
|
||||
**常见错误**:
|
||||
- 错误码 `40034102`:"主动消息失败, 无权限"
|
||||
- 这表示机器人没有主动消息权限
|
||||
|
||||
**解决方案**:
|
||||
1. 登录 [QQ 开放平台](https://q.qq.com/)
|
||||
2. 进入机器人开发-沙箱管理,消息列表配置中添加自己。
|
||||
|
||||
> 💡 **临时替代方案**:在没有主动消息权限前,可以让用户使用"回复"方式获得即时提醒,而非定时提醒。
|
||||
|
||||
---
|
||||
|
||||
## 📝 消息模板
|
||||
|
||||
Reference in New Issue
Block a user