build-zoom-team-chat-app

/build-zoom-team-chat-app

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "build-zoom-team-chat-app" with this command: npx skills add anthropics/knowledge-work-plugins/anthropics-knowledge-work-plugins-build-zoom-team-chat-app

/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:

Team Chat API (user type)

  • Sends messages as a real authenticated user

  • Uses User OAuth (authorization_code )

  • Endpoint family: /v2/chat/users/...

Chatbot API (bot type)

  • Sends messages as your bot identity

  • Uses Client Credentials (client_credentials )

  • Endpoint family: /v2/im/chat/messages

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:

  • Get Started - End-to-end fast path (user type vs bot type)

  • Choose Your API - Team Chat API vs Chatbot API

  • Environment Setup - Credentials, scopes, app configuration

  • OAuth Setup - Complete authentication flow

  • Send First Message - Working code to send messages

Reference:

  • Chatbot Message Cards - Complete card component reference

  • Webhook Events - All webhook event types

  • API Reference - Endpoints, methods, parameters

  • Sample Applications - 10+ official sample apps

  • Integrated Index - see the section below in this file

Having issues?

  • Authentication errors → OAuth Troubleshooting

  • Webhook not receiving events → Webhook Setup Guide

  • Messages not sending → Common Issues

  • Start with quick checks → 5-Minute Runbook

OAuth endpoint sanity check:

Building Interactive Bots?

  • Button Actions - Handle button clicks

  • Form Submissions - Process form data

  • Slash Commands - Create custom commands

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)

  • Messages appear as sent by your bot

  • Requires Client Credentials grant

  • Endpoint: POST https://api.zoom.us/v2/im/chat/messages

  • Scopes: imchat:bot (auto-added)

  • Rich cards: buttons, forms, dropdowns, images

Prerequisites

System Requirements

  • Zoom account

  • Account owner, admin, or Zoom for developers role enabled

  • To enable: User Management → Roles → Role Settings → Advanced features → Enable Zoom for developers

Create Zoom App

  • Go to Zoom App Marketplace

  • Click Develop → Build App

  • Select General App (OAuth)

⚠️ 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 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

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

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

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 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

Sample Applications

Sample Description Link

Chatbot Quickstart Official tutorial (recommended start) GitHub

Claude Chatbot AI chatbot with Anthropic Claude GitHub

Unsplash Chatbot Image search with database GitHub

ERP Chatbot Oracle ERP with scheduled alerts GitHub

Task Manager Full CRUD app GitHub

See: Sample Applications Guide 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 for:

  • Nginx reverse proxy setup

  • Base path configuration

  • OAuth redirect URI setup

Limitations

Limit Value

Message length 4,096 characters

File size 512 MB

Members per channel 10,000

Channels per user 500

Security Best Practices

  • Verify webhook signatures - Always validate using x-zm-signature header

  • Sanitize messages - Limit to 4096 chars, remove control characters

  • Validate JIDs - Check format: user@domain or channel@domain

  • Environment variables - Never hardcode credentials

  • Use HTTPS - Required for production webhooks

See: Security Best Practices

Complete Documentation Library

Core Concepts (Start Here!)

  • API Selection Guide - Choose Team Chat API vs Chatbot API

  • Environment Setup - Complete credentials guide

  • Authentication Flows - OAuth vs Client Credentials

  • Webhook Architecture - How webhooks work

  • Message Card Structure - Card component hierarchy

Complete Examples

  • OAuth Setup - Full OAuth implementation

  • Send Message - Team Chat API message sending

  • Chatbot Setup - Complete chatbot with webhooks

  • Button Actions - Handle interactive buttons

  • Form Submissions - Process form data

  • Slash Commands - Create custom commands

  • LLM Integration - Claude/GPT integration

  • Scheduled Alerts - Cron + incoming webhooks

  • Channel Management - Create/manage channels

References

  • API Reference - All endpoints and methods

  • Webhook Events - Complete event reference

  • Message Cards - All card components

  • Sample Applications - Analysis of 10 official samples

  • Error Codes - Error handling guide

Troubleshooting

  • OAuth Issues - Authentication failures

  • Webhook Issues - Webhook debugging

  • Common Issues - Quick diagnostics

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

  • Start here: Get Started

  • Fast troubleshooting first: 5-Minute Runbook

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

For sending messages as a user account.

  • API Selection Guide - Confirm Team Chat API is right

  • Environment Setup - Get credentials

  • OAuth Setup Example - Implement authentication

  • Send Message Example - Send your first message

Path 2: Chatbot API (Interactive Bots)

For building interactive chatbots with rich messages.

  • API Selection Guide - Confirm Chatbot API is right

  • Environment Setup - Get credentials (including Bot JID)

  • Webhook Architecture - Understand webhook events

  • Chatbot Setup Example - Build your first bot

  • Message Cards Reference - Create rich messages

Core Concepts

Essential understanding for both APIs.

Document Description

API Selection Guide Choose Team Chat API vs Chatbot API

Environment Setup Complete credentials and app configuration

Authentication Flows OAuth vs Client Credentials

Webhook Architecture How webhooks work (Chatbot API)

Message Card Structure Card component hierarchy

Deployment Guide Production deployment strategies

Security Best Practices Secure your integration

Complete Examples

Working code for common scenarios.

Authentication

Example Description

OAuth Setup User OAuth flow implementation

Token Management Refresh tokens, expiration handling

Basic Operations

Example Description

Send Message Team Chat API message sending

Chatbot Setup Complete chatbot with webhooks

List Channels Get user's channels

Create Channel Create public/private channels

Interactive Features (Chatbot API)

Example Description

Button Actions Handle button clicks

Form Submissions Process form data

Slash Commands Create custom commands

Dropdown Selects Channel/member pickers

Advanced Integration

Example Description

LLM Integration Integrate Claude/GPT

Scheduled Alerts Cron + incoming webhooks

Database Integration Store conversation state

Multi-Step Workflows Complex user interactions

References

API Documentation

Reference Description

API Reference Pointers and common endpoints

Webhook Events Event types and handling checklist

Message Cards All card components

Error Codes Error handling guide

Sample Applications

Reference Description

Sample Applications Sample app index/notes

Field Guides

Reference Description

JID Formats Understanding JID identifiers

Scopes Reference Common scopes

Rate Limits Throttling guidance

Troubleshooting

Guide Description

Common Issues Quick diagnostics and solutions

OAuth Issues Authentication failures

Webhook Issues Webhook debugging

Message Issues Message sending problems

Deployment Issues 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

  • CI/CD build notifications

  • Server monitoring alerts

  • Scheduled reports

  • System health checks

Workflows

  • Approval requests

  • Task assignment

  • Status updates

  • Form submissions

Integrations

  • LLM-powered assistants

  • Database queries

  • External API integration

  • File/image sharing

Automation

  • Scheduled messages

  • Auto-responses

  • Data collection

  • Report generation

Resource Links

Official Documentation

  • Team Chat Docs - Official overview

  • Chatbot Docs - Chatbot guide

  • API Reference - REST API docs

  • App Marketplace - Create and manage apps

Sample Code

  • Chatbot Quickstart - Official tutorial

  • Claude Chatbot - AI integration

  • Unsplash Chatbot - Image search bot

  • ERP Chatbot - Enterprise integration

  • Task Manager - Full CRUD app

Tools

  • App Card Builder - Visual card designer

  • ngrok - Local webhook testing

  • Postman - API testing

Community

  • Developer Forum - Ask questions

  • GitHub Discussions - Community support

  • Developer Support - Official support

Documentation Status

✅ Complete

  • Main skill.md entry point

  • API Selection Guide

  • Environment Setup

  • Webhook Architecture

  • Chatbot Setup Example (complete working code)

  • Message Cards Reference

  • Common Issues Troubleshooting

📝 Pending (High Priority)

  • OAuth Setup Example

  • Send Message Example

  • Button Actions Example

  • LLM Integration Example

  • Webhook Events Reference

  • API Reference

  • Sample Applications Analysis

📋 Planned (Lower Priority)

  • Form Submissions Example

  • Channel Management Examples

  • Database Integration Example

  • Error Codes Reference

  • Rate Limits Guide

  • Deployment troubleshooting

Getting Started Checklist

For Team Chat API

  • Read API Selection Guide

  • Complete Environment Setup

  • Obtain Client ID, Client Secret

  • Add required scopes

  • Implement OAuth flow

  • Send first message

For Chatbot API

  • Read API Selection Guide

  • Complete Environment Setup

  • Obtain Client ID, Client Secret, Bot JID, Secret Token, Account ID

  • Enable Team Chat in Features

  • Configure Bot Endpoint URL and Slash Command

  • Set up ngrok for local testing

  • Implement webhook handler

  • Send first chatbot message

Version History

  • v1.0 (2026-02-09) - Initial comprehensive documentation

  • Core concepts (API selection, environment setup, webhooks)

  • Complete chatbot setup example

  • Message cards reference

  • Common issues troubleshooting

Support

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

Environment Variables

  • See references/environment-variables.md for standardized .env keys and where to find each value.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Research

data-visualization

No summary provided by upstream source.

Repository SourceNeeds Review
Research

task-management

No summary provided by upstream source.

Repository SourceNeeds Review
Research

memory-management

No summary provided by upstream source.

Repository SourceNeeds Review
Research

system-design

No summary provided by upstream source.

Repository SourceNeeds Review