【问题标题】:Reply to message and wait for adaptive card action回复消息并等待自适应卡操作
【发布时间】:2019-03-28 06:26:45
【问题描述】:

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

更新消息

您的消息不是数据的静态快照,而是您的机器人可以在发送消息后动态更新消息。您可以将动态消息更新用于轮询更新、按下按钮后修改可用操作或任何其他异步状态更改等场景。

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

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 并让机器人等待Action.Submit 响应?

【问题讨论】:

  • 我有几个问题。 AddAdaptiveCard() 是你自己做的扩展方法吗?另外,你为什么在代码的开头而不是结尾调用context.Wait()
  • 1.是的,但这只是 v4 SDK 的代码副本。这肯定是不是的问题。 2. 在哪里进行调用并不重要,因为它只是某种“标记”,告诉框架在它返回时调用什么委托。
  • 所以您使用的是 V4 而不是 V3?
  • 正确。 Microsoft.Bot.Builder 版本="3.16.1.38846" Microsoft.Bot.Connector 版本="3.16.1.38846" Microsoft.Bot.Connector.Teams 版本="0.9.0"
  • 听起来像 V3 而不是 V4

标签: c# botframework microsoft-teams


【解决方案1】:

您的机器人收到的用户按下提交按钮生成的活动消息将有一个replyToId 字段 - 这是您要更新的消息的 ID。

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

【讨论】:

  • 太棒了!谢谢比尔。并且喜欢你头像图片中的西装。 ;)
  • @bill-bliss-msft 此属性是否仍然可用?至少使用模拟器 (v4),我在来自自适应卡的回发消息中看不到任何 replyToId 字段。
猜你喜欢
  • 2023-01-29
  • 1970-01-01
  • 2019-10-24
  • 2020-01-08
  • 2020-08-16
  • 1970-01-01
  • 2019-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多