⚠️ Mandatory rules
When the user mentions "remind", "alarm", "schedule", "in X minutes/hours", "every day at X o'clock", "call me", or any other request involving delay or scheduling, you must call the tool, and absolutely must not reply only in natural language with "OK, I will remind you"!
You have no memory or background thread. Verbally promising "I will remind you when the time comes" is invalid—only calling the tool can actually register a scheduled task.
Recommended process (prefer using the qqbot_remind tool)
Step one: call the qqbot_remind tool, passing simple parameters:
| Parameter | Description | Example |
|---|---|---|
action |
Action type | "add" / "list" / "remove" |
content |
Reminder content | "喝水" |
to |
Target address (optional, automatically obtained by the system, usually no need to fill in) | — |
time |
Time (relative time or cron expression) | "5m" / "1h30m" / "0 8 * * *" |
jobId |
Task ID (remove only) | "xxx" |
Step two:qqbot_remind will return cronParamsYou mustimmediatelyuse the value of cronParams asas-isthe parameters to call the cron tool.It is forbidden to modify, omit, or reorganize any field in cronParams any field in(especially delivery in the accountId)。
Step three: based on the return result of the cron tool, reply to the user.
Example
The user says: "Remind me to drink water in 5 minutes"
- Call
qqbot_remind:{ "action": "add", "content": "喝水", "time": "5m" } - Received the returned
cronParams→ immediately call thecrontool with thatcronParams - Reply to the user:
⏰ 好的,5分钟后提醒你喝水~
Fallback (directly use the cron tool)
Use the following method only when the
qqbot_remindtool is unavailable.
Core rules
payload.kind must be
"agentTurn", and absolutely must not use"systemEvent"!systemEventonly injects text inside the AI session, and the user will not receive a QQ message.
5 immutable fields:
| Field | Fixed value | Reason |
|---|---|---|
payload.kind |
"agentTurn" |
systemEvent will not send a QQ message |
delivery.mode |
"announce" |
Delivery mode |
delivery.channel |
"qqbot" |
QQ channel identifier |
delivery.to |
User openid | Obtained from the To field |
sessionTarget |
"isolated" |
Isolate the session to avoid contamination |
delivery.accountIdThe account ID of the current session must be filled in (if known), to ensure that messages are sent through the correct bot account in multi-account scenarios.
schedule.atMsmust bean absolute millisecond timestamp(e.g.1770733800000), relative strings such as"5m"are not supported. Calculation method:当前时间戳ms + 延迟毫秒。
One-time reminder (schedule.kind = "at")
{
"action": "add",
"job": {
"name": "{任务名}",
"schedule": { "kind": "at", "atMs": "{当前时间戳ms + N*60000}" },
"sessionTarget": "isolated",
"wakeMode": "now",
"deleteAfterRun": true,
"payload": {
"kind": "agentTurn",
"message": "你是一个暖心的提醒助手。请用温暖、有趣的方式提醒用户:{提醒内容}。要求:(1) 不要回复HEARTBEAT_OK (2) 不要解释你是谁 (3) 直接输出一条暖心的提醒消息 (4) 可以加一句简短的鸡汤或关怀的话 (5) 控制在2-3句话以内 (6) 用emoji点缀"
},
"delivery": {
"mode": "announce",
"channel": "qqbot",
"to": "{openid}",
"accountId": "{accountId}"
}
}
}
Recurring reminder (schedule.kind = "cron")
{
"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点缀"
},
"delivery": {
"mode": "announce",
"channel": "qqbot",
"to": "{openid}",
"accountId": "{accountId}"
}
}
}
Recurring taskDo not add
deleteAfterRun. Group chattoformat is"qqbot:group:{group_openid}"。
Cron expression quick reference
| Scenario | expr |
|---|---|
| Every day at 8 AM | "0 8 * * *" |
| Every day at 10 PM | "0 22 * * *" |
| weekday mornings at 9 AM | "0 9 * * 1-5" |
| every Monday morning at 9 AM | "0 9 * * 1" |
| every weekend at 10 AM | "0 10 * * 0,6" |
| every hour on the hour | "0 * * * *" |
Recurring reminders must include
"tz": "Asia/Shanghai"。
AI Decision Guide
| User phrasing | action | time format |
|---|---|---|
| "Remind me to drink water in 5 minutes" | add |
"5m" |
| "Remind me for the meeting in 1 hour" | add |
"1h" |
| "Remind me to clock in at 8 AM every day" | add |
"0 8 * * *" |
| "Remind me on weekday mornings at 9 AM" | add |
"0 9 * * 1-5" |
| "What reminders do I have" | list |
— |
| "Cancel the drink water reminder" | remove |
— |
| "Change the reminder time" | remove → add |
— |
| "Remind me" (no time) | Needs follow-up | — |
Pure relative times ("in 5 minutes", "in 1 hour") can be calculated directly without confirmation. If the time is vague or missing, a follow-up is needed.
Reply template
- One-time:
⏰ 好的,{时间}后提醒你{内容}~ - Recurring:
⏰ 收到,{周期}提醒你{内容}~ - Query with no results:
📋 目前没有提醒哦~ 说"5分钟后提醒我xxx"试试? - Deletion successful:
✅ 已取消"{名称}"
openclaw cron add \ --name "Off-work reminder" \ --at "2026-03-26T21:42:31+08:00" \ --message "test" \ --to …``