Webhooks
Die Unterstützung von Webhooks in Chamilo ist derzeit auf das BigBlueButton (BBB)-Plugin beschränkt. Anstatt Webhooks an externe Systeme zu senden, fungiert Chamilo als Webhook-Empfänger: Es stellt Endpunkte bereit, die BigBlueButton bei Raumereignissen aufruft, und verwendet diese Ereignisse, um pro Teilnehmer Aktivitätsmetriken zu erstellen.
Funktionsweise
Wenn ein BBB-Meeting stattfindet, sendet der BBB-Server Echtzeit-Ereignisbenachrichtigungen an eine signierte Callback-URL auf Ihrer Chamilo-Installation. Chamilo verarbeitet jedes Ereignis und speichert aggregierte Metriken (Sprechzeit, Kamerazeit, Nachrichten, Reaktionen, Handheben) in der Datenbanktabelle conference_activity.
BigBlueButton-Server
│ POST (signiert)
▼
Chamilo-Webhook-Endpunkt
│
▼
conference_activity (Metriken JSON)
│
▼
Webhook-Dashboard (/plugin/Bbb/webhook_dashboard.php)Endpunkte
Legacy-PHP-Endpunkt
POST /plugin/Bbb/webhook.php?au={accessUrlId}&mid={meetingId}&ts={timestamp}&sig={hmac}Behandelt alle BBB-Raumereignisse. Überprüft die HMAC-Signatur, aktualisiert dann eine ConferenceActivity-Zeile und das Metriken-JSON-Feld.
Moderner Symfony-Endpunkt
Definiert über API Platform auf der ConferenceActivity-Entität. Erfordert die Signatur-Header für die Aktivitätsaufzeichnung; Anfragen ohne gültige Signatur werden akzeptiert, aber es wird keine Aktivitätszeile geschrieben.
Konfiguration (BBB-Plugin)
In Administration → Plugins → BigBlueButton stehen folgende Webhook-Einstellungen zur Verfügung:
webhooks_enabled
true / false
Aktivieren oder Deaktivieren der Webhook-Registrierung
webhooks_scope
per_meeting / global
Einen Hook pro Meeting oder einen einzigen globalen Hook für alle Meetings registrieren
webhooks_hash_algo
sha256 / sha1
HMAC-Algorithmus für die Signaturüberprüfung
webhooks_event_filter
kommaseparierte Zeichenfolge
Optionale Liste von BBB-Ereignisnamen, die empfangen werden sollen (leer = alle Ereignisse)
Wenn ein Meeting erstellt wird und Webhooks aktiviert sind, ruft Chamilo die BBB-API hooks/create auf, um die Callback-URL zu registrieren. Die URL enthält eine zeitgebundene HMAC-Signatur.
Signaturvalidierung
Der Legacy-Endpunkt verwendet Query-String-Parameter:
Der
saltist der konfigurierte Salt-Wert des BBB-Plugins.Anfragen, die älter als 15 Minuten sind, werden abgelehnt, um Replay-Angriffe zu begrenzen.
Der moderne Endpunkt verwendet Header:
Anfragen, die älter als 5 Minuten sind, werden abgelehnt.
Beispiel: BigBlueButton-Webhook-Ereignis
BBB sendet einen JSON-Body, der ein Array von Ereignissen enthält. Jedes Ereignis hat eine data.id (Ereignisname) und ein data.attributes-Objekt.
Anfrage von BBB:
Was Chamilo tut:
Überprüft die HMAC-Signatur und den Zeitstempel.
Sucht das
ConferenceMeetinganhand derremote_id.Sucht (oder erstellt) eine offene
ConferenceActivity-Zeile für dieses Meeting + Benutzer.Speichert
temp.talk_started_at = 1715520123im Metriken-JSON.
Wenn das passende user-talking-stopped-Ereignis eintrifft, berechnet Chamilo die verstrichenen Sekunden und addiert sie zu totals.talk_seconds.
Verfolgte Ereignisse und Metriken
user-joined / participantjoined
Aktivitätszeile erstellt
user-talking-started / uservoiceactivated
Timer gestartet für totals.talk_seconds
user-talking-stopped / uservoicedeactivated
totals.talk_seconds erhöht
camera-share-started / webcamsharestarted
Timer gestartet für totals.camera_seconds
camera-share-stopped / webcamsharestopped
totals.camera_seconds erhöht
chat-message-posted / publicchatmessageposted
counts.messages erhöht
user-reaction-changed / useremojichanged
counts.reactions + Aufschlüsselung pro Emoji
user-hand-raised / userraisedhand
counts.hands erhöht
user-left / participantleft
Offene Timer geleert, Aktivitätszeile geschlossen
Datenstruktur der Metriken
Metriken werden als JSON-Spalte in ConferenceActivity gespeichert:
Die temp-Felder enthalten Startzeitstempel für laufende Timer; sie werden gelöscht, wenn das entsprechende Stopp-Ereignis eintrifft oder wenn der Teilnehmer die Sitzung verlässt.
Webhook-Dashboard
Ein Admin-Dashboard ist unter /plugin/Bbb/webhook_dashboard.php verfügbar. Es zeigt Echtzeit- und historische Metriken pro Teilnehmer für ein bestimmtes Meeting: Verbindungsdauer, Sprechzeit, Kamerazeit, Anzahl der Nachrichten, Anzahl der Reaktionen und Handzeichen. Die Daten können als CSV exportiert werden.
Registrieren und Bereinigen von Hooks
Die Klasse BbbLib bietet Methoden zur Verwaltung der Hook-Registrierung auf dem BBB-Server:
ensureHookForMeeting($remoteId)
Registriert (oder bestätigt) einen Hook pro Meeting, nachdem ein Benutzer beigetreten ist
ensureGlobalWebhook()
Registriert einen einzelnen globalen Hook, der alle Meetings abdeckt
cleanupWebhooks($meetingId)
Löscht von Chamilo registrierte Hooks vom BBB-Server
BbbPlugin::checkWebhooksHealth()
Überprüft, ob der BBB-Endpunkt hooks/list erreichbar ist
Erweiterung auf andere Ereignisquellen
Derzeit gibt es in Chamilo kein generisches ausgehendes Webhook-System (d. h. keine integrierte Möglichkeit, bei der Einschreibung oder dem Abschluss eines Kurses eine POST-Anfrage an eine externe URL zu senden). Wenn Sie dieses Verhalten benötigen, stehen folgende Optionen zur Verfügung:
Schreiben Sie ein Plugin, das auf Symfony-Ereignisse lauscht und HTTP-Aufrufe ausführt (siehe Plugins und Ereignissystem).
Verwenden Sie die REST-API, um von einem externen System aus auf Zustandsänderungen zu prüfen.
Zuletzt aktualisiert
War das hilfreich?