CtrlK
BlogDocsLog inGet started
Tessl Logo

add-channel-whats-next-onboarding

Add a new chat channel's layer-2 dashboard onboarding — the connected-state "What's next" / "FOR YOUR USERS" developer-rollout guide plus its connected details page — in apps/dashboard, following the existing Slack, MS Teams, and Telegram pattern. Use when a connected agent integration needs a per-provider "what's next" guide (recap + dev steps with @novu/react ConnectButton snippet), a <Channel>AgentConnectedDetails view, and the resolver/registry wiring under components/agents/agent-integration-guides.

72

Quality

88%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Add a Channel's "What's Next" (Layer-2) Onboarding

Layer 2 = what a developer sees after their channel integration is connected: the "What's next" / "FOR YOUR USERS" guide that helps them roll the agent out to their own end users (install @novu/react, drop in the <Channel>ConnectButton), plus the connected channel details page. Layer 1 (connecting the channel itself) is the separate <channel>-setup-guide.tsx — out of scope here.

All files live in apps/dashboard/src/components/agents/agent-integration-guides/.

Architecture

ResolveAgentIntegrationGuide            (switch on providerId — the registry)
        │
        ▼
AgentIntegrationGuideTransition         (setup ↔ connected; in-session "Continue" step)
        │
        ├─ setup view (LAYER 1) ──────  <Channel>SetupGuide   (prerequisite, separate skill)
        │
        └─ connected view (LAYER 2) ──  <Channel>AgentConnectedDetails
                                              │
                                              ▼
                                        AgentConnectedDetailsShell      (shared chrome + flag gate)
                                              ├─ AgentChannelWhatsNextGuide   (renders the config)
                                              │       └─ resolveChannelWhatsNextConfig → build<Channel>WhatsNextConfig
                                              └─ provider credential sections (children render-prop)

The guide is data-driven: each provider contributes a build<Channel>WhatsNextConfig(ctx) that returns { recapSteps, devSteps }. The shell and renderer never change.

Step 0 — Prerequisites

Before adding layer 2, confirm:

  • The channel has a ChatProviderIdEnum entry in @novu/shared (adding a brand-new provider id is packages/providers territory — ask first).
  • A layer-1 <channel>-setup-guide.tsx exists (the connect-the-channel flow).
  • A <Channel>ConnectButton exists in @novu/react (see the add-channel-connect-button skill) — the dev step embeds its snippet.

File checklist

Copy the nearest sibling: Telegram = simplest (endpoint/deep-link), Slack = workspace + a distribution link, MS Teams = org distribution component + own feature flag. Full templates: see reference.md.

Create

  • whats-next/<channel>-whats-next-config.tsxbuild<Channel>WhatsNextConfig(ctx): ChannelWhatsNextConfig
  • <channel>-agent-connected-details.tsx<Channel>AgentConnectedDetails via AgentConnectedDetailsShell

Edit

  • whats-next/whats-next-config.ts — register the builder in WHATS_NEXT_CONFIG_BUILDERS[ChatProviderIdEnum.<Channel>]
  • resolve-agent-integration-guide.tsx — add a case to both switches: the setup switch (render <Channel>SetupGuide, set setupDisplayName) and renderConnectedView (render <Channel>AgentConnectedDetails)
  • agent-provider-display-name.ts — add the display-name case

Optional

  • Add IS_AGENT_<CHANNEL>_WHATS_NEXT_ENABLED only if this channel needs to ship independently of the umbrella flag (see Feature flags below).

The config contract

build<Channel>WhatsNextConfig(ctx: WhatsNextConfigContext): ChannelWhatsNextConfig

  • ctx{ agent, integrationLink, credentials?, applicationIdentifier? }.
  • Returns { recapSteps: WhatsNextStep[]; devSteps: WhatsNextStep[] }.
  • recapSteps mirror the completed layer-1 setup steps (title + description only); the renderer collapses them behind "Show all N instructions".
  • devSteps are the new rollout steps. Convention: first dev step carries sectionLabel: 'FOR YOUR USERS' (or 'DISTRIBUTE YOUR BOT' for org-level distribution), then install @novu/react (with a PrebuiltPromptBanner in headerSlot), then add the <Channel>ConnectButton snippet (CodeBlock).

WhatsNextStep fields: title, description, sectionLabel?, headerSlot?, rightContent?, extraContent?, fullWidthContent?, status? ('completed' | 'current' | 'upcoming').

The renderer flips each dev step to completed once a real end-user connection exists (useChannelFirstConnectedEndpoint) and shows the "Your users are connecting" footer.

Feature flags

  • Default: the guide rides the umbrella IS_AGENT_WHATS_NEXT_ENABLED flag — no flag work needed.
  • Independent rollout (like MS Teams): add IS_AGENT_<CHANNEL>_WHATS_NEXT_ENABLED, then gate it in two places — AgentConnectedDetailsShell.showWhatsNext and ResolveAgentIntegrationGuide.hasUserRolloutPhase. providerHasWhatsNextPhase(providerId) already returns true once the builder is registered.

Conventions & gotchas

  • The config file is the only place with provider-specific copy/snippets. Keep the shell, transition, and renderer untouched.
  • Escape JSX attribute values in the connect snippet (each sibling has an escape helper) and source applicationIdentifier from the environment with a <YOUR_NOVU_APPLICATION_IDENTIFIER> fallback; integrationIdentifier comes from integrationLink.integration.identifier.
  • PrebuiltPromptBanner source must be unique: agent-channel-whats-next-<channel>.
  • Connected details: pull credentials from the shell's children render-prop { credentials, integrationName, isLoading }; surface only safe fields with ReadOnlyField (mark secrets secret, never expose internal webhook secrets).
  • Don't confuse this with agent-whats-next-section.tsx (the Overview-tab summary card) — that's a separate, simpler surface.
  • Dashboard conventions: TanStack Query for server state, Radix/shadcn + Tailwind (no inline style except dynamic values), React Router. Novu conventions: type (not interface) on the frontend, named exports, blank line before every return, no nested ternaries.

Build & verify

  1. Do not build/start the dashboard — it runs on port 4201. Check types via Cursor diagnostics.
  2. Open a connected <Channel> integration's detail page; confirm the recap collapses, the dev steps render with a working prompt banner + copyable snippet, and the "Your users are connecting" footer appears once a real user connects.
  3. If you added a per-provider flag, verify the guide hides when it's off.
Repository
novuhq/novu
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.