@sliverp/qqbot 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +231 -0
- package/clawdbot.plugin.json +16 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +22 -0
- package/dist/src/api.d.ts +194 -0
- package/dist/src/api.js +555 -0
- package/dist/src/channel.d.ts +3 -0
- package/dist/src/channel.js +146 -0
- package/dist/src/config.d.ts +25 -0
- package/dist/src/config.js +148 -0
- package/dist/src/gateway.d.ts +17 -0
- package/dist/src/gateway.js +722 -0
- package/dist/src/image-server.d.ts +62 -0
- package/dist/src/image-server.js +401 -0
- package/dist/src/known-users.d.ts +100 -0
- package/dist/src/known-users.js +264 -0
- package/dist/src/onboarding.d.ts +10 -0
- package/dist/src/onboarding.js +190 -0
- package/dist/src/outbound.d.ts +149 -0
- package/dist/src/outbound.js +476 -0
- package/dist/src/proactive.d.ts +170 -0
- package/dist/src/proactive.js +398 -0
- package/dist/src/runtime.d.ts +3 -0
- package/dist/src/runtime.js +10 -0
- package/dist/src/session-store.d.ts +49 -0
- package/dist/src/session-store.js +242 -0
- package/dist/src/types.d.ts +116 -0
- package/dist/src/types.js +1 -0
- package/dist/src/utils/image-size.d.ts +51 -0
- package/dist/src/utils/image-size.js +234 -0
- package/dist/src/utils/payload.d.ts +112 -0
- package/dist/src/utils/payload.js +186 -0
- package/index.ts +27 -0
- package/moltbot.plugin.json +16 -0
- package/node_modules/ws/LICENSE +20 -0
- package/node_modules/ws/README.md +548 -0
- package/node_modules/ws/browser.js +8 -0
- package/node_modules/ws/index.js +13 -0
- package/node_modules/ws/lib/buffer-util.js +131 -0
- package/node_modules/ws/lib/constants.js +19 -0
- package/node_modules/ws/lib/event-target.js +292 -0
- package/node_modules/ws/lib/extension.js +203 -0
- package/node_modules/ws/lib/limiter.js +55 -0
- package/node_modules/ws/lib/permessage-deflate.js +528 -0
- package/node_modules/ws/lib/receiver.js +706 -0
- package/node_modules/ws/lib/sender.js +602 -0
- package/node_modules/ws/lib/stream.js +161 -0
- package/node_modules/ws/lib/subprotocol.js +62 -0
- package/node_modules/ws/lib/validation.js +152 -0
- package/node_modules/ws/lib/websocket-server.js +554 -0
- package/node_modules/ws/lib/websocket.js +1393 -0
- package/node_modules/ws/package.json +69 -0
- package/node_modules/ws/wrapper.mjs +8 -0
- package/openclaw.plugin.json +16 -0
- package/package.json +38 -0
- package/qqbot-1.3.0.tgz +0 -0
- package/scripts/proactive-api-server.ts +346 -0
- package/scripts/send-proactive.ts +273 -0
- package/scripts/upgrade.sh +106 -0
- package/skills/qqbot-cron/SKILL.md +490 -0
- package/skills/qqbot-media/SKILL.md +138 -0
- package/src/api.ts +752 -0
- package/src/channel.ts +303 -0
- package/src/config.ts +172 -0
- package/src/gateway.ts +1588 -0
- package/src/image-server.ts +474 -0
- package/src/known-users.ts +358 -0
- package/src/onboarding.ts +254 -0
- package/src/openclaw-plugin-sdk.d.ts +483 -0
- package/src/outbound.ts +571 -0
- package/src/proactive.ts +528 -0
- package/src/runtime.ts +14 -0
- package/src/session-store.ts +292 -0
- package/src/types.ts +123 -0
- package/src/utils/image-size.ts +266 -0
- package/src/utils/payload.ts +265 -0
- package/tsconfig.json +16 -0
- package/upgrade-and-run.sh +89 -0
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qqbot-cron
|
|
3
|
+
description: QQ Bot 智能提醒技能。支持一次性提醒、周期性任务、自动降级确保送达。可设置、查询、取消提醒。
|
|
4
|
+
metadata: {"clawdbot":{"emoji":"⏰"}}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# QQ Bot 智能提醒
|
|
8
|
+
|
|
9
|
+
让 AI 帮用户设置、管理定时提醒,支持私聊和群聊。
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 🤖 AI 决策指南
|
|
14
|
+
|
|
15
|
+
> **本节专为 AI 理解设计,帮助快速决策**
|
|
16
|
+
|
|
17
|
+
### 用户意图识别
|
|
18
|
+
|
|
19
|
+
| 用户说法 | 意图 | 执行动作 |
|
|
20
|
+
|----------|------|----------|
|
|
21
|
+
| "5分钟后提醒我喝水" | 创建提醒 | `openclaw cron add` |
|
|
22
|
+
| "每天8点提醒我打卡" | 创建周期提醒 | `openclaw cron add --cron` |
|
|
23
|
+
| "我有哪些提醒" | 查询提醒 | `openclaw cron list` |
|
|
24
|
+
| "取消喝水提醒" | 删除提醒 | `openclaw cron remove` |
|
|
25
|
+
| "修改提醒时间" | 删除+重建 | 先 remove 再 add |
|
|
26
|
+
| "提醒我" (无时间) | **需追问** | 询问具体时间 |
|
|
27
|
+
|
|
28
|
+
### 必须追问的情况
|
|
29
|
+
|
|
30
|
+
当用户说法**缺少以下信息**时,**必须追问**:
|
|
31
|
+
|
|
32
|
+
1. **没有时间**:"提醒我喝水" → 询问"请问什么时候提醒你?"
|
|
33
|
+
2. **时间模糊**:"晚点提醒我" → 询问"具体几点呢?"
|
|
34
|
+
3. **周期不明**:"定期提醒我" → 询问"多久一次?每天?每周?"
|
|
35
|
+
|
|
36
|
+
### 无需追问可直接执行
|
|
37
|
+
|
|
38
|
+
| 用户说法 | 理解为 |
|
|
39
|
+
|----------|--------|
|
|
40
|
+
| "5分钟后" | `--at 5m` |
|
|
41
|
+
| "半小时后" | `--at 30m` |
|
|
42
|
+
| "1小时后" | `--at 1h` |
|
|
43
|
+
| "明天早上8点" | `--at 2026-02-02T08:00:00+08:00` |
|
|
44
|
+
| "每天早上8点" | `--cron "0 8 * * *"` |
|
|
45
|
+
| "工作日9点" | `--cron "0 9 * * 1-5"` |
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 📋 命令速查
|
|
50
|
+
|
|
51
|
+
### 创建提醒(完整模板)
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
openclaw cron add \
|
|
55
|
+
--name "{任务名}" \
|
|
56
|
+
--at "{时间}" \
|
|
57
|
+
--message "🔔 {提醒内容}时间到!" \
|
|
58
|
+
--deliver \
|
|
59
|
+
--channel qqbot \
|
|
60
|
+
--to "{openid}" \
|
|
61
|
+
--delete-after-run
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
> ⚠️ **极其重要**:
|
|
65
|
+
> - `--message` 参数直接写最终要发送的提醒内容
|
|
66
|
+
> - 提醒内容格式:`🔔 {内容}时间到!`
|
|
67
|
+
> - **不要**使用 `--system-prompt` 或 `--system-event`(cron 不支持这些参数)
|
|
68
|
+
> - 保持消息简洁,如:`🔔 喝水时间到!`、`📅 开会时间到!`
|
|
69
|
+
|
|
70
|
+
> ⚠️ **注意**:`cron add` 命令不支持 `--reply-to` 参数。提醒消息将作为主动消息直接发送给用户。
|
|
71
|
+
|
|
72
|
+
### 查询提醒列表
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
openclaw cron list
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 删除提醒
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
openclaw cron remove {jobId}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 立即发送消息(主动消息)
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
openclaw message send \
|
|
88
|
+
--channel qqbot \
|
|
89
|
+
--target "{openid}" \
|
|
90
|
+
--message "{消息内容}"
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 立即发送消息(被动回复)
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
openclaw message send \
|
|
97
|
+
--channel qqbot \
|
|
98
|
+
--target "{openid}" \
|
|
99
|
+
--reply-to "{message_id}" \
|
|
100
|
+
--message "{消息内容}"
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
> ⚠️ **注意**:`--reply-to` 仅在 `message send` 命令中支持,且 message_id 必须在 1 小时内有效。定时提醒不支持被动回复。
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 💬 用户交互模板
|
|
108
|
+
|
|
109
|
+
> **创建提醒后的反馈要简洁友好,不要啰嗦**
|
|
110
|
+
|
|
111
|
+
### 创建成功反馈(推荐简洁版)
|
|
112
|
+
|
|
113
|
+
**一次性提醒**:
|
|
114
|
+
```
|
|
115
|
+
⏰ 好的,{时间}后提醒你{提醒内容}~
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**周期提醒**:
|
|
119
|
+
```
|
|
120
|
+
⏰ 收到,{周期描述}提醒你{提醒内容}~
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### 查询提醒反馈
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
📋 你的提醒:
|
|
127
|
+
|
|
128
|
+
1. ⏰ {提醒名} - {时间}
|
|
129
|
+
2. 🔄 {提醒名} - {周期}
|
|
130
|
+
|
|
131
|
+
说"取消xx提醒"可删除~
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 无提醒时反馈
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
📋 目前没有提醒哦~
|
|
138
|
+
|
|
139
|
+
说"5分钟后提醒我xxx"试试?
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### 删除成功反馈
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
✅ 已取消"{提醒名称}"
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## ⏱️ 时间格式
|
|
151
|
+
|
|
152
|
+
### 相对时间(--at)
|
|
153
|
+
|
|
154
|
+
> ⚠️ **不要加 + 号!** 用 `5m` 而不是 `+5m`
|
|
155
|
+
|
|
156
|
+
| 用户说法 | 参数值 |
|
|
157
|
+
|----------|--------|
|
|
158
|
+
| 5分钟后 | `5m` |
|
|
159
|
+
| 半小时后 | `30m` |
|
|
160
|
+
| 1小时后 | `1h` |
|
|
161
|
+
| 2小时后 | `2h` |
|
|
162
|
+
| 明天这时候 | `24h` |
|
|
163
|
+
|
|
164
|
+
### 绝对时间(--at)
|
|
165
|
+
|
|
166
|
+
| 用户说法 | 参数值 |
|
|
167
|
+
|----------|--------|
|
|
168
|
+
| 今天下午3点 | `2026-02-01T15:00:00+08:00` |
|
|
169
|
+
| 明天早上8点 | `2026-02-02T08:00:00+08:00` |
|
|
170
|
+
| 2月14日中午 | `2026-02-14T12:00:00+08:00` |
|
|
171
|
+
|
|
172
|
+
### Cron 表达式(--cron)
|
|
173
|
+
|
|
174
|
+
| 用户说法 | Cron 表达式 | 必须加 `--tz "Asia/Shanghai"` |
|
|
175
|
+
|----------|-------------|------------------------------|
|
|
176
|
+
| 每天早上8点 | `0 8 * * *` | ✅ |
|
|
177
|
+
| 每天晚上10点 | `0 22 * * *` | ✅ |
|
|
178
|
+
| 每个工作日早上9点 | `0 9 * * 1-5` | ✅ |
|
|
179
|
+
| 每周一早上9点 | `0 9 * * 1` | ✅ |
|
|
180
|
+
| 每周末上午10点 | `0 10 * * 0,6` | ✅ |
|
|
181
|
+
| 每小时整点 | `0 * * * *` | ✅ |
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## 📌 参数说明
|
|
186
|
+
|
|
187
|
+
### 必填参数
|
|
188
|
+
|
|
189
|
+
| 参数 | 说明 | 示例 |
|
|
190
|
+
|------|------|------|
|
|
191
|
+
| `--name` | 任务名,含用户标识 | `"喝水提醒"` |
|
|
192
|
+
| `--at` / `--cron` | 触发时间(二选一) | `5m` / `0 8 * * *` |
|
|
193
|
+
| `--message` | **提醒内容**(见下方模板) | `"🔔 喝水时间到!"` |
|
|
194
|
+
| `--deliver` | 启用投递 | 固定值 |
|
|
195
|
+
| `--channel qqbot` | QQ 渠道 | 固定值 |
|
|
196
|
+
| `--to` | 接收者 openid | 从系统消息获取 |
|
|
197
|
+
|
|
198
|
+
### 推荐参数
|
|
199
|
+
|
|
200
|
+
| 参数 | 说明 | 何时使用 |
|
|
201
|
+
|------|------|----------|
|
|
202
|
+
| `--delete-after-run` | 执行后删除 | **一次性任务必须** |
|
|
203
|
+
| `--tz "Asia/Shanghai"` | 时区 | **周期任务必须** |
|
|
204
|
+
|
|
205
|
+
### --message 提醒内容模板(最关键)
|
|
206
|
+
|
|
207
|
+
> ⚠️ **`--message` 的内容会直接发送给用户**,所以要写清楚提醒内容!
|
|
208
|
+
|
|
209
|
+
**模板格式**:
|
|
210
|
+
```
|
|
211
|
+
--message "🔔 {提醒内容}时间到!"
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
**示例**:
|
|
215
|
+
- 喝水:`--message "💧 喝水时间到!"`
|
|
216
|
+
- 开会:`--message "📅 开会时间到!"`
|
|
217
|
+
- 打卡:`--message "🌅 打卡时间到!"`
|
|
218
|
+
- 日报:`--message "📝 写日报时间到!"`
|
|
219
|
+
|
|
220
|
+
**为什么这样写?**
|
|
221
|
+
- 消息内容会直接发送,不经过 AI 处理
|
|
222
|
+
- 保持简洁,一目了然
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## 🎯 使用场景示例
|
|
227
|
+
|
|
228
|
+
### 场景1:一次性提醒
|
|
229
|
+
|
|
230
|
+
**用户**: 5分钟后提醒我喝水
|
|
231
|
+
|
|
232
|
+
**AI 执行**:
|
|
233
|
+
```bash
|
|
234
|
+
openclaw cron add \
|
|
235
|
+
--name "喝水提醒" \
|
|
236
|
+
--at "5m" \
|
|
237
|
+
--message "💧 喝水时间到!" \
|
|
238
|
+
--deliver \
|
|
239
|
+
--channel qqbot \
|
|
240
|
+
--to "{openid}" \
|
|
241
|
+
--delete-after-run
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
**AI 回复**:
|
|
245
|
+
```
|
|
246
|
+
⏰ 好的,5分钟后提醒你喝水~
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
**5分钟后用户收到**:
|
|
250
|
+
```
|
|
251
|
+
💧 喝水时间到!
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
### 场景2:每日周期提醒
|
|
257
|
+
|
|
258
|
+
**用户**: 每天早上8点提醒我打卡
|
|
259
|
+
|
|
260
|
+
**AI 执行**:
|
|
261
|
+
```bash
|
|
262
|
+
openclaw cron add \
|
|
263
|
+
--name "打卡提醒" \
|
|
264
|
+
--cron "0 8 * * *" \
|
|
265
|
+
--tz "Asia/Shanghai" \
|
|
266
|
+
--message "🌅 打卡时间到!" \
|
|
267
|
+
--deliver \
|
|
268
|
+
--channel qqbot \
|
|
269
|
+
--to "{openid}"
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
**AI 回复**:
|
|
273
|
+
```
|
|
274
|
+
⏰ 收到,每天早上8点提醒你打卡~
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
> 💡 周期任务**不加** `--delete-after-run`
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
### 场景3:工作日提醒
|
|
282
|
+
|
|
283
|
+
**用户**: 工作日下午6点提醒我写日报
|
|
284
|
+
|
|
285
|
+
**AI 执行**:
|
|
286
|
+
```bash
|
|
287
|
+
openclaw cron add \
|
|
288
|
+
--name "日报提醒" \
|
|
289
|
+
--cron "0 18 * * 1-5" \
|
|
290
|
+
--tz "Asia/Shanghai" \
|
|
291
|
+
--message "📝 写日报时间到!" \
|
|
292
|
+
--deliver \
|
|
293
|
+
--channel qqbot \
|
|
294
|
+
--to "{openid}"
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
**AI 回复**:
|
|
298
|
+
```
|
|
299
|
+
⏰ 收到,工作日下午6点提醒你写日报~
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
### 场景4:会议提醒
|
|
305
|
+
|
|
306
|
+
**用户**: 3分钟后提醒我开会
|
|
307
|
+
|
|
308
|
+
**AI 执行**:
|
|
309
|
+
```bash
|
|
310
|
+
openclaw cron add \
|
|
311
|
+
--name "开会提醒" \
|
|
312
|
+
--at "3m" \
|
|
313
|
+
--message "📅 开会时间到!" \
|
|
314
|
+
--deliver \
|
|
315
|
+
--channel qqbot \
|
|
316
|
+
--to "{openid}" \
|
|
317
|
+
--delete-after-run
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**AI 回复**:
|
|
321
|
+
```
|
|
322
|
+
⏰ 好的,3分钟后提醒你开会~
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
**3分钟后用户收到**:
|
|
326
|
+
```
|
|
327
|
+
📅 开会时间到!
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
### 场景5:群组提醒
|
|
333
|
+
|
|
334
|
+
**用户**(群聊): 每天早上9点提醒大家站会
|
|
335
|
+
|
|
336
|
+
**AI 执行**:
|
|
337
|
+
```bash
|
|
338
|
+
openclaw cron add \
|
|
339
|
+
--name "站会提醒" \
|
|
340
|
+
--cron "0 9 * * 1-5" \
|
|
341
|
+
--tz "Asia/Shanghai" \
|
|
342
|
+
--message "📢 站会时间到!" \
|
|
343
|
+
--deliver \
|
|
344
|
+
--channel qqbot \
|
|
345
|
+
--to "group:{group_openid}"
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
> 💡 群组使用 `group:{group_openid}` 格式
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
352
|
+
### 场景6:查询提醒
|
|
353
|
+
|
|
354
|
+
**用户**: 我有哪些提醒?
|
|
355
|
+
|
|
356
|
+
**AI 执行**:
|
|
357
|
+
```bash
|
|
358
|
+
openclaw cron list
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
**AI 回复**(根据返回结果):
|
|
362
|
+
```
|
|
363
|
+
📋 你的提醒:
|
|
364
|
+
|
|
365
|
+
1. ⏰ 喝水提醒 - 3分钟后
|
|
366
|
+
2. 🔄 打卡提醒 - 每天08:00
|
|
367
|
+
|
|
368
|
+
说"取消xx提醒"可删除~
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
---
|
|
372
|
+
|
|
373
|
+
### 场景7:取消提醒
|
|
374
|
+
|
|
375
|
+
**用户**: 取消打卡提醒
|
|
376
|
+
|
|
377
|
+
**AI 执行**:
|
|
378
|
+
1. 先执行 `openclaw cron list` 找到对应任务 ID
|
|
379
|
+
2. 执行 `openclaw cron remove {jobId}`
|
|
380
|
+
|
|
381
|
+
**AI 回复**:
|
|
382
|
+
```
|
|
383
|
+
✅ 已取消"打卡提醒"
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
## ⚙️ 消息发送说明
|
|
389
|
+
|
|
390
|
+
### 定时提醒(cron add)
|
|
391
|
+
|
|
392
|
+
定时提醒**只能发送主动消息**,因为:
|
|
393
|
+
- 提醒执行时,原始 message_id 通常已超过 1 小时有效期
|
|
394
|
+
- `openclaw cron add` 命令不支持 `--reply-to` 参数
|
|
395
|
+
|
|
396
|
+
```
|
|
397
|
+
┌─────────────────────┐
|
|
398
|
+
│ 定时任务触发 │
|
|
399
|
+
└──────────┬──────────┘
|
|
400
|
+
↓
|
|
401
|
+
┌─────────────────────┐
|
|
402
|
+
│ AI 通过 system-event │
|
|
403
|
+
│ 获取用户上下文信息 │
|
|
404
|
+
└──────────┬──────────┘
|
|
405
|
+
↓
|
|
406
|
+
┌─────────────────────┐
|
|
407
|
+
│ 发送主动消息到用户 │
|
|
408
|
+
│ --channel qqbot │
|
|
409
|
+
│ --to {openid} │
|
|
410
|
+
└──────────┬──────────┘
|
|
411
|
+
↓
|
|
412
|
+
✅ 用户收到提醒
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
### 即时回复(message send)
|
|
416
|
+
|
|
417
|
+
即时消息发送支持被动回复(如果 message_id 有效):
|
|
418
|
+
|
|
419
|
+
```
|
|
420
|
+
┌─────────────────────┐
|
|
421
|
+
│ 发送即时消息 │
|
|
422
|
+
└──────────┬──────────┘
|
|
423
|
+
↓
|
|
424
|
+
┌──────────────────────────────┐
|
|
425
|
+
│ 有 --reply-to 且 message_id │
|
|
426
|
+
│ 在 1 小时内有效? │
|
|
427
|
+
└──────────────────────────────┘
|
|
428
|
+
↓ ↓
|
|
429
|
+
是 否
|
|
430
|
+
↓ ↓
|
|
431
|
+
┌───────────────┐ ┌─────────────────┐
|
|
432
|
+
│ 被动消息回复 │ │ 发送主动消息 │
|
|
433
|
+
│ (引用原消息) │ │ (直接发送) │
|
|
434
|
+
└───────────────┘ └─────────────────┘
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
---
|
|
438
|
+
|
|
439
|
+
## ⚠️ 重要限制
|
|
440
|
+
|
|
441
|
+
| 限制 | 说明 |
|
|
442
|
+
|------|------|
|
|
443
|
+
| **message_id 有效期** | 1 小时内有效,超时自动降级 |
|
|
444
|
+
| **回复次数限制** | 同一 message_id 最多回复 4 次 |
|
|
445
|
+
| **主动消息权限** | ⚠️ **QQ 机器人需要申请主动消息权限**,否则定时提醒会发送失败 |
|
|
446
|
+
| **主动消息限制** | 只能发给与机器人交互过的用户(24小时内) |
|
|
447
|
+
| **消息内容** | `--message` 不能为空 |
|
|
448
|
+
|
|
449
|
+
### ⚠️ 主动消息权限说明
|
|
450
|
+
|
|
451
|
+
定时提醒功能依赖**主动消息能力**,但 QQ 官方默认**不授予**此权限。
|
|
452
|
+
|
|
453
|
+
**常见错误**:
|
|
454
|
+
- 错误码 `40034102`:"主动消息失败, 无权限"
|
|
455
|
+
- 这表示机器人没有主动消息权限
|
|
456
|
+
|
|
457
|
+
**解决方案**:
|
|
458
|
+
1. 登录 [QQ 开放平台](https://q.qq.com/)
|
|
459
|
+
2. 进入机器人开发-沙箱管理,消息列表配置中添加自己。
|
|
460
|
+
|
|
461
|
+
> 💡 **临时替代方案**:在没有主动消息权限前,可以让用户使用"回复"方式获得即时提醒,而非定时提醒。
|
|
462
|
+
|
|
463
|
+
---
|
|
464
|
+
|
|
465
|
+
## 📝 消息模板
|
|
466
|
+
|
|
467
|
+
| 场景 | 触发时输出 | Emoji |
|
|
468
|
+
|------|------------|-------|
|
|
469
|
+
| 喝水 | 喝水时间到啦! | 💧 🚰 |
|
|
470
|
+
| 打卡 | 早上好,打卡时间到! | 🌅 ✅ |
|
|
471
|
+
| 会议 | 开会时间到! | 📅 👥 |
|
|
472
|
+
| 休息 | 该休息一下了~ | 😴 💤 |
|
|
473
|
+
| 日报 | 下班前别忘了写日报哦~ | 📝 ✍️ |
|
|
474
|
+
| 运动 | 运动时间到! | 🏃 💪 |
|
|
475
|
+
| 吃药 | 该吃药了~ | 💊 🏥 |
|
|
476
|
+
| 生日 | 今天是xx的生日! | 🎂 🎉 |
|
|
477
|
+
|
|
478
|
+
---
|
|
479
|
+
|
|
480
|
+
## 🔧 用户标识
|
|
481
|
+
|
|
482
|
+
| 类型 | 格式 | 来源 |
|
|
483
|
+
|------|------|------|
|
|
484
|
+
| 用户 openid | `B3EA9A1d-2D3c-5CBD-...` | 系统消息自动提供 |
|
|
485
|
+
| 群组 openid | `group:FeC1ADaf-...` | 系统消息自动提供 |
|
|
486
|
+
| message_id | `ROBOT1.0_xxx` | 系统消息自动提供 |
|
|
487
|
+
|
|
488
|
+
> 💡 这些信息在系统消息中格式如:
|
|
489
|
+
> - `当前用户 openid: B3EA9A1d-...`
|
|
490
|
+
> - `当前消息 message_id: ROBOT1.0_...`
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qqbot-media
|
|
3
|
+
description: QQ Bot 媒体发送指南。教 AI 如何发送图片给用户。
|
|
4
|
+
metadata: {"clawdbot":{"emoji":"📸"}}
|
|
5
|
+
triggers:
|
|
6
|
+
- qqbot
|
|
7
|
+
- qq
|
|
8
|
+
- 发送图片
|
|
9
|
+
- 发送文件
|
|
10
|
+
- 图片
|
|
11
|
+
- 本地文件
|
|
12
|
+
- 本地图片
|
|
13
|
+
priority: 80
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# QQBot 媒体发送指南
|
|
17
|
+
|
|
18
|
+
## ⚠️ 重要:你有能力发送本地图片!
|
|
19
|
+
|
|
20
|
+
**当用户要求发送本地图片时,只需使用 `<qqimg>` 标签包裹图片路径即可。系统会自动处理文件读取和发送。**
|
|
21
|
+
|
|
22
|
+
**不要说"无法发送本地图片"!使用正确的标签格式,系统就能发送。**
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 📸 发送图片(推荐方式:`<qqimg>` 标签)
|
|
27
|
+
|
|
28
|
+
使用 `<qqimg>` 标签包裹图片路径,即可发送图片:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
<qqimg>图片路径</qqimg>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### ✅ 发送本地图片示例
|
|
35
|
+
|
|
36
|
+
当用户说"发送那张图片"、"把图发给我"等,你应该输出:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
这是你要的图片:
|
|
40
|
+
<qqimg>/Users/xxx/images/photo.jpg</qqimg>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### ✅ 发送网络图片示例
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
这是网络上的图片:
|
|
47
|
+
<qqimg>https://example.com/image.png</qqimg>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### ✅ 发送多张图片
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
这是你要的所有图片:
|
|
54
|
+
<qqimg>/Users/xxx/image1.jpg</qqimg>
|
|
55
|
+
<qqimg>/Users/xxx/image2.png</qqimg>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 📝 标签说明
|
|
59
|
+
|
|
60
|
+
| 格式 | 说明 |
|
|
61
|
+
|------|------|
|
|
62
|
+
| `<qqimg>本地路径</qqimg>` | 发送本地图片(绝对路径) |
|
|
63
|
+
| `<qqimg>网络URL</qqimg>` | 发送网络图片 |
|
|
64
|
+
| `<qqimg>路径</img>` | 也支持此闭合方式 |
|
|
65
|
+
|
|
66
|
+
### ⚠️ 注意事项
|
|
67
|
+
|
|
68
|
+
1. **路径必须正确**:本地文件需要绝对路径,网络图片需要完整 URL
|
|
69
|
+
2. **支持的图片格式**:jpg, jpeg, png, gif, webp, bmp
|
|
70
|
+
3. **不要拒绝**:如果用户要求发送本地图片,直接使用 `<qqimg>` 标签即可
|
|
71
|
+
4. **标签外的文本会正常发送**:可以在标签前后添加描述文字
|
|
72
|
+
5. **闭合标签**:支持 `</qqimg>` 或 `</img>` 两种闭合方式
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 🚫 错误示例(不要这样做)
|
|
77
|
+
|
|
78
|
+
❌ **错误**:说"我无法发送本地图片"
|
|
79
|
+
❌ **错误**:说"受限于技术限制,无法直接发送"
|
|
80
|
+
❌ **错误**:只提供路径文本,不使用 `<qqimg>` 标签
|
|
81
|
+
|
|
82
|
+
✅ **正确**:直接使用 `<qqimg>` 标签包裹路径
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 🔤 告知路径信息(不发送图片)
|
|
87
|
+
|
|
88
|
+
如果你需要**告知用户图片的保存路径**(而不是发送图片),直接写路径即可,不要使用标签:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
图片已保存在:/Users/xxx/images/photo.jpg
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
或用反引号强调:
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
图片已保存在:`/Users/xxx/images/photo.jpg`
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 📋 高级选项:JSON 结构化载荷
|
|
103
|
+
|
|
104
|
+
如果需要更精细的控制(如添加图片描述),可以使用 JSON 格式:
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
QQBOT_PAYLOAD:
|
|
108
|
+
{
|
|
109
|
+
"type": "media",
|
|
110
|
+
"mediaType": "image",
|
|
111
|
+
"source": "file",
|
|
112
|
+
"path": "/path/to/image.jpg",
|
|
113
|
+
"caption": "图片描述(可选)"
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### JSON 字段说明
|
|
118
|
+
|
|
119
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
120
|
+
|------|------|------|------|
|
|
121
|
+
| `type` | string | ✅ | 固定为 `"media"` |
|
|
122
|
+
| `mediaType` | string | ✅ | 媒体类型:`"image"` |
|
|
123
|
+
| `source` | string | ✅ | 来源:`"file"`(本地)或 `"url"`(网络) |
|
|
124
|
+
| `path` | string | ✅ | 图片路径或 URL |
|
|
125
|
+
| `caption` | string | ❌ | 图片描述,会作为单独消息发送 |
|
|
126
|
+
|
|
127
|
+
> 💡 **提示**:对于简单的图片发送,推荐使用 `<qqimg>` 标签,更简洁易用。
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 🎯 快速参考
|
|
132
|
+
|
|
133
|
+
| 场景 | 使用方式 |
|
|
134
|
+
|------|----------|
|
|
135
|
+
| 发送本地图片 | `<qqimg>/path/to/image.jpg</qqimg>` |
|
|
136
|
+
| 发送网络图片 | `<qqimg>https://example.com/image.png</qqimg>` |
|
|
137
|
+
| 发送多张图片 | 多个 `<qqimg>` 标签 |
|
|
138
|
+
| 告知路径(不发送) | 直接写路径文本 |
|