# Discourse Zoom

**URL:** https://meta.discourse.org/t/discourse-zoom/142711
**Category:** Plugin
**Tags:** official, zoom
**Created:** [February 26, 2020, 7:18pm UTC](https://meta.discourse.org/t/discourse-zoom/142711 "2020-02-26T19:18:08Z")
**Posts on this page:** 1
**Showing post:** 1

<div class="post-metadata">

### Author: ![Discourse](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/discourse/32/148734_2.png) [@Discourse](https://meta.discourse.org/u/Discourse)
#### Post date: [February 26, 2020, 7:18pm UTC](https://meta.discourse.org/t/discourse-zoom/142711/1 "2020-02-26T19:18:08Z")

</div>

| | | |
| --- | --- | --- |
| :discourse2: | **Summary** | **Discourse Zoom** empowers Discourse administrators and users with a paid Zoom subscription to schedule, manage, and participate in Zoom webinars directly from their Discourse platform. |
| 🛠 | **Repository Link** | [https://github.com/discourse/discourse-zoom](https://github.com/discourse/discourse-zoom) |
| 📖 | **Install Guide** | [How to install plugins in Discourse](https://meta.discourse.org/t/install-plugins-in-discourse/19157) |

> [@](#):
>
> :discourse2: As this is an #official plugin maintained by the Discourse team, #Support, #Contribute > Bug, #Contribute > UX, and #Contribute > Feature requests can be made in the respective categories here on Meta, and tagged with the appropriate plugin tag. Click on a link below to get one started. 👍
> 
> [❓&nbsp; **Support**](https://meta.discourse.org/new-topic?category_id=6&body=%3E%20Before%20asking,%20did%20you%20search%20first%3F%20Press%20%F0%9F%94%8D%20at%20the%20upper%20right%20to%20search.&tags=zoom "Ask for support on configuring and using Discourse Zoom") [🐛&nbsp; **Bug**](https://meta.discourse.org/new-topic?category_id=1&tags=zoom "A bug report means something is broken, preventing normal/typical use of the plugin") [👀&nbsp; **UX**](https://meta.discourse.org/new-topic?category_id=9&tags=zoom "Discussion about the user interface of Discourse Zoom, and how features are presented (including language and UI elements)") [💡&nbsp; **Feature**](https://meta.discourse.org/new-topic?category_id=2&tags=zoom "Discussion about how existing Discourse Zoom features can be improved or enhanced, and how proposed new features could work")

## Overview

This plugin integrates Zoom webinars into a Discourse instance. Zoom webinars can be associated with topics, Discourse users can register for webinars and join them when they start.

> ⚠ Due to Zoom deprecating JWT authentication, as of August 1st 2023, the plugin’s authentication mechanism has changed from JWT (now deprecated, Zoom will remove on September 1st) to Server-to-Server OAuth. Existing users of the plugin need to update their settings.

### Features

- When a Zoom webinar starts, the “Register” button automatically switches to “Join”, and clicking it launches the webinar using the Zoom SDK in a dedicated endpoint inside your Discourse community
- Automatically reminds webinar registrants N minutes before the event (N is configurable in the plugin settings, by default reminders are turned off)
- Administrators can add panelists to a webinar in Discourse
- Administrators can add a link to video recordings of the webinar in Discourse, which is then displayed to users after the event has ended
- Zoom event hosts and panelists are associated with Discourse user accounts

## Usage

To use the Discourse Zoom plugin, you first need to install it in your Discourse instance and configure it with your Zoom Server-to-Server OAuth app credentials. Once the plugin is set up, you can create a new Zoom webinar by creating a new topic and associating it with the webinar. Users can then register for the webinar directly from the topic.

## Installation

### Step 1: Install the plugin in your Discourse instance

You can install the plugin to your Discourse instance by following the [instructions here](https://meta.discourse.org/t/install-plugins-in-discourse/19157).

### Step 2: Create a Server-to-Server OAuth app in the Zoom Marketplace

* * *

To get started, you’ll need to create a [Server-to-Server OAuth app](https://developers.zoom.us/docs/internal-apps/create/) in the Zoom Marketplace. This app will be needed to make requests to the Zoom API and to receive events notifications via Webhooks

* * *

### Step 3: Configure the plugin

Once the plugin is installed, go to your Discourse site settings and check the `zoom enabled` checkbox and save.

From the Zoom Marketplace go to the **App Credentials** tab:

 ![App Credentials](https://global.discourse-cdn.com/meta/original/4X/9/a/d/9ada75d3e86be262032cd9bc675d8066e792b7ba.png)

Then copy and paste the values into the corresponding site settings on your Discourse instance:

- `zoom s2s account id`
- `zoom s2s client id`
- `zoom s2s client secret`

### Step 4: Set the webhook secret token

On the **Feature** tab of your Zoom Server-to-Server OAuth app, copy the “Secret Token” and add it to your Discourse site’s `zoom webhooks secret token` site setting.

 ![Webhooks Secret Token](https://global.discourse-cdn.com/meta/original/4X/e/3/7/e37da1d05ae841d737c1b8034be46cdae3f54277.png)

### Step 5: Enable event subscriptions

While still on the **Feature** tab of your Zoom Server-to-Server OAuth app, enable “Event Subscriptions” and and select the Add Event Subscription button:

 ![Event Subscriptions toggle and "Add Event Subscription" button](https://global.discourse-cdn.com/meta/original/4X/d/2/2/d22fadd61686cc81ffb2c5c3111ee72c2a35b37e.png)

Next, set the “Event notification endpoint URL” to:

`https://YOURSITE.COM/zoom/webhooks/webinars.json`

then select the + Add Events button:

 ![Event notification endpoint URL and "Add Events" button](https://global.discourse-cdn.com/meta/original/4X/8/8/d/88dd0bdb47c85105f54a2c8ba1130d03f008ea6b.png)

Open the **Webinar** tab from the event types list and check all of the events that listed. If you can’t see the **Webinar** event permissions, check [how to enable the permissions](https://developers.zoom.us/docs/internal-apps/#enable-permissions).

 ![Untitled](https://global.discourse-cdn.com/meta/original/4X/d/2/c/d2c447b74ab33f0b9371417666daa5e988670c68.png)

Under the “Event notification endpoint URL” your set earlier, find the Validate button:

 ![Validate button under "Event notification endpoint URL"](https://global.discourse-cdn.com/meta/original/4X/a/b/3/ab3d78b370fb17b00acc311b48adbae06eb45153.png)

It should show ![A checkmark icon with "Validated" in green](https://global.discourse-cdn.com/meta/original/4X/4/2/e/42e03b428927592106eb735d12bfffe7f3338c06.png) if everything worked.

Finally select the Save button at the bottom of the page

### Step 6: Scopes

Once you have set the event subscriptions move to the `Scopes` tab, and click on the `Add Scopes` button. Here you will select the following scopes by either searching by the values given in the tables, manually or using partial values, for example instead of searching for `webinar:read:list_panelists:admin` search for `webinar:read:` this will narrow down the elements show so it is easier to find the required ones.

 ![This is a screenshot of the "Add Scope" feature from the Zoom web client, showing a dialog box with fields for product name, team name, and account name. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/1/3/3/13352410937184facd96b12565054b52a9bd50ea.png)

In the Server to server OAuth app under the scopes tab click on the `Add Scopes` button and a window will show up:

 ![This image shows a computer screen with a form to add scopes to an account. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/f/f/0/ff05822a1fc404d9912c820c037b3f3412d156a2.png)

In the search scope search by full or partial name, to facilitate this, you can copy-paste each of the scopes into the following tables or search for them under the corresponding tab:

 ![The image is a screenshot of a user interface, showing a form for entering user information. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/a/b/a/aba097e502219170807a25bdbc9a9fe19828eb9d.png)

**Users**

| scope | desc |
| --- | --- |
| user:read:user:admin | View a user |
| user:read:email:admin | Verify a user’s email |
| user:read:list\_users:admin | View users |

 ![This image displays a list of user-created webinars, with a variety of topics and panel configurations. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/c/b/8/cb861384a8b2d8fb5fd5ce52ae6bdf1e4be7dfcd.png)

 ![This is a screenshot of a user interface showing a list of actions that can be done on webinars. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/e/0/9/e09982f5c1c665c62cd5095c4d4b2de9b9ea6434.png)

**Webinar**

| scope | desc |
| --- | --- |
| webinar:read:list\_panelists:admin | View a webinar’s panelists |
| webinar:read:list\_absentees:admin | View a past webinar’s absentees |
| webinar:read:webinar:admin | View a webinar |
| webinar:read:registrant:admin | View a webinar’s registrant |
| webinar:read:list\_registrants:admin | View a webinar’s registrants |
| webinar:write:batch\_registrants:admin | Add registrants to a webinar |
| webinar:delete:webinar:admin | Delete a webinar |
| webinar:write:panelist | Add panelists to a webinar |
| webinar:delete:registrant | Remove a webinar’s registrant |
| webinar:write:webinar | Create a webinar for a user |
| webinar:update:status | Update a webinar’s status |
| webinar:delete:panelist | Remove a webinar’s panelist |
| webinar:update:webinar | Update a webinar |
| webinar:write:registrant | Add a registrant to a webinar |

**Webinar**

| scope | desc |
| --- | --- |
| webinar:read:list\_panelists:admin | View a webinar’s panelists |
| webinar:read:list\_absentees:admin | View a past webinar’s absentees |
| webinar:read:webinar:admin | View a webinar |
| webinar:read:registrant:admin | View a webinar’s registrant |
| webinar:read:list\_registrants:admin | View a webinar’s registrants |
| webinar:write:batch\_registrants:admin | Add registrants to a webinar |
| webinar:delete:webinar:admin | Delete a webinar |
| webinar:write:panelist | Add panelists to a webinar |
| webinar:delete:registrant | Remove a webinar’s registrant |
| webinar:write:webinar | Create a webinar for a user |
| webinar:update:status | Update a webinar’s status |
| webinar:delete:panelist | Remove a webinar’s panelist |
| webinar:update:webinar | Update a webinar |
| webinar:write:registrant | Add a registrant to a webinar |

### Step 7: Create a Meeting SDK App

> ⚠ Zoom has changed things on their side, we are working on getting the guide updated.

* * *

The SDK meeting app authenticates the user so the user can join the webinar meeting

* * *

Start by creating a `General App`, and under the `Select how the app is managed`, select `User-managed`.

Under the Basic Information tab in your General App, copy and paste the `Client ID/ SDK key` into the `zoom sdk key` field, and the `Client Secret/SDK secret` into the `zoom sdk secret` field.

 ![This image displays a screenshot of an app's basic information page. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/1/4/e/14e3184882c81b938362bb257b65b8a37a61b0bc.png)

Scrolling down, you will find the `OAuth Information` section, in the `OAuth Redirect URL` place the URL of your site, for example, `https://YOURSITE.com`.

 ![This image shows a section of a webpage with a form to add a new OAuth 2.0 redirect URL. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/7/6/c/76cb1a8e9ce226d558132943c06fee4c2562049b.png)

### Step 8: Specify your app usage

Under the `Features` tab select the `Embed` sub-tab, enable the `Meeting SDK`

 ![A screenshot of an Android device screen with text instructions on how to use Google Meet. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/3/b/a/3ba93b148f1b852f7a3947fbb55ff3f5a7a6a9df.png)

## Limitations

The plugin only works with webinars that do not require registration in Zoom.

## Notice about breaking Changes

Due to deprecations in the Zoom API, old instances of the plugin will need to be configured following the steps mentioned in this post.

> :discourse2: Hosted by us? This plugin is available on our Enterprise plans.

> Last edited by @nat 2024-10-03T13:27:22Z
> 
> > **Check document**
> >
> > Perform check on document:

---

_[View the full topic](https://meta.discourse.org/t/discourse-zoom/142711)._
