Zoom Discourse

:discourse2: Résumé Discourse Zoom offre aux administrateurs et aux utilisateurs de Discourse disposant d’un abonnement Zoom payant la possibilité de planifier, gérer et participer à des webinaires Zoom directement depuis leur plateforme Discourse.
:hammer_and_wrench: Lien vers le dépôt
:open_book: Guide d’installation

Vue d’ensemble

Ce plugin intègre les webinaires Zoom dans une instance Discourse. Les webinaires Zoom peuvent être associés à des sujets, et les utilisateurs de Discourse peuvent s’inscrire aux webinaires et y participer dès leur démarrage.

:warning: Étant donné que Zoom a déprécié l’authentification JWT, à compter du 1er août 2023, le mécanisme d’authentification du plugin est passé de JWT (désormais déprécié, Zoom le supprimera le 1er septembre) à l’OAuth serveur-à-serveur. Les utilisateurs existants du plugin doivent mettre à jour leurs paramètres.

Fonctionnalités

  • Lorsqu’un webinaire Zoom commence, le bouton « S’inscrire » passe automatiquement à « Rejoindre », et en cliquant dessus, le webinaire est lancé en utilisant le SDK Zoom dans un point de terminaison dédié au sein de votre communauté Discourse
  • Rappelle automatiquement aux personnes inscrites au webinaire N minutes avant l’événement (N est configurable dans les paramètres du plugin ; par défaut, les rappels sont désactivés)
  • Les administrateurs peuvent ajouter des panélistes à un webinaire dans Discourse
  • Les administrateurs peuvent ajouter un lien vers les enregistrements vidéo du webinaire dans Discourse, qui sera ensuite affiché aux utilisateurs après la fin de l’événement
  • Les hôtes et les panélistes des événements Zoom sont associés aux comptes utilisateurs Discourse

Utilisation

Pour utiliser le plugin Discourse Zoom, vous devez d’abord l’installer dans votre instance Discourse et le configurer avec les informations d’identification de votre application OAuth serveur-à-serveur Zoom. Une fois le plugin configuré, vous pouvez créer un nouveau webinaire Zoom en créant un nouveau sujet et en l’associant au webinaire. Les utilisateurs peuvent ensuite s’inscrire au webinaire directement depuis le sujet.

Installation

Étape 1 : Installer le plugin dans votre instance Discourse

Vous pouvez installer le plugin dans votre instance Discourse en suivant les instructions ici.

Étape 2 : Créer une application OAuth serveur-à-serveur dans le Marketplace Zoom


Pour commencer, vous devez créer une application OAuth serveur-à-serveur dans le Marketplace Zoom. Cette application sera nécessaire pour effectuer des requêtes vers l’API Zoom et recevoir des notifications d’événements via des webhooks.


Étape 3 : Configurer le plugin

Une fois le plugin installé, accédez aux paramètres de votre site Discourse, cochez la case zoom enabled (plugin Zoom activé) et enregistrez.

Depuis le Marketplace Zoom, accédez à l’onglet App Credentials (Informations d’identification de l’application) :

Copiez ensuite et collez les valeurs dans les paramètres de site correspondants de votre instance Discourse :

  • zoom s2s account id (ID de compte OAuth serveur-à-serveur Zoom)
  • zoom s2s client id (ID client OAuth serveur-à-serveur Zoom)
  • zoom s2s client secret (Secret client OAuth serveur-à-serveur Zoom)

Étape 4 : Définir le jeton secret du webhook

Dans l’onglet Feature (Fonctionnalité) de votre application OAuth serveur-à-serveur Zoom, copiez le « Secret Token » (Jeton secret) et ajoutez-le au paramètre de site zoom webhooks secret token de votre site Discourse.

Étape 5 : Activer les abonnements aux événements

Toujours dans l’onglet Feature (Fonctionnalité) de votre application OAuth serveur-à-serveur Zoom, activez « Event Subscriptions » (Abonnements aux événements) et cliquez sur le bouton Add Event Subscription (Ajouter un abonnement aux événements) :

Ensuite, définissez l’« Event notification endpoint URL » (URL du point de terminaison de notification d’événement) sur :

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

puis cliquez sur le bouton + Add Events (Ajouter des événements) :

Ouvrez l’onglet Webinar (Webinaire) dans la liste des types d’événements et cochez tous les événements répertoriés. Si vous ne voyez pas les permissions d’événement Webinar, consultez comment activer les permissions.

Sous l’« Event notification endpoint URL » que vous avez définie précédemment, trouvez le bouton Validate (Valider) :

Si tout fonctionne correctement, vous devriez voir Une icône de coche avec « Validé » en vert.

Enfin, cliquez sur le bouton Save (Enregistrer) en bas de la page.

Étape 6 : Portées (Scopes)

Une fois les abonnements aux événements configurés, accédez à l’onglet Scopes (Portées) et cliquez sur le bouton Add Scopes (Ajouter des portées). Ici, vous sélectionnerez les portées suivantes en recherchant soit les valeurs indiquées dans les tableaux, soit manuellement, soit en utilisant des valeurs partielles. Par exemple, au lieu de rechercher webinar:read:list_panelists:admin, recherchez webinar:read: ; cela permettra de filtrer les éléments affichés et facilitera la recherche de ceux dont vous avez besoin.

Dans l’application OAuth serveur-à-serveur, sous l’onglet Scopes, cliquez sur le bouton Add Scopes (Ajouter des portées) et une fenêtre s’affichera :

Dans la recherche de portée, recherchez par nom complet ou partiel. Pour faciliter cela, vous pouvez copier-coller chacune des portées dans les tableaux suivants ou les rechercher dans l’onglet correspondant :

Utilisateurs

scope desc
user:read:user:admin Voir un utilisateur
user:read:email:admin Vérifier l’email d’un utilisateur
user:read:list_users:admin Voir les utilisateurs

Webinaire

scope desc
webinar:read:list_panelists:admin Voir les panélistes d’un webinaire
webinar:read:list_absentees:admin Voir les absents d’un webinaire passé
webinar:read:webinar:admin Voir un webinaire
webinar:read:registrant:admin Voir un inscrit à un webinaire
webinar:read:list_registrants:admin Voir les inscrits à un webinaire
webinar:write:batch_registrants:admin Ajouter des inscrits à un webinaire
webinar:delete:webinar:admin Supprimer un webinaire
webinar:write:panelist Ajouter des panélistes à un webinaire
webinar:delete:registrant Supprimer un inscrit à un webinaire
webinar:write:webinar Créer un webinaire pour un utilisateur
webinar:update:status Mettre à jour le statut d’un webinaire
webinar:delete:panelist Supprimer un panéliste d’un webinaire
webinar:update:webinar Mettre à jour un webinaire
webinar:write:registrant Ajouter un inscrit à un webinaire

Webinaire

scope desc
webinar:read:list_panelists:admin Voir les panélistes d’un webinaire
webinar:read:list_absentees:admin Voir les absents d’un webinaire passé
webinar:read:webinar:admin Voir un webinaire
webinar:read:registrant:admin Voir un inscrit à un webinaire
webinar:read:list_registrants:admin Voir les inscrits à un webinaire
webinar:write:batch_registrants:admin Ajouter des inscrits à un webinaire
webinar:delete:webinar:admin Supprimer un webinaire
webinar:write:panelist Ajouter des panélistes à un webinaire
webinar:delete:registrant Supprimer un inscrit à un webinaire
webinar:write:webinar Créer un webinaire pour un utilisateur
webinar:update:status Mettre à jour le statut d’un webinaire
webinar:delete:panelist Supprimer un panéliste d’un webinaire
webinar:update:webinar Mettre à jour un webinaire
webinar:write:registrant Ajouter un inscrit à un webinaire

Étape 7 : Créer une application Meeting SDK

:warning: Zoom a apporté des modifications de leur côté ; nous travaillons à la mise à jour du guide.


L’application SDK Meeting authentifie l’utilisateur afin qu’il puisse rejoindre la réunion du webinaire.


Commencez par créer une General App (Application générale), et sous Select how the app is managed (Sélectionner comment l’application est gérée), choisissez User-managed (Gérée par l’utilisateur).

Dans l’onglet Basic Information (Informations de base) de votre General App, copiez et collez le Client ID/ SDK key (ID client / clé SDK) dans le champ zoom sdk key, et le Client Secret/SDK secret (Secret client / secret SDK) dans le champ zoom sdk secret.

En faisant défiler vers le bas, vous trouverez la section OAuth Information (Informations OAuth) ; dans le champ OAuth Redirect URL (URL de redirection OAuth), placez l’URL de votre site, par exemple https://VOTRESITE.com.

Étape 8 : Spécifier l’utilisation de votre application

Sous l’onglet Features (Fonctionnalités), sélectionnez le sous-onglet Embed (Intégrer) et activez le Meeting SDK.

Limitations

Le plugin ne fonctionne qu’avec les webinaires qui ne nécessitent pas d’inscription dans Zoom.

Avis concernant les modifications majeures (Breaking Changes)

En raison des dépréciations dans l’API Zoom, les anciennes instances du plugin devront être configurées en suivant les étapes mentionnées dans ce message.

:discourse2: Hébergé par nous ? Ce plugin est disponible dans nos offres Entreprise.

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 !