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

Clases en vivo multi-proveedor (BBB, Zoom, Teams, Meet)

Studeia soporta 4 proveedores de video: BBB (iframe embed), Zoom (S2S OAuth), Teams (Graph API), Meet (OAuth Calendar). Adapter pattern, webhook lifecycle, recording sync via cron

Por Equipo Studeia 2026-06-03 6 min
Resposta curta

Las clases en vivo de Studeia funcionan con el proveedor que ya usa tu institución: BigBlueButton, Zoom, Microsoft Teams o Google Meet, con un selector por clase. Las credenciales se almacenan cifradas (AES-256-GCM), las grabaciones se sincronizan automáticamente y la transcripción (Zoom/Teams) puede ser ingerida en el tutor IA. Puedes dar clases en vivo dentro de la plataforma, sin depender de un único proveedor de video.

Proveedores soportados

ProviderAuthUnirseGrabacionesTranscript
BBBsharedSecretiframeSí, API nativaTexto proporcionado
ZoomServer-to-Server OAuthnueva pestañaWebhook + cronVTT auto
TeamsClient Credentialsnueva pestañaGraph API + cronVTT auto
Google MeetOAuth + Calendar APInueva pestañaCalendar API + cronManual en 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?) aplica la siguiente cascada:

  1. liveClass.videoProvider (si se especifica en la clase)
  2. VideoProviderConfig.isDefault (proveedor predeterminado del tenant)
  3. Tenant.config.bbb (legacy backward compat)
  4. Variables de entorno BBB (fallback global)

Configuración por proveedor

BBB (predeterminado)

Prerequisito: instancia BBB en funcionamiento. Ajustes > Proveedor de Video > BBB > URL + Shared Secret.

Zoom

  1. Crea una app Server-to-Server OAuth en Zoom Marketplace
  2. Scopes: meeting:read, meeting:write, recording:read, user:read
  3. Ajustes > Proveedor de Video > Zoom > Account ID + Client ID + Client Secret
  4. Webhook: /api/webhooks/video/zoom con HMAC SHA-256 via x-zm-signature

Teams

  1. Azure AD App Registration
  2. Permisos: Microsoft Graph OnlineMeetings.ReadWrite.All, OnlineMeetingRecording.Read.All
  3. Ajustes > Proveedor de Video > Teams > Tenant ID + Client ID + Client Secret + correo del organizador
  4. Webhook: Graph Change Notifications (validación de suscripción via validationToken)

Google Meet

  1. Google Cloud Console > APIs > Calendar API + Meet REST API v2
  2. OAuth 2.0 Client (Web application)
  3. Ajustes > Proveedor de Video > Google Meet > Client ID + Client Secret
  4. Flujo de admin consent via OAuth (redirección a Google)
  5. Limitación: endMeeting no está soportado via API — el adapter marca como completed localmente

Credenciales

Almacenadas en VideoProviderConfig con AES-256-GCM:

  • encryptedCredentials — JSON blob cifrado
  • encryptionIv + encryptionAuthTag
  • OAuth tokens (Teams/Meet): accessToken, refreshToken, tokenExpiresAt

Único: [tenantId, provider] — una configuración por proveedor por tenant.

Webhooks y sincronización de grabaciones

Cada proveedor tiene su propio esquema. Studeia normaliza mediante webhook handlers + cron fallback:

  • POST /api/webhooks/video/zoom — eventos de reunión + recording.completed
  • POST /api/webhooks/video/teams — notificaciones de Graph
  • GET /api/cron/recording-sync — polling cada 15 min para reuniones completadas sin recordingUrl

Los webhooks son poco confiables (retrasos, expiración de suscripciones). El cron siempre actúa como fallback.

Transcripción

Zoom y Teams proporcionan VTT de forma nativa tras la grabación. Studeia crea LiveClassTranscription con:

  • transcriptionText (parseado del VTT)
  • transcriptionLanguage
  • estado: pending → transcribing → review → approved → ingested

Tras la aprobación, el administrador puede iniciar la ingestión en el RAG del curso. Detalles en Transcripción de Medios.

Ámbito por grupo

LiveClass.classGroupId es opcional. Cuando está configurado:

  • Solo los alumnos de ese grupo ven la clase en /live-classes/
  • Solo los alumnos del grupo pueden unirse (validado en el momento de unirse)
  • Las notificaciones se envían solo al grupo

Sin classGroupId: a nivel de curso (todos los matriculados).

Limitaciones

  • BBB: requiere una instancia auto-hospedada (o proveedor BBB gestionado). Costos: $20-200/mes según el tamaño.
  • Zoom: límite de duración según el plan (gratuito=40 min, de pago=ilimitado).
  • Teams: endMeeting no está soportado via API.
  • Google Meet: la grabación/transcripción debe iniciarse manualmente por el anfitrión.
  • Streaming a YouTube/Twitch: no soportado de forma nativa.

Ver también

FAQ

¿Qué proveedor de video usa Studeia?

4 opciones: BigBlueButton (predeterminado, iframe embed, open-source), Zoom (Server-to-Server OAuth), Microsoft Teams (Azure AD Client Credentials), Google Meet (OAuth admin consent). El administrador elige por tenant (VideoProviderConfig predeterminado) o por clase específica (LiveClass.videoProvider override).

¿BBB y Zoom funcionan igual para el alumno?

No exactamente. BBB soporta iframe embed (joinMethod='iframe', el alumno ve la clase dentro de Studeia). Zoom, Teams y Meet se abren en una nueva pestaña (joinMethod='external', X-Frame-Options bloquea el iframe). La UI muestra una tarjeta con countdown + botón 'Entrar' para esos 3.

¿Las grabaciones quedan disponibles?

Sí, automáticamente. El webhook del proveedor notifica cuando la grabación está lista + el cron /api/cron/recording-sync se ejecuta cada 15 min como fallback. recordingUrl se guarda en LiveClass. Para Zoom/Teams: el transcript VTT también se captura (crea LiveClassTranscription que puede ser ingerida en el RAG).

¿Puedo restringir una clase en vivo a un grupo específico?

Sí. LiveClass.classGroupId es opcional. Cuando está configurado: solo los alumnos de ese grupo pueden ver la clase y unirse (regla crítica 45-48). Sin classGroupId: todos los matriculados en el curso pueden verla.

Veja tambem

Clases en vivo multi-proveedor (BBB, Zoom, Teams, Meet)