Zoom de 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 Me gusta

¡Muchas gracias por trabajar en esto, es una gran función!

Logré instalar el plugin, crear la aplicación JWT en Zoom y configurar mi Discourse según lo descrito.

Sin embargo, tengo problemas al usar el botón de Webinar de Zoom en el editor para asociar una reunión programada con la publicación.

Sería excelente si pudieras agregar una explicación sobre qué se debe ingresar exactamente en el campo de texto bajo “Agregar Webinar”. Ni el ID de la reunión ni la URL completa parecen funcionar para mí.

Otro problema menor que noté: La URL del repositorio enlazada en la página de “Plugins” del panel de administración de administrador apunta a https://github.com/discourse-org/discourse-zoom, cuando debería enlazar a GitHub - discourse/discourse-zoom: Integrate Zoom events in Discourse. · GitHub.

2 Me gusta

¡Concepto interesante y parece una buena experiencia para los miembros de la comunidad!

Me pregunto si ya se ha considerado permitir un flujo de trabajo más genérico (independiente del proveedor) con este plugin; básicamente, ofrecer la misma integración de un temporizador de cuenta regresiva para una fecha y hora específicas, especificando un anfitrión y/o panelista, un enlace al URL del webinar, enlaces posteriores a las grabaciones, etc.

Jiti (código abierto) sería el ejemplo que tenía en mente, pero obviamente hay varias opciones en este ámbito.

2 Me gusta

Necesitas ingresar el ID del webinar. En los registros de tu sitio en /logs, deberías poder ver más detalles si aún no se puede agregar el evento en la ventana modal. También solucioné el problema de la URL que mencionaste, gracias por reportarlo.

Desafortunadamente, no, actualmente no proporciona un flujo de trabajo agóstico del proveedor. Las llamadas a la API de Zoom están abstraídas, por lo que es posible agregar soporte para otro proveedor con un poco de esfuerzo (aunque el plugin necesitaría ser renombrado a algo menos específico de Zoom).

8 Me gusta

¿Existe alguna posibilidad de añadir soporte para reuniones sin registro a este plugin, así como para webinars? ¡Gran trabajo!

7 Me gusta

Ahora que Zoom requiere una contraseña para todas las reuniones y seminarios web, creo que el plugin está roto. Intenté crear un seminario web y al unirme aparece este error: «Tu conexión ha expirado y no puedes unirte a la reunión. Verifica la conectividad de tu red e inténtalo de nuevo».

3 Me gusta

Lo revisaré hoy. Es posible que se trate de un problema temporal; el cliente web de Zoom aparece marcado como “en mantenimiento” en su página de estado en status.zoom.us.

5 Me gusta

Solo quiero mencionar que el uso de webinars tiene un costo mínimo de $40.00 al mes para habilitarlo, más el plan Pro de $14.99 al mes. Saludos.

2 Me gusta

Sí, por desgracia parece que el SDK web de Zoom está fuera de línea por ahora. Dicen que están trabajando en traerlo de nuevo a línea (no estoy muy seguro de lo que eso significa).

Por el momento, entonces, he añadido una solución alternativa al plugin; al unirse a un seminario web, ahora mostrará esta pantalla cuando falle la unión mediante SDK:

8 Me gusta

Por si acaso, una cooperativa que cofundé optó por https://bigbluebutton.org/. El autoalojamiento nos costó mucho menos que una cuenta de webinars de Zoom.

11 Me gusta

Hola Penar, acabo de notar que hay una pestaña Webinar en el perfil de los usuarios. Como administrador, puedo verla como se espera, pero como usuario normal obtengo este error:

Acceso denegado

al intentar cargar [/topics/webinar-registrations/chris_murray.json](https://community.naturephotographers.network/topics/webinar-registrations/chris_murray.json)

De los registros:

Error: Prohibido
URL: https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js
Línea: 1
Columna: 267206
Ubicación de la ventana: 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 me gusta

No puedo reproducirlo. Lo he probado en varios sitios con diferentes nombres de usuario, incluido localmente con un nombre que contiene un guion bajo.

Sí, el plugin utiliza el WebSDK de Zoom y tiene problemas en algunos navegadores.

1 me gusta

Para tu información, acabo de realizar un webinar usando esto y el botón Unirse no funcionó en absoluto; todos recibieron un error de tiempo de espera de Zoom, pero dirigí a todos al enlace regular de Zoom, que funcionó correctamente. Parece que el WebSDK está teniendo muchos problemas. ¿Podríamos tener una opción para ingresar la URL del botón Unirse en lugar de depender del WebSDK, ya que está fallando?

1 me gusta

El SDK de Zoom debería funcionar si lo implementas; actualicé el plugin la semana pasada. Sin embargo, bloquearon todas las versiones anteriores, así que si no has implementado recientemente, eso podría explicarlo. Además, agregar el enlace de Zoom como una opción tiene sentido.

2 Me gusta

Gracias, Penar, no me había dado cuenta de que había una actualización; espero que eso lo solucione para la próxima vez.

Una pregunta sobre el video que puedes agregar después: ¿esto solo funciona con grabaciones en la nube de Zoom? Si uso Vimeo o YouTube, dice que no es un formato compatible. Solo por curiosidad, no es un gran problema, ya que puedo simplemente incluirlo en la publicación.

1 me gusta

Sí, ese campo solo funciona con una URL a un archivo de video directo. YouTube o Vimeo no funcionarán, pero como bien dices, es mucho más fácil usar oneboxing para las URL de YouTube/Vimeo.

3 Me gusta

Vea: BigBlueButton video conference

1 me gusta

Un poco de feedback después de usarlo varias veces.

  1. Que el botón de unirse esté oculto hasta que comience el webinar no es amigable para el usuario. Recibo varios correos electrónicos antes de que comience el webinar preguntando dónde está el enlace para unirse, aunque lo he especificado claramente en la descripción del webinar y en la notificación de que aparecerá cuando comience. La gente simplemente no lee. Personalmente, preferiría que el botón de unirse siempre estuviera visible; si hacen clic en él antes de tiempo, simplemente les indicará que el webinar aún no ha comenzado y volverán a mirar para ver a qué hora comienza realmente.

  2. ¿Sería posible admitir sesiones de prueba? Con un webinar, tienes la opción de hacerlo, donde el anfitrión y los panelistas pueden hablar entre sí antes sin estar en vivo para los participantes. Pueden hacer clic en el enlace de la reunión de Zoom durante este tiempo y recibirán una notificación indicando que la reunión aún no ha comenzado, pero estarán en una especie de sala de espera, y se unirán automáticamente en cuanto comencemos la transmisión en vivo. Esto aliviaría muchos problemas para los usuarios.

3 Me gusta

Disculpa la demora, David.

Hay una configuración que probablemente te ayude con esto:

Si configuras esto en 30, el botón aparecerá 30 minutos antes de la hora programada del seminario web.

Deberías poder usar esto con la configuración anterior también. La última vez que verifiqué, los webhooks de Zoom no se activan cuando la sesión de práctica se convierte en un evento completo, lo que hace que la otra dinámica sea un poco complicada.

3 Me gusta

Gracias, Penar, pero ese no es exactamente el problema.

En primer lugar, mi botón “Únete ahora” ya no funciona en absoluto:

Antes funcionaba, pero esto comenzó hace un par de semanas. Tampoco veo que aparezca el enlace de respaldo.

Luego, hay un problema separado que mencioné antes: el problema del modo de práctica. Cuando tenía el problema mencionado anteriormente, funcionaba así: cuando iniciaba el seminario web en modo de práctica, el botón de unirse no aparecía, sin importar cómo se configuraba zoom join x mins before start; solo aparecía cuando realmente comenzaba la transmisión, lo cual prefiero hacer solo 5 minutos antes del inicio. Idealmente, el botón de unirse debería aparecer en el momento configurado, y así los usuarios recibirían la notificación de Zoom de que el seminario web aún no ha comenzado.

¿Crees que podrías ofrecer una opción para cambiar simplemente el botón de registro por uno de unirse en el momento establecido, y que sea solo el enlace de Zoom? No un enlace de respaldo, sino un enlace forzado para evitar esto por completo. ¡Gracias de nuevo, Penar!