Instructie
Beheer > Integraties > Outlook

De Outlook-koppeling vereist configuratie aan twee kanten: eerst een app-registratie in Azure / Entra ID (de klant-tenant), daarna de koppeling zelf in i-Reserve. Dit artikel beschrijft beide kanten in volgorde. De Azure-stappen staan los van i-Reserve en worden in het Azure-portaal uitgevoerd.

1. Aan de Outlook- / Azure-kant

1.1 App-registratie

  1. Azure Portal → App registrationsNew registration.
  2. Registreer als single tenant (accounts alleen in deze organisatie).
  3. Noteer de Application (client) ID en de Directory (tenant) ID.
  4. Certificates & secrets → maak een client secret aan en noteer de waarde direct (is later niet meer leesbaar). Er wordt alleen secret-gebaseerde authenticatie gebruikt, geen certificaat.
  5. Stel de Redirect URI (type Web) in op de waarde die i-Reserve toont, doorgaans {base_url}/integrations/redirect/{int_id}.

1.2 Machtigingen per modus

Voeg onder API permissions → Microsoft Graph de juiste permissie toe voor de modus die je gebruikt:

ModusPermissieBijzonderheden
GedelegeerdDelegatedCalendars.ReadWriteToestemming wordt gegeven door de gebruiker die inlogt. Scope: openid offline_access Calendars.ReadWrite (de offline_access levert het refresh-token).
ApplicatieApplicationCalendars.ReadWriteAdmin consent verplicht (“Verleen beheerderstoestemming”). Zonder admin consent geeft Graph 403 op users/{upn}/….

Eén app-registratie kan beide permissie-typen dragen, zodat dezelfde app beide modi kan bedienen. Niet nodig: Place.Read.All, User.Read, Calendars.ReadWrite.Shared.

1.3 Least-privilege (aanbevolen voor app-only)

Standaard mag een app met application Calendars.ReadWrite alle mailboxen in de tenant lezen/schrijven. Beperk dit met een ApplicationAccessPolicy (Exchange Online PowerShell) die de app vastzet op een security-group met daarin alleen de zaal-mailboxen:

New-ApplicationAccessPolicy -AppId <client-id> `
  -PolicyScopeGroupId zalen-rooms@klant.nl `
  -AccessRight RestrictAccess `
  -Description "i-Reserve room sync: alleen zaal-mailboxen"

1.4 Mailboxen / zalen

  • Gedelegeerd: minimaal één gelicentieerde gebruiker met mailbox om mee in te loggen. De standaardagenda van die gebruiker synct.
  • Applicatie: maak de zalen aan via Microsoft 365 admin → Resources → Rooms & equipment. Een resource-mailbox is normaal Unlicensed — dat is correct. Noteer de UPN van elke zaal (bv. ZaalA@klant.onmicrosoft.com) en plaats ze in de security-group uit stap 1.3.

2. Aan de i-Reserve-kant

Ga naar Beheer → Integraties en voeg een Outlook-koppeling toe (of open een bestaande). De koppeling heeft een authenticatie-scherm en een configuratie-scherm.

2.1 Authenticatie-scherm (Azure-gegevens)

VeldWat in te vullen
Tenant IDDe directory (tenant) ID van de M365-tenant.
Client IDDe application (client) ID van de app-registratie.
Client secretDe gegenereerde client-secret-waarde.
Return urlDe redirect-URI. Gebruik exact de waarde die i-Reserve toont en registreer diezelfde URI in de Azure-app.

Doorloop daarna de twee knoppen in volgorde:

  1. Stap 1: toestemming — opent het Microsoft consent-scherm. Log in met de dedicated gebruiker (gedelegeerd) of geef admin consent (applicatie) en keur de gevraagde agenda-permissie goed.
  2. Stap 2: verbinden met Outlook — wisselt de toestemming in voor de opgeslagen tokens (gedelegeerd: access + refresh; applicatie: app-only token). Hierna is de verbinding live.

2.2 Configuratie-scherm — algemeen gedrag

VeldWat in te vullen
Veld voor i-Reserve boeking-idHet boekingsveld dat de Outlook event-id bewaart (de koppeling tussen boeking en agenda-item). Default external_id.
TemplateDe template waarmee onderwerp/omschrijving van het agenda-item worden opgebouwd (outbound).
Teams-link aanmakenJa/Nee — maak een Teams online-vergadering voor het item.
Veld voor Teams-linkBoekingsveld om de Teams join-URL op te slaan (als bovenstaande Ja is).
Klantgegevens gebruikenJa/Nee — voeg de klant als deelnemer toe / gebruik klantgegevens op het item.
Agenda-item aanmaken op statusDe boekingsstatus(sen) waarop een item in Outlook wordt aangemaakt (outbound, gedelegeerd).
Verwijderen op statusDe boekingsstatus(sen) waarop het Outlook-item wordt verwijderd.
E-mail bij problemenE-mailadres dat bij koppelproblemen wordt genotificeerd.

2.3 Configuratie-scherm — inbound

VeldWat in te vullen
AuthenticatiemodusGedelegeerd (één gebruiker) of Applicatie (per zaal, app-only). Dit wisselt het koppelveld hieronder.
Zaal ↔ object (applicatie)Per rij: de zaal-mailbox-UPN en het i-Reserve-object waarop die zaal landt. Eén rij per zaal; gebruik “Zaal toevoegen”.
Inbound object (gedelegeerd)Het ene i-Reserve-object waarop afspraken uit de gebruikersagenda worden geboekt.
Inbound statusStatus waarmee een nieuwe inbound-boeking wordt aangemaakt.
Inbound status met klantAlternatieve status als de organisator aan een bestaande klant kon worden gekoppeld.
Lock-statussen (update)Boekingen in deze statussen worden niet bijgewerkt door inbound.
Lock-statussen (delete)Boekingen in deze statussen worden niet geannuleerd door inbound.
Toestaan boeking-updateJa/Nee — sta toe dat inbound-wijzigingen bestaande boekingen bijwerken.
Negeer validatiefouten bij updateJa/Nee — pas inbound-wijzigingen toe ook als validatie ze normaal zou weigeren.

2.4 Activeren

Sla op en zet de koppeling op actief. Bevestig de verbinding op het test-/diagnosescherm en controleer dat er een Graph-subscription (webhook) is aangemaakt (gedelegeerd: één; applicatie: één per zaal).

Gebruik in gedelegeerde modus een aparte, dedicated Microsoft 365-serviceaccount (bv. ireserve-sync@klant.onmicrosoft.com), geen persoonlijk medewerkersaccount. Reden: auditability, continuiteit (breekt niet als een medewerker vertrekt) en least privilege.
Vergeet bij application-modus de admin consent niet: zonder beheerderstoestemming geeft Graph 403 op users/{upn}/...