3 min readMicrosoft Graph Presence API

3 min readMicrosoft Graph Presence API

In Microsoft Teams anyone can see other user’s availability
status(presence) in the organization. Previously, there is no API call
to access user’s presence information. Many clients have requested this
feature in Graph. Now Microsoft Graph supports the Presence API in the
beta version.

What is Presence?

Presence is part of a user’s profile in Microsoft Teams that indicates
the user’s current availability and status to other users. Presence
details are based on user’s availability and user’s activity.

Presence API

Presence Resource Type has of following methods

  • Get Presence – it gets user’s presence information
  • Get multiple user’s presence – it gets a list of user’s presence

    information

Presence Resource Type consists of following properties

  • Id – user id
  • Availability – The base presence information for a user. Possible

    values are Available, Away, BeRightBack, Busy, DoNotDisturb, Offline
  • Activity – The additional information to a user’s availability.

    Possible values are Available, Away, BeRightBack, Busy,

    DonotDisturb, InACall, InAMeeting, Offline and so on.

To access Presence API calls, admin consent is needed. The Permissions
needed are

  • Presence.Read
  • Presence.Read.All

Get Presence API call

Permission: Presence.Read, Presence.Read.All

Request Method: GET

Request API url: GET https://graph.microsoft.com/beta/users/
{userid}/presence

Retrieve specific user status by mentioning user id in request call.

Response:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "id": "668xxxxx-xxxx-xxxx-xxxx-xxxxxxx",
    "availability": "Busy",
    "activity": "InACall"
}

Get multiple users Presence API call

Permission: Presence.Read.All

Request: Here we use Microsoft Graph Communication API to get multiple
users status

Request Method: POST

Request API url:
https://graph.microsoft.com/beta/communications/getPresencesByUserId

Request body: Mention the user id separated by comma

{
    "ids": ["as3wxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "jh5rxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]
}

Response:

HTTP/1.1 200 OK
Content-Type: application/json
{
    "value": [{
            "id": "as3wxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "availability": "Busy",
            "activity": "InACall"
        },
        {
            "id": "jh5rxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "availability": "Available",
            "activity": "Available"
        }
    ]
}


Export Teams Presence of all users using PowerShell Script

This PowerShell script export details of Microsoft Teams Presence in
your tenant with the following information to a csv file

  • User Id
  • Display Name
  • Email Address
  • Availability
  • Activity

Prerequisites:

To run this script, you need to install SharePoint Online PnP module.

HTTP/1.1 200 OK
Content-Type: application/json

{
    
function Export-PresenceList
{  
    param (  
                  $ExportPath
                 )  
    process
    {
        Connect-PnPOnline -Scopes "Group.Read.All","User.ReadBasic.All","Presence.Read","Presence.Read.All"
        $accesstoken =Get-PnPAccessToken
        Connect-MsolService
        $users= Get-MsolUser -all |select ObjectId
        $userslist = $users.ObjectId
        $body = @{"ids" = $userslist } | ConvertTo-Json
        $header = @{
                                  "Authorization"="Bearer $accesstoken"
                                  "Content-Type"="application/json"
                               } 
        $presenceinfo = Invoke-RestMethod -Headers $header -Uri 
        https://graph.microsoft.com/beta/communications/getPresencesByUserId -Body $body -Method POST
        $presenceinfodetails= @()
        foreach($presence in $presenceinfo.value )
        {
            $user=get-msoluser -ObjectId $presence.id |select DisplayName,UserPrincipalName
            $userinfo = "" |select "UserId","Displayname","Emailaddress","availability", "activity"
            $userinfo.UserID = $presence.id
            $userinfo.Displayname = $user.DisplayName
            $userinfo.Emailaddress = $user.UserPrincipalName 
            $userinfo.availability =$presence.availability
            $userinfo.activity =$presence.activity
            $presenceinfodetails+= $userinfo
            $userinfo =$null
        }
        $presenceinfodetails | Export-csv $ExportPath -NoTypeInformation
    }
}
Export-PresenceList -ExportPath "C:tempteamspresencelist.csv"



}

Result:

Now using Presence API and script, we retrieved the user’s availability
successfully.

Migrate Everything to Microsoft 365

Exchange Online SharePoint Online OneDrive For Business Microsoft Teams Microsoft Planner Viva Engage (Yammer) Microsoft Bookings Microsoft Forms Power Automate Microsoft Power BI Exchange Online SharePoint Online OneDrive For Business Microsoft Teams Microsoft Planner Viva Engage (Yammer) Microsoft Bookings Microsoft Forms Power Automate Microsoft Power BI
  • No Data Loss
  • Zero Downtime
  • ISO-Certified Protection

Start your free 15-days trial today !


4.5 out of 5