Discourse Zoom

:discourse2: 概要 Discourse Zoom は、有料 Zoom サブスクリプションを保有する Discourse 管理者およびユーザーに、Discourse プラットフォームから直接 Zoom ウェビナーをスケジュール、管理、参加することを可能にします。
:hammer_and_wrench: リポジトリリンク https://github.com/discourse/discourse-zoom
:open_book: インストールガイド Discourse でのプラグインのインストール方法

概要

このプラグインは、Zoom ウェビナーを Discourse インスタンスに統合します。Zoom ウェビナーはトピックに関連付けることができ、Discourse ユーザーはウェビナーに登録し、開始時に参加できます。

:warning: Zoom が JWT 認証を廃止したため、2023 年 8 月 1 日以降、プラグインの認証機構は JWT(現在は廃止され、Zoom は 9 月 1 日に削除予定)からサーバー間 OAuth に変更されました。プラグインの既存ユーザーは設定を更新する必要があります。

機能

  • Zoom ウェビナーが開始すると、「登録」ボタンが自動的に「参加」に切り替わり、クリックすると Discourse コミュニティ内の専用エンドポイントで Zoom SDK を使用してウェビナーが起動します
  • イベントの N 分前にウェビナー登録者に自動的にリマインダーを送信します(N はプラグイン設定で設定可能、デフォルトではリマインダーはオフ)
  • 管理者は Discourse 内でウェビナーのパネリストを追加できます
  • 管理者は Discourse 内でウェビナーの動画録画へのリンクを追加でき、イベント終了後に表示されます
  • Zoom イベントのホストとパネリストは Discourse ユーザーアカウントに関連付けられます

使用方法

Discourse Zoom プラグインを使用するには、まず Discourse インスタンスにプラグインをインストールし、Zoom サーバー間 OAuth アプリの認証情報で設定する必要があります。プラグインが設定されると、新しいトピックを作成してウェビナーに関連付けることで、新しい Zoom ウェビナーを作成できます。ユーザーはトピックから直接ウェビナーに登録できます。

インストール

ステップ 1: Discourse インスタンスにプラグインをインストールする

こちらの指示に従って、Discourse インスタンスにプラグインをインストールできます。

ステップ 2: Zoom マーケットプレイスでサーバー間 OAuth アプリを作成する


始めるには、Zoom マーケットプレイスで サーバー間 OAuth アプリ を作成する必要があります。このアプリは Zoom API へのリクエストや、Webhook 経由でのイベント通知の受信に必要です


ステップ 3: プラグインを設定する

プラグインがインストールされたら、Discourse サイト設定に移動し、zoom enabled チェックボックスをオンにして保存します。

Zoom マーケットプレイスからアプリ認証情報タブに移動します:

次に、値をコピーして Discourse インスタンスの対応するサイト設定に貼り付けます:

  • zoom s2s account id
  • zoom s2s client id
  • zoom s2s client secret

ステップ 4: ウェブフックシークレットトークンを設定する

Zoom サーバー間 OAuth アプリの機能タブで、「シークレットトークン」をコピーし、Discourse サイトの zoom webhooks secret token サイト設定に追加します。

ステップ 5: イベント購読を有効にする

Zoom サーバー間 OAuth アプリの機能タブに引き続き、“イベント購読” を有効にし、イベント購読の追加 ボタンをクリックします:

次に、「イベント通知エンドポイント URL」を以下に設定します:

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

その後、+ イベントの追加 ボタンをクリックします:

イベントタイプリストからウェビナータブを開き、リストされているすべてのイベントにチェックを入れます。ウェビナーイベント権限が表示されない場合は、権限の有効化方法 を確認してください。

先に設定した「イベント通知エンドポイント URL」の下で、検証 ボタンを見つけます:

すべてが正常に動作した場合、緑色の「検証済み」というチェックマークアイコン が表示されます。

最後に、ページの下部にある保存 ボタンをクリックします。

ステップ 6: スコープ

イベント購読を設定したら、スコープ タブに移動し、スコープの追加 ボタンをクリックします。ここで、以下のスコープを選択します。値を完全一致で検索するか、部分的な値で検索するか、または手動で選択します。例えば、webinar:read:list_panelists:admin を検索する代わりに webinar:read: と検索すると、表示される要素が絞り込まれ、必要なものを見つけやすくなります。

サーバー間 OAuth アプリの スコープ タブで スコープの追加 ボタンをクリックすると、ウィンドウが表示されます:

スコープ検索では、完全または部分的な名前で検索します。これを容易にするために、以下のテーブルの各スコープをコピー&ペーストするか、対応するタブで検索できます:

ユーザー

スコープ 説明
user:read:user:admin ユーザーの表示
user:read:email:admin ユーザーのメールの検証
user:read:list_users:admin ユーザーの表示

ウェビナー

スコープ 説明
webinar:read:list_panelists:admin ウェビナーのパネリストの表示
webinar:read:list_absentees:admin 過去のウェビナーの欠席者の表示
webinar:read:webinar:admin ウェビナーの表示
webinar:read:registrant:admin ウェビナーの登録者の表示
webinar:read:list_registrants:admin ウェビナーの登録者の表示
webinar:write:batch_registrants:admin ウェビナーへの登録者の追加
webinar:delete:webinar:admin ウェビナーの削除
webinar:write:panelist ウェビナーへのパネリストの追加
webinar:delete:registrant ウェビナーの登録者の削除
webinar:write:webinar ユーザー向けのウェビナーの作成
webinar:update:status ウェビナーのステータスの更新
webinar:delete:panelist ウェビナーのパネリストの削除
webinar:update:webinar ウェビナーの更新
webinar:write:registrant ウェビナーへの登録者の追加

ウェビナー

スコープ 説明
webinar:read:list_panelists:admin ウェビナーのパネリストの表示
webinar:read:list_absentees:admin 過去のウェビナーの欠席者の表示
webinar:read:webinar:admin ウェビナーの表示
webinar:read:registrant:admin ウェビナーの登録者の表示
webinar:read:list_registrants:admin ウェビナーの登録者の表示
webinar:write:batch_registrants:admin ウェビナーへの登録者の追加
webinar:delete:webinar:admin ウェビナーの削除
webinar:write:panelist ウェビナーへのパネリストの追加
webinar:delete:registrant ウェビナーの登録者の削除
webinar:write:webinar ユーザー向けのウェビナーの作成
webinar:update:status ウェビナーのステータスの更新
webinar:delete:panelist ウェビナーのパネリストの削除
webinar:update:webinar ウェビナーの更新
webinar:write:registrant ウェビナーへの登録者の追加

ステップ 7: 会議 SDK アプリを作成する

:warning: Zoom が側面で変更を行いました。ガイドの更新に取り組んでいます。


SDK 会議アプリはユーザーを認証し、ユーザーがウェビナー会議に参加できるようにします


まず、一般アプリ を作成し、アプリの管理方法の選択ユーザー管理 を選択します。

一般アプリの 基本情報 タブで、クライアント ID/SDK キーzoom sdk key フィールドに、クライアントシークレット/SDK シークレットzoom sdk secret フィールドにコピー&ペーストします。

下にスクロールすると、OAuth 情報 セクションが表示されます。OAuth リダイレクト URL にサイトの URL(例: https://YOURSITE.com)を配置します。

ステップ 8: アプリの使用用途を指定する

機能 タブで 埋め込み サブタブを選択し、Meeting SDK を有効にします。

制限事項

このプラグインは、Zoom での登録を必要としないウェビナーでのみ動作します。

破壊的変更に関するお知らせ

Zoom API の廃止により、プラグインの旧インスタンスは、この投稿で言及されている手順に従って設定する必要があります。

:discourse2: 私たちによってホストされていますか?このプラグインはエンタープライズプランで利用可能です。

「いいね!」 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 リンクへ直接誘導するオプションを追加することは可能でしょうか?フォールバックではなく、この問題を回避するための強制リンクです。改めてありがとうございます、ペナルさん!