Aller au contenu
Studeia Docs
AI-assisted translation — last updated 2026-06-03. For original (pt-BR or en-US), use the language switcher.

Cours en direct multi-fournisseur (BBB, Zoom, Teams, Meet)

Studeia prend en charge 4 fournisseurs vidéo : BBB (iframe embed), Zoom (S2S OAuth), Teams (Graph API), Meet (OAuth Calendar). Adapter pattern, cycle de vie des webhooks, synchronisation des enregistrements via cron

Par Équipe Studeia 2026-06-03 6 min
Resposta curta

Les cours en direct de Studeia fonctionnent avec le fournisseur que votre établissement utilise déjà : BigBlueButton, Zoom, Microsoft Teams ou Google Meet, avec un sélecteur par cours. Les identifiants sont chiffrés (AES-256-GCM), les enregistrements sont synchronisés automatiquement et la transcription (Zoom/Teams) peut être ingérée dans le tuteur IA. Vous animez vos cours en direct au sein de la plateforme, sans dépendre d'un seul fournisseur vidéo.

Fournisseurs pris en charge

FournisseurAuthRejoindreEnregistrementsTranscription
BBBsharedSecretiframeOui, API nativeTexte fourni
ZoomServer-to-Server OAuthnouvel ongletWebhook + cronVTT auto
TeamsClient Credentialsnouvel ongletGraph API + cronVTT auto
Google MeetOAuth + Calendar APInouvel ongletCalendar API + cronManuel dans Meet

Adapter pattern

packages/core/src/live-class/types.ts :

interface VideoProviderAdapter {
  createMeeting(params): Promise<VideoMeetingResult>;
  getJoinUrl(params): Promise<VideoJoinResult>;
  endMeeting(meetingId, providerData?): Promise<void>;
  getMeetingStatus(meetingId): Promise<VideoMeetingStatus | null>;
  getRecordings(meetingId): Promise<VideoRecording[]>;
  getTranscript?(meetingId): Promise<VideoTranscript | null>;
}

resolveVideoProvider(tenantId, liveClass?) effectue une cascade :

  1. liveClass.videoProvider (si spécifié dans le cours)
  2. VideoProviderConfig.isDefault (fournisseur par défaut du tenant)
  3. Tenant.config.bbb (legacy backward compat)
  4. Variables d'environnement BBB (fallback global)

Configuration par fournisseur

BBB (par défaut)

Prérequis : instance BBB en cours d'exécution. Paramètres > Fournisseur vidéo > BBB > URL + Shared Secret.

Zoom

  1. Créez une application Server-to-Server OAuth dans le Zoom Marketplace
  2. Scopes : meeting:read, meeting:write, recording:read, user:read
  3. Paramètres > Fournisseur vidéo > Zoom > Account ID + Client ID + Client Secret
  4. Webhook : /api/webhooks/video/zoom avec HMAC SHA-256 via x-zm-signature

Teams

  1. Enregistrement d'application Azure AD
  2. Permissions : Microsoft Graph OnlineMeetings.ReadWrite.All, OnlineMeetingRecording.Read.All
  3. Paramètres > Fournisseur vidéo > Teams > Tenant ID + Client ID + Client Secret + e-mail de l'organisateur
  4. Webhook : Graph Change Notifications (validation de la souscription via validationToken)

Google Meet

  1. Google Cloud Console > APIs > Calendar API + Meet REST API v2
  2. OAuth 2.0 Client (application Web)
  3. Paramètres > Fournisseur vidéo > Google Meet > Client ID + Client Secret
  4. Flux de consentement administrateur via OAuth (redirection vers Google)
  5. Limitation : endMeeting non pris en charge via l'API — l'adapter marque comme completed localement

Identifiants

Stockés dans VideoProviderConfig avec AES-256-GCM :

  • encryptedCredentials — blob JSON chiffré
  • encryptionIv + encryptionAuthTag
  • Tokens OAuth (Teams/Meet) : accessToken, refreshToken, tokenExpiresAt

Unique : [tenantId, provider] — une configuration par fournisseur par tenant.

Webhooks et synchronisation des enregistrements

Chaque fournisseur a son propre schéma. Studeia normalise via des gestionnaires de webhooks + un cron de secours :

  • POST /api/webhooks/video/zoom — événements de réunion + recording.completed
  • POST /api/webhooks/video/teams — notifications Graph
  • GET /api/cron/recording-sync — scrutation toutes les 15 min pour les réunions terminées sans recordingUrl

Les webhooks sont non fiables (délais, expiration des souscriptions). Le cron est toujours utilisé comme solution de secours.

Transcription

Zoom et Teams fournissent le VTT nativement après l'enregistrement. Studeia crée un LiveClassTranscription avec :

  • transcriptionText (extrait du VTT)
  • transcriptionLanguage
  • statut : pending → transcribing → review → approved → ingested

Après approbation, l'administrateur peut déclencher l'ingestion dans le RAG du cours. Détails dans Media Transcription.

Périmètre par groupe

LiveClass.classGroupId optionnel. Lorsqu'il est défini :

  • Seuls les étudiants de ce groupe voient le cours dans /live-classes/
  • Seuls les étudiants du groupe peuvent rejoindre le cours (validé lors de la connexion)
  • Notifications uniquement pour le groupe

Sans classGroupId : à l'échelle du cours (tous les inscrits).

Limitations

  • BBB : nécessite une instance auto-hébergée (ou un fournisseur BBB géré). Coûts : $20-200/mois selon la taille.
  • Zoom : limite de durée selon le niveau (gratuit=40 min, payant=illimité).
  • Teams : endMeeting non pris en charge via l'API.
  • Google Meet : enregistrement/transcription lancé manuellement par l'hôte.
  • Streaming vers YouTube/Twitch : non pris en charge nativement.

Voir aussi

FAQ

Quel fournisseur vidéo Studeia utilise-t-il ?

4 options : BigBlueButton (par défaut, iframe embed, open-source), Zoom (Server-to-Server OAuth), Microsoft Teams (Azure AD Client Credentials), Google Meet (OAuth admin consent). L'administrateur choisit par tenant (VideoProviderConfig par défaut) ou par cours spécifique (LiveClass.videoProvider override).

BBB et Zoom fonctionnent-ils de la même façon pour l'étudiant ?

Pas exactement. BBB prend en charge l'iframe embed (joinMethod='iframe', l'étudiant voit le cours dans Studeia). Zoom, Teams et Meet s'ouvrent dans un nouvel onglet (joinMethod='external', X-Frame-Options bloque l'iframe). L'interface affiche une carte avec un compte à rebours + bouton 'Rejoindre' pour ces 3 fournisseurs.

Les enregistrements sont-ils disponibles automatiquement ?

Oui, automatiquement. Le webhook du fournisseur notifie lorsque l'enregistrement est prêt + le cron /api/cron/recording-sync s'exécute toutes les 15 min comme solution de secours. recordingUrl est sauvegardé dans LiveClass. Pour Zoom/Teams : la transcription VTT est également capturée (crée LiveClassTranscription qui peut être ingérée dans le RAG).

Puis-je restreindre un cours en direct à un groupe spécifique ?

Oui. LiveClass.classGroupId est optionnel. Lorsqu'il est défini : seuls les étudiants de ce groupe voient le cours et peuvent y accéder (règle critique 45-48). Sans classGroupId : tous les inscrits au cours voient le cours.

Veja tambem

Cours en direct multi-fournisseur (BBB, Zoom, Teams, Meet)