使用机器人框架模拟器 (v4) 更新已发送的自适应卡片对我不起作用



我尝试更新已发送的消息/自适应卡…或多或少地将已发送的适应卡与另一张交换。因此,我使用UpdateActivityAsync()函数。在文档(https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/update-and-delete-bot-messages?tabs=dotnet)中,更新已发送的消息或更新卡片的建议方法如下:

要更新现有消息,传递一个新的Activity对象的UpdateActivityAsync方法的现有活动IDTurnContext类。有关更多信息,请参见TurnContextClass。

var newActivity = MessageFactory.Text("The new text for the activity");
newActivity.Id = activityId; await
turnContext.UpdateActivityAsync(newActivity, cancellationToken);

要更新按钮选择上的现有卡片,传递一个新的Activity对象,将更新的卡和ReplyToId作为活动IDTurnContext类的UpdateActivityAsync方法看到TurnContextClass .

var activity = MessageFactory.Attachment(card.ToAttachment());
activity.Id = turnContext.Activity.ReplyToId; await
turnContext.UpdateActivityAsync(activity, cancellationToken);

这正是我想做的。在OnMembersAddedAsync()函数中,我发送包含特定卡片的消息。相应的消息/活动id保存在类成员_msgID中。然后,在用户按下该卡上的提交按钮后,调用OnMessageActivityAsync()函数并在其中创建一个新的消息/活动。将新消息的id设置为存储的旧消息id (_msgId)并调用更新函数,什么也没有发生…甚至连错误信息"机器人遇到错误或bug"都没有。左右…

private static string _msgID = "";
protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
var cardAttachment = CreateAdaptiveCardAttachment(Path.Combine(".", "Resources", "FeelingsCard.json"));
var oldActivity = MessageFactory.Attachment(cardAttachment);
await turnContext.SendActivityAsync(oldActivity, cancellationToken);
_msgID = oldActivity.Id;
}
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
var newActivity = MessageFactory.Attachment(CreateAdaptiveCardAttachment(Path.Combine(".", "Resources", "EmotionsCard.json")));
newActivity.Id = _msgID;

await turnContext.UpdateActivityAsync(newActivity, cancellationToken);
}
private static Attachment CreateAdaptiveCardAttachment(string filePath)
{
var adaptiveCardJson = File.ReadAllText(filePath);
var adaptiveCardAttachment = new Attachment()
{
ContentType = "application/vnd.microsoft.card.adaptive",
Content = JsonConvert.DeserializeObject(adaptiveCardJson),
};
return adaptiveCardAttachment;
}

我做错了什么,还是我错过了什么?

谢谢你的帮助!

模拟器是一个直线客户端。UpdateActivityAsync将在Teams上工作,但不能在Emulator (Webchat/direcline)上工作。

https://learn.microsoft.com/en - us/azure/bot service/bot -服务-渠道reference?view=azure - bot -服务- 4.0 # message-update

测试;你必须使用Teams和Ngrok。

最新更新