Zoom Discourse

: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 « J'aime »

Merci beaucoup pour votre travail sur cette fonctionnalité, elle est excellente !

J’ai réussi à installer le plugin, à créer l’application JWT sur Zoom et à configurer mon Discourse comme décrit.
Cependant, je rencontre des problèmes lors de l’utilisation du bouton « Webinar Zoom » dans l’éditeur pour associer une réunion programmée à un message.

Il serait formidable que vous puissiez ajouter une explication précisant exactement ce qu’il faut saisir dans le champ de texte sous « Ajouter un webinar ». Ni l’ID de réunion ni l’URL complète ne semblent fonctionner pour moi.

Une autre petite remarque : l’URL du dépôt liée sur la page « Plugins » du tableau de bord d’administration pointe vers https://github.com/discourse-org/discourse-zoom, alors qu’elle devrait pointer vers GitHub - discourse/discourse-zoom: Integrate Zoom events in Discourse. · GitHub.

2 « J'aime »

Concept intéressant, et cela semble offrir une belle expérience pour les membres de la communauté !

Je me demande si une réflexion a déjà été menée sur la possibilité d’intégrer un flux de travail plus générique (indépendant du fournisseur) avec ce plugin ; l’idée serait notamment de proposer l’intégration d’un compte à rebours vers une date et une heure précises, en spécifiant un hôte et/ou un paneliste, un lien vers l’URL du webinaire, ainsi que des liens ultérieurs vers les enregistrements, etc.

Jiti (open source) serait l’exemple qui me vient à l’esprit, mais il existe évidemment plusieurs options dans ce domaine.

2 « J'aime »

Vous devez saisir l’ID du webinaire. Dans les journaux de votre site situés dans /logs, vous devriez pouvoir voir plus de détails si l’ajout de l’événement dans la fenêtre modale échoue toujours. J’ai également corrigé le problème d’URL que vous avez mentionné, merci de l’avoir signalé.

Malheureusement, non, cela ne fournit actuellement pas de flux de travail indépendant du fournisseur. Les appels à l’API Zoom sont cependant abstraits, il est donc possible d’ajouter la prise en charge d’un autre fournisseur avec un peu d’effort (bien que le plugin doive être renommé en quelque chose de moins spécifique à Zoom).

8 « J'aime »

Existe-t-il une possibilité d’ajouter un support de réunions sans inscription à ce plugin, ainsi que pour les webinaires ? Excellent travail !

7 « J'aime »

Maintenant que Zoom exige un mot de passe pour toutes les réunions et webinaires, je pense que le plugin est cassé. J’ai essayé de créer un webinaire et, lorsque j’essaie de m’y connecter, j’obtiens cette erreur : « Votre connexion a expiré et vous ne pouvez pas rejoindre la réunion. Vérifiez votre connectivité réseau et réessayez. »

3 « J'aime »

Je vais examiner cela aujourd’hui. Il est possible qu’il s’agisse d’un problème temporaire : le client web de Zoom est indiqué comme « en maintenance » sur leur page d’état à status.zoom.us.

5 « J'aime »

Je tiens simplement à préciser que l’utilisation des webinaires coûte un minimum de 40,00 par mois pour l'activation, plus un abonnement Pro de 14,99 par mois. Salutations.

2 « J'aime »

Oui, malheureusement, il semble que le SDK Web de Zoom soit hors ligne pour le moment. Ils indiquent qu’ils travaillent à le remettre en ligne (je ne suis pas tout à fait sûr de ce que cela signifie).

En attendant, j’ai donc ajouté une solution de contournement au plugin : lors de la participation à un webinaire, un écran s’affichera désormais si la connexion via le SDK échoue :

8 « J'aime »

Pour information, une coopérative que j’ai cofondée a opté pour https://bigbluebutton.org/. L’auto-hébergement nous a coûté bien moins cher qu’un compte de webinaire Zoom.

11 « J'aime »

Bonjour Penar,

Je viens de remarquer qu’il y a un onglet Webinar dans le profil des utilisateurs. En tant qu’administrateur, je peux y accéder comme prévu, mais en tant qu’utilisateur régulier, je reçois cette erreur :

Accès refusé

Lors du chargement de [/topics/webinar-registrations/chris_murray.json](https://community.naturephotographers.network/topics/webinar-registrations/chris_murray.json)

Voici les logs :

Erreur : Interdit
URL : https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js
Ligne : 1
Colonne : 267206
Emplacement de la fenêtre : 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
déclencher@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 « J'aime »

Je ne parviens pas à reproduire ce problème. J’ai testé sur plusieurs sites avec différents noms d’utilisateur, y compris localement avec un nom d’utilisateur contenant un trait de soulignement.

Oui, le plugin utilise le WebSDK de Zoom, et il présente des problèmes dans certains navigateurs.

1 « J'aime »

Pour info, je viens de faire un webinaire en utilisant cette fonctionnalité et le bouton « Rejoindre » ne fonctionnait pas du tout : tout le monde a reçu un message d’expiration du délai de connexion de Zoom. J’ai donc orienté tout le monde vers le lien Zoom habituel, qui a fonctionné sans problème. Il semble donc que le WebSDK rencontre de nombreux problèmes. Serait-il possible d’ajouter une option permettant de saisir manuellement l’URL du bouton « Rejoindre », plutôt que de dépendre du WebSDK qui échoue ?

1 « J'aime »

Le SDK Zoom devrait fonctionner si vous déployez ; j’ai mis à jour le plugin la semaine dernière. Cependant, ils ont bloqué toutes les versions précédentes, donc si vous n’avez pas déployé récemment, cela pourrait expliquer la situation. Et ajouter le lien Zoom comme option est une bonne idée.

2 « J'aime »

Merci Penar, je ne savais pas qu’il y avait une mise à jour. J’espère que cela règlera le problème la prochaine fois.

Une question concernant la vidéo que vous pouvez ajouter ensuite : cela ne fonctionne-t-il que pour les enregistrements Zoom dans le cloud ? Si j’utilise Vimeo ou YouTube, il est indiqué que ce n’est pas un format pris en charge. Je suis juste curieux, ce n’est pas grave puisque je peux simplement l’inclure dans le message.

1 « J'aime »

Oui, ce champ ne fonctionne qu’avec une URL pointant vers un fichier vidéo direct. YouTube ou Vimeo ne fonctionneront pas, mais comme vous le dites, il est beaucoup plus simple d’utiliser l’encapsulation (oneboxing) pour les URL YouTube/Vimeo.

3 « J'aime »

Voir : BigBlueButton video conference

1 « J'aime »

Juste un petit retour après l’avoir utilisé plusieurs fois.

  1. Le fait que le bouton « Rejoindre » soit masqué jusqu’au début du webinaire n’est pas convivial. Je reçois plusieurs e-mails avant le début du webinaire pour savoir où se trouve le lien d’accès, même si je l’ai clairement indiqué dans la description du webinaire et dans la notification précisant qu’il apparaîtra au moment du début. Les gens ne lisent tout simplement pas. Personnellement, je préférerais que le bouton « Rejoindre » soit toujours visible. S’ils cliquent dessus trop tôt, un message leur indiquerait simplement que le webinaire n’a pas encore commencé, et ils pourraient alors vérifier l’heure réelle de début.

  2. Serait-il possible de prendre en charge les sessions d’essai ? Avec un webinaire, vous avez la possibilité de faire cela : l’hôte et les panélistes peuvent discuter entre eux avant que ce ne soit en direct pour les participants. Ils peuvent cliquer sur le lien de la réunion Zoom pendant cette période et recevoir une notification indiquant que la réunion n’a pas encore commencé, mais ils se retrouvent dans une sorte de salle d’attente. La réunion s’ouvre automatiquement dès que nous passons en direct. Cela résoudrait de nombreux problèmes pour les utilisateurs.

3 « J'aime »

Désolé pour le retard, David.

Il existe un paramètre qui peut probablement vous aider ici :

Si vous réglez cette valeur sur 30, le bouton s’affichera 30 minutes avant l’heure prévue du webinaire.

Vous devriez pouvoir utiliser cela avec le paramètre ci-dessus également. La dernière fois que j’ai vérifié, les webhooks Zoom ne se déclenchent pas lorsque la session d’essai devient un événement complet, ce qui rend un peu complexe l’autre dynamique.

3 « J'aime »

Merci Penar, mais ce n’est pas tout à fait le problème.

Tout d’abord, mon bouton « S’inscrire maintenant » ne fonctionne plus du tout :

Auparavant, il fonctionnait, mais cela a commencé il y a quelques semaines. Je ne vois pas non plus l’apparition du lien de secours.

Ensuite, un problème distinct que j’avais déjà décrit concerne le mode répétition. Lorsque j’avais le problème mentionné précédemment, cela fonctionnait ainsi : lorsque je lance le webinaire en mode répétition, le bouton « Rejoindre » n’apparaît pas, quelle que soit la valeur définie pour zoom join x mins before start. Il n’apparaissait que lorsque je commençais réellement la diffusion, ce que je préfère faire seulement 5 minutes avant le début. Idéalement, le bouton « Rejoindre » devrait apparaître dès que le paramètre est atteint, et les participants recevraient alors la notification Zoom indiquant que le webinaire n’a pas encore commencé.

Pensez-vous qu’il serait possible d’ajouter une option pour basculer simplement le bouton « S’inscrire » vers « Rejoindre » à l’heure définie, avec un lien Zoom direct ? Pas un lien de secours, mais un lien forcé pour contourner ce problème complètement. Merci encore, Penar !