【问题标题】:Want to display the text of the button clicked in adaptive cards想要显示在自适应卡片中单击的按钮的文本
【发布时间】:2021-01-04 21:10:53
【问题描述】:

我创建了一个 Teams 机器人,并且有几个提交操作按钮。 单击这些按钮时,我想让用户知道该按钮已被单击。 我正在使用自适应卡片并提交操作。

card.Actions.Add(new AdaptiveSubmitAction()
            {
                Title = item.Key,
                Data = item.Value,
                DataJson = "{\"Type\": \"Sort\"}"

            });

单击“排序”按钮后,我希望机器人回发“排序”。

这就是我在团队中的看法

提前致谢

【问题讨论】:

    标签: botframework microsoft-teams adaptive-cards


    【解决方案1】:

    可以使用特殊的“msteams”有效负载并指定“messageBack”或“imBack”作为消息类型来执行此操作,类似于:

    {
      "type": "Action.Submit",
      "title": "Click me for messageBack",
      "data": {
        "msteams": {
            "type": "messageBack",
            "displayText": "I clicked this button",
            "text": "text to bots",
            "value": "{\"bfKey\": \"bfVal\", \"conflictKey\": \"from value\"}"
        }
      }
    }
    

    您可以阅读更多关于它的信息here

    因为您使用的是 C#,所以您需要一个实际的类来表示它,因此您可以执行以下操作:

    public class msteams
    {
       public string type {get; set;} = "messageBack";
       public string displayText {get; set;}
       public string text {get; set;}
       public string value {get; set;}
    }
    

    然后你可以这样设置:

    card.Actions.Add(new AdaptiveSubmitAction()
                {
                    Title = item.Key,
                    Data = new msTeams() { displayText = "...", ... }
                });
    

    显然,您可以使用属性来更改类的名称、属性名称等。对于更简单的方法,您可以只使用“imBack”选项,我在下面也用属性包装了它:

        public class AdaptiveCardImBackButton
        {
            [JsonProperty("type")]
            public string Type { get; set; } = "imBack";
    
            [JsonProperty("value")]
            public string Value { get; set; }
        }
    

    然后我再次包装它,让它序列化外部“msteams”属性,如下所示:

     public class AdaptiveCardImBackButtonContainer
        {
            [JsonProperty("msteams")]
            public AdaptiveCardImBackButton AdaptiveCardImBackButton { get; private set; }
    
            public AdaptiveCardImBackButtonContainer(string value)
            {
                AdaptiveCardImBackButton = new AdaptiveCardImBackButton() { Value = value };
            }
        }
    

    您的代码中的最终用法非常简单:

                card.Actions.Add(new AdaptiveSubmitAction()
                {
                    Title = "sort",
                    Data = new AdaptiveCardImBackButtonContainer("sort")
                });
    

    【讨论】:

    • @Elma Sarah Daniel,这能回答你的问题吗?
    • @Abhijit-MSFT,不,它对我不起作用。
    • @hilton giesenow,不,我仍然看不到按钮文本。我已使用 Teams 频道中的图片更新了我的问题。
    • 我已经尝试创建 msteams 类和 card.Actions.Add(new AdaptiveSubmitAction() { Title = item.Key, Data = new msTeams() { displayText = "...", ... } }); 但我仍然得到相同的结果(我没有收到回发文本)
    • 请尝试使用我更新的代码+类。如果序列化结果不完全正确,则会被忽略(例如,您看起来像“msTeams”而不是“msteams”)
    猜你喜欢
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2020-03-29
    • 2020-01-14
    • 1970-01-01
    相关资源
    最近更新 更多