mcpField
N
novu-design-workflow

novu-design-workflow

github.com/novuhq開発4462 回インストール19 週間前に更新
リポジトリ

novu-design-workflow について

novu-design-workflow は、Dashboard またはコードで Novu の通知ワークフローを設計するためのスキルです。チャネル選択、重大度、重要通知、ダイジェスト、条件付きルーティングのルールと例を示します。

主な機能

  1. 01チャネル選択とフォールバックの指針
  2. 02重大度と重要通知の区別
  3. 03ダイジェストの既定値と除外条件
  4. 04サブスクライバーの状態に応じたルーティング
  5. 05一般的な通知ワークフローのテンプレート

活用シーン

  1. 01注文確認ワークフローを設計する
  2. 02決済失敗通知のチャネルを選ぶ
  3. 03オフライン時のフォールバックを追加する
  4. 04ダイジェスト化や重要通知の要否を決める

MCP 対応

Novu MCP や Dashboard、コードで作成するワークフローの設計に利用できます。MCP のツールやリソースについては説明していません。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/novuhq/skills --skill novu-design-workflow

インストール後、Claude Code で/novu-design-workflowを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
channel-selection.md
digest-defaults.md
severity-and-critical.md
step-conditions.md
workflow-templates.md

詳細

ワークフローの設計

Novu ワークフローの設計ルールです。ダッシュボード(ノーコード)で作成する場合も、@novu/framework を使ってコードで作成する場合も同じです。ここで決める内容(チャネル、重要度、クリティカル、ダイジェスト、条件)はどちらの方法でも共通で、異なるのは構文だけです。

コードで作成しますか?このスキルと framework-integration/ を併用して、workflow(...)、step.*、controlSchema、Bridge Endpoint の設定を行ってください。 ダッシュボードまたは Novu MCP で作成しますか?ここで設計した後、dashboard-workflows/ を使ってステップの内容(件名、本文、editorType、ヘッダー、条件)を設定してください。

このスキルを使う場面

ワークフローの設計を決める必要があるときに使用してください。

  • 「注文確認ワークフローを設計して」
  • 「支払いに失敗したとき、どのチャネルで送信すればよいですか?」
  • 「この通知をクリティカルにして」
  • 「ダイジェストにまとめるべきですか?」
  • 「オフラインのサブスクライバー向けにフォールバックを追加して」
  • 「X に適したテンプレートは何ですか?」

以下の場合には使用しないでください。既存のワークフローをトリガーする場合(trigger-notification/)、コードラッパーを作成する場合(framework-integration/)、UI で重要度を表示する場合([inbox-integration/](../inbox-integration)。

重要度とクリティカル

独立した 2 つの設定です。ほとんどのワークフローではどちらも設定しません。

設定値デフォルト効果
severityLOW / MEDIUM / HIGH未設定Inbox で視覚的に優先順位を付けます(色、発光)。ダイジェストのスキップルールにも影響します。
criticaltrue / falsefalseサブスクライバーの設定を無視し、ダイジェストをスキップし、遅延なしで利用可能なすべてのチャネルに配信します。

目安:

  • ほとんどのワークフローでは severity を未設定のままにします。視覚的な優先順位付けが必要な場合にのみ設定してください。
  • HIGH = 「今日中に対応する」(支払い失敗、翌日に期限切れとなるトライアル)。
  • critical: true = 「設定に関係なく配信する」(アカウントの停止、セキュリティアラート、パスワードリセット)。
  • critical: true ⇒ ダイジェストは自動的にスキップされ、チャネルに即時配信されます。

動作の一覧と readOnly と critical の違いについては、references/severity-and-critical.md を参照してください。

チャネルの選択

ユーザーがチャネルを指定した場合

指定されたチャネルのみを使用してください。フォールバックも追加のチャネルも追加しないでください。要求されたチャネルが組織で設定されていなくても、ユーザーが明示的に指定しているため追加してください。

「注文の発送時にプッシュ通知を送信して」→ push ステップを 1 つだけ設定します。それ以外は追加しません。

ユーザーがチャネルを指定していない場合

組織で設定されているチャネルから、次の優先順位で最大3つ選びます。

In-App  >  Email  >  Chat  >  Push  >  SMS
チャネル用途使用しない場合
In-App製品内コンテンツのデフォルトです。ユーザーが製品内にいる場合は、必ず含めます。受信者が表示できない場合(パスワードリセット、OTP、登録前)
Email領収書、ドキュメント、非同期コミュニケーションに使用します。In-App の次のデフォルトのフォールバックです。製品内での純粋な会話形式の通知
Chat設定されており、かつ severity >= MEDIUM の場合に使用します。運用および社内フローには Slack/Teams を使用します。マーケティングや重要度の低い通知
Push購読者がオフラインで、すぐに通知する必要がある場合のフォールバックです。購読者がオンラインの場合(代わりに In-App を使用)
SMS最終手段です。他のチャネルが使えない場合にのみ使用します(真の緊急事態、OTP、規制関連)。Email または Push で対応できる内容

完全な判断ツリーについては、references/channel-selection.md を参照してください。

ダイジェストのデフォルト設定

ダイジェストステップを追加する場合は、次の設定をデフォルトとして使用します。

  • type: "regular"
  • 遡る期間:5 minutes
  • ダイジェスト時間:1 hour
  • キー:subscriberId(会話形式のフローでは +threadId も追加)

次の場合はダイジェストをスキップします。

  • severity: HIGH、または
  • critical: true

ダイジェストキーの構成や会話形式の例については、references/digest-defaults.md を参照してください。

ユーザー状態のロジック

購読者がオンラインかどうかに応じて、ルーティングを調整します。

状態動作
オンラインIn-App をすぐに送信します。Push はスキップします。重要度に応じて Email/Chat を遅らせます。
オフライン注意を引くために Push または Chat を使用します。

デフォルトの遅延時間:

  • B2B アプリ → 次の勤務時間
  • B2C アプリ → 約 30 分

「購読者がオフライン」の条件はどちらのサーフェスでも同じです。詳細については、references/step-conditions.md を参照してください。

ワークフローテンプレート

ユースケースに合うテンプレートを選び、その構成に従ってください。各テンプレートでは、重要度、critical、アクション可能かどうか、インタラクションの種類に加え、ステップの順序を指定しています。

#ユースケース重要度Critical備考
1注文確認nonefalseダイジェスト配信、アプリ内通知 + メール + プッシュ(オフライン時のみ)
2自分の投稿へのコメントnonefalsesubscriberId + threadId でダイジェスト化
3決済失敗HIGHfalseアプリ内通知 + チャット + メール + プッシュ(オフライン時)
4アカウント停止HIGHtrueすべてのチャネル、設定を無視、ダイジェストなし
5パスワードを忘れた場合nonetrueメール + SMS のみ、アプリ内通知なし
6トライアル終了まであと1日HIGHfalseアプリ内通知 + チャット + メール + プッシュ(オフライン時)
7チャネルの明示的なリクエストn/an/aユーザーが指定したチャネルのみを使用
8Webhook / 外部 API 呼び出しvariesvariesチャネルのステップの後に step.http を追加
9データを取得してから通知variesvaries最初に step.http を配置し、responseBodySchema を宣言

ASCII 形式のフロー全体と、テンプレートごとのメタデータは references/workflow-templates.md を参照してください。

ステップ条件

条件によって、ステップを実行するかどうかを決定します。「サブスクライバーがオフラインの場合のみ送信する」「アプリ内通知が確認されなかった場合のみメールを送信する」などのフォールバックに使用してください。

  • ダッシュボードの作成者は JSON-Logic を記述します:{ "==": [{ "var": "subscriber.isOnline" }, "false"] }
  • フレームワークの作成者は、ステップに skip: () => boolean コールバックを渡します。

セマンティクスは同じです。正規のスニペットと各スコープで利用可能な変数については、references/step-conditions.md を参照してください。

よくある落とし穴

  1. 重要度をデフォルトで設定しないでください — 視覚的な優先順位付けが本当に必要な場合を除き、未設定のままにしてください。
  2. critical: true と readOnly: true は同じではありません — readOnly は設定 UI でワークフローを非表示にするだけですが、critical は実行時に設定とダイジェストを無視します。references/severity-and-critical.md を参照してください。
  3. ユーザーがチャネルを指定した場合、フォールバックを追加しないでください — 明示的なチャネル指定はそのとおりに扱います。
  4. ユーザーがチャネルを指定していない場合、チャネル数は最大3つにしてください。 チャネルを増やすと、リーチが広がるのではなく、煩わしさが増します。
  5. ダイジェストと critical: true を組み合わせないでください — critical なワークフローは即時に配信する必要があります。ダイジェストのステップは自動的にスキップされます。
  6. 会話形式のフローではダイジェストキーが重要です — +threadId がないと、投稿 A と投稿 B へのコメントが同じダイジェストにまとめられます。
  7. プッシュ通知はオフライン時のみ送信してください — オンラインのユーザーにプッシュ通知を送ると、アプリ内通知と重複します。
  8. HTTP ステップには responseBodySchema が必要です — これがないと、後続のステップで {{ steps.<id>.<prop> }} を使ってレスポンスのプロパティを読み取れません。

参考資料

関連項目

  • dashboard-workflows/ — ダッシュボードまたは Novu MCP ワークフローのステップコンテンツ(subject、body、editorType、ヘッダー、条件)を作成します
  • framework-integration/ — これらの設計をコード(workflow()、step.*、controlSchema、Bridge)に実装します
  • manage-preferences/ — critical がサブスクライバーレベルの設定とどのように連動するかを説明します
  • inbox-integration/ — Inbox で重要度がどのように視覚的に表示されるかを説明します
  • trigger-notification/ — 設計したワークフローを実行する方法を説明します

コメント