匿名ユーザー向けのアプリを構築する

匿名ユーザーにはMicrosoft Entra ID がなく、テナントとフェデレーションされていません。 匿名の参加者は外部ユーザーですが、その ID は会議に表示されません。 匿名ユーザーは発表者または出席者にすることができますが、開催者にすることはできません。 ボット、メッセージング拡張機能、カード、ダイアログ (TeamsJS v1.x ではタスク モジュールと呼ばれます) をアプリ内に構築して、匿名の会議参加者と関わることができます。

注:

  • 匿名ユーザー向けのアプリは、Windows と Mac 用の新しい Teams デスクトップ クライアントとモバイル クライアントでサポートされています。
  • 匿名ユーザー向けの会議アプリは、Microsoft Edge と Chrome でのみサポートされています。

匿名ユーザーが Teams 会議でアプリと対話するには、次のことを確認します。

  1. アプリ マニフェストを更新します。
  2. Teams 管理センターで 匿名ユーザー アプリの操作 を有効にします。

匿名ユーザーのアプリ マニフェストの更新

注:

supportsAnonymousGuestUsersアプリ マニフェスト スキーマ v1.16 のプロパティは、新しい Teams クライアントでのみサポートされます。

匿名ユーザーがタブ アプリと対話できるようにするには、アプリ マニフェスト スキーマ v1.16 以降で プロパティを にtrue更新supportsAnonymousGuestUsersします。 マニフェストの例を次に示します。

"meetingExtensionDefinition": {
    "supportsAnonymousGuestUsers": true
}

詳細については、「アプリ マニフェスト スキーマ」を参照してください。

匿名ユーザー認証フロー

匿名ユーザーは、Microsoft Entra認証またはgetAuthTokenクライアント SDK から認証することはできません。これは、アカウントMicrosoft Entraされていないためです。 getAuthToken は、エラー を返すことによって匿名ユーザーに対して失敗 useGetAuthToken: Failed with error - User is not authenticatedします。 匿名ユーザーを認証する必要がある場合、アプリは匿名ユーザーを識別し、会議で代替認証エクスペリエンスを提供する必要があります。 ユーザーのコンテキストを検証することで、 ユーザーが匿名かどうかを判断できます。

匿名ユーザー アプリの操作の管理設定

Teams 管理者は、Teams 管理センターを使用して、テナント全体の匿名ユーザー アプリ操作を有効または無効にすることができます。 匿名ユーザーがアプリにアクセスする必要がある場合は、テナント管理者が匿名ユーザー アプリの操作を有効にしていることを確認します。 既定では、この設定は有効になっています。 詳細については、「 匿名ユーザーが会議でアプリと対話できるようにする」を参照してください。

匿名ユーザーのアプリ エクスペリエンスをテストするには、会議の招待で URL を選択し、プライベート ブラウザー ウィンドウから会議に参加します。

Teams クライアント ライブラリから getContext を In-Meeting する

アプリは、共有アプリ ステージから API を呼び出すと、匿名ユーザーに対して次のgetContext情報を受け取ります。 の値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
匿名ユーザー サポート 会議アプリで匿名ユーザー サポートを表示するサンプル アプリ。 表示 表示

次の手順

関連項目