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

もともと Microsoft Teams Graph API 用に開発されたリソース固有の同意 (RSC) アクセス許可モデルは、ボットのシナリオに拡張されています。 RSC を使用すると、会話の所有者はボットが標準チャネルとチャット @mentioned内のすべてのユーザー メッセージを受信することに同意できます。 これは、アプリ マニフェスト (以前は Teams アプリ マニフェストと呼ばれる) で または ChatMessage.Read.Chat アクセス許可の文字列を指定ChannelMessage.Read.Groupすることで有効にすることができます。 会話の所有者は、アプリの更新プログラムが発行された後、アプリのインストールまたはアップグレード プロセス中に同意を付与できます。 アプリとテナント内で 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 を使用する必要があります。 ボットは、 と ChatMessage.Read.Chat RSC のアクセス許可をChannelMessage.Read.Group適切に使用して、ユーザーが Microsoft Teams Store の承認に合格するための魅力的なエクスペリエンスを構築および強化する必要があります。 アプリの説明には、ボットが読み取るデータの使用方法を含める必要があります。

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

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

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

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

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

  • 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 を使用してすべてのチャネル メッセージを受信する方法を示しています @mentioned。 表示 表示 表示

関連項目