Teams Bot Adaptive Card action.Submit returns 未定义但可在 Bot Emulator 中使用

Teams Bot Adaptive Card action.Submit returns undefined but works in Bot Emulator

我在使用 Teams Bot 自适应卡片操作提交时遇到问题,在测试 Bot Emulator 时它按预期工作,但是当它发布并在 Teams 对话中执行相同的操作时,操作提交 returns 未定义。 我尝试过自适应卡 1.0 版和 1.3 版,这两种情况下的问题都是一样的。 有人知道这个的解决方案吗?

“标准”action.submit 在 Teams 中不起作用。您需要在数据属性下添加一个 msteams 对象。我猜你使用的是

这样的标准定义
{
    "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 或非 Teams 卡片。例如:

if (context.activity.channelId == 'msteams') {
    var welcomeCard = CardHelper.GetMenuCardTeams();
} else {
    var welcomeCard = CardHelper.GetMenuCard();
}

如果您不使用助手来生成卡片,您可以在此处明确定义它们,但我建议您使用助手来保持整洁。这确实意味着您需要维护两个版本的卡片,但对我来说,确保跨渠道的体验一致是值得的。

另一个答案提供了一些有用的背景,但我认为它只适用于特定场景 - 我认为你在这里遇到的问题是你在 data 属性 ("My Action") Teams 不喜欢,但模拟器根本不介意。您可以在 this Microsoft blog post. You should instead be sending an actual object. I describe it in more detail in this answer: .

中查看更多相关信息

@billoverton 指的是一个特定的用例,您希望按钮的行为是,例如,实际上将消息作为响应放入文本流,以及 将其发送给您的机器人。如 here 所述,这些特定用例有多种选择,但如果您需要这种特定行为,它们是可选的。如果您很高兴用户单击按钮并简单地向您的机器人调用消息,则数据有效负载中不需要“msteams”部分。