Apercu
L’API BigBlueButton permet aux développeurs de gérer les réunions de visioconférence de manière programmatique. Les fonctionnalités principales incluent la création et la gestion de réunions, la gestion des enregistrements, l’insertion de documents et l’envoi de messages dans le chat.
Tous les appels API nécessitent des requêtes HTTPS vers le endpoint du serveur (généralement /bigbluebutton/api) avec un checksum calculé pour la sécurité.
Types de données
- String : Texte encodé en UTF-8 sans caractères de contrôle (0x00-0x1F). Doit être URL-encodé pour les caractères internationaux.
- Number : Entiers non négatifs (0-9 uniquement), pas de signes ni de ponctuation.
- Boolean : Chaînes littérales
trueoufalse(en minuscules).
Modèle de sécurité
Le modèle de sécurité empêche les utilisateurs finaux d’effectuer des appels API sans le secret partagé. Le paramètre securitySalt (situé dans /etc/bigbluebutton/bbb-web.properties) sert de secret partagé et ne doit jamais être exposé aux utilisateurs finaux.
Génération du checksum
- Créer la chaîne de requête sans checksum (ex :
name=Test+Meeting&meetingID=abc123) - Préfixer avec le nom de l’appel API (ex :
createname=Test+Meeting&meetingID=abc123) - Ajouter le secret partagé à la fin (ex :
createname=Test+Meeting&meetingID=abc123639259d4...) - Générer un hash SHA-1 de la chaîne combinée
- Ajouter le paramètre
checksumà la chaîne de requête
Le checksum doit être inclus avec chaque appel API.
Ressources de l’API
Administration
| Ressource | Description |
|---|---|
create |
Crée une nouvelle réunion |
join |
Fait rejoindre un utilisateur dans une réunion existante |
end |
Termine une réunion |
sendChatMessage |
Envoie un message dans le chat public |
insertDocument |
Insère des documents via un appel API |
Monitoring
| Ressource | Description |
|---|---|
isMeetingRunning |
Vérifie si une réunion est en cours |
getMeetings |
Liste toutes les réunions du serveur |
getMeetingInfo |
Obtient les informations détaillées d’une réunion |
Enregistrements
| Ressource | Description |
|---|---|
getRecordings |
Récupère les enregistrements disponibles |
publishRecordings |
Publie/dépublie des enregistrements |
deleteRecordings |
Supprime des enregistrements |
updateRecordings |
Met à jour les métadonnées d’un enregistrement |
getRecordingTextTracks |
Liste les fichiers de sous-titres |
putRecordingTextTrack |
Téléverse des fichiers de sous-titres |
Réponse standard
Chaque réponse de l’API contient :
- returncode :
SUCCESSouFAILED - message : Informations complémentaires (le cas échéant)
- messageKey : Identifiant d’erreur lisible par les machines
create
Méthodes : GET, POST
https://votre-serveur.com/bigbluebutton/api/create?[paramètres]&checksum=[checksum]
Crée une réunion BigBlueButton. Cet appel est idempotent : l’appeler plusieurs fois avec des paramètres identiques retourne un succès sans effet secondaire.
Paramètres requis
| Paramètre | Type | Description |
|---|---|---|
name |
String | Nom de la réunion |
meetingID |
String | Identifiant unique de la réunion (2-256 caractères, pas de virgules) |
Paramètres optionnels
| Paramètre | Type | Description |
|---|---|---|
attendeePW |
String | Mot de passe participant (déprécié - utiliser role à la place) |
moderatorPW |
String | Mot de passe modérateur (déprécié) |
welcome |
String | Message de bienvenue (supporte %%CONFNAME%%, %%DIALNUM%%, %%CONFNUM%%) |
dialNumber |
String | Numéro de téléphone pour rejoindre |
voiceBridge |
String | Numéro de conférence vocale à 5 chiffres (10000-99999) |
maxParticipants |
Number | Nombre maximum de participants simultanés |
loginURL |
String | URL pour l’intégration de connexion tierce |
logoutURL |
String | URL après déconnexion de l’utilisateur |
record |
Boolean | Activer l’enregistrement (défaut : false) |
duration |
Number | Durée maximale de la réunion en minutes |
isBreakout |
Boolean | Mettre à true pour créer une salle de sous-commission |
parentMeetingID |
String | Requis pour les salles de sous-commission |
sequence |
Number | Numéro de séquence de la salle de sous-commission |
freeJoin |
Boolean | Permettre aux utilisateurs de choisir leur salle de sous-commission |
breakoutRoomsPrivateChatEnabled |
Boolean | Activer le chat privé dans les sous-commissions (défaut : true) |
breakoutRoomsRecord |
Boolean | Enregistrer les sous-commissions (défaut : false) |
meta_[clé] |
String | Paramètres de métadonnées personnalisés |
moderatorOnlyMessage |
String | Message visible uniquement par les modérateurs |
autoStartRecording |
Boolean | Démarrer l’enregistrement automatiquement à la première connexion (défaut : false) |
allowStartStopRecording |
Boolean | Permettre le contrôle de l’enregistrement par le modérateur (défaut : true) |
webcamsOnlyForModerator |
Boolean | Restreindre la vue des webcams aux modérateurs uniquement |
bannerText |
String | Texte de bannière dans le client |
bannerColor |
String | Couleur de fond de la bannière (format hex #FFFFFF) |
muteOnStart |
Boolean | Couper le micro de tous les utilisateurs au démarrage (défaut : false) |
allowModsToUnmuteUsers |
Boolean | Permettre aux modérateurs de réactiver le micro des utilisateurs (défaut : false) |
lockSettingsDisableCam |
Boolean | Empêcher le partage de caméra (défaut : false) |
lockSettingsDisableMic |
Boolean | Mode écoute uniquement (défaut : false) |
lockSettingsDisablePrivateChat |
Boolean | Désactiver le chat privé (défaut : false) |
lockSettingsDisablePublicChat |
Boolean | Désactiver le chat public (défaut : false) |
lockSettingsDisableNotes |
Boolean | Désactiver les notes (défaut : false) |
lockSettingsHideUserList |
Boolean | Masquer la liste des utilisateurs aux participants (défaut : false) |
lockSettingsLockOnJoin |
Boolean | Appliquer les verrous à la connexion (défaut : true) |
lockSettingsHideViewersCursor |
Boolean | Masquer les curseurs des participants sur le tableau blanc (défaut : false) |
guestPolicy |
Enum | Acceptation des invités : ALWAYS_ACCEPT, ALWAYS_DENY, ASK_MODERATOR (défaut : ALWAYS_ACCEPT) |
meetingKeepEvents |
Boolean | Sauvegarder les événements même sans enregistrement (défaut : false) |
endWhenNoModerator |
Boolean | Terminer automatiquement quand il n’y a plus de modérateur (défaut : false) |
endWhenNoModeratorDelayInMinutes |
Number | Délai avant la terminaison automatique (défaut : 1) |
meetingLayout |
Enum | Disposition par défaut : CUSTOM_LAYOUT, SMART_LAYOUT, PRESENTATION_FOCUS, VIDEO_FOCUS, CAMERAS_ONLY, PRESENTATION_ONLY, PARTICIPANTS_AND_CHAT_ONLY, MEDIA_ONLY |
allowModsToEjectCameras |
Boolean | Permettre aux modérateurs de fermer les caméras (défaut : false) |
userCameraCap |
Number | Webcams maximum par utilisateur ; 0 désactive (défaut : 3) |
meetingCameraCap |
Number | Webcams maximum par réunion ; 0 désactive (défaut : 0) |
meetingExpireIfNoUserJoinedInMinutes |
Number | Terminer si personne ne rejoint (défaut : 5) |
meetingExpireWhenLastUserLeftInMinutes |
Number | Terminer après le départ du dernier utilisateur ; 0 désactive (défaut : 1) |
groups |
JSON | Groupes de sous-commissions pré-définis |
logo |
String | URL du logo pour la zone de branding |
disabledFeatures |
String | Liste de fonctionnalités à désactiver, séparées par des virgules |
disabledFeaturesExclude |
String | Fonctionnalités à réactiver, séparées par des virgules |
notifyRecordingIsOn |
Boolean | Afficher la modale de consentement d’enregistrement (défaut : false) |
recordFullDurationMedia |
Boolean | Capturer la durée complète des médias lors de l’enregistrement (défaut : false) |
preUploadedPresentation |
String | URL du fichier de présentation pour remplacer le défaut |
preUploadedPresentationName |
String | Nom de la présentation pré-téléversée |
preUploadedPresentationOverrideDefault |
Boolean | Ignorer default.pdf lors du téléversement (défaut : true) |
allowOverrideClientSettingsOnCreateCall |
Boolean | Permettre le remplacement des paramètres client dans le corps POST (défaut : false) |
pluginManifests |
JSON | Tableau de manifestes de plugins avec URLs et checksums |
maxNumPages |
Number | Pages maximum autorisées par présentation (défaut : 200) |
Fonctionnalités désactivables
Chat : chat, privateChat, deleteChatMessage, editChatMessage, replyChatMessage, chatMessageReactions, chatEmojiPicker
Présentation & Tableau blanc : presentation, downloadPresentationWithAnnotations, downloadPresentationConvertedToPdf, downloadPresentationOriginalFile, snapshotOfCurrentSlide, infiniteWhiteboard
Sous-commissions : breakoutRooms, importPresentationWithAnnotationsFromBreakoutRooms, importSharedNotesFromBreakoutRooms
Vidéo & Audio : screenshare, cameraAsContent, virtualBackgrounds, customVirtualBackgrounds, liveTranscription, captions
Engagement : polls, quizzes, raiseHand, userReactions, externalVideos, timer
Notes partagées : sharedNotes
Analytics : learningDashboard, learningDashboardDownloadSessionData
Dispositions : layouts
Plugins : plugins
Exemple de requête
https://votre-serveur.com/bigbluebutton/api/create?name=Test&meetingID=test01&checksum=1234
Exemple de requête POST
curl --request POST \
--url https://votre-serveur.com/bigbluebutton/api/create \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data welcome=Bienvenue \
--data allowStartStopRecording=true \
--data attendeePW=ap \
--data autoStartRecording=false \
--data meetingID=random-1730297 \
--data moderatorPW=mp \
--data name=random-1730297 \
--data record=false \
--data voiceBridge=71296 \
--data checksum=1234
Exemple de réponse
<response>
<returncode>SUCCESS</returncode>
<meetingID>Test</meetingID>
<internalMeetingID>640ab2bae07bedc4c163f679a746f7ab7fb5d1fa-1531155809613</internalMeetingID>
<parentMeetingID>bbb-none</parentMeetingID>
<attendeePW>ap</attendeePW>
<moderatorPW>mp</moderatorPW>
<createTime>1531155809613</createTime>
<voiceBridge>70757</voiceBridge>
<dialNumber>613-555-1234</dialNumber>
<createDate>Mon Jul 09 17:03:29 UTC 2018</createDate>
<hasUserJoined>false</hasUserJoined>
<duration>0</duration>
<hasBeenForciblyEnded>false</hasBeenForciblyEnded>
</response>
Pré-téléverser des slides (corps POST)
<modules>
<module name="presentation">
<document url="http://www.sample-pdf.com/sample.pdf"
filename="rapport.pdf"/>
<document name="sample-presentation.pdf">
JVBERi0xLjQKJ... [contenu encodé en base64]
</document>
</module>
</modules>
Paramètres pour les documents (v2.5+) :
downloadable: Boolean (défaut : false) - Permettre le téléchargement de la présentationremovable: Boolean (défaut : true) - Permettre la suppression de la présentation
Callbacks
Callback de fin de réunion
Passer le paramètre meta_endCallbackUrl avec l’URL de callback encodée. BigBlueButton effectue une requête HTTPS GET quand la réunion se termine avec le paramètre recordingmarks=true|false.
Callback d’enregistrement prêt
Passer le paramètre meta_bbb-recording-ready-url. BigBlueButton effectue une requête HTTPS POST quand l’enregistrement est prêt. Le corps contient un paramètre signed_parameters encodé en JWT (algorithme HS256, signé avec le secret partagé).
Callback Learning Analytics Dashboard
Passer le paramètre meta_analytics-callback-url. BigBlueButton effectue une requête POST avec un corps JSON contenant les données analytics.
join
Méthodes : GET
https://votre-serveur.com/bigbluebutton/api/join?[paramètres]&checksum=[checksum]
Fait rejoindre un utilisateur dans une réunion existante.
Paramètres requis
| Paramètre | Type | Description |
|---|---|---|
fullName |
String | Nom d’affichage de l’utilisateur |
meetingID |
String | Identifiant de la réunion |
role |
String | MODERATOR ou VIEWER (insensible à la casse) |
Paramètres optionnels
| Paramètre | Type | Description |
|---|---|---|
createTime |
String | Heure de création de la réunion pour validation |
userID |
String | Identifiant utilisateur externe |
avatarURL |
String | URL de l’image avatar de l’utilisateur |
redirect |
String | Mettre à false pour retourner du XML au lieu de rediriger |
errorRedirectUrl |
String | URL de page d’erreur personnalisée |
logoutURL |
String | URL de redirection de déconnexion personnalisée |
guest |
String | Mettre à “true” pour un utilisateur invité |
bot |
String | Mettre à “true” pour un agent automatisé |
excludeFromDashboard |
String | Mettre à “true” pour masquer du learning dashboard |
enforceLayout |
String | Forcer une disposition (ex : PRESENTATION_FOCUS) |
userdata-bbb_[clé] |
String | Surcharges de métadonnées utilisateur |
Exemple de requête
https://votre-serveur.com/bigbluebutton/api/join?meetingID=test01&role=moderator&fullName=Jean&checksum=1234
Exemple de réponse (redirect=false)
<response>
<returncode>SUCCESS</returncode>
<messageKey>successfullyJoined</messageKey>
<message>You have joined successfully.</message>
<meeting_id>640ab2bae07bedc4c163f679a746f7ab7fb5d1fa-1531155809613</meeting_id>
<user_id>w_euxnssffnsbs</user_id>
<auth_token>14mm5y3eurjw</auth_token>
<session_token>ai1wqj8wb6s7rnk0</session_token>
<url>https://votre-serveur.com/client/BigBlueButton.html?sessionToken=ai1wqj8wb6s7rnk0</url>
</response>
insertDocument
Méthodes : POST
https://votre-serveur.com/bigbluebutton/api/insertDocument?[paramètres]&checksum=[checksum]
Insère des documents dans une réunion en cours.
Paramètres requis
| Paramètre | Type | Description |
|---|---|---|
meetingID |
String | Identifiant de la réunion cible |
Exemple de requête
curl -s -X POST \
"https://votre-serveur.com/bigbluebutton/api/insertDocument?meetingID=Test&checksum=1234" \
--header "Content-Type: application/xml" \
--data '<modules>
<module name="presentation">
<document current="true" downloadable="true"
url="https://example.com/doc.pdf"
filename="sample.pdf"/>
</module>
</modules>'
isMeetingRunning
Méthodes : GET, POST
https://votre-serveur.com/bigbluebutton/api/isMeetingRunning?[paramètres]&checksum=[checksum]
Vérifie si une réunion est en cours.
Paramètres requis
| Paramètre | Type | Description |
|---|---|---|
meetingID |
String | Identifiant de la réunion à vérifier |
Exemple de réponse
<response>
<returncode>SUCCESS</returncode>
<running>true</running>
</response>
end
Méthodes : GET, POST
https://votre-serveur.com/bigbluebutton/api/end?[paramètres]&checksum=[checksum]
Termine de force une réunion et retire tous les participants.
Paramètres requis
| Paramètre | Type | Description |
|---|---|---|
meetingID |
String | Identifiant de la réunion |
Exemple de réponse
<response>
<returncode>SUCCESS</returncode>
<messageKey>sentEndMeetingRequest</messageKey>
<message>A request to end the meeting was sent. Please wait a few seconds, and then use getMeetingInfo or isMeetingRunning API calls to verify that it was ended.</message>
</response>
getMeetingInfo
Méthodes : GET, POST
https://votre-serveur.com/bigbluebutton/api/getMeetingInfo?[paramètres]&checksum=[checksum]
Retourne les informations complètes d’une réunion, incluant la liste des participants, les heures de début/fin et les métadonnées.
Paramètres requis
| Paramètre | Type | Description |
|---|---|---|
meetingID |
String | Identifiant de la réunion |
Exemple de réponse
<response>
<returncode>SUCCESS</returncode>
<meetingName>Salle de réunion</meetingName>
<meetingID>test01</meetingID>
<internalMeetingID>a0715c95...-1715261728123</internalMeetingID>
<createTime>1715261728123</createTime>
<voiceBridge>66052</voiceBridge>
<running>true</running>
<recording>true</recording>
<participantCount>1</participantCount>
<moderatorCount>1</moderatorCount>
<attendees>
<attendee>
<userID>w_ftcrsyuh44oj</userID>
<fullName>Jean Dupont</fullName>
<role>MODERATOR</role>
<isPresenter>true</isPresenter>
<isListeningOnly>false</isListeningOnly>
<hasJoinedVoice>true</hasJoinedVoice>
<hasVideo>true</hasVideo>
<clientType>HTML5</clientType>
</attendee>
</attendees>
<isBreakout>false</isBreakout>
</response>
getMeetings
Méthodes : GET, POST
https://votre-serveur.com/bigbluebutton/api/getMeetings?checksum=[checksum]
Liste toutes les réunions sur le serveur. Aucun paramètre requis.
Exemple de réponse
<response>
<returncode>SUCCESS</returncode>
<meetings>
<meeting>
<meetingName>Demo Meeting</meetingName>
<meetingID>Demo Meeting</meetingID>
<running>false</running>
<participantCount>0</participantCount>
<moderatorCount>0</moderatorCount>
<isBreakout>false</isBreakout>
</meeting>
</meetings>
</response>
getRecordings
Méthodes : GET
https://votre-serveur.com/bigbluebutton/api/getRecordings?[paramètres]&checksum=[checksum]
Récupère les enregistrements disponibles. Supporte la pagination (ajoutée en v2.6).
Paramètres optionnels
| Paramètre | Type | Description |
|---|---|---|
meetingID |
String | Un ou plusieurs identifiants séparés par des virgules |
recordID |
String | Un ou plusieurs identifiants d’enregistrement séparés par des virgules |
state |
String | Filtrer par état : processing, processed, published, unpublished, deleted, ou any (défaut : published, unpublished) |
meta |
String | Filtre de métadonnées (même format que create) |
offset |
Integer | Index de départ (>= 0) |
limit |
Integer | Enregistrements maximum par requête [1-100] |
Exemple de réponse
<response>
<returncode>SUCCESS</returncode>
<recordings>
<recording>
<recordID>ffbfc4cc...-1530718721124</recordID>
<meetingID>c637ba21...</meetingID>
<name>Salle de Fred</name>
<published>true</published>
<state>published</state>
<startTime>1530718721124</startTime>
<endTime>1530718810456</endTime>
<participants>3</participants>
<playback>
<format>
<type>presentation</type>
<url>https://demo.bigbluebutton.org/playback/...</url>
<processingTime>7177</processingTime>
<length>0</length>
</format>
</playback>
</recording>
</recordings>
</response>
publishRecordings
Méthodes : GET
https://votre-serveur.com/bigbluebutton/api/publishRecordings?[paramètres]&checksum=[checksum]
Publie ou dépublie des enregistrements.
Paramètres requis
| Paramètre | Type | Description |
|---|---|---|
recordID |
String | Un ou plusieurs identifiants séparés par des virgules |
publish |
Boolean | true pour publier, false pour dépublier |
Exemple de réponse
<response>
<returncode>SUCCESS</returncode>
<published>true</published>
</response>
deleteRecordings
Méthodes : GET
https://votre-serveur.com/bigbluebutton/api/deleteRecordings?[paramètres]&checksum=[checksum]
Supprime des enregistrements.
Paramètres requis
| Paramètre | Type | Description |
|---|---|---|
recordID |
String | Un ou plusieurs identifiants séparés par des virgules |
Exemple de réponse
<response>
<returncode>SUCCESS</returncode>
<deleted>true</deleted>
</response>
updateRecordings
Méthodes : GET, POST
https://votre-serveur.com/bigbluebutton/api/updateRecordings?[paramètres]&checksum=[checksum]
Met à jour les métadonnées d’un enregistrement.
Paramètres requis
| Paramètre | Type | Description |
|---|---|---|
recordID |
String | Un ou plusieurs identifiants séparés par des virgules |
meta |
String | Métadonnées à mettre à jour (même format que create) |
Exemple de requête
https://votre-serveur.com/bigbluebutton/api/updateRecordings?recordID=record123&meta_Presenter=Jane%20Doe&meta_category=FINANCE&checksum=1234
Exemple de réponse
<response>
<returncode>SUCCESS</returncode>
<updated>true</updated>
</response>
getRecordingTextTracks
Méthodes : GET, POST
https://votre-serveur.com/bigbluebutton/api/getRecordingTextTracks?[paramètres]&checksum=[checksum]
Liste les fichiers de sous-titres pour un enregistrement.
Paramètres requis
| Paramètre | Type | Description |
|---|---|---|
recordID |
String | Identifiant unique de l’enregistrement |
Exemple de réponse
{
"response": {
"returncode": "SUCCESS",
"tracks": [
{
"href": "https://example.com/subtitles_en-US.vtt",
"kind": "subtitles",
"label": "English",
"lang": "en-US",
"source": "upload"
},
{
"href": "https://example.com/subtitles_fr-FR.vtt",
"kind": "subtitles",
"label": "Francais",
"lang": "fr-FR",
"source": "upload"
}
]
}
}
Attributs d’une piste :
kind:subtitlesoucaptionslang: Tag de langue RFC 5646 (ex : “fr-FR”, “en-US”)label: Label lisible affiché dans le lecteursource:live,automaticouuploadhref: Lien de téléchargement WebVTT
putRecordingTextTrack
Méthodes : POST
POST https://votre-serveur.com/bigbluebutton/api/putRecordingTextTrack
Téléverse un fichier de sous-titres vers un enregistrement.
Paramètres requis (URI)
| Paramètre | Type | Description |
|---|---|---|
recordID |
String | Identifiant de l’enregistrement |
kind |
String | subtitles ou captions |
lang |
String | Tag de langue RFC 5646 |
label |
String | Label lisible |
Corps POST
file : (Binaire, multipart/form-data) - Fichier de sous-titres
Formats acceptés : SRT (application/x-subrip), SSA/ASS, WebVTT (text/vtt)
Exemple de réponse
{
"response": {
"messageKey": "upload_text_track_success",
"message": "Text track uploaded successfully",
"recordId": "baz",
"returncode": "SUCCESS"
}
}
sendChatMessage
Méthodes : GET
https://votre-serveur.com/bigbluebutton/api/sendChatMessage?[paramètres]&checksum=[checksum]
Envoie un message dans le chat public d’une réunion en cours. Ajouté en v3.0.
Paramètres requis
| Paramètre | Type | Description |
|---|---|---|
meetingID |
String | Identifiant de la réunion cible |
message |
String | Message du chat (1-500 caractères) |
Paramètres optionnels
| Paramètre | Type | Description |
|---|---|---|
userName |
String | Nom de l’expéditeur (max 255 caractères, défaut : “System”) |
Exemple de réponse
<response>
<returncode>SUCCESS</returncode>
</response>