EWS and Skype for Business/Lync meeting info - sip

I am doing some work on Lync/Skype meeting integration. In order to make this work, I need to get hold of the GRUU/SIP information for events/meetings.
Currently I have some success by using EWS against Office365. I query for the OnlineMeetingConfLink extended property, and if the meeting is Skype-enabled, get the SIP.
However, when this meeting is forwarded to our own Exchange (2010 SP2), these properties are not added to the invitation. They are not present in any headers or anything.
The message body contains the Lync URL and Skype Conference ID, but those are not usable/parsable in a reliable way.
Any pointer to documentation or suggestions are welcome.

Related

Microsoft Graph API: How to detected if Mail has been moved from another folder into an observed one (Mail/Delta Queries/Subscription)

We currently migrating our .Net Application from EWS to Graph API using msgraph-sdk-dotnet
Primarily we are using message-delta Requests to observe mail folders in order to detect incoming mails. So far so good.
Migrating from EWS
When using EWS we were able to detect moved mail events/actions and to distinguish these mails from new incoming (new sent) mails. So far, we didn't figure out who this can be achieved by using MS Graph API.
About use cases
There are use cases where we must distinguish a newly sent email from a Mail which has been moved/dragged from another folder into the observed one manually by any user (via Outlook). This use case scenario includes the following flow: Let's say the inbox is the observed folder, a new incoming mail has been sent to the mailbox and the mail has been detected by our delta request observer.
Then the user decides to move this mail into another custom but not observed folder using Outlook. Finally, the user decides to drag this mail back into the observed folder. Now we'd like to have a solid strategy at hand to detect this mail as moved (not as sent or updated, we need to distinguish these states).
Hint: This flow demonstrates why we can't really rely on isRead: Users can use a client (e. g. Outlook) to mark an any mail as read, which is most likely the case when you drag a mail from folder to folder.
How to detected a moved mail?
Are there any properties from Mail Resource which can be used to identify if a mail has been moved specifically? Maybe something not mentioned in the public API documentation (ODATA, something which can be extracted by folderIds etc.?) or something which is supported by beta API version? Any ideas?
We also investigated the subscription resource but did not find a specific changeType which specifically reflected a moved mail.
How should we resolve these issues? Any ideas how to develop a solid detection strategy for moved mails using Graph API?
Thx for any hint, advice or help you can give
I have started looking at the lastModifiedDateTime property. It appears that when the message is first received, the lastModifiedDateTime is 1-2 seconds after the receivedDateTime. When the message is moved to another mail folder, receivedDateTime stays constant, but obviously the lastModifiedDateTime changes. I am still looking at the Microsoft docs to find everywhere the lastModifiedDateTime property is changed.

Retrieving Azure AD Invitation Redemption URL after-the-fact

We have a Powershell script that creates some guest users using the New-AzureADMSInvitation cmdlet, and its return value has a handy-dandy InviteRedeemUrl property that we include in a nice welcome email to the user to get them started with setting their account up and using our application. This works fine when inviting individual or small numbers of users.
However, we'll need to do this for many users, and carefully control when the emails go out, and I can't see any other way of retrieving this URL after-the-fact... the only option seems to be the "Resend invitation" button on the guest user in AD, which sends a Microsoft-branded email from "Microsoft Invitations" with the redeem URL, which is kind of a problem... For marketing reasons we need to put the invite redeem URL in our own welcome email, so we don't want Microsoft sending out those emails.
Is there any way to retrieve or calculate that invitation URL after the guest user had already been invited? I know I could delete and recreate the invitation itself, but that's still a manual process and I'd like to be able to create guest users in bulk first, and then retrieve those URLs in bulk once we're ready to send out emails. Especially since Azure AD itself seems to be able to fetch the redeem URLs later on via the "Resend invitation" button.
Alternatively , you can think of adding you company branding in the verification and invitation mails in azure AD.
Here is something similar you can find:-
https://learn.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-faqs#how-do-i-customize-verification-emails-the-content-and-the-from-field-sent-by-azure-ad-b2c
Basically you need to change the company branding in Azure active directory to have your custom logo and text.
Hope it helps.
We ended up modifying the AD invitation script to store the InviteRedeemUrl value in our CRM as a field on the customer record. Then later on when our Marketing team wants to start their email campaigns, they could include a reference to this field in the email template just like they would any other field. This way, we got all our analytics on click/open rates and retained complete control over the emails, including where each batch was being sent from (so customers could reply to the correct support staff member for their segment).

Is there a way to get the Suggested Contacts through Outlook API?

I'm currently developing an app that fetches my contacts in my Microsoft account.
The problem is, unlike Google, when I send or receive an email to/from a new contact, it isn't copied into My Contacts, so I can't get it through https://outlook.office.com/api/v2.0/me/contacts.
However, when I wrote a new email, it appears as a suggestion, so I guess it is stored somewhere else.
The question is: is there a way to access to my suggested contacts through the API to get their emails? And how?
Thank you 😊
This feature is only available in beta version for now, please see the following api:
https://outlook.office.com/api/beta/me/contacts?$select=EmailAddresses,GivenName,Surname,DisplayName
This api will return all the contacts that you have received an email from or sent an email to :)
The closest thing to what you're looking for is the People API. As that page says:
The People API returns relevent person entities with each request. A person aggregates information from across mail, contacts and social networks. The results are ordered by their relevance, which is determined by the criteria specified in the request and ranked based on multiple communication, collaboration and business relationships.

Retrieving who created a meeting "on behalf of" in EWS SOAP service

I've been working in a meeting management app using EWS SOAP service (Exchange 2010 SP1), but for meetings created on behalf of a certain user I cannot know who is this user when I try to get the meeting data through EWS SOAP.
In Outlook (2010 specifically) I can see the name of the account who has acting in behalf of another account on a meeting request for accept or rejection (e.g. Some User ; on behalf of; Another User ), then I want to retrieve the same information through EWS.
I tried to retrieve the meeting information using the example of https://msdn.microsoft.com/en-us/library/office/dn439786(v=exchg.80).aspx changing the Element IdOnly by AllProperties
but I cannot see the property that define who acted in behalf of this account
Is there any way to obtain this user's email or name?
I believe that you need to check this on the meeting request, not the appointment. Check the From and Sender, as I recall the Sender would be the delegate, and the From would be the delegator (though I may have them switched :))

UCMA: Chat with users not in AD

a customer wants enable a chat/instant messenger for his application webside. He is using Lync Server internally to Chat in-house. Now, he requires the following:
A external user (which will not be an AD user) logs into the webside is able to chat with a person inside the company. The internal user will receive those messages via his lync client.
What's the best way to achieve this?
i thought about bot that delegates messages from the webside to the lync server that does the rest. But how can i send a message as an external user?
The usual way to approach this is with the following components:
A bot that connects to the internal Lync infrastructure as an ApplicationEndpoint, and manages conversations with external/internal users
A Web or WCF service that exposes methods over http to external users - this could be built into the bot, or could be a separate service that communicates with the bot in some way
The web UI for presenting a users presence, allowing click-to-call, initiating and displaying a conversation etc
As an example, the WCF service could expose a few methods:
GetPresence(targetSipUri) - returns a presence value for the given uri
SendIM(targetSipUri, message) - sends an IM to the given uri
GetReplies() - polls for any responses
When you get into the detail you might need more methods - e.g. it may be an idea to generate a conversation token and pass this around
The web UI could present a list of contacts with a presence status (GetPresence), then allow the user to click a presence contact to initiate a new conversation window and send the inital message (SendIM), then poll the service for any replies from the contact (GetReplies) - note, the bot will have to queue replies internally until GetReplies is called.
There are commercial products that might meet your needs - a quick search for Lync webchat should turn up a few. Also, it may be worth looking into the Lync Web App, to see if this works for your customer
Edit: In answer to the comment below - yes, your internal users will see a conversation from "Our Lync Bot". If you don't know who your users are (e.g. random potential customers browsing a shopping site), you can grab some info from them (name, product to discuss etc) and have the bot display this to the internal user, either as part of the IM conversation, or as conversation context displayed in a Conversation Window Extension.
If your external users are known in advance (e.g. registered customers), and the internal user MUST see the conversation as being from them, then you will need to create a UserEndpoint for each conversation - but this would rely on having the user in AD.