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 vídeo: BBB (iframe embed), Zoom (S2S OAuth), Teams (Graph API), Meet (OAuth Calendar). Patrón adapter, ciclo de vida webhook, sync de grabaciones vía cron

2026-06-03 6 min
Resposta curta

Las clases en vivo en Studeia soportan 4 proveedores mediante adapter pattern: BigBlueButton (predeterminado, iframe embed), Zoom (Server-to-Server OAuth), Microsoft Teams (Graph API), Google Meet (OAuth Calendar). Credenciales cifradas AES-256-GCM. Webhook lifecycle + cron de recording sync (fallback 15 min). LiveClassTranscription automática para Zoom/Teams (ingerible en el RAG).

Proveedores soportados

ProveedorAuthUnirseGrabacionesTranscript
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 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 ejecución. Configuración > Proveedor de Video > BBB > URL + Shared Secret.

Zoom

  1. Cree una Server-to-Server OAuth app en Zoom Marketplace
  2. Scopes: meeting:read, meeting:write, recording:read, user:read
  3. Configuración > 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. Configuración > 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. Configuración > Proveedor de Video > Google Meet > Client ID + Client Secret
  4. Flujo de admin consent via OAuth (redirige 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

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

Webhooks y recording sync

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

  • POST /api/webhooks/video/zoom — meeting events + recording.completed
  • POST /api/webhooks/video/teams — Graph notifications
  • GET /api/cron/recording-sync — polling cada 15 min para meetings completados 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 nativamente 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 Media Transcription.

Alcance por grupo

LiveClass.classGroupId es opcional. Cuando está configurado:

  • Solo los estudiantes de ese grupo lo ven en /live-classes/
  • Solo los estudiantes del grupo pueden unirse (validado en el join)
  • Las notificaciones son solo para el grupo

Sin classGroupId: course-wide (todos los matriculados).

Limitaciones

  • BBB: requiere 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 tier (free=40 min, pago=ilimitado).
  • Teams: endMeeting no está soportado via API.
  • Google Meet: grabación/transcripción iniciada manualmente por el host.
  • 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 estudiante?

No exactamente. BBB soporta iframe embed (joinMethod='iframe', el estudiante ve la clase dentro de Studeia). Zoom, Teams y Meet se abren en una nueva pestaña (joinMethod='external', X-Frame-Options bloquea 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 estudiantes de ese grupo pueden ver 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)