Получение контекста для бота Microsoft Teams
Важно!
Эта статья основана на пакете SDK Bot Framework версии 3. Если вы ищете текущую документацию по пакету SDK версии 4.6 или более поздней, см. раздел Боты для бесед.
Бот может получить доступ к дополнительному контексту о команде или чате, например к профилю пользователя. Эти сведения можно использовать для расширения функциональных возможностей бота и обеспечения более персонализированного взаимодействия.
Примечание.
- Api ботов Microsoft Teams лучше всего доступны через наши расширения для пакета SDK Bot Builder.
- Для C# или .NET скачайте пакет NuGet Microsoft.Bot.Connector.Teams .
- Для Node.js разработки функции Bot Builder для Teams включены в пакет SDK Bot Framework версии 4.6.
Получение списка команды
Бот может запрашивать список участников команды и их базовые профили. Основные профили включают идентификаторы пользователей Teams и сведения Microsoft Entra, такие как имя и идентификатор объекта. Эти сведения можно использовать для сопоставления удостоверений пользователей. Например, проверьте, является ли пользователь, вошедший на вкладку с помощью учетных данных Microsoft Entra, членом команды.
Пример REST API
Непосредственно выполните запрос GET для /conversations/{teamId}/members/
, используя serviceUrl
значение в качестве конечной точки.
Объект teamId
можно найти в объекте channeldata
полезных данных действия, получаемых ботом в следующих сценариях:
- Когда пользователь отправляет сообщения или взаимодействует с ботом в контексте команды. Дополнительные сведения см. в разделе Получение сообщений.
- При добавлении в команду нового пользователя или бота. Дополнительные сведения см. в статье Бот или пользователь, добавленный в команду.
Примечание.
- Всегда используйте идентификатор команды при вызове API.
- Значение
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
с помощью Team.Id
, чтобы вернуть список идентификаторов пользователей.
Вызовите GetConversationMembersAsync
, чтобы получить userRole
свойство, возвращающее значение от имени пользователя.
// 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
, чтобы разрешить локализацию. - Идентификатор канала для общего канала всегда совпадает с идентификатором команды.
Пример REST API
Непосредственно выполните запрос GET для /teams/{teamId}/conversations/
, используя serviceUrl
значение в качестве конечной точки.
Единственным источником является 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
вызов из расширений Teams для пакета SDK Bot Builder для .NET:
ConversationList channels = client.GetTeamsConnectorClient().Teams.FetchChannelList(activity.GetChannelData<TeamsChannelData>().Team.Id);
Пример Node.js
В следующем примере используется fetchChannelList
вызов из расширений Teams для пакета SDK Bot Builder для 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 ");
}
Дополнительные ресурсы
Platform Docs