Discourse Zoom

:discourse2: Краткое описание Discourse Zoom предоставляет администраторам и пользователям Discourse с платной подпиской Zoom возможность планировать, управлять и участвовать в вебинарах Zoom непосредственно из платформы Discourse.
:hammer_and_wrench: Ссылка на репозиторий https://github.com/discourse/discourse-zoom
:open_book: Руководство по установке Как установить плагины в Discourse

Обзор

Этот плагин интегрирует вебинары Zoom в экземпляр Discourse. Вебинары Zoom могут быть связаны с темами, пользователи Discourse могут регистрироваться на вебинары и присоединяться к ним, когда они начинаются.

:warning: В связи с тем, что Zoom прекращает поддержку аутентификации JWT, начиная с 1 августа 2023 года механизм аутентификации плагина изменился с JWT (теперь устаревшего, Zoom удалит его 1 сентября) на Server-to-Server OAuth. Существующим пользователям плагина необходимо обновить свои настройки.

Возможности

  • Когда начинается вебинар Zoom, кнопка «Регистрация» автоматически переключается на «Присоединиться», и при нажатии на неё вебинар запускается с использованием Zoom SDK на выделенной конечной точке внутри вашего сообщества Discourse
  • Автоматически напоминает зарегистрированным участникам вебинара за N минут до начала события (N настраивается в параметрах плагина, по умолчанию напоминания отключены)
  • Администраторы могут добавлять панелей к вебинару в Discourse
  • Администраторы могут добавить ссылку на видеозаписи вебинара в Discourse, которая затем отображается пользователям после завершения события
  • Ведущие и панелей вебинаров Zoom связаны с учетными записями пользователей Discourse

Использование

Чтобы использовать плагин Discourse Zoom, сначала необходимо установить его в вашем экземпляре Discourse и настроить с учетными данными вашего приложения Zoom Server-to-Server OAuth. После настройки плагина вы можете создать новый вебинар Zoom, создав новую тему и связав её с вебинаром. Затем пользователи могут зарегистрироваться на вебинар непосредственно из темы.

Установка

Шаг 1: Установка плагина в ваш экземпляр Discourse

Вы можете установить плагин в ваш экземпляр Discourse, следуя инструкциям здесь.

Шаг 2: Создание приложения Server-to-Server OAuth в Zoom Marketplace


Чтобы начать, вам нужно создать приложение Server-to-Server OAuth в Zoom Marketplace. Это приложение потребуется для отправки запросов к API Zoom и получения уведомлений о событиях через Webhooks.


Шаг 3: Настройка плагина

После установки плагина перейдите к настройкам вашего сайта Discourse и установите флажок zoom enabled, затем сохраните.

В Zoom Marketplace перейдите на вкладку App Credentials:

Затем скопируйте и вставьте значения в соответствующие настройки сайта в вашем экземпляре Discourse:

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

Шаг 4: Установите секретный токен webhook

На вкладке Feature вашего приложения Zoom Server-to-Server OAuth скопируйте «Secret Token» и добавьте его в настройку сайта zoom webhooks secret token вашего сайта Discourse.

Шаг 5: Включите подписки на события

Оставаясь на вкладке Feature вашего приложения Zoom Server-to-Server OAuth, включите «Event Subscriptions» и нажмите кнопку Add Event Subscription:

Затем установите «Event notification endpoint URL» в:

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

затем нажмите кнопку + Add Events:

Откройте вкладку Webinar из списка типов событий и отметьте все перечисленные события. Если вы не видите разрешения на события Webinar, проверьте как включить разрешения.

Под «Event notification endpoint URL», который вы установили ранее, найдите кнопку Validate:

Если всё сработало, должно появиться A checkmark icon with "Validated" in green

Наконец, нажмите кнопку Save внизу страницы

Шаг 6: Scopes

После того как вы настроили подписки на события, перейдите на вкладку Scopes и нажмите кнопку Add Scopes. Здесь вы выберете следующие области действия, либо выполнив поиск по указанным в таблицах значениям, либо вручную, либо используя частичные значения, например, вместо поиска webinar:read:list_panelists:admin ищите webinar:read:. Это сузит отображаемые элементы, чтобы было легче найти нужные.

В приложении Server to server OAuth на вкладке scopes нажмите кнопку Add Scopes, и появится окно:

В поле поиска scopes ищите по полному или частичному имени. Для удобства вы можете скопировать и вставить каждое из следующих scopes в соответствующие таблицы или найти их на соответствующих вкладках:

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

Шаг 7: Создание приложения Meeting SDK

:warning: Zoom изменил некоторые вещи на своей стороне, мы работаем над обновлением руководства.


Приложение SDK для встреч аутентифицирует пользователя, чтобы он мог присоединиться к вебинару


Начните с создания General App, и в разделе Select how the app is managed выберите User-managed.

На вкладке Basic Information вашего General App скопируйте и вставьте Client ID/ SDK key в поле zoom sdk key, а Client Secret/SDK secret — в поле zoom sdk secret.

Прокрутив вниз, вы найдете раздел OAuth Information. В поле OAuth Redirect URL укажите URL вашего сайта, например, https://YOURSITE.com.

Шаг 8: Укажите использование вашего приложения

На вкладке Features выберите подвкладку Embed, включите Meeting SDK

Ограничения

Плагин работает только с вебинарами, которые не требуют регистрации в Zoom.

Уведомление о критических изменениях

Из-за устаревания в API Zoom старые экземпляры плагина необходимо будет настроить в соответствии с шагами, указанными в этом сообщении.

:discourse2: Размещено нами? Этот плагин доступен в наших планах Enterprise.

63 лайка

Большое спасибо за работу над этим, отличная функция!

Мне удалось установить плагин, создать приложение JWT в Zoom и настроить Discourse, как описано.
Однако у меня возникли проблемы при использовании кнопки «Zoom Webinar» в редакторе для привязки запланированного совещания к сообщению.

Будет здорово, если вы сможете добавить пояснение, что именно нужно вводить в текстовое поле под надписью «Add Webinar». Ни ID совещания, ни полный URL для меня не работают.

Ещё один небольшой замеченный мною момент: ссылка на репозиторий на странице «Плагины» в панели администратора ведёт на https://github.com/discourse-org/discourse-zoom, хотя должна вести на GitHub - discourse/discourse-zoom: Integrate Zoom events in Discourse. · GitHub.

2 лайка

Интересная концепция, и выглядит как отличный опыт для участников сообщества!

Меня интересует, обсуждалась ли уже возможность более универсального (независимого от вендора) рабочего процесса с этим плагином; по сути, чтобы предлагать аналогичную интеграцию таймера обратного отсчета до конкретной даты и времени, указание хоста и/или спикера, ссылку на URL вебинара, последующие ссылки на записи и т. д.

В качестве примера я имел в виду Jiti (с открытым исходным кодом), но, очевидно, в этой области есть несколько вариантов.

2 лайка

Вам нужно ввести ID вебинара. В логах вашего сайта в папке /logs вы сможете увидеть более подробную информацию, если добавление события в модальном окне по-прежнему не удаётся. Я также исправил проблему со ссылкой, о которой вы упомянули, спасибо за сообщение об этом.

К сожалению, на данный момент универсальный рабочий процесс, независимый от вендора, не поддерживается. Однако вызовы API Zoom абстрагированы, поэтому возможно добавить поддержку другого вендора с определёнными усилиями (хотя плагин пришлось бы переименовать в что-то менее связанное с Zoom).

8 лайков

Есть ли возможность добавить поддержку встреч без регистрации в этот плагин, а также вебинары? Отличная работа!

7 лайков

Теперь, когда Zoom требует пароль для всех встреч и вебинаров, я думаю, что плагин перестал работать. Я попытался создать вебинар, и при попытке присоединиться появляется ошибка: «Ваше соединение истекло, и вы не можете присоединиться к встрече. Проверьте подключение к сети и повторите попытку».

3 лайка

Я разберусь с этим сегодня. Возможно, это временная проблема: веб-клиент Zoom помечен как «на техническом обслуживании» на их странице статуса status.zoom.us.

5 лайков

Хочу лишь уточнить, что использование вебинаров требует минимальной платы в размере 40,00 долларов США в месяц за активацию плюс 14,99 долларов США в месяц за тариф Pro. С уважением.

2 лайка

Да, к сожалению, похоже, что Web SDK Zoom сейчас недоступен. Они сообщают, что работают над возвращением его в строй (не совсем понятно, что это означает).

Пока что я добавил обходное решение в плагин: при присоединении к вебинару, если подключение через SDK не удаётся, теперь будет отображаться этот экран:

8 лайков

К сведению: кооператив, который я основал, выбрал https://bigbluebutton.org/. Самохостинг обошёлся нам гораздо дешевле, чем аккаунт Zoom для вебинаров.

11 лайков

Привет, Пена, я только что заметил, что в профиле пользователя есть вкладка Webinar. Как администратор, я могу её просмотреть, как и ожидалось, но как обычный пользователь я получаю эту ошибку:

Доступ запрещён

при попытке загрузить [/topics/webinar-registrations/chris_murray.json](https://community.naturephotographers.network/topics/webinar-registrations/chris_murray.json)

Из логов:

Ошибка: Forbidden
Url: https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js
Строка: 1
Столбец: 267206
Расположение окна: 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 лайк

Мне не удалось воспроизвести эту проблему. Я тестировал на нескольких сайтах с разными именами пользователей, включая локальную установку с именем, содержащим знак подчёркивания.

Да, плагин использует WebSDK от Zoom, и в некоторых браузерах возникают проблемы.

1 лайк

К сведению: я только что провёл вебинар с использованием этого функционала, и кнопка «Присоединиться» вообще не работала — у всех возникло тайм-аут-сообщение от Zoom. Однако я перенаправил всех на обычную ссылку Zoom, которая работала без проблем. Похоже, WebSDK испытывает множество проблем. Возможно, стоит добавить возможность указывать URL для кнопки «Присоединиться» вручную, вместо того чтобы полагаться на WebSDK, который даёт сбои?

1 лайк

SDK Zoom должен работать, если вы развернули проект — я обновлял плагин на прошлой неделе. Однако они заблокировали все предыдущие версии, так что, если вы не развертывали проект недавно, это может быть причиной проблемы. И добавление ссылки Zoom в качестве опции выглядит логичным.

2 лайка

Спасибо, Пенар. Я не знал, что есть обновление. Надеюсь, это исправит проблему в следующий раз.

Вопрос насчёт видео, которое можно добавить после: это работает только для записей из облака Zoom? Если я использую Vimeo или YouTube, система пишет, что это неподдерживаемый формат. Просто любопытно, не критично, так как я могу просто включить его в пост.

1 лайк

Да, это поле работает только с URL-адресом прямого видеофайла. YouTube или Vimeo не подойдут, но, как вы правильно заметили, для ссылок на YouTube/Vimeo гораздо проще использовать одноблочное встраивание.

3 лайка

См.: BigBlueButton video conference

1 лайк

Небольшой фидбек после нескольких использований.

  1. Кнопка «Присоединиться», скрытая до начала вебинара, неудобна для пользователей. Я получаю несколько писем до начала вебинара с вопросом, где ссылка для подключения, хотя я указал это в описании вебинара и в уведомлении о том, что кнопка появится с началом трансляции. Люди просто не читают. Лично я предпочёл бы, чтобы кнопка «Присоединиться» всегда была видна: если на неё нажать раньше времени, система просто сообщит, что вебинар ещё не начался, и пользователи вернутся, чтобы уточнить точное время начала.

  2. Возможно ли добавить поддержку репетиций? В случае с вебинарами есть такая опция: ведущий и спикеры могут общаться друг с другом заранее, не включая трансляцию для участников. Они могут перейти по ссылке на встречу в Zoom в это время, и им будет показано уведомление о том, что встреча ещё не началась, но они находятся в своеобразной «комнате ожидания». Как только мы включаем трансляцию, они автоматически подключаются. Это решило бы множество проблем для пользователей.

3 лайка

Приносим извинения за задержку, Дэвид.

Есть настройка, которая, вероятно, поможет вам в этом:

Если установить значение 30, кнопка появится за 30 минут до запланированного времени вебинара.

Вы также можете использовать это с помощью настройки выше. По последним данным, вебхуки Zoom не срабатывают, когда репетиция переходит в полноценное мероприятие, что немного усложняет эту ситуацию.

3 лайка

Спасибо, Пена, но дело не совсем в этом.

Во-первых, моя кнопка «Присоединиться сейчас» больше вообще не работает:

Ранее она работала, но проблема возникла в последние пару недель. Кроме того, я также не вижу отображения резервной ссылки.

Далее, отдельная проблема, которую я описывал ранее, связана с режимом репетиции. Когда у меня была упомянутая выше проблема, всё работало следующим образом: когда я запускал вебинар в режиме репетиции, кнопка «Присоединиться» не появлялась, независимо от того, как установлено значение «присоединиться к Zoom за X минут до начала». Она появлялась только тогда, когда я фактически начинал трансляцию, что я предпочитаю делать только за 5 минут до начала. В идеале кнопка «Присоединиться» должна появляться в момент, заданный настройкой, тогда участники получали бы уведомление от Zoom о том, что вебинар ещё не начался.

Не могли бы вы добавить опцию, которая просто переключает кнопку регистрации на кнопку «Присоединиться» в заданное время, и при этом использовалась бы прямая ссылка на Zoom? Не резервная ссылка, а принудительная ссылка, чтобы полностью обойти эту проблему. Ещё раз спасибо, Пена!