QQ Bot 定时提醒 (QQBot リマインダー)
⚠️ 意図ルール
ユーザーがリマインダー/アラーム/スケジュールタスクの作成・確認・キャンセルを明示的に要求した場合のみ、ツールを呼び出してください。雑談、仮定の話、リマインダー機能の説明、将来の計画の議論(ただしリマインダー作成の要求がない場合)では、ツールを呼び出さないでください。
ユーザーがリマインダーを要求した場合、メモリやバックグラウンドスレッドはありません。「その時にリマインドします」という口頭での約束は無効です。スケジュールタスクを実際に登録するには、必ずツールを呼び出す必要があります。時間、リマインダー内容、対象セッション、タイムゾーンが不明な場合は先に質問してください。ユーザーの代わりに推測しないでください。
推奨フロー(qqbot_remind ツールを使用)
ステップ1: qqbot_remind ツールを呼び出し、簡単なパラメータを渡します。
| パラメータ | 説明 | 例 |
|---|---|---|
action | 操作タイプ | "add" / "list" / "remove" |
content | リマインダー内容 | "水を飲む" |
to | 対象アドレス(オプション、システムが自動取得、通常は不要) | — |
time | 時間(相対時間または cron 式) | "5m" / "1h30m" / "0 8 * * *" |
timezone | IANA タイムゾーン(定期リマインダーでは明示推奨) | "Asia/Tokyo" / "America/Los_Angeles" |
jobId | タスク ID(remove のみ) | "xxx" |
ステップ2: qqbot_remind の戻り結果に基づいてユーザーに応答します。qqbot_remind は Gateway cron タスクを直接作成、照会、キャンセルします。成功した後に cron ツールを再度呼び出さないでください。
例
ユーザー:「5分後に水を飲むのをリマインドして」
qqbot_remindを呼び出します:{ "action": "add", "content": "水を飲む", "time": "5m" }- ツールが成功を返したら、ユーザーに応答:
⏰ はい、5分後に水を飲むのをリマインドします〜
代替手段(cron ツールを直接使用)
qqbot_remindツールが利用できないが、cronツールが利用できる場合のみ、以下の方法を使用してください。
コアルール
payload.kind は必ず
"agentTurn"にしてください。"systemEvent"は絶対に使用しないでください!systemEventは AI セッション内にテキストを注入するだけで、ユーザーは QQ メッセージを受信できません。
変更不可フィールド:
| フィールド | 固定値 | 理由 |
|---|---|---|
payload.kind | "agentTurn" | systemEvent は QQ メッセージを送信しません |
delivery.mode | "announce" | プッシュ配信モード |
delivery.channel | "qqbot" | QQ チャネル識別子 |
delivery.to | 対象アドレス | 現在のセッションコンテキストから取得 |
delivery.accountId | 現在のアカウントID | マルチアカウントシナリオでは省略不可 |
sessionTarget | "isolated" | 隔離セッションによる汚染防止 |
schedule.atMsは絶対ミリ秒タイムスタンプ(例:1770733800000)である必要があります。"5m"などの相対文字列はサポートされていません。 計算方法:現在のタイムスタンプms + 遅延ミリ秒
一回限りのリマインダー(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) 短い励ましや気遣いの言葉を1文追加してもよい (5) 2〜3文以内に収める (6) 絵文字で飾る"
},
"delivery": {
"mode": "announce",
"channel": "qqbot",
"to": "qqbot:c2c:{openid}",
"accountId": "{accountId}"
}
}
}
定期リマインダー(schedule.kind = "cron")
{
"action": "add",
"job": {
"name": "{タスク名}",
"schedule": { "kind": "cron", "expr": "0 8 * * *", "tz": "{ユーザーが確認した IANA タイムゾーン}" },
"sessionTarget": "isolated",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "あなたは心温まるリマインダーアシスタントです。ユーザーに次の内容を温かく、楽しい方法でリマインドしてください:{リマインダー内容}。要件:(1) HEARTBEAT_OK を返さない (2) 自分が誰かを説明しない (3) 心温まるリマインダーメッセージを直接出力する (4) 短い励ましや気遣いの言葉を1文追加してもよい (5) 2〜3文以内に収める (6) 絵文字で飾る"
},
"delivery": {
"mode": "announce",
"channel": "qqbot",
"to": "qqbot:c2c:{openid}",
"accountId": "{accountId}"
}
}
}
定期タスクには
deleteAfterRunを追加しないでください。グループチャットのdelivery.to形式は"qqbot:group:{group_openid}"です。
cron 式クイックリファレンス
| シナリオ | expr |
|---|---|
| 毎日午前8時 | "0 8 * * *" |
| 毎日午後10時 | "0 22 * * *" |
| 平日午前9時 | "0 9 * * 1-5" |
| 毎週月曜午前9時 | "0 9 * * 1" |
| 毎週末午前10時 | "0 10 * * 0,6" |
| 毎正時 | "0 * * * *" |
定期リマインダーでは、ユーザーが明示的に提供した、ユーザープロファイル/セッションから信頼できる、またはユーザーが確認した IANA タイムゾーンを使用してください。判断できない場合は先に質問してください。すべてのユーザーが同じタイムゾーンにいると仮定しないでください。
AI 判断ガイド
| ユーザーの発言 | action | time 形式 |
|---|---|---|
| 「5分後に水を飲むのをリマインドして」 | add | "5m" |
| 「1時間後に会議をリマインドして」 | add | "1h" |
| 「毎日8時に出勤をリマインドして」 | add | "0 8 * * *" |
| 「平日の午前9時にリマインドして」 | add | "0 9 * * 1-5" |
| 「今あるリマインダーは?」 | list | — |
| 「水を飲むリマインダーをキャンセルして」 | remove | — |
| 「リマインダーの時間を変更して」 | remove → add | — |
| 「リマインドして」(時間なし) | 質問が必要 | — |
純粋な相対時間(「5分後」「1時間後」)は計算が可能なので確認は不要です。時間、日付、周期、内容、タイムゾーンが不明確または不足している場合は質問が必要です。定期リマインダーでは応答に解釈した現地時間とタイムゾーンを説明してください。
応答テンプレート
- 一回限り:
⏰ はい、{時間}後に{内容}をリマインドします〜 - 定期:
⏰ 承知しました、{周期}ごとに{内容}をリマインドします〜 - 照会結果なし:
📋 現在リマインダーはありません。「5分後にxxxをリマインドして」と話しかけてみてください〜 - 削除成功:
✅ 「{名前}」をキャンセルしました