app-nudge-sender
目的
この slot で誰にどの nudge を送るかを決め、結果を workspace/nudges/decisions_YYYY-MM-DD.json に書き、そのリストを Railway API に渡してアプリ nudge を配信する。
保存先(Anicca 内・フルパス)
| 種類 | フルパス |
|---|---|
| 判断結果 | /home/anicca/.openclaw/workspace/nudges/decisions_YYYY-MM-DD.json |
VPS 相対: ~/.openclaw/workspace/nudges/decisions_YYYY-MM-DD.json。ユーザー一覧は Railway API から取得。送信は Railway API が行う。
命令(プロンプトに渡す文言)
「あなたが、Railway から取得したユーザー一覧とこの slot(morning / afternoon / evening)を見て、この slot で誰にどの nudge を送るかを 1 件ずつ決めよ。結果を workspace/nudges/decisions_YYYY-MM-DD.json に書け。書いたら、そのファイルの内容を Railway の API に渡して配信を依頼せよ。」
必須 env
| キー | 説明 |
|---|---|
API_BASE_URL |
Anicca API ベースURL |
INTERNAL_AUTH_SECRET |
admin jobs 認証 |
NUDGE_ALPHA_USER_ID |
alpha ルーティング用(オプション) |
必須 tools
web_fetch(API 呼び出し)
入力
- 通常: body なし。slot は cron のエントリで区別(morning/afternoon/evening)。
proactive-app-nudge互換:{ slot: "morning"|"afternoon"|"evening" }で上書き可能。
実行手順
- Railway API からユーザー一覧を取得する。
- 上記「命令」に従い、誰に何を送るかを決め、
workspace/nudges/decisions_YYYY-MM-DD.jsonに書く。 POST {API_BASE_URL}/api/admin/jobs/app-nudge-senderにその結果を渡す(または API がファイルを読む方式に合わせる)。API が/api/mobile/nudge/pendingに enqueue。- iOS が pull -> ack で閉ループ。
出力 / 監査ログ
{ success: true, result }- runs/監査に slot と送信数を含める。
- 判断結果は必ず
nudges/decisions_YYYY-MM-DD.jsonに残す。
Slack 報告
【絶対】 実行結果・要約は Slack #metrics(チャンネル ID: C091G3PKHL2)に投稿する。成功でも失敗でも必ず投稿する。投稿しないことは許されない。
失敗時処理
- 5xx: 次回 cron で再実行。
- ユーザー未登録等: スキップして次へ。
禁止事項
- センサー依存にしない。固定スロット + server-driven のみ。
Cron
app-nudge-morning:0 9 * * *app-nudge-afternoon:0 14 * * *app-nudge-evening:0 20 * * *