Setup
1. Google Cloud Console
- https://console.cloud.google.com > APIs & Services > Library
- Habilitar Google Calendar API + Google Meet REST API v2
- Credentials > OAuth 2.0 Client ID > Web application
- Authorized redirect URI:
https://[tenant].studeia.com/api/institution/video-provider/callback/google-meet - Copie Client ID + Client Secret
2. Studeia
- Settings > Video Provider > Google Meet > Connect
- Cole Client ID + Client Secret
- Click "Authorize" — redirect para Google OAuth admin consent
- Aceitar permissoes (admin do dominio Google Workspace)
- Studeia armazena access_token + refresh_token criptografados AES-256-GCM
3. Validar
Cria LiveClass com videoProvider=google_meet > Studeia chama Calendar API > evento criado com Meet link > aluno entra via joinMethod=external (nova aba).
Como funciona
Studeia GoogleMeetAdapter.createMeeting()
→ Calendar API: events.insert
{
summary: "Aula: Matematica - Geometria",
start: { dateTime: ... },
end: { dateTime: ... },
conferenceData: { createRequest: { requestId: uuid, conferenceSolutionKey: { type: "hangoutsMeet" } } },
attendees: [...alunos.map(s => ({ email: s.email }))]
}
→ Google retorna evento + hangoutLink (ex: https://meet.google.com/abc-defg-hij)
↓
Studeia salva LiveClass.providerJoinUrl = hangoutLink
↓
Aluno entra: joinMethod=external (X-Frame-Options bloqueia iframe)
Recording sync
Cron /api/cron/recording-sync a cada 15min:
- Lista LiveClasses completed > 15min sem recordingUrl
- Para cada, chama
adapter.getRecordings(meetingId) - Meet REST API v2:
GET https://meet.googleapis.com/v2/conferenceRecords/{name} - Se gravacao disponivel: atualiza recordingUrl + cria LiveClassTranscription (se transcript)
Importante: gravacao precisa ter sido INICIADA pelo host durante o meeting. Se host esqueceu de gravar: nao ha gravacao a sincronizar.
Refresh tokens
OAuth tokens Google expiram a cada hora. Studeia:
- Cache access_token Redis (TTL 55min)
- Antes de cada chamada: verifica expiracao, refresha via refresh_token se necessario
- Se refresh falha: marca integration inactive + notifica admin
Limitacoes vs Zoom/Teams
| Recurso | Google Meet | Zoom | Teams |
|---|---|---|---|
| Criar meeting via API | Sim (Calendar) | Sim | Sim (Graph) |
| End meeting via API | NAO | Sim | NAO |
| Start recording via API | NAO | Sim | NAO |
| Get recording via API | Sim (Meet REST v2) | Sim (webhook) | Sim (Graph) |
| Transcript automatica | Sim (Workspace Edu+) | Sim (VTT) | Sim (VTT) |
| Webhook lifecycle | NAO (so via polling) | Sim | Sim (Graph Notifications) |
Quando NAO usar Google Meet
- ❌ Escola sem Workspace pago (limite 1h por meeting)
- ❌ Quer gravacao automatica sem depender de host clicar
- ❌ Quer iframe embed (Studeia + BBB resolve)
- ❌ Quer webhook events de meeting (Google nao expoe — Studeia depende de polling cron)