Получение контекста Teams для вашего бота

Важно!

Примеры кода в этом разделе основаны на версии 4.6 и более поздних версиях пакета SDK Bot Framework. Если вы ищете документацию по более ранним версиям, см. раздел пакет SDK для ботов версии 3 в папке Устаревшие пакеты SDK документации.

Бот может получить доступ к дополнительным контекстным данным о команде или чате, где он установлен. Эти сведения можно использовать для расширения функциональных возможностей бота и его персонализации.

Получение состава или профиля

Бот может запрашивать список участников и их базовые профили пользователей, включая идентификаторы пользователей Teams и Microsoft Entra сведения, такие как имя и objectId. Эти сведения можно использовать для сопоставления удостоверений пользователей. Например, чтобы проверка, является ли пользователь, вошедший на вкладку с помощью Microsoft Entra учетных данных, членом команды. Для получения участников беседы минимальный или максимальный размер страницы зависит от реализации. Размер страницы менее 50 обрабатывается как 50, а размер больше 500 ограничивается 500. Даже если вы используете нестраничную версию, она ненадежна в больших командах и не должна использоваться. Дополнительные сведения см. в статье об изменениях API ботов Teams для получения сведений участников команды или чата.

Примечание.

  • Разбиение на страницы доступно в команде и канале.
  • Разбиение на страницы в чатах не поддерживается. Для чатов всегда возвращается весь список.

В следующем примере кода для получения списка используется выгружаемая конечная точка:

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);
     }
}

После получения состава или профиля вы можете получить сведения об одном участнике. В настоящее время для получения сведений для одного или нескольких участников чата или команды используйте API-интерфейсы бота Microsoft Teams TeamsInfo.GetMembersAsync для C# или TeamsInfo.getMembers для API-интерфейсов TypeScript.

Получение сведений об одном элементе

Вы также можете получить сведения о конкретном пользователе, используя его идентификатор пользователя Teams, имя участника-пользователя или идентификатор объекта Microsoft Entra.

Следующий пример кода используется для получения сведений об одном элементе:

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);
    }
}

После получения сведений об одном участнике можно получить сведения о команде. В настоящее время для получения сведений для команды используйте API-интерфейсы бота Teams TeamsInfo.GetMemberDetailsAsync для C# или TeamsInfo.getTeamDetails для TypeScript.

Получение сведений о команде

При установке в команде бот может запрашивать метаданные об этой команде, включая идентификатор группы Microsoft Entra.

Следующий пример кода используется для получения сведений о команде:

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.");
        }
    }
}

После получения сведений о команде можно получить список каналов в команде. В настоящее время для получения сведений для списка каналов в команде используйте API-интерфейсы бота Teams TeamsInfo.GetTeamChannelsAsync для C# или TeamsInfo.getTeamChannels для API-интерфейсов TypeScript.

Получение списка каналов в команде

Бот может запрашивать список каналов в команде.

Примечание.

  • Имя общего канала по умолчанию возвращается в качестве null, чтобы разрешить локализацию.
  • Идентификатор канала для общего канала всегда совпадает с идентификатором команды.

Следующий пример кода используется для получения списка каналов в команде:

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

Пример кода

Полные рабочие примеры, демонстрирующие эту функциональность, см. в следующих примерах Teams для Bot Framework:

Название примера Описание .NET Node.js Python Манифест
Бот для беседы в Teams В этом примере показано, как использовать различные события бесед бота, доступные в bot framework версии 4 для личных и командных область. Просмотр Просмотр Просмотр Просмотр
Проверка подлинности с помощью OAuthPrompt В этом примере показана проверка подлинности и базовый обмен сообщениями в Bot Framework версии 4. Просмотр Просмотр Просмотр Просмотр
Отправка файла Teams В этом примере показано, как использовать файлы с ботом в беседе один к одному. Просмотр Просмотр Просмотр Просмотр
Dialog (называется модулем задач в TeamsJS версии 1.x) В этом примере показано, как использовать диалоговое окно и значения из карточек в нем для расширения сообщений. Просмотр Просмотр Просмотр View
Запуск новой цепочки в канале В этом примере показано, как использовать новый поток в канале с помощью бота. Просмотр Просмотр Просмотр Просмотр
Локализация приложений Teams В этом примере показано, как использовать локализацию приложений Teams с помощью бота и вкладки. Просмотр Просмотр Н/Д Просмотр

Следующий этап

См. также