すべての会話メッセージを受信する

もともとMicrosoft Teams Graph API 用に開発されたリソース固有の同意 (RSC) アクセス許可モデルは、ボットのシナリオに拡張されています。 RSC を使用すると、会話の所有者は、ボットが @mentionedされることなく、標準チャネルとチャットですべてのユーザー メッセージを受信することに同意できます。 これは、アプリ マニフェスト (以前は Teams アプリ マニフェストと呼ばれる) で ChannelMessage.Read.Group または ChatMessage.Read.Chat アクセス許可文字列を指定することで有効にすることができます。 会話の所有者は、アプリの更新プログラムが発行された後、アプリのインストールまたはアップグレード プロセス中に同意を付与できます。 アプリとテナント内で RSC を有効にする方法の詳細については、「 リソース固有の同意」を参照してください。

注:

RSC とのすべての会話メッセージを受信するボットは、 Government Community Cloud (GCC)、GCC-High、および国防総省 (DOD) 環境でサポートされています。

ボットがすべてのチャネルまたはチャット メッセージを受信できるようにする

ChannelMessage.Read.GroupChatMessage.Read.Chat RSC のアクセス許可がボットに拡張されています。 ユーザーの同意とアプリのインストールでは、次のアクセス許可が付与されます。

  • 指定したグラフ アプリケーションがチャネルとチャット内のすべてのメッセージをそれぞれ取得できるようにします。
  • アプリ マニフェストで定義されているボットを有効にすると、アクセス許可が適用される関連コンテキストで @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 メッセージ データにアクセスする必要があるサービスでは、チャネルとチャットでアーカイブされたデータへのアクセスを提供する Graph API を使用する必要があります。 ボットは、 ChannelMessage.Read.Group を使用し、RSC アクセス許可を適切に ChatMessage.Read.Chat して、ユーザーが Microsoft Teams Store の承認を渡す魅力的なエクスペリエンスを構築および強化する必要があります。 アプリの説明には、ボットが読み取るデータの使用方法を含める必要があります。

  • と RSC のアクセス許可は、大量の顧客データを抽出するためにボットによって使用されない場合があります。
  • ボットが ChatMessage.Read.Chat を使用してチャット内のすべてのメッセージを受信する機能は、チャットへの再インストールまたは新規インストール後にのみ有効になります。
  • Graph シナリオに対して ChatMessage.Read.Chat RSC アクセス許可を使用しているアプリがある場合は、 会話でカスタム アプリをアップロード する手順に従ってアプリをテストし、機能が 一般公開される前にアプリを変更します。 ボットがすべてのチャット メッセージを受信したくない場合は、次の コード スニペットを実装します。 アクションが実行されない場合、ボットは新しいインストール後にすべてのメッセージを受信します。

アプリ マニフェストの更新

ボットがすべての会話メッセージを受信するには、アプリ マニフェストの authorization.permissions.resourceSpecific プロパティに関連する RSC アクセス許可文字列を指定する必要があります。 詳細については、「 アプリ マニフェスト スキーマ」を参照してください。

アプリ マニフェストで行う変更を示すスクリーンショット。

次のコードは、アプリ マニフェストの例を示しています。

  • webApplicationInfo.id: Microsoft Entra アプリ ID。 アプリ ID は、ボット ID と同じにすることができます。
  • webApplicationInfo.resource: 任意の文字列。 リソース フィールドには RSC での操作はありませんが、エラー応答を回避するために値を追加する必要があります。
  • authorization.permissions.resourceSpecific: ChannelMessage.Read.GroupChatMessage.Read.Chat の両方が指定されているアプリの RSC アクセス許可。 詳細については、「リソース固有のアクセス許可」を参照してください。

次のコードは、アプリ マニフェスト バージョン 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 を使用してすべてのチャネル メッセージを受信する方法を示しています。 表示 表示 表示

関連項目