Outlook-Verbindung einrichten: Schritte auf der Outlook- und i-Reserve-Seite
Die Outlook-Verbindung erfordert eine Konfiguration auf zwei Seiten: zunächst eine App-Registrierung in Azure / Entra ID (der Kunden-Tenant), danach die Verbindung selbst in i-Reserve. Dieser Artikel beschreibt beide Seiten in Reihenfolge. Die Azure-Schritte sind unabhängig von i-Reserve und werden im Azure-Portal ausgeführt.
1. Auf der Outlook- / Azure-Seite
1.1 App-Registrierung
- Azure Portal → App registrations → New registration.
- Als single tenant registrieren (Konten nur in dieser Organisation).
- Notieren Sie die Application (client) ID und die Directory (tenant) ID.
- Certificates & secrets → erstellen Sie ein client secret und notieren Sie den Wert sofort (er ist später nicht mehr lesbar). Es wird ausschließlich Secret-basierte Authentifizierung verwendet, kein Zertifikat.
- Stellen Sie die Redirect URI (Typ Web) auf den Wert ein, den i-Reserve anzeigt, in der Regel
{base_url}/integrations/redirect/{int_id}.
1.2 Berechtigungen je Modus
Fügen Sie unter API permissions → Microsoft Graph die richtige Berechtigung für den verwendeten Modus hinzu:
| Modus | Berechtigung | Besonderheiten |
|---|---|---|
| Delegiert | Delegated → Calendars.ReadWrite | Die Zustimmung wird von dem Benutzer erteilt, der sich anmeldet. Scope: openid offline_access Calendars.ReadWrite (das offline_access liefert das Refresh-Token). |
| Anwendung | Application → Calendars.ReadWrite | Admin consent erforderlich (“Administratorzustimmung erteilen”). Ohne Admin consent gibt Graph 403 bei users/{upn}/… zurück. |
Eine App-Registrierung kann beide Berechtigungstypen tragen, sodass dieselbe App beide Modi bedienen kann. Nicht erforderlich: Place.Read.All, User.Read, Calendars.ReadWrite.Shared.
1.3 Least-privilege (empfohlen für app-only)
Standardmäßig darf eine App mit application Calendars.ReadWrite alle Postfächer im Tenant lesen/schreiben. Beschränken Sie dies mit einer ApplicationAccessPolicy (Exchange Online PowerShell), die die App auf eine Sicherheitsgruppe festlegt, die nur die Raum-Postfächer enthält:
New-ApplicationAccessPolicy -AppId <client-id> `
-PolicyScopeGroupId zalen-rooms@klant.nl `
-AccessRight RestrictAccess `
-Description "i-Reserve room sync: alleen zaal-mailboxen"
1.4 Postfächer / Räume
- Delegiert: mindestens ein lizenzierter Benutzer mit Postfach zum Anmelden. Der Standardkalender dieses Benutzers wird synchronisiert.
- Anwendung: erstellen Sie die Räume über Microsoft 365 admin → Resources → Rooms & equipment. Ein Ressourcen-Postfach ist normalerweise Unlicensed — das ist korrekt. Notieren Sie den UPN jedes Raums (z. B.
ZaalA@klant.onmicrosoft.com) und fügen Sie sie in die Sicherheitsgruppe aus Schritt 1.3 ein.
2. Auf der i-Reserve-Seite
Gehen Sie zu Verwaltung → Integrationen und fügen Sie eine Outlook-Verbindung hinzu (oder öffnen Sie eine bestehende). Die Verbindung verfügt über einen Authentifizierungs-Bildschirm und einen Konfigurations-Bildschirm.
2.1 Authentifizierungs-Bildschirm (Azure-Daten)
| Feld | Was einzutragen ist |
|---|---|
| Tenant ID | Die Directory (tenant) ID des M365-Tenants. |
| Client ID | Die Application (client) ID der App-Registrierung. |
| Client secret | Der generierte Client-Secret-Wert. |
| Return url | Die Redirect-URI. Verwenden Sie exakt den Wert, den i-Reserve anzeigt, und registrieren Sie dieselbe URI in der Azure-App. |
Durchlaufen Sie danach die beiden Schaltflächen in Reihenfolge:
- Schritt 1: Zustimmung — öffnet den Microsoft-Consent-Bildschirm. Melden Sie sich mit dem dedizierten Benutzer an (delegiert) oder erteilen Sie Admin consent (Anwendung) und genehmigen Sie die angeforderte Kalender-Berechtigung.
- Schritt 2: mit Outlook verbinden — tauscht die Zustimmung gegen die gespeicherten Tokens ein (delegiert: access + refresh; Anwendung: app-only Token). Danach ist die Verbindung aktiv.
2.2 Konfigurations-Bildschirm — allgemeines Verhalten
| Feld | Was einzutragen ist |
|---|---|
| Feld für i-Reserve Buchungs-ID | Das Buchungsfeld, das die Outlook Event-ID speichert (die Verbindung zwischen Buchung und Kalendereintrag). Default external_id. |
| Template | Das Template, mit dem Betreff/Beschreibung des Kalendereintrags aufgebaut werden (outbound). |
| Teams-Link erstellen | Ja/Nein — erstellen Sie eine Teams-Onlinebesprechung für den Eintrag. |
| Feld für Teams-Link | Buchungsfeld zum Speichern der Teams Join-URL (wenn das Obige Ja ist). |
| Kundendaten verwenden | Ja/Nein — fügen Sie den Kunden als Teilnehmer hinzu / verwenden Sie Kundendaten auf dem Eintrag. |
| Kalendereintrag erstellen bei Status | Der/die Buchungsstatus, bei dem/denen ein Eintrag in Outlook erstellt wird (outbound, delegiert). |
| Löschen bei Status | Der/die Buchungsstatus, bei dem/denen der Outlook-Eintrag gelöscht wird. |
| E-Mail bei Problemen | E-Mail-Adresse, die bei Verbindungsproblemen benachrichtigt wird. |
2.3 Konfigurations-Bildschirm — inbound
| Feld | Was einzutragen ist |
|---|---|
| Authentifizierungsmodus | Delegiert (ein Benutzer) oder Anwendung (pro Raum, app-only). Dies wechselt das Verbindungsfeld unten. |
| Raum ↔ Objekt (Anwendung) | Pro Zeile: der Raum-Postfach-UPN und das i-Reserve-Objekt, auf dem dieser Raum landet. Eine Zeile pro Raum; verwenden Sie “Raum hinzufügen”. |
| Inbound-Objekt (delegiert) | Das eine i-Reserve-Objekt, auf dem Termine aus dem Benutzerkalender gebucht werden. |
| Inbound-Status | Status, mit dem eine neue Inbound-Buchung erstellt wird. |
| Inbound-Status mit Kunde | Alternativer Status, wenn der Organisator einem bestehenden Kunden zugeordnet werden konnte. |
| Lock-Status (Update) | Buchungen in diesen Status werden durch inbound nicht aktualisiert. |
| Lock-Status (Delete) | Buchungen in diesen Status werden durch inbound nicht storniert. |
| Buchungsaktualisierung zulassen | Ja/Nein — erlauben Sie, dass Inbound-Änderungen bestehende Buchungen aktualisieren. |
| Validierungsfehler bei Update ignorieren | Ja/Nein — wenden Sie Inbound-Änderungen auch dann an, wenn die Validierung sie normalerweise ablehnen würde. |
2.4 Aktivieren
Speichern Sie und stellen Sie die Verbindung auf aktiv. Bestätigen Sie die Verbindung auf dem Test-/Diagnosebildschirm und überprüfen Sie, dass eine Graph-Subscription (Webhook) erstellt wurde (delegiert: eine; Anwendung: eine pro Raum).






