繁体   English   中英

Teams Bot Adaptive Card action.Submit 返回 undefined 但在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM