[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FKH1YVAHVST06HP9DXT5RY":3,"skill-same:01M6FKH1YVAHVST06HP9DXT5RY":48},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":21,"linkOnly":22,"markdownContent":23,"markdownBody":23,"frontMatter":24,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":28,"repositoryHtmlUrl":29,"repositoryHomepageUrl":30,"ownerHtmlUrl":31,"ownerBlogUrl":6,"ownerDescription":32,"updatedAt":33,"install":34,"resources":47},"01M6FKH1YVAHVST06HP9DXT5RY","team-chat",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fteam-chat\u002FSKILL.md",[],[18,19,20],"team","chat","team chat","2026-11-10 10:12:30",false,"# Zoom Team Chat Development\n\nBuild powerful messaging integrations and interactive chatbots for Zoom Team Chat. This skill covers **two distinct APIs** - make sure to choose the right one for your use case.\n\n## Read This First (Critical)\n\nThere are two different integration types and they are not interchangeable:\n\n1. **Team Chat API (user type)**\n   - Sends messages as a real authenticated user\n   - Uses **User OAuth** (`authorization_code`)\n   - Endpoint family: `\u002Fv2\u002Fchat\u002Fusers\u002F...`\n\n2. **Chatbot API (bot type)**\n   - Sends messages as your bot identity\n   - Uses **Client Credentials** (`client_credentials`)\n   - Endpoint family: `\u002Fv2\u002Fim\u002Fchat\u002Fmessages`\n\nIf you choose the wrong type early, auth\u002Fscopes\u002Fendpoints all mismatch and implementation fails.\n\n**Official Documentation**: https:\u002F\u002Fdevelopers.zoom.us\u002Fdocs\u002Fteam-chat\u002F  \n**Chatbot Documentation**: https:\u002F\u002Fdevelopers.zoom.us\u002Fdocs\u002Fteam-chat\u002Fchatbot\u002Fextend\u002F  \n**API Reference**: https:\u002F\u002Fdevelopers.zoom.us\u002Fdocs\u002Fapi\u002Frest\u002Freference\u002Fchatbot\u002F\n\n## Quick Links\n\n**New to Team Chat? Follow this path:**\n\n1. **[Get Started](get-started.md)** - End-to-end fast path (user type vs bot type)\n2. **[Choose Your API](concepts\u002Fapi-selection.md)** - Team Chat API vs Chatbot API\n3. **[Environment Setup](concepts\u002Fenvironment-setup.md)** - Credentials, scopes, app configuration\n4. **[OAuth Setup](examples\u002Foauth-setup.md)** - Complete authentication flow\n5. **[Send First Message](examples\u002Fsend-message.md)** - Working code to send messages\n\n**Reference:**\n- **[Chatbot Message Cards](references\u002Fmessage-cards.md)** - Complete card component reference\n- **[Webhook Events](references\u002Fwebhook-events.md)** - All webhook event types\n- **[API Reference](references\u002Fapi-reference.md)** - Endpoints, methods, parameters\n- **[Sample Applications](references\u002Fsamples.md)** - 10+ official sample apps\n- **Integrated Index** - see the section below in this file\n\n**Having issues?**\n- Authentication errors → [OAuth Troubleshooting](troubleshooting\u002Foauth-issues.md)\n- Webhook not receiving events → [Webhook Setup Guide](troubleshooting\u002Fwebhook-issues.md)\n- Messages not sending → [Common Issues](troubleshooting\u002Fcommon-issues.md)\n- Start with quick checks → [5-Minute Runbook](RUNBOOK.md)\n\n**OAuth endpoint sanity check:**\n- Authorize URL: `https:\u002F\u002Fzoom.us\u002Foauth\u002Fauthorize`\n- Token URL: `https:\u002F\u002Fzoom.us\u002Foauth\u002Ftoken`\n- If `\u002Foauth\u002Ftoken` returns 404\u002FHTML, use `https:\u002F\u002Fzoom.us\u002Foauth\u002Ftoken`.\n\n**Building Interactive Bots?**\n- [Button Actions](examples\u002Fbutton-actions.md) - Handle button clicks\n- [Form Submissions](examples\u002Fform-submissions.md) - Process form data\n- [Slash Commands](examples\u002Fslash-commands.md) - Create custom commands\n\n## Quick Decision: Which API?\n\n| Use Case | API to Use |\n|----------|------------|\n| Send notifications from scripts\u002FCI\u002FCD | **Team Chat API** |\n| Automate messages as a user | **Team Chat API** |\n| Build an interactive chatbot | **Chatbot API** |\n| Respond to slash commands | **Chatbot API** |\n| Create messages with buttons\u002Fforms | **Chatbot API** |\n| Handle user interactions | **Chatbot API** |\n\n### Team Chat API (User-Level)\n- Messages appear as sent by **authenticated user**\n- Requires **User OAuth** (authorization_code flow)\n- Endpoint: `POST https:\u002F\u002Fapi.zoom.us\u002Fv2\u002Fchat\u002Fusers\u002Fme\u002Fmessages`\n- Scopes: `chat_message:write`, `chat_channel:read`\n\n### Chatbot API (Bot-Level)\n- Messages appear as sent by your **bot**\n- Requires **Client Credentials** grant\n- Endpoint: `POST https:\u002F\u002Fapi.zoom.us\u002Fv2\u002Fim\u002Fchat\u002Fmessages`\n- Scopes: `imchat:bot` (auto-added)\n- **Rich cards**: buttons, forms, dropdowns, images\n\n## Prerequisites\n\n### System Requirements\n\n- Zoom account\n- Account owner, admin, or **Zoom for developers** role enabled\n  - To enable: **User Management** → **Roles** → **Role Settings** → **Advanced features** → Enable **Zoom for developers**\n\n### Create Zoom App\n\n1. Go to [Zoom App Marketplace](https:\u002F\u002Fmarketplace.zoom.us\u002F)\n2. Click **Develop** → **Build App**\n3. Select **General App** (OAuth)\n\n> ⚠️ **Do NOT use Server-to-Server OAuth** - S2S apps don't have the Chatbot\u002FTeam Chat feature. Only General App (OAuth) supports chatbots.\n\n### Required Credentials\n\nFrom Zoom Marketplace → Your App:\n\n| Credential | Location | Used By |\n|------------|----------|---------|\n| Client ID | App Credentials → Development | Both APIs |\n| Client Secret | App Credentials → Development | Both APIs |\n| Account ID | App Credentials → Development | Chatbot API |\n| Bot JID | Features → Chatbot → Bot Credentials | Chatbot API |\n| Secret Token | Features → Team Chat Subscriptions | Chatbot API |\n\n**See**: [Environment Setup Guide](concepts\u002Fenvironment-setup.md) for complete configuration steps.\n\n## Quick Start: Team Chat API\n\nSend a message as a user:\n\n```javascript\n\u002F\u002F 1. Get access token via OAuth\nconst accessToken = await getOAuthToken(); \u002F\u002F See examples\u002Foauth-setup.md\n\n\u002F\u002F 2. Send message to channel\nconst response = await fetch('https:\u002F\u002Fapi.zoom.us\u002Fv2\u002Fchat\u002Fusers\u002Fme\u002Fmessages', {\n  method: 'POST',\n  headers: {\n    'Authorization': `Bearer ${accessToken}`,\n    'Content-Type': 'application\u002Fjson'\n  },\n  body: JSON.stringify({\n    message: 'Hello from CI\u002FCD pipeline!',\n    to_channel: 'CHANNEL_ID'\n  })\n});\n\nconst data = await response.json();\n\u002F\u002F { \"id\": \"msg_abc123\", \"date_time\": \"2024-01-15T10:30:00Z\" }\n```\n\n**Complete example**: [Send Message Guide](examples\u002Fsend-message.md)\n\n## Quick Start: Chatbot API\n\nBuild an interactive chatbot:\n\n```javascript\n\u002F\u002F 1. Get chatbot token (client_credentials)\nasync function getChatbotToken() {\n  const credentials = Buffer.from(\n    `${CLIENT_ID}:${CLIENT_SECRET}`\n  ).toString('base64');\n  \n  const response = await fetch('https:\u002F\u002Fzoom.us\u002Foauth\u002Ftoken', {\n    method: 'POST',\n    headers: {\n      'Authorization': `Basic ${credentials}`,\n      'Content-Type': 'application\u002Fx-www-form-urlencoded'\n    },\n    body: 'grant_type=client_credentials'\n  });\n  \n  return (await response.json()).access_token;\n}\n\n\u002F\u002F 2. Send chatbot message with buttons\nconst response = await fetch('https:\u002F\u002Fapi.zoom.us\u002Fv2\u002Fim\u002Fchat\u002Fmessages', {\n  method: 'POST',\n  headers: {\n    'Authorization': `Bearer ${accessToken}`,\n    'Content-Type': 'application\u002Fjson'\n  },\n  body: JSON.stringify({\n    robot_jid: process.env.ZOOM_BOT_JID,\n    to_jid: payload.toJid,           \u002F\u002F From webhook\n    account_id: payload.accountId,   \u002F\u002F From webhook\n    content: {\n      head: {\n        text: 'Build Notification',\n        sub_head: { text: 'CI\u002FCD Pipeline' }\n      },\n      body: [\n        { type: 'message', text: 'Deployment successful!' },\n        {\n          type: 'fields',\n          items: [\n            { key: 'Branch', value: 'main' },\n            { key: 'Commit', value: 'abc123' }\n          ]\n        },\n        {\n          type: 'actions',\n          items: [\n            { text: 'View Logs', value: 'view_logs', style: 'Primary' },\n            { text: 'Dismiss', value: 'dismiss', style: 'Default' }\n          ]\n        }\n      ]\n    }\n  })\n});\n```\n\n**Complete example**: [Chatbot Setup Guide](examples\u002Fchatbot-setup.md)\n\n## Key Features\n\n### Team Chat API\n\n| Feature | Description |\n|---------|-------------|\n| **Send Messages** | Post messages to channels or direct messages |\n| **List Channels** | Get user's channels with metadata |\n| **Create Channels** | Create public\u002Fprivate channels programmatically |\n| **Threaded Replies** | Reply to specific messages in threads |\n| **Edit\u002FDelete** | Modify or remove messages |\n\n### Chatbot API\n\n| Feature | Description |\n|---------|-------------|\n| **Rich Message Cards** | Headers, images, fields, buttons, forms |\n| **Slash Commands** | Custom `\u002Fcommands` trigger webhooks |\n| **Button Actions** | Interactive buttons with webhook callbacks |\n| **Form Submissions** | Collect user input with forms |\n| **Dropdown Selects** | Channel, member, date\u002Ftime pickers |\n| **LLM Integration** | Easy integration with Claude, GPT, etc. |\n\n## Webhook Events (Chatbot API)\n\n| Event | Trigger | Use Case |\n|-------|---------|----------|\n| `bot_notification` | User messages bot or uses slash command | Process commands, integrate LLM |\n| `bot_installed` | Bot added to account | Initialize bot state |\n| `interactive_message_actions` | Button clicked | Handle button actions |\n| `chat_message.submit` | Form submitted | Process form data |\n| `app_deauthorized` | Bot removed | Cleanup |\n\n**See**: [Webhook Events Reference](references\u002Fwebhook-events.md)\n\n## Message Card Components\n\nBuild rich interactive messages with these components:\n\n| Component | Description |\n|-----------|-------------|\n| **header** | Title and subtitle |\n| **message** | Plain text |\n| **fields** | Key-value pairs |\n| **actions** | Buttons (Primary, Danger, Default styles) |\n| **section** | Colored sidebar grouping |\n| **attachments** | Images with links |\n| **divider** | Horizontal line |\n| **form_field** | Text input |\n| **dropdown** | Select menu |\n| **date_picker** | Date selection |\n\n**See**: [Message Cards Reference](references\u002Fmessage-cards.md) for complete component catalog\n\n## Architecture Patterns\n\n### Chatbot Lifecycle\n\n```\nUser types \u002Fcommand → Webhook receives bot_notification\n                            ↓\n                     payload.cmd = \"user's input\"\n                            ↓\n                     Process command\n                            ↓\n                     Send response via sendChatbotMessage()\n```\n\n### LLM Integration Pattern\n\n```javascript\ncase 'bot_notification': {\n  const { toJid, cmd, accountId } = payload;\n  \n  \u002F\u002F 1. Call your LLM\n  const llmResponse = await callClaude(cmd);\n  \n  \u002F\u002F 2. Send response back\n  await sendChatbotMessage(toJid, accountId, {\n    body: [{ type: 'message', text: llmResponse }]\n  });\n}\n```\n\n**See**: [LLM Integration Guide](examples\u002Fllm-integration.md)\n\n## Sample Applications\n\n| Sample | Description | Link |\n|--------|-------------|------|\n| **Chatbot Quickstart** | Official tutorial (recommended start) | [GitHub](https:\u002F\u002Fgithub.com\u002Fzoom\u002Fchatbot-nodejs-quickstart) |\n| **Claude Chatbot** | AI chatbot with Anthropic Claude | [GitHub](https:\u002F\u002Fgithub.com\u002Fzoom\u002Fzoom-chatbot-claude-sample) |\n| **Unsplash Chatbot** | Image search with database | [GitHub](https:\u002F\u002Fgithub.com\u002Fzoom\u002Funsplash-chatbot) |\n| **ERP Chatbot** | Oracle ERP with scheduled alerts | [GitHub](https:\u002F\u002Fgithub.com\u002Fzoom\u002Fzoom-erp-chatbot-sample) |\n| **Task Manager** | Full CRUD app | [GitHub](https:\u002F\u002Fgithub.com\u002Fzoom\u002Ftask-manager-sample) |\n\n**See**: [Sample Applications Guide](references\u002Fsamples.md) for analysis of all 10 samples\n\n## Common Operations\n\n### Send Message to Channel\n\n```javascript\n\u002F\u002F Team Chat API\nawait fetch('https:\u002F\u002Fapi.zoom.us\u002Fv2\u002Fchat\u002Fusers\u002Fme\u002Fmessages', {\n  method: 'POST',\n  headers: { 'Authorization': `Bearer ${token}` },\n  body: JSON.stringify({\n    message: 'Hello!',\n    to_channel: 'CHANNEL_ID'\n  })\n});\n```\n\n### Handle Button Click\n\n```javascript\n\u002F\u002F Webhook handler\ncase 'interactive_message_actions': {\n  const { actionItem, toJid, accountId } = payload;\n  \n  if (actionItem.value === 'approve') {\n    await sendChatbotMessage(toJid, accountId, {\n      body: [{ type: 'message', text: '✅ Approved!' }]\n    });\n  }\n}\n```\n\n### Verify Webhook Signature\n\n```javascript\nfunction verifyWebhook(req) {\n  const message = `v0:${req.headers['x-zm-request-timestamp']}:${JSON.stringify(req.body)}`;\n  const hash = crypto.createHmac('sha256', process.env.ZOOM_VERIFICATION_TOKEN)\n    .update(message)\n    .digest('hex');\n  return req.headers['x-zm-signature'] === `v0=${hash}`;\n}\n```\n\n## Deployment\n\n### ngrok for Local Development\n\n```bash\n# Install ngrok\nnpm install -g ngrok\n\n# Expose local server\nngrok http 4000\n\n# Use HTTPS URL as Bot Endpoint URL in Zoom Marketplace\n# Example: https:\u002F\u002Fabc123.ngrok.io\u002Fwebhook\n```\n\n### Production Deployment\n\n**See**: [Deployment Guide](concepts\u002Fdeployment.md) for:\n- Nginx reverse proxy setup\n- Base path configuration\n- OAuth redirect URI setup\n\n## Limitations\n\n| Limit | Value |\n|-------|-------|\n| Message length | 4,096 characters |\n| File size | 512 MB |\n| Members per channel | 10,000 |\n| Channels per user | 500 |\n\n## Security Best Practices\n\n1. **Verify webhook signatures** - Always validate using `x-zm-signature` header\n2. **Sanitize messages** - Limit to 4096 chars, remove control characters\n3. **Validate JIDs** - Check format: `user@domain` or `channel@domain`\n4. **Environment variables** - Never hardcode credentials\n5. **Use HTTPS** - Required for production webhooks\n\n**See**: [Security Best Practices](concepts\u002Fsecurity.md)\n\n## Complete Documentation Library\n\n### Core Concepts (Start Here!)\n- **[API Selection Guide](concepts\u002Fapi-selection.md)** - Choose Team Chat API vs Chatbot API\n- **[Environment Setup](concepts\u002Fenvironment-setup.md)** - Complete credentials guide\n- **[Authentication Flows](concepts\u002Fauthentication.md)** - OAuth vs Client Credentials\n- **[Webhook Architecture](concepts\u002Fwebhooks.md)** - How webhooks work\n- **[Message Card Structure](concepts\u002Fmessage-structure.md)** - Card component hierarchy\n\n### Complete Examples\n- **[OAuth Setup](examples\u002Foauth-setup.md)** - Full OAuth implementation\n- **[Send Message](examples\u002Fsend-message.md)** - Team Chat API message sending\n- **[Chatbot Setup](examples\u002Fchatbot-setup.md)** - Complete chatbot with webhooks\n- **[Button Actions](examples\u002Fbutton-actions.md)** - Handle interactive buttons\n- **[Form Submissions](examples\u002Fform-submissions.md)** - Process form data\n- **[Slash Commands](examples\u002Fslash-commands.md)** - Create custom commands\n- **[LLM Integration](examples\u002Fllm-integration.md)** - Claude\u002FGPT integration\n- **[Scheduled Alerts](examples\u002Fscheduled-alerts.md)** - Cron + incoming webhooks\n- **[Channel Management](examples\u002Fchannel-management.md)** - Create\u002Fmanage channels\n\n### References\n- **[API Reference](references\u002Fapi-reference.md)** - All endpoints and methods\n- **[Webhook Events](references\u002Fwebhook-events.md)** - Complete event reference\n- **[Message Cards](references\u002Fmessage-cards.md)** - All card components\n- **[Sample Applications](references\u002Fsamples.md)** - Analysis of 10 official samples\n- **[Error Codes](references\u002Ferror-codes.md)** - Error handling guide\n\n### Troubleshooting\n- **[OAuth Issues](troubleshooting\u002Foauth-issues.md)** - Authentication failures\n- **[Webhook Issues](troubleshooting\u002Fwebhook-issues.md)** - Webhook debugging\n- **[Common Issues](troubleshooting\u002Fcommon-issues.md)** - Quick diagnostics\n\n## Resources\n\n- **Official Docs**: https:\u002F\u002Fdevelopers.zoom.us\u002Fdocs\u002Fteam-chat\u002F\n- **API Reference**: https:\u002F\u002Fdevelopers.zoom.us\u002Fdocs\u002Fapi\u002Frest\u002Freference\u002Fchatbot\u002F\n- **Dev Forum**: https:\u002F\u002Fdevforum.zoom.us\u002F\n- **App Marketplace**: https:\u002F\u002Fmarketplace.zoom.us\u002F\n\n---\n\n**Need help?** Start with Integrated Index section below for complete navigation.\n\n---\n\n## Integrated Index\n\n_This section was migrated from `SKILL.md`._\n\nComplete navigation guide for the Zoom Team Chat skill.\n\n## Quick Start Paths\n\n- Start here: [Get Started](get-started.md)\n- Fast troubleshooting first: [5-Minute Runbook](RUNBOOK.md)\n\n### Path 1: Team Chat API (User-Level Messaging)\n\nFor sending messages as a user account.\n\n1. [API Selection Guide](concepts\u002Fapi-selection.md) - Confirm Team Chat API is right\n2. [Environment Setup](concepts\u002Fenvironment-setup.md) - Get credentials\n3. [OAuth Setup Example](examples\u002Foauth-setup.md) - Implement authentication\n4. [Send Message Example](examples\u002Fsend-message.md) - Send your first message\n\n### Path 2: Chatbot API (Interactive Bots)\n\nFor building interactive chatbots with rich messages.\n\n1. [API Selection Guide](concepts\u002Fapi-selection.md) - Confirm Chatbot API is right\n2. [Environment Setup](concepts\u002Fenvironment-setup.md) - Get credentials (including Bot JID)\n3. [Webhook Architecture](concepts\u002Fwebhooks.md) - Understand webhook events\n4. [Chatbot Setup Example](examples\u002Fchatbot-setup.md) - Build your first bot\n5. [Message Cards Reference](references\u002Fmessage-cards.md) - Create rich messages\n\n## Core Concepts\n\nEssential understanding for both APIs.\n\n| Document | Description |\n|----------|-------------|\n| [API Selection Guide](concepts\u002Fapi-selection.md) | Choose Team Chat API vs Chatbot API |\n| [Environment Setup](concepts\u002Fenvironment-setup.md) | Complete credentials and app configuration |\n| [Authentication Flows](concepts\u002Fauthentication.md) | OAuth vs Client Credentials |\n| [Webhook Architecture](concepts\u002Fwebhooks.md) | How webhooks work (Chatbot API) |\n| [Message Card Structure](concepts\u002Fmessage-structure.md) | Card component hierarchy |\n| [Deployment Guide](concepts\u002Fdeployment.md) | Production deployment strategies |\n| [Security Best Practices](concepts\u002Fsecurity.md) | Secure your integration |\n\n## Complete Examples\n\nWorking code for common scenarios.\n\n### Authentication\n| Example | Description |\n|---------|-------------|\n| [OAuth Setup](examples\u002Foauth-setup.md) | User OAuth flow implementation |\n| [Token Management](examples\u002Ftoken-management.md) | Refresh tokens, expiration handling |\n\n### Basic Operations\n| Example | Description |\n|---------|-------------|\n| [Send Message](examples\u002Fsend-message.md) | Team Chat API message sending |\n| [Chatbot Setup](examples\u002Fchatbot-setup.md) | Complete chatbot with webhooks |\n| [List Channels](examples\u002Fchannel-management.md) | Get user's channels |\n| [Create Channel](examples\u002Fchannel-management.md) | Create public\u002Fprivate channels |\n\n### Interactive Features (Chatbot API)\n| Example | Description |\n|---------|-------------|\n| [Button Actions](examples\u002Fbutton-actions.md) | Handle button clicks |\n| [Form Submissions](examples\u002Fform-submissions.md) | Process form data |\n| [Slash Commands](examples\u002Fslash-commands.md) | Create custom commands |\n| [Dropdown Selects](examples\u002Fdropdown-selects.md) | Channel\u002Fmember pickers |\n\n### Advanced Integration\n| Example | Description |\n|---------|-------------|\n| [LLM Integration](examples\u002Fllm-integration.md) | Integrate Claude\u002FGPT |\n| [Scheduled Alerts](examples\u002Fscheduled-alerts.md) | Cron + incoming webhooks |\n| [Database Integration](examples\u002Fdatabase-integration.md) | Store conversation state |\n| [Multi-Step Workflows](examples\u002Fmulti-step-workflows.md) | Complex user interactions |\n\n## References\n\n### API Documentation\n| Reference | Description |\n|-----------|-------------|\n| [API Reference](references\u002Fapi-reference.md) | Pointers and common endpoints |\n| [Webhook Events](references\u002Fwebhook-events.md) | Event types and handling checklist |\n| [Message Cards](references\u002Fmessage-cards.md) | All card components |\n| [Error Codes](references\u002Ferror-codes.md) | Error handling guide |\n\n### Sample Applications\n| Reference | Description |\n|-----------|-------------|\n| [Sample Applications](references\u002Fsamples.md) | Sample app index\u002Fnotes |\n\n### Field Guides\n| Reference | Description |\n|-----------|-------------|\n| [JID Formats](references\u002Fjid-formats.md) | Understanding JID identifiers |\n| [Scopes Reference](references\u002Fscopes.md) | Common scopes |\n| [Rate Limits](references\u002Frate-limits.md) | Throttling guidance |\n\n## Troubleshooting\n\n| Guide | Description |\n|-------|-------------|\n| [Common Issues](troubleshooting\u002Fcommon-issues.md) | Quick diagnostics and solutions |\n| [OAuth Issues](troubleshooting\u002Foauth-issues.md) | Authentication failures |\n| [Webhook Issues](troubleshooting\u002Fwebhook-issues.md) | Webhook debugging |\n| [Message Issues](troubleshooting\u002Fmessage-issues.md) | Message sending problems |\n| [Deployment Issues](troubleshooting\u002Fdeployment-issues.md) | Production problems |\n\n## Architecture Patterns\n\n### Chatbot Lifecycle\n\n```\nUser Action → Webhook → Process → Response\n```\n\n### LLM Integration Pattern\n\n```\nUser Input → Chatbot receives → Call LLM → Send response\n```\n\n### Approval Workflow Pattern\n\n```\nRequest → Send card with buttons → User clicks → Update status → Notify\n```\n\n## Common Use Cases\n\n### Notifications\n- CI\u002FCD build notifications\n- Server monitoring alerts\n- Scheduled reports\n- System health checks\n\n### Workflows\n- Approval requests\n- Task assignment\n- Status updates\n- Form submissions\n\n### Integrations\n- LLM-powered assistants\n- Database queries\n- External API integration\n- File\u002Fimage sharing\n\n### Automation\n- Scheduled messages\n- Auto-responses\n- Data collection\n- Report generation\n\n## Resource Links\n\n### Official Documentation\n- **[Team Chat Docs](https:\u002F\u002Fdevelopers.zoom.us\u002Fdocs\u002Fteam-chat\u002F)** - Official overview\n- **[Chatbot Docs](https:\u002F\u002Fdevelopers.zoom.us\u002Fdocs\u002Fteam-chat\u002Fchatbot\u002Fextend\u002F)** - Chatbot guide\n- **[API Reference](https:\u002F\u002Fdevelopers.zoom.us\u002Fdocs\u002Fapi\u002Frest\u002Freference\u002Fchatbot\u002F)** - REST API docs\n- **[App Marketplace](https:\u002F\u002Fmarketplace.zoom.us\u002F)** - Create and manage apps\n\n### Sample Code\n- **[Chatbot Quickstart](https:\u002F\u002Fgithub.com\u002Fzoom\u002Fchatbot-nodejs-quickstart)** - Official tutorial\n- **[Claude Chatbot](https:\u002F\u002Fgithub.com\u002Fzoom\u002Fzoom-chatbot-claude-sample)** - AI integration\n- **[Unsplash Chatbot](https:\u002F\u002Fgithub.com\u002Fzoom\u002Funsplash-chatbot)** - Image search bot\n- **[ERP Chatbot](https:\u002F\u002Fgithub.com\u002Fzoom\u002Fzoom-erp-chatbot-sample)** - Enterprise integration\n- **[Task Manager](https:\u002F\u002Fgithub.com\u002Fzoom\u002Ftask-manager-sample)** - Full CRUD app\n\n### Tools\n- **[App Card Builder](https:\u002F\u002Fappssdk.zoom.us\u002Fcardbuilder\u002F)** - Visual card designer\n- **[ngrok](https:\u002F\u002Fngrok.com\u002F)** - Local webhook testing\n- **[Postman](https:\u002F\u002Fwww.postman.com\u002F)** - API testing\n\n### Community\n- **[Developer Forum](https:\u002F\u002Fdevforum.zoom.us\u002F)** - Ask questions\n- **[GitHub Discussions](https:\u002F\u002Fgithub.com\u002Fzoom)** - Community support\n- **[Developer Support](https:\u002F\u002Fdevsupport.zoom.us)** - Official support\n\n## Documentation Status\n\n### ✅ Complete\n- Main skill.md entry point\n- API Selection Guide\n- Environment Setup\n- Webhook Architecture\n- Chatbot Setup Example (complete working code)\n- Message Cards Reference\n- Common Issues Troubleshooting\n\n### ? Pending (High Priority)\n- OAuth Setup Example\n- Send Message Example\n- Button Actions Example\n- LLM Integration Example\n- Webhook Events Reference\n- API Reference\n- Sample Applications Analysis\n\n### ? Planned (Lower Priority)\n- Form Submissions Example\n- Channel Management Examples\n- Database Integration Example\n- Error Codes Reference\n- Rate Limits Guide\n- Deployment troubleshooting\n\n## Getting Started Checklist\n\n### For Team Chat API\n\n- [ ] Read [API Selection Guide](concepts\u002Fapi-selection.md)\n- [ ] Complete [Environment Setup](concepts\u002Fenvironment-setup.md)\n- [ ] Obtain Client ID, Client Secret\n- [ ] Add required scopes\n- [ ] Implement OAuth flow\n- [ ] Send first message\n\n### For Chatbot API\n\n- [ ] Read [API Selection Guide](concepts\u002Fapi-selection.md)\n- [ ] Complete [Environment Setup](concepts\u002Fenvironment-setup.md)\n- [ ] Obtain Client ID, Client Secret, Bot JID, Secret Token, Account ID\n- [ ] Enable Team Chat in Features\n- [ ] Configure Bot Endpoint URL and Slash Command\n- [ ] Set up ngrok for local testing\n- [ ] Implement webhook handler\n- [ ] Send first chatbot message\n\n## Version History\n\n- **v1.0** (2026-02-09) - Initial comprehensive documentation\n  - Core concepts (API selection, environment setup, webhooks)\n  - Complete chatbot setup example\n  - Message cards reference\n  - Common issues troubleshooting\n\n## Contributing\n\nThis skill is part of the zoom-skills repository. Improvements welcome!\n\n## Support\n\nFor skill-related questions or improvements, please reference this SKILL.md for navigation.\n\n## Environment Variables\n\n- See [references\u002Fenvironment-variables.md](references\u002Fenvironment-variables.md) for standardized `.env` keys and where to find each value.\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fzoom\u002Fskills\u002Fteam-chat",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":35,"prompt":45,"zipAvailable":46},[36,39,42],{"tool":37,"command":38},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill team-chat",{"tool":40,"command":41},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill team-chat",{"tool":43,"command":44},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill team-chat","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fteam-chat\u002FSKILL.md",true,[],[49,63,73,82,88,95],{"skillNo":50,"name":51,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":52,"categories":53,"keywords":59,"publishedAt":21},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[54],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[60,61,62],"model","model hierarchy","model hierarchy skill",{"skillNo":64,"name":65,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":69,"publishedAt":21},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[68],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},[70,71,72],"MCP","zoom","zoom mcp",{"skillNo":74,"name":75,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":21},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[79,80,81,71],"sdk","zoom apps sdk","apps",{"skillNo":83,"name":84,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":21},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[84],{"skillNo":89,"name":90,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":94,"publishedAt":21},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[93],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},[90],{"skillNo":96,"name":97,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":21},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[97]]