Bodega

Skills › Productividad

build-zoom-team-chat-app

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.

Descargar .zipVer en GitHub
Departamento
Productividad
Fuente
Oficial · anthropics/knowledge-work-plugins › zoom-plugin
Autor
Anthropic
Licencia
Apache-2.0
Idioma
Inglés
Riesgo
Medio

Señales de riesgo

Cómo instalarla en Claude

  1. Descargue el .zip sin descomprimirlo.
  2. En Claude active Configuración › Capacidades › Crear y editar archivos.
  3. Vaya a Personalizar › Skills › Crear skill › Subir una skill y elija el archivo.

Instrucciones completas (SKILL.md)

/build-zoom-team-chat-app

Background reference for Zoom Team Chat integrations. Use this after the workflow is clear, especially when the Team Chat API versus Chatbot API distinction matters.

Read This First (Critical)

There are two different integration types and they are not interchangeable:

If you choose the wrong type early, auth/scopes/endpoints all mismatch and implementation fails.

Official Documentation: https://developers.zoom.us/docs/team-chat/ Chatbot Documentation: https://developers.zoom.us/docs/team-chat/chatbot/extend/ API Reference: https://developers.zoom.us/docs/api/rest/reference/chatbot/

Quick Links

New to Team Chat? Follow this path:

Reference:

Having issues?

OAuth endpoint sanity check:

Building Interactive Bots?

Quick Decision: Which API?

| Use Case | API to Use | |----------|------------| | Send notifications from scripts/CI/CD | Team Chat API | | Automate messages as a user | Team Chat API | | Build an interactive chatbot | Chatbot API | | Respond to slash commands | Chatbot API | | Create messages with buttons/forms | Chatbot API | | Handle user interactions | Chatbot API |

Team Chat API (User-Level)

Chatbot API (Bot-Level)

Prerequisites

System Requirements

Create Zoom App

> ⚠️ Do NOT use Server-to-Server OAuth - S2S apps don't have the Chatbot/Team Chat feature. Only General App (OAuth) supports chatbots.

Required Credentials

From Zoom Marketplace → Your App:

| Credential | Location | Used By | |------------|----------|---------| | Client ID | App Credentials → Development | Both APIs | | Client Secret | App Credentials → Development | Both APIs | | Account ID | App Credentials → Development | Chatbot API | | Bot JID | Features → Chatbot → Bot Credentials | Chatbot API | | Secret Token | Features → Team Chat Subscriptions | Chatbot API |

See: [Environment Setup Guide](concepts/environment-setup.md) for complete configuration steps.

Quick Start: Team Chat API

Send a message as a user:

// 1. Get access token via OAuth
const accessToken = await getOAuthToken(); // See examples/oauth-setup.md

// 2. Send message to channel
const response = await fetch('https://api.zoom.us/v2/chat/users/me/messages', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${accessToken}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    message: 'Hello from CI/CD pipeline!',
    to_channel: 'CHANNEL_ID'
  })
});

const data = await response.json();
// { "id": "msg_abc123", "date_time": "2024-01-15T10:30:00Z" }

Complete example: [Send Message Guide](examples/send-message.md)

Quick Start: Chatbot API

Build an interactive chatbot:

// 1. Get chatbot token (client_credentials)
async function getChatbotToken() {
  const credentials = Buffer.from(
    `${CLIENT_ID}:${CLIENT_SECRET}`
  ).toString('base64');
  
  const response = await fetch('https://zoom.us/oauth/token', {
    method: 'POST',
    headers: {
      'Authorization': `Basic ${credentials}`,
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: 'grant_type=client_credentials'
  });
  
  return (await response.json()).access_token;
}

// 2. Send chatbot message with buttons
const response = await fetch('https://api.zoom.us/v2/im/chat/messages', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${accessToken}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    robot_jid: process.env.ZOOM_BOT_JID,
    to_jid: payload.toJid,           // From webhook
    account_id: payload.accountId,   // From webhook
    content: {
      head: {
        text: 'Build Notification',
        sub_head: { text: 'CI/CD Pipeline' }
      },
      body: [
        { type: 'message', text: 'Deployment successful!' },
        {
          type: 'fields',
          items: [
            { key: 'Branch', value: 'main' },
            { key: 'Commit', value: 'abc123' }
          ]
        },
        {
          type: 'actions',
          items: [
            { text: 'View Logs', value: 'view_logs', style: 'Primary' },
            { text: 'Dismiss', value: 'dismiss', style: 'Default' }
          ]
        }
      ]
    }
  })
});

Complete example: [Chatbot Setup Guide](examples/chatbot-setup.md)

Key Features

Team Chat API

| Feature | Description | |---------|-------------| | Send Messages | Post messages to channels or direct messages | | List Channels | Get user's channels with metadata | | Create Channels | Create public/private channels programmatically | | Threaded Replies | Reply to specific messages in threads | | Edit/Delete | Modify or remove messages |

Chatbot API

| Feature | Description | |---------|-------------| | Rich Message Cards | Headers, images, fields, buttons, forms | | Slash Commands | Custom /commands trigger webhooks | | Button Actions | Interactive buttons with webhook callbacks | | Form Submissions | Collect user input with forms | | Dropdown Selects | Channel, member, date/time pickers | | LLM Integration | Easy integration with Claude, GPT, etc. |

Webhook Events (Chatbot API)

| Event | Trigger | Use Case | |-------|---------|----------| | bot_notification | User messages bot or uses slash command | Process commands, integrate LLM | | bot_installed | Bot added to account | Initialize bot state | | interactive_message_actions | Button clicked | Handle button actions | | chat_message.submit | Form submitted | Process form data | | app_deauthorized | Bot removed | Cleanup |

See: [Webhook Events Reference](references/webhook-events.md)

Message Card Components

Build rich interactive messages with these components:

| Component | Description | |-----------|-------------| | header | Title and subtitle | | message | Plain text | | fields | Key-value pairs | | actions | Buttons (Primary, Danger, Default styles) | | section | Colored sidebar grouping | | attachments | Images with links | | divider | Horizontal line | | form_field | Text input | | dropdown | Select menu | | date_picker | Date selection |

See: [Message Cards Reference](references/message-cards.md) for complete component catalog

Architecture Patterns

Chatbot Lifecycle

User types /command → Webhook receives bot_notification
                            ↓
                     payload.cmd = "user's input"
                            ↓
                     Process command
                            ↓
                     Send response via sendChatbotMessage()

LLM Integration Pattern

case 'bot_notification': {
  const { toJid, cmd, accountId } = payload;
  
  // 1. Call your LLM
  const llmResponse = await callClaude(cmd);
  
  // 2. Send response back
  await sendChatbotMessage(toJid, accountId, {
    body: [{ type: 'message', text: llmResponse }]
  });
}

See: [LLM Integration Guide](examples/llm-integration.md)

Sample Applications

| Sample | Description | Link | |--------|-------------|------| | Chatbot Quickstart | Official tutorial (recommended start) | [GitHub](https://github.com/zoom/chatbot-nodejs-quickstart) | | Claude Chatbot | AI chatbot with Anthropic Claude | [GitHub](https://github.com/zoom/zoom-chatbot-claude-sample) | | Unsplash Chatbot | Image search with database | [GitHub](https://github.com/zoom/unsplash-chatbot) | | ERP Chatbot | Oracle ERP with scheduled alerts | [GitHub](https://github.com/zoom/zoom-erp-chatbot-sample) | | Task Manager | Full CRUD app | [GitHub](https://github.com/zoom/task-manager-sample) |

See: [Sample Applications Guide](references/samples.md) for analysis of all 10 samples

Common Operations

Send Message to Channel

// Team Chat API
await fetch('https://api.zoom.us/v2/chat/users/me/messages', {
  method: 'POST',
  headers: { 'Authorization': `Bearer ${token}` },
  body: JSON.stringify({
    message: 'Hello!',
    to_channel: 'CHANNEL_ID'
  })
});

Handle Button Click

// Webhook handler
case 'interactive_message_actions': {
  const { actionItem, toJid, accountId } = payload;
  
  if (actionItem.value === 'approve') {
    await sendChatbotMessage(toJid, accountId, {
      body: [{ type: 'message', text: '✅ Approved!' }]
    });
  }
}

Verify Webhook Signature

function verifyWebhook(req) {
  const message = `v0:${req.headers['x-zm-request-timestamp']}:${JSON.stringify(req.body)}`;
  const hash = crypto.createHmac('sha256', process.env.ZOOM_VERIFICATION_TOKEN)
    .update(message)
    .digest('hex');
  return req.headers['x-zm-signature'] === `v0=${hash}`;
}

Deployment

ngrok for Local Development

# Install ngrok
npm install -g ngrok

# Expose local server
ngrok http 4000

# Use HTTPS URL as Bot Endpoint URL in Zoom Marketplace
# Example: https://abc123.ngrok.io/webhook

Production Deployment

See: [Deployment Guide](concepts/deployment.md) for:

Limitations

| Limit | Value | |-------|-------| | Message length | 4,096 characters | | File size | 512 MB | | Members per channel | 10,000 | | Channels per user | 500 |

Security Best Practices

See: [Security Best Practices](concepts/security.md)

Complete Documentation Library

Core Concepts (Start Here!)

Complete Examples

References

Troubleshooting

Resources

---

Need help? Start with Integrated Index section below for complete navigation.

---

Integrated Index

_This section was migrated from SKILL.md._

Complete navigation guide for the Zoom Team Chat skill.

Quick Start Paths

Path 1: Team Chat API (User-Level Messaging)

For sending messages as a user account.

Path 2: Chatbot API (Interactive Bots)

For building interactive chatbots with rich messages.

Core Concepts

Essential understanding for both APIs.

| Document | Description | |----------|-------------| | [API Selection Guide](concepts/api-selection.md) | Choose Team Chat API vs Chatbot API | | [Environment Setup](concepts/environment-setup.md) | Complete credentials and app configuration | | [Authentication Flows](concepts/authentication.md) | OAuth vs Client Credentials | | [Webhook Architecture](concepts/webhooks.md) | How webhooks work (Chatbot API) | | [Message Card Structure](concepts/message-structure.md) | Card component hierarchy | | [Deployment Guide](concepts/deployment.md) | Production deployment strategies | | [Security Best Practices](concepts/security.md) | Secure your integration |

Complete Examples

Working code for common scenarios.

Authentication

| Example | Description | |---------|-------------| | [OAuth Setup](examples/oauth-setup.md) | User OAuth flow implementation | | [Token Management](examples/token-management.md) | Refresh tokens, expiration handling |

Basic Operations

| Example | Description | |---------|-------------| | [Send Message](examples/send-message.md) | Team Chat API message sending | | [Chatbot Setup](examples/chatbot-setup.md) | Complete chatbot with webhooks | | [List Channels](examples/channel-management.md) | Get user's channels | | [Create Channel](examples/channel-management.md) | Create public/private channels |

Interactive Features (Chatbot API)

| Example | Description | |---------|-------------| | [Button Actions](examples/button-actions.md) | Handle button clicks | | [Form Submissions](examples/form-submissions.md) | Process form data | | [Slash Commands](examples/slash-commands.md) | Create custom commands | | [Dropdown Selects](examples/dropdown-selects.md) | Channel/member pickers |

Advanced Integration

| Example | Description | |---------|-------------| | [LLM Integration](examples/llm-integration.md) | Integrate Claude/GPT | | [Scheduled Alerts](examples/scheduled-alerts.md) | Cron + incoming webhooks | | [Database Integration](examples/database-integration.md) | Store conversation state | | [Multi-Step Workflows](examples/multi-step-workflows.md) | Complex user interactions |

References

API Documentation

| Reference | Description | |-----------|-------------| | [API Reference](references/api-reference.md) | Pointers and common endpoints | | [Webhook Events](references/webhook-events.md) | Event types and handling checklist | | [Message Cards](references/message-cards.md) | All card components | | [Error Codes](references/error-codes.md) | Error handling guide |

Sample Applications

| Reference | Description | |-----------|-------------| | [Sample Applications](references/samples.md) | Sample app index/notes |

Field Guides

| Reference | Description | |-----------|-------------| | [JID Formats](references/jid-formats.md) | Understanding JID identifiers | | [Scopes Reference](references/scopes.md) | Common scopes | | [Rate Limits](references/rate-limits.md) | Throttling guidance |

Troubleshooting

| Guide | Description | |-------|-------------| | [Common Issues](troubleshooting/common-issues.md) | Quick diagnostics and solutions | | [OAuth Issues](troubleshooting/oauth-issues.md) | Authentication failures | | [Webhook Issues](troubleshooting/webhook-issues.md) | Webhook debugging | | [Message Issues](troubleshooting/message-issues.md) | Message sending problems | | [Deployment Issues](troubleshooting/deployment-issues.md) | Production problems |

Architecture Patterns

Chatbot Lifecycle

User Action → Webhook → Process → Response

LLM Integration Pattern

User Input → Chatbot receives → Call LLM → Send response

Approval Workflow Pattern

Request → Send card with buttons → User clicks → Update status → Notify

Common Use Cases

Notifications

Workflows

Integrations

Automation

Resource Links

Official Documentation

Sample Code

Tools

Community

Documentation Status

✅ Complete

📝 Pending (High Priority)

📋 Planned (Lower Priority)

Getting Started Checklist

For Team Chat API

For Chatbot API

Version History

Support

Use this SKILL.md as the navigation hub for Team Chat API selection, setup, examples, and troubleshooting.

Environment Variables