
Build Zoom Contact Center App
Wire Zoom Contact Center chat, video, and scheduled-callback flows into an Android app with correct init, launch, and teardown.
Overview
build-zoom-contact-center-app is an agent skill for the Build phase that documents Zoom Contact Center Android SDK initialization, channel launch, campaign switching, and teardown patterns.
Install
npx skills add https://github.com/anthropics/knowledge-work-plugins --skill build-zoom-contact-center-appWhat is this skill?
- Documents Application.onCreate one-time SDK initialization and optional context user name before channel launch
- Covers ZoomCCItem fields: sdkType, entryId or apiKey, serverType, and campaign metadata when needed
- Separates chat/ZVA login-then-fetchUI flows from video preview, auto-join, and internal login behavior
- Defines teardown: endChat/endVideo, logoff for callbacks, and releaseZoomCCService on onDestroy
- Campaign mode: fetch campaigns, select channel from metadata, re-init in campaign mode, and release conflicting services
Adoption & trust: 836 installs on skills.sh; 19.6k GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You need Zoom chat, video, or callback in your Android app but the init, login, fetchUI, and cleanup steps differ per channel and are easy to get wrong.
Who is it for?
Indie Android developers adding Zoom Contact Center to a customer-support or sales app with multiple engagement types.
Skip if: Teams only needing web widgets, iOS-only Zoom apps, or backends with no mobile CCI embedding.
When should I use this skill?
Building or refactoring Zoom Contact Center flows on Android (init, channel launch, campaign mode, cleanup).
What do I get? / Deliverables
You follow a repeatable Kotlin-oriented lifecycle for each CCI channel and safe teardown before shipping the integration.
- Channel-specific init and listener setup
- Launch and teardown checklist for chat/video/callback
- Campaign-mode switch sequence
Recommended Skills
Journey fit
Embedding a third-party contact-center SDK is core product build work once the app shell exists. Zoom CCI is an external service integration with lifecycle listeners and channel-specific entry IDs or API keys.
How it compares
Use for Android CCI lifecycle patterns, not a generic CRM or helpdesk MCP connector.
Common Questions / FAQ
Who is build-zoom-contact-center-app for?
Solo and small-team Android developers integrating Zoom Contact Center chat, video, or scheduled callbacks into a Kotlin app.
When should I use build-zoom-contact-center-app?
During Build when wiring ZoomCCInterface services, entry IDs or API keys, listeners, and onDestroy release paths; also when switching campaign-mode channels without leaking prior sessions.
Is build-zoom-contact-center-app safe to install?
Review the Security Audits panel on this Prism page and treat the skill as integration documentation—the real SDK still needs your keys, network permissions, and privacy review.
SKILL.md
READMESKILL.md - Build Zoom Contact Center App
# Android SDK Lifecycle ## Startup 1. Initialize once in `Application.onCreate`. 2. Optionally set/update context user name before channel launch. ## Channel Initialization 1. Get service from `ZoomCCInterface`. 2. Build `ZoomCCItem` with: - `sdkType` - `entryId` or `apiKey` - `serverType` - campaign fields when needed 3. `service.init(item)`. 4. Add listener(s). ## Launch 1. Chat/ZVA: - call `login()` then `fetchUI()`. 2. Video: - configure preview/auto-join options as needed. - call `fetchUI()`; login is typically internal for video flow. 3. Scheduled callback: - init with `apiKey`. - `fetchUI()`. ## End and Cleanup 1. End engagement (`endChat` / `endVideo`) when needed. 2. `logoff()` when you need to stop callbacks. 3. `releaseZoomCCService(key)` in teardown paths (`onDestroy`). ## Campaign Mode 1. Request campaigns with campaign API key. 2. Select channel from campaign metadata. 3. Reinitialize service using campaign-mode item. 4. Release or end conflicting channel services before switch. # Android Service Patterns ## Chat Pattern ```kotlin val service = ZoomCCInterface.getZoomCCChatService() service.init( ZoomCCItem( entryId = chatEntryId, sdkType = ZoomCCIInterfaceType.CHAT, serverType = CCServerType.CCServerWWW ) ) service.addListener(object : ZoomCCChatListener { override fun unreadMsgCountChanged(count: Int) {} override fun onClientEvent(event: ClientEvent) {} override fun onEngagementEnd(engagementId: String) {} override fun onEngagementStart(engagementId: String) {} override fun onLoginStatus(status: IMStatus?) {} override fun onError(error: Int, detail: Long, description: String) {} }) service.login() service.fetchUI() ``` ## Video Pattern ```kotlin val service = ZoomCCInterface.getZoomCCVideoService() service.init( ZoomCCItem( entryId = videoEntryId, sdkType = ZoomCCIInterfaceType.VIDEO, serverType = CCServerType.CCServerWWW ) ) service.setVideoPreviewOption(VideoPreviewOption.ZmCCVideoPreviewOptionDefault) service.setAutoJoinWhenVideoCreated(false) service.setUseBackwardFacingCameraByDefault(false) service.addListener(object : ZoomCCVideoListener {}) service.fetchUI() ``` ## Scheduled Callback Pattern ```kotlin val service = ZoomCCInterface.getZoomCCScheduledCallbackService() service.init( ZoomCCItem( apiKey = callbackApiKey, sdkType = ZoomCCIInterfaceType.SCHEDULED_CALLBACK, serverType = CCServerType.CCServerWWW ) ) service.fetchUI() ``` ## Cleanup Pattern ```kotlin override fun onDestroy() { ZoomCCInterface.releaseZoomCCService(chatEntryId) ZoomCCInterface.releaseZoomCCService(videoEntryId) ZoomCCInterface.releaseZoomCCService(callbackApiKey) super.onDestroy() } ``` # Android Reference Map Primary reference: - https://marketplacefront.zoom.us/sdk/contact/android/index.html ## Core Types - `ZoomCCInterface` - `ZoomCCItem` - `ZoomCCContext` - `ZoomCCService` - `ZoomCCChatService` - `ZoomCCVideoService` - `ZoomCCScheduledCallbackService` ## Listener Types - `ZoomCCServiceListener` - `ZoomCCChatListener` - `ZoomCCVideoListener` ## Enums - `ZoomCCIInterfaceType` - `ClientEvent` - `IMStatus` - `CCServerType` - `VideoPreviewOption` ## Common Methods - SDK init/context: - `ZoomCCInterface.init(...)` - `ZoomCCInterface.setContext(...)` - service factory: - `getZoomCCChatService()` - `getZoomCCVideoService()` - `getZoomCCZVAService()` - `getZoomCCScheduledCallbackService()` - service lifecycle: - `init(item)`, `login()`, `logoff()`, `fetchUI()` - engagement control: - `endChat()`, `endVideo()` - release: - `releaseZoomCCService(key)` ## Deprecation Notes - Review `deprecated.html` in each SDK version package. - Keep runtime guards for enum/value additions and optional callbacks. # Contact Center Android 5-Minute Preflight Runbook Use this before deep debugging. ## Skill Doc Standard Note - Skill entrypoint is `SKILL.md`. - This runbook is an opera