Zoom de Discourse

:discourse2: Resumen Discourse Zoom permite a los administradores y usuarios de Discourse, con una suscripción de pago a Zoom, programar, gestionar y participar en webinars de Zoom directamente desde su plataforma Discourse.
:hammer_and_wrench: Enlace al repositorio https://github.com/discourse/discourse-zoom
:open_book: Guía de instalación Cómo instalar plugins en Discourse

Descripción general

Este plugin integra webinars de Zoom en una instancia de Discourse. Los webinars de Zoom pueden asociarse con temas, los usuarios de Discourse pueden registrarse para los webinars y unirse a ellos cuando comiencen.

:warning: Debido a que Zoom ha descontinuado la autenticación JWT, a partir del 1 de agosto de 2023, el mecanismo de autenticación del plugin ha cambiado de JWT (ahora descontinuado, Zoom lo eliminará el 1 de septiembre) a OAuth de Servidor a Servidor. Los usuarios existentes del plugin deben actualizar su configuración.

Funcionalidades

  • Cuando comienza un webinar de Zoom, el botón “Registrarse” cambia automáticamente a “Unirse”, y al hacer clic en él se lanza el webinar utilizando el SDK de Zoom en un punto de acceso dedicado dentro de tu comunidad de Discourse
  • Envía recordatorios automáticos a los registrados N minutos antes del evento (N es configurable en la configuración del plugin, por defecto los recordatorios están desactivados)
  • Los administradores pueden añadir panelistas a un webinar en Discourse
  • Los administradores pueden añadir un enlace a las grabaciones de video del webinar en Discourse, que luego se muestra a los usuarios después de que el evento haya terminado
  • Los organizadores y panelistas de eventos de Zoom se asocian con cuentas de usuario de Discourse

Uso

Para usar el plugin Discourse Zoom, primero debes instalarlo en tu instancia de Discourse y configurarlo con las credenciales de tu aplicación OAuth de Servidor a Servidor de Zoom. Una vez que el plugin esté configurado, puedes crear un nuevo webinar de Zoom creando un nuevo tema y asociándolo con el webinar. Los usuarios pueden entonces registrarse para el webinar directamente desde el tema.

Instalación

Paso 1: Instalar el plugin en tu instancia de Discourse

Puedes instalar el plugin en tu instancia de Discourse siguiendo las instrucciones aquí.

Paso 2: Crear una aplicación OAuth de Servidor a Servidor en el Marketplace de Zoom


Para comenzar, necesitarás crear una aplicación OAuth de Servidor a Servidor en el Marketplace de Zoom. Esta aplicación será necesaria para realizar solicitudes a la API de Zoom y recibir notificaciones de eventos a través de Webhooks.


Paso 3: Configurar el plugin

Una vez instalado el plugin, ve a la configuración de tu sitio de Discourse y marca la casilla zoom enabled (habilitar zoom) y guarda.

Desde el Marketplace de Zoom, ve a la pestaña App Credentials (Credenciales de la aplicación):

Luego copia y pega los valores en la configuración de sitio correspondiente en tu instancia de Discourse:

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

Paso 4: Establecer el token secreto del webhook

En la pestaña Feature (Funcionalidad) de tu aplicación OAuth de Servidor a Servidor de Zoom, copia el “Secret Token” (Token secreto) y añádelo a la configuración de sitio zoom webhooks secret token de tu sitio de Discourse.

Paso 5: Habilitar suscripciones de eventos

Mientras sigas en la pestaña Feature (Funcionalidad) de tu aplicación OAuth de Servidor a Servidor de Zoom, habilita “Event Subscriptions” (Suscripciones a eventos) y selecciona el botón Add Event Subscription (Añadir suscripción a evento):

A continuación, establece la “Event notification endpoint URL” (URL del punto de conexión de notificación de eventos) en:

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

luego selecciona el botón + Add Events (Añadir eventos):

Abre la pestaña Webinar (Webinar) desde la lista de tipos de evento y marca todos los eventos que se enumeran. Si no puedes ver los permisos de evento de Webinar, consulta cómo habilitar los permisos.

Debajo de la “Event notification endpoint URL” (URL del punto de conexión de notificación de eventos) que estableciste anteriormente, encuentra el botón Validate (Validar):

Debería mostrar A checkmark icon with "Validated" in green si todo funcionó correctamente.

Finalmente, selecciona el botón Save (Guardar) en la parte inferior de la página.

Paso 6: Ámbitos (Scopes)

Una vez que hayas establecido las suscripciones de eventos, ve a la pestaña Scopes (Ámbitos) y haz clic en el botón Add Scopes (Añadir ámbitos). Aquí seleccionarás los siguientes ámbitos ya sea buscando por los valores dados en las tablas, manualmente o usando valores parciales, por ejemplo, en lugar de buscar webinar:read:list_panelists:admin busca webinar:read: esto reducirá los elementos mostrados para que sea más fácil encontrar los requeridos.

En la aplicación OAuth de Servidor a Servidor, bajo la pestaña de ámbitos, haz clic en el botón Add Scopes (Añadir ámbitos) y se abrirá una ventana:

En la búsqueda de ámbitos, busca por nombre completo o parcial. Para facilitar esto, puedes copiar y pegar cada uno de los ámbitos en las siguientes tablas o buscarlos bajo la pestaña correspondiente:

Usuarios

scope desc
user:read:user:admin Ver un usuario
user:read:email:admin Verificar el correo electrónico de un usuario
user:read:list_users:admin Ver usuarios

Webinar

scope desc
webinar:read:list_panelists:admin Ver los panelistas de un webinar
webinar:read:list_absentees:admin Ver los ausentes de un webinar pasado
webinar:read:webinar:admin Ver un webinar
webinar:read:registrant:admin Ver el registrante de un webinar
webinar:read:list_registrants:admin Ver los registrantes de un webinar
webinar:write:batch_registrants:admin Añadir registrantes a un webinar
webinar:delete:webinar:admin Eliminar un webinar
webinar:write:panelist Añadir panelistas a un webinar
webinar:delete:registrant Eliminar un registrante de un webinar
webinar:write:webinar Crear un webinar para un usuario
webinar:update:status Actualizar el estado de un webinar
webinar:delete:panelist Eliminar un panelista de un webinar
webinar:update:webinar Actualizar un webinar
webinar:write:registrant Añadir un registrante a un webinar

Webinar

scope desc
webinar:read:list_panelists:admin Ver los panelistas de un webinar
webinar:read:list_absentees:admin Ver los ausentes de un webinar pasado
webinar:read:webinar:admin Ver un webinar
webinar:read:registrant:admin Ver el registrante de un webinar
webinar:read:list_registrants:admin Ver los registrantes de un webinar
webinar:write:batch_registrants:admin Añadir registrantes a un webinar
webinar:delete:webinar:admin Eliminar un webinar
webinar:write:panelist Añadir panelistas a un webinar
webinar:delete:registrant Eliminar un registrante de un webinar
webinar:write:webinar Crear un webinar para un usuario
webinar:update:status Actualizar el estado de un webinar
webinar:delete:panelist Eliminar un panelista de un webinar
webinar:update:webinar Actualizar un webinar
webinar:write:registrant Añadir un registrante a un webinar

Paso 7: Crear una aplicación SDK de Reunión

:warning: Zoom ha realizado cambios en su lado, estamos trabajando en actualizar la guía.


La aplicación de reunión SDK autentica al usuario para que pueda unirse a la reunión del webinar.


Comienza creando una General App (Aplicación general) y, bajo Select how the app is managed (Selecciona cómo se gestiona la aplicación), elige User-managed (Gestionada por el usuario).

En la pestaña Basic Information (Información básica) de tu Aplicación general, copia y pega el Client ID/ SDK key (ID de cliente/Clave SDK) en el campo zoom sdk key (clave sdk de zoom), y el Client Secret/SDK secret (Secreto de cliente/Secreto SDK) en el campo zoom sdk secret (secreto sdk de zoom).

Al desplazarte hacia abajo, encontrarás la sección OAuth Information (Información OAuth). En OAuth Redirect URL (URL de redirección OAuth), coloca la URL de tu sitio, por ejemplo, https://YOURSITE.com.

Paso 8: Especificar el uso de tu aplicación

Bajo la pestaña Features (Funcionalidades), selecciona la subpestaña Embed (Incrustar) y habilita el Meeting SDK (SDK de reuniones).

Limitaciones

El plugin solo funciona con webinars que no requieren registro en Zoom.

Aviso sobre cambios importantes (Breaking Changes)

Debido a las descontinuaciones en la API de Zoom, las instancias antiguas del plugin necesitarán configurarse siguiendo los pasos mencionados en esta publicación.

:discourse2: ¿Alojado por nosotros? Este plugin está disponible en nuestros planes Enterprise.

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!