custom-notification-type-design

Use when designing Custom Notification Types that fire via Flow, Apex, or Process Builder to Lightning bell, desktop, mobile (push), and Slack. Covers channel enablement, targeting, deliverability, consent, and anti-spam discipline. Does NOT cover email templates (see modernize-email-templates) or Salesforce Notifications API general reference.

Best use case

custom-notification-type-design is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Use when designing Custom Notification Types that fire via Flow, Apex, or Process Builder to Lightning bell, desktop, mobile (push), and Slack. Covers channel enablement, targeting, deliverability, consent, and anti-spam discipline. Does NOT cover email templates (see modernize-email-templates) or Salesforce Notifications API general reference.

Teams using custom-notification-type-design should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/custom-notification-type-design/SKILL.md --create-dirs "https://raw.githubusercontent.com/PranavNagrecha/AwesomeSalesforceSkills/main/skills/admin/custom-notification-type-design/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/custom-notification-type-design/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How custom-notification-type-design Compares

Feature / Agentcustom-notification-type-designStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Use when designing Custom Notification Types that fire via Flow, Apex, or Process Builder to Lightning bell, desktop, mobile (push), and Slack. Covers channel enablement, targeting, deliverability, consent, and anti-spam discipline. Does NOT cover email templates (see modernize-email-templates) or Salesforce Notifications API general reference.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Custom Notification Type Design

## Purpose

Salesforce Custom Notification Types (CNTs) push messages to the bell,
desktop, mobile, and now Slack. They are easy to enable and easy to
abuse. Teams ship a new CNT per feature without a global view, which
turns into notification fatigue — users silence the bell, disable mobile
push, and ignore Slack. This skill frames CNT design as a product and
governance problem, not a Setup click-through.

## Recommended Workflow

1. **Justify the notification.** Does the recipient need to act, or is
   email/dashboard sufficient? If not actionable, do not notify.
2. **Pick channels.** Bell (in-app), desktop (browser), mobile push,
   Slack. Each has its own opt-in.
3. **Design targeting.** Role? Queue? Explicit list? Record owner? A
   user who can't act is a user you shouldn't notify.
4. **Set frequency rules.** Per record, per day, per user. Bundle where
   possible.
5. **Design deep-link.** Every notification should open the thing the
   recipient needs to look at.
6. **Plan governance.** Which notifications exist, who owns them, when
   they are reviewed.
7. **Measure.** Bell clicks, mobile open rates, Slack click-through. Low
   engagement = noise = cut.

## Channel Characteristics

| Channel | Good For | Fatigue Risk |
|---|---|---|
| Bell | Persistent cross-page awareness | Low individually, high in aggregate |
| Desktop browser | Immediate attention when tab is away | Medium — intrusive if mis-used |
| Mobile push | Urgent field/oncall work | High — users silence fastest |
| Slack | Team / channel broadcast | Depends heavily on channel culture |

## Targeting Patterns

- **Owner:** simplest; record owner + delegated users.
- **Queue members:** shared responsibility; membership must be current.
- **Dynamic list via Flow:** derive audience at runtime. Great for
  approvals/escalations.
- **Explicit User list:** avoid for anything that scales; stale membership
  is a liability.

## Consent And Preferences

- Users set their own notification preferences; your CNT only fires when
  their preferences allow.
- Bell-only is safest default; opt-in to desktop / mobile / Slack as
  explicit uplift.
- Do NOT bypass user preferences via email workarounds — that is the
  fatigue accelerator.

## Throttling / De-Dup

- One record update can fan out multiple triggers; coalesce. Use a "last
  notified at" field to suppress rapid repeats.
- Daily digests for non-urgent categories.
- Quiet hours where supported.

## Deep-Link Design

- Bell: open the relevant record.
- Desktop/Mobile: same.
- Slack: link to a record or queue with minimal summary — do not dump
  the full record into the message.

## Governance

- Registry custom object `Notification_Type__c` listing every CNT,
  owner, trigger, measurable outcome, review cadence.
- Quarterly review: engagement < 20% → cut or redesign.
- New CNT requires registry entry.

## Anti-Patterns (see references/llm-anti-patterns.md)

- "Every change notifies every user."
- Mobile push for non-urgent stuff.
- Notifications whose deep-link lands on a list view, not the record.
- No ownership of who can add a CNT.

## Official Sources Used

- Custom Notification Types — https://help.salesforce.com/s/articleView?id=sf.custom_notifications_overview.htm
- Notification Builder in Flow — https://help.salesforce.com/s/articleView?id=sf.flow_ref_elements_action_core_custom_notification.htm
- Send Custom Notification in Apex — https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_class_Messaging_CustomNotification.htm
- Notification Delivery Settings — https://help.salesforce.com/s/articleView?id=sf.notif_builder_send.htm

Related Skills

customer-data-request-workflow

8
from PranavNagrecha/AwesomeSalesforceSkills

Implement GDPR/CCPA data subject rights (access, deletion, rectification) using Salesforce Privacy Center and/or custom workflow. NOT for general backup or org-level data retention policy.

omnistudio-custom-lwc-elements

8
from PranavNagrecha/AwesomeSalesforceSkills

Creating and integrating custom Lightning Web Components within OmniScripts: LWC override patterns, pubsub event handling, custom validation, OmniStudio data passing conventions. Use when a standard OmniScript element cannot meet a UX requirement. NOT for standalone LWC development (use lwc/* skills). NOT for Integration Procedures (use integration-procedures). NOT for embedding an OmniScript inside an LWC (use omnistudio-lwc-integration).

omniscript-design-patterns

8
from PranavNagrecha/AwesomeSalesforceSkills

Use when designing or reviewing OmniScripts for guided experiences, step structure, branching, save/resume, and the boundary between OmniScript, Integration Procedures, DataRaptors, and custom LWCs. Triggers: 'omniscript design', 'too many steps in omniscript', 'save and resume omniscript', 'branching in omniscript', 'when should this be an integration procedure'. NOT for deep Integration Procedure or DataRaptor design when the guided interaction layer is not the main concern.

flexcard-design-patterns

8
from PranavNagrecha/AwesomeSalesforceSkills

Use when designing, building, or reviewing OmniStudio FlexCards — including data source selection, card states, actions, conditional visibility, flyout configuration, and child card iteration. Triggers: 'FlexCard', 'card template', 'flyout', 'card action', 'card state', 'data source', 'child card', 'conditional visibility'. NOT for OmniScript design, standalone LWC development, or Apex controller architecture outside the FlexCard context.

calculation-procedure-design

8
from PranavNagrecha/AwesomeSalesforceSkills

Design OmniStudio Calculation Procedures and Calculation Matrices for pricing, rating, and rules-heavy scoring. Trigger keywords: calculation procedure, calculation matrix, rating engine, pricing matrix, expression set, decision matrix, OmniStudio rules. Does NOT cover: generic Apex-only pricing code, Salesforce CPQ price rules (different product), or Flow-based decision logic.

lwc-toast-and-notifications

8
from PranavNagrecha/AwesomeSalesforceSkills

Use when implementing or reviewing user feedback patterns in Lightning Web Components — specifically toast messages, lightning-alert, lightning-confirm, lightning-prompt, and platform notifications. Trigger keywords: 'ShowToastEvent', 'toast in lwc', 'lightning-alert lwc', 'lightning-confirm promise', 'Experience Cloud notification'. NOT for modal overlays (use lwc-modal-and-overlay).

lwc-custom-lookup

8
from PranavNagrecha/AwesomeSalesforceSkills

Custom lookup component in LWC — typeahead/autocomplete that searches records via Apex SOSL/SOQL, shows pills, supports keyboard navigation, and manages open/close state. Use when lightning-input-field or lightning-record-picker won't work (cross-org search, computed filters, custom result rendering). NOT for in-form lookups inside lightning-record-edit-form (use lightning-input-field) or lookup filters (use admin lookup filter config).

lwc-custom-event-patterns

8
from PranavNagrecha/AwesomeSalesforceSkills

When and how to design CustomEvent traffic out of an LWC — bubbles / composed / cancelable flag choices, detail payload shape, naming rules, and propagation control. Trigger keywords: 'event not reaching parent', 'composed shadow DOM', 'CustomEvent detail mutation', 'stopPropagation vs stopImmediatePropagation'. NOT for parent-to-child communication (use `@api` — see `lwc/component-communication`), NOT for sibling fan-out (use Lightning Message Service — see `lwc/lightning-message-service`), NOT for wire-service data plumbing.

lwc-custom-datatable-types

8
from PranavNagrecha/AwesomeSalesforceSkills

Use when you need to extend `lightning-datatable` with custom cell renderings: status pills, progress bars, image thumbnails, action cells, editable pickliststo, rich-text, or any column that `lightning-datatable` does not ship out of the box. Triggers: 'custom cell type lightning datatable', 'progress bar column', 'image column', 'inline edit picklist in datatable', 'rich text column'. NOT for basic datatable usage (see `lwc-data-table`) and NOT for tree-grid or large-dataset virtualization (see `virtualized-lists`).

experience-cloud-search-customization

8
from PranavNagrecha/AwesomeSalesforceSkills

Use this skill when configuring or extending search on an Experience Cloud site — covering Search Manager scope configuration, LWR vs Aura search component selection, federated search setup, guest user search access, and custom search result components. NOT for SOSL/SOQL query development. NOT for internal Salesforce global search or Einstein Search for agents.

custom-property-editor-for-flow

8
from PranavNagrecha/AwesomeSalesforceSkills

Use when building or reviewing an LWC Custom Property Editor for Flow screen or action configuration, including the `configurationEditor` metadata hook, builder-side APIs, validation, and value-change events. Triggers: 'custom property editor', 'Flow configuration editor', 'builderContext', 'inputVariables', 'configurationEditor'. NOT for ordinary runtime screen-component behavior when no Flow Builder design-time customization is involved.

api-error-handling-design

8
from PranavNagrecha/AwesomeSalesforceSkills

Designing HTTP error classification, RFC 7807-style error payload structure, and client-side error parsing for Salesforce REST/SOAP integrations and custom Apex REST endpoints. Use when deciding which HTTP status codes to return from custom Apex REST services, how to structure error response bodies, how to classify inbound API errors as retry-safe vs non-retry-safe, or how to parse Salesforce error responses on the consumer side. NOT for retry execution mechanics or circuit breaker implementation (use retry-and-backoff-patterns). NOT for Apex exception class design (use apex-error-handling-framework). NOT for OAuth error flows (use oauth-flows-and-connected-apps).