Discourse Zoom

:discourse2: Resumo Discourse Zoom oferece aos administradores e usuários do Discourse, com uma assinatura paga do Zoom, a capacidade de agendar, gerenciar e participar de webinars do Zoom diretamente na 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 a uma instância do Discourse. Webinars do Zoom podem ser associados a tópicos, usuários do Discourse podem se registrar para webinars e participá-los quando eles começam.

: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-para-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 clicar nele inicia o webinar usando o SDK do Zoom em um endpoint dedicado dentro da sua comunidade Discourse
  • Lembretes automáticos para 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 é então 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ários 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 seu aplicativo OAuth Servidor-para-Servidor do Zoom. Uma vez que o plugin esteja configurado, 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 do tópico.

Instalação

Passo 1: Instale o plugin na sua instância do Discourse

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

Passo 2: Crie um aplicativo OAuth Servidor-para-Servidor no Zoom Marketplace


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


Passo 3: Configure o plugin

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

No Zoom Marketplace, vá para a aba Credenciais do Aplicativo:

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

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

Passo 4: Defina o token secreto do webhook

Na aba Recursos do seu aplicativo OAuth Servidor-para-Servidor do Zoom, copie o “Token Secreto” e adicione-o à configuração de site zoom webhooks secret token (token secreto de webhooks do zoom) do seu site Discourse.

Passo 5: Ative as assinaturas de eventos

Enquanto ainda estiver na aba Recursos do seu aplicativo OAuth Servidor-para-Servidor do Zoom, ative “Assinaturas de Eventos” e selecione o botão Adicionar Assinatura de Evento:

Em seguida, defina a “URL do ponto de extremidade de notificação de evento” para:

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

e então selecione o botão + 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 de evento Webinar, consulte como habilitar as permissões.

Sob a “URL do ponto de extremidade de notificação de evento” que você definiu anteriormente, encontre o botão Validar:

Ele deve mostrar Um ícone de marca de verificação com "Validado" em verde se tudo funcionou corretamente.

Finalmente, selecione o botão Salvar na parte inferior da página.

Passo 6: Escopos

Depois de definir as assinaturas de eventos, vá para a aba Escopos e clique no botão Adicionar Escopos. Aqui você selecionará os seguintes escopos 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 mostrados, facilitando a localização dos necessários.

No aplicativo OAuth Servidor-para-Servidor, na aba de escopos, clique no botão Adicionar Escopos e uma janela aparecerá:

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 procurá-los na aba correspondente:

Usuários

escopo 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

escopo 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

escopo 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

Passo 7: Crie um Aplicativo Meeting SDK

:warning: O Zoom alterou algumas coisas em seu lado, estamos trabalhando para atualizar o guia.


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


Comece criando um Aplicativo Geral e, sob Selecione como o aplicativo é gerenciado, selecione Gerenciado pelo Usuário.

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

Rolar para baixo, você encontrará a seção Informações OAuth. No OAuth Redirect URL (URL de redirecionamento OAuth), coloque a URL do seu site, por exemplo, https://SEUSITE.com.

Passo 8: Especifique o uso do seu aplicativo

Na aba Recursos, selecione a sub-aba Embed (Embutir), ative o Meeting SDK (SDK de Reuniões).

Limitações

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

Aviso sobre Alterações que Quebram a Compatibilidade

Devido a descontinuações na API do Zoom, as 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!