Teams の特定のコンテキストをボット用に取得する

Important

このセクションのコード サンプルは、バージョン 4.6 以降のバージョンの Bot Framework SDK に基づいています。 以前のバージョンのドキュメントをお探しの場合は、ドキュメントのレガシ SDK フォルダーの ボット - v3 SDK セクションを参照してください。

ボットは、インストールされているチームまたはチャットに関する追加のコンテキスト データにアクセスできます。 この情報は、ボットの機能を強化し、よりパーソナライズされたエクスペリエンスを提供するために使用できます。

名簿またはユーザー プロファイルをフェッチする

ボットは、Teams ユーザー ID や名前や objectId などのMicrosoft Entra情報など、メンバーとその基本的なユーザー プロファイルの一覧を照会できます。 この情報を使用して、ユーザー ID を関連付けることができます。 たとえば、Microsoft Entra資格情報を使用してタブにログインしたユーザーがチームのメンバーであるかどうかをチェックします。 会話メンバーを取得する場合、最小または最大ページ サイズは実装によって異なります。 ページ サイズが 50 未満の場合は 50 として扱われ、500 を超える場合は 500 に制限されます。 ページ化されていないバージョンを使用している場合でも、大規模なチームでは信頼性が低いため、使用しないでください。 詳細については、「チームまたはチャット メンバーをフェッチするための Teams ボット API に対する変更」を参照してください。

注:

  • 改ページは、チームとチャネルで使用できます。
  • 改ページはチャットではサポートされていません。 チャットの場合、名簿全体が常に返されます。

次のサンプル コードは、ページ化されたエンドポイントを使用して名簿を取得します。

public class MyBot : TeamsActivityHandler
{
    protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {
        var members = new List<TeamsChannelAccount>();
        string continuationToken = null;

        do
        {   
            // Gets a paginated list of members of one-on-one, group, or team conversation.
            var currentPage = await TeamsInfo.GetPagedMembersAsync(turnContext, 100, continuationToken, cancellationToken);
            continuationToken = currentPage.ContinuationToken;
            members.AddRange(currentPage.Members);
         }
         while (continuationToken != null);
     }
}

名簿またはユーザー プロファイルをフェッチすると、単一のメンバーの詳細を取得できます。 現在、チャットまたはチームの 1 人以上のメンバーの情報を取得するには、Microsoft Teams ボット API TeamsInfo.GetMembersAsync (C# の場合) または TeamsInfo.getMembers (TypeScript API の場合) を使用します。

単一のメンバーの詳細を取得する

また、Teams ユーザー ID、UPN、または Microsoft Entra オブジェクト ID を使用して、特定のユーザーの詳細を取得することもできます。

次のサンプル コードは、単一メンバーの詳細を取得するために使用されます。

public class MyBot : TeamsActivityHandler
{
    protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {   
        // Gets the account of a single conversation member.
        // This works in one-on-one, group, and team scoped conversations.
        var member = await TeamsInfo.GetMemberAsync(turnContext, turnContext.Activity.From.Id, cancellationToken);
    }
}

単一のメンバーの詳細を取得した後、チームの詳細を取得できます。 現在、チームの情報を取得するには、Teams ボット API TeamsInfo.GetMemberDetailsAsync (C# の場合) または TeamsInfo.getTeamDetails (TypeScript の場合) を使用します。

チームの詳細を取得する

チームにインストールすると、ボットは、Microsoft Entra グループ ID を含む、そのチームに関するメタデータを照会できます。

次のサンプル コードは、チームの詳細を取得するために使用されます。

public class MyBot : TeamsActivityHandler
{
    protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {
        // Gets the details for the given team id. This only works in team scoped conversations.
        // TeamsGetTeamInfo: Gets the TeamsInfo object from the current activity.
        TeamDetails teamDetails = await TeamsInfo.GetTeamDetailsAsync(turnContext, turnContext.Activity.TeamsGetTeamInfo().Id, cancellationToken);
        if (teamDetails != null) {
            await turnContext.SendActivityAsync($"The groupId is: {teamDetails.AadGroupId}");
        }
        else {
            // Sends a message activity to the sender of the incoming activity.
            await turnContext.SendActivityAsync($"Message did not come from a channel in a team.");
        }
    }
}

チームの詳細を取得したら、チーム内のチャネルのリストを取得できます。 現在、チーム内のチャネルのリストの情報を取得するには、Teams ボット API TeamsInfo.GetTeamChannelsAsync (C# の場合) または TeamsInfo.getTeamChannels (TypeScript API の場合) を使用します。

チーム内のチャネルの一覧を取得します。

ボットは、チーム内のチャネルのリストをクエリできます。

注:

  • ローカリゼーションを可能にするために、既定の一般チャネルの名前が null として返されます。
  • 一般チャネルのチャネル ID は、常にチーム ID と一致します。

次のサンプル コードは、チーム内のチャネルのリストを取得するために使用されます。

public class MyBot : TeamsActivityHandler
{
    // Override this in a derived class to provide logic specific to Message activities.
    protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {
        // Returns a list of channels in a Team. This only works in team scoped conversations.
        IEnumerable<ChannelInfo> channels = await TeamsInfo.GetTeamChannelsAsync(turnContext, turnContext.Activity.TeamsGetTeamInfo().Id, cancellationToken);

        // Sends a message activity to the sender of the incoming activity.
        await turnContext.SendActivityAsync($"The channel count is: {channels.Count()}");
    }
}

Teams ボットのサンプル

コード サンプル

機能を示す完全な作業サンプルについては、Bot Framework 用の次の Teams サンプルを参照してください。

サンプルの名前 説明 .NET Node.js Python マニフェスト
Teams 会話ボット このサンプルでは、ボット フレームワーク v4 で使用できるさまざまなボット会話イベントを個人用とチームのスコープに使用する方法を示します。 表示 表示 表示 表示
OAuthPrompt による認証 このサンプルでは、Bot Framework v4 での認証と基本的なメッセージングを示します。 表示 表示 表示 表示
Teams ファイルのアップロード このサンプルでは、1 対 1 の会話でボットでファイルを使用する方法を示します。 表示 表示 表示 表示
ダイアログ (TeamsJS v1.x のタスク モジュールと呼ばれます) このサンプルでは、メッセージ拡張機能にダイアログとカードの値を使用する方法を示します。 表示 表示 表示 表示
チャネルで新しいスレッドを開始する このサンプルでは、ボットを使用してチャネルで新しいスレッドを使用する方法を示します。 表示 表示 表示 表示
Teams アプリのローカライズ このサンプルでは、ボットとタブを使用して Teams アプリのローカライズを使用する方法を示します。 表示 表示 該当なし 表示

次の手順

関連項目