Introduction and architecture
What you'll learn
By the end of this series, you'll have a working chatbot that can:
- Post and reply to messages within Zoom Chat.
- Handle events from users and channels.
- Respond to slash commands.
- Send interactive messages, markdown, and emojis.
- Search messages using the Zoom Chat API.
- Schedule messages for future delivery.
- Integrate with external APIs or databases.
What you'll need
- Development environment with a code editor and terminal.
- Git.
- Node.js (v18+ recommended).
- ngrok (or another tunneling service).
- A Zoom Developer account.
- A general app created in the Zoom App Marketplace.
- Your Zoom Chatbot credentials:
- Client ID.
- Client Secret.
- Bot JID.
- Verification Token.
Simple way to think about it
- Chat app = the integration platform
- Chatbot = one type of app that interacts through messages
Remember
Every chatbot is a Chat app, but not every Chat app is just a chatbot.
Example
A Chat app might integrate a project management system and provide:
- Message cards with buttons.
- Workflow triggers.
- Notifications.
- Slash commands.
A chatbot version of that integration might only allow:
/task create.- Automated status messages in a channel.
Understanding Zoom Chat APIs vs. Chatbot APIs
Zoom offers two powerful ways to extend Zoom Chat functionality: ** Chat APIs** and Chatbot APIs. While both interact with Zoom Chat, they use different authentication methods and serve distinct use cases.
Authentication methods
To send messages using the Chat APIs, you'll implement OAuth 2.0. This allows you to request an account-level or user-level access token and call a wide range of API endpoints beyond Chatbot functionality. When the token expires, you can use the refresh token to automatically refresh the access token.
To interact with Zoom Chat using a Chatbot, you'll use a Chatbot access token. This token is short-lived (one hour) and does not require a refresh token, making it ideal for lightweight, event-driven applications. When the token expires, you can request a new one without a refresh flow.
Chatbots are effective for keeping teams informed—whether by posting reminders, surfacing action items, or responding to slash commands.
Comparison Table
| Category | Zoom Chat APIs | Zoom Chatbot APIs |
|---|---|---|
| API Type | REST API (part of Zoom's broader API platform) | Specialized API for building Zoom Chat bots |
| Access Token Type | OAuth 2.0 access token (with refresh token) | Chatbot access token (no refresh token; short-lived) |
| Token Expiry | Access token expires in 1 hour; refresh token used to renew | Expires in 1 hour; must request a new token manually |
| Best For | Backend integrations, user-level or account-level operations | Real-time bot interactions in Zoom Chat |
| Installation | OAuth flow required (user or admin consent) | Installed via Zoom Marketplace as a Chatbot |
| Bot Mention Trigger | Not supported | Yes – Bots can listen and respond when @mentioned |
| Can Post to Channel | Yes, using user token | Yes, using bot JID and Chatbot token |
| Can Read Messages | Yes, with appropriate scopes | Only if the message is addressed to or from the bot |
Typical Use Cases
| Use Case | Zoom Chat API | Zoom Chatbot API |
|---|---|---|
| Send messages to a chat/channel | ✅ Yes (on behalf of user or system) | ✅ Yes (as the bot) |
| Respond to @mentions in chat | ✅ Yes | ✅ Yes |
| Handle slash commands | ❌ Not supported | ✅ Yes |
| Post interactive message elements (buttons, menus) | ❌ Not supported | ✅ Yes |
| Read chat messages | ✅ Yes (with scopes) | ✅ Only if sent to/from bot |
| Manage channels (create, invite, remove users) | ✅ Yes | ❌ Not supported |
| Receive event notifications (webhooks) | ✅ Via Zoom Event Subscriptions | ✅ Via Chatbot Event Triggers |
| File sharing in chat | ✅ Yes | ✅ Yes |
| System-level task notifications | ✅ Yes | ✅ Yes |
Tutorial Topics Covered
| Name | Description |
|---|---|
| Setup, Auth, and Deep Linking | Learn how to set up your first Zoom Chatbot and implement OAuth 2.0 for seamless chatbot installation and deep linking. |
| Send, edit, and delete messages | Learn how to send messages using the Zoom Chatbot API. You'll create a Python script that authenticates and sends messages to a Zoom channel. |
| Handling Events | Learn how to handle real-time events in Zoom Chatbot development. We'll subscribe to Zoom webhook events and use Flask to capture and respond to messages and user actions. |
| Slash Commands | Learn how to create and handle custom slash commands in Zoom Workplace. You'll set up commands, process user input, and respond dynamically with chatbot messages. |
| Markdown Messages & Emojis | Learn how to format and enhance your chatbot responses using Markdown syntax, emojis, and message updates that react to user interactions. |
| Reaction Handling | Learn how to capture and respond to reactions (emoji responses) to messages in Zoom Chat. You'll detect reactions through webhooks and handle them in your server logic. |
| Replying to Messages (Using Threads) | Learn how to reply to specific Zoom Chat messages using threaded replies. This tutorial shows how to nest responses under a parent message using the reply_to parameter in Node.js or Python. |
| Scheduling Messages | Learn how to schedule messages in Zoom Chat using Python or Node.js. We'll walk through queuing messages for future delivery, listing scheduled messages, and canceling pending ones. |
| Apps in Chat | Learn how to add a Chatbot to a Chat channel. This tutorial shows how to detect Chatbot events and responses. |