ユーザーは複数の Teams クライアント (デスクトップ、モバイル、Web) 上に存在できるため、ユーザーは複数のプレゼンス セッションを持つことができます。 各 Teams クライアントには独立したプレゼンス セッションがあり、ユーザーのプレゼンスは、背後にあるすべてのセッションから集計された状態です。
同様に、アプリケーションはユーザーに対して独自のプレゼンス セッションを持ち、状態を更新できます。
セッションの状態を集計する方法の優先順位を次に示します。
ユーザー構成 > のアプリ構成 (ユーザーが構成した状態が他の状態をオーバーライドする)
アプリで構成されている間: DoNotDisturb > Busy > Available > Away
メモ: Microsoft Graph でユーザープレゼンスが変更されると、Teams クライアントがポーリング モードを使用するため、プレゼンス状態の更新には数分かかります。
タイムアウト、有効期限、およびキープ アライブ
プレゼンス セッションが タイムアウト して 有効期限が切れる可能性があるため、アプリケーションは タイムアウト前にこの API を呼び出して、セッションの状態を維持する必要があります。または 有効期限の前に、セッションを維持します。
// Code snippets are only available for the latest version. Current version is 5.x
// Dependencies
using Microsoft.Graph.Users.Item.Presence.SetPresence;
var requestBody = new SetPresencePostRequestBody
{
SessionId = "22553876-f5ab-4529-bffb-cfe50aa89f87",
Availability = "Available",
Activity = "Available",
ExpirationDuration = TimeSpan.Parse("PT1H"),
};
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
await graphClient.Users["{user-id}"].Presence.SetPresence.PostAsync(requestBody);
// THE CLI IS IN PREVIEW. NON-PRODUCTION USE ONLY
mgc users presence set-presence post --user-id {user-id} --body '{\
"sessionId": "22553876-f5ab-4529-bffb-cfe50aa89f87",\
"availability": "Available",\
"activity": "Available",\
"expirationDuration": "PT1H"\
}\
'
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
com.microsoft.graph.users.item.presence.setpresence.SetPresencePostRequestBody setPresencePostRequestBody = new com.microsoft.graph.users.item.presence.setpresence.SetPresencePostRequestBody();
setPresencePostRequestBody.setSessionId("22553876-f5ab-4529-bffb-cfe50aa89f87");
setPresencePostRequestBody.setAvailability("Available");
setPresencePostRequestBody.setActivity("Available");
PeriodAndDuration expirationDuration = PeriodAndDuration.ofDuration(Duration.parse("PT1H"));
setPresencePostRequestBody.setExpirationDuration(expirationDuration);
graphClient.users().byUserId("{user-id}").presence().setPresence().post(setPresencePostRequestBody);
<?php
use Microsoft\Graph\GraphServiceClient;
use Microsoft\Graph\Generated\Models\SetPresencePostRequestBody;
$graphServiceClient = new GraphServiceClient($tokenRequestContext, $scopes);
$requestBody = new SetPresencePostRequestBody();
$requestBody->setSessionId('22553876-f5ab-4529-bffb-cfe50aa89f87');
$requestBody->setAvailability('Available');
$requestBody->setActivity('Available');
$requestBody->setExpirationDuration(new \DateInterval('PT1H'));
$graphServiceClient->users()->byUserId('user-id')->presence()->setPresence()->post($requestBody)->wait();