Appearance
Linking room calendars (Google Workspace / Microsoft 365)
People book meeting rooms in the calendar they already use. In Google Calendar they pick a room from the Rooms tab; in Outlook from Room finder; in Teams from Add location. This page links those rooms to the rooms in Omaya, both ways:
- A room booked in Google Calendar or Outlook shows in Meeting Room within a few minutes, and the room's sensors then check it in or release it.
- A room booked in Omaya (on the web, the phone or the door display) goes onto the room's calendar, so Google and Outlook show it busy, and the people invited get the invitation.
- When nobody turns up and Omaya releases the room, the room declines the meeting in Google or Outlook too, and the organiser is told. The room is free there again.
- Extending or ending a meeting in Omaya moves its end time on the calendar; cancelling removes it.
This is set up once, by two people: your IT administrator (Google Workspace or Microsoft 365) and an Omaya administrator. It takes about half an hour.
Where it is in Omaya
Admin console → Your Apps → Meeting Room → Open Calendar sync.
How it fits together
One redirect address for the whole server
Omaya returns from Google and Microsoft to a single address, /admin/apps/meeting-room/calendar/callback, whichever organisation is connecting. Register it once on the OAuth client or app registration; Omaya knows which organisation started the sign-in and checks the admin may manage it.
Your meeting rooms must exist in Google or Microsoft as rooms, not as people's calendars:
| Google Workspace | Microsoft 365 | |
|---|---|---|
| What a room is called | A room resource (Calendar resource) | A room mailbox |
| Where people pick it | Google Calendar → Rooms tab | Outlook → Room finder, Teams → Add location |
| Who creates it | Workspace admin, in the Admin console | Exchange admin, in the Exchange admin center |
| How Omaya signs in | An OAuth client in your Google Cloud project | An app registration in Microsoft Entra |
Omaya then reads each linked room's own calendar (the next 30 days, every five minutes) and writes Omaya's bookings to it. Rooms are matched to Omaya's rooms by name when you first connect; you can change any match.
Google Workspace
1. Create the rooms (Workspace admin)
- Open the Google Admin console → Directory → Buildings and resources → Manage resources.
- Add each meeting room. Give it the same name it has in Omaya (it makes the automatic matching work), and fill in capacity, building and floor.
- Leave the rooms on auto-accept (the default for resources): a room then accepts a free slot and declines one that clashes, so it can never be double-booked.
The rooms now appear in everyone's Google Calendar Rooms tab.
2. Create the OAuth client (Google Cloud)
In the Google Cloud console, in a project owned by your organisation:
- APIs & Services → Library: enable the Google Calendar API and the Admin SDK API.
- APIs & Services → OAuth consent screen: choose Internal (only your Workspace users can use it, and Google does not need to review it). Give it a name such as Omaya Meeting Room.
- APIs & Services → Credentials → Create credentials → OAuth client ID:
- Application type: Web application.
- Authorised redirect URI: copy it from Omaya's Calendar sync page, under Provider app → Redirect URI to register with the provider. It is
https://<your Omaya address>/admin/apps/meeting-room/calendar/callback— the same for every organisation on that Omaya server, so one client can serve them all.
- Keep the Client ID and Client secret.
3. Share the room calendars
Omaya connects as one Workspace admin account, and writes to each room's calendar as that account. For each room, share its calendar with that account with Make changes to events. (In Google Calendar: Other calendars → + → Browse resources → tick the room → the room's Settings and sharing → Share with specific people.)
4. Connect in Omaya (Omaya admin)
- Admin console → Your Apps → Meeting Room → Open Calendar sync.
- Open Provider app. In the Google Workspace card paste the Client ID and Client secret and press Save.
- Press Connect Google Workspace and sign in with the Workspace admin account from step 3. Google asks for two permissions: your calendars, and the list of calendar resources (read only). Allow both.
- Back in Omaya, Each room and its room calendar fills in: every room Omaya could match by name says Linked. Pick the rest from the list, or choose Type a room email… and paste the room's resource email.
The two permissions Omaya asks Google for
https://www.googleapis.com/auth/calendar— read and write events on the calendars shared with the account (the room calendars).https://www.googleapis.com/auth/admin.directory.resource.calendar.readonly— read the list of room resources, so you can pick rooms instead of typing emails.
If the page says Reconnect to enable room calendars, the account was connected before Omaya asked for these, or one was unticked on Google's screen. Press Reconnect and allow both.
Microsoft 365
1. Create the rooms (Exchange admin)
- Exchange admin center → Recipients → Resources → Add a room resource, one per meeting room. Use the same name as in Omaya.
- Fill in capacity, building and floor for each. Microsoft only lists rooms that have these details, so a room without them is missing from Omaya's list (you can still type its email).
- Put the rooms in a room list (one per building) so Outlook's Room finder offers them.
- Leave each room on automatic processing (AutoAccept): it accepts free slots and declines clashes.
2. Register the app (Microsoft Entra)
In the Microsoft Entra admin center → App registrations → New registration:
- Name it, for example Omaya Meeting Room. Supported account types: this organisation only.
- Redirect URI: platform Web, and paste the address from Omaya's Calendar sync page (Provider app → Redirect URI to register with the provider).
- Certificates & secrets → New client secret. Copy the secret's value now; Entra does not show it again.
- API permissions → Add a permission → Microsoft Graph:
- Delegated:
offline_access,openid,profile,User.Read,Calendars.Read(for signing in). - Application:
Place.Read.All(the list of rooms) andCalendars.ReadWrite(reading and writing the room calendars). - Press Grant admin consent for (your organisation).
- Delegated:
- From Overview copy the Application (client) ID and the Directory (tenant) ID.
Application permissions reach every mailbox
Calendars.ReadWrite as an application permission can read and write any calendar in your organisation, not only rooms. Most organisations limit it to the room mailboxes: put the rooms in a mail-enabled security group and restrict the app to that group with an Exchange application access policy (or the newer RBAC for Applications). Omaya only ever touches the rooms you link.
3. Connect in Omaya (Omaya admin)
- Admin console → Your Apps → Meeting Room → Open Calendar sync.
- Open Provider app. In the Microsoft 365 card paste the Client ID, the Client secret and, under Directory (tenant), the Directory (tenant) ID or your verified domain (not common). Press Save.
- Press Connect Microsoft 365 and sign in with a Microsoft 365 admin account.
- Each room and its room calendar fills in, matched by name. Pick the rest from the list, or Type a room email….
Choosing how it behaves
Under How it behaves on the Calendar sync page:
| Switch | What it does | Default |
|---|---|---|
| Bookings made in Omaya go on the room calendar | Writes Omaya's bookings to the room calendar and invites the people on them. Off: Omaya only reads | On |
| Free the room in the calendar too when nobody turns up | When Omaya releases a no-show (after the Ghost release minutes in the Meeting Room settings), the room declines the meeting in Google or Outlook and the organiser is told | On |
| Also read personal calendars for room names | For teams that type "Boardroom" in a meeting title instead of adding the room. Reads the connected account's own calendar and matches room names in titles. Less reliable; leave it off once rooms are linked | Off once a room is linked |
Sync now reads every linked room straight away; otherwise it runs every five minutes. Disconnect stops the sync; the room links are kept for when someone connects again.
What people see
- In Google Calendar or Outlook, nothing changes: they add the room as before. A few minutes later the meeting is on the room's tile in Omaya, marked From calendar in the room's day.
- In Omaya, a booking made there arrives on the organiser's and invitees' calendars as an invitation from the room's calendar, with Booked in Omaya by … at the bottom.
- When nobody comes, the room's reply in Google or Outlook says Released: nobody arrived within 10 minutes (your Ghost release time).
When something is wrong
The Calendar sync page shows the provider's answer in plain words next to the connection or the room. The usual ones:
Google: "refused the room list (403)". The account is not a Workspace admin, the calendar resources permission was not allowed, or the Admin SDK API is not enabled in the Cloud project.
Google: "refused <room> (403)". That room's calendar is not shared with the connected account with Make changes to events (step 3).
Microsoft: "refused (403/401)". The Application permissions are missing or admin consent was not granted (Entra step 4), or an application access policy leaves that room out.
A room is missing from the list. Google: it is not a room resource yet. Microsoft: it has no capacity / building details, so Microsoft does not list it — choose Type a room email….
The room in Omaya shows nothing booked in Outlook. Check the room's row says Linked and Bookings made in Omaya go on the room calendar is on.
Bookings appear twice. A meeting both in a room's calendar and in the connected admin's own calendar with the room's name in the title. Switch off Also read personal calendars for room names.
"Room calendars need your Microsoft directory". Fill Directory (tenant) in the Microsoft card (step 3.2) or press Reconnect.
Seats differ. The table shows Omaya says 24 seats, the room calendar says 20. Press use 20 seats? to take the calendar's number, or fix it in Google or Microsoft.
What Omaya stores
The sign-in tokens for the connected account (encrypted), the client ID and secret you saved, and for each room the room calendar's email. Each booking that came from a calendar keeps the calendar's event id, so a moved or cancelled meeting updates the same booking. Nothing is shared with other organisations on the same Omaya server.