feat(qqbot): 图片收发功能与定时提醒优化
**图片功能** - 支持接收用户发送的图片消息(自动下载到临时目录) - 支持发送本地文件路径(自动读取转为 Base64) - 富媒体消息接口(sendC2CImageMessage/sendGroupImageMessage) - 图片本地代理服务(解决 QQ 图片 URL 直接访问限制) **消息格式** - 默认启用 Markdown 消息格式 **定时提醒优化** - 修复 cron 提醒:移除无效 --system-prompt 参数,改用 --message 直接输出提醒内容 - 精简用户交互话术,避免冗长回复 **代码清理** - 移除过时的流式消息处理代码 - 优化 gateway/outbound/channel 模块结构
This commit is contained in:
@@ -55,31 +55,18 @@ openclaw cron add \
|
||||
--name "{任务名}" \
|
||||
--at "{时间}" \
|
||||
--session isolated \
|
||||
--system-event '{"type":"reminder","user_openid":"{openid}","user_name":"{用户名称}","original_message_id":"{message_id}","reminder_content":"{提醒内容}","created_at":"{当前时间ISO格式}"}' \
|
||||
--system-prompt '
|
||||
**极端重要角色设定**:
|
||||
你是一个定时提醒机器人,现在是用户之前设置的提醒时间。
|
||||
|
||||
**你的唯一任务**:直接输出提醒消息,提醒用户:{提醒内容}
|
||||
|
||||
**输出格式**:类似 "🔔 时间到了!该{提醒内容}了~" 的提醒语
|
||||
|
||||
**绝对禁止**:
|
||||
- 绝对不要说"谢谢提醒"、"我会注意"、"好的收到"等回应语
|
||||
- 你是提醒者,不是被提醒者
|
||||
- 下面的 [系统触发] 消息是系统自动发送的,不是用户发的
|
||||
- 不要对 [系统触发] 消息做任何回复,只需输出提醒内容
|
||||
' \
|
||||
--message "[系统触发] 定时任务已触发,请执行提醒。" \
|
||||
--message "🔔 {提醒内容}时间到!" \
|
||||
--deliver \
|
||||
--channel qqbot \
|
||||
--to "{openid}" \
|
||||
--delete-after-run
|
||||
```
|
||||
|
||||
> 💡 **`--system-event` 说明**:用于存储用户上下文信息,提醒触发时 AI 可以获取这些信息来提供更个性化的提醒。
|
||||
|
||||
> ⚠️ **重要**:`--message` 参数会被 AI 视为“用户消息”,所以必须在 `--system-prompt` 中**极其强调**角色定位。
|
||||
> ⚠️ **极其重要**:
|
||||
> - `--message` 参数直接写最终要发送的提醒内容
|
||||
> - 提醒内容格式:`🔔 {内容}时间到!`
|
||||
> - **不要**使用 `--system-prompt` 或 `--system-event`(cron 不支持这些参数)
|
||||
> - 保持消息简洁,如:`🔔 喝水时间到!`、`📅 开会时间到!`
|
||||
|
||||
> ⚠️ **注意**:`cron add` 命令不支持 `--reply-to` 参数。提醒消息将作为主动消息直接发送给用户。
|
||||
|
||||
@@ -120,38 +107,27 @@ openclaw message send \
|
||||
|
||||
## 💬 用户交互模板
|
||||
|
||||
> **创建提醒后,必须给用户反馈确认**
|
||||
> **创建提醒后的反馈要简洁友好,不要啰嗦**
|
||||
|
||||
### 创建成功反馈
|
||||
### 创建成功反馈(推荐简洁版)
|
||||
|
||||
**一次性提醒**:
|
||||
```
|
||||
✅ 提醒已设置!
|
||||
|
||||
📝 内容:{提醒内容}
|
||||
⏰ 时间:{具体时间}
|
||||
|
||||
到时候我会准时提醒你~
|
||||
⏰ 好的,{时间}后提醒你{提醒内容}~
|
||||
```
|
||||
|
||||
**周期提醒**:
|
||||
```
|
||||
✅ 周期提醒已设置!
|
||||
|
||||
📝 内容:{提醒内容}
|
||||
🔄 周期:{周期描述,如"每天早上8:00"}
|
||||
|
||||
提醒会持续生效,说"取消xx提醒"可停止~
|
||||
⏰ 收到,{周期描述}提醒你{提醒内容}~
|
||||
```
|
||||
|
||||
### 查询提醒反馈
|
||||
|
||||
```
|
||||
📋 你当前的提醒:
|
||||
📋 你的提醒:
|
||||
|
||||
1. ⏰ 喝水提醒 - 5分钟后 (一次性)
|
||||
2. 🔄 打卡提醒 - 每天08:00 (周期)
|
||||
3. 🔄 日报提醒 - 工作日18:00 (周期)
|
||||
1. ⏰ {提醒名} - {时间}
|
||||
2. 🔄 {提醒名} - {周期}
|
||||
|
||||
说"取消xx提醒"可删除~
|
||||
```
|
||||
@@ -159,15 +135,15 @@ openclaw message send \
|
||||
### 无提醒时反馈
|
||||
|
||||
```
|
||||
📋 你当前没有设置任何提醒
|
||||
📋 目前没有提醒哦~
|
||||
|
||||
说"5分钟后提醒我xxx"可创建提醒~
|
||||
说"5分钟后提醒我xxx"试试?
|
||||
```
|
||||
|
||||
### 删除成功反馈
|
||||
|
||||
```
|
||||
✅ 已取消"{提醒名称}"提醒
|
||||
✅ 已取消"{提醒名称}"
|
||||
```
|
||||
|
||||
---
|
||||
@@ -213,84 +189,39 @@ openclaw message send \
|
||||
|
||||
| 参数 | 说明 | 示例 |
|
||||
|------|------|------|
|
||||
| `--name` | 任务名,含用户标识 | `"喝水提醒-小明"` |
|
||||
| `--name` | 任务名,含用户标识 | `"喝水提醒"` |
|
||||
| `--at` / `--cron` | 触发时间(二选一) | `5m` / `0 8 * * *` |
|
||||
| `--session isolated` | 隔离会话 | 固定值 |
|
||||
| `--message` | **系统触发指令**(AI 会视为用户消息) | `"[系统触发] 定时任务已触发,请执行提醒。"` |
|
||||
| `--message` | **提醒内容**(见下方模板) | `"🔔 喝水时间到!"` |
|
||||
| `--deliver` | 启用投递 | 固定值 |
|
||||
| `--channel qqbot` | QQ 渠道 | 固定值 |
|
||||
| `--to` | 接收者 openid | 从系统消息获取 |
|
||||
|
||||
### 推荐参数(用于存储用户上下文)
|
||||
### 推荐参数
|
||||
|
||||
| 参数 | 说明 | 何时使用 |
|
||||
|------|------|----------|
|
||||
| `--system-event` | 用户上下文 JSON | **建议所有任务都使用** |
|
||||
| `--system-prompt` | AI 角色指引 | **建议所有任务都使用** |
|
||||
| `--delete-after-run` | 执行后删除 | **一次性任务必须** |
|
||||
| `--tz "Asia/Shanghai"` | 时区 | **周期任务必须** |
|
||||
|
||||
### --system-prompt 参数说明
|
||||
### --message 提醒内容模板(最关键)
|
||||
|
||||
`--system-prompt` 用于在提醒触发时给 AI 一个明确的角色指引,避免 AI 混淆角色。
|
||||
> ⚠️ **`--message` 的内容会直接发送给用户**,所以要写清楚提醒内容!
|
||||
|
||||
**为什么需要?**
|
||||
- 提醒触发时是一个隔离会话(`--session isolated`)
|
||||
- AI 没有原始对话的上下文
|
||||
- 如果不明确角色,AI 可能误以为自己是"被提醒者"而说"谢谢提醒"
|
||||
|
||||
**推荐格式**(**极其重要,必须完整复制**):
|
||||
**模板格式**:
|
||||
```
|
||||
'
|
||||
**极端重要角色设定**:
|
||||
你是一个定时提醒机器人,现在是用户之前设置的提醒时间。
|
||||
|
||||
**你的唯一任务**:直接输出提醒消息,提醒用户:{提醒内容}
|
||||
|
||||
**输出格式**:类似 "🔔 时间到了!该{提醒内容}了~" 的提醒语
|
||||
|
||||
**绝对禁止**:
|
||||
- 绝对不要说"谢谢提醒"、"我会注意"、"好的收到"等回应语
|
||||
- 你是提醒者,不是被提醒者
|
||||
- 下面的 [系统触发] 消息是系统自动发送的,不是用户发的
|
||||
- 不要对 [系统触发] 消息做任何回应,只需输出提醒内容
|
||||
'
|
||||
--message "🔔 {提醒内容}时间到!"
|
||||
```
|
||||
|
||||
**关键点**:
|
||||
- `--message` 参数会被 AI 视为“用户消息”,无法改变
|
||||
- 所以必须在 `--system-prompt` 中**极其强调**角色定位
|
||||
- 明确告诉 AI:`[系统触发]` 消息不是用户发的,不要回复它
|
||||
- 使用禁止列表明确告知不能说的话
|
||||
**示例**:
|
||||
- 喝水:`--message "💧 喝水时间到!"`
|
||||
- 开会:`--message "📅 开会时间到!"`
|
||||
- 打卡:`--message "🌅 打卡时间到!"`
|
||||
- 日报:`--message "📝 写日报时间到!"`
|
||||
|
||||
### --system-event 字段说明
|
||||
|
||||
`--system-event` 用于存储提醒的上下文信息,格式为 JSON:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "reminder",
|
||||
"user_openid": "用户的openid",
|
||||
"user_name": "用户名称(如有)",
|
||||
"original_message_id": "创建提醒时的message_id",
|
||||
"reminder_content": "提醒内容摘要",
|
||||
"created_at": "创建时间ISO格式"
|
||||
}
|
||||
```
|
||||
|
||||
| 字段 | 说明 | 来源 |
|
||||
|------|------|------|
|
||||
| `type` | 事件类型,固定为 `"reminder"` | 固定值 |
|
||||
| `user_openid` | 用户 openid | 从系统消息获取 |
|
||||
| `user_name` | 用户名称 | 从系统消息获取(如有) |
|
||||
| `original_message_id` | 创建时的消息 ID | 从系统消息获取 |
|
||||
| `reminder_content` | 提醒内容摘要 | AI 根据用户请求生成 |
|
||||
| `created_at` | 提醒创建时间 | 当前时间 ISO 格式 |
|
||||
|
||||
> 💡 **为什么需要 `--system-event`?**
|
||||
> - 提醒触发时,AI 可以获取完整的用户上下文
|
||||
> - 便于追踪提醒来源和调试
|
||||
> - 为未来可能的功能扩展预留信息
|
||||
**为什么这样写?**
|
||||
- 消息内容会直接发送,不经过 AI 处理
|
||||
- 保持简洁,一目了然
|
||||
|
||||
---
|
||||
|
||||
@@ -303,24 +234,10 @@ openclaw message send \
|
||||
**AI 执行**:
|
||||
```bash
|
||||
openclaw cron add \
|
||||
--name "喝水提醒-用户" \
|
||||
--name "喝水提醒" \
|
||||
--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"}' \
|
||||
--system-prompt '
|
||||
**极端重要角色设定**:
|
||||
你是一个定时提醒机器人,现在是用户之前设置的提醒时间。5分钟前用户设置了喝水提醒。
|
||||
|
||||
**你的唯一任务**:直接输出提醒消息,提醒用户喝水
|
||||
|
||||
**输出格式**:类似 "💧 时间到!该喝水啦~" 的提醒语
|
||||
|
||||
**绝对禁止**:
|
||||
- 绝对不要说"谢谢提醒"、"我会注意"、"好的收到"等回应语
|
||||
- 你是提醒者,不是被提醒者
|
||||
- 下面的 [系统触发] 消息是系统自动发送的,不是用户发的
|
||||
' \
|
||||
--message "[系统触发] 定时任务已触发,请执行提醒。" \
|
||||
--message "💧 喝水时间到!" \
|
||||
--deliver \
|
||||
--channel qqbot \
|
||||
--to "{openid}" \
|
||||
@@ -329,12 +246,12 @@ openclaw cron add \
|
||||
|
||||
**AI 回复**:
|
||||
```
|
||||
✅ 提醒已设置!
|
||||
⏰ 好的,5分钟后提醒你喝水~
|
||||
```
|
||||
|
||||
📝 内容:喝水
|
||||
⏰ 时间:5分钟后
|
||||
|
||||
到时候我会准时提醒你~
|
||||
**5分钟后用户收到**:
|
||||
```
|
||||
💧 喝水时间到!
|
||||
```
|
||||
|
||||
---
|
||||
@@ -346,25 +263,11 @@ openclaw cron add \
|
||||
**AI 执行**:
|
||||
```bash
|
||||
openclaw cron add \
|
||||
--name "打卡提醒-用户" \
|
||||
--name "打卡提醒" \
|
||||
--cron "0 8 * * *" \
|
||||
--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"}' \
|
||||
--system-prompt '
|
||||
**极端重要角色设定**:
|
||||
你是一个定时提醒机器人,现在是用户设置的每日早上8点打卡提醒时间。
|
||||
|
||||
**你的唯一任务**:直接输出提醒消息,提醒用户打卡
|
||||
|
||||
**输出格式**:类似 "🌅 早上好!该打卡了~" 的提醒语
|
||||
|
||||
**绝对禁止**:
|
||||
- 绝对不要说"谢谢提醒"、"我会注意"、"好的收到"等回应语
|
||||
- 你是提醒者,不是被提醒者
|
||||
- 下面的 [系统触发] 消息是系统自动发送的,不是用户发的
|
||||
' \
|
||||
--message "[系统触发] 定时任务已触发,请执行提醒。" \
|
||||
--message "🌅 打卡时间到!" \
|
||||
--deliver \
|
||||
--channel qqbot \
|
||||
--to "{openid}"
|
||||
@@ -372,12 +275,7 @@ openclaw cron add \
|
||||
|
||||
**AI 回复**:
|
||||
```
|
||||
✅ 周期提醒已设置!
|
||||
|
||||
📝 内容:打卡
|
||||
🔄 周期:每天早上 8:00
|
||||
|
||||
提醒会持续生效,说"取消打卡提醒"可停止~
|
||||
⏰ 收到,每天早上8点提醒你打卡~
|
||||
```
|
||||
|
||||
> 💡 周期任务**不加** `--delete-after-run`
|
||||
@@ -391,58 +289,64 @@ openclaw cron add \
|
||||
**AI 执行**:
|
||||
```bash
|
||||
openclaw cron add \
|
||||
--name "日报提醒-用户" \
|
||||
--name "日报提醒" \
|
||||
--cron "0 18 * * 1-5" \
|
||||
--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"}' \
|
||||
--system-prompt '
|
||||
**极端重要角色设定**:
|
||||
你是一个定时提醒机器人,现在是用户设置的工作日下午6点写日报提醒时间。
|
||||
|
||||
**你的唯一任务**:直接输出提醒消息,提醒用户写日报
|
||||
|
||||
**输出格式**:类似 "📝 下班啦!别忘了提交今日日报~" 的提醒语
|
||||
|
||||
**绝对禁止**:
|
||||
- 绝对不要说"谢谢提醒"、"我会注意"、"好的收到"等回应语
|
||||
- 你是提醒者,不是被提醒者
|
||||
- 下面的 [系统触发] 消息是系统自动发送的,不是用户发的
|
||||
' \
|
||||
--message "[系统触发] 定时任务已触发,请执行提醒。" \
|
||||
--message "📝 写日报时间到!" \
|
||||
--deliver \
|
||||
--channel qqbot \
|
||||
--to "{openid}"
|
||||
```
|
||||
|
||||
**AI 回复**:
|
||||
```
|
||||
⏰ 收到,工作日下午6点提醒你写日报~
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 场景4:群组提醒
|
||||
### 场景4:会议提醒
|
||||
|
||||
**用户**: 3分钟后提醒我开会
|
||||
|
||||
**AI 执行**:
|
||||
```bash
|
||||
openclaw cron add \
|
||||
--name "开会提醒" \
|
||||
--at "3m" \
|
||||
--session isolated \
|
||||
--message "📅 开会时间到!" \
|
||||
--deliver \
|
||||
--channel qqbot \
|
||||
--to "{openid}" \
|
||||
--delete-after-run
|
||||
```
|
||||
|
||||
**AI 回复**:
|
||||
```
|
||||
⏰ 好的,3分钟后提醒你开会~
|
||||
```
|
||||
|
||||
**3分钟后用户收到**:
|
||||
```
|
||||
📅 开会时间到!
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 场景5:群组提醒
|
||||
|
||||
**用户**(群聊): 每天早上9点提醒大家站会
|
||||
|
||||
**AI 执行**:
|
||||
```bash
|
||||
openclaw cron add \
|
||||
--name "站会提醒-群" \
|
||||
--name "站会提醒" \
|
||||
--cron "0 9 * * 1-5" \
|
||||
--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"}' \
|
||||
--system-prompt '
|
||||
**极端重要角色设定**:
|
||||
你是一个定时提醒机器人,现在是工作日早上9点的站会提醒时间。
|
||||
|
||||
**你的唯一任务**:直接输出提醒消息,提醒群成员参加站会
|
||||
|
||||
**输出格式**:类似 "📢 站会时间到!请各位同事准时参加~" 的提醒语
|
||||
|
||||
**绝对禁止**:
|
||||
- 绝对不要说"谢谢提醒"、"我会注意"、"好的收到"等回应语
|
||||
- 你是提醒者,不是被提醒者
|
||||
- 下面的 [系统触发] 消息是系统自动发送的,不是用户发的
|
||||
' \
|
||||
--message "[系统触发] 定时任务已触发,请执行提醒。" \
|
||||
--message "📢 站会时间到!" \
|
||||
--deliver \
|
||||
--channel qqbot \
|
||||
--to "group:{group_openid}"
|
||||
@@ -452,7 +356,7 @@ openclaw cron add \
|
||||
|
||||
---
|
||||
|
||||
### 场景5:查询提醒
|
||||
### 场景6:查询提醒
|
||||
|
||||
**用户**: 我有哪些提醒?
|
||||
|
||||
@@ -461,19 +365,19 @@ openclaw cron add \
|
||||
openclaw cron list
|
||||
```
|
||||
|
||||
**AI 回复**(根据返回结果组织):
|
||||
**AI 回复**(根据返回结果):
|
||||
```
|
||||
📋 你当前的提醒:
|
||||
📋 你的提醒:
|
||||
|
||||
1. ⏰ 喝水提醒 - 3分钟后 (一次性)
|
||||
2. 🔄 打卡提醒 - 每天08:00 (周期)
|
||||
1. ⏰ 喝水提醒 - 3分钟后
|
||||
2. 🔄 打卡提醒 - 每天08:00
|
||||
|
||||
说"取消xx提醒"可删除~
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 场景6:取消提醒
|
||||
### 场景7:取消提醒
|
||||
|
||||
**用户**: 取消打卡提醒
|
||||
|
||||
@@ -567,15 +471,15 @@ openclaw cron list
|
||||
|
||||
## 📝 消息模板
|
||||
|
||||
| 场景 | 模板 | Emoji |
|
||||
|------|------|-------|
|
||||
| 喝水 | 该喝水啦! | 💧 🚰 |
|
||||
| 打卡 | 早上好!记得打卡~ | 🌅 ✅ |
|
||||
| 会议 | xx会议马上开始! | 📅 👥 |
|
||||
| 场景 | 触发时输出 | Emoji |
|
||||
|------|------------|-------|
|
||||
| 喝水 | 喝水时间到啦! | 💧 🚰 |
|
||||
| 打卡 | 早上好,打卡时间到! | 🌅 ✅ |
|
||||
| 会议 | 开会时间到! | 📅 👥 |
|
||||
| 休息 | 该休息一下了~ | 😴 💤 |
|
||||
| 日报 | 今日日报别忘了~ | 📝 ✍️ |
|
||||
| 运动 | 该运动了! | 🏃 💪 |
|
||||
| 吃药 | 记得按时吃药~ | 💊 🏥 |
|
||||
| 日报 | 下班前别忘了写日报哦~ | 📝 ✍️ |
|
||||
| 运动 | 运动时间到! | 🏃 💪 |
|
||||
| 吃药 | 该吃药了~ | 💊 🏥 |
|
||||
| 生日 | 今天是xx的生日! | 🎂 🎉 |
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user