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 „Gefällt mir“

Vielen Dank für die Arbeit an dieser großartigen Funktion!

Ich konnte das Plugin installieren, die JWT-App in Zoom erstellen und mein Discourse wie beschrieben konfigurieren. Allerdings habe ich Probleme, wenn ich die Zoom-Webinar-Schaltfläche im Editor verwende, um einen geplanten Meeting mit einem Beitrag zu verknüpfen.

Es wäre toll, wenn Sie erklären könnten, was genau in das Textfeld unter „Webinar hinzufügen

2 „Gefällt mir“

Spannendes Konzept, und es sieht nach einer tollen Erfahrung für Community-Mitglieder aus!

Mich würde interessieren, ob es bereits Überlegungen gibt, mit diesem Plugin einen allgemeineren, herstellerunabhängigen Workflow zu ermöglichen; im Wesentlichen also die gleiche Einbettung eines Countdown-Timers für ein bestimmtes Datum und eine bestimmte Uhrzeit anzubieten, mit Angabe von Host und/oder Panelist, Link zur Webinar-URL, späteren Links zu Aufzeichnungen usw.

Jiti (Open Source) wäre das Beispiel, das ich im Sinn hatte, aber es gibt offensichtlich mehrere Optionen in diesem Bereich.

2 „Gefällt mir“

Du musst die Webinar-ID eingeben. In den Protokolldateien deiner Website unter /logs solltest du weitere Details finden, falls das Hinzufügen des Events im Modal-Fenster weiterhin nicht funktioniert. Ich habe zudem das von dir erwähnte URL-Problem behoben – vielen Dank für die Meldung.

Leider bietet dies derzeit keinen herstellerunabhängigen Workflow. Die Zoom-API-Aufrufe sind jedoch abstrahiert, sodass es mit etwas Aufwand möglich ist, die Unterstützung für einen anderen Anbieter hinzuzufügen (obwohl das Plugin dann in etwas umbenannt werden müsste, das weniger stark an Zoom erinnert).

8 „Gefällt mir“

Gibt es die Möglichkeit, die Unterstützung für Meetings ohne Registrierung sowie für Webinare zu diesem Plugin hinzuzufügen? Tolle Arbeit!

7 „Gefällt mir“

Da Zoom nun für alle Meetings/Webinare ein Passwort verlangt, ist der Plugin vermutlich defekt. Ich habe versucht, ein Webinar zu erstellen, und beim Betreten erscheint dieser Fehler: ‘Ihre Verbindung ist abgelaufen, und Sie können dem Meeting nicht beitreten. Überprüfen Sie Ihre Netzwerkverbindung und versuchen Sie es erneut.’

3 „Gefällt mir“

Ich werde mich heute darum kümmern. Es könnte sich um ein vorübergehendes Problem handeln. Der Webclient für Zoom ist auf der Statusseite unter status.zoom.us als „in Wartung

5 „Gefällt mir“

Ich möchte nur erwähnen, dass die Nutzung von Webinaren mindestens 40,00 pro Monat für die Aktivierung plus 14,99 pro Monat für den Pro-Plan kostet. Cheers.

2 „Gefällt mir“

Ja, leider scheint Zooms Web SDK vorübergehend offline zu sein. Sie geben an, dass sie daran arbeiten, es wieder online zu bringen (ich bin mir nicht ganz sicher, was das genau bedeutet).

Derzeit habe ich daher eine Workaround-Lösung in das Plugin integriert. Beim Beitreten zu einem Webinar wird nun dieser Bildschirm angezeigt, wenn das Beitreten über das SDK fehlschlägt:

8 „Gefällt mir“

Zur Info: Eine Genossenschaft, die ich mitgegründet habe, hat sich für https://bigbluebutton.org/ entschieden. Die Selbsthosting-Lösung hat uns deutlich weniger gekostet als ein Zoom-Webinar-Konto.

11 „Gefällt mir“

Hallo Penar, mir ist gerade aufgefallen, dass es im Benutzerprofil einen Reiter „Webinar“ gibt. Als Administrator kann ich diesen wie erwartet einsehen, aber als regulärer Benutzer erhalte ich folgende Fehlermeldung:

Zugriff verweigert

Beim Laden von [/topics/webinar-registrations/chris_murray.json](https://community.naturephotographers.network/topics/webinar-registrations/chris_murray.json)

Aus den Logs:

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 „Gefällt mir“

Ich kann das nicht reproduzieren. Ich habe es auf mehreren Websites mit verschiedenen Benutzernamen getestet, einschließlich lokal mit einem Benutzernamen, der ein Unterstrich enthält.

Ja, das Plugin nutzt das WebSDK von Zoom und hat in einigen Browsern Probleme.

1 „Gefällt mir“

Zur Info: Ich habe gerade ein Webinar mit dieser Funktion durchgeführt, und der „Join“-Button hat überhaupt nicht funktioniert. Alle haben einen Timeout von Zoom erhalten. Ich habe alle jedoch auf den regulären Zoom-Link verwiesen, der problemlos funktioniert hat. Es scheint also, dass das WebSDK viele Probleme verursacht. Vielleicht könnten wir eine Option einfügen, um die URL für den Join-Button manuell einzugeben, anstatt sich auf das WebSDK zu verlassen, da es fehlschlägt?

1 „Gefällt mir“

Der Zoom SDK sollte funktionieren, wenn Sie deployen. Ich habe das Plugin letzte Woche aktualisiert. Sie haben jedoch alle vorherigen Versionen blockiert, also könnte das erklären, warum es nicht funktioniert, wenn Sie nicht kürzlich deployed haben. Und die Zoom-Link-Option hinzuzufügen, ergibt Sinn.

2 „Gefällt mir“

Danke, Penar, ich wusste nicht, dass es ein Update gibt. Hoffentlich wird das das Problem beim nächsten Mal beheben.

Frage zu dem Video, das du später hinzufügen kannst: Funktioniert das nur für Zoom-Cloud-Aufnahmen? Wenn ich Vimeo oder YouTube verwende, heißt es, dass es kein unterstütztes Format ist. Nur aus Neugier, ist nicht so schlimm, da ich es einfach in den Beitrag aufnehmen kann.

1 „Gefällt mir“

[quote=“davidkingham, Beitrag: 48, Thema: 142711”]
Funktioniert das nur für Zoom-Cloud-Aufnahmen?[/quote]

Ja, genau. Dieses Feld funktioniert nur mit einer URL zu einer direkten Videodatei. YouTube oder Vimeo funktionieren nicht, aber wie du schon sagst, ist es viel einfacher, Oneboxing für YouTube-/Vimeo-URLs zu verwenden.

3 „Gefällt mir“

Siehe: BigBlueButton video conference

1 „Gefällt mir“

Ein kleines Feedback nach mehrfacher Nutzung.

  1. Dass der „Beitreten“-Button erst beim Start des Webinars sichtbar ist, ist nicht benutzerfreundlich. Ich erhalte mehrere E-Mails vor dem Webinar, in denen gefragt wird, wo der Link zum Beitragen ist, obwohl ich ihn in der Webinar-Beschreibung und in der Benachrichtigung, dass er beim Start erscheint, deutlich erwähnt habe. Die meisten Leute lesen einfach nicht. Persönlich würde ich es vorziehen, wenn der „Beitreten“-Button immer sichtbar wäre. Wenn Nutzer ihn zu früh anklicken, würde ihnen lediglich mitgeteilt, dass das Webinar noch nicht begonnen hat, und sie würden zurückblicken, um die tatsächliche Startzeit zu prüfen.

  2. Wäre es möglich, auch Probesitzungen zu unterstützen? Bei einem Webinar besteht die Möglichkeit, dass Gastgeber und Podiumsteilnehmer sich vorab untereinander austauschen können, ohne für die Teilnehmer live zu sein. Sie können in dieser Zeit den Link zum Zoom-Meeting anklicken und erhalten eine Meldung, dass das Meeting noch nicht gestartet ist, befinden sich aber gewissermaßen in einem Warteraum. Sobald wir live gehen, werden sie automatisch verbunden. Dies würde viele Probleme für die Nutzer beheben.

3 „Gefällt mir“

Entschuldige bitte die Verzögerung, David.

Es gibt eine Einstellung, die dir hier wahrscheinlich helfen kann:

Wenn du dies auf 30 stellst, erscheint der Button 30 Minuten vor der geplanten Zeit des Webinars.

Du solltest dies auch mit der oben genannten Einstellung nutzen können. Soweit ich zuletzt geprüft habe, werden die Zoom-Webhooks nicht ausgelöst, wenn die Übungssitzung in eine vollständige Veranstaltung übergeht, was die andere Dynamik etwas kompliziert macht.

3 „Gefällt mir“

Danke, Penar, aber das ist nicht ganz das Problem.

Zunächst einmal funktioniert mein „Jetzt beitreten"-Button überhaupt nicht mehr:

Früher hat er funktioniert, aber das Problem trat in den letzten zwei Wochen auf. Außerdem wird auch der Fallback-Link nicht angezeigt.

Dann gibt es noch ein separates Problem, das ich bereits zuvor beschrieben habe: das Problem mit dem Übungsmodus. Als ich das oben genannte Problem hatte, verlief es so: Wenn ich das Webinar im Übungsmodus starte, erscheint der „Beitreten"-Button nicht, egal wie „zoom join x mins before start