Webhooks
O suporte a webhooks do Chamilo está atualmente limitado ao plugin BigBlueButton (BBB). Em vez de enviar webhooks para sistemas externos, o Chamilo atua como um receptor de webhooks: ele expõe endpoints que o BigBlueButton chama quando ocorrem eventos em salas, e utiliza esses eventos para construir métricas de atividade por participante.
Como Funciona
Quando uma reunião BBB ocorre, o servidor BBB envia notificações de eventos em tempo real para uma URL de callback assinada na sua instalação do Chamilo. O Chamilo processa cada evento e armazena métricas agregadas (tempo de fala, tempo de câmera, mensagens, reações, mãos levantadas) na tabela de banco de dados conference_activity.
Servidor BigBlueButton
│ POST (assinado)
▼
Endpoint de webhook do Chamilo
│
▼
conference_activity (JSON de métricas)
│
▼
Painel de webhooks (/plugin/Bbb/webhook_dashboard.php)Endpoints
Endpoint PHP legado
POST /plugin/Bbb/webhook.php?au={accessUrlId}&mid={meetingId}&ts={timestamp}&sig={hmac}Gerencia todos os eventos de salas BBB. Valida a assinatura HMAC, depois insere ou atualiza uma linha ConferenceActivity e atualiza o campo JSON de métricas.
Endpoint moderno do Symfony
Definido via API Platform na entidade ConferenceActivity. Requer os cabeçalhos de assinatura para registro de atividade; solicitações sem uma assinatura válida são aceitas, mas nenhuma linha de atividade é gravada.
Configuração (Plugin BBB)
Em Administração → Plugins → BigBlueButton, as seguintes configurações de webhook estão disponíveis:
webhooks_enabled
true / false
Ativar ou desativar o registro de webhooks
webhooks_scope
per_meeting / global
Registrar um hook por reunião ou um único hook global para todas as reuniões
webhooks_hash_algo
sha256 / sha1
Algoritmo HMAC para verificação de assinatura
webhooks_event_filter
string separada por vírgulas
Lista opcional de nomes de eventos BBB a serem recebidos (vazio = todos os eventos)
Quando uma reunião é criada e os webhooks estão ativados, o Chamilo chama a API hooks/create do BBB para registrar a URL de callback. A URL inclui uma assinatura HMAC limitada por tempo.
Validação de Assinatura
O endpoint legado utiliza parâmetros de query-string:
O
salté o valor de salt configurado no plugin BBB.Solicitações com mais de 15 minutos são rejeitadas para limitar ataques de repetição.
O endpoint moderno utiliza cabeçalhos:
Solicitações com mais de 5 minutos são rejeitadas.
Exemplo: Evento de Webhook do BigBlueButton
O BBB envia um corpo JSON contendo um array de eventos. Cada evento possui um data.id (nome do evento) e um objeto data.attributes.
Solicitação do BBB:
O que o Chamilo faz:
Valida a assinatura HMAC e o timestamp.
Pesquisa o
ConferenceMeetingporremote_id.Pesquisa (ou cria) uma linha aberta de
ConferenceActivitypara essa reunião + usuário.Registra
temp.talk_started_at = 1715520123no JSON de métricas.
Quando o evento correspondente user-talking-stopped chega, o Chamilo calcula os segundos decorridos e os adiciona a totals.talk_seconds.
Eventos Rastreados e Métricas
user-joined / participantjoined
Linha de atividade criada
user-talking-started / uservoiceactivated
Temporizador iniciado para totals.talk_seconds
user-talking-stopped / uservoicedeactivated
totals.talk_seconds incrementado
camera-share-started / webcamsharestarted
Temporizador iniciado para totals.camera_seconds
camera-share-stopped / webcamsharestopped
totals.camera_seconds incrementado
chat-message-posted / publicchatmessageposted
counts.messages incrementado
user-reaction-changed / useremojichanged
counts.reactions + detalhamento por emoji
user-hand-raised / userraisedhand
counts.hands incrementado
user-left / participantleft
Temporizadores abertos finalizados, linha de atividade fechada
Estrutura de Dados de Métricas
As métricas são armazenadas como uma coluna JSON em ConferenceActivity:
Os campos temp armazenam carimbos de tempo de início de temporizadores em andamento; eles são limpos quando o evento de parada correspondente chega ou quando o participante sai.
Painel de Controle de Webhook
Um painel de controle administrativo está disponível em /plugin/Bbb/webhook_dashboard.php. Ele exibe métricas em tempo real e históricas por participante para uma determinada reunião: tempo de conexão, tempo de fala, tempo de câmera, contagem de mensagens, contagem de reações e levantadas de mão. Os dados podem ser exportados como CSV.
Registro e Limpeza de Hooks
A classe BbbLib fornece métodos para gerenciar o registro de hooks no servidor BBB:
ensureHookForMeeting($remoteId)
Registra (ou confirma) um hook por reunião após um usuário ingressar
ensureGlobalWebhook()
Registra um único hook global que cobre todas as reuniões
cleanupWebhooks($meetingId)
Exclui hooks registrados pelo Chamilo do servidor BBB
BbbPlugin::checkWebhooksHealth()
Valida se o endpoint hooks/list do BBB está acessível
Extensão para Outras Fontes de Eventos
Atualmente, não há um sistema genérico de webhook de saída no Chamilo (ou seja, não há uma maneira integrada de fazer POST para uma URL externa quando um usuário se inscreve ou conclui um curso). Se você precisar desse comportamento, as opções incluem:
Escrever um plugin que escute eventos do Symfony e dispare chamadas HTTP (consulte Plugins e Sistema de Eventos).
Usar a API REST para sondar alterações de estado a partir de um sistema externo.
Última atualização
Isto foi útil?