@cometchat/skills 4.4.2 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +55 -0
- package/.claude-plugin/plugin.json +14 -0
- package/CHANGELOG.md +44 -0
- package/LICENSE +21 -0
- package/MIGRATING.md +187 -0
- package/README.md +52 -156
- package/RULES.md +125 -0
- package/bin/cometchat-skills.mjs +1280 -0
- package/bin/legacy-skills.json +95 -0
- package/catalogs/android-v6.json +1646 -0
- package/catalogs/flutter-v6.json +651 -0
- package/catalogs/ios-v5.json +1383 -0
- package/catalogs/rn-calls-v5.json +134 -0
- package/catalogs/rn-calls-v5.symbols.txt +58 -0
- package/catalogs/rn-sdk-v4.json +672 -0
- package/catalogs/rn-v5.json +449 -0
- package/catalogs/rn-v5.symbols.txt +216 -0
- package/catalogs/sdk-android-v5.json +514 -0
- package/contracts.android-calls-v5.json +122 -0
- package/contracts.android-v6.json +135 -0
- package/contracts.angular-v5.json +694 -0
- package/contracts.flutter-calls-v5.json +77 -0
- package/contracts.flutter-v6.json +126 -0
- package/contracts.ios-calls-v5.json +67 -0
- package/contracts.ios-v5.json +436 -0
- package/contracts.json +82 -0
- package/contracts.rn-calls-v5.json +77 -0
- package/contracts.rn-v5.json +727 -0
- package/contracts.sdk-android-v5.json +15 -0
- package/contracts.web-calls-v5.json +45 -0
- package/features.android-calls-v5.json +246 -0
- package/features.android-v6.json +65 -0
- package/features.angular-v5.json +521 -0
- package/features.flutter-calls-v5.json +286 -0
- package/features.flutter-v6.json +484 -0
- package/features.ios-calls-v5.json +236 -0
- package/features.ios-v5.json +573 -0
- package/features.json +61 -0
- package/features.rn-calls-v5.json +187 -0
- package/features.rn-v5.json +614 -0
- package/features.sdk-android-v5.json +40 -0
- package/features.sdk-jsv4.json +24 -0
- package/features.web-calls-v5.json +108 -0
- package/package.json +156 -74
- package/peers.yaml +355 -0
- package/registry/README.md +31 -0
- package/registry/android-calls-v5.json +94 -0
- package/registry/android-v6.json +177 -0
- package/registry/angular-v5.json +154 -0
- package/registry/flutter-calls-v5.json +94 -0
- package/registry/flutter-v6.json +159 -0
- package/registry/ios-calls-v5.json +99 -0
- package/registry/ios-v5.json +152 -0
- package/registry/rn-calls-v5.json +99 -0
- package/registry/rn-v5.json +169 -0
- package/registry/sdk-android-v5.json +93 -0
- package/registry/sdk-jsv4.json +93 -0
- package/registry/web-calls-v5.json +94 -0
- package/registry/web-v7.json +154 -0
- package/skills/cometchat/SKILL.md +47 -2096
- package/skills/cometchat-a11y/SKILL.md +44 -472
- package/skills/cometchat-analytics/SKILL.md +61 -0
- package/skills/cometchat-android-v5-calls-sdk/SKILL.md +206 -0
- package/skills/cometchat-android-v5-calls-sdk/references/build-truth.md +63 -0
- package/skills/cometchat-android-v5-calls-sdk/references/docs-map.md +119 -0
- package/skills/cometchat-android-v5-calls-sdk/references/method-map.md +53 -0
- package/skills/cometchat-android-v5-calls-sdk/references/pitfalls.md +72 -0
- package/skills/cometchat-android-v5-calls-sdk/references/ringing.md +92 -0
- package/skills/cometchat-android-v5-calls-sdk/references/user-switch.md +90 -0
- package/skills/cometchat-android-v5-sdk/SKILL.md +127 -0
- package/skills/cometchat-android-v5-sdk/references/app-surface.md +88 -0
- package/skills/cometchat-android-v5-sdk/references/docs-map.md +91 -0
- package/skills/cometchat-android-v6-builder-settings/SKILL.md +51 -137
- package/skills/cometchat-android-v6-calls/SKILL.md +128 -413
- package/skills/cometchat-android-v6-compose-components/SKILL.md +84 -194
- package/skills/cometchat-android-v6-compose-customization/SKILL.md +66 -411
- package/skills/cometchat-android-v6-compose-placement/SKILL.md +154 -237
- package/skills/cometchat-android-v6-core/SKILL.md +236 -672
- package/skills/cometchat-android-v6-core/references/anti-patterns.md +31 -0
- package/skills/cometchat-android-v6-core/references/component-props.md +168 -0
- package/skills/cometchat-android-v6-core/references/docs-map.md +153 -0
- package/skills/cometchat-android-v6-core/references/layout.md +112 -0
- package/skills/cometchat-android-v6-core/references/lifecycle.md +75 -0
- package/skills/cometchat-android-v6-core/references/setup-credentials.md +105 -0
- package/skills/cometchat-android-v6-core/references/troubleshooting.md +36 -0
- package/skills/cometchat-android-v6-events/SKILL.md +46 -184
- package/skills/cometchat-android-v6-extensions/SKILL.md +39 -179
- package/skills/cometchat-android-v6-features/SKILL.md +74 -143
- package/skills/cometchat-android-v6-kotlin-components/SKILL.md +75 -193
- package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +67 -419
- package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +77 -223
- package/skills/cometchat-android-v6-migration/SKILL.md +67 -378
- package/skills/cometchat-android-v6-production/SKILL.md +41 -179
- package/skills/cometchat-android-v6-push/SKILL.md +39 -289
- package/skills/cometchat-android-v6-testing/SKILL.md +50 -265
- package/skills/cometchat-android-v6-troubleshooting/SKILL.md +70 -254
- package/skills/cometchat-angular-v5-calls/SKILL.md +193 -0
- package/skills/cometchat-angular-v5-components/SKILL.md +131 -0
- package/skills/cometchat-angular-v5-components/references/catalog.md +111 -0
- package/skills/cometchat-angular-v5-components/references/host-composed.md +46 -0
- package/skills/cometchat-angular-v5-core/SKILL.md +300 -0
- package/skills/cometchat-angular-v5-core/references/anti-patterns.md +49 -0
- package/skills/cometchat-angular-v5-core/references/component-props.md +55 -0
- package/skills/cometchat-angular-v5-core/references/dependencies.md +66 -0
- package/skills/cometchat-angular-v5-core/references/docs-map.md +132 -0
- package/skills/cometchat-angular-v5-core/references/layout.md +64 -0
- package/skills/cometchat-angular-v5-core/references/lifecycle.md +202 -0
- package/skills/cometchat-angular-v5-core/references/setup-credentials.md +137 -0
- package/skills/cometchat-angular-v5-core/references/theming.md +70 -0
- package/skills/cometchat-angular-v5-core/references/troubleshooting.md +27 -0
- package/skills/cometchat-angular-v5-customization/SKILL.md +94 -0
- package/skills/cometchat-angular-v5-features/SKILL.md +107 -0
- package/skills/cometchat-angular-v5-features/references/custom-messages.md +133 -0
- package/skills/cometchat-angular-v5-features/references/formatters.md +28 -0
- package/skills/cometchat-angular-v5-features/references/host-composed-extensions.md +85 -0
- package/skills/cometchat-angular-v5-migration/SKILL.md +40 -0
- package/skills/cometchat-angular-v5-migration/references/migration-guide.md +165 -0
- package/skills/cometchat-angular-v5-patterns/SKILL.md +107 -0
- package/skills/cometchat-angular-v5-placement/SKILL.md +133 -0
- package/skills/cometchat-angular-v5-placement/references/combined-app.md +174 -0
- package/skills/cometchat-angular-v5-placement/references/core-surface.md +199 -0
- package/skills/cometchat-angular-v5-production/SKILL.md +102 -0
- package/skills/cometchat-angular-v5-push/SKILL.md +61 -0
- package/skills/cometchat-angular-v5-testing/SKILL.md +112 -0
- package/skills/cometchat-angular-v5-troubleshooting/SKILL.md +96 -0
- package/skills/cometchat-audit/SKILL.md +61 -0
- package/skills/cometchat-compliance/SKILL.md +63 -0
- package/skills/cometchat-flutter-v5-sdk/SKILL.md +188 -0
- package/skills/cometchat-flutter-v5-sdk/references/doc-corrections.md +55 -0
- package/skills/cometchat-flutter-v5-sdk/references/docs-map.md +211 -0
- package/skills/cometchat-flutter-v5-sdk/references/platform-notes.md +48 -0
- package/skills/cometchat-flutter-v5-sdk/references/transcription.md +87 -0
- package/skills/cometchat-flutter-v6-calls/SKILL.md +75 -389
- package/skills/cometchat-flutter-v6-components/SKILL.md +88 -361
- package/skills/cometchat-flutter-v6-core/SKILL.md +154 -593
- package/skills/cometchat-flutter-v6-core/references/anti-patterns.md +55 -0
- package/skills/cometchat-flutter-v6-core/references/docs-map.md +143 -0
- package/skills/cometchat-flutter-v6-core/references/layout.md +45 -0
- package/skills/cometchat-flutter-v6-core/references/lifecycle.md +87 -0
- package/skills/cometchat-flutter-v6-core/references/setup-credentials.md +84 -0
- package/skills/cometchat-flutter-v6-core/references/troubleshooting.md +26 -0
- package/skills/cometchat-flutter-v6-customization/SKILL.md +70 -712
- package/skills/cometchat-flutter-v6-events/SKILL.md +79 -174
- package/skills/cometchat-flutter-v6-features/SKILL.md +55 -394
- package/skills/cometchat-flutter-v6-migration/SKILL.md +68 -367
- package/skills/cometchat-flutter-v6-migration/references/migration-guide.md +132 -0
- package/skills/cometchat-flutter-v6-patterns/SKILL.md +61 -0
- package/skills/cometchat-flutter-v6-placement/SKILL.md +94 -381
- package/skills/cometchat-flutter-v6-production/SKILL.md +59 -615
- package/skills/cometchat-flutter-v6-push/SKILL.md +46 -455
- package/skills/cometchat-flutter-v6-testing/SKILL.md +68 -299
- package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +54 -878
- package/skills/cometchat-i18n/SKILL.md +35 -404
- package/skills/cometchat-ios-calls/SKILL.md +112 -563
- package/skills/cometchat-ios-components/SKILL.md +44 -834
- package/skills/cometchat-ios-core/SKILL.md +182 -1068
- package/skills/cometchat-ios-core/references/anti-patterns.md +113 -0
- package/skills/cometchat-ios-core/references/docs-map.md +124 -0
- package/skills/cometchat-ios-core/references/install.md +23 -0
- package/skills/cometchat-ios-core/references/layout.md +219 -0
- package/skills/cometchat-ios-core/references/setup-credentials.md +197 -0
- package/skills/cometchat-ios-core/references/swiftui.md +91 -0
- package/skills/cometchat-ios-core/references/troubleshooting.md +100 -0
- package/skills/cometchat-ios-customization/SKILL.md +33 -968
- package/skills/cometchat-ios-features/SKILL.md +29 -738
- package/skills/cometchat-ios-migration/SKILL.md +39 -0
- package/skills/cometchat-ios-placement/SKILL.md +51 -729
- package/skills/cometchat-ios-production/SKILL.md +67 -723
- package/skills/cometchat-ios-push/SKILL.md +24 -602
- package/skills/cometchat-ios-testing/SKILL.md +36 -355
- package/skills/cometchat-ios-troubleshooting/SKILL.md +31 -989
- package/skills/cometchat-ios-v5-sdk/SKILL.md +161 -0
- package/skills/cometchat-ios-v5-sdk/references/docs-map.md +326 -0
- package/skills/cometchat-js-v5-sdk/SKILL.md +95 -0
- package/skills/cometchat-js-v5-sdk/references/docs-map.md +114 -0
- package/skills/cometchat-migrate-from-getstream/SKILL.md +65 -0
- package/skills/cometchat-migrate-from-getstream/references/concept-map.md +98 -0
- package/skills/cometchat-migrate-from-getstream/references/data-migration.md +74 -0
- package/skills/cometchat-migrate-from-getstream/references/feature-map.md +108 -0
- package/skills/cometchat-migrate-from-getstream/references/inventory.md +82 -0
- package/skills/cometchat-migrate-from-getstream/references/native-build.md +9 -0
- package/skills/cometchat-migrate-from-getstream/references/report-template.md +59 -0
- package/skills/cometchat-migrate-from-sendbird/SKILL.md +64 -0
- package/skills/cometchat-migrate-from-sendbird/references/concept-map.md +99 -0
- package/skills/cometchat-migrate-from-sendbird/references/data-migration.md +74 -0
- package/skills/cometchat-migrate-from-sendbird/references/feature-map.md +104 -0
- package/skills/cometchat-migrate-from-sendbird/references/inventory.md +86 -0
- package/skills/cometchat-migrate-from-sendbird/references/native-build.md +10 -0
- package/skills/cometchat-migrate-from-sendbird/references/report-template.md +59 -0
- package/skills/cometchat-migrate-from-twilio/SKILL.md +52 -0
- package/skills/cometchat-migrate-from-twilio/references/concept-map.md +49 -0
- package/skills/cometchat-migrate-from-twilio/references/data-migration.md +50 -0
- package/skills/cometchat-migrate-from-twilio/references/feature-map.md +27 -0
- package/skills/cometchat-migrate-from-twilio/references/inventory.md +53 -0
- package/skills/cometchat-migrate-from-twilio/references/report-template.md +52 -0
- package/skills/cometchat-moderation/SKILL.md +58 -0
- package/skills/cometchat-onboarding/SKILL.md +92 -0
- package/skills/cometchat-onboarding/references/archetypes.md +51 -0
- package/skills/cometchat-onboarding/references/calling-first.md +77 -0
- package/skills/cometchat-onboarding/references/not-in-this-pack.md +8 -0
- package/skills/cometchat-onboarding/references/plan-artifact.md +133 -0
- package/skills/cometchat-onboarding/references/platforms.md +105 -0
- package/skills/cometchat-react-native-bare-patterns/SKILL.md +120 -0
- package/skills/cometchat-react-native-calls/SKILL.md +200 -0
- package/skills/cometchat-react-native-components/SKILL.md +142 -0
- package/skills/cometchat-react-native-core/SKILL.md +335 -0
- package/skills/cometchat-react-native-core/references/anti-patterns.md +79 -0
- package/skills/cometchat-react-native-core/references/component-props.md +105 -0
- package/skills/cometchat-react-native-core/references/dependencies.md +62 -0
- package/skills/cometchat-react-native-core/references/docs-map.md +127 -0
- package/skills/cometchat-react-native-core/references/layout.md +61 -0
- package/skills/cometchat-react-native-core/references/lifecycle.md +64 -0
- package/skills/cometchat-react-native-core/references/setup-credentials.md +39 -0
- package/skills/cometchat-react-native-customization/SKILL.md +198 -0
- package/skills/cometchat-react-native-expo-patterns/SKILL.md +116 -0
- package/skills/cometchat-react-native-features/SKILL.md +122 -0
- package/skills/cometchat-react-native-migration/SKILL.md +103 -0
- package/skills/cometchat-react-native-placement/SKILL.md +158 -0
- package/skills/cometchat-react-native-production/SKILL.md +79 -0
- package/skills/cometchat-react-native-push/SKILL.md +88 -0
- package/skills/cometchat-react-native-sdk/SKILL.md +133 -0
- package/skills/cometchat-react-native-sdk/references/method-map.md +239 -0
- package/skills/cometchat-react-native-sdk/references/page-map.md +96 -0
- package/skills/cometchat-react-native-testing/SKILL.md +94 -0
- package/skills/cometchat-react-native-troubleshooting/SKILL.md +174 -0
- package/skills/cometchat-react-native-v5-sdk/SKILL.md +150 -0
- package/skills/cometchat-react-native-v5-sdk/references/docs-map.md +127 -0
- package/skills/cometchat-react-native-v5-sdk/references/ringing-voip.md +369 -0
- package/skills/cometchat-react-v7-calls/SKILL.md +75 -0
- package/skills/cometchat-react-v7-components/SKILL.md +72 -0
- package/skills/cometchat-react-v7-core/SKILL.md +101 -0
- package/skills/cometchat-react-v7-core/references/anti-patterns.md +19 -0
- package/skills/cometchat-react-v7-core/references/component-props.md +82 -0
- package/skills/cometchat-react-v7-core/references/dependencies.md +23 -0
- package/skills/cometchat-react-v7-core/references/docs-map.md +117 -0
- package/skills/cometchat-react-v7-core/references/layout.md +150 -0
- package/skills/cometchat-react-v7-core/references/lifecycle.md +74 -0
- package/skills/cometchat-react-v7-core/references/setup-credentials.md +58 -0
- package/skills/cometchat-react-v7-core/references/ssr.md +11 -0
- package/skills/cometchat-react-v7-core/references/theming.md +52 -0
- package/skills/cometchat-react-v7-customization/SKILL.md +84 -0
- package/skills/cometchat-react-v7-features/SKILL.md +92 -0
- package/skills/cometchat-react-v7-migration/SKILL.md +39 -0
- package/skills/cometchat-react-v7-migration/references/migration-guide.md +119 -0
- package/skills/cometchat-react-v7-patterns/SKILL.md +43 -0
- package/skills/cometchat-react-v7-placement/SKILL.md +106 -0
- package/skills/cometchat-react-v7-placement/references/recipes.md +354 -0
- package/skills/cometchat-react-v7-production/SKILL.md +84 -0
- package/skills/cometchat-react-v7-push/SKILL.md +53 -0
- package/skills/cometchat-react-v7-testing/SKILL.md +60 -0
- package/skills/cometchat-react-v7-troubleshooting/SKILL.md +47 -0
- package/skills/cometchat-security/SKILL.md +80 -0
- package/skills/cometchat-self-host/SKILL.md +56 -0
- package/test-suite/README.md +70 -0
- package/test-suite/catalogs/android-calls-v5.json +830 -0
- package/test-suite/catalogs/android-calls-v5.symbols.txt +499 -0
- package/test-suite/catalogs/android-v6.json +1646 -0
- package/test-suite/catalogs/android-v6.symbols.txt +298 -0
- package/test-suite/catalogs/angular-v5.json +7587 -0
- package/test-suite/catalogs/flutter-calls-v5.json +196 -0
- package/test-suite/catalogs/flutter-calls-v5.symbols.txt +59 -0
- package/test-suite/catalogs/flutter-v6.json +651 -0
- package/test-suite/catalogs/ios-calls-v5.json +158 -0
- package/test-suite/catalogs/ios-calls-v5.symbols.txt +70 -0
- package/test-suite/catalogs/ios-v5.json +1383 -0
- package/test-suite/catalogs/ios-v5.symbols.txt +699 -0
- package/test-suite/catalogs/rn-calls-v5.json +134 -0
- package/test-suite/catalogs/rn-sdk-v4.json +672 -0
- package/test-suite/catalogs/rn-v5.json +449 -0
- package/test-suite/catalogs/sdk-android-v5.json +514 -0
- package/test-suite/catalogs/sdk-android-v5.symbols.txt +254 -0
- package/test-suite/catalogs/sdk-jsv4.json +800 -0
- package/test-suite/catalogs/web-calls-v5.json +195 -0
- package/test-suite/catalogs/web-v7.json +1243 -0
- package/test-suite/scripts/build-registry.mjs +113 -0
- package/test-suite/scripts/catalog-refresh-dart.mjs +151 -0
- package/test-suite/scripts/catalog-refresh.mjs +100 -0
- package/test-suite/scripts/lint-skills.mjs +932 -0
- package/test-suite/scripts/measure-tokens.mjs +169 -0
- package/test-suite/scripts/typecheck-fences-dart.mjs +437 -0
- package/test-suite/scripts/typecheck-fences-kotlin.mjs +269 -0
- package/test-suite/scripts/typecheck-fences.mjs +206 -0
- package/test-suite/scripts/verify-catalog.mjs +242 -0
- package/test-suite/scripts/verify-contract-fences.mjs +94 -0
- package/test-suite/scripts/verify-detection.mjs +178 -0
- package/test-suite/scripts/verify-docs-base.mjs +91 -0
- package/test-suite/scripts/verify-family-agnostic.mjs +134 -0
- package/test-suite/scripts/verify-golden-path.mjs +138 -0
- package/test-suite/scripts/verify-oracle-components.mjs +133 -0
- package/test-suite/scripts/verify-template-bindings.mjs +148 -0
- package/test-suite/typecheck/angular-v5/package.json +21 -0
- package/test-suite/typecheck/angular-v5/tsconfig.json +21 -0
- package/test-suite/typecheck/flutter-v6/analysis_options.yaml +25 -0
- package/test-suite/typecheck/flutter-v6/pubspec.yaml +21 -0
- package/test-suite/typecheck/web-v7/package.json +18 -0
- package/test-suite/typecheck/web-v7/tsconfig.json +19 -0
- package/bin/install.js +0 -1003
- package/skills/.claude-plugin/marketplace.json +0 -86
- package/skills/cometchat/references/asking-questions.md +0 -48
- package/skills/cometchat-android-v5/SKILL.md +0 -121
- package/skills/cometchat-android-v5-calls/SKILL.md +0 -429
- package/skills/cometchat-android-v5-calls/references/README.md +0 -53
- package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +0 -197
- package/skills/cometchat-android-v5-calls/references/audio-controls.md +0 -91
- package/skills/cometchat-android-v5-calls/references/background-handling.md +0 -168
- package/skills/cometchat-android-v5-calls/references/call-layouts.md +0 -131
- package/skills/cometchat-android-v5-calls/references/call-logs.md +0 -113
- package/skills/cometchat-android-v5-calls/references/call-session.md +0 -274
- package/skills/cometchat-android-v5-calls/references/custom-ui.md +0 -150
- package/skills/cometchat-android-v5-calls/references/event-listeners.md +0 -123
- package/skills/cometchat-android-v5-calls/references/group-calls.md +0 -205
- package/skills/cometchat-android-v5-calls/references/idle-timeout.md +0 -117
- package/skills/cometchat-android-v5-calls/references/in-call-chat.md +0 -134
- package/skills/cometchat-android-v5-calls/references/join-session.md +0 -120
- package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +0 -222
- package/skills/cometchat-android-v5-calls/references/participant-management.md +0 -110
- package/skills/cometchat-android-v5-calls/references/picture-in-picture.md +0 -106
- package/skills/cometchat-android-v5-calls/references/raise-hand.md +0 -248
- package/skills/cometchat-android-v5-calls/references/recording.md +0 -101
- package/skills/cometchat-android-v5-calls/references/ringing-integration.md +0 -152
- package/skills/cometchat-android-v5-calls/references/screen-sharing.md +0 -78
- package/skills/cometchat-android-v5-calls/references/server-fcm-voip.md +0 -215
- package/skills/cometchat-android-v5-calls/references/session-settings.md +0 -121
- package/skills/cometchat-android-v5-calls/references/setup.md +0 -137
- package/skills/cometchat-android-v5-calls/references/share-invite.md +0 -156
- package/skills/cometchat-android-v5-calls/references/video-controls.md +0 -87
- package/skills/cometchat-android-v5-calls/references/voip-calling.md +0 -526
- package/skills/cometchat-android-v5-components/SKILL.md +0 -431
- package/skills/cometchat-android-v5-core/SKILL.md +0 -486
- package/skills/cometchat-android-v5-customization/SKILL.md +0 -469
- package/skills/cometchat-android-v5-extensions/SKILL.md +0 -127
- package/skills/cometchat-android-v5-features/SKILL.md +0 -131
- package/skills/cometchat-android-v5-placement/SKILL.md +0 -277
- package/skills/cometchat-android-v5-production/SKILL.md +0 -95
- package/skills/cometchat-android-v5-push/SKILL.md +0 -619
- package/skills/cometchat-android-v5-testing/SKILL.md +0 -188
- package/skills/cometchat-android-v5-theming/SKILL.md +0 -167
- package/skills/cometchat-android-v5-troubleshooting/SKILL.md +0 -74
- package/skills/cometchat-android-v6/SKILL.md +0 -108
- package/skills/cometchat-android-v6-calls/references/add-calls-to-existing-chat.md +0 -97
- package/skills/cometchat-android-v6-calls/references/advanced-features.md +0 -87
- package/skills/cometchat-android-v6-calls/references/call-layouts.md +0 -100
- package/skills/cometchat-android-v6-calls/references/call-session.md +0 -163
- package/skills/cometchat-android-v6-calls/references/device-management.md +0 -172
- package/skills/cometchat-android-v6-calls/references/group-calls.md +0 -191
- package/skills/cometchat-android-v6-calls/references/idle-timeout.md +0 -110
- package/skills/cometchat-android-v6-calls/references/in-call-chat.md +0 -141
- package/skills/cometchat-android-v6-calls/references/raise-hand.md +0 -188
- package/skills/cometchat-android-v6-calls/references/ringing-integration.md +0 -176
- package/skills/cometchat-android-v6-calls/references/server-fcm-voip.md +0 -127
- package/skills/cometchat-android-v6-calls/references/share-invite.md +0 -105
- package/skills/cometchat-android-v6-compose-theming/SKILL.md +0 -250
- package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +0 -233
- package/skills/cometchat-angular-calls/SKILL.md +0 -380
- package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +0 -96
- package/skills/cometchat-angular-calls/references/call-layouts.md +0 -123
- package/skills/cometchat-angular-calls/references/call-session.md +0 -167
- package/skills/cometchat-angular-calls/references/custom-ui.md +0 -239
- package/skills/cometchat-angular-calls/references/device-management.md +0 -154
- package/skills/cometchat-angular-calls/references/group-calls.md +0 -433
- package/skills/cometchat-angular-calls/references/idle-timeout.md +0 -161
- package/skills/cometchat-angular-calls/references/in-call-chat.md +0 -148
- package/skills/cometchat-angular-calls/references/lazy-loading-pitfalls.md +0 -205
- package/skills/cometchat-angular-calls/references/migration-v4-to-v5.md +0 -53
- package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +0 -184
- package/skills/cometchat-angular-calls/references/picture-in-picture.md +0 -285
- package/skills/cometchat-angular-calls/references/raise-hand.md +0 -172
- package/skills/cometchat-angular-calls/references/recording-screen-share.md +0 -260
- package/skills/cometchat-angular-calls/references/ringing-integration.md +0 -133
- package/skills/cometchat-angular-calls/references/server-web-push-vapid.md +0 -100
- package/skills/cometchat-angular-calls/references/share-invite.md +0 -122
- package/skills/cometchat-angular-calls/references/virtual-background.md +0 -29
- package/skills/cometchat-angular-components/SKILL.md +0 -235
- package/skills/cometchat-angular-core/SKILL.md +0 -386
- package/skills/cometchat-angular-customization/SKILL.md +0 -616
- package/skills/cometchat-angular-features/SKILL.md +0 -329
- package/skills/cometchat-angular-patterns/SKILL.md +0 -256
- package/skills/cometchat-angular-placement/SKILL.md +0 -314
- package/skills/cometchat-angular-production/SKILL.md +0 -564
- package/skills/cometchat-angular-push/SKILL.md +0 -389
- package/skills/cometchat-angular-testing/SKILL.md +0 -605
- package/skills/cometchat-angular-theming/SKILL.md +0 -290
- package/skills/cometchat-angular-troubleshooting/SKILL.md +0 -364
- package/skills/cometchat-astro-patterns/SKILL.md +0 -708
- package/skills/cometchat-calls/SKILL.md +0 -364
- package/skills/cometchat-calls/references/use-case-broadcast.md +0 -199
- package/skills/cometchat-calls/references/use-case-marketplace.md +0 -157
- package/skills/cometchat-calls/references/use-case-support.md +0 -189
- package/skills/cometchat-calls/references/use-case-team.md +0 -180
- package/skills/cometchat-calls/references/use-case-telehealth.md +0 -153
- package/skills/cometchat-components/SKILL.md +0 -1142
- package/skills/cometchat-core/SKILL.md +0 -1048
- package/skills/cometchat-customization/SKILL.md +0 -580
- package/skills/cometchat-customization/references/component-catalog.md +0 -236
- package/skills/cometchat-features/SKILL.md +0 -861
- package/skills/cometchat-flutter-v5/SKILL.md +0 -173
- package/skills/cometchat-flutter-v5-calls/SKILL.md +0 -455
- package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +0 -193
- package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +0 -103
- package/skills/cometchat-flutter-v5-calls/references/call-session.md +0 -285
- package/skills/cometchat-flutter-v5-calls/references/device-management.md +0 -124
- package/skills/cometchat-flutter-v5-calls/references/group-calls.md +0 -181
- package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +0 -99
- package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +0 -135
- package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +0 -210
- package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +0 -255
- package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +0 -196
- package/skills/cometchat-flutter-v5-calls/references/server-push-bridge.md +0 -101
- package/skills/cometchat-flutter-v5-calls/references/share-invite.md +0 -148
- package/skills/cometchat-flutter-v5-conversations/SKILL.md +0 -118
- package/skills/cometchat-flutter-v5-core/SKILL.md +0 -239
- package/skills/cometchat-flutter-v5-customization/SKILL.md +0 -358
- package/skills/cometchat-flutter-v5-events/SKILL.md +0 -156
- package/skills/cometchat-flutter-v5-messages/SKILL.md +0 -259
- package/skills/cometchat-flutter-v5-production/SKILL.md +0 -216
- package/skills/cometchat-flutter-v5-push/SKILL.md +0 -285
- package/skills/cometchat-flutter-v5-testing/SKILL.md +0 -401
- package/skills/cometchat-flutter-v5-theming/SKILL.md +0 -161
- package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +0 -130
- package/skills/cometchat-flutter-v5-users-groups/SKILL.md +0 -152
- package/skills/cometchat-flutter-v6/SKILL.md +0 -446
- package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +0 -136
- package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +0 -89
- package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +0 -105
- package/skills/cometchat-flutter-v6-calls/references/call-session.md +0 -229
- package/skills/cometchat-flutter-v6-calls/references/device-management.md +0 -105
- package/skills/cometchat-flutter-v6-calls/references/group-calls.md +0 -190
- package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +0 -88
- package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +0 -125
- package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +0 -275
- package/skills/cometchat-flutter-v6-calls/references/ringing-integration.md +0 -171
- package/skills/cometchat-flutter-v6-calls/references/server-push-bridge.md +0 -93
- package/skills/cometchat-flutter-v6-calls/references/share-invite.md +0 -102
- package/skills/cometchat-flutter-v6-conversations/SKILL.md +0 -238
- package/skills/cometchat-flutter-v6-messages/SKILL.md +0 -384
- package/skills/cometchat-flutter-v6-theming/SKILL.md +0 -293
- package/skills/cometchat-flutter-v6-users-groups/SKILL.md +0 -224
- package/skills/cometchat-ios/SKILL.md +0 -325
- package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +0 -181
- package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +0 -45
- package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +0 -188
- package/skills/cometchat-ios-calls/references/call-layouts.md +0 -76
- package/skills/cometchat-ios-calls/references/call-session.md +0 -218
- package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +0 -357
- package/skills/cometchat-ios-calls/references/custom-ui.md +0 -322
- package/skills/cometchat-ios-calls/references/device-management.md +0 -171
- package/skills/cometchat-ios-calls/references/group-calls.md +0 -359
- package/skills/cometchat-ios-calls/references/idle-timeout.md +0 -184
- package/skills/cometchat-ios-calls/references/in-call-chat.md +0 -179
- package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +0 -196
- package/skills/cometchat-ios-calls/references/picture-in-picture.md +0 -246
- package/skills/cometchat-ios-calls/references/raise-hand.md +0 -26
- package/skills/cometchat-ios-calls/references/recording-screen-share.md +0 -252
- package/skills/cometchat-ios-calls/references/ringing-integration.md +0 -143
- package/skills/cometchat-ios-calls/references/server-apns-pushkit.md +0 -267
- package/skills/cometchat-ios-calls/references/share-invite.md +0 -148
- package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +0 -246
- package/skills/cometchat-ios-calls/references/voip-cert-setup.md +0 -166
- package/skills/cometchat-ios-theming/SKILL.md +0 -667
- package/skills/cometchat-native-bare-patterns/SKILL.md +0 -550
- package/skills/cometchat-native-calls/SKILL.md +0 -671
- package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +0 -203
- package/skills/cometchat-native-calls/references/call-layouts.md +0 -125
- package/skills/cometchat-native-calls/references/call-session.md +0 -182
- package/skills/cometchat-native-calls/references/custom-ui.md +0 -254
- package/skills/cometchat-native-calls/references/device-management.md +0 -158
- package/skills/cometchat-native-calls/references/expo-vs-bare.md +0 -179
- package/skills/cometchat-native-calls/references/group-calls.md +0 -296
- package/skills/cometchat-native-calls/references/idle-timeout.md +0 -128
- package/skills/cometchat-native-calls/references/in-call-chat.md +0 -145
- package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +0 -72
- package/skills/cometchat-native-calls/references/picture-in-picture.md +0 -276
- package/skills/cometchat-native-calls/references/raise-hand.md +0 -205
- package/skills/cometchat-native-calls/references/recording-screen-share.md +0 -169
- package/skills/cometchat-native-calls/references/ringing-integration.md +0 -118
- package/skills/cometchat-native-calls/references/server-push-bridge.md +0 -135
- package/skills/cometchat-native-calls/references/server-push-payloads.md +0 -193
- package/skills/cometchat-native-calls/references/share-invite.md +0 -146
- package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +0 -319
- package/skills/cometchat-native-components/SKILL.md +0 -628
- package/skills/cometchat-native-core/SKILL.md +0 -679
- package/skills/cometchat-native-customization/SKILL.md +0 -716
- package/skills/cometchat-native-expo-patterns/SKILL.md +0 -552
- package/skills/cometchat-native-features/SKILL.md +0 -638
- package/skills/cometchat-native-placement/SKILL.md +0 -509
- package/skills/cometchat-native-production/SKILL.md +0 -700
- package/skills/cometchat-native-push/SKILL.md +0 -594
- package/skills/cometchat-native-testing/SKILL.md +0 -582
- package/skills/cometchat-native-theming/SKILL.md +0 -681
- package/skills/cometchat-native-troubleshooting/SKILL.md +0 -501
- package/skills/cometchat-nextjs-patterns/SKILL.md +0 -899
- package/skills/cometchat-placement/SKILL.md +0 -1360
- package/skills/cometchat-production/SKILL.md +0 -1027
- package/skills/cometchat-react-calls/SKILL.md +0 -752
- package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +0 -146
- package/skills/cometchat-react-calls/references/call-layouts.md +0 -160
- package/skills/cometchat-react-calls/references/call-session.md +0 -235
- package/skills/cometchat-react-calls/references/custom-ui.md +0 -247
- package/skills/cometchat-react-calls/references/device-management.md +0 -210
- package/skills/cometchat-react-calls/references/group-calls.md +0 -257
- package/skills/cometchat-react-calls/references/idle-timeout.md +0 -188
- package/skills/cometchat-react-calls/references/in-call-chat.md +0 -212
- package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +0 -170
- package/skills/cometchat-react-calls/references/picture-in-picture.md +0 -245
- package/skills/cometchat-react-calls/references/raise-hand.md +0 -238
- package/skills/cometchat-react-calls/references/recording-screen-share.md +0 -144
- package/skills/cometchat-react-calls/references/ringing-integration.md +0 -255
- package/skills/cometchat-react-calls/references/server-web-push-vapid.md +0 -241
- package/skills/cometchat-react-calls/references/share-invite.md +0 -175
- package/skills/cometchat-react-calls/references/testing-calls-on-web.md +0 -216
- package/skills/cometchat-react-calls/references/virtual-background.md +0 -32
- package/skills/cometchat-react-calls/references/voip-and-web-push.md +0 -165
- package/skills/cometchat-react-patterns/SKILL.md +0 -628
- package/skills/cometchat-react-push/SKILL.md +0 -634
- package/skills/cometchat-react-router-patterns/SKILL.md +0 -758
- package/skills/cometchat-react-testing/SKILL.md +0 -413
- package/skills/cometchat-theming/SKILL.md +0 -498
- package/skills/cometchat-troubleshooting/SKILL.md +0 -294
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
# Use case — Marketplace (buyer ↔ seller)
|
|
2
|
-
|
|
3
|
-
A peer-to-peer marketplace where buyers and sellers communicate before/during a transaction. The shape: time-bounded chat between matched users, optional 1:1 video for product walkthroughs, communications archived for dispute resolution, identity controls so neither party can recontact post-transaction without going through the platform.
|
|
4
|
-
|
|
5
|
-
**Examples:** OfferUp, Airbnb host/guest messaging, eBay seller-buyer chat with video, Etsy custom-order discussions.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## End-to-end flow
|
|
10
|
-
|
|
11
|
-
```
|
|
12
|
-
1. Buyer expresses interest in a listing
|
|
13
|
-
→ Server creates a CometChat group with both buyer + seller
|
|
14
|
-
→ Group lives only for the duration of the deal (auto-archive after N days)
|
|
15
|
-
↓
|
|
16
|
-
2. Either party can initiate text chat in the group
|
|
17
|
-
↓
|
|
18
|
-
3. (Optional) Either party can initiate a video call to walk through the product
|
|
19
|
-
→ Identity is hidden — call shows "Buyer" or "Seller", not real names
|
|
20
|
-
↓
|
|
21
|
-
4. Transaction closes (purchase confirmed / canceled)
|
|
22
|
-
→ Group is locked: read-only for both parties, archived for dispute resolution
|
|
23
|
-
↓
|
|
24
|
-
5. After dispute window (90 days typical), group is hard-deleted
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## Identity protection
|
|
30
|
-
|
|
31
|
-
Don't expose real names/emails through the SDK. Use **opaque UIDs** that resolve to display strings only via your auth-gated lookup:
|
|
32
|
-
|
|
33
|
-
```ts
|
|
34
|
-
// On the server, when creating the deal group:
|
|
35
|
-
await cometchatApi.createGroup({
|
|
36
|
-
guid: `deal-${dealId}`,
|
|
37
|
-
members: [
|
|
38
|
-
{ uid: `buyer-${buyerId}`, scope: "participant" },
|
|
39
|
-
{ uid: `seller-${sellerId}`, scope: "participant" },
|
|
40
|
-
],
|
|
41
|
-
metadata: {
|
|
42
|
-
dealId,
|
|
43
|
-
expiresAt: Date.now() + 90 * 86400_000,
|
|
44
|
-
},
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
// Client-side: when CometChat returns a UID, resolve display name via your API
|
|
48
|
-
function resolveDisplayName(uid: string, viewerRole: "buyer" | "seller"): string {
|
|
49
|
-
// Only show "Seller" / "Buyer" — not real name
|
|
50
|
-
if (uid.startsWith("seller-")) return viewerRole === "buyer" ? "Seller" : "You";
|
|
51
|
-
if (uid.startsWith("buyer-")) return viewerRole === "seller" ? "Buyer" : "You";
|
|
52
|
-
return "Unknown";
|
|
53
|
-
}
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## Recommended call settings
|
|
59
|
-
|
|
60
|
-
```ts
|
|
61
|
-
const settings = {
|
|
62
|
-
layout: "SPOTLIGHT", // 1:1 focus
|
|
63
|
-
hideChangeLayoutButton: true,
|
|
64
|
-
|
|
65
|
-
hideRecordingButton: true, // No platform-side recording — privacy + dispute via chat archive
|
|
66
|
-
hideShareInviteButton: true, // Buyer ↔ seller only — don't allow inviting
|
|
67
|
-
hideScreenSharingButton: false, // Useful for "show me the actual condition"
|
|
68
|
-
hideChatButton: false, // For sharing photos/details mid-call
|
|
69
|
-
|
|
70
|
-
hideRaiseHandButton: true,
|
|
71
|
-
idleTimeoutPeriodBeforePrompt: 600_000, // 10min idle = end (sometimes deals die)
|
|
72
|
-
};
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
---
|
|
76
|
-
|
|
77
|
-
## Time-bounded access
|
|
78
|
-
|
|
79
|
-
After the deal closes (or expires), revoke access without deleting history:
|
|
80
|
-
|
|
81
|
-
```ts
|
|
82
|
-
// Server-side, when transaction closes:
|
|
83
|
-
await cometchatApi.updateGroup({
|
|
84
|
-
guid: `deal-${dealId}`,
|
|
85
|
-
metadata: {
|
|
86
|
-
status: "closed",
|
|
87
|
-
closedAt: Date.now(),
|
|
88
|
-
},
|
|
89
|
-
});
|
|
90
|
-
// Lock by switching group to "private" with no joinable handle
|
|
91
|
-
await cometchatApi.kickMembers({ guid, uids: [/* all participants */] });
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
Or — if your dispute window allows — keep them in the group as **read-only** by checking `metadata.status` client-side and disabling composer:
|
|
95
|
-
|
|
96
|
-
```tsx
|
|
97
|
-
function DealMessageComposer({ group }: Props) {
|
|
98
|
-
const isClosed = group.metadata?.status === "closed";
|
|
99
|
-
return (
|
|
100
|
-
<CometChatMessageComposer group={group} disabled={isClosed} />
|
|
101
|
-
// (Disable shows the input greyed out with explanation)
|
|
102
|
-
);
|
|
103
|
-
}
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
## Anti-patterns
|
|
109
|
-
|
|
110
|
-
1. **Using real user UIDs in CometChat.** Real names leak via SDK events. Always use opaque IDs.
|
|
111
|
-
2. **Allowing share-invite.** Bypasses identity controls — a savvy user shares the call link to a third party (their lawyer, advocate, etc.). Lock down to invitees only.
|
|
112
|
-
3. **No expiration.** Old deals' groups pile up. Use `metadata.expiresAt` + nightly cron to delete.
|
|
113
|
-
4. **Recording calls.** Liability risk — neither party gave consent + you may not be the legal data controller for their home interiors.
|
|
114
|
-
5. **Cross-platform message routing without checks.** Customer says "find me on WhatsApp" → links pasted in chat → bypass your platform's protection. Run profanity-filter + URL-detection extensions; flag attempts.
|
|
115
|
-
|
|
116
|
-
---
|
|
117
|
-
|
|
118
|
-
## Anti-fraud heuristics
|
|
119
|
-
|
|
120
|
-
```ts
|
|
121
|
-
// Hook into message-sent events
|
|
122
|
-
CometChat.addMessageListener("antifraud", new CometChat.MessageListener({
|
|
123
|
-
onTextMessageReceived: (msg) => {
|
|
124
|
-
const text = msg.getText();
|
|
125
|
-
// Off-platform routing attempts
|
|
126
|
-
const offPlatform = /\b(whatsapp|telegram|signal|wechat|email|@gmail|@yahoo)\b/i;
|
|
127
|
-
// Wire-fraud red flags
|
|
128
|
-
const wireFraud = /\b(western union|moneygram|gift card|crypto|bitcoin|wire transfer)\b/i;
|
|
129
|
-
if (offPlatform.test(text) || wireFraud.test(text)) {
|
|
130
|
-
// Quietly flag for review — don't tip the user that you're watching
|
|
131
|
-
api.flagMessage({ messageId: msg.getId(), reasons: { offPlatform: offPlatform.test(text), wireFraud: wireFraud.test(text) }});
|
|
132
|
-
}
|
|
133
|
-
},
|
|
134
|
-
}));
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
## Verification checklist
|
|
140
|
-
|
|
141
|
-
- [ ] Opaque UIDs used (no real names in CometChat)
|
|
142
|
-
- [ ] Display names resolved via auth-gated API
|
|
143
|
-
- [ ] `hideShareInviteButton: true`
|
|
144
|
-
- [ ] No platform-side recording
|
|
145
|
-
- [ ] Group `metadata.expiresAt` set + nightly archive job
|
|
146
|
-
- [ ] Anti-fraud message listener wired
|
|
147
|
-
- [ ] Profanity filter + URL detection extensions enabled
|
|
148
|
-
- [ ] Call settings: SPOTLIGHT layout, idle 10min
|
|
149
|
-
|
|
150
|
-
---
|
|
151
|
-
|
|
152
|
-
## Pointers
|
|
153
|
-
|
|
154
|
-
- `cometchat-react-calls/references/screen-sharing.md` — for product walkthrough
|
|
155
|
-
- `cometchat-react-extensions` — profanity-filter + URL-detection
|
|
156
|
-
- `cometchat-production` — server-minted auth tokens (don't leak the auth key in client)
|
|
157
|
-
- `cometchat-react/SKILL.md` — group + message UX
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
# Use case — Customer support / Help desk
|
|
2
|
-
|
|
3
|
-
A customer initiates contact with a support agent. The shape: customer arrives via "Talk to us" button, lands in a queue, gets matched to next available agent, voice-first (video optional), screen-share for troubleshooting, recording for QA + agent training, post-call CSAT survey.
|
|
4
|
-
|
|
5
|
-
**Examples:** Intercom voice/video upgrade, Zendesk Talk, custom help-desk integrations.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## End-to-end flow
|
|
10
|
-
|
|
11
|
-
```
|
|
12
|
-
1. Customer clicks "Get help" in your app
|
|
13
|
-
→ Server checks queue depth → routes to next agent OR shows wait estimate
|
|
14
|
-
↓
|
|
15
|
-
2. Server creates a support group (CometChat group keyed to ticket ID)
|
|
16
|
-
Both customer + agent are members
|
|
17
|
-
↓
|
|
18
|
-
3. Agent gets push notification "New support call"
|
|
19
|
-
↓
|
|
20
|
-
4. Agent accepts → call starts; customer auto-joins
|
|
21
|
-
↓
|
|
22
|
-
5. Mid-call: agent can request screen-share to see the customer's screen
|
|
23
|
-
→ Customer must explicitly allow (OS-level permission)
|
|
24
|
-
↓
|
|
25
|
-
6. Agent ends call → recording auto-uploaded to your QA pipeline
|
|
26
|
-
↓
|
|
27
|
-
7. Customer gets CSAT survey (1-5 rating + comment)
|
|
28
|
-
→ Stored against the ticket for agent performance reviews
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## Agent-side identity
|
|
34
|
-
|
|
35
|
-
Display the agent's first name + photo, NOT internal handle:
|
|
36
|
-
|
|
37
|
-
```ts
|
|
38
|
-
// Agent's CometChat user metadata (set when agent logs into the support tool):
|
|
39
|
-
await CometChat.updateUser(new CometChat.User({
|
|
40
|
-
uid: `agent-${employeeId}`,
|
|
41
|
-
name: "Sarah", // First name only — privacy + warmth
|
|
42
|
-
metadata: {
|
|
43
|
-
displayPhoto: "/agent-photos/sarah.png",
|
|
44
|
-
role: "Support Specialist",
|
|
45
|
-
department: "Billing",
|
|
46
|
-
},
|
|
47
|
-
}));
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
## Recommended call settings
|
|
53
|
-
|
|
54
|
-
```ts
|
|
55
|
-
const settings = {
|
|
56
|
-
layout: "SPOTLIGHT", // Speaker focus
|
|
57
|
-
hideChangeLayoutButton: false, // Agent may want grid for note-taking workflows
|
|
58
|
-
|
|
59
|
-
hideRecordingButton: true, // Don't let agent toggle — server-side auto-record
|
|
60
|
-
autoStartRecording: true, // QA recording is the policy
|
|
61
|
-
// (consent text in the in-app "By starting the call,
|
|
62
|
-
// you agree to recording for quality" notice)
|
|
63
|
-
hideScreenSharingButton: false, // Critical for troubleshooting
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
hideChatButton: false, // For pasting links/error messages
|
|
67
|
-
hideShareInviteButton: true, // Customer ↔ agent only
|
|
68
|
-
|
|
69
|
-
hideRaiseHandButton: true,
|
|
70
|
-
idleTimeoutPeriodBeforePrompt: 300_000, // 5min — short, agents are busy
|
|
71
|
-
};
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## Recording consent (one-party + platform notice)
|
|
77
|
-
|
|
78
|
-
For most customer-support flows, a "By starting this call, you agree to recording" notice in your app's pre-call screen is sufficient (one-party consent jurisdictions). For two-party-consent jurisdictions (CA, IL, FL), add an explicit consent dialog before connecting:
|
|
79
|
-
|
|
80
|
-
```tsx
|
|
81
|
-
function PreCallScreen({ onAccept, onCancel }: Props) {
|
|
82
|
-
return (
|
|
83
|
-
<dialog open className="precall">
|
|
84
|
-
<h2>Connect to support</h2>
|
|
85
|
-
<p>Estimated wait: 2 minutes</p>
|
|
86
|
-
<div role="note" aria-label="Recording notice">
|
|
87
|
-
<p><strong>This call will be recorded for quality assurance.</strong></p>
|
|
88
|
-
<p>By starting the call, you consent to recording. Recordings are
|
|
89
|
-
retained for 90 days, accessible to you on request, and never sold.</p>
|
|
90
|
-
</div>
|
|
91
|
-
<button onClick={onAccept}>Start call</button>
|
|
92
|
-
<button onClick={onCancel}>Cancel</button>
|
|
93
|
-
</dialog>
|
|
94
|
-
);
|
|
95
|
-
}
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
---
|
|
99
|
-
|
|
100
|
-
## Queue display + ETA
|
|
101
|
-
|
|
102
|
-
```tsx
|
|
103
|
-
function QueueWaiting({ ticketId }: Props) {
|
|
104
|
-
const [position, setPosition] = useState<number>(0);
|
|
105
|
-
const [eta, setEta] = useState<number>(0);
|
|
106
|
-
|
|
107
|
-
useEffect(() => {
|
|
108
|
-
// Server-side queue manager publishes updates via CometChat custom messages
|
|
109
|
-
const listener = CometChat.addMessageListener("queue-updates", new CometChat.MessageListener({
|
|
110
|
-
onCustomMessageReceived: (msg) => {
|
|
111
|
-
const data = msg.getCustomData();
|
|
112
|
-
if (data.ticketId === ticketId) {
|
|
113
|
-
setPosition(data.position);
|
|
114
|
-
setEta(data.etaSeconds);
|
|
115
|
-
}
|
|
116
|
-
},
|
|
117
|
-
}));
|
|
118
|
-
return () => CometChat.removeMessageListener("queue-updates");
|
|
119
|
-
}, [ticketId]);
|
|
120
|
-
|
|
121
|
-
return (
|
|
122
|
-
<div role="status" aria-live="polite">
|
|
123
|
-
<p>You're number {position} in line</p>
|
|
124
|
-
<p>Estimated wait: {Math.round(eta / 60)} minutes</p>
|
|
125
|
-
</div>
|
|
126
|
-
);
|
|
127
|
-
}
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
---
|
|
131
|
-
|
|
132
|
-
## Post-call CSAT
|
|
133
|
-
|
|
134
|
-
Fire immediately after call end; before they navigate away:
|
|
135
|
-
|
|
136
|
-
```tsx
|
|
137
|
-
function PostCallSurvey({ ticketId }: Props) {
|
|
138
|
-
const [rating, setRating] = useState<number | null>(null);
|
|
139
|
-
return (
|
|
140
|
-
<dialog open>
|
|
141
|
-
<h2>How was your call?</h2>
|
|
142
|
-
<fieldset>
|
|
143
|
-
<legend>Rate from 1 (poor) to 5 (excellent)</legend>
|
|
144
|
-
{[1, 2, 3, 4, 5].map((n) => (
|
|
145
|
-
<button key={n} onClick={() => setRating(n)} aria-pressed={rating === n}>
|
|
146
|
-
{n} ⭐
|
|
147
|
-
</button>
|
|
148
|
-
))}
|
|
149
|
-
</fieldset>
|
|
150
|
-
<textarea name="comment" placeholder="Anything else?" />
|
|
151
|
-
<button onClick={() => api.submitCsat({ ticketId, rating, comment })}>Submit</button>
|
|
152
|
-
</dialog>
|
|
153
|
-
);
|
|
154
|
-
}
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
---
|
|
158
|
-
|
|
159
|
-
## Anti-patterns
|
|
160
|
-
|
|
161
|
-
1. **No recording notice.** Two-party-consent law: lawsuit risk.
|
|
162
|
-
2. **Letting agent disable recording mid-call.** QA pipeline breaks. Hide the recording button server-side; only ops can disable for specific tickets via admin tool.
|
|
163
|
-
3. **Sharing internal employee handles.** Customer doesn't need agent's full name or company username — just first name.
|
|
164
|
-
4. **Recording forever.** Set 90-day retention; auto-delete via storage lifecycle.
|
|
165
|
-
5. **No queue UX.** Customer waits 5 minutes thinking it's broken → bounces. Show position + ETA.
|
|
166
|
-
6. **Agent transfers without context.** When transferring to another agent, pass the ticket history (custom messages with summary). Customer hates re-explaining.
|
|
167
|
-
|
|
168
|
-
---
|
|
169
|
-
|
|
170
|
-
## Verification checklist
|
|
171
|
-
|
|
172
|
-
- [ ] Recording is server-side auto-on; agent can't disable
|
|
173
|
-
- [ ] Pre-call screen shows recording notice + estimated wait
|
|
174
|
-
- [ ] Queue position + ETA visible during wait
|
|
175
|
-
- [ ] Customer ↔ agent only — share-invite hidden
|
|
176
|
-
- [ ] Idle timeout 5min (short on purpose)
|
|
177
|
-
- [ ] Post-call CSAT fires immediately
|
|
178
|
-
- [ ] Recording retention enforced via storage lifecycle (90d default)
|
|
179
|
-
- [ ] Agent transfer carries ticket context
|
|
180
|
-
|
|
181
|
-
---
|
|
182
|
-
|
|
183
|
-
## Pointers
|
|
184
|
-
|
|
185
|
-
- `cometchat-react-calls/references/recording.md` — recording config
|
|
186
|
-
- `cometchat-react-calls/references/screen-sharing.md` — for troubleshooting
|
|
187
|
-
- `cometchat-react/SKILL.md` — group + custom message patterns
|
|
188
|
-
- `cometchat-production` — credential hygiene
|
|
189
|
-
- `cometchat-react-extensions` — analytics for agent QA
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
# Use case — Team / Standup / Collaboration
|
|
2
|
-
|
|
3
|
-
Internal team meetings — standup, sprint review, retro, ad-hoc collaboration. The shape: 2–15 participants, all with mic + video on, TILE layout for equal visibility, screen-share for shared docs, in-call chat for links, optional recording for absent teammates.
|
|
4
|
-
|
|
5
|
-
**Examples:** Slack huddles, Microsoft Teams meetings, internal company calls.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## End-to-end flow
|
|
10
|
-
|
|
11
|
-
```
|
|
12
|
-
1. A user creates or joins a team channel (CometChat group already exists for the team)
|
|
13
|
-
↓
|
|
14
|
-
2. Anyone in the group can start a call → all members get a "huddle started" notification
|
|
15
|
-
↓
|
|
16
|
-
3. Members join voluntarily (no incoming-call ring — opt-in)
|
|
17
|
-
↓
|
|
18
|
-
4. Mic + camera ON by default (it's a team meeting, not a webinar)
|
|
19
|
-
↓
|
|
20
|
-
5. (Optional) Anyone can record; absent members get the link in the channel
|
|
21
|
-
↓
|
|
22
|
-
6. Screen-share + in-call chat for collaboration
|
|
23
|
-
↓
|
|
24
|
-
7. Last person leaves → call ends → optional recording posted to channel
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## Recommended call settings
|
|
30
|
-
|
|
31
|
-
```ts
|
|
32
|
-
const settings = {
|
|
33
|
-
layout: "TILE", // Equal visibility — team meetings
|
|
34
|
-
hideChangeLayoutButton: false, // Let users pick (some prefer SPOTLIGHT)
|
|
35
|
-
|
|
36
|
-
hideRecordingButton: false, // Anyone can record; team norms decide
|
|
37
|
-
autoStartRecording: false,
|
|
38
|
-
|
|
39
|
-
hideScreenSharingButton: false, // Critical
|
|
40
|
-
|
|
41
|
-
hideChatButton: false, // Side-chat for links
|
|
42
|
-
hideShareInviteButton: false, // Pull others in mid-call
|
|
43
|
-
|
|
44
|
-
hideRaiseHandButton: false, // For larger team meetings (10+)
|
|
45
|
-
|
|
46
|
-
idleTimeoutPeriodBeforePrompt: 1_800_000, // 30min — meetings can have lulls
|
|
47
|
-
};
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
## "Huddle started" notification
|
|
53
|
-
|
|
54
|
-
```ts
|
|
55
|
-
// When someone starts a call in a team group, fire a custom message
|
|
56
|
-
// so other members see "🟢 Huddle started by Sarah" in the channel.
|
|
57
|
-
async function startHuddle(group: CometChat.Group) {
|
|
58
|
-
// 1. Mint a session via the Chat SDK. A Call returned by initiateCall carries
|
|
59
|
-
// a server-issued sessionId — getSessionId() (chat-sdk Call.getSessionId).
|
|
60
|
-
// There is NO object-form CometChatCalls.startSession({sessionId,participants}).
|
|
61
|
-
const call = new CometChat.Call(
|
|
62
|
-
group.guid,
|
|
63
|
-
CometChat.CALL_TYPE.VIDEO,
|
|
64
|
-
CometChat.RECEIVER_TYPE.GROUP,
|
|
65
|
-
);
|
|
66
|
-
const initiatedCall = await CometChat.initiateCall(call); // returns Call
|
|
67
|
-
const sessionId = initiatedCall.getSessionId();
|
|
68
|
-
|
|
69
|
-
// 2. Post a custom message in the chat group so members see the huddle + can join
|
|
70
|
-
const customMessage = new CometChat.CustomMessage(
|
|
71
|
-
group.guid,
|
|
72
|
-
CometChat.RECEIVER_TYPE.GROUP,
|
|
73
|
-
"huddle_started",
|
|
74
|
-
{
|
|
75
|
-
sessionId,
|
|
76
|
-
startedBy: currentUserUid,
|
|
77
|
-
startedAt: Date.now(),
|
|
78
|
-
},
|
|
79
|
-
);
|
|
80
|
-
await CometChat.sendCustomMessage(customMessage);
|
|
81
|
-
|
|
82
|
-
// 3. The starter joins the session. Each joiner does the same with the shared
|
|
83
|
-
// sessionId: generateToken(sessionId) → joinSession(token, settings, container).
|
|
84
|
-
// (calls-sdk joinSession(callToken, SessionSettings, HTMLElement) is canonical;
|
|
85
|
-
// the old startSession(callToken, callSettings, container) is deprecated.)
|
|
86
|
-
const { token } = await CometChatCalls.generateToken(sessionId);
|
|
87
|
-
await CometChatCalls.joinSession(token, sessionSettings, callContainer);
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
Render in the chat list:
|
|
92
|
-
|
|
93
|
-
```tsx
|
|
94
|
-
function HuddleStartedBubble({ message }: Props) {
|
|
95
|
-
const data = message.getCustomData();
|
|
96
|
-
return (
|
|
97
|
-
<div role="alert" className="huddle-bubble">
|
|
98
|
-
<p>🟢 Huddle started by {resolveUserName(data.startedBy)}</p>
|
|
99
|
-
<button onClick={() => joinHuddle(data.sessionId)}>Join</button>
|
|
100
|
-
</div>
|
|
101
|
-
);
|
|
102
|
-
}
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
---
|
|
106
|
-
|
|
107
|
-
## Recording → channel post
|
|
108
|
-
|
|
109
|
-
When the call ends and a recording was made, auto-post a link to the channel:
|
|
110
|
-
|
|
111
|
-
```ts
|
|
112
|
-
// Server-side: triggered by CometChat call-ended webhook
|
|
113
|
-
app.post("/webhooks/call", async (req, res) => {
|
|
114
|
-
if (req.body.trigger === "call_ended" && req.body.data.recordingUrl) {
|
|
115
|
-
const { sessionId, recordingUrl } = req.body.data;
|
|
116
|
-
const groupGuid = sessionId.split("-").slice(0, 2).join("-").replace("huddle-", "");
|
|
117
|
-
|
|
118
|
-
// Post a custom message in the team's chat group
|
|
119
|
-
await cometchatApi.sendCustomMessage({
|
|
120
|
-
receiver: groupGuid,
|
|
121
|
-
receiverType: "group",
|
|
122
|
-
type: "huddle_recording",
|
|
123
|
-
data: {
|
|
124
|
-
recordingUrl,
|
|
125
|
-
durationSeconds: req.body.data.durationSeconds,
|
|
126
|
-
},
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
res.status(200).end();
|
|
130
|
-
});
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
---
|
|
134
|
-
|
|
135
|
-
## Anti-patterns
|
|
136
|
-
|
|
137
|
-
1. **Force-ringing all team members.** Annoying — they might be focused. Use channel notification + opt-in join.
|
|
138
|
-
2. **Assuming a screen-share quality knob exists in SessionSettings.** There is no `screenShareQuality` field on SessionSettings (verified against the calls-sdk types) — don't promise a non-API setting. Screen-share resolution is negotiated by the browser/WebRTC; tune the source (share a tab vs full screen) rather than a SessionSettings field.
|
|
139
|
-
3. **Idle timeout too short.** Standup runs 35min, idle of 600s ends it during a debate. Use 1800s (30min).
|
|
140
|
-
4. **Recording auto-on without team norms.** Some teams hate being recorded; surprise recording = trust hit. Default off; let team decide.
|
|
141
|
-
5. **No way to invite outside team mid-call.** Sometimes you need to pull in a designer or PM. Don't hide share-invite for team calls.
|
|
142
|
-
6. **Persistent sessions.** A "huddle" session that lasts forever bills forever. Auto-end when last person leaves.
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
## Auto-end on empty
|
|
147
|
-
|
|
148
|
-
```ts
|
|
149
|
-
// Subscribe to participant-left events; when count hits 0, end session
|
|
150
|
-
let participantCount = 0;
|
|
151
|
-
CometChatCalls.addEventListener("onParticipantJoined", () => participantCount++);
|
|
152
|
-
CometChatCalls.addEventListener("onParticipantLeft", () => {
|
|
153
|
-
participantCount--;
|
|
154
|
-
if (participantCount === 0) {
|
|
155
|
-
CometChatCalls.endSession();
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
## Verification checklist
|
|
163
|
-
|
|
164
|
-
- [ ] Mic + camera ON by default for joiners
|
|
165
|
-
- [ ] Layout TILE, but switchable
|
|
166
|
-
- [ ] Idle timeout 30min
|
|
167
|
-
- [ ] "Huddle started" custom message + Join button in channel
|
|
168
|
-
- [ ] Recording optional (not auto-on)
|
|
169
|
-
- [ ] Recording auto-posted to channel as link if made
|
|
170
|
-
- [ ] Auto-end when last participant leaves
|
|
171
|
-
- [ ] Share-invite available for pulling in non-team members
|
|
172
|
-
|
|
173
|
-
---
|
|
174
|
-
|
|
175
|
-
## Pointers
|
|
176
|
-
|
|
177
|
-
- `cometchat-react-calls/references/call-layouts.md` — TILE layout
|
|
178
|
-
- `cometchat-react-calls/references/in-call-chat.md` — side chat
|
|
179
|
-
- `cometchat-react-calls/references/screen-sharing.md` — for shared docs
|
|
180
|
-
- `cometchat-react/SKILL.md` — group + custom message patterns
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
# Use case — Telehealth (provider ↔ patient)
|
|
2
|
-
|
|
3
|
-
A virtual visit between a healthcare provider and a patient. The shape: pre-call waiting room, provider initiates the call, video-first, screen-share for sharing labs/imaging, in-call chat for sending links, optional recording with explicit consent, post-call note-taking workflow.
|
|
4
|
-
|
|
5
|
-
**Compliance:** HIPAA (US) + PIPEDA (CA) + GDPR (EU) — patient data in any form (incl. recording, screen-share content) is regulated. Telehealth integrations carry compliance risk that's outside CometChat's scope. Always:
|
|
6
|
-
- Run a Business Associate Agreement (BAA) with CometChat
|
|
7
|
-
- Run a separate BAA with your storage provider (S3, GCS) for recordings
|
|
8
|
-
- Surface explicit consent UI before recording starts
|
|
9
|
-
- Implement HIPAA-compliant audit logging
|
|
10
|
-
|
|
11
|
-
**The architecture below is a reference shape — pair it with your legal/compliance review before shipping.**
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## End-to-end flow
|
|
16
|
-
|
|
17
|
-
```
|
|
18
|
-
1. Patient books appointment in your scheduling system
|
|
19
|
-
↓
|
|
20
|
-
2. At appointment time, both join a "virtual waiting room"
|
|
21
|
-
(CometChat group keyed to appointment ID)
|
|
22
|
-
↓
|
|
23
|
-
3. Provider sees patient is waiting, clicks "Start visit"
|
|
24
|
-
→ CometChat.initiateCall(patientUid, sessionId=appointmentId, type="video")
|
|
25
|
-
↓
|
|
26
|
-
4. Patient gets incoming call → accepts → in-call
|
|
27
|
-
↓
|
|
28
|
-
5. (Optional) Provider taps "Start recording" → consent prompt to patient
|
|
29
|
-
→ only on patient accept does setRecordingOnCallStart fire
|
|
30
|
-
↓
|
|
31
|
-
6. (Optional) Provider screen-shares lab results
|
|
32
|
-
↓
|
|
33
|
-
7. (Optional) Provider opens in-call chat to send PDF/links
|
|
34
|
-
↓
|
|
35
|
-
8. Provider ends call → recording uploaded to your secure storage
|
|
36
|
-
→ patient redirected to feedback form
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## Recommended call settings (web/RN)
|
|
42
|
-
|
|
43
|
-
```ts
|
|
44
|
-
import { CometChatCalls } from "@cometchat/calls-sdk-javascript";
|
|
45
|
-
const settings = {
|
|
46
|
-
layout: "SPOTLIGHT", // Focus on the person speaking
|
|
47
|
-
hideChangeLayoutButton: true, // Don't let user switch — calmer UX
|
|
48
|
-
|
|
49
|
-
hideRecordingButton: false, // Provider needs it
|
|
50
|
-
autoStartRecording: false, // NEVER auto-record without consent
|
|
51
|
-
|
|
52
|
-
hideScreenSharingButton: false, // Sharing labs is core
|
|
53
|
-
|
|
54
|
-
hideChatButton: false, // For sending links/PDFs
|
|
55
|
-
hideShareInviteButton: true, // Patient ↔ provider only — no inviting
|
|
56
|
-
hideRaiseHandButton: true, // 1:1 — no need
|
|
57
|
-
|
|
58
|
-
idleTimeoutPeriodBeforePrompt: 600_000, // 10min — long enough for thinking pauses
|
|
59
|
-
};
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
## Two-party consent recording
|
|
65
|
-
|
|
66
|
-
Two-party-consent jurisdictions (CA, IL, FL, MD, MA, MT, NH, PA, WA + Canada + EU) require explicit consent from BOTH parties before recording starts. Implement a banner, not just a small "REC" indicator:
|
|
67
|
-
|
|
68
|
-
```tsx
|
|
69
|
-
function RecordingConsentBanner({ onAccept, onReject }: Props) {
|
|
70
|
-
return (
|
|
71
|
-
<div role="alertdialog" aria-labelledby="rec-title" className="rec-banner">
|
|
72
|
-
<h2 id="rec-title">Recording requested</h2>
|
|
73
|
-
<p>
|
|
74
|
-
Your provider would like to record this visit for medical records.
|
|
75
|
-
The recording will be stored securely and accessible to you in your
|
|
76
|
-
patient portal.
|
|
77
|
-
</p>
|
|
78
|
-
<button onClick={onAccept}>I consent to recording</button>
|
|
79
|
-
<button onClick={onReject}>I do not consent</button>
|
|
80
|
-
</div>
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// Provider's "Start recording" button:
|
|
85
|
-
async function requestRecording() {
|
|
86
|
-
// 1. Send a CometChat custom message asking for consent
|
|
87
|
-
await CometChat.sendCustomMessage(/* type: 'recording_request', target: patientUid */);
|
|
88
|
-
// 2. Wait for patient response (custom message back: 'recording_consent_granted')
|
|
89
|
-
// 3. ONLY THEN call CometChatCalls.startRecording()
|
|
90
|
-
}
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
---
|
|
94
|
-
|
|
95
|
-
## Waiting room pattern
|
|
96
|
-
|
|
97
|
-
```tsx
|
|
98
|
-
function WaitingRoom({ appointmentId }: Props) {
|
|
99
|
-
const [providerOnline, setProviderOnline] = useState(false);
|
|
100
|
-
|
|
101
|
-
useEffect(() => {
|
|
102
|
-
// Subscribe to the appointment group; provider's presence triggers visit start
|
|
103
|
-
const groupGuid = `appt-${appointmentId}`;
|
|
104
|
-
const listener = CometChat.addGroupMemberListener(/* fires when provider joins */);
|
|
105
|
-
return () => CometChat.removeGroupMemberListener(listener);
|
|
106
|
-
}, [appointmentId]);
|
|
107
|
-
|
|
108
|
-
return (
|
|
109
|
-
<div role="status" aria-live="polite">
|
|
110
|
-
{providerOnline ? <p>Your provider is ready. The visit will start shortly.</p>
|
|
111
|
-
: <p>Please wait. Your provider will be with you soon.</p>}
|
|
112
|
-
<button onClick={cancelVisit}>Leave waiting room</button>
|
|
113
|
-
</div>
|
|
114
|
-
);
|
|
115
|
-
}
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
`role="status"` + `aria-live="polite"` so a screen reader announces the state change without interrupting (vs `assertive` which interrupts).
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
## Anti-patterns
|
|
123
|
-
|
|
124
|
-
1. **Recording without explicit consent UI.** Two-party-consent law violation = lawsuit risk + HIPAA non-compliance.
|
|
125
|
-
2. **Storing recordings in default S3.** Use a HIPAA-compliant tier with BAA + KMS encryption + audit logging.
|
|
126
|
-
3. **No idle timeout.** Patient or provider walks away → call runs forever → bills + privacy concern (if recording).
|
|
127
|
-
4. **Sharing PHI in call settings.** Don't put `patientName` in `callerName` — use opaque IDs in the SDK config; resolve display names client-side from your auth-gated user store.
|
|
128
|
-
5. **Sending custom-message PII without encryption.** CometChat E2E encryption is opt-in (Extensions) — turn it on for telehealth.
|
|
129
|
-
|
|
130
|
-
---
|
|
131
|
-
|
|
132
|
-
## Verification checklist
|
|
133
|
-
|
|
134
|
-
- [ ] BAA executed with CometChat
|
|
135
|
-
- [ ] BAA executed with recording storage provider
|
|
136
|
-
- [ ] Recording UX includes explicit consent prompt + audit log
|
|
137
|
-
- [ ] Waiting room → call transition is automatic on provider initiate
|
|
138
|
-
- [ ] Idle timeout 10min
|
|
139
|
-
- [ ] Layout locked to SPOTLIGHT
|
|
140
|
-
- [ ] Share-invite hidden (1:1 only)
|
|
141
|
-
- [ ] No PII in SDK config or push payloads — only opaque IDs
|
|
142
|
-
- [ ] HIPAA audit log captures: visit start/end, recording start/stop, screen-share start/stop, file send
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
## Pointers
|
|
147
|
-
|
|
148
|
-
- `cometchat-react-calls/references/recording.md` — recording reference
|
|
149
|
-
- `cometchat-react-calls/references/screen-sharing.md` — screen share
|
|
150
|
-
- `cometchat-react-calls/references/in-call-chat.md` — link/file sending
|
|
151
|
-
- `cometchat-react-calls/references/idle-timeout.md` — idle timeout config
|
|
152
|
-
- `cometchat-production` skill — credential hygiene for sensitive integrations
|
|
153
|
-
- `cometchat-react-extensions` — message encryption setup
|