Core · プラグインを使う · 通知

通知

機能

@nocobase/app-plugin-notification は、メッセージを検証、保存してキューに入れ、冪等性と上限のある再試行を扱い、配信の結果を記録します。配信の実装は、通知チャネル、アプリ内通知、Web プッシュ が提供します。

ランタイムが配信を取りまとめ、受信者、業務のきっかけ、送信の手段は、アプリとチャネルのプラグインが提供します。

シナリオと例

例:2 つのチャネルで通知する

注文の操作が成功したら、受信トレイとメールのメッセージを用意します。受信トレイの受信者はユーザー ID で、メールの受信者はメールアドレスで、業務コードが解決します。idempotencyKey には、固定の業務上のイベントの識別子を使います。

受信者ごとに配信は独立しています。1 つが失敗しても、すべてが失敗したわけではなく、再試行では元のチャネルとプロバイダーが保たれます。プロバイダーが受け付けたことは、受信や閲覧の証明ではありません。

開発用のプロンプト(アプリのディレクトリで作業するコーディングエージェント向け):

プレーンテキスト
Notifications を使って、注文の承認が成功したあとに受信トレイとメールのメッセージを送ってください。
完全なメッセージで、設定済みの名前付きのチャネルを使い、ユーザー ID とメールアドレスは別々に
解決してください。業務上のイベントの冪等性キーを使い、受信者ごとの結果を保持し、保護された
ログを組み込んでください。重複したイベント、部分的な失敗、ログへのアクセスの拒否をテストしてください。
キューに受け付けられたことを受信として表示しないでください。

完了の条件配信がイベントまで追跡でき、失敗がチャネルと受信者ごとに特定され、重複した送信で意図しない通知の繰り返しが起きないこと。

主な仕組みと実装

以下は、この例での組み込みの領域と、想定される画面の変化です。開発作業を記述したもので、実際のファイル構成はアプリに合わせてください。

組み込みの領域コードまたは設定の変更画面と動作の変化
サーバーのチャネルと Jobs配信の種類とエグゼキューターを登録する設定したチャネルの作業をキューに入れる
注文の業務サービス業務の成功後に、イベントと受信者の識別子とともに送信する通知をイベントまでさかのぼれる
ログの画面と認可配信の記録と、区別された状態を読み取る管理者が受信者ごとの失敗を調べられる

組み込み

Server プラグインと必要なチャネルのプラグインを登録し、マイグレーションとシードを適用して、ホストの Jobs のエグゼキューターが動いていることを確認します。Client プラグインはログの組み込みを提供しますが、ページを自動では登録しません。

notification.channels の各エントリーには名前と type があります。たとえば system-email は smtp のチャネルの名前にできます。既定のテンプレートは、server/config/notification.ts の defineMailChannelsConfig でこれを組み立てています。

メッセージを送る

信頼できる業務コードで、/server から notificationServiceToken を解決します。アプリ内のプラグインを登録し、inbox: { type: 'in-app' } を設定した場合:

TypeScript
await notification.send({
  idempotencyKey: 'order:123:approved',
  source: { type: 'order', referenceId: '123' },
  messages: {
    inbox: {
      to: 'user-123',
      title: 'Order approved',
      body: 'The order is ready for processing.',
      target: { type: 'route', path: '/orders/123' },
    },
  },
});

ここでの notification は解決されたサービスです。実際の業務の ID を使ってください。messages の各キーは設定済みのチャネルの名前で、それぞれに完全なメッセージを持ちます。汎用のメッセージの自動変換はありません。

AI 開発の制約と検証

プラグイン固有の開発の制約

  • 業務の成功と配信は別々に扱ってください。再試行で新しい冪等性キーを生成するのではなく、イベントの識別子を固定に保ってください。
  • 各チャネルのペイロードを検証してください。ユーザー ID はメールアドレスではありません。
  • 部分的な失敗とログへのアクセスをテストしてください。一時的な認証情報の配信には、永続的な再試行や冪等性の保証はありません。

ログと機密のメッセージ

/api/notifications/logs には page:notification.logs/access が必要です。保護されたログのページを作り、送信が返した通知の識別子を調べます。保護のない汎用の送信のエンドポイントを公開しないでください。

一度きりの認証情報には sendTransient({ channel, message }) を使います。通知のスナップショット、Jobs、永続的な冪等性、再試行なしに、配信を一度だけ試みます。タイムアウトは、送信の結果が不明であることを意味する場合があり、復旧は業務の流れが担います。

受信者ごとの結果、重複したイベント、チャネルの失敗、ログへのアクセスを検証します。関連:通知チャネル、アプリ内通知、Web プッシュ。

これらはあなたの組み込みの検収の要件であり、実機での検証が完了したことを示すものではありません。実際の変更、実行したチェック、未検証の項目をエージェントに報告させてください。プロジェクトのガイダンス、スキル、共通のチェックについては アプリの開発を続ける と テスト を参照してください。

出典:公開のプラグインの入口と実装。

NocoBase ドキュメントアシスタント

NocoBase について何を知りたいですか?

質問は個別に回答され、過去の質問や回答は参照されません。必要な背景をすべて含めてください。