diff --git a/03 Bereiche/IT-Management/Meeting Auto-Import via MS Graph.md b/03 Bereiche/IT-Management/Meeting Auto-Import via MS Graph.md index 265bfe1..6681d77 100644 --- a/03 Bereiche/IT-Management/Meeting Auto-Import via MS Graph.md +++ b/03 Bereiche/IT-Management/Meeting Auto-Import via MS Graph.md @@ -66,7 +66,7 @@ Authentication: OAuth2 Client Credentials Flow (`@azure/msal-node`) Ergänzt am 2026-05-06: - `OnlineMeetings.Read.All` — OnlineMeeting per JoinUrl auflösen - `OnlineMeetingTranscript.Read.All` — `.vtt` lesen -- `OnlineMeetingArtifact.Read.All` — Recording-URL lesen +- `OnlineMeetingRecording.Read.All` — Recording-URL lesen (frühere Bezeichnung `OnlineMeetingArtifact.Read.All` wurde von Microsoft umbenannt; alter Name funktioniert nicht mehr) - `OnlineMeetingAiInsight.Read.All` — Copilot-Recap (Beta-Endpoint) Bereits vorhanden: `Calendars.Read`, `User.Read.All`, plus Mail/Sites. @@ -110,7 +110,7 @@ Meeting endet ├─> resolveOnlineMeeting ── OnlineMeetings.Read.All + AccessPolicy ├─> fetchTranscriptVtt ── OnlineMeetingTranscript.Read.All ├─> fetchAiInsights ── OnlineMeetingAiInsight.Read.All (Beta) - └─> fetchRecordingUrl ── OnlineMeetingArtifact.Read.All + └─> fetchRecordingUrl ── OnlineMeetingRecording.Read.All ── JSON ──> Claude: Doppel-Pass + Speaker-Mapping + Merge + Agenda-Rückführung └─> Meeting-Notiz + Agenda.md aktualisiert @@ -123,6 +123,13 @@ Meeting endet - Recap fehlt (kein Copilot) → User-Prompt zum manuellen Einfügen - Kein O365-ID → User kann manuell weitermachen ohne Auto-Import +## Lessons Learned (E2E 2026-05-06) + +- **UPN → OID Auflösung Pflicht:** `/users/{upn}/onlineMeetings` liefert 404, auch mit korrekter Application Access Policy. OnlineMeetings-API + Policy matchen ausschließlich gegen die Object-ID. Script löst daher zuerst UPN → OID via `/users/{upn}?$select=id` auf. +- **aiInsights ist umgezogen:** Endpoint liegt jetzt unter `/copilot/users/{oid}/onlineMeetings/{mid}/aiInsights` (Beta). Alter Pfad `/users/{oid}/onlineMeetings/{mid}/aiInsights` antwortet mit 404 "API not supported". List-Call liefert nur Metadaten — Details (`meetingNotes`, `actionItems`, `mentions`) brauchen einen Detail-Call pro Insight-ID. +- **Transcript Content braucht expliziten Accept-Header:** Default `Accept: */*` wird mit "Invalid format '*/*' specified" abgewiesen. Lösung: `?$format=text/vtt` + `Accept: text/vtt` + `responseType('text')`. +- **Permission-Rename `Artifact` → `Recording`:** Microsoft hat `OnlineMeetingArtifact.Read.All` umbenannt zu `OnlineMeetingRecording.Read.All`. Alter Name ist tot, gibt 403 mit Hinweis auf den neuen Namen. + ## Bekannte Einschränkungen - Nur Meetings, bei denen `AZURE_USER_EMAIL` der Organizer ist (Graph-Restriktion)