Documentation Bookings and calendars Microsoft 365

Bookings integration

Microsoft 365

Microsoft 365 integration overview
  • CategoryBookings
  • AuthOAuth
  • Scopes8

Overview

Microsoft 365 connects on /integrations in the dashboard. Click the Microsoft 365 card and the "Connect Microsoft 365" modal opens with no fields to fill in: the connect flow is OAuth only, because MessageMind owns the Microsoft Entra app. Sign in with your Microsoft 365 work or school account and approve the access MessageMind asks for, and that connects your Outlook calendar and lets your AI agent create Teams meeting links for bookings. Microsoft redirects back to MessageMind, which stores the refresh token and the tenant id on the account, and a dedicated settings page at /ai-home/integrations/microsoft-calendar lets you pick which Outlook calendar to use and whether bookings should carry a Teams join link. The transport is Microsoft Graph against the organizations authority on connect, then tenant-scoped refresh after that.

What MessageMind can do with it

  • Read the connected Microsoft 365 account's Outlook calendars so the host can pick which calendar the AI books on.
  • Check live availability on the chosen Outlook calendar, honouring busy events and ignoring cancelled or free-marked ones.
  • Create an Outlook calendar event when the AI confirms a booking, with the booker optionally invited as an attendee.
  • Attach a Microsoft Teams online meeting link to the created event when the event setting asks for one. If the mailbox has no usable Teams license, the booking still lands without a link.
  • Participate in the single-calendar-source binding: connecting Microsoft 365 blocks (and is blocked by) Google Calendar, GHL Calendar, Amelia and Phorest as the active booking calendar.

Requirements

  • A Microsoft 365 work or school account that can grant Calendar and Online Meetings permissions on the Microsoft consent screen.
  • A valid Teams license on the mailbox is required for Teams links. Bookings still succeed without one; only the Teams link is skipped.
  • A personal (non-work) Microsoft account that cannot resolve a tenant will not connect under this integration.
  • A Professional or Enterprise MessageMind plan (the Microsoft 365 card is gated to those tiers).

How to connect

  1. In the MessageMind dashboard, open /integrations and click the Microsoft 365 card. The "Connect Microsoft 365" modal opens.
  2. Click to connect: the modal routes to Microsoft because the card carries no input fields.
  3. Sign in to Microsoft with your Microsoft 365 work or school account and approve the Calendar and Online Meetings permissions on the Microsoft consent screen. Keep the offline access permission checked so Microsoft returns a refresh token.
  4. Microsoft redirects back to MessageMind through the Teams OAuth callback, which stores the access token, refresh token, granted scopes, tenant id and the account's identity (id, email, display name, userPrincipalName) on the Integration record.
  5. Open the Microsoft Calendar settings page at /ai-home/integrations/microsoft-calendar, pick the Outlook calendar the AI should read and write against, and configure the booking event settings (including whether to attach a Teams link).

Authentication and permissions

Mechanism
Microsoft OAuth 2.0 against the Microsoft Entra organizations authority on connect, then tenant-scoped refresh against the stored tenant id. A first-party multitenant Entra app owned by MessageMind is used, so there is nothing for the user to paste and the connect body carries no keys.
Credentials
Access token, refresh token, granted scopes, tenant id and account identity (id, email, display name, userPrincipalName), all stored on the account's Integration record. Tokens refresh automatically when the stored access token is near expiry.

Required scopes

  • openid
  • profile
  • email
  • offline_access
  • User.Read
  • Calendars.Read
  • Calendars.ReadWrite
  • OnlineMeetings.ReadWrite

Available data and actions

Reads

  • The connected Microsoft 365 account's identity (id, email, display name, userPrincipalName) through Microsoft Graph /me.
  • The list of Outlook calendars the account can see, each with its id, name and whether the account can edit it.
  • Busy Outlook events on the chosen calendar when the AI checks availability for a slot.

Writes

  • New Outlook calendar events on the chosen calendar when the AI confirms a booking, with an optional attendee and an optional Teams online meeting link.

AI agent use cases

  • Quote a free slot inside a WhatsApp, Instagram, SMS or email thread by reading the host's live Outlook calendar, then lock the slot in Outlook as the booking is confirmed.
  • Attach a Teams join link to the booking so the customer receives the meeting link in-thread alongside the confirmation.
  • Keep Outlook as the single source of truth: anything already on the host's Outlook calendar blocks the AI from offering the slot, and bookings the AI creates become normal Outlook events.

Configuration

  • A booking event setting must exist in /ai-home/integrations/microsoft-calendar before the AI can book. The first event activates the booking tools for the account.
  • Each event setting pins which Outlook calendar to use and whether to include a Teams link on the created event.
  • Outlook events marked free or workingElsewhere, and cancelled events, do not block availability.
  • Only one booking integration can be the active calendar source at a time; adding Microsoft 365 booking events while another booking integration is active is refused.
  • The event setting controls whether Microsoft Graph emails attendees: a 'no updates' setting creates the event without inviting the booker.
  • Zoom connects independently as an online meeting provider and is excluded from the dashboard single-calendar gate.

Example workflows

Chat-driven booking into Outlook with a Teams link

  1. Customer asks for a time inside the chat thread.
  2. The AI reads the host's selected Outlook calendar for busy events across the requested window.
  3. The AI quotes a free slot in the chat.
  4. Customer confirms and provides any required details.
  5. The AI creates the event on the host's Outlook calendar; if the event setting asks for a Teams link, Microsoft Graph mints one on creation.
  6. The join URL and confirmation are posted back into the chat.

Limitations

  • The connecting account must come back with a refresh token on consent. Without one, the connection is rejected.
  • Teams links depend on the mailbox having a usable Teams license. When Microsoft Graph rejects the online-meeting request, the booking still lands as a plain Outlook event with no Teams link.
  • Microsoft Graph can take a moment to populate the Teams join URL after an event is created; MessageMind retries briefly, but if Graph still has not returned the URL the booking succeeds without it.
  • Attendees are only emailed by Microsoft Graph when the event setting allows guest invites; a 'no updates' setting creates the event without inviting the booker.
  • Personal (non-work) Microsoft accounts that cannot resolve a tenant will not connect under this integration.

Troubleshooting

Connection fails with 'Microsoft did not return a refresh token'.

The consent screen was approved without granting offline access. Reconnect from the Microsoft 365 card and keep the offline_access permission checked when consenting.

Connection fails with 'Microsoft did not return a tenant id'.

The returned identity token did not carry a tenant claim. Retry the connect flow; a personal (non-work) Microsoft account that cannot resolve a tenant will not connect under this integration.

Bookings are created but no Teams link appears.

The mailbox probably has no usable Teams license, or Microsoft Graph rejected the online-meeting request. The booking is intentionally kept; add Teams to the mailbox and reconnect to get links on future bookings.

The Microsoft 365 card refuses to enable booking events.

Another calendar provider (Google Calendar, GHL Calendar, Amelia or Phorest) is already the active booking source. Disconnect the other calendar provider first; Zoom is an independent meeting provider and is excluded from this gate.

Disconnect and reconnect

  • On /integrations in the dashboard, open the Microsoft 365 card and disconnect the account. The stored refresh token and tenant id are cleared from the Integration record.
  • To reconnect, click the Microsoft 365 card again and run the Microsoft OAuth flow. Previously-created Outlook events stay on the mailbox; disconnecting does not cancel them.