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 сентября) на OAuth «сервер-сервер». Существующим пользователям плагина необходимо обновить свои настройки.

Функции

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

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

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

Установка

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

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

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


Для начала вам нужно создать приложение OAuth «сервер-сервер» на Zoom Marketplace. Это приложение потребуется для выполнения запросов к API Zoom и получения уведомлений о событиях через веб-хуки.


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

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

Перейдите на вкладку App Credentials (Учётные данные приложения) на Zoom Marketplace:

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

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

Шаг 4: Установка секретного токена веб-хука

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

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

Оставаясь на вкладке Feature (Функции) вашего приложения OAuth «сервер-сервер» в Zoom, включите «Event Subscriptions» (Подписки на события) и нажмите кнопку Add Event Subscription (Добавить подписку на событие):

Далее установите «Event notification endpoint URL» (URL-адрес конечной точки уведомлений о событиях) в:

https://ВАШ_САЙТ.COM/zoom/webhooks/webinars.json

затем нажмите кнопку + Add Events (Добавить события):

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

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

Если всё работает правильно, должно отображаться Значок галочки с надписью "Validated" зелёным цветом.

Наконец, нажмите кнопку Save (Сохранить) в нижней части страницы.

Шаг 6: Области доступа (Scopes)

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

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

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

Пользователи (Users)

scope desc
user:read:user:admin Просмотр пользователя
user:read:email:admin Проверка электронной почты пользователя
user:read:list_users:admin Просмотр пользователей

Вебинар (Webinar)

scope desc
webinar:read:list_panelists:admin Просмотр панелистов вебинара
webinar:read:list_absentees:admin Просмотр отсутствовавших на прошедшем вебинаре
webinar:read:webinar:admin Просмотр вебинара
webinar:read:registrant:admin Просмотр зарегистрированного участника вебинара
webinar:read:list_registrants:admin Просмотр зарегистрированных участников вебинара
webinar:write:batch_registrants:admin Добавление зарегистрированных участников в вебинар
webinar:delete:webinar:admin Удаление вебинара
webinar:write:panelist Добавление панелистов в вебинар
webinar:delete:registrant Удаление зарегистрированного участника вебинара
webinar:write:webinar Создание вебинара для пользователя
webinar:update:status Обновление статуса вебинара
webinar:delete:panelist Удаление панелиста вебинара
webinar:update:webinar Обновление вебинара
webinar:write:registrant Добавление зарегистрированного участника в вебинар

Вебинар (Webinar)

scope desc
webinar:read:list_panelists:admin Просмотр панелистов вебинара
webinar:read:list_absentees:admin Просмотр отсутствовавших на прошедшем вебинаре
webinar:read:webinar:admin Просмотр вебинара
webinar:read:registrant:admin Просмотр зарегистрированного участника вебинара
webinar:read:list_registrants:admin Просмотр зарегистрированных участников вебинара
webinar:write:batch_registrants:admin Добавление зарегистрированных участников в вебинар
webinar:delete:webinar:admin Удаление вебинара
webinar:write:panelist Добавление панелистов в вебинар
webinar:delete:registrant Удаление зарегистрированного участника вебинара
webinar:write:webinar Создание вебинара для пользователя
webinar:update:status Обновление статуса вебинара
webinar:delete:panelist Удаление панелиста вебинара
webinar:update:webinar Обновление вебинара
webinar:write:registrant Добавление зарегистрированного участника в вебинар

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

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


Приложение Meeting 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); в поле OAuth Redirect URL введите URL вашего сайта, например, https://ВАШ_САЙТ.com.

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

На вкладке Features (Функции) выберите подвкладку Embed (Встраивание) и включите Meeting SDK.

Ограничения

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

Уведомление о Breaking Changes (Несовместимых изменениях)

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

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

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? Не резервная ссылка, а принудительная ссылка, чтобы полностью обойти эту проблему. Ещё раз спасибо, Пена!