如何删除或更新之前使用 Teams 机器人发送的主动消息?

问题描述 投票:0回答:1

我正在处理一项业务需求,涉及使用 Bot Framework 更新或删除发送到 Microsoft Teams 的主动消息的能力。更新或删除可能会在初始消息发送后很长时间内发生。我在 Stack Overflow 上遇到了一个类似的问题,并通过示例代码进行了回答。但是,在尝试实现提供的解决方案时,我遇到了与 UpdateActivityAsync 方法签名相关的障碍。

在示例代码中,方法的签名与我的案例中支持的不同。具体来说,我的例子中的签名需要 ITurnContext 的实例作为输入,这与示例代码中建议的签名不同。

这是签名:

公共覆盖异步任务UpdateActivityAsync(ITurnContextturnContext,Activity活动,CancellationTokencancelToken)

注意:我正在使用 Microsoft.Bot.Builder.Integration.AspNet.Core 版本 4.18.1

我非常感谢任何解决此问题的指导或帮助。如果有人有使用 Bot Framework 在 Teams 中更新或删除主动消息的经验,那么您的见解将非常宝贵。

botframework proactive-message
1个回答
0
投票
我已成功解决该问题并使其正常运行。似乎有一个称为消息 Id 的关键元素,它不同于活动 Id 和对话 Id。消息 Id 是从“ResourceResponse.Id”获取的,该 ID 由“turnContext.SendActivityAsync()”方法返回。在主动消息传输之后,必须保留两条信息(将它们存储在某处)。例如,当您稍后需要主动更新或删除之前发送的消息时,您可以调用下面概述的逻辑。

public async Task UpdateProactiveMessageAsync(string messageId, string conversationId, string messageText, CancellationToken cancellationToken) { var conversationReference = new ConversationReference { Conversation = new ConversationAccount { Id = conversationId, }, ServiceUrl = BotServiceUrl, }; string sentBy = nameof(UpdateProactiveMessageAsync); var message = MessageFactory.Text(messageText); message.Id = messageId; await _adapter.ContinueConversationAsync(_botAppId, conversationReference, async (turnContext, token) => { await turnContext.UpdateActivityAsync(message, cancellationToken); }, cancellationToken); } public async Task DeleteProactiveMessageAsync(string messageId, string conversationId, CancellationToken cancellationToken) { var conversationReference = new ConversationReference { Conversation = new ConversationAccount { Id = conversationId, }, ServiceUrl = BotServiceUrl, }; await _adapter.ContinueConversationAsync(_botAppId, conversationReference, async (turnContext, token) => { await turnContext.DeleteActivityAsync(messageId, cancellationToken); }, cancellationToken); }
    
© www.soinside.com 2019 - 2024. All rights reserved.