Discourse Zoom

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

概要

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

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

機能

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

使用方法

Discourse Zoomプラグインを使用するには、まずDiscourseインスタンスにプラグインをインストールし、Zoom Server-to-Server OAuthアプリの資格情報で設定する必要があります。プラグインの設定が完了したら、新しいトピックを作成してウェビナーに関連付けることで、新しいZoomウェビナーを作成できます。その後、ユーザーはトピックから直接ウェビナーに登録できます。

インストール

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

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

ステップ2: Zoom MarketplaceでServer-to-Server OAuthアプリを作成する


始めるには、Zoom MarketplaceでServer-to-Server OAuthアプリを作成する必要があります。このアプリは、Zoom APIへのリクエスト送信とWebhooks経由でのイベント通知の受信に必要です。


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

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

Zoom MarketplaceからApp Credentialsタブに移動します:

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

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

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

Zoom Server-to-Server OAuthアプリのFeatureタブで、「Secret Token」をコピーし、Discourseサイトのzoom webhooks secret tokenサイト設定に追加します。

ステップ5: イベントサブスクリプションを有効にする

Zoom Server-to-Server OAuthアプリのFeatureタブのまま、「Event Subscriptions」を有効にし、Add Event Subscriptionボタンを選択します:

次に、「Event notification endpoint URL」を以下に設定します:

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

その後、+ Add Eventsボタンを選択します:

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

以前設定した「Event notification endpoint URL」の下で、Validateボタンを見つけます:

すべてが正常に機能した場合、A checkmark icon with "Validated" in greenが表示されます。

最後に、ページ下部のSaveボタンを選択します。

ステップ6: スコープ

イベントサブスクリプションの設定が完了したら、Scopesタブに移動し、Add Scopesボタンをクリックします。ここで、テーブルに与えられた値で検索するか、手動で、または部分的な値(例:webinar:read:list_panelists:adminではなくwebinar:read:を検索)を使用して、以下のスコープを選択します。これにより表示される要素が絞り込まれ、必要なものを見つけやすくなります。

Server to server OAuthアプリのスコープタブでAdd Scopesボタンをクリックすると、ウィンドウが表示されます:

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

ユーザー

scope desc
user:read:user:admin ユーザーを表示
user:read:email:admin ユーザーのメールを確認
user:read:list_users:admin ユーザーを表示

ウェビナー

scope desc
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 ウェビナーに登録者を追加

ウェビナー

scope desc
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ミーティングアプリは、ユーザーがウェビナーミーティングに参加できるように認証を行います。


まず、General Appを作成し、Select how the app is managedUser-managedを選択します。

General AppのBasic Informationタブで、Client ID/ SDK keyzoom sdk keyフィールドに、Client Secret/SDK secretzoom sdk secretフィールドにコピーして貼り付けます。

下にスクロールすると、OAuth Informationセクションが見つかります。OAuth Redirect URLにサイトのURL(例:https://YOURSITE.com)を入力します。

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

FeaturesタブでEmbedサブタブを選択し、Meeting SDKを有効にします。

制限事項

このプラグインは、Zoomでの登録が不要なウェビナーでのみ機能します。

破壊的変更に関する notice

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

:discourse2: 私たちがホストしていますか?このプラグインは、Enterpriseプランで利用可能です。

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