重要
このセクションのコード サンプルは、バージョン 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);
}
}
export class MyBot extends TeamsActivityHandler {
constructor() {
super();
// See https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0 to learn more about the message and other activity types.
this.onMessage(async (turnContext, next) => {
var continuationToken;
var members = [];
do {
// Gets a paginated list of members of one-on-one, group, or team conversation.
var pagedMembers = await TeamsInfo.getPagedMembers(turnContext, 100, continuationToken);
continuationToken = pagedMembers.continuationToken;
members.push(...pagedMembers.members);
}
while(continuationToken !== undefined)
// By calling next() you ensure that the next BotHandler is run.
await next();
});
}
}
SDK レファレンス
async def _show_members(
self, turn_context: TurnContext
):
# Get a conversationMember from a team.
members = await TeamsInfo.get_team_members(turn_context)
serviceUrl
の値をエンドポイントとして使用して、/v3/conversations/{conversationId}/pagedmembers?pageSize={pageSize}&continuationToken={continuationToken}
で GET 要求を直接発行できます。
serviceUrl
の値は安定していますが、変化する可能性があります。 新しいメッセージが届いたら、ボットは格納されている serviceUrl
の値を確認する必要があります。 応答ペイロードは、ユーザーが通常のユーザーであるか匿名のユーザーであるかも示します。
GET /v3/conversations/19:meeting_N2QzYTA3YmItYmMwOC00OTJmLThkYzMtZWMzZGU0NGIyZGI0@thread.v2/pagedmembers?pageSize=100&continuationToken=asdfasdfalkdsjfalksjdf
Response body
{
"continuationToken":"asdfqwerueiqpiewr",
"members":[
{
"id":"29:1GcS4EyB_oSI8A88XmWBN7NJFyMqe3QGnJdgLfFGkJnVelzRGos0bPbpsfJjcbAD22bmKc4GMbrY2g4JDrrA8vM06X1-cHHle4zOE6U4ttcc",
"name":"Anon1 (Guest)",
"tenantId":"29:1UX7p8Fkx7p93MZlBFS71swTB9juQOCfnXf2L3wxOUITCcIGpFcRX-JiFjLDVZhxGpEfzSTGNsZeEyTKr1iu3Vw",
"userRole":"anonymous"
},
{
"id":"29:1bSnHZ7Js2STWrgk6ScEErLk1Lp2zQuD5H2qQ960rtvstKp8tKLl-3r8b6DoW0QxZimuTxk_kupZ1DBMpvIQQUAZL-PNj0EORDvRZXy8kvWk",
"objectId":"76b0b09f-d410-48fd-993e-84da521a597b",
"givenName":"John",
"surname":"Patterson",
"email":"johnp@fabrikam.com",
"userPrincipalName":"johnp@fabrikam.com",
"tenantId":"29:1UX7p8Fkx7p93MZlBFS71swTB9juQOCfnXf2L3wxOUITCcIGpFcRX-JiFjLDVZhxGpEfzSTGNsZeEyTKr1iu3Vw",
"userRole":"user"
},
{
"id":"29:1URzNQM1x1PNMr1D7L5_lFe6qF6gEfAbkdG8_BUxOW2mTKryQqEZtBTqDt10-MghkzjYDuUj4KG6nvg5lFAyjOLiGJ4jzhb99WrnI7XKriCs",
"objectId":"6b7b3b2a-2c4b-4175-8582-41c9e685c1b5",
"givenName":"Rick",
"surname":"Stevens",
"email":"Rick.Stevens@fabrikam.com",
"userPrincipalName":"rstevens@fabrikam.com",
"tenantId":"29:1UX7p8Fkx7p93MZlBFS71swTB9juQOCfnXf2L3wxOUITCcIGpFcRX-JiFjLDVZhxGpEfzSTGNsZeEyTKr1iu3Vw",
"userRole":"user"
}
]
}
名簿またはユーザー プロファイルをフェッチすると、単一のメンバーの詳細を取得できます。 チャットまたはチームの 1 人以上のメンバーの情報を取得するには、C# 用に TeamsInfo.GetMembersAsync
Microsoft Teams ボット API、または TypeScript API の TeamsInfo.getMembers
を使用します。
単一のメンバーの詳細を取得する
また、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);
}
}
export class MyBot extends TeamsActivityHandler {
constructor() {
super();
// See learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0 to learn more about the message and other activity types.
this.onMessage(async (turnContext, next) => {
const member = await TeamsInfo.getMember(turnContext, encodeURI('someone@somecompany.com'));
// By calling next() you ensure that the next BotHandler is run.
await next();
});
}
}
async def _show_members(
self, turn_context: TurnContext
):
# TeamsInfo.get_member: Gets the member of a team scoped conversation.
member = await TeamsInfo.get_member(turn_context, turn_context.activity.from_property.id)
serviceUrl
の値をエンドポイントとして使用して、/v3/conversations/{conversationId}/members/{userId}
で GET 要求を直接発行できます。
serviceUrl
の値は安定していますが、変化する可能性があります。 新しいメッセージが届いたら、ボットは格納されている serviceUrl
の値を確認する必要があります。 これは、通常のユーザーと匿名ユーザーに使用できます。
以下は、通常のユーザーの応答サンプルです。
GET /v3/conversations/19:ja0cu120i1jod12j@skype.net/members/29:1GcS4EyB_oSI8A88XmWBN7NJFyMqe3QGnJdgLfFGkJnVelzRGos0bPbpsfJjcbAD22bmKc4GMbrY2g4JDrrA8vM06X1-cHHle4zOE6U4ttcc
Response body
{
"id": "29:1GcS4EyB_oSI8A88XmWBN7NJFyMqe3QGnJdgLfFGkJnVelzRGos0bPbpsfJjcbAD22bmKc4GMbrY2g4JDrrA8vM06X1-cHHle4zOE6U4ttcc",
"objectId": "9d3e08f9-a7ae-43aa-a4d3-de3f319a8a9c",
"givenName": "Larry",
"surname": "Brown",
"email": "Larry.Brown@fabrikam.com",
"userPrincipalName": "labrown@fabrikam.com",
"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47",
"userRole":"user"
}
以下は、匿名ユーザーの応答サンプルです。
GET /v3/conversations/19:ja0cu120i1jod12j@skype.net/members/<anonymous user id>"
Response body
{
"id": "29:1GcS4EyB_oSI8A88XmWBN7NJFyMqe3QGnJdgLfFGkJnVelzRGos0bPbpsfJjcbAD22bmKc4GMbrY2g4JDrrA8vM06X1-cHHle4zOE6U4ttcc",
"name": "Anon1 (Guest)",
"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47",
"userRole":"anonymous"
}
単一のメンバーの詳細を取得した後、チームの詳細を取得できます。 チームの情報を取得するには、C# 用に TeamsInfo.GetMemberDetailsAsync
Teams ボット API を使用するか、TypeScript の TeamsInfo.getTeamDetails
を使用します。
チームの詳細を取得する
チームにインストールすると、ボットは、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.");
}
}
}
export class MyBot extends TeamsActivityHandler {
constructor() {
super();
// See https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0 to learn more about the message and other activity types.
this.onMessage(async (turnContext, next) => {
// Gets the details for the given team id.
const teamDetails = await TeamsInfo.getTeamDetails(turnContext);
if (teamDetails) {
// Sends a message activity to the sender of the incoming activity.
await turnContext.sendActivity(`The group ID is: ${teamDetails.aadGroupId}`);
} else {
await turnContext.sendActivity('This message did not come from a channel in a team.');
}
// By calling next() you ensure that the next BotHandler is run.
await next();
});
}
}
SDK レファレンス
async def _show_details(self, turn_context: TurnContext):
# Gets the details for the given team id.
team_details = await TeamsInfo.get_team_details(turn_context)
# MessageFactory.text(): Specifies the type of text data in a message attachment.
reply = MessageFactory.text(f"The team name is {team_details.name}. The team ID is {team_details.id}. The AADGroupID is {team_details.aad_group_id}.")
# Sends a message activity to the sender of the incoming activity.
await turn_context.send_activity(reply)
serviceUrl
の値をエンドポイントとして使用して、/v3/teams/{teamId}
で GET 要求を直接発行できます。
serviceUrl
の値は安定していますが、変化する可能性があります。 新しいメッセージが届いたら、ボットは格納されている serviceUrl
の値を確認する必要があります。
GET /v3/teams/19:ja0cu120i1jod12j@skype.net
Response body
{
"id": "29:1GcS4EyB_oSI8A88XmWBN7NJFyMqe3QGnJdgLfFGkJnVelzRGos0bPbpsfJjcbAD22bmKc4GMbrY2g4JDrrA8vM06X1-cHHle4zOE6U4ttcc",
"name": "The Team Name",
"aadGroupId": "02ce3874-dd86-41ba-bddc-013f34019978"
}
チームの詳細を取得したら、チーム内のチャネルのリストを取得できます。 チーム内のチャネルの一覧の情報を取得するには、C# 用に TeamsInfo.GetTeamChannelsAsync
Teams ボット API または TypeScript API の TeamsInfo.getTeamChannels
を使用します。
チーム内のチャネルの一覧を取得します。
ボットは、チーム内のチャネルのリストをクエリできます。
注:
- ローカリゼーションを可能にするために、既定の一般チャネルの名前が
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()}");
}
}
SDK レファレンス
export class MyBot extends TeamsActivityHandler {
constructor() {
super();
// See https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0 to learn more about the message and other activity types.
this.onMessage(async (turnContext, next) => {
// Supports retrieving channels hosted by a team.
const channels = await TeamsInfo.getTeamChannels(turnContext);
// Sends a message activity to the sender of the incoming activity.
await turnContext.sendActivity(`The channel count is: ${channels.length}`);
// By calling next() you ensure that the next BotHandler is run.
await next();
});
}
}
SDK レファレンス
async def _show_channels(
self, turn_context: TurnContext
):
# Supports retrieving channels hosted by a team.
channels = await TeamsInfo.get_team_channels(turn_context)
reply = MessageFactory.text(f"Total of {len(channels)} channels are currently in team")
await turn_context.send_activity(reply)
serviceUrl
の値をエンドポイントとして使用して、/v3/teams/{teamId}/conversations
で GET 要求を直接発行できます。
serviceUrl
の値は安定していますが、変化する可能性があります。 新しいメッセージが届いたら、ボットは格納されている serviceUrl
の値を確認する必要があります。
GET /v3/teams/19%3A033451497ea84fcc83d17ed7fb08a1b6%40thread.skype/conversations
Response body
{
"conversations": [{
"id": "19:033451497ea84fcc83d17ed7fb08a1b6@thread.skype",
"name": null
}, {
"id": "19:cc25e4aae50746ecbb11473bba24c70a@thread.skype",
"name": "Materials"
}, {
"id": "19:b7b84cba410c406ba671dbbf5e0a3519@thread.skype",
"name": "Design"
}, {
"id": "19:fc5db2aed489454e8f8c06829ed6c986@thread.skype",
"name": "Marketing"
}]
}
コード サンプル
機能を示す完全な作業サンプルについては、Bot Framework 用の次の Teams サンプルを参照してください。
サンプルの名前 |
説明 |
.NET |
Node.js |
Python |
マニフェスト |
Teams 会話ボット |
このアプリは、ボットの会話イベントを示し、アダプティブ カード、開封確認、メッセージ更新イベントをサポートします。 これには、アクセシビリティに対するイマーシブ リーダーのサポートが含まれています。 |
表示 |
表示 |
表示 |
表示 |
OAuthPrompt による認証 |
このサンプル アプリは、ボットが Teams 認証を使用する方法を示しています。 |
表示 |
表示 |
表示 |
表示 |
Teams ファイルのアップロード |
Teams 用のこのボット サンプルでは、Bot Framework v4 を使用したファイルのアップロード機能を示し、ユーザーがファイルをアップロードし、チャット内のインライン イメージを表示できるようにします。 |
表示 |
表示 |
表示 |
表示 |
ダイアログ (TeamsJS v1.x のタスク モジュールと呼ばれます) |
このサンプル アプリでは、Bot Framework v4 を使用してダイアログ (TeamsJS v1.x のタスク モジュールと呼ばれます) を使用する方法を示します |
表示 |
表示 |
表示 |
表示 |
チャネルで新しいスレッドを開始する |
このアプリでは、Bot Framework v4 を使用して特定の Teams チャネルで会話スレッドを開始する方法を示します。 |
表示 |
表示 |
表示 |
表示 |
Teams アプリのローカライズ |
このサンプルでは、ボットとタブを使用してMicrosoft Teams アプリのローカライズを実装する方法を示します。 |
表示 |
表示 |
該当なし |
表示 |
次の手順
関連項目