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