機能
@nocobase/app-plugin-notification-in-app は、in-app チャネルと、ユーザーが所有する受信トレイを提供します。未読の件数、既読・未読の操作、すべて既読にする操作、削除に対応しています。
プラグインは受信トレイの保存と配信を提供し、ナビゲーションとページはアプリが組み立てます。
シナリオと例
例:ヘッダーの受信トレイ
アプリの QueryClientProvider の中で、useInboxUnreadCount()、useInboxItems()、useInboxActions()、useInboxRefresh() を使います。失敗した変更を処理してください。リアルタイムのイベント、再接続、ウィンドウのフォーカスで更新が起き、正式なのは HTTP です。
{ type: 'route', path: '/orders/123' } のような移動先では、デプロイの接頭辞を省き、Router がそれを付けます。外部のリンクには { type: 'url', url: 'https://example.com/...' } を使います。
開発用のプロンプト(アプリのディレクトリで作業するコーディングエージェント向け):
In-app Notifications を使って、ヘッダーの未読の件数と受信トレイを追加してください。
ページネーション、既読の操作、リアルタイムの更新、エラーには公開のコンポーネントかフックを
再利用してください。注文のメッセージは実際のユーザー ID 宛てにし、アプリからの相対の
ルートを移動先に使ってください。2 人のユーザーの分離、未読の変化、再接続後の更新、
サインアウト後の拒否をテストしてください。完了の条件受信者だけがメッセージを見られ、既読にすると件数が更新され、開き直しても保たれること。
主な仕組みと実装
以下は、この例での組み込みの領域と、想定される画面の変化です。開発作業を記述したもので、実際のファイル構成はアプリに合わせてください。
| 組み込みの領域 | コードまたは設定の変更 | 画面と動作の変化 |
|---|---|---|
| 通知チャネルの設定 | アプリ内の受信トレイのチャネルを設定する | 業務の通知が受信トレイの保存先に届く |
| ヘッダーと受信トレイのページ | 既存のクエリーのコンテキストの下で、コンポーネントやフックを組み込む | 未読の件数、メッセージ、既読の操作を表示する |
| 業務のメッセージとリンク | 受信者と、アプリからの相対の移動先を設定する | メッセージをクリックすると意図したページに移る |
組み込み
通知の配信には、その Server プラグインを Notifications のあとに登録し、マイグレーションを適用して、次を設定します。
notification:
channels:
inbox:
type: in-appClient プラグインはロケールを読み込むだけで、受信トレイのページは登録しません。/client の NotificationInAppProvider と NotificationInAppInbox を組み立てるか、/client/inbox のフックで独自の画面を作ります。
送信と読み取り
通知 を通じて messages.inbox を送り、to、title、body を指定します。受信者は、実際のユーザー ID または ID の空でない配列で、メールアドレスや推測した現在のユーザーではありません。
| 操作 | エンドポイント |
|---|---|
| 一覧 | GET /api/notificationInApp/messages |
| 未読の件数 | GET /api/notificationInApp/messages/unreadCount |
| すべて既読にする | POST /api/notificationInApp/messages/markAllRead |
| 1 件を既読・未読にする | POST /api/notificationInApp/messages/:id/markRead または /markUnread |
| 1 件を削除する | DELETE /api/notificationInApp/messages/:id |
すべてのリクエストは、サインインしたユーザーの身元を使います。ほかのユーザーのメッセージは、存在しないものとして報告されます。pageToken をたどり、必要に応じて unreadOnly=true で絞り込みます。
AI 開発の制約と検証
プラグイン固有の開発の制約
- 受信トレイの API には認証済みの身元を使い、任意のユーザーを照会できる保護のない API を追加しないでください。
- リアルタイムのイベントは更新のシグナルとして扱い、正式なのは HTTP です。失敗したあとに誤った既読の状態を残さないでください。
- ページネーション、繰り返しの更新、ユーザーをまたぐアクセス、サインアウトをテストしてください。内部のルートに /main を二重に付けないでください。
境界
受信トレイの保存と API は通知の Server プラグインなしでも動作しますが、その場合は配信のチャネルが登録されません。アプリ内のメッセージは、オペレーティングシステムの通知ではありません。それには Web プッシュ を使います。
ユーザーの分離、未読の件数、ページネーション、サインアウト後のアクセスを検証します。受信者ごとに配信と再試行の結果は別々で、存在しないユーザーは受信者の検証で失敗します。
これらはあなたの組み込みの検収の要件であり、実機での検証が完了したことを示すものではありません。実際の変更、実行したチェック、未検証の項目をエージェントに報告させてください。プロジェクトのガイダンス、スキル、共通のチェックについては アプリの開発を続ける と テスト を参照してください。
出典:公開のプラグインの入口と実装。