C# 回复消息并等待自适应卡操作

C# 回复消息并等待自适应卡操作,c#,botframework,microsoft-teams,C#,Botframework,Microsoft Teams,团队开发文档中的对话页面列出了我正在尝试实现的场景: 更新消息 您的bot可以在发送消息后在线动态更新消息,而不是让消息成为数据的静态快照。您可以对轮询更新、按下按钮后修改可用操作或任何其他异步状态更改等场景使用动态消息更新 在我的代码中,我创建了一条消息并附加了一张自适应卡 var cardReply = activity.CreateReply(); cardReply.AddAdaptiveCard(card); 如果我使用PostAsync回复用户,则我不会获得更新回复所需的Respo

团队开发文档中的对话页面列出了我正在尝试实现的场景:

更新消息 您的bot可以在发送消息后在线动态更新消息,而不是让消息成为数据的静态快照。您可以对轮询更新、按下按钮后修改可用操作或任何其他异步状态更改等场景使用动态消息更新

在我的代码中,我创建了一条消息并附加了一张自适应卡

var cardReply = activity.CreateReply();
cardReply.AddAdaptiveCard(card);
如果我使用
PostAsync
回复用户,则我不会获得更新回复所需的
ResponseResourceId

// PostAsync return Task, no ResourceResponse
await context.PostAsync(cardReply);

// OnDataItemInput is called when Action.Submit is triggered
context.Wait(this.OnDataItemInput);
相反,如果我回复活动,则不调用继续委托(
context.Wait
)。执行的延续是堆栈上的上一个对话框

// OnDataItemInput is never called 
context.Wait(this.OnDataItemInput);

ConnectorClient connector = 
    new ConnectorClient(new Uri(activity.ServiceUrl));

var cardReplyResource = await connector
    .Conversations
    .ReplyToActivityAsync(cardReply);

如何发送带有输入项的
AdaptiveCard
,并让bot等待
操作。提交
响应?

用户按提交按钮生成的活动消息(由bot接收)将有一个
replyToId
字段——这是您要更新的消息的ID


如果您需要一种方法来区分这些活动消息与其他活动消息,您可以给Action.Submit按钮一个
id
或使用其
数据
字段-活动的
对象将告诉您这一点。

我有几个问题。
AddAdaptiveCard()
是您自己创建的扩展方法吗?另外,为什么要在该代码的开头而不是结尾调用
context.Wait()
。是的,但它只是v4 SDK代码的副本。这肯定不是问题所在。2.调用在哪里并不重要,因为它只是一个“标记”,告诉框架当它返回时调用哪个委托。所以您使用的是V4而不是V3?正确。Microsoft.Bot.Builder version=“3.16.1.38846”Microsoft.Bot.Connector version=“3.16.1.38846”Microsoft.Bot.Connector.Team version=“0.9.0”听起来像V3,而不是V4!谢谢你,比尔。喜欢你头像照片中的套装。;)@bill bliss msft该物业是否仍然可用?至少使用emulator(v4),我在自适应卡的回发消息中没有看到任何
replyToId
字段。