Поделиться через


Получение всех сообщений беседы

Модель разрешений для конкретного ресурса (RSC), изначально разработанная для API Microsoft Teams Graph, распространяется на сценарии ботов. С помощью RSC владельцы бесед могут предоставить боту согласие на получение всех сообщений пользователей в стандартных каналах и чатах без использования @mentioned. Это можно включить, указав ChannelMessage.Read.Group строки разрешений или ChatMessage.Read.Chat в манифесте приложения (ранее — манифест приложения Teams). Владельцы бесед могут предоставить согласие во время установки или обновления приложения после публикации обновлений приложения. Дополнительные сведения о включении RSC для приложения и внутри клиента см. в разделе Согласие для конкретного ресурса.

Примечание.

Боты, получающие все сообщения беседы с помощью RSC, поддерживаются в средах Сообщества для государственных организаций (GCC), GCC-High и Министерства обороны (DOD).

Разрешить ботам получать все сообщения канала или чата

Разрешения ChannelMessage.Read.Group RSC и ChatMessage.Read.Chat распространяются на ботов. При согласии пользователя и установке приложения эти разрешения:

  • Разрешите указанному приложению графа получать все сообщения в каналах и чатах соответственно.
  • Разрешите боту, определенному в манифесте приложения, получать все сообщения бесед, не находясь @mentioned в соответствующих контекстах, где применяются разрешения.

Фильтрация при упоминании сообщений

// When ChannelMessage.Read.Group or ChatMessage.Read.Chat RSC is in the app manifest, this method is called even when bot is not @mentioned.
// This code snippet allows the bot to ignore all messages that do not @mention the bot.
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
        // Ignore the message if bot was not mentioned. 
        // Remove this if block to process all messages received by the bot.
        if (!turnContext.Activity.GetMentions().Any(mention => mention.Mentioned.Id.Equals(turnContext.Activity.Recipient.Id, StringComparison.OrdinalIgnoreCase)))
        {
            return;
        }
        // Sends an activity to the sender of the incoming activity.
        await turnContext.SendActivityAsync(MessageFactory.Text("Using RSC the bot can receive messages across channels or chats in team without being @mentioned."));
}

Разрешение RSC

Службы, которым требуется доступ ко всем данным сообщений Teams, должны использовать API Graph, которые предоставляют доступ к архивным данным в каналах и чатах. Боты должны использовать ChannelMessage.Read.Group разрешение И ChatMessage.Read.Chat RSC соответствующим образом, чтобы создать и улучшить привлекательный интерфейс для пользователей, чтобы пройти утверждение Microsoft Teams Store. В описании приложения должно быть описано, как бот использует данные, которые он считывает:

  • Разрешения ChannelMessage.Read.Group RSC и ChatMessage.Read.Chat RSC не могут использоваться ботами для извлечения больших объемов данных клиентов.
  • Возможность для ботов получать все сообщения в чатах с помощью ChatMessage.Read.Chat включена только после повторной установки или новой установки в чате.
  • Если у вас есть приложение, использующее ChatMessage.Read.Chat разрешение RSC для сценариев Graph, протестируйте приложение, выполнив действия, описанные в статье Отправка пользовательского приложения в беседе и изменение приложения, прежде чем функция станет общедоступной. Если вы не хотите, чтобы бот получал все сообщения чата, реализуйте следующий фрагмент кода. Если никаких действий не выполняется, бот получает все сообщения после новых установок.

Обновление манифеста приложения

Чтобы бот получал все сообщения беседы, соответствующие строки разрешений RSC должны быть указаны в свойстве authorization.permissions.resourceSpecific манифеста приложения. Дополнительные сведения см. в разделе Схема манифеста приложения.

Снимок экрана: изменения, внесенные в манифест приложения.

В следующем коде приведен пример манифеста приложения.

  • webApplicationInfo.id: идентификатор приложения Microsoft Entra. Идентификатор приложения может совпадать с идентификатором бота.
  • webApplicationInfo.resource: любая строка. Поле ресурса не имеет операции в RSC, но его необходимо добавить со значением, чтобы избежать ответа на ошибку.
  • authorization.permissions.resourceSpecific: разрешения RSC для приложения с указанными или обоими ChannelMessage.Read.Group параметрами.ChatMessage.Read.Chat Подробнее см. в статье Разрешения для определенных ресурсов.

В следующем коде приведен пример манифеста приложения версии 1.12 или более поздней:

{
    "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.12/MicrosoftTeams.schema.json",
    "manifestVersion": "1.12",
    "version": "1.0.0",
    "id": "8239c8f3-ed78-4512-933e-babfd28856f1",
    "packageName": "com.contoso.rscechobot",
    "developer": {
        "name": "Contoso",
        "websiteUrl": "https://www.contoso.com",
        "privacyUrl": "https://www.contoso.com/privacy",
        "termsOfUseUrl": "https://www.contoso.com/tos"
    },
    "icons": {
        "color": "color.png",
        "outline": "outline.png"
    },
    "name": {
        "short": "RscEchoBot",
        "full": "Echo bot with RSC configured for all conversation messages"
    },
    "description": {
        "short": "Echo bot with RSC configured for all channel and chat messages",
        "full": "Echo bot configured with all channel and chat messages RSC permission in manifest"
    },
    "accentColor": "#FFFFFF",
    "staticTabs": [
        {
            "entityId": "conversations",
            "scopes": [
                "personal"
            ]
        },
        {
            "entityId": "about",
            "scopes": [
                "personal"
            ]
        }
    ],
    "webApplicationInfo": {
        "id": "07338883-af76-47b3-86e4-2603c50be638",
        "resource": "https://AnyString"
    },
    "authorization": {
        "permissions": {
            "resourceSpecific": [
                {
                    "type": "Application",
                    "name": "ChannelMessage.Read.Group"
                },
                {
                    "type": "Application",
                    "name": "ChatMessage.Read.Chat"
                }
            ]
        }
    },
    "bots": [
        {
            "botId": "07338883-af76-47b3-86e4-2603c50be638",
            "scopes": [
                "personal",
                "team",
                "groupchat"
            ],
            "supportsFiles": false,
            "isNotificationOnly": false
        }
    ],
    "permissions": [
        "identity",
        "messageTeamMembers"
    ],
    "validDomains": []
}

Отправка пользовательского приложения в беседе

Ниже приведены инструкции по отправке и проверке бота, который получает все сообщения канала в команде без @mentionedиспользования :

  1. Выберите или создайте команду.

  2. Выберите ●●● в левой области. Откроется раскрывающееся меню.

  3. Выберите Управление командой в раскрывающемся меню.

    Снимок экрана: параметр управления командой в приложении Teams.

  4. Выберите Приложения. Появится несколько приложений.

  5. Выберите Отправить пользовательское приложение в правом нижнем углу.

    Снимок экрана: параметр отправки пользовательского приложения.

  6. Выберите Открыть.

    Снимок экрана: диалоговое окно открытия для выбора пакета приложения.

  7. Нажмите Добавить во всплывающем окне со сведениями о приложении, чтобы добавить бота в выбранную команду.

    Снимок экрана: кнопка

  8. Выберите канал и введите сообщение в канале для своего бота.

    Бот получает сообщение без .@mentioned

    Снимок экрана: бот, получающий сообщение в канале.

Фрагменты кода

В следующем коде приведен пример разрешений RSC:


// Handle when a message is addressed to the bot.
// When rsc is enabled the method will be called even when bot is addressed without being @mentioned.
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
        // Sends an activity to the sender of the incoming activity.
         await turnContext.SendActivityAsync(MessageFactory.Text("Using RSC the bot can receive messages across channels or chats in team without being @mentioned."));
}

Пример кода

Название примера Описание .NET Node.js Манифест приложения
Сообщения каналов с разрешениями RSC В этом примере приложения показано, как бот может получать все сообщения канала с помощью RSC без использования @mentioned. Просмотр Просмотр Просмотр

Дополнительные ресурсы