Webhook
Il supporto ai webhook di Chamilo è attualmente limitato al plugin BigBlueButton (BBB). Invece di inviare webhook a sistemi esterni, Chamilo funge da ricevitore di webhook: espone endpoint che BigBlueButton chiama quando si verificano eventi nelle stanze, e utilizza questi eventi per costruire metriche di attività per partecipante.
Come Funziona
Quando si svolge una riunione BBB, il server BBB invia notifiche di eventi in tempo reale a un URL di callback firmato sulla tua installazione di Chamilo. Chamilo elabora ogni evento e memorizza metriche aggregate (tempo di parola, tempo di utilizzo della telecamera, messaggi, reazioni, alzate di mano) nella tabella del database conference_activity.
Server BigBlueButton
│ POST (firmato)
▼
Endpoint webhook di Chamilo
│
▼
conference_activity (JSON delle metriche)
│
▼
Dashboard dei webhook (/plugin/Bbb/webhook_dashboard.php)Endpoint
Endpoint PHP legacy
POST /plugin/Bbb/webhook.php?au={accessUrlId}&mid={meetingId}&ts={timestamp}&sig={hmac}Gestisce tutti gli eventi delle stanze BBB. Valida la firma HMAC, quindi aggiorna o inserisce una riga ConferenceActivity e aggiorna il campo JSON delle metriche.
Endpoint Symfony moderno
Definito tramite API Platform sull'entità ConferenceActivity. Richiede gli header di firma per la registrazione dell'attività; le richieste senza una firma valida vengono accettate ma non viene scritta alcuna riga di attività.
Configurazione (Plugin BBB)
In Amministrazione → Plugin → BigBlueButton, sono disponibili le seguenti impostazioni per i webhook:
webhooks_enabled
true / false
Abilita o disabilita la registrazione dei webhook
webhooks_scope
per_meeting / global
Registra un hook per ogni riunione o un unico hook globale per tutte le riunioni
webhooks_hash_algo
sha256 / sha1
Algoritmo HMAC per la verifica della firma
webhooks_event_filter
stringa separata da virgole
Elenco opzionale di nomi di eventi BBB da ricevere (vuoto = tutti gli eventi)
Quando viene creata una riunione e i webhook sono abilitati, Chamilo chiama l'API BBB hooks/create per registrare l'URL di callback. L'URL include una firma HMAC con limite temporale.
Validazione della Firma
L'endpoint legacy utilizza parametri nella stringa di query:
Il
saltè il valore di salt configurato nel plugin BBB.Le richieste più vecchie di 15 minuti vengono rifiutate per limitare gli attacchi di tipo replay.
L'endpoint moderno utilizza gli header:
Le richieste più vecchie di 5 minuti vengono rifiutate.
Esempio: Evento Webhook di BigBlueButton
BBB invia un corpo JSON contenente un array di eventi. Ogni evento ha un data.id (nome dell'evento) e un oggetto data.attributes.
Richiesta da BBB:
Cosa fa Chamilo:
Valida la firma HMAC e il timestamp.
Cerca il
ConferenceMeetingtramiteremote_id.Cerca (o crea) una riga aperta di
ConferenceActivityper quella riunione e quell'utente.Registra
temp.talk_started_at = 1715520123nel JSON delle metriche.
Quando arriva l'evento corrispondente user-talking-stopped, Chamilo calcola i secondi trascorsi e li aggiunge a totals.talk_seconds.
Eventi Tracciati e Metriche
user-joined / participantjoined
Riga di attività creata
user-talking-started / uservoiceactivated
Timer avviato per totals.talk_seconds
user-talking-stopped / uservoicedeactivated
totals.talk_seconds incrementato
camera-share-started / webcamsharestarted
Timer avviato per totals.camera_seconds
camera-share-stopped / webcamsharestopped
totals.camera_seconds incrementato
chat-message-posted / publicchatmessageposted
counts.messages incrementato
user-reaction-changed / useremojichanged
counts.reactions + suddivisione per emoji
user-hand-raised / userraisedhand
counts.hands incrementato
user-left / participantleft
Timer aperti svuotati, riga di attività chiusa
Struttura dei Dati delle Metriche
Le metriche sono memorizzate come una colonna JSON in ConferenceActivity:
I campi temp contengono i timestamp di inizio dei timer in corso; vengono cancellati quando arriva l'evento di stop corrispondente o quando il partecipante lascia la sessione.
Dashboard dei Webhook
Un dashboard per amministratori è disponibile all'indirizzo /plugin/Bbb/webhook_dashboard.php. Mostra metriche in tempo reale e storiche per partecipante per una determinata riunione: tempo di connessione, tempo di parola, tempo di utilizzo della telecamera, conteggio dei messaggi, conteggio delle reazioni e alzate di mano. I dati possono essere esportati in formato CSV.
Registrazione e Pulizia degli Hook
La classe BbbLib fornisce metodi per gestire la registrazione degli hook sul server BBB:
ensureHookForMeeting($remoteId)
Registra (o conferma) un hook per riunione dopo che un utente si è unito
ensureGlobalWebhook()
Registra un unico hook globale che copre tutte le riunioni
cleanupWebhooks($meetingId)
Elimina gli hook registrati da Chamilo dal server BBB
BbbPlugin::checkWebhooksHealth()
Verifica che l'endpoint hooks/list di BBB sia raggiungibile
Estensione ad Altre Fonti di Eventi
Attualmente non esiste un sistema generico di webhook in uscita in Chamilo (cioè, non c'è un modo integrato per fare un POST a un URL esterno quando un utente si iscrive o completa un corso). Se hai bisogno di questo comportamento, le opzioni includono:
Scrivere un plugin che ascolti gli eventi di Symfony e invii chiamate HTTP (vedi Plugins e Sistema di Eventi).
Utilizzare l'API REST per interrogare i cambiamenti di stato da un sistema esterno.
Ultimo aggiornamento
È stato utile?