Exchange Calendar Processing: Limit External users that can book a Room - exchange-server

We have several rooms set up with Exchange resource mailboxes with Calendar Processing. (Using Set-CalendarProcessing)
There are several people in our parent organization that we want to be able to book rooms, but they have a different Exchange System, so we enabled the ability for external people to book the room:
Connect-ExchangeOnline -UserPrincipalName "me#contoso.com"
Set-CalendarProcessing -Identity "BossRoom" -ProcessExternalMeetingMessages $true
However, with one room, we want to limit it to only a few external higher-ups.
I tried:
Set-CalendarProcessing -Identity "BossRoom" -BookInPolicy #( "User1#bossescontoso.com", "User2#bossescontoso.com" )
but it fails because they aren't in our Exchange system. (And there is no way we can force them to login with a different account.)
That being the case, is there any way to specify that only certain external users can make room booking requests?

Related

Phrase lists supplied by the backend per-user for Botframework

I have a backend service where users can create and name rooms and devices. I'd like to integrate with Cortana and allow users to interact with their devices using Cortana. I created a bot that is hosted on my backend and added Cortana as a channel. I also integrated the bot with my OAuth 2 server so I know which user is interacting with the bot.
I trained my LUIS model with phrases like "turn on light in the bathroom", "turn off all lights", etc.
My issue: each user can name rooms and devices as they want. I do not know in advance which rooms and which devices are going to be configured in the service. When I get the request in my bot, I can find all devices for the user. The list is fixed at that point and could be used as a phrase list - only devices in the list are allowed to be in the request.
Which brings me to my question: is it possible to modify the phrase list on per-user basis? Or configure a URL from which the most recent phrase list could be retrieved before the request is processed by LUIS? Basically all I need is to avoid getting a request to turn on light in the "living room" while there is no living room configured by the user in the system and instead it should have been "dining room" (this is just a simple example, in the real world it would be more complex).
I know there is LUIS REST API that can be used to dynamically modify the configuration, but:
1) it is not on per-user basis
2) it requires re-building and re-publishing the LUIS model
I believe the Connected Home skills solve that somehow by discovering all devices connected to the service, but I haven't found any APIs I could use to solve the issue in my skill.
Edit:
I am looking for a functionality like this:
Cortana Connected Home
After linking the Hue account Cortana knows which devices the user has and at that point the voice recognition can be smart and try to map the spoken words to an actual device name.
Firstly, the phrase list feature can help LUIS recognize intents and entities, it will affect on that whole LUIS app. As far as I know, there are not concept of per-user basis phrase list feature in LUIS.
Secondly, LUIS app support 5,000 items per phrase list, if the number of your app system rooms (or devices) name does not exceed the limit, you can add all rooms’ name in a phrase list (and add all devices’ name in another phrase list).
Besides, you can also try this approach: when users can create and name rooms and devices, you can map information about user with rooms&devices and store the map information in a external store, such as a database etc. And if you pass query to LUIS, LUIS would help detect the intent and the entity(or entities or empty entities list), if there are not any entity in entities list, you can query records of rooms’ name from that external store and prompt the user for selecting a room.
Code snippet:
//query records of rooms’ name from that external store
//then prompt user for select a room
PromptDialog.Choice(
context: context,
resume: ChoiceReceivedAsync,
options: options,
prompt: "Hi. Please Select the Room :",
retry: "Please try again.",
promptStyle: PromptStyle.Auto
);
Test result:

Exchange Calendar Events for all users in my organization

Is there a way to subscribe to all NEW calendar entries create by all users in my organization? Basically, whenever anyone in my organization creates a meeting invite, my app needs to be notified.
Our app needs this to work for both Exchange Online and On-premise.
Is there a way to subscribe to all NEW calendar entries create by all users in my organization?
No Subscriptions and always in the context of a Mailbox or Mailbox Folder (you need to consider your mailboxes will be spread across different servers in different data-centers)
As a workaround you could create a Transport Rule that catches any Meeting invitations and redirect them to a particular mailbox. Then just subscribe to events on that mailbox.

Microsoft Exchange Meeting Master Copy

I have a custom application with its own database and a connection to exchange through EWS. Part of this application is a meeting tool which allows users to import exchange meetings and auto invite the other users which also use my application. As part of this tool I need to keep my meetings up to date with exchange, basically maintaining a centralized meeting storage. I can't simply store the user's exchange credentials due to security concerns and I also cannot customize the EWS server in any significant way (ie I cannot add Delegate Access).
The problem is that I am currently simply forcing all users to login to EWS whenever the go to view a meeting's details and it will query EWS to get the details using that user's EWS credentials and access their copy of the meeting. The problem is that there is no guarantee that any user has the same meeting details as any other user. As is partially explained here. Is there any way I can force the EWS FindItem call to only use the meeting's public (master) properties? i.e. Whatever version of the meeting the organizer has sent out/updated. I just need all users to return the same details when they query for the same meeting.
One solution I've considered is adding a 'bot' user whenever a meeting is imported into my application, and then just always using that bot's version of the meeting. However, I would really prefer to do something more 'under the hood' that doesn't require this extraneous user.
Is there any way I can force the EWS FindItem call to only use the meeting's public (master) properties
No FindItem will only every return you information about what is in the Folder your trying to access. You might want to consider using GetUserAvailiblity to check the organiser https://msdn.microsoft.com/en-us/library/aa494212(v=exchg.80).aspx would be the closest. I would say to make your application work correctly is you need an Service account that has been given at least read access to every users calendar, you can then make a call to get the organiser version of the Appointment which will also contain the user responses. If your using Office365 then the new REST Api does facilitate this in a more secure way eg demon apps https://blogs.msdn.microsoft.com/exchangedev/2015/01/21/building-daemon-or-service-apps-with-office-365-mail-calendar-and-contacts-apis-oauth2-client-credential-flow/

Can I log in to EWS with Conference room account credentials?

I have been trying to do some operations via EWS API (for Java) by using credentials of the account marked as a conference room, with no success so far. Each call ends with The SMTP address has no mailbox associated with it. I have been searching through EWS API reference but found no entry that Conference Room account or Resource account cannot be used to check its own calendar, schedule a meetings etc.
When I use my own credentials (personal, not conference room) same code works fine.
The question
Is it possible to read appointments using EWS using only Conference Room credentials?

Exchange 2007 master category list

We are constructing an application that will be interacting with Exchange 2007 calendar functions. We will be using the Outlook Redemption Objects dll’s. Our design relies upon the outlook 2007 meeting Category features. We would like to ensure that specific mailboxes have a standard set of category names and colors.
We can’t rely on users to set these up. We also can’t rely on users running the exchange client, many users will be on MAC’s and will be using OWA to manage their calendar.
As I understand it the master category list is stored in each users mailbox in an hidden message in a property named IPM.Configuration.CategoryList. I haven’t found any reference on how to set this yet.
The only things that I have found to help us are:
Group policy objects: http://technet.microsoft.com/en-us/library/cc179073.aspx As I understand this, it won’t manage the color’s and relies upon the exchange client.
A third party tool - http://www.vboffice.net/product.html?id=2006063&cmd=detail&lang=en&pub=6 The enterprise edition appears to do what we want but is expensive for a once per mailbox operation on 100 or so mailboxes.
Basically, our preferred solution is to be able to produce a script that accepts a mailbox name and sets up a standard master category list.
we were able to accomplish our task using the code at http://gsexdev.blogspot.com/2007/08/adding-categories-to-master-categories.html
AFAIK, the categories for mail box items are stored in local outlook profile and not on the exchange server.Before Ol 2K7, these were stored in registry so I doubt if category master list can be set on E2K7.

Resources