[英]Adaptive Card returns undefined in Microsoft Teams but works well in bot emulator
[英]Teams Bot Adaptive Card action.Submit returns undefined but works in Bot Emulator
我遇到了 Teams Bot 自适应卡片操作提交问题,在测试 Bot Emulator 时它按预期工作,但是当它发布并在 Teams 对话中执行相同操作时,操作提交返回未定义。 我尝试过使用自适应卡 1.0 版和 1.3 版,两种情况下的问题都是一样的。 有谁知道这个的解决方案?
另一个答案提供了一些有用的背景,但我认为它仅适用于特定场景 - 我认为您在这里遇到的问题是您在 Teams 没有的data
属性(“我的操作”)中发送原始字符串值'不喜欢,但模拟器根本不介意。 您可以在此 Microsoft 博客文章中看到有关该内容的更多信息。 相反,您应该发送实际的 object。 我在这个答案中更详细地描述了它: QnA Maker Bot AdaptiveCards: how to add Data object in C# 。
@billoverton 指的是一个特定的用例,您希望按钮行为是,例如,实际上将消息放入文本 stream作为响应,并将其发送到您的机器人。 如此处所述, 这些特定用例有多种选择,但如果您想要这种特定行为,它们是可选的。 如果您很高兴用户单击按钮并简单地将消息调用到您的机器人,则不需要数据有效负载中的“msteams”部分。
“标准” action.submit 在 Teams 中不起作用。 您需要在 data 属性下添加一个 msteams object。 我猜您使用的是标准定义,例如
{
"type": "ActionSet",
"actions": [
{
"type": "Action.Submit",
"title": "My Action",
"data": "My Action"
}
]
}
对于 Teams,它需要如下所示:
{
"type": "ActionSet",
"actions": [
{
"type": "Action.Submit",
"title": "My Action",
"data": {
"msteams": {
"type": "imBack",
"value": "My Action"
}
}
}
]
}
当然,当你这样做时,它不会在模拟器或任何非团队频道中工作。 我已经看到有些人通过提取值来更新他们的 onMessage 处理程序来解决这个问题,因此单个卡定义可以用于两个通道,但是它使选择成为其中一个通道的反向通道事件(不记得它是否是web 或团队)这不是我想要的体验。 因此,我只是根据频道有条件地显示 Teams 或非 Teams 卡片。 例如:
if (context.activity.channelId == 'msteams') {
var welcomeCard = CardHelper.GetMenuCardTeams();
} else {
var welcomeCard = CardHelper.GetMenuCard();
}
如果您没有使用助手来生成卡片,您可以在此处明确定义它们,尽管我建议使用助手来保持清洁。 这确实意味着您需要维护两个版本的卡片,但对我来说,确保跨渠道的一致体验是值得的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.