Discourse Zoom

: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.
:hammer_and_wrench: Repository Link https://github.com/discourse/discourse-zoom
:open_book: Install Guide How to install plugins in Discourse

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.

:warning: 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.

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

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.

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:

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

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

then select the + Add Events button:

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.

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

It should show A checkmark icon with "Validated" in green 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.

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

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:

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

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

:warning: 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.

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.

Step 8: Specify your app usage

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

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 documentPerform check on document:
63 个赞

非常感谢你为此付出的努力,这个功能太棒了!

我成功安装了插件,在 Zoom 中创建了 JWT 应用,并按照说明配置了我的 Discourse。不过,当我在编辑器中使用 Zoom 网络研讨会按钮将已安排的会议与帖子关联时,遇到了问题。

如果你能详细说明一下在“添加网络研讨会”下方的文本输入框中究竟需要输入什么,那就太好了。目前无论是会议 ID 还是完整 URL 对我来说似乎都无法正常工作。

另外,我注意到一个次要问题:管理员仪表板“插件”页面中链接的仓库地址指向的是 https://github.com/discourse-org/discourse-zoom,但实际上应该链接到 https://github.com/discourse/discourse-zoom。

2 个赞

这个概念很有趣,看起来能为社区成员带来不错的体验!

我很好奇,是否已经考虑过让该插件支持更通用(与供应商无关)的工作流程?例如,提供嵌入倒计时功能以指向特定日期和时间,指定主持人或嘉宾,链接到网络研讨会 URL,以及后续提供录播链接等。

Jiti(开源项目)是我心中想到的一个例子,但显然在这个领域还有多种选择。

2 个赞

您需要输入网络研讨会的 ID。如果您在模态窗口中仍无法添加事件,可以在网站的 /logs 日志中看到更多详细信息。此外,我也修复了您提到的 URL 问题,感谢您的反馈。

很遗憾,目前该插件尚不支持不依赖特定供应商的工作流程。不过,Zoom 的 API 调用已进行了抽象处理,因此只需付出一定努力,即可添加对其他供应商的支持(尽管此时需要将插件重命名为一个不那么像“Zoom”的名称)。

8 个赞

是否有可能为这个插件添加无需注册即可加入会议的功能,就像网络研讨会一样?做得太棒了!

7 个赞

既然 Zoom 要求所有会议/网络研讨会设置密码,我认为该插件已失效。我尝试创建了一个网络研讨会,但在加入时出现以下错误:‘您的连接已超时,无法加入会议。请检查网络连接并重试。’

3 个赞

我今天会调查一下。这可能是临时问题,Zoom 的网页客户端在其状态页面 status.zoom.us 上标记为“维护中”。

5 个赞

我想提一下,启用网络研讨会功能每月最低费用为 40.00 美元,外加每月 14.99 美元的专业版计划。祝好。

2 个赞

是的,很遗憾,Zoom 的 Web SDK 目前似乎处于离线状态。他们表示正在努力使其恢复在线(具体含义尚不明确)。

因此,目前我已在插件中添加了变通方案:当通过 SDK 加入网络研讨会失败时,现在将显示此屏幕:

8 个赞

供参考,我共同创立的一家合作社选择了 https://bigbluebutton.org/。自行托管的成本远低于 Zoom 网络研讨会账户。

11 个赞

你好,Penar,我刚刚注意到用户个人资料中有一个“网络研讨会”选项卡。作为管理员,我可以正常查看,但作为普通用户,我遇到了以下错误:

访问被拒绝

在尝试加载 [/topics/webinar-registrations/chris_murray.json](https://community.naturephotographers.network/topics/webinar-registrations/chris_murray.json) 时发生错误

日志显示:

错误:禁止访问
URL: https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js
行号:1
列号:267206
窗口位置:https://community.naturephotographers.network/u/chris_murray/activity


o/t</<@https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js:1:267206
o/t<@https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js:1:267309
o@https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js:1:267390
trigger@https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js:1:545370
A</e._onError/<@https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js:1:550247
f</t.invoke@https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js:1:490055
f</t.flush@https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js:1:489055
p</t.flush@https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js:1:491070
t</t._end@https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js:1:496499
t</t.end@https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js:1:493035
t</t._run@https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js:1:497037
t</t.run@https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js:1:493643
c@https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js:1:359842
i/r.error@https://community.naturephotographers.network/assets/application-54c82e8fd96fa4eb82fa7465a602da175078108feb909cfeec95f696f02b5854.js:1:203298
i@https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js:1:27754
fireWith@https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js:1:28522
l@https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js:1:78753
o/<@https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js:1:81055

1 个赞

我无法复现此问题。我在多个站点上进行了测试,使用了不同的用户名,包括在本地使用包含下划线的用户名进行测试。

是的,该插件使用的是 Zoom 的 WebSDK,它在某些浏览器中确实存在一些问题。

1 个赞

供参考,我刚才用这个功能做了一次网络研讨会,但“加入”按钮完全无法使用,所有参会者都收到了 Zoom 的超时错误。不过,我引导大家使用了常规的 Zoom 链接,一切正常。看来 WebSDK 存在不少问题。我们是否可以添加一个选项,允许用户手动输入“加入”按钮的链接,而不是依赖 WebSDK,毕竟它经常失败?

1 个赞

如果您已部署,Zoom SDK 应该可以正常工作,我上周已更新了该插件。不过,Zoom 已屏蔽所有旧版本,因此如果您近期未进行部署,这可能是原因所在。另外,将 Zoom 链接作为选项添加是合理的。

2 个赞

谢谢 Penar,我没想到还有更新,希望下次能解决这个问题。

想问个关于之后可以添加视频的问题:这是否仅适用于 Zoom 云端录制?如果我使用 Vimeo 或 YouTube,它会提示不支持该格式。只是好奇问问,问题不大,毕竟我可以直接把它包含在帖子中。

1 个赞

是的,该字段仅适用于直接视频文件的 URL。YouTube 或 Vimeo 的链接无法使用,但正如您所说,对于 YouTube/Vimeo 的链接,使用单框嵌入要方便得多。

3 个赞

参见:BigBlueButton video conference

1 个赞

使用了几次之后,想提供一些小小的反馈。

  1. “加入”按钮在 webinar 开始之前隐藏,用户体验不够友好。我在 webinar 开始前收到了多封邮件,询问加入链接在哪里,尽管我已在 webinar 描述和通知中明确说明:该按钮将在 webinar 开始时显示。但很多人并不仔细阅读。我个人更希望“加入”按钮始终可见;如果用户提前点击,系统只需提示 webinar 尚未开始,他们自然会回头查看实际开始时间。

  2. 是否可能支持预演环节?在 webinar 中,主持人和小嘉宾可以在正式面向参与者直播之前进行内部沟通。他们可以在此期间点击 Zoom 会议链接,系统会提示会议尚未开始,但他们会进入类似“等候室”的状态,并在我们正式开播时自动加入。这将大大减轻用户面临的问题。

3 个赞

抱歉让您久等了,David。

这里有一个设置可能可以帮到您:

如果您将其设置为 30,那么按钮将在 webinar 预定时间前 30 分钟显示。

您应该也可以使用上述设置来实现这一功能。据我上次检查,当演练环节转为正式活动时,Zoom 的 webhook 不会触发,这使得其他动态处理起来有些棘手。

3 个赞

谢谢 Penar,但这并不是真正的问题。

首先,我的“立即加入”按钮完全无法使用了:

以前它一直正常工作,但最近几周开始出现这种情况。我也没看到备用链接显示出来。

另外,还有一个之前提到过的独立问题,即练习模式的问题。当我遇到之前提到的问题时,情况是这样的:当我以练习模式启动网络研讨会时,无论将“在开始前 x 分钟加入 Zoom”设置为多少,加入按钮都不会出现,只有在真正开始直播时才会显示,而我通常希望在开始前 5 分钟才开始直播。理想情况下,加入按钮应该在设定的时间自动出现,这样参与者就会收到 Zoom 通知,提示网络研讨会尚未开始。

您能否提供一个选项,让注册按钮在设定时间直接切换为加入按钮,并直接指向 Zoom 链接?不需要备用链接,而是强制链接以完全绕过这个问题。再次感谢 Penar!