Zoom Discourse

:discourse2: Resumo Discourse Zoom capacita administradores e usuários do Discourse com uma assinatura paga do Zoom para agendar, gerenciar e participar de webinars do Zoom diretamente de sua plataforma Discourse.
:hammer_and_wrench: Link do Repositório https://github.com/discourse/discourse-zoom
:open_book: Guia de Instalação Como instalar plugins no Discourse

Visão Geral

Este plugin integra webinars do Zoom em uma instância do Discourse. Webinars do Zoom podem ser associados a tópicos, usuários do Discourse podem se registrar para webinars e participar deles quando começarem.

:warning: Devido à descontinuação da autenticação JWT pelo Zoom, a partir de 1º de agosto de 2023, o mecanismo de autenticação do plugin mudou de JWT (agora descontinuado, o Zoom removerá em 1º de setembro) para OAuth Servidor a Servidor. Usuários existentes do plugin precisam atualizar suas configurações.

Funcionalidades

  • Quando um webinar do Zoom começa, o botão “Registrar” muda automaticamente para “Participar”, e ao clicar nele, o webinar é iniciado usando o SDK do Zoom em um endpoint dedicado dentro da sua comunidade Discourse
  • Lembra automaticamente os participantes do webinar N minutos antes do evento (N é configurável nas configurações do plugin; por padrão, os lembretes estão desativados)
  • Administradores podem adicionar painelistas a um webinar no Discourse
  • Administradores podem adicionar um link para gravações em vídeo do webinar no Discourse, que será exibido aos usuários após o término do evento
  • Anfitriões e painelistas de eventos do Zoom são associados a contas de usuário do Discourse

Uso

Para usar o plugin Discourse Zoom, você primeiro precisa instalá-lo em sua instância do Discourse e configurá-lo com as credenciais do aplicativo OAuth Servidor a Servidor do Zoom. Uma vez configurado o plugin, você pode criar um novo webinar do Zoom criando um novo tópico e associando-o ao webinar. Os usuários podem então se registrar para o webinar diretamente a partir do tópico.

Instalação

Etapa 1: Instale o plugin em sua instância do Discourse

Você pode instalar o plugin em sua instância do Discourse seguindo as instruções aqui.

Etapa 2: Crie um aplicativo OAuth Servidor a Servidor no Zoom Marketplace


Para começar, você precisará criar um aplicativo OAuth Servidor a Servidor no Zoom Marketplace. Este aplicativo será necessário para fazer solicitações à API do Zoom e receber notificações de eventos via Webhooks


Etapa 3: Configure o plugin

Uma vez instalado o plugin, vá para as configurações do seu site no Discourse e marque a caixa de seleção zoom enabled (zoom habilitado) e salve.

No Zoom Marketplace, vá para a aba App Credentials (Credenciais do Aplicativo):

Em seguida, copie e cole os valores nas configurações do site correspondentes em sua instância do Discourse:

  • zoom s2s account id (ID da conta zoom s2s)
  • zoom s2s client id (ID do cliente zoom s2s)
  • zoom s2s client secret (Segredo do cliente zoom s2s)

Etapa 4: Defina o token secreto do webhook

Na aba Feature (Funcionalidade) do seu aplicativo OAuth Servidor a Servidor do Zoom, copie o “Secret Token” (Token Secreto) e adicione-o à configuração do site zoom webhooks secret token (token secreto dos webhooks zoom) do seu site no Discourse.

Etapa 5: Habilite assinaturas de eventos

Enquanto ainda estiver na aba Feature (Funcionalidade) do seu aplicativo OAuth Servidor a Servidor do Zoom, habilite “Event Subscriptions” (Assinaturas de Eventos) e clique no botão Add Event Subscription (Adicionar Assinatura de Evento):

Em seguida, defina a “Event notification endpoint URL” (URL do ponto final de notificação de evento) para:

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

então selecione o botão + Add Events (+ Adicionar Eventos):

Abra a aba Webinar na lista de tipos de evento e marque todos os eventos listados. Se você não conseguir ver as permissões do evento Webinar, verifique como habilitar as permissões.

Sob a “Event notification endpoint URL” que você configurou anteriormente, encontre o botão Validate (Validar):

Deve aparecer Um ícone de marca de verificação com "Validated" em verde se tudo funcionou corretamente.

Finalmente, selecione o botão Save (Salvar) na parte inferior da página

Etapa 6: Escopos

Depois de configurar as assinaturas de eventos, vá para a aba Scopes (Escopos) e clique no botão Add Scopes (Adicionar Escopos). Aqui, você selecionará os seguintes escopos, seja pesquisando pelos valores fornecidos nas tabelas, manualmente ou usando valores parciais; por exemplo, em vez de pesquisar por webinar:read:list_panelists:admin, pesquise por webinar:read:. Isso reduzirá os elementos exibidos, facilitando a localização dos necessários.

No aplicativo OAuth Servidor a Servidor, na aba de escopos, clique no botão Add Scopes (Adicionar Escopos) e uma janela será exibida:

Na pesquisa de escopo, pesquise pelo nome completo ou parcial. Para facilitar isso, você pode copiar e colar cada um dos escopos nas tabelas a seguir ou pesquisá-los na aba correspondente:

Usuários

scope desc
user:read:user:admin Visualizar um usuário
user:read:email:admin Verificar o e-mail de um usuário
user:read:list_users:admin Visualizar usuários

Webinar

scope desc
webinar:read:list_panelists:admin Visualizar os painelistas de um webinar
webinar:read:list_absentees:admin Visualizar os ausentes de um webinar passado
webinar:read:webinar:admin Visualizar um webinar
webinar:read:registrant:admin Visualizar um participante de um webinar
webinar:read:list_registrants:admin Visualizar os participantes de um webinar
webinar:write:batch_registrants:admin Adicionar participantes a um webinar
webinar:delete:webinar:admin Excluir um webinar
webinar:write:panelist Adicionar painelistas a um webinar
webinar:delete:registrant Remover um participante de um webinar
webinar:write:webinar Criar um webinar para um usuário
webinar:update:status Atualizar o status de um webinar
webinar:delete:panelist Remover um painelista de um webinar
webinar:update:webinar Atualizar um webinar
webinar:write:registrant Adicionar um participante a um webinar

Webinar

scope desc
webinar:read:list_panelists:admin Visualizar os painelistas de um webinar
webinar:read:list_absentees:admin Visualizar os ausentes de um webinar passado
webinar:read:webinar:admin Visualizar um webinar
webinar:read:registrant:admin Visualizar um participante de um webinar
webinar:read:list_registrants:admin Visualizar os participantes de um webinar
webinar:write:batch_registrants:admin Adicionar participantes a um webinar
webinar:delete:webinar:admin Excluir um webinar
webinar:write:panelist Adicionar painelistas a um webinar
webinar:delete:registrant Remover um participante de um webinar
webinar:write:webinar Criar um webinar para um usuário
webinar:update:status Atualizar o status de um webinar
webinar:delete:panelist Remover um painelista de um webinar
webinar:update:webinar Atualizar um webinar
webinar:write:registrant Adicionar um participante a um webinar

Etapa 7: Crie um aplicativo Meeting SDK

:warning: O Zoom mudou algumas coisas do lado deles; estamos trabalhando para atualizar o guia.


O aplicativo de reunião do SDK autentica o usuário para que ele possa participar da reunião do webinar


Comece criando um General App (Aplicativo Geral) e, em Select how the app is managed (Selecione como o aplicativo é gerenciado), escolha User-managed (Gerenciado pelo usuário).

Na aba Basic Information (Informações Básicas) do seu Aplicativo Geral, copie e cole o Client ID/ SDK key (ID do Cliente/Chave SDK) no campo zoom sdk key (chave sdk zoom) e o Client Secret/SDK secret (Segredo do Cliente/Segredo SDK) no campo zoom sdk secret (segredo sdk zoom).

Rolando para baixo, você encontrará a seção OAuth Information (Informações OAuth); no campo OAuth Redirect URL (URL de Redirecionamento OAuth), coloque a URL do seu site, por exemplo, https://YOURSITE.com.

Etapa 8: Especifique o uso do seu aplicativo

Na aba Features (Funcionalidades), selecione a subaba Embed (Incorporar) e habilite o Meeting SDK.

Limitações

O plugin funciona apenas com webinars que não exigem registro no Zoom.

Aviso sobre Alterações Quebras

Devido às descontinuações na API do Zoom, instâncias antigas do plugin precisarão ser configuradas seguindo as etapas mencionadas neste post.

:discourse2: Hospedado por nós? Este plugin está disponível em nossos planos Enterprise.

63 curtidas

Muito obrigado por trabalhar nisso, excelente recurso!

Consegui instalar o plugin, criar o aplicativo JWT no Zoom e configurar meu Discourse conforme descrito.
No entanto, estou tendo problemas ao usar o botão de Webinar do Zoom no compositor para associar uma reunião agendada à postagem.

Seria ótimo se você pudesse adicionar uma explicação sobre o que exatamente deve ser inserido no campo de texto em “Adicionar Webinar”. Nem o ID da reunião nem a URL completa parecem funcionar para mim.

Outro problema menor que notei: a URL do repositório vinculada na página “Plugins” do painel de administração aponta para https://github.com/discourse-org/discourse-zoom, quando deveria estar vinculada a GitHub - discourse/discourse-zoom: Integrate Zoom events in Discourse. · GitHub

2 curtidas

Conceito interessante, e parece uma ótima experiência para os membros da comunidade!

Tenho curiosidade em saber se já foi considerado permitir um fluxo de trabalho mais genérico (independente de fornecedor) com este plugin; basicamente, oferecer a mesma incorporação de um cronômetro regressivo para uma data e hora específicas, especificando um anfitrião e/ou palestrante, link para a URL do webinar, links posteriores para gravações, etc.

O Jiti (código aberto) seria o exemplo que eu tinha em mente, mas obviamente existem várias opções nessa área.

2 curtidas

Você precisa inserir o ID do webinar. Nos logs do seu site em /logs, você deverá conseguir ver mais detalhes se ainda não for possível adicionar o evento na janela modal. Também corrigi o problema de URL que você mencionou, obrigado por relatar isso.

Infelizmente, não, isso atualmente não oferece um fluxo de trabalho agnóstico de fornecedor. As chamadas da API do Zoom são abstraídas, no entanto, então é possível adicionar suporte a outro fornecedor com um pouco de esforço (embora o plugin precise ser renomeado para algo menos relacionado ao Zoom).

8 curtidas

Há alguma possibilidade de adicionar suporte a reuniões sem registro a este plugin, assim como para webinars? Ótimo trabalho!

7 curtidas

Agora que o Zoom exige uma senha para todas as reuniões e webinars, acho que o plugin está quebrado. Tentei criar um webinar e, ao tentar entrar, recebi o seguinte erro: ‘Sua conexão expirou e você não pode entrar na reunião. Verifique sua conectividade de rede e tente novamente.’

3 curtidas

Vou verificar isso hoje. É possível que se trate de um problema temporário; o cliente web do Zoom está marcado como “em manutenção” na página de status deles em status.zoom.us.

5 curtidas

Só quero mencionar que o uso de webinars custa no mínimo R$ 40,00 por mês para ativar, mais o plano Pro de R$ 14,99 por mês. Abraços.

2 curtidas

Sim, infelizmente parece que o Web SDK do Zoom está offline por enquanto. Eles afirmam que estão trabalhando para trazê-lo de volta ao ar (não tenho certeza do que isso significa exatamente).

Por enquanto, então, adicionei uma solução alternativa ao plugin: ao entrar em um webinar, ele agora mostrará esta tela quando a entrada via SDK falhar:

8 curtidas

FYI, uma cooperativa que co-fundei optou por https://bigbluebutton.org/. Hospedá-la internamente nos custou muito menos do que uma conta de webinar do Zoom.

11 curtidas

Oi Penar, acabei de notar que há uma aba Webinar no perfil do usuário. Como administrador, consigo visualizar conforme o esperado, mas como usuário comum recebo este erro:

Acesso Negado

ao tentar carregar [/topics/webinar-registrations/chris_murray.json](https://community.naturephotographers.network/topics/webinar-registrations/chris_murray.json)

Dos logs:

Erro: Proibido
URL: https://community.naturephotographers.network/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js
Linha: 1
Coluna: 267206
Localização da Janela: 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 curtida

Não consegui reproduzir isso. Testei em vários sites com diferentes nomes de usuário, inclusive localmente com um nome contendo um sublinhado.

Sim, o plugin usa o WebSDK do Zoom e ele apresenta problemas em alguns navegadores.

1 curtida

FYI, acabei de fazer um webinar usando isso e o botão ‘Participar’ não funcionou de forma alguma; todos receberam um tempo esgotado do Zoom. No entanto, direcionei todos para o link regular do Zoom, que funcionou perfeitamente. Parece que o WebSDK está apresentando muitos problemas. Talvez pudéssemos ter uma opção para inserir a URL do botão ‘Participar’, em vez de depender do WebSDK, já que ele está falhando?

1 curtida

O SDK do Zoom deve funcionar se você fizer a implantação; atualizei o plugin na semana passada. Eles bloquearam todas as versões anteriores, então, se você não fez a implantação recentemente, isso pode explicar o problema. E adicionar o link do Zoom como uma opção faz sentido.

2 curtidas

Obrigado, Penar. Não sabia que havia uma atualização; espero que isso resolva para a próxima vez.

Uma pergunta sobre o vídeo que você pode adicionar depois: isso funciona apenas para gravações na nuvem do Zoom? Se eu usar o Vimeo ou o YouTube, ele diz que não é um formato compatível. Só por curiosidade, não é grande coisa, já que posso simplesmente incluí-lo na postagem.

1 curtida

Ah, sim, esse campo só funciona com um URL para um arquivo de vídeo direto. YouTube ou Vimeo não funcionarão, mas, como você disse, é muito mais fácil usar oneboxing para URLs do YouTube/Vimeo.

3 curtidas

Veja: BigBlueButton video conference

1 curtida

Apenas um pequeno feedback depois de usar isso algumas vezes.

  1. O botão de entrar ficar oculto até que a webinar comece não é amigável ao usuário. Recebo vários e-mails antes do início da webinar perguntando onde está o link para entrar, mesmo tendo explicado isso na descrição da webinar e na notificação de que ele aparecerá quando a webinar começar. As pessoas simplesmente não leem. Pessoalmente, eu preferiria ter o botão de entrar sempre visível; se clicarem nele antes, apenas receberão a informação de que a webinar ainda não começou e poderão verificar novamente o horário real de início.

  2. Seria possível dar suporte a sessões de ensaio? Com uma webinar, há a opção de isso: o host e os painelistas podem conversar entre si antes, sem estar ao vivo para os participantes. Eles podem clicar no link da reunião do Zoom durante esse período e receberão uma notificação informando que a reunião ainda não começou, mas estarão em uma espécie de sala de espera, e a entrada será automática assim que iniciarmos a transmissão ao vivo. Isso resolveria muitos problemas para os usuários.

3 curtidas

Peço desculpas pelo atraso, David.

Existe uma configuração que provavelmente pode ajudar você nisso:

Se você definir isso para 30, o botão aparecerá 30 minutos antes do horário agendado do webinar.

Você deve ser capaz de usar isso com a configuração acima também. Na última vez que verifiquei, os webhooks do Zoom não são acionados quando a sessão de ensaio se transforma em um evento completo, o que torna um pouco complicado o outro aspecto dinâmico.

3 curtidas

Obrigado, Penar, mas esse não é exatamente o problema.

Primeiro, meu botão “Inscreva-se agora” não está funcionando de forma alguma:

Antes funcionava, mas isso começou nas últimas semanas. Também não vejo o link de fallback aparecendo.

Além disso, há um problema separado que mencionei antes: o problema do modo de prática. Quando eu tinha o problema mencionado anteriormente, funcionava assim: quando eu iniciava o webinar no modo de prática, o botão de entrar não aparecia, não importava como o zoom join x mins before start estivesse configurado; ele só aparecia quando eu realmente iniciava a transmissão, o que eu gosto de fazer apenas 5 minutos antes do início. Idealmente, o botão de entrar apareceria assim que a configuração fosse atingida, e os participantes receberiam a notificação do Zoom de que o webinar ainda não começou.

Você acha que poderia oferecer uma opção para simplesmente trocar o botão de registro pelo botão de entrar no horário definido, usando apenas o link do Zoom? Não um fallback, mas um link forçado para contornar isso completamente. Obrigado novamente, Penar!