Configure Policies for the Exchange Online Resource Booking Assistant
With many offices closed, people working from home, and Outlook making online meetings the default, thoughts might turn to how to stop people scheduling meetings in traditional meeting rooms in buildings to encourage them to consider an alternative, even when employees return to offices.
Different Ways to Block Room Bookings
Several ways suggest themselves to stop users scheduling meetings in rooms:
Remove the room mailbox. This works, but it is not a recommended approach. You will want to use these rooms in the future and won’t want to recreate the rooms and the location data for the rooms.
Hide the room mailboxes from address lists. This is better because it stops people searching for rooms when scheduling meetings. The downside is that people might know the email address of a room and can use that to schedule a meeting.
Block room schedules with dummy meetings. You could schedule meetings in all rooms to block other people from being able to reserve times. Again, this works, but it’s s tiresome process to schedule meetings, especially if you have a lot of rooms to process and normal working doesn’t restart soon.
Employ the Resource Booking Assistant
Hiding rooms from address lists is the best of the three approaches, but it’s not the answer. The Exchange Online resource booking assistant responds to meeting requests according to policies configured for room mailboxes. The resource booking assistant runs in the background to monitor inbound requests sent to room mailboxes. If the policy allows and the requested slot is available, the resource booking assistant accepts the request and confirms the booking.
The Set-CalendarProcessing cmdlet updates policy settings, and we can use it to create a policy to ensure that meeting requests for rooms are not accepted, even when a slot is available.
For example, to set a blocking configuration for the “Room 101” room:
Set-CalendarProcessing -Identity "Room 101" -AllBookInPolicy $False -AllRequestInPolicy $False
Set-Mailbox -Identity "Room 101" -MailTip "Rooms are currently unavailable"
The MailTip is defined to give some immediate feedback if someone adds a blocked room to a meeting, but if they go ahead and try to book the room, the resource booking assistant will decline and respond with a polite note (Figure 1).
Figure 1: The Booking Assistant turns down a room booking request
Exceptions to the Booking Policy
If you want to allow some people to book the room when it’s blocked by default, enter their mailboxes (email addresses, aliases, display names, etc.) in the BookInPolicy parameter. Requests from people specified here are automatically accepted by the resource booking assistant. To make this easier to manage, use a distribution list instead of individual aliases.
Most people try to book 30- or 60-minute meeting slots, so this will stop them doing that. The downside is that the message received from the resource booking assistant tells them why their meeting request was declined (Figure 2). The danger then exists that some people will go ahead and book one-minute meetings on the basis that once they get into the room, they’ll be able to stay there for a longer period.
Figure 2: A booking request is declined because it exceeds the maximum time slot
Reversing the Process
When normal times resume and you want to make rooms available again, reverse the process by running the command:
This is a small point, but detail is important when you manage an Office 365 tenant because a detail might just be the way that you can get something done. Learn detail in the Office 365 for IT Pros eBook. We have lots of it!
12 Replies to “How to Block Room Bookings with Exchange Online”
Thank you for this article.
However, the -mailtip parameter can’t be set with the “Set-CalendarProcessing” cmdlet. You will get an error when running this script, you need another line: Set-Mailbox -Identity “Room101” -MailTip “Rooms are currently unavailable”
Thanks again for all your work on the Office 365 for IT Pros ebook!
You’re right. From my original notes, it looks like a cut and paste error on my part. Fortunately, the readers of this blog are so intelligent that they automatically adjusted for my error!
And, if the resource booking assistant doesn’t respond with a polite note? In my case, the meet was not accepted showing a “provisioned” status with the message: “The meet was not accepted”; How do we fore a room to decline every book request?
I realize that if there are some delegated owner or a bookinpolicy exception group/users, the resource only rejects the invite, but it doesn’t sends a e-mail informing. Removing both fixed the issue. Tks!
Loading...
It’s easiest when all requests in policy are automatically accepted without going near a delegate…
Loading...
Thanks for the guide! Is there a way to auto block meeting requests for every alternating week? Our school has bi-weekly schedules where some rooms are only available in week A – not week B…
Tony, I set this up using a d-list with three members, one being a test user. Logged into Outlook as the test user, I am still getting the blocked message (with my posted tool tip, “This room is reserved for Marketing Team only.”) I’ve tried resyncing the OAL with GAL in Outlook, no difference.
Below are the parameters on the resource room. What am I missing?
{"id":null,"mode":"button","open_style":"in_modal","currency_code":"EUR","currency_symbol":"\u20ac","currency_type":"decimal","blank_flag_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/blank.gif","flag_sprite_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/flags.png","default_amount":100,"top_media_type":"featured_image","featured_image_url":"https:\/\/office365itpros.com\/wp-content\/uploads\/2022\/11\/cover-141x200.jpg","featured_embed":"","header_media":null,"file_download_attachment_data":null,"recurring_options_enabled":true,"recurring_options":{"never":{"selected":true,"after_output":"One time only"},"weekly":{"selected":false,"after_output":"Every week"},"monthly":{"selected":false,"after_output":"Every month"},"yearly":{"selected":false,"after_output":"Every year"}},"strings":{"current_user_email":"","current_user_name":"","link_text":"Virtual Tip Jar","complete_payment_button_error_text":"Check info and try again","payment_verb":"Pay","payment_request_label":"Office 365 for IT Pros","form_has_an_error":"Please check and fix the errors above","general_server_error":"Something isn't working right at the moment. Please try again.","form_title":"Office 365 for IT Pros","form_subtitle":null,"currency_search_text":"Country or Currency here","other_payment_option":"Other payment option","manage_payments_button_text":"Manage your payments","thank_you_message":"Thank you for supporting the work of Office 365 for IT Pros!","payment_confirmation_title":"Office 365 for IT Pros","receipt_title":"Your Receipt","print_receipt":"Print Receipt","email_receipt":"Email Receipt","email_receipt_sending":"Sending receipt...","email_receipt_success":"Email receipt successfully sent","email_receipt_failed":"Email receipt failed to send. Please try again.","receipt_payee":"Paid to","receipt_statement_descriptor":"This will show up on your statement as","receipt_date":"Date","receipt_transaction_id":"Transaction ID","receipt_transaction_amount":"Amount","refund_payer":"Refund from","login":"Log in to manage your payments","manage_payments":"Manage Payments","transactions_title":"Your Transactions","transaction_title":"Transaction Receipt","transaction_period":"Plan Period","arrangements_title":"Your Plans","arrangement_title":"Manage Plan","arrangement_details":"Plan Details","arrangement_id_title":"Plan ID","arrangement_payment_method_title":"Payment Method","arrangement_amount_title":"Plan Amount","arrangement_renewal_title":"Next renewal date","arrangement_action_cancel":"Cancel Plan","arrangement_action_cant_cancel":"Cancelling is currently not available.","arrangement_action_cancel_double":"Are you sure you'd like to cancel?","arrangement_cancelling":"Cancelling Plan...","arrangement_cancelled":"Plan Cancelled","arrangement_failed_to_cancel":"Failed to cancel plan","back_to_plans":"\u2190 Back to Plans","update_payment_method_verb":"Update","sca_auth_description":"Your have a pending renewal payment which requires authorization.","sca_auth_verb":"Authorize renewal payment","sca_authing_verb":"Authorizing payment","sca_authed_verb":"Payment successfully authorized!","sca_auth_failed":"Unable to authorize! Please try again.","login_button_text":"Log in","login_form_has_an_error":"Please check and fix the errors above","uppercase_search":"Search","lowercase_search":"search","uppercase_page":"Page","lowercase_page":"page","uppercase_items":"Items","lowercase_items":"items","uppercase_per":"Per","lowercase_per":"per","uppercase_of":"Of","lowercase_of":"of","back":"Back to plans","zip_code_placeholder":"Zip\/Postal Code","download_file_button_text":"Download File","input_field_instructions":{"tip_amount":{"placeholder_text":"How much would you like to tip?","initial":{"instruction_type":"normal","instruction_message":"How much would you like to tip? Choose any currency."},"empty":{"instruction_type":"error","instruction_message":"How much would you like to tip? Choose any currency."},"invalid_curency":{"instruction_type":"error","instruction_message":"Please choose a valid currency."}},"recurring":{"placeholder_text":"Recurring","initial":{"instruction_type":"normal","instruction_message":"How often would you like to give this?"},"success":{"instruction_type":"success","instruction_message":"How often would you like to give this?"},"empty":{"instruction_type":"error","instruction_message":"How often would you like to give this?"}},"name":{"placeholder_text":"Name on Credit Card","initial":{"instruction_type":"normal","instruction_message":"Enter the name on your card."},"success":{"instruction_type":"success","instruction_message":"Enter the name on your card."},"empty":{"instruction_type":"error","instruction_message":"Please enter the name on your card."}},"privacy_policy":{"terms_title":"Terms and conditions","terms_body":null,"terms_show_text":"View Terms","terms_hide_text":"Hide Terms","initial":{"instruction_type":"normal","instruction_message":"I agree to the terms."},"unchecked":{"instruction_type":"error","instruction_message":"Please agree to the terms."},"checked":{"instruction_type":"success","instruction_message":"I agree to the terms."}},"email":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email address"},"success":{"instruction_type":"success","instruction_message":"Enter your email address"},"blank":{"instruction_type":"error","instruction_message":"Enter your email address"},"not_an_email_address":{"instruction_type":"error","instruction_message":"Make sure you have entered a valid email address"}},"note_with_tip":{"placeholder_text":"Your note here...","initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"empty":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"not_empty_initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"saving":{"instruction_type":"normal","instruction_message":"Saving note..."},"success":{"instruction_type":"success","instruction_message":"Note successfully saved!"},"error":{"instruction_type":"error","instruction_message":"Unable to save note note at this time. Please try again."}},"email_for_login_code":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email to log in."},"success":{"instruction_type":"success","instruction_message":"Enter your email to log in."},"blank":{"instruction_type":"error","instruction_message":"Enter your email to log in."},"empty":{"instruction_type":"error","instruction_message":"Enter your email to log in."}},"login_code":{"initial":{"instruction_type":"normal","instruction_message":"Check your email and enter the login code."},"success":{"instruction_type":"success","instruction_message":"Check your email and enter the login code."},"blank":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."},"empty":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."}},"stripe_all_in_one":{"initial":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"empty":{"instruction_type":"error","instruction_message":"Enter your credit card details here."},"success":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"invalid_number":{"instruction_type":"error","instruction_message":"The card number is not a valid credit card number."},"invalid_expiry_month":{"instruction_type":"error","instruction_message":"The card's expiration month is invalid."},"invalid_expiry_year":{"instruction_type":"error","instruction_message":"The card's expiration year is invalid."},"invalid_cvc":{"instruction_type":"error","instruction_message":"The card's security code is invalid."},"incorrect_number":{"instruction_type":"error","instruction_message":"The card number is incorrect."},"incomplete_number":{"instruction_type":"error","instruction_message":"The card number is incomplete."},"incomplete_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incomplete."},"incomplete_expiry":{"instruction_type":"error","instruction_message":"The card's expiration date is incomplete."},"incomplete_zip":{"instruction_type":"error","instruction_message":"The card's zip code is incomplete."},"expired_card":{"instruction_type":"error","instruction_message":"The card has expired."},"incorrect_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incorrect."},"incorrect_zip":{"instruction_type":"error","instruction_message":"The card's zip code failed validation."},"invalid_expiry_year_past":{"instruction_type":"error","instruction_message":"The card's expiration year is in the past"},"card_declined":{"instruction_type":"error","instruction_message":"The card was declined."},"missing":{"instruction_type":"error","instruction_message":"There is no card on a customer that is being charged."},"processing_error":{"instruction_type":"error","instruction_message":"An error occurred while processing the card."},"invalid_request_error":{"instruction_type":"error","instruction_message":"Unable to process this payment, please try again or use alternative method."},"invalid_sofort_country":{"instruction_type":"error","instruction_message":"The billing country is not accepted by SOFORT. Please try another country."}}}},"fetched_oembed_html":false}
Thank you for this article.
However, the -mailtip parameter can’t be set with the “Set-CalendarProcessing” cmdlet. You will get an error when running this script, you need another line: Set-Mailbox -Identity “Room101” -MailTip “Rooms are currently unavailable”
Thanks again for all your work on the Office 365 for IT Pros ebook!
Best regards
You’re right. From my original notes, it looks like a cut and paste error on my part. Fortunately, the readers of this blog are so intelligent that they automatically adjusted for my error!
And, if the resource booking assistant doesn’t respond with a polite note? In my case, the meet was not accepted showing a “provisioned” status with the message: “The meet was not accepted”; How do we fore a room to decline every book request?
Set-CalendarProcessing https://docs.microsoft.com/en-us/powershell/module/exchange/set-calendarprocessing?view=exchange-ps is the way to configure room mailboxes to accept requests.
I realize that if there are some delegated owner or a bookinpolicy exception group/users, the resource only rejects the invite, but it doesn’t sends a e-mail informing. Removing both fixed the issue. Tks!
It’s easiest when all requests in policy are automatically accepted without going near a delegate…
Thanks for the guide! Is there a way to auto block meeting requests for every alternating week? Our school has bi-weekly schedules where some rooms are only available in week A – not week B…
Tony, I set this up using a d-list with three members, one being a test user. Logged into Outlook as the test user, I am still getting the blocked message (with my posted tool tip, “This room is reserved for Marketing Team only.”) I’ve tried resyncing the OAL with GAL in Outlook, no difference.
Below are the parameters on the resource room. What am I missing?
RunspaceId : 020af8e7-5b88-4207-a1b5-8e4dc61c8d53
AutomateProcessing : AutoAccept
AllowConflicts : False
AllowDistributionGroup : True
AllowMultipleResources : True
BookingType : Standard
BookingWindowInDays : 180
MaximumDurationInMinutes : 1440
MinimumDurationInMinutes : 0
AllowRecurringMeetings : True
EnforceAdjacencyAsOverlap : False
EnforceCapacity : False
EnforceSchedulingHorizon : True
ScheduleOnlyDuringWorkHours : False
ConflictPercentageAllowed : 0
MaximumConflictInstances : 0
ForwardRequestsToDelegates : True
DeleteAttachments : True
DeleteComments : True
RemovePrivateProperty : True
DeleteSubject : True
AddOrganizerToSubject : True
DeleteNonCalendarItems : True
TentativePendingApproval : True
EnableResponseDetails : True
OrganizerInfo : True
ResourceDelegates : {}
RequestOutOfPolicy : {}
AllRequestOutOfPolicy : False
BookInPolicy : {/o=ExchangeLabs/ou=Exchange Administrative Group
(FYDIBOHF23SPDLT)/cn=Recipients/cn=b1aed6d4ceef49748abd92f4f7a107dd-MarketingRo}
AllBookInPolicy : False
RequestInPolicy : {}
AllRequestInPolicy : False
AddAdditionalResponse : False
AdditionalResponse :
RemoveOldMeetingMessages : True
AddNewRequestsTentatively : True
ProcessExternalMeetingMessages : False
RemoveForwardedMeetingNotifications : False
AutoRSVPConfiguration : Microsoft.Exchange.Data.Storage.AutoRSVPConfiguration
MailboxOwnerId : Marketing Room
Identity : Marketing Room
IsValid : True
ObjectState : Changed
I have no chance of debugging without access to your tenant and I don’t want that… I’m sure it’s something simple.
And, then there’s this, while looking intriguing and simple, I’d prefer the proper way using policy:
https://anandthearchitect.com/2016/08/18/exchange-how-to-restrict-conference-room-only-to-specific-users/
Feel free to lobby Microsoft for change… Maybe at Ignite 2022 if that conference takes place in a face to face format!
Hi, I have done this but now i cant remove the MailTip at all. even if i change the mailtip, its keep sending the old mailtip.