Instructie
Beheer > Integraties > Outlook

De Outlook-koppeling vereist configuratie aan twee kanten: een app-registratie in Azure / Entra ID (de klant-tenant) en de koppeling zelf in i-Reserve. Omdat de Redirect-URI het integratie-id van i-Reserve bevat, begin je in i-Reserve met het aanmaken van de koppeling om die URL op te halen, doe je daarna de Azure-registratie, en vul je tot slot de i-Reserve-koppeling verder in. Dit artikel beschrijft die volgorde.

1. Begin in i-Reserve: koppeling aanmaken

De Redirect-URI die je straks in Azure nodig hebt bevat het integratie-id van i-Reserve (het {int_id}-deel). Dat id bestaat pas zodra de koppeling is aangemaakt, dus begin je hier:

  1. Ga naar Beheer → Integraties en voeg een Outlook-koppeling toe.
  2. Noteer de Redirect-URL die i-Reserve toont (doorgaans {base_url}/integrations/redirect/{int_id}). Die heb je nodig in stap 2.
  3. Sla de overige velden nu over — die vul je in stap 3 in, nadat de Azure-registratie klaar is.

2. Aan de Outlook- / Azure-kant

2.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 Redirect-URL die je in stap 1 hebt genoteerd ({base_url}/integrations/redirect/{int_id}).

2.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}/….
Optioneel (aanbevolen)ApplicationPlace.Read.AllNiet vereist voor de sync zelf, maar aanbevolen: hiermee kun je eenvoudig de UPN's van de zaal-mailboxen ophalen in plaats van ze handmatig op te zoeken. Vereist admin consent.

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

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

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

3. Aan de i-Reserve-kant

Open de Outlook-koppeling die je in stap 1 hebt aangemaakt (Beheer → Integraties). De koppeling heeft een authenticatie-scherm en een configuratie-scherm.

3.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.

3.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.

3.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.

3.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}/...