匿名ユーザー向けのアプリを構築する
匿名ユーザーには Microsoft Entra ID がなく、テナントとフェデレーションされていません。 匿名の参加者は外部ユーザーですが、その ID は会議に表示されません。 匿名ユーザーは発表者または出席者にすることができますが、開催者にすることはできません。 ボット、メッセージング拡張機能、カード、ダイアログ (TeamsJS v1.x ではタスク モジュールと呼ばれます) をアプリ内に構築して、匿名の会議参加者と関わることができます。
注:
- 匿名ユーザー向けのアプリは、Windows と Mac 用の新しい Teams デスクトップ クライアントとモバイル クライアントでサポートされています。
- 匿名ユーザー向けの会議アプリは、Microsoft Edge と Chrome でのみサポートされています。
匿名ユーザーが Teams 会議でアプリと対話するには、次のことを確認します。
- アプリ マニフェストを更新します。
- Teams 管理センターで 匿名ユーザー アプリの操作 を有効にします。
匿名ユーザーのアプリ マニフェストの更新
注:
アプリ マニフェスト スキーマ v1.16 の supportsAnonymousGuestUsers
プロパティは、 新しい Teams クライアントでのみサポートされます。
匿名ユーザーがタブ アプリと対話できるようにするには、 supportsAnonymousGuestUsers
プロパティをアプリ マニフェスト スキーマ v1.16 以降で true
するように更新します。 マニフェストの例を次に示します。
"meetingExtensionDefinition": {
"supportsAnonymousGuestUsers": true
}
詳細については、「アプリ マニフェスト スキーマ」を参照してください。
匿名ユーザー認証フロー
匿名ユーザーは、Microsoft Entra アカウントではなく、Microsoft Entra 認証またはクライアント SDK からの getAuthToken
を介して認証することはできません。
getAuthToken
は、エラー useGetAuthToken: Failed with error - User is not authenticated
を返すことによって匿名ユーザーに対して失敗します。 匿名ユーザーを認証する必要がある場合、アプリは匿名ユーザーを識別し、会議で代替認証エクスペリエンスを提供する必要があります。 ユーザーのコンテキストを検証することで、 ユーザーが匿名かどうかを判断できます。
匿名ユーザー アプリの操作の管理者設定
Teams 管理者は、Teams 管理センターを使用して、テナント全体の匿名ユーザー アプリ操作を有効または無効にすることができます。 匿名ユーザーがアプリにアクセスする必要がある場合は、テナント管理者が匿名ユーザー アプリの操作を有効にしていることを確認します。 既定では、この設定は有効になっています。 詳細については、「 匿名ユーザーが会議でアプリと対話できるようにする」を参照してください。
匿名ユーザーのアプリ エクスペリエンスをテストするには、会議の招待で URL を選択し、プライベート ブラウザー ウィンドウから会議に参加します。
Teams クライアント ライブラリから getContext を In-Meeting する
アプリは、共有アプリ ステージから getContext
API を呼び出すと、匿名ユーザーに対して次の情報を受け取ります。 匿名ユーザーを認識するには、Anonymous
のuserLicenseType
値を確認します。
import * as microsoftTeams from "@microsoft/teams-js";
microsoftTeams.app.getContext().then((context) => {
if (context.user.licenseType === "Anonymous") {
// Add your custom logic here
}
});
プロパティ名 | 説明 |
---|---|
userObjectId |
匿名ユーザーの空の文字列。 |
userLicenseType |
Anonymous は匿名ユーザーを表します。 |
loginHint |
匿名ユーザーの空の文字列。 |
userPrincipalName |
匿名ユーザーの空の文字列。 |
getContext
の詳細については、「Microsoft Teams JavaScript ライブラリを使用してコンテキストを取得する」を参照してください。
ボット アクティビティと API
いくつかの違いにより、ボットに送信されるアクティビティと、ボット API から受信した応答は、匿名と匿名の会議の参加者の間で一貫性があります。
メンバーの取得と単一メンバー API の取得
メンバーを取得し、単一メンバー API を取得すると、匿名ユーザーの限られた情報が返されます。
{
"id": "<GUID1>",
"name": "<AnonTest (Guest)>",
"tenantId": "<GUID2>",
"userRole": "anonymous"
}
プロパティ名 | 説明 |
---|---|
id |
匿名ユーザーの一意の生成された値。 |
name |
会議に参加するときに匿名ユーザーによって提供される名前。 |
tenantId |
会議開催者のテナント ID。 |
userRole |
anonymous は匿名ユーザーを表します。 |
ConversationUpdate アクティビティ MembersAdded と MembersRemoved
MembersAdded
protected override async Task OnTeamsMembersAddedAsync(IList<TeamsChannelAccount> membersAdded, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
foreach (var teamMember in membersAdded)
{
// If UserRole == "anonymous", it indicates an anonymous user
if (teamMember.UserRole == "anonymous" )
{
// Add your custom logic here
}
else
{
// Add your custom logic here
}
}
}
MembersRemoved
protected override async Task OnTeamsMembersRemovedAsync(IList<TeamsChannelAccount> membersRemoved, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
foreach (var member in membersRemoved)
{
// If AadObjectId is null, it indicates an anonymous user
if (member.AadObjectId == null)
{
// Add your custom logic here
}
else
{
// Add your custom logic here
}
}
注:
匿名ユーザーが会議に参加または退出する場合、ペイロード内の from
オブジェクトには、他のユーザーがアクションを実行した場合でも、会議開催者の ID が常に含まれます。
Conversation API の作成
ボットは、匿名ユーザーとの 1 対 1 の会話を開始することはできません。 ボットは、匿名ユーザーのユーザー ID を使用して 会話の作成 API を呼び出すと、 400
無効な要求状態コードと次のエラー応答を受け取ります。
var conversationParameters = new ConversationParameters
{
IsGroup = false,
Bot = turnContext.Activity.Recipient,
Members = new ChannelAccount[] { teamMember },
TenantId = turnContext.Activity.Conversation.TenantId,
};
await ((CloudAdapter)turnContext.Adapter).CreateConversationAsync(
conversationParameters,
async (t1, c1) =>
{
conversationReference = t1.Activity.GetConversationReference();
await ((CloudAdapter)turnContext.Adapter).ContinueConversationAsync(
_appId,
conversationReference,
async (t2, c2) =>
{
await t2.SendActivityAsync(proactiveMessage, c2);
},
cancellationToken);
},
cancellationToken);
{
"error": {
"code": "BadArgument",
"message": "Bot cannot create a conversation with an anonymous user"
}
}
アダプティブ カード
匿名ユーザーは、会議チャットでアダプティブ カードを表示および操作できます。 アダプティブ カードアクションは、匿名ユーザーと非匿名ユーザーの場合と同じように動作します。 詳細については、「 カードアクション」を参照してください。
既知の問題と制限事項
匿名ユーザー向けのアプリは、ライブ イベント、仮想デスクトップ インフラストラクチャ (VDI)、Linux プラットフォームではサポートされていません。
匿名ユーザー向けのアプリは、Firefox および Safari ブラウザーではサポートされていません。
匿名ユーザーのアプリは、Teams チャネル会議ではサポートされていません。
getContext
API は匿名ユーザーのユーザー ID を返しませんが、ボット API はそうしますが、これら 2 つの API 間で匿名ユーザーを関連付けることはできません。匿名ユーザーには、アプリの実際のアイコンではなく、ボット メッセージとカードに汎用アプリ アイコンが表示されます。
コード サンプル
サンプルの名前 | 説明 | .NET | Node.js |
---|---|---|---|
匿名ユーザー サポート | 会議アプリで匿名ユーザー サポートを表示するサンプル アプリ。 | 表示 | 表示 |
次の手順
関連項目
Platform Docs