Instructie
Beheer > Integraties > Outlook

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

  1. Azure Portal → App registrationsNew registration.
  2. Als single tenant registrieren (Konten nur in dieser Organisation).
  3. Notieren Sie die Application (client) ID und die Directory (tenant) ID.
  4. 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.
  5. 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:

ModusBerechtigungBesonderheiten
DelegiertDelegatedCalendars.ReadWriteDie Zustimmung wird von dem Benutzer erteilt, der sich anmeldet. Scope: openid offline_access Calendars.ReadWrite (das offline_access liefert das Refresh-Token).
AnwendungApplicationCalendars.ReadWriteAdmin 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)

FeldWas einzutragen ist
Tenant IDDie Directory (tenant) ID des M365-Tenants.
Client IDDie Application (client) ID der App-Registrierung.
Client secretDer generierte Client-Secret-Wert.
Return urlDie 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:

  1. 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.
  2. 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

FeldWas einzutragen ist
Feld für i-Reserve Buchungs-IDDas Buchungsfeld, das die Outlook Event-ID speichert (die Verbindung zwischen Buchung und Kalendereintrag). Default external_id.
TemplateDas Template, mit dem Betreff/Beschreibung des Kalendereintrags aufgebaut werden (outbound).
Teams-Link erstellenJa/Nein — erstellen Sie eine Teams-Onlinebesprechung für den Eintrag.
Feld für Teams-LinkBuchungsfeld zum Speichern der Teams Join-URL (wenn das Obige Ja ist).
Kundendaten verwendenJa/Nein — fügen Sie den Kunden als Teilnehmer hinzu / verwenden Sie Kundendaten auf dem Eintrag.
Kalendereintrag erstellen bei StatusDer/die Buchungsstatus, bei dem/denen ein Eintrag in Outlook erstellt wird (outbound, delegiert).
Löschen bei StatusDer/die Buchungsstatus, bei dem/denen der Outlook-Eintrag gelöscht wird.
E-Mail bei ProblemenE-Mail-Adresse, die bei Verbindungsproblemen benachrichtigt wird.

2.3 Konfigurations-Bildschirm — inbound

FeldWas einzutragen ist
AuthentifizierungsmodusDelegiert (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-StatusStatus, mit dem eine neue Inbound-Buchung erstellt wird.
Inbound-Status mit KundeAlternativer 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 zulassenJa/Nein — erlauben Sie, dass Inbound-Änderungen bestehende Buchungen aktualisieren.
Validierungsfehler bei Update ignorierenJa/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).

Verwenden Sie im delegierten Modus ein separates, dediziertes Microsoft 365-Servicekonto (z. B. ireserve-sync@klant.onmicrosoft.com), kein persönliches Mitarbeiterkonto. Grund: Nachvollziehbarkeit, Kontinuität (bricht nicht ab, wenn ein Mitarbeiter das Unternehmen verlässt) und Least Privilege.
Vergessen Sie beim Application-Modus nicht die Admin Consent: ohne Administratorzustimmung gibt Graph einen 403 auf users/{upn}/... zurück.