Configuration
1. Google Cloud Console
- https://console.cloud.google.com > APIs & Services > Library
- Activer Google Calendar API + Google Meet REST API v2
- Credentials > OAuth 2.0 Client ID > Web application
- URI de redirection autorisé :
https://[tenant].studeia.com/api/institution/video-provider/callback/google-meet - Copiez le Client ID + Client Secret
2. Studeia
- Paramètres > Fournisseur vidéo > Google Meet > Connecter
- Collez le Client ID + Client Secret
- Cliquez sur « Autoriser » — redirection vers le consentement administrateur Google OAuth
- Acceptez les autorisations (administrateur du domaine Google Workspace)
- Studeia stocke access_token + refresh_token chiffrés en AES-256-GCM
3. Valider
Créez une LiveClass avec videoProvider=google_meet > Studeia appelle Calendar API > événement créé avec lien Meet > l'étudiant rejoint via joinMethod=external (nouvel onglet).
Fonctionnement
Studeia GoogleMeetAdapter.createMeeting()
→ Calendar API: events.insert
{
summary: "Cours : Mathématiques - Géométrie",
start: { dateTime: ... },
end: { dateTime: ... },
conferenceData: { createRequest: { requestId: uuid, conferenceSolutionKey: { type: "hangoutsMeet" } } },
attendees: [...etudiants.map(s => ({ email: s.email }))]
}
→ Google retourne l'événement + hangoutLink (ex : https://meet.google.com/abc-defg-hij)
↓
Studeia enregistre LiveClass.providerJoinUrl = hangoutLink
↓
L'étudiant rejoint : joinMethod=external (X-Frame-Options bloque l'iframe)
Synchronisation des enregistrements
Cron /api/cron/recording-sync toutes les 15min :
- Liste les LiveClasses terminées depuis > 15min sans recordingUrl
- Pour chacune, appelle
adapter.getRecordings(meetingId) - Meet REST API v2 :
GET https://meet.googleapis.com/v2/conferenceRecords/{name} - Si l'enregistrement est disponible : met à jour recordingUrl + crée LiveClassTranscription (si transcript)
Important : l'enregistrement doit avoir été DÉMARRÉ par l'hôte pendant la réunion. Si l'hôte a oublié d'enregistrer : il n'y a aucun enregistrement à synchroniser.
Refresh tokens
Les tokens OAuth Google expirent toutes les heures. Studeia :
- Met en cache access_token dans Redis (TTL 55min)
- Avant chaque appel : vérifie l'expiration, rafraîchit via refresh_token si nécessaire
- Si le rafraîchissement échoue : marque l'intégration comme inactive + notifie l'administrateur
Limitations par rapport à Zoom/Teams
| Fonctionnalité | Google Meet | Zoom | Teams |
|---|---|---|---|
| Créer une réunion via API | Oui (Calendar) | Oui | Oui (Graph) |
| Terminer une réunion via API | NON | Oui | NON |
| Démarrer l'enregistrement via API | NON | Oui | NON |
| Récupérer l'enregistrement via API | Oui (Meet REST v2) | Oui (webhook) | Oui (Graph) |
| Transcription automatique | Oui (Workspace Edu+) | Oui (VTT) | Oui (VTT) |
| Webhook lifecycle | NON (uniquement via polling) | Oui | Oui (Graph Notifications) |
Quand NE PAS utiliser Google Meet
- ❌ Établissement sans Workspace payant (limite de 1h par réunion)
- ❌ Enregistrement automatique sans dépendre du clic de l'hôte
- ❌ Intégration en iframe souhaitée (Studeia + BBB résout ce problème)
- ❌ Événements webhook de réunion souhaités (Google ne les expose pas — Studeia dépend du cron de polling)