novu
You are an expert in Novu, the open-source notification infrastructure platform. You help developers build multi-channel notification systems supporting email, SMS, push, in-app, and chat (Slack/Discord) — with workflow orchestration, digest/batching, user preferences, template management, and a pre-built notification center component for React.
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o novu.zip https://jpskill.com/download/15181.zip && unzip -o novu.zip && rm novu.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/15181.zip -OutFile "$d\novu.zip"; Expand-Archive "$d\novu.zip" -DestinationPath $d -Force; ri "$d\novu.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
novu.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
novuフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Claude が読む原文 SKILL.md(中身を展開)
この本文は AI(Claude)が読むための原文(英語または中国語)です。日本語訳は順次追加中。
Novu — Open-Source Notification Infrastructure
You are an expert in Novu, the open-source notification infrastructure platform. You help developers build multi-channel notification systems supporting email, SMS, push, in-app, and chat (Slack/Discord) — with workflow orchestration, digest/batching, user preferences, template management, and a pre-built notification center component for React.
Core Capabilities
Workflow Definition
// novu/workflows/order-updates.ts
import { workflow, CronExpression } from "@novu/framework";
import { z } from "zod";
import { renderOrderEmail } from "../emails/order-status";
export const orderStatusWorkflow = workflow(
"order-status-update",
async ({ step, payload }) => {
// Step 1: In-app notification (always)
await step.inApp("in-app-notification", async () => ({
subject: `Order ${payload.orderId} — ${payload.status}`,
body: `Your order is now ${payload.status.toLowerCase()}`,
avatar: "https://app.example.com/icons/order.png",
redirect: { url: `/orders/${payload.orderId}` },
}));
// Step 2: Email (respects user preferences)
await step.email("email-notification", async () => ({
subject: `Order Update: ${payload.status}`,
body: renderOrderEmail({
orderId: payload.orderId,
status: payload.status,
trackingUrl: payload.trackingUrl,
}),
}));
// Step 3: SMS for shipped orders only
if (payload.status === "shipped") {
await step.sms("sms-shipped", async () => ({
body: `Your order ${payload.orderId} has shipped! Track: ${payload.trackingUrl}`,
}));
}
// Step 4: Delay + follow-up
await step.delay("wait-for-delivery", () => ({
amount: 3, unit: "days",
}));
await step.email("feedback-request", async () => ({
subject: "How was your order?",
body: renderFeedbackEmail({ orderId: payload.orderId }),
}));
},
{
payloadSchema: z.object({
orderId: z.string(),
status: z.enum(["confirmed", "shipped", "delivered"]),
trackingUrl: z.string().url().optional(),
}),
},
);
// Digest workflow — batch notifications
export const activityDigest = workflow(
"activity-digest",
async ({ step }) => {
// Collect events over 30 minutes
const digestedEvents = await step.digest("batch-activity", () => ({
amount: 30, unit: "minutes",
}));
await step.email("digest-email", async () => ({
subject: `${digestedEvents.events.length} new activities`,
body: renderDigestEmail({ events: digestedEvents.events }),
}));
},
);
Triggering Notifications
import { Novu } from "@novu/node";
const novu = new Novu(process.env.NOVU_API_KEY);
// Trigger notification
await novu.trigger("order-status-update", {
to: { subscriberId: "user-42", email: "alice@example.com", phone: "+1234567890" },
payload: {
orderId: "ORD-123",
status: "shipped",
trackingUrl: "https://track.example.com/abc",
},
});
// Trigger to multiple subscribers
await novu.trigger("weekly-digest", {
to: [
{ subscriberId: "user-1" },
{ subscriberId: "user-2" },
{ subscriberId: "user-3" },
],
payload: { weekNumber: 11 },
});
// Bulk trigger
await novu.bulkTrigger([
{ name: "order-status-update", to: { subscriberId: "user-1" }, payload: { orderId: "1", status: "shipped" } },
{ name: "order-status-update", to: { subscriberId: "user-2" }, payload: { orderId: "2", status: "delivered" } },
]);
Installation
npm install @novu/node # Server SDK
npm install @novu/framework # Workflow definitions
npx novu@latest dev # Local dev studio
Best Practices
- Multi-channel workflows — Define email + SMS + push + in-app in one workflow; Novu routes per user preference
- Digest for batching — Use
step.digest()to batch frequent events into a single notification - Delay for follow-ups — Use
step.delay()for drip sequences, feedback requests, reminders - User preferences — Novu UI lets users control which channels they receive; respect opt-outs automatically
- Subscriber management — Create subscribers with
subscriberId; attach email, phone, push tokens - React notification center — Use
@novu/notification-center-reactfor a drop-in in-app notification bell - Template management — Use Novu dashboard for non-technical team members to edit notification copy
- Self-hosted option — Deploy Novu on your infra with Docker; full control over notification data