GET Events not returning all attendees - microsoft-graph-api

Using the .NET SDK to query Graph api for events. In cases where there are multiple attendees, the result data only includes the organizer and a maximum of 2 additional attendees in the Attendees collection.
var request = this.graphClient.Users[spaceId].Calendar.Events.Request();
Interestingly, when using the Graph Explorer I see the same behavior, though I cannot confirm that those meetings have more than 3 attendees. (https://developer.microsoft.com/en-us/graph/graph-explorer?request=me/calendar/events&method=GET&version=v1.0#)
Is this a default limit in the API itself, or perhaps an Exchange configuration that needs to be changed?

Related

How to get a list of active PSTN calls in Teams using the Microsoft Graph API

We're looking for a way to get a list of all currently active PSTN calls being made into MS Teams. We've tried this:
https://learn.microsoft.com/en-us/graph/api/callrecords-callrecord-getpstncalls?view=graph-rest-beta
That's almost exactly what we need except records do not seem to appear here until the call has ended. What we need for the app we're trying to build is live call records.
We've also tried it by creating subscriptions and getting the ID of specific calls then looking up call records, but this data also appears to be delayed.
Is there a method we're missing here, or equally, is this something that may be added to the API some point soon?
Currently there is no graph API to get a list of active PSTN calls in Teams.
Microsoft will always focus on customer’s feedback and experience, some new features would be added to the services based on customers' feedback in the future, we also recommend you give your new idea in Teams UserVoice here.
They clearly mentioned in the document, we can not fetch the details directly. But you can fetch the records from your application. Using app side bearer token.

List who attended an MS Teams meeting and for how long they attended

I'd like to list who attended a MS Teams meeting and for how long they attended so they can get credit for attending a training session.
I've looked at the Graph API v1 and beta versions. Meetings have an object called meetingParticipantInfo, but there's nothing that I've seen that would indicate if that participant actually attended the meeting. Is there a way to get this information, and ideally, how long the participant attended? Or is there another way to get this information through bots?
https://learn.microsoft.com/en-us/graph/api/resources/meetingparticipants?view=graph-rest-beta
The (CDR's) Call Detail Records are probably the information your looking for as they should contain that information see https://techcommunity.microsoft.com/t5/Microsoft-Teams-Blog/Microsoft-Teams-launches-eDiscovery-for-Calling-and-Meetings/ba-p/210947 . I don't believe any of the Graph API's will surface that information but you can get the raw information from a Mailbox using EWS this is what I use https://dev.to/gscales/accessing-microsoft-teams-summary-records-cdr-s-for-calls-and-meetings-using-exchange-web-services-3581 . If you use a tool like mfcMapi https://github.com/stephenegriffin/mfcmapi/releases you can browse the Mailbox to see if a CDR is available and has the information you need without needing to write any code.
As of Feb 2020, Microsoft Graph API now includes microsoft.graph.callRecords (beta, preview).
If you call with session information expanded you can get startDateTime and endDateTime of each session which is the "time when the first user joined the session" and the "time when the last user left the session" respectively.
GET https://graph.microsoft.com/beta/communications/callRecords/{id}?$expand=sessions($expand=segments)
Here's the documentation for the call record session fields.
You should vote for this feature : https://microsoftteams.uservoice.com/forums/555103-public/suggestions/33989875-view-or-export-a-list-of-users-who-attended-a-meet
Then you can try with this : https://techcommunity.microsoft.com/t5/microsoft-teams-blog/microsoft-teams-launches-ediscovery-for-calling-and-meetings/ba-p/210947
I try to develop an app calling the Graph API, so if I do success, I will share it ;-)

Get list of only latest message in conversations from MS Graph API

I need to get a list of the last message in each conversation for o365 mail.
It appears that the odata aggregate extension (http://docs.oasis-open.org/odata/odata-data-aggregation-ext/v4.0/odata-data-aggregation-ext-v4.0.html) is not implemented. In the following query, $apply is just ignored and fails silently.
https://graph.microsoft.com/v1.0/me/mailFolders/inbox/messages?$select=conversationId,subject,createdDateTime&$apply=groupby(conversationId, topcount(1, createdDateTime))
Is there a way to get just this data without pulling back large amounts of messages and filtering out duplicate conversation ids?
If you have a last sync date, according to the docs, you can start tracking changes at an arbitrary date. You may have to deal with duplicate data if your goals can't be supported by a receivedDateTime filter.
https://graph.microsoft.com/v1.0/me/mailFolders/inbox/messages/delta?$select=conversationId,subject,createdDateTime&$filter=receivedDateTime+ge+{value}

People API in Microsoft Graph not returning the updated results

We recently updated the profile information in Azure active directory. when we use People API in graph explorer, it is not returning the latest information. How much time does it take normally to return the updated information?
The /me/people API is actually returning from a search index, not a real-time fetch from Azure Active Directory directly. The search index update depends on many characteristics of your AAD. It is safe to say you should see this reflected within 24 hours.
Obviously there is value in the people API with its underlying logic. If you wish to have the data updated instantly. You should use the /users/ to fetch the latest content.

Get all user (+ direct manager, photo meta data and properties like 'AboutMe')

Until now we used a SharePoint on-premise custom web service which delivered all users (approx 15,000) inclusive properties like aboutMe, skills, etc. and the direct manager. That job took approx. 15 minutes.
All the data was stored in a Lucene search index.
Now we have to switch to O365.
I am able to get all the desired information from Microsoft Graph but it would take way too long (3 - 5 hours):
Fetch all users via /v1.0/users (with paging)
Iterate through the collection and
get manager for given user via /v1.0/[user-id]/manager
get properties like aboutMe, skills for given User via /v1.0/[user-Id]?$select=aboutMe,skills
Is there any efficient way to do that task?
Ideally, you should just call Microsoft Graph for the data you want on-demand rather than attempting to sync it to your own database.
Assuming you can't do that, you can deduce the time this takes using /delta endpoint (Get incremental changes for users). When you use a delta token, you will only get back resources that have changed (adds, deletes, edits) since your previous request. So your first pass might take a few hours, but subsequent passes should take seconds.
You can control which properties you're "tracking changes" against using the $select query parameter. For example, if you only care about changes to the displayName then using /v1.0/users/delta?$select=displayName will ensure you only receive changes to that property. From the documentation:
If a $select query parameter is used, the parameter indicates that the client prefers to only track changes on the properties or relationships specified in the $select statement. If a change occurs to a property that is not selected, the resource for which that property changed does not appear in the delta response after a subsequent request.
Also, consider batching requests to improve your processes' overall performance. Batching allows you to send multiple queries to Microsoft Graph in a single request and get the complete results back in a single response.

Resources