You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除Microsoft Teams中仅通知型Bot发送的主动消息?

解决方案:删除Teams通知型Bot的主动消息

核心前提:提前存储关键数据

通知型Bot发送主动消息时不会自动留存对话上下文,所以必须在发送每条通知时记录以下信息,否则后续无法定位并删除消息:

  • 每条消息的Activity ID(调用发送消息接口后,返回结果中会包含该ID)
  • 对应的Conversation Reference(包含用户ID、会话ID、服务URL等核心信息,用于重建对话上下文)

可以将这些数据存储到数据库(如SQL、Cosmos DB)或缓存系统中,关联用户ID做统一管理。

具体实现步骤(.NET示例)

1. 发送通知时存储必要数据

发送主动消息后,捕获返回结果中的Activity ID,并将其与Conversation Reference一同保存:

// 假设已构建好conversationReference
var response = await turnContext.Adapter.CreateConversationAsync(
    conversationReference,
    async (context, token) =>
    {
        var activity = MessageFactory.Text("这是一条主动通知");
        var sendResponse = await context.SendActivityAsync(activity);
        // 将用户ID、消息Activity ID、对话引用存入数据库
        await SaveMessageRecordAsync(conversationReference.User.Id, sendResponse.Id, conversationReference);
        return Task.CompletedTask;
    },
    cancellationToken);

2. 批量删除所有用户的通知

从数据库中取出所有消息记录,通过保存的Conversation Reference重建对话上下文,再调用删除接口移除消息:

// 获取所有需要删除的消息记录
var messageRecords = await GetAllMessageRecordsAsync();
foreach (var record in messageRecords)
{
    // 用保存的对话引用创建临时上下文
    await turnContext.Adapter.ContinueConversationAsync(
        botAppId,
        record.ConversationReference,
        async (context, token) =>
        {
            // 根据Activity ID删除对应消息
            await context.DeleteActivityAsync(record.ActivityId, token);
            return Task.CompletedTask;
        },
        cancellationToken);
    // 删除后清理数据库中的对应记录
    await DeleteMessageRecordAsync(record.Id);
}

注意事项

  • 若发送通知时未存储上述数据,后续无法追溯并删除消息,这是实现的核心前提。
  • Bot默认拥有自己发送消息的删除权限,无需额外配置,但需确保Bot在对应会话范围内的身份有效。
  • 批量删除时建议加入限流或异步批量处理逻辑,避免因频繁调用接口触发Teams平台的限流机制。

内容的提问来源于stack exchange,提问作者santhosh mohan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 21:03:16