cometchat-angular-features
SkillCommunicationFeature catalog for CometChat Angular UI Kit v5 (@cometchat/chat-uikit-angular@5) — how to enable/configure calls, reactions, mentions, AI (smart replies / conversation starter / summary), polls, stickers, collaborative doc/whiteboard, message translation, link preview. Five-bucket taxonomy: auto-enabled / component-prop / dashboard-extension / AI-with-OpenAI-key / package-install (calls). Verified @Input names against the v5 .d.ts.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the cometchat-angular-features skill
What this skill tells your AI
The instructions your AI receives, as published by cometchat/cometchat-skills in skills/cometchat-angular-features/SKILL.md and read by ahel’s review.
Purpose
Teaches Claude how to add features on top of a working CometChat Angular UI Kit v5 (@cometchat/chat-uikit-angular@5) integration. Each feature falls into exactly one of five categories; this skill gives the correct recipe for each and — critically — names the precise component @Input you flip, every one of which is verified against the v5 component catalog / .d.ts.
Read cometchat-angular-core + cometchat-angular-components first — a base v5 integration (standalone components, UIKitSettingsBuilder init, login(uid) bare string, CSS-variable theming) must already exist before features layer on. For the full voice/video call flow, read cometchat-angular-calls.
Ground truth: @cometchat/chat-uikit-angular@5.0.2 source (component @Input/@Output declarations in projects/cometchat-uikit/src/lib/components/**) + docs/ui-kit/angular. Never invent a component @Input — every prop cited here is verified against the v5 component source.
1. Feature taxonomy
Every CometChat Angular v5 feature falls into exactly one of these five mechanism categories — they tell you how to wire each feature (the actionable Angular view), and map onto the product's canonical 5-tier "work-needed" model (Core Zero-Setup → Builder-Enabled → Config-Only → Config+Settings → SDK-Integrated; see cometchat-features §3 + packages/registry/v6/features/catalog.json; canonical public matrix → Features & Extensions Guide, which outranks this snapshot on conflict): Auto-enabled ≈ Core; Component-prop ≈ Core/Config; Dashboard-extension ≈ Config-Only; AI-with-OpenAI-key ≈ Config+Settings; Package-install ≈ SDK-Integrated:
| Category | What it means | Example features | How to enable |
|---|---|---|---|
| Auto-enabled | Already on — shipped compiled into the kit's base components. The only question is whether a hide flag is turning it off. | Instant messaging, typing indicators, read receipts, reactions, replies, threads, media upload, edit/delete, message info, presence | Just render <cometchat-message-header> + <cometchat-message-list> + <cometchat-message-composer> |
| Component-prop | Present in the kit but surfaced via a component @Input you set. | @mentions (textFormatters), AI smart replies / conversation starters / summary (@Inputs on message-list + message-header) | Set the verified @Input (§2, §4) |
| Dashboard-extension | Backend toggle enabled in the CometChat dashboard (or via the cometchat apply-feature CLI). The kit auto-renders the matching UI once enabled. | Polls, stickers, collaborative doc/whiteboard, message translation, link preview, thumbnail generation | cometchat apply-feature <id> --app-id <X> → hard-reload (§3) |
| AI-with-OpenAI-key | Dashboard AI toggle that also needs an OpenAI API key on the app, then a component @Input to surface it. | Smart replies, conversation starter, conversation summary | cometchat apply-feature <id> --app-id <X> --openai-key sk-… → set the message-list / header @Input (§4) |
| Package-install (calls) | Install the separate calls SDK + enable calling on the builder. The kit's call components then work. | Voice + video calls, call logs | npm install @cometchat/calls-sdk-javascript@^5 + .setCallingEnabled(true) → see cometchat-angular-calls (§5) |
The
cometchat apply-feature <id>CLI and the dashboard toggles are not code symbols — they configure the backend. The code-side work for dashboard-extension features is usually zero; for component-prop and AI features it's a single@Input.
2. Auto-enabled features (no work) + the two component-prop ones
Already on from day 1 — no feature-enabling step
Rendering the three messaging components gives you all of these for free:
- Instant messaging (text, real-time delivery)
- Media sharing (images, video, audio, files)
- Read receipts (sent / delivered / read ticks)
- Typing indicators
- Reactions — on by default in
<cometchat-message-list>. Click any message → emoji reaction. To turn it off, set[hideReactionOption]="true"(verified hide flag on the message list). - Replies / threads (
hideReplyOption,hideReplyInThreadOptionto hide) - Edit / delete own messages (
hideEditMessageOption,hideDeleteMessageOption) - Message info (
hideMessageInfoOption) - Voice messages (record + send from composer;
hideVoiceRecordingButtonto hide) - User presence (online/offline status indicators render on avatars in
<cometchat-conversations>,<cometchat-users>,<cometchat-group-members>by default — there is no per-list presence-hide@Inputin v5; the onlyhideUserStatusflag lives on<cometchat-search>) - Search —
<cometchat-users>and<cometchat-groups>render a search bar by default; set[hideSearch]="true"to remove it (verified hide flag, defaultfalse).<cometchat-conversations>is the inverse: it has a[showSearchBar]@Input(defaultfalse— search hidden), so set[showSearchBar]="true"to show it; it also exposes a[searchView]template slot for a fully custom search surface.
These need no install and no toggle. If a customer reports one "missing," the cause is almost always a hide* input set to true somewhere — grep the templates first.
Mentions (@mentions) — component-prop
Mentions are not auto-on; they surface only when you pass a CometChatMentionsFormatter into the verified textFormatters @Input (which exists on <cometchat-message-list>, <cometchat-message-composer>, and <cometchat-conversations>):
// chat.component.ts
import { Component } from "@angular/core";
import {
CometChatMessageListComponent,
CometChatMessageComposerComponent,
CometChatMentionsFormatter,
} from "@cometchat/chat-uikit-angular";
import { CometChat } from "@cometchat/chat-sdk-javascript";
@Component({
selector: "app-chat",
standalone: true,
imports: [CometChatMessageListComponent, CometChatMessageComposerComponent],
template: `
<cometchat-message-list [user]="user" [textFormatters]="formatters"></cometchat-message-list>
<cometchat-message-composer [user]="user" [textFormatters]="formatters"></cometchat-message-composer>
`,
})
export class ChatComponent {
@Input() user!: CometChat.User;
// Pass the SAME formatter array to list + composer so typed @mentions render consistently
formatters = [new CometChatMentionsFormatter()];
}
@allmentions: the composer enables mention-all by default; set[disableMentionAll]="true"to suppress it (verified composer hide flag).- To disable mentions entirely, set
[disableMentions]="true"on the composer instead of omitting the formatter.
Why a formatter, not a toggle? Mentions are a text-rendering concern.
CometChatMentionsFormatter(verified export) is aCometChatTextFormattersubclass; the kit runs it over message text in the list and over input in the composer.
3. Dashboard-extension features (polls, stickers, collaborative, translation, link preview)
These are backend extensions. Enable each in the CometChat dashboard, or via the cross-family CLI. The components auto-render the result — usually zero code.
Enable via the CLI (preferred — no browser)
Angular projects don't go through cometchat apply (no .cometchat/state.json), so always pass --app-id <id> explicitly. The CLI hits the dashboard API using the bearer from cometchat auth login:
cometchat apply-feature polls --app-id <your-app-id>
cometchat apply-feature stickers --app-id <your-app-id>
cometchat apply-feature message-translation --app-id <your-app-id>
cometchat apply-feature link-preview --app-id <your-app-id>
cometchat apply-feature collaborative-document --app-id <your-app-id>
cometchat apply-feature collaborative-whiteboard --app-id <your-app-id>
cometchat apply-feature and the dashboard toggles configure the backend; they are not code symbols.
Response shapes (--json):
"status": "applied"→ done. Hard-reload the Angular dev server (ng serverestart or browser refresh)."status": "already-applied"→ already in the desired state."status": "auth-required"→ runcometchat auth loginfirst."status": "manual-action-required"→ a third-party-config extension (Giphy, Stipop, Tenor, Chatwoot, Intercom, Disappearing Messages, Message Shortcuts). The CLI can't automate these — surfacenext_stepsverbatim and walk the user through the dashboard."status": "error"→ surfacenext_steps.
Enable via the dashboard (fallback)
- https://app.cometchat.com → your app
- Chat & Messaging → Features
- Find the extension by name → flip Status ON
- Hard-reload the Angular app
Where each toggle surfaces in the v5 UI
| Extension | UI surface when enabled | Related verified hide flag (to suppress) |
|---|---|---|
| Polls | "Poll" option in <cometchat-message-composer>'s attachment menu; poll bubble in the list | hidePollsOption (composer) |
| Stickers | Sticker button in the composer; sticker bubble in the list | hideStickersButton (composer) |
| Collaborative document | Option in the composer attachment menu; opens a shared doc | hideCollaborativeDocumentOption (composer) |
| Collaborative whiteboard | Option in the composer attachment menu; opens a shared canvas | hideCollaborativeWhiteboardOption (composer) |
| Message translation | "Translate" option in the message context menu | hideTranslateMessageOption (message list) |
| Link preview | Rich-card bubble for URLs in the message list | — |
| Thumbnail generation | Image/video bubbles show thumbnails | — |
These are real, verified @Input hide flags on the v5 components — the feature renders by default once the dashboard toggle is on; you only touch a flag if you want to hide it.
After enabling, run cometchat verify --json and hard-reload. No code changes are needed for the auto-wired subset above.
4. AI features — dashboard toggle + OpenAI key + one component @Input
smart-replies, conversation-starter, and conversation-summary are AI features. Two steps: (1) enable on the backend with an OpenAI key, (2) surface with the verified component @Input.
4a — Enable on the backend (one CLI call)
The CLI sets the OpenAI key on the app and flips the toggle together:
cometchat apply-feature smart-replies --app-id <your-app-id> --openai-key sk-...
cometchat apply-feature conversation-starter --app-id <your-app-id> --openai-key sk-...
cometchat apply-feature conversation-summary --app-id <your-app-id> --openai-key sk-...
The key is stored on the app once, so subsequent AI applies don't need --openai-key repeated. "status": "openai-key-required" → re-run with --openai-key sk-…. Get a key: https://platform.openai.com/api-keys.
4b — Surface smart replies + conversation starters (message-list @Inputs)
These are verified @Inputs on <cometchat-message-list> (confirmed in the v5 .d.ts):
<cometchat-message-list
[user]="selectedUser"
[showSmartReplies]="true"
[showConversationStarters]="true"
[smartRepliesKeywords]="['help', 'pricing']"
[smartRepliesDelayDuration]="2000">
</cometchat-message-list>
showSmartReplies(boolean) — renders smart-reply chips after a recent incoming message.showConversationStarters(boolean) — renders starter suggestions when the conversation is empty.smartRepliesKeywords(string[]) — only show smart replies when the incoming message contains one of these keywords. Defaults to['what', 'when', 'why', 'who', 'where', 'how', '?']in v5 — set your own array to narrow it.smartRepliesDelayDuration(number, ms) — debounce before chips appear (v5 default10000).
<cometchat-message-list> also exposes the (smartReplyClick) and (conversationStarterClick) @Outputs (each emits the selected reply string) if you want to observe selection. (There are also standalone <cometchat-smart-replies> and <cometchat-conversation-starter> components — verified exports under base-elements/ — but the message-list @Inputs are the idiomatic path.)
4c — Surface conversation summary (message-header @Inputs)
Conversation summary is driven by verified @Inputs on <cometchat-message-header>:
<cometchat-message-header
[user]="selectedUser"
[showConversationSummaryButton]="true"
[enableAutoSummaryGeneration]="true"
[summaryGenerationMessageCount]="50"
(conversationSummaryClick)="onSummary($event)">
</cometchat-message-header>
showConversationSummaryButton(boolean, defaultfalse) — shows the "Summarize" button in the header.enableAutoSummaryGeneration(boolean, defaultfalse) — auto-generate a summary once the message count crosses the threshold.summaryGenerationMessageCount(number, v5 default1000) — the message-count threshold that triggers auto-summary. Lower it (e.g.50) to summarize sooner.(conversationSummaryClick)—@Outputfired when the summary button is clicked; emits{ messageCount: number }(type the$eventaccordingly).
The standalone
<cometchat-conversation-summary>component (verified@InputsgetConversationSummary: () => Promise<string>andcloseCallback: () => void) is for fully custom summary UIs. For the standard flow, the header@Inputs above are all you need.
4d — Reading smart-reply metadata for a fully custom UI
If you render your own chips instead of using showSmartReplies, read the server-injected metadata off the incoming message (the AI runs on CometChat's backend, not in your code):
const metadata = message.getMetadata() as Record<string, any>;
const smartReply = metadata?.["@injected"]?.["extensions"]?.["smart-reply"];
if (smartReply) {
const replies = [
smartReply.reply_positive,
smartReply.reply_neutral,
smartReply.reply_negative,
].filter(Boolean);
// render your own reply chips → on click, CometChatUIKit.sendTextMessage(...)
}
5. Calls (package-install) — pointer to the calls skill
Voice + video calling is the one package-install feature. Two steps:
npm install @cometchat/calls-sdk-javascript@^5
// in your UIKitSettingsBuilder chain, before CometChatUIKit.init(...)
const settings = new UIKitSettingsBuilder()
.setAppId(environment.cometchat.appId)
.setRegion(environment.cometchat.region)
.setAuthKey(environment.cometchat.authKey)
.setCallingEnabled(true) // verified builder method (v5 .d.ts)
.build();
setCallingEnabled(true) is a verified UIKitSettingsBuilder method. Once the calls SDK peer is installed and calling is enabled, the kit's standalone call components work: <cometchat-call-buttons>, <cometchat-incoming-call>, <cometchat-outgoing-call>, <cometchat-ongoing-call>, <cometchat-call-logs>.
For the full call flow — app-wide incoming-call mounting, the @Input-callback-vs-@Output binding split ([onAccept] input vs (callAccepted) output), NgZone correctness, getUserMedia handling, additive-vs-standalone modes — read cometchat-angular-calls. Do not re-derive the call wiring here; that skill is the source of truth.
Quick reminder on call-button placement (header [auxiliaryButtonView] / [menuView] slot):
<cometchat-message-header [user]="selectedUser" [auxiliaryButtonView]="callButtons"></cometchat-message-header>
<ng-template #callButtons>
<cometchat-call-buttons
[user]="selectedUser"
[onVoiceCallClick]="handleVoiceCall"
[onVideoCallClick]="handleVideoCall">
</cometchat-call-buttons>
</ng-template>
onVoiceCallClick / onVideoCallClick are @Input callback props (square brackets, function refs) — not @Outputs. See the components catalog and calls skill.
6. AI Agent (dashboard setup, no dedicated v5 component)
- https://app.cometchat.com → your app → AI → Agents
- Create an agent (name, system prompt, model) and assign it a UID (e.g.
ai-support-agent). - Users message the agent like any other user.
Angular v5 ships AI-assistant building blocks (CometChatAIAssistantChat, -ChatHistory, -MessageBubble are exported), but the standard, supported path to chat with an agent is the normal message components targeted at the agent's UID:
CometChat.getUser("ai-support-agent").then((agent) => { this.aiAgent = agent; });
<cometchat-message-header [user]="aiAgent"></cometchat-message-header>
<cometchat-message-list [user]="aiAgent"></cometchat-message-list>
<cometchat-message-composer [user]="aiAgent"></cometchat-message-composer>
Smart replies / conversation starter / summary surface through the §4 @Inputs once enabled.
7. Finding a feature's category quickly
- In the auto-enabled list (§2)? → Already works. Confirm no
hide*@Inputis turning it off. - @mentions? → Component-prop: pass
[textFormatters]="[new CometChatMentionsFormatter()]"(§2). - Smart replies / conversation starter / summary? → AI feature: enable with
cometchat apply-feature <id> --app-id <X> --openai-key sk-…, then set the message-list / message-header@Input(§4). - Polls / stickers / collaborative doc-or-whiteboard / message translation / link preview / thumbnails? → Dashboard-extension:
cometchat apply-feature <id> --app-id <X>, then hard-reload (§3). - Giphy / Stipop / Tenor / Chatwoot / Intercom / Disappearing Messages / Message Shortcuts? → Dashboard-extension needing third-party config; CLI returns
manual-action-required. Walk the user through https://app.cometchat.com → Chat & Messaging → Features. - Voice / video / call logs? → Package-install:
npm install @cometchat/calls-sdk-javascript@^5+.setCallingEnabled(true)→cometchat-angular-calls(§5). - AI agent? → §6.
- Custom text formatting / custom message templates / custom slot views / theming? → That's customization, not a feature. Route to
cometchat-angular-customization/cometchat-angular-theming. - Not on this list? → Check
docs/ui-kit/angular/guide-overview+ the kit's exports. If still nothing, the feature isn't in the UI Kit; the user may need the raw SDK.
8. Anti-patterns
- Don't invent a component
@Input. Every prop in this skill (showSmartReplies,showConversationStarters,smartRepliesKeywords,smartRepliesDelayDuration,showConversationSummaryButton,enableAutoSummaryGeneration,summaryGenerationMessageCount,textFormatters, thehide*flags,setCallingEnabled) is verified against the v5.d.ts. If a prop isn't incometchat-angular-componentsor the.d.ts, it doesn't exist — v4 prop names frequently differ. - Don't treat reactions/mentions as a backend toggle. Reactions are auto-on (hide via
hideReactionOption); mentions are atextFormatters@Input. Neither usesapply-feature. - Don't speculatively install the calls SDK. Install
@cometchat/calls-sdk-javascriptonly after the user asks for calls, and pin^5. - Don't enable extensions the app doesn't use. Each enabled extension adds data-fetching overhead.
- Don't omit
--app-id. Angular has no.cometchat/state.json; everyapply-featurecall needs--app-id <id>. - Don't bind a call
@Inputcallback as an@Output.[onVoiceCallClick]="fn"(input) vs(voiceCallClick)="fn($event)"(output) — use the one the catalog lists. - Don't reference AI streaming APIs from memory. They change across minor versions — confirm against the docs MCP /
.d.tsbefore generating code.
Skill routing reference
| Skill | When to route |
|---|---|
cometchat-angular-core | Init / login / standalone setup / UIKitSettingsBuilder |
cometchat-angular-components | Component selector + @Input/@Output reference |
cometchat-angular-calls | Full voice/video call flow + incoming-call mounting |
cometchat-angular-placement | Where the call-logs tab / AI chat route / message panes go |
cometchat-angular-features | This skill — which features exist + how to enable each |
cometchat-angular-theming | Theming reaction colors, call buttons, extension UI (CSS variables) |
cometchat-angular-customization | Custom text formatters, custom message templates, event bus |
cometchat-angular-production | Server-side auth tokens (prerequisite for AI agent in prod) |
cometchat-angular-troubleshooting | Extension not showing after enabling, call permission failures |
Sources
Signals
- GitHub stars
- 105
- Forks
- 2
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
cometchat-angular-features- Source
- github.com/cometchat/cometchat-skills