如何在Teams应用安装后获取历史参与者对话信息及BotFramework SDK方案
Teams Bot 获取历史对话信息方案及SDK实现方法
核心思路
Teams 不会主动向已安装的 Bot 推送历史对话数据,需通过主动调用 API 拉取,主要依赖 BotFramework SDK 的对话历史接口 或 Microsoft Graph API,前提是配置好对应权限并完成身份验证。
步骤1:配置必要权限
- 在 Azure AD 中为 Bot 注册应用,添加以下应用权限(根据需求选择):
Chat.Read.All:允许读取所有一对一/群聊对话内容Chat.ReadBasic.All:仅读取对话基本信息(不含消息内容)ChannelMessage.Read.All:读取团队频道内的历史消息
- 完成权限授予(需管理员同意)
步骤2:获取目标对话ID
对话ID是拉取历史的关键标识,可通过两种方式获取:
- 当 Bot 被添加到对话时,
ConversationUpdate事件的 payload 中会包含conversation.id字段,可直接存储 - 通过 Graph API 调用
GET /me/chats(用户上下文)或GET /chats(应用权限),列出所有对话并筛选目标对话的id
步骤3:BotFramework SDK 实现方法(以 C# 为例)
使用 SDK 内置的 GetConversationHistoryAsync 方法拉取历史对话:
using Microsoft.Bot.Connector; using Microsoft.Bot.Connector.Authentication; using System.Threading.Tasks; public async Task GetChatHistory() { // 初始化 Bot 凭据 var appCredentials = new MicrosoftAppCredentials("<你的Bot App ID>", "<你的Bot App Secret>"); var botClient = new BotFrameworkHttpClient(appCredentials, new System.Net.Http.HttpClient()); // 目标对话ID和服务地址(可从ConversationUpdate事件或Graph API获取) string conversationId = "<目标对话ID>"; string serviceUrl = "<对话的ServiceUrl>"; // 配置历史查询参数 var queryParams = new TranscriptHistoryQuery { MaxCount = 50, // 最多拉取50条消息 StartTime = System.DateTimeOffset.UtcNow.AddDays(-30) // 拉取30天内的消息 }; // 调用接口获取历史对话 var transcript = await botClient.GetConversationHistoryAsync(serviceUrl, conversationId, queryParams); // 遍历处理历史消息 foreach (var activity in transcript.Activities) { // 处理消息内容,如activity.Text、activity.From等 } }
替代方案:使用 Microsoft Graph API
若需要更灵活的筛选或扩展能力,可直接调用 Graph API:
GET https://graph.microsoft.com/v1.0/chats/{chat-id}/messages?$top=50&$filter=createdDateTime ge 2024-01-01T00:00:00Z
在 SDK 中可通过 GraphServiceClient 实现,需注入已完成身份验证的客户端实例。
注意事项
- 历史消息拉取的范围受权限限制,需确保申请的权限与需求匹配
- ServiceUrl 需与对话所属的 Teams 区域一致,若不确定可通过 Graph API 获取对话详情
- 若拉取团队频道历史,需使用
GET /teams/{team-id}/channels/{channel-id}/messages接口
内容的提问来源于stack exchange,提问作者24K_gold
相关产品推荐
相关产品推荐

