ボットのコンテキストをMicrosoft Teamsする
重要
この記事は、v3 Bot Framework SDK に基づいて作成されています。 SDK の現在のドキュメント バージョン 4.6 以降を探している場合は、「会話型ボット 」セクションを参照 してください。
ボットは、チームまたはチャットに関する追加のコンテキスト (ユーザー プロファイルなど) にアクセスできます。 この情報は、ボットの機能を強化し、よりパーソナライズされたエクスペリエンスを提供するために使用できます。
注意
- Microsoft Teams固有のボット API は、ボット ビルダー SDK の拡張機能を通じて最適にアクセスできます。
- Microsoft.bot.Connector.C# .NET または .NET の場合は、Microsoft.Bot.Connector.Teams NuGetしてください。
- 開発Node.js、ボット フレームワーク SDK v4.6 Teams機能のボット ビルダーが組み込まれています。
チーム名簿を取得する
ボットは、チーム メンバーとその基本的なプロファイルの一覧を照会できます。 基本的なプロファイルには、Teams ID、名前Microsoft Azure Active Directoryオブジェクト ID などのAzure AD (Azure AD) 情報が含まれます。 この情報を使用して、ユーザー ID を関連付けできます。 たとえば、ユーザーがチーム メンバーであるユーザー (Microsoft Azure Active Directory) 資格情報Azure ADにログインした場合を確認します。
REST API の例
値をエンドポイントとして使用してserviceUrl
、/conversations/{teamId}/members/
GET 要求を直接発行します。
ボット teamId
が受け取る channeldata
アクティビティ ペイロードのオブジェクトは、次のシナリオで確認できます。
- ユーザーがチーム コンテキストでボットにメッセージを送信または操作する場合。 詳細については、「メッセージの受信 」を参照してください。
- 新しいユーザーまたはボットがチームに追加された場合。 詳細については、「チームに 追加されたボットまたはユーザー」を参照してください。
注意
- API を呼び出す場合は、必ずチーム ID を使用してください。
- 値
serviceUrl
は安定している傾向がありますが、変更される可能性があります。 新しいメッセージが届いた場合、ボットは保存されている値を確認する必要serviceUrl
があります。
GET /v3/conversations/19:ja0cu120i1jod12j@skype.net/members
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"
}, {
"id": "29:1bSnHZ7Js2STWrgk6ScEErLk1Lp2zQuD5H2qQ960rtvstKp8tKLl-3r8b6DoW0QxZimuTxk_kupZ1DBMpvIQQUAZL-PNj0EORDvRZXy8kvWk",
"objectId": "76b0b09f-d410-48fd-993e-84da521a597b",
"givenName": "John",
"surname": "Patterson",
"email": "johnp@fabrikam.com",
"userPrincipalName": "johnp@fabrikam.com"
}, {
"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"
}]
.NET の例
ユーザー GetConversationMembersAsync
ID の Team.Id
一覧を取得するために using を呼び出します。
// Fetch the members in the current conversation
var connector = new ConnectorClient(new Uri(context.Activity.ServiceUrl));
var teamId = context.Activity.GetChannelData<TeamsChannelData>().Team.Id;
var members = await connector.Conversations.GetConversationMembersAsync(teamId);
// Concatenate information about all members into a string
var sb = new StringBuilder();
foreach (var member in members.AsTeamsChannelAccounts())
{
sb.AppendFormat(
"GivenName = {0}, TeamsMemberId = {1}",
member.Name, member.Id);
sb.AppendLine();
}
// Post the member info back into the conversation
await context.PostAsync($"People in this conversation: {sb.ToString()}");
Node.jsまたは TypeScript の例
[...]
import * as builder from "botbuilder";
[...]
var teamId = session.message.sourceEvent.team.id;
connector.fetchMembers(
(<builder.IChatConnectorAddress>session.message.address).serviceUrl,
teamId,
(err, result) => {
if (err) {
session.endDialog('There is some error');
}
else {
session.endDialog('%s', JSON.stringify(result));
}
}
);
個人チャットまたはグループ チャットでユーザー プロファイルまたは名簿を取得する
任意の個人チャットの API 呼び出しを行って、ボットとチャットしているユーザーのプロファイル情報を取得できます。
API 呼び出し、SDK メソッド、および応答オブジェクトは、チーム名簿のフェッチと同じです。 唯一の違いは、.conversationId
teamId
チーム内のチャネルの一覧を取得する
ボットは、チーム内のチャネルの一覧を照会できます。
注意
- ローカライズを許可するために、既定の一般チャネル
null
の名前が返されます。 - General チャネルのチャネル ID は、常にチーム ID と一致します。
REST API の例
値をエンドポイントとして使用してserviceUrl
、/teams/{teamId}/conversations/
GET 要求を直接発行します。
唯一のソース teamId
は、チーム コンテキストからのメッセージです。 メッセージは、ユーザーからのメッセージか、ボットがチームに追加するときに受信するメッセージのいずれかです。 詳細については、「チームに 追加されたボットまたはユーザー」を参照してください。
注意
値 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"
}]
}
.NET の例
次の例では、FetchChannelList
ボット ビルダー SDK for .NET Teams拡張機能からの呼び出しを使用します。
ConversationList channels = client.GetTeamsConnectorClient().Teams.FetchChannelList(activity.GetChannelData<TeamsChannelData>().Team.Id);
Node.js例
次の例では、fetchChannelList
ボット ビルダー SDK Teams拡張機能からの呼び出しを使用Node.js。
var teamId = session.message.sourceEvent.team.id;
connector.fetchChannelList(
(session.message.address).serviceUrl,
teamId,
(err, result) => {
if (err) {
session.endDialog('There is an error');
}
else {
session.endDialog('%s', JSON.stringify(result));
}
}
);
ボット コンテキストで clientInfo を取得する
ボットのアクティビティ内で clientInfo をフェッチできます。 clientInfo には、次のプロパティが含まれます。
- Locale
- 国
- プラットフォーム
- タイムゾーン
JSON の例
[
{
"type": "clientInfo",
"locale": "en-US",
"country": "US",
"platform": "Windows",
"timezone": "Asia/Calcutta"
}
]
C#例
var connector = new ConnectorClient(new Uri(context.Activity.ServiceUrl));
{
var clientinfo = context.Activity.Entities[0];
await context.PostAsync($"ClientInfo: clientinfo ");
}