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

使用Bot Framework开发Teams Bot:更新/删除主动消息遇方法签名问题

解决Bot Framework 4.18.1中更新/删除历史主动消息的问题

你遇到的核心问题是:4.18.1版本的UpdateActivityAsync/DeleteActivityAsync必须传入ITurnContext,但要操作很久之前发送的主动消息,没有当前会话的TurnContext。以下是可行的解决步骤:

1. 发送主动消息时保存关键信息

发送初始主动消息时,必须留存以下两个核心数据,后续更新/删除依赖它们:

  • 消息的ActivityId(发送消息返回的ResourceResponse.Id)
  • 会话参考ConversationReference(可从初始TurnContext或创建会话的上下文获取)

示例代码(发送时保存):

// 假设已获取目标会话的conversationReference
var response = await turnContext.Adapter.CreateConversationAsync(
    botAppId,
    serviceUrl,
    credentials,
    conversationParameters,
    async (context, token) =>
    {
        var initActivity = MessageFactory.Text("初始主动消息");
        var sendResult = await context.SendActivityAsync(initActivity, token);
        // 将sendResult.Id和conversationReference存入数据库/缓存
        SaveToStorage(sendResult.Id, conversationReference);
        return sendResult;
    },
    cancellationToken);

2. 通过临时TurnContext执行更新/删除

当需要操作历史消息时,利用保存的ConversationReference创建临时TurnContext,再调用对应方法:

// 从存储中取出留存的conversationReference和activityId
var savedReference = GetFromStorage().ConversationReference;
var targetActivityId = GetFromStorage().ActivityId;

// 使用Adapter创建临时TurnContext并执行操作
await adapter.ContinueConversationAsync(
    botAppId,
    savedReference,
    async (tempContext, token) =>
    {
        // 更新消息示例
        var updateActivity = MessageFactory.Text("更新后的主动消息内容");
        updateActivity.Id = targetActivityId;
        await tempContext.UpdateActivityAsync(updateActivity, token);

        // 删除消息示例(二选一)
        // await tempContext.DeleteActivityAsync(targetActivityId, token);
    },
    cancellationToken);

3. 关键注意事项

  • 权限验证:确保Bot拥有Teams对应资源的操作权限(如TeamSettings.ReadWrite),避免操作被拒绝。
  • 完整保存ConversationReference:必须包含ServiceUrl、ChannelId、User、Bot、Conversation等所有字段,缺一不可。
  • 版本适配:4.18.1属于Bot Framework v4稳定版,必须通过ContinueConversationAsync创建临时上下文,不要直接实例化TurnContext,否则会出现内部状态异常。

版本差异说明

你看到的示例代码大概率是针对Bot Framework v5+版本,这些版本调整了方法签名,无需传入TurnContext,直接通过Adapter和会话参考操作。但4.18.1作为v4版本,必须依赖TurnContext执行更新/删除,因此上述ContinueConversationAsync的方式是唯一合规的实现路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:33:17