[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M718K0V2V3F36E4H64MEE99R":3,"skill-same:01M718K0V2V3F36E4H64MEE99R":229},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":57,"commitSha":58,"skillDirectory":59,"forksCount":60,"repositoryHtmlUrl":61,"repositoryHomepageUrl":6,"ownerHtmlUrl":62,"ownerBlogUrl":63,"ownerDescription":6,"updatedAt":64,"install":65,"resources":78},"01M718K0V2V3F36E4H64MEE99R","build-zoom-team-chat-app",null,"Reference skill for Zoom Team Chat. Use after routing to a chat workflow when building user-scoped messaging integrations, chatbot experiences, rich cards, buttons, slash commands, or chat webhooks.","anthropics\u002Fknowledge-work-plugins","anthropics","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F76263028?v=4","01M697XGDPXJAVQ8391V2BCYTE","Anthropic","01M7188MPC48111TN566QNQE3X",35660,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"team chat","team","build zoom team chat app","zoom","chat","build","app","use","scoped","reference skill","for","integrations","rich","webhooks","commands","buttons","api","workflow","when","messaging","2026-11-10 10:12:30",false,"---\nname: build-zoom-team-chat-app\ndescription: \"Reference skill for Zoom Team Chat. Use after routing to a chat workflow when building user-scoped messaging integrations, chatbot experiences, rich cards, buttons, slash commands, or chat webhooks.\"\ntriggers:\n  - \"zoom team chat\"\n  - \"zoom chatbot\"\n  - \"zoom messaging\"\n  - \"team chat api\"\n  - \"chatbot api\"\n  - \"zoom slash commands\"\n  - \"zoom chat integration\"\n---\n\n# \u002Fbuild-zoom-team-chat-app\n\nBackground reference for Zoom Team Chat integrations. Use this after the workflow is clear, especially when the Team Chat API versus Chatbot API distinction matters.\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## Support\n\nUse this SKILL.md as the navigation hub for Team Chat API selection, setup, examples, and troubleshooting.\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","# \u002Fbuild-zoom-team-chat-app\n\nBackground reference for Zoom Team Chat integrations. Use this after the workflow is clear, especially when the Team Chat API versus Chatbot API distinction matters.\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## Support\n\nUse this SKILL.md as the navigation hub for Team Chat API selection, setup, examples, and troubleshooting.\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",{"name":5,"triggers":49,"description":7},[50,51,52,53,54,55,56],"zoom team chat","zoom chatbot","zoom messaging","team chat api","chatbot api","zoom slash commands","zoom chat integration","main","e605d8ddbfb688da57dfaaceebd93f12a64ef1d3","partner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat",3944,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins","https:\u002F\u002Fgithub.com\u002Fanthropics","https:\u002F\u002Fanthropic.com","2026-11-14 06:21:52",{"source":8,"skillName":5,"commands":66,"prompt":76,"zipAvailable":77},[67,70,73],{"tool":68,"command":69},"npx","npx skills add anthropics\u002Fknowledge-work-plugins --skill build-zoom-team-chat-app",{"tool":71,"command":72},"bunx","bunx skills add anthropics\u002Fknowledge-work-plugins --skill build-zoom-team-chat-app",{"tool":74,"command":75},"pnpm","pnpm dlx skills add anthropics\u002Fknowledge-work-plugins --skill build-zoom-team-chat-app","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002FSKILL.md",true,[79,85,89,93,97,101,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,165,169,173,177,181,185,189,193,197,201,205,209,213,217,221,225],{"path":80,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":84},"concepts\u002Fapi-selection.md","REFERENCE","参考文档",7466,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fconcepts\u002Fapi-selection.md",{"path":86,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":87,"sourceHtmlUrl":88},"concepts\u002Fauthentication.md",1472,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fconcepts\u002Fauthentication.md",{"path":90,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":91,"sourceHtmlUrl":92},"concepts\u002Fdeployment.md",719,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fconcepts\u002Fdeployment.md",{"path":94,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":95,"sourceHtmlUrl":96},"concepts\u002Fenvironment-setup.md",9031,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fconcepts\u002Fenvironment-setup.md",{"path":98,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":99,"sourceHtmlUrl":100},"concepts\u002Fmessage-structure.md",676,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fconcepts\u002Fmessage-structure.md",{"path":102,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":103,"sourceHtmlUrl":104},"concepts\u002Fsecurity.md",479,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fconcepts\u002Fsecurity.md",{"path":106,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":107,"sourceHtmlUrl":108},"concepts\u002Fwebhooks.md",12150,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fconcepts\u002Fwebhooks.md",{"path":110,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":111,"sourceHtmlUrl":112},"examples\u002Fbutton-actions.md",394,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fexamples\u002Fbutton-actions.md",{"path":114,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":115,"sourceHtmlUrl":116},"examples\u002Fchannel-management.md",321,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fexamples\u002Fchannel-management.md",{"path":118,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":119,"sourceHtmlUrl":120},"examples\u002Fchatbot-setup.md",12533,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fexamples\u002Fchatbot-setup.md",{"path":122,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":123,"sourceHtmlUrl":124},"examples\u002Fdatabase-integration.md",313,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fexamples\u002Fdatabase-integration.md",{"path":126,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":127,"sourceHtmlUrl":128},"examples\u002Fdropdown-selects.md",305,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fexamples\u002Fdropdown-selects.md",{"path":130,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":131,"sourceHtmlUrl":132},"examples\u002Fform-submissions.md",386,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fexamples\u002Fform-submissions.md",{"path":134,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":135,"sourceHtmlUrl":136},"examples\u002Fllm-integration.md",532,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fexamples\u002Fllm-integration.md",{"path":138,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":139,"sourceHtmlUrl":140},"examples\u002Fmulti-step-workflows.md",301,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fexamples\u002Fmulti-step-workflows.md",{"path":142,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":143,"sourceHtmlUrl":144},"examples\u002Foauth-setup.md",1596,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fexamples\u002Foauth-setup.md",{"path":146,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":147,"sourceHtmlUrl":148},"examples\u002Fscheduled-alerts.md",353,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fexamples\u002Fscheduled-alerts.md",{"path":150,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":151,"sourceHtmlUrl":152},"examples\u002Fsend-message.md",418,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fexamples\u002Fsend-message.md",{"path":154,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":155,"sourceHtmlUrl":156},"examples\u002Fslash-commands.md",510,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fexamples\u002Fslash-commands.md",{"path":158,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":159,"sourceHtmlUrl":160},"examples\u002Ftoken-management.md",443,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fexamples\u002Ftoken-management.md",{"path":162,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":163,"sourceHtmlUrl":164},"get-started.md",1678,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Fget-started.md",{"path":166,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":167,"sourceHtmlUrl":168},"references\u002Fapi-reference.md",539,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Freferences\u002Fapi-reference.md",{"path":170,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":171,"sourceHtmlUrl":172},"references\u002Fenvironment-variables.md",1006,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Freferences\u002Fenvironment-variables.md",{"path":174,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":175,"sourceHtmlUrl":176},"references\u002Ferror-codes.md",449,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Freferences\u002Ferror-codes.md",{"path":178,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":179,"sourceHtmlUrl":180},"references\u002Fjid-formats.md",248,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Freferences\u002Fjid-formats.md",{"path":182,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":183,"sourceHtmlUrl":184},"references\u002Fmessage-cards.md",6744,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Freferences\u002Fmessage-cards.md",{"path":186,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":187,"sourceHtmlUrl":188},"references\u002Frate-limits.md",206,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Freferences\u002Frate-limits.md",{"path":190,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":191,"sourceHtmlUrl":192},"references\u002Fsample-comparison.md",1143,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Freferences\u002Fsample-comparison.md",{"path":194,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":195,"sourceHtmlUrl":196},"references\u002Fsamples.md",14725,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Freferences\u002Fsamples.md",{"path":198,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":199,"sourceHtmlUrl":200},"references\u002Fscopes.md",341,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Freferences\u002Fscopes.md",{"path":202,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":203,"sourceHtmlUrl":204},"references\u002Fwebhook-events.md",565,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Freferences\u002Fwebhook-events.md",{"path":206,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":207,"sourceHtmlUrl":208},"RUNBOOK.md",2777,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002FRUNBOOK.md",{"path":210,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":211,"sourceHtmlUrl":212},"troubleshooting\u002Fcommon-issues.md",9968,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Ftroubleshooting\u002Fcommon-issues.md",{"path":214,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":215,"sourceHtmlUrl":216},"troubleshooting\u002Fdeployment-issues.md",641,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Ftroubleshooting\u002Fdeployment-issues.md",{"path":218,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":219,"sourceHtmlUrl":220},"troubleshooting\u002Fmessage-issues.md",318,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Ftroubleshooting\u002Fmessage-issues.md",{"path":222,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":223,"sourceHtmlUrl":224},"troubleshooting\u002Foauth-issues.md",882,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Ftroubleshooting\u002Foauth-issues.md",{"path":226,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":227,"sourceHtmlUrl":228},"troubleshooting\u002Fwebhook-issues.md",365,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fpartner-built\u002Fzoom-plugin\u002Fskills\u002Fteam-chat\u002Ftroubleshooting\u002Fwebhook-issues.md",[230,255,280,302,331,357],{"skillNo":231,"name":232,"nameZh":6,"description":233,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":234,"categories":235,"keywords":236,"publishedAt":44},"01M718Y97HCGW12Q53PSJDY03W","ticket-deflector","Reads a forwarded customer email or ticket, pulls order and refund status from a payments connector (PayPal, Square, or Stripe) or Shopify, account history from the CRM, and open tickets from a support desk (Zoho Desk), drafts a tone-matched reply in the owner's writing voice, and can issue a refund through the payments connector with explicit owner approval. With Shopify connected it also runs a proactive order-triage mode that surfaces orders needing attention — unfulfilled past the promised window, payment problems, pending refunds, stuck shipments — and drafts the next action for each before the customer has to ask. Use when the user says \"draft a response,\" \"answer this customer,\" \"where's my order,\" \"I want a refund,\" \"check my orders,\" or \"anything about to blow up.\"","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fsmall-business\u002Fskills\u002Fticket-deflector\u002FSKILL.md",[],[237,238,239,240,241,242,243,42,41,244,245,246,247,248,249,250,251,252,253,254],"ticket","ticket deflector","mode","up","payments","open","writing","ask","Connector","text","mail","window","next","customer","support","crm","past","read",{"skillNo":256,"name":257,"nameZh":6,"description":258,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":259,"categories":260,"keywords":261,"publishedAt":44},"01M718Y55HFAN5705ME5VEDZ9K","tax-season-organizer","Prepares tax-season materials for the owner's accountant, not tax advice. US federal tax; a non-US business gets its closed-books packet instead. Two modes: (1) quarterly estimated tax from YTD net income in the ledger (MYOB, NetSuite, QuickBooks, Xero, or Zoho Books); (2) year-end 1099 prep, scanning the ledger, PayPal, and Stripe for contractors paid over USD 600 into a 1099-NEC list with missing W-9 flags.\nAny tax request routes first to \u002Ftax-prep, which confirms the books are closed and reconciled before running this skill. Use this skill directly only when the owner says the period's books are already closed: \"books are closed, now do the 1099s,\" \"run the quarterly estimate off the closed numbers,\" or \"just the contractor W-9 list.\"","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fsmall-business\u002Fskills\u002Ftax-season-organizer\u002FSKILL.md",[],[262,263,264,265,266,267,268,269,270,271,42,272,273,274,275,276,254,277,278,279],"tax season organizer","tax","us federal","which","netsuite","paid","end","usd","only","now","books","xero","scanning","run","request","flags","list","stripe",{"skillNo":281,"name":282,"nameZh":6,"description":283,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":284,"categories":285,"keywords":286,"publishedAt":44},"01M718Y13VVPHDD9NTDBVFJ2AZ","tax-prep","Prepares tax materials as a two-link chain — month-end-prep confirms the books are closed and reconciled first, then tax-season-organizer calculates the quarterly estimated payment or builds the year-end 1099-NEC list and accountant packet from those closed numbers. Requires a ledger (MYOB, NetSuite, QuickBooks, Xero, or Zoho Books); uses Gusto, PayPal, and Stripe when connected, else CSV upload. US federal tax math; a non-US business gets the closed-books packet. Prep material for a CPA, never tax advice, nothing filed. Trigger on \"quarterly taxes,\" \"estimated tax payment,\" \"how much should I set aside,\" \"1099s,\" \"1099-NEC,\" \"W-9s,\" \"year-end tax prep,\" \"get my books ready for my accountant,\" any phrasing that suggests a tax deadline is coming, or a question about net profit or YTD income that sounds like worry about a tax bill. An owner who says the period's books are already closed routes to tax-season-organizer directly.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fsmall-business\u002Fskills\u002Ftax-prep\u002FSKILL.md",[],[287,263,288,289,264,290,291,266,292,293,294,295,296,34,297,268,298,299,300,301],"tax prep","prep","SET","as","ready","never","zoho books","get","chain","profit","trigger","material","question","paypal","business",{"skillNo":303,"name":304,"nameZh":6,"description":305,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":306,"categories":307,"keywords":313,"publishedAt":44},"01M718XWTWQZ01GYSG9T8RW8TW","speed-to-lead","Makes sure no inbound lead goes unanswered. Watches web forms, the shared inbox, and the CRM for new inquiries, qualifies each one against the owner's criteria, drafts a reply in the owner's voice with real meeting times for the owner to approve and send, routes anything hot to a human right away, and logs the whole thing to the CRM. Never sends on its own. Built to run on a schedule so overnight inquiries are drafted and sorted by morning, and works from forwarded or pasted inquiries when no connector is available. Use this whenever the owner is worried about inbound leads or response time — including phrasings like \"leads are going cold,\" \"did anyone answer that inquiry,\" \"I keep missing form submissions,\" \"nothing falls through the cracks,\" \"handle my inbound,\" \"respond to this lead,\" or \"we lose people because nobody gets back fast enough.\" Reach for it for a single unanswered inquiry as readily as for a standing setup.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fsmall-business\u002Fskills\u002Fspeed-to-lead\u002FSKILL.md",[308],{"categoryNo":309,"categoryName":310,"taxonomyType":311,"taxonomyTypeDesc":312},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[314,315,316,317,318,319,292,320,321,322,323,324,325,326,42,327,328,245,329,330],"speed to lead","lead","speed","shared","back","cold","time","inbox","send","respond","new","web forms","people","schedule","logs","sure","human",{"skillNo":332,"name":333,"nameZh":6,"description":334,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":335,"categories":336,"keywords":340,"publishedAt":44},"01M718XQYMN1KY3TPS33967FK0","social-content-engine","Runs the owner's content operation as a standing thing rather than a one-off: keeps a rolling posting calendar, learns the owner's voice, generates on-brand Canva graphics, writes captions that sound like them, repurposes one asset into every channel format, and stages posts for approval instead of publishing on its own. Pulls product photos and prices from Shopify when connected; with no connectors, drafts the calendar and asset briefs for manual posting. Use this whenever the owner talks about posting, content, or social — including \"I need to post more,\" \"we've gone quiet on Instagram,\" \"what should we post this month,\" \"make the content,\" \"give me a month of posts,\" \"write this in my voice,\" \"repurpose this,\" or \"set up our content calendar.\" Reach for it for a single post as readily as for a full quarter. One handoff: a finished, approved campaign brief goes to canva-creator; this skill owns the standing operation.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fsmall-business\u002Fskills\u002Fsocial-content-engine\u002FSKILL.md",[337],{"categoryNo":338,"categoryName":339,"taxonomyType":311,"taxonomyTypeDesc":312},"01JBSEEDCAT000000000000036","内容创作者",[341,342,343,344,345,346,289,347,348,349,350,240,351,42,352,353,354,254,355,356],"social","social content engine","engine","content engine","social content","content","brief","posts","Captions","prices","campaign","me","product","calendar","write","drafts",{"skillNo":358,"name":359,"nameZh":6,"description":360,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":361,"categories":362,"keywords":363,"publishedAt":44},"01M718XMPJVH0EVRVP998BVZPC","smb-router","The front door to the Small Business plugin. Listens to what the owner needs right now — vague or specific — and routes them to the best skill or slash command for the moment. Also serves as a guide: explains what's available, suggests what to try next, and adapts recommendations based on stored business context. Trigger whenever the owner asks \"what can you do,\" \"help me with my business,\" \"what should I focus on,\" \"I don't know where to start,\" or any open-ended business request that doesn't clearly match a single skill.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Fblob\u002Fmain\u002Fsmall-business\u002Fskills\u002Fsmb-router\u002FSKILL.md",[],[364,365,366,290,367,34,297,368,242,369,271,301,370,371,372,373,374,352,375,249],"router","smb","smb router","do","front","single","you","vague","can","with","plugin","focus"]