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 も、私の環境では機能しないようです。

もう一点、小さな問題に気づきました。管理ダッシュボードの「プラグイン」ページに記載されているリポジトリ URL は https://github.com/discourse-org/discourse-zoom になっていますが、本来は GitHub - discourse/discourse-zoom: Integrate Zoom events in Discourse. · GitHub へのリンクであるべきです。

「いいね!」 2

面白いコンセプトで、コミュニティメンバーにとって素晴らしい体験のようですね!

このプラグインで、ベンダーに依存しないより汎用的なワークフローを実装する検討は進んでいるのでしょうか?具体的には、特定の時刻や日付へのカウントダウンタイマーの埋め込み、ホストやパネリストの指定、ウェビナーURLへのリンク、後日の録画へのリンクなどを提供する機能です。

私の頭に浮かんでいる例はオープンソースの Jiti ですが、この分野には他にもいくつかの選択肢があります。

「いいね!」 2

ウェビナーIDを入力する必要があります。それでもモーダルウィンドウでイベントを追加できない場合は、サイトのログ(/logs)で詳細を確認できるはずです。また、ご指摘いただいたURLの問題も修正しましたので、ご報告ありがとうございます。

残念ながら、現時点ではベンダーに依存しないワークフローは提供されていません。ただし、Zoom APIの呼び出しは抽象化されているため、多少の手間をかけることで他のベンダーへの対応を追加することは可能です(ただし、プラグイン名は「Zoom」らしさを抑えたものに変更する必要があります)。

「いいね!」 8

このプラグインに、ウェビナーと同様に、登録なしでのミーティングサポートを追加する可能性はありますか?素晴らしい作業です!

「いいね!」 7

Zoomがすべての会議やウェビナーにパスワードを必須としたため、プラグインが機能しなくなっていると思われます。ウェビナーを作成して参加しようとしましたが、次のエラーが表示されます。「接続がタイムアウトしたため、会議に参加できません。ネットワーク接続を確認してもう一度お試しください。」

「いいね!」 3

本日、確認いたします。一時的な問題である可能性がありますが、ZoomのWebクライアントはstatus.zoom.usのステータスページで「メンテナンス中」と表示されています。

「いいね!」 5

ウェブinarの利用には、有効化に月額40.00ドル(最低)、さらにProプランの月額14.99ドルが必要です。ありがとうございました。

「いいね!」 2

はい、残念ながら現時点では Zoom の Web SDK がオフラインのようです。同社は、オンラインへの復旧に向けて作業中 と発表していますが(その意味ははっきりしません)。

そのため、当面の間、プラグインに回避策を追加しました。Webinar に参加する際、SDK 経由での接続が失敗すると、この画面が表示されるようになります。

「いいね!」 8

参考までに、私が共同設立した協同組合は https://bigbluebutton.org/ を採用しました。自社ホスト型は、Zoom ウェビナーアカウントよりもはるかに費用がかかりませんでした。

「いいね!」 11

こんにちは、Penar さん。
ユーザーのプロフィールに「Webinar」タブがあることに気づきました。管理者としては期待通り表示されるのですが、一般ユーザーとしてアクセスすると以下のエラーが表示されます。

アクセスが拒否されました

[/topics/webinar-registrations/chris_murray.json](https://community.naturephotographers.network/topics/webinar-registrations/chris_murray.json) の読み込み中に発生

ログより:

Error: Forbidden
Url: https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js
Line: 1
Column: 267206
Window Location: 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 に依存せず、参加ボタンの URL を手動で入力できるオプションを追加することは可能でしょうか?

「いいね!」 1

Zoom SDK はデプロイすれば動作するはずです。先週プラグインを更新しました。ただし、すべての以前のバージョンがブロックされているため、最近デプロイしていない場合はそれが原因かもしれません。Zoom リンクをオプションとして追加するのは理にかなっています。

「いいね!」 2

ペナルさん、ありがとうございます。アップデートがあったとは知りませんでした。これで次回から解決することを願っています。

後から追加できる動画についての質問ですが、これはZoomのクラウド録画にのみ対応しているのでしょうか?VimeoやYouTubeを使用すると「サポートされていない形式です」と表示されます。単に気になっただけで、大きな問題ではありません。投稿に含めることができますから。

「いいね!」 1

はい、そのフィールドは直接の動画ファイルへの URL のみが有効です。YouTube や Vimeo は機能しませんが、おっしゃる通り、YouTube や Vimeo の URL に対してワンボックス化を使用する方がはるかに簡単です。

「いいね!」 3

参照:BigBlueButton video conference

「いいね!」 1

少し使ってみてのフィードバックです。

  1. ウェビナーが始まるまで「参加」ボタンが隠されているのはユーザーフレンドリーではありません。ウェビナーの説明や「開始時にリンクが表示されます」という通知に記載していても、開始前に「参加リンクはどこですか?」というメールを複数受け取ります。ユーザーは通知を読まないことが多いです。個人的には、「参加」ボタンを常に表示しておくことをお勧めします。早めにクリックしても「ウェビナーはまだ開始されていません」と表示され、ユーザーは実際の開始時間を確認するために戻ってくるでしょう。

  2. 練習セッションのサポートは可能でしょうか?ウェビナーでは、ホストとパネリストが参加者に公開されない状態で事前に話し合うオプションがあります。この間にZoomミーティングのリンクをクリックすると、「ミーティングはまだ開始されていません」という通知が表示され、待機室のような状態になりますが、ライブ配信が始まると自動的に参加できます。これにより、ユーザーの多くの問題が解消されると思います。

「いいね!」 3

ご返信が遅くなり申し訳ありません、David さん。

おそらくこれで解決できる設定があります:

これを 30 に設定すると、ウェビナーの予定時刻の 30 分前にボタンが表示されるようになります。

上記の設定を使って同様に利用できるはずです。最後に確認した時点では、リハーサルセッションが本番イベントに切り替わっても Zoom のウェブフックが発火しないため、他の動的な挙動については少し複雑になっています。

「いいね!」 3

ペナルさん、ありがとうございます。ただ、それは少し問題の核心とは異なります。

まず、「今すぐ参加」ボタンが全く機能しなくなっています:

以前は正常に動作していましたが、ここ数週間でこの問題が発生しています。また、フォールバックリンクも表示されていません。

次に、以前説明した別々の問題として、「練習モード」に関する問題があります。以前指摘した問題があった際、動作は以下の通りでした:練習モードでウェビナーを開始すると、「開始前 X 分前に Zoom に参加」の設定に関わらず、「参加」ボタンが表示されません。実際には放送を開始した時点(私は開始の 5 分前に開始することを好みます)でのみ表示されます。理想的には、設定された時間になると「参加」ボタンが表示され、ユーザーには「ウェビナーはまだ開始されていません」という Zoom の通知が届くべきです。

設定された時間に「登録」ボタンを「参加」ボタンに切り替え、単に Zoom リンクへ直接誘導するオプションを追加することは可能でしょうか?フォールバックではなく、この問題を回避するための強制リンクです。改めてありがとうございます、ペナルさん!