自适应卡提交操作

2024-01-10

我使用 JSON 格式生成了一张自适应卡,其中有两个按钮“提交”和“取消”,分别返回“messageBack”消息作为提交和取消。 我正在使用 C# 来访问回复,但我无法弄清楚如何从自适应卡访问回复。

我的json是

    {
      "type": "AdaptiveCard",
      "selectAction": {        
        "type": "Action.Submit"
      },
      "body": [
        {
          "type": "TextBlock",
          "horizontalAlignment": "Center",
          "size": "Large",
          "weight": "Bolder",
          "color": "Accent",
          "text": "Meeting Composer Create"
        },
        {
          "type": "ColumnSet",
          "columns": [
            {
              "type": "Column",
              "items": [
                {
                  "type": "TextBlock",
                  "horizontalAlignment": "Left",
                  "spacing": "Medium",
                  "size": "Medium",
                  "weight": "Bolder",
                  "color": "Accent",
                  "text": "Attendees:"
                 }
              ],
              "width": "stretch"
            },
            {
              "type": "Column",
              "items": [
                {
                  "type": "TextBlock",
                  "id": "attendeeVal",
                  "text": "a"
                }
              ],
              "width": "stretch"
            }
          ]
        },
        {
          "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "items": [
            {
              "type": "TextBlock",
              "size": "Medium",
              "weight": "Bolder",
              "color": "Accent",
              "text": "Subject:"
            }
          ],
          "width": "stretch"
        },
        {
          "type": "Column",
          "items": [
            {
              "type": "TextBlock",
              "id": "subVal",
              "text": "meeting"
            }
          ],
          "width": "stretch"
        }
      ]
    },
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "items": [
            {
              "type": "TextBlock",
              "size": "Medium",
              "weight": "Bolder",
              "color": "Accent",
              "text": "Date:"
            }
          ],
          "width": "stretch"
        },
        {
          "type": "Column",
          "items": [
            {
              "type": "TextBlock",
              "id": "dateVal",
              "text": "17/11/2018 10.30 AM"
            }
          ],
          "width": "stretch"
        }
      ]
    },
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "items": [
            {
              "type": "TextBlock",
              "size": "Medium",
              "weight": "Bolder",
              "color": "Accent",
              "text": "Document Name:"
            }
          ],
          "width": "stretch"
        },
        {
          "type": "Column",
          "items": [
            {
              "type": "TextBlock",
              "id": "docVal",
              "text": "Document1"
            }
          ],
          "width": "stretch"
        }
      ]
    }
  ],
  "actions": [
    {
      "type": "Action.Submit",
      "title": "Submit",
      "data": {
        "msteams": {
          "type": "messageBack",
          "displayText": "I clicked this button",
          "text": "text to bots",
          "value": "Submit"
        }
      }
    },
    {
      "type": "Action.Submit",
      "title": "Cancel",
      "data": {
        "msteams": {
          "type": "messageBack",
          "displayText": "I clicked this button",
          "text": "text to bots",
          "value": "Cancel"
        }
      }
    }
  ],
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.0"
}

我的 C# 是

 var response = getCard(stepContext, "Aditya Rao, Vishal Subramaniam" , "Scrum Meeting" , "17/11/1028, 10:30AM" , "Scrum Sprint.pptx");
 await stepContext.Context.SendActivityAsync(response).ConfigureAwait(false);

我要支持的附加功能是

private static Attachment CreateAdaptiveCardAttachment(string filePath, string names, string subj , string datee, string docs)
    {
        var adaptiveCardJson = File.ReadAllText(filePath);
        dynamic obj = JsonConvert.DeserializeObject(adaptiveCardJson);
        obj["body"][1]["columns"][1]["items"][0]["text"] = names;
        obj["body"][2]["columns"][1]["items"][0]["text"] = subj;
        obj["body"][3]["columns"][1]["items"][0]["text"] = datee;
        obj["body"][4]["columns"][1]["items"][0]["text"] = docs;
        var adaptiveCardAttachment = new Attachment()
        {
            ContentType = "application/vnd.microsoft.card.adaptive",
            Content = obj,
        };
        return adaptiveCardAttachment;
    }


    // Create an attachment message response.
    private Activity CreateResponse(Activity activity, Attachment attachment)
    {
        var response = activity.CreateReply();
        response.Attachments = new List<Attachment>() { attachment };
        return response;
    }


    private Activity getCard(WaterfallStepContext stepContext, string names, string subj , string datee, string docs)
    {
        var jsonFilePath = @".\Dialogs\CardTemplates\MeetingComposerCreate.json";
        var activity = stepContext.Context.Activity;
        var adCard = CreateAdaptiveCardAttachment(jsonFilePath,names,subj,datee,docs);
        var response = CreateResponse(activity, adCard);
        return response;
    }

单击“提交”或“取消”后如何访问值响应?

另外,如果有人可以帮助我找到如何从 input.choice 获取回复以获取所选卡片的复选框数据。


单击“提交”或“取消”后如何访问值响应?

我们可以通过以下方式获取用户从自适应卡提交的值Activity.Value财产。

if(turnContext.Activity.Value!= null)
{

    reply.Text = $"submit data: {turnContext.Activity.Value}";

}

测试结果:

模拟器中的输出:

另外,如果有人可以帮助我找到如何从 input.choice 获取回复以获取所选卡片的复选框数据。

要显示选项供用户选择并获取所选选项,可以参考以下代码片段。

在 json 文件中:

{
  "type": "Input.ChoiceSet",
  "id": "optionSelection",
  "isMultiSelect": true,
  "style": "compact",
  "choices": [
    {
      "title": "option1",
      "value": "option1"
    },
    {
      "title": "option2",
      "value": "option2"
    },
    {
      "title": "option3",
      "value": "option3"
    }
  ]
}

使用相同的代码来获取用户的选择:

reply.Text = $"submit data: {turnContext.Activity.Value}";

测试结果:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自适应卡提交操作 的相关文章

随机推荐

  • 如何在 MVC 配置中允许匿名 Twitter 连接

    使用 春季社交 1 1 4 春季社交推特 1 1 2 spring mvc 4 2 在 Tomcat 7 上 下面是我的 MVC 应用程序的 tomcat 配置 包括 twitter 设置和 usersConnectionRepositor
  • 0-1 背包有额外限制(彩色物品)?

    我研究这个问题主要是出于工作间隙的好奇心 想象一下正常的 0 1 背包问题 除了所有物品都是黄色 红色 蓝色或绿色之外 并且由于你的强迫症 你的背包中每种颜色必须恰好有 2 件物品 因此 每个项目都有 3 个属性 而不是普通项目 重量 价值
  • 如何在 Gradle 中使用自定义 Java 注释处理器?

    我一直在研究一个简单的java注释处理器 它扩展了AbstractProcessor 我已经能够成功地测试这个使用javac Processor MyProcessor mySource java 问题是使用 Android Studio
  • 文档写入问题

    我正在制作一个页面 用户可以在其中回答有关他们要回售的产品的问题 使用单选按钮 当他们点击页面底部的按钮时 就会弹出报价 我编写了一个 JavaScript 函数 当用户点击按钮时执行 它计算价格并使用 document write 显示它
  • 如何为 Elixir 结构验证/强制执行类型和值?

    如何为 Elixir Structs 验证 强制执行值的类型和范围 例如在结构创建期间 如果提交无效类型 值 则抛出错误 lat 应该是数字并且在 90 0 和 90 0 之间 lon 应该是数字并且在 180 0 和 180 0 之间 d
  • 如何将所有请求重定向到nginx中的同一个文件?

    我的根目录 网络 应用程序 src 在这个目录中我有 2 个目录 js 和 assets 和一个文件index html 这就是我需要实现的目标 任何对 js 或 assets 或 index html 的请求都只是从根目录提供文件 例如
  • 变体调试没有类型为 INSTANT_RUN_MERGED_MANIFESTS 的输出

    我想做的事和问题 我将 Android Studio 和 Android Gradle 插件更新为 3 0 0 将 Gradle Wrapper 更新为 4 2 1 并希望通过 IDE 在设备上构建和部署我的 Android Gradle
  • 重构 python 模块配置以避免相对导入

    这与一个上一个问题 https stackoverflow com questions 343517 how do i work with multiple git branches of a python module我的 我了解如何存储
  • 如何使用runOnUithread运行?

    我正在开发的应用程序有一个连接到 mysql 数据库的登录 注册 起初我在UI Thread我后来发现它不起作用 因为反对在 Android 上运行长代码UI Thread 我尝试编辑代码以在新的计算机上运行长任务Thread我补充说 现在
  • 找不到模块“@vaadin/flow-frontend/Flow”

    Vaadin 突然停止构建我的库 并出现以下错误 我已经跳过 Vaadin 舞蹈 还有很多其他的东西 但我现在没有主意了 我尝试构建用于生产的库 但对于开发来说也失败了 我正在使用 Vaadin Flow Github 上的问题跟踪器重定向
  • UIImagePickerController 保存到磁盘然后加载到 UIImageView

    我有一个 UIImagePickerController 将图像以 png 格式保存到磁盘 当我尝试加载 PNG 并设置 UIImageView 时imageView image到该文件 它不显示 这是我的代码 void imagePick
  • PHP 在非静态方法上调用 self

    为什么本例中对非静态方法的 自我 调用有效 class A protected function aNonStaticMethod return class public function aEcho echo self aNonStati
  • 如何在现有环境中添加功能

    是否可以使用env 作为命名空间的替代品 在向环境添加函数之前如何检查环境是否已经存在 这与这个问题以及布伦丹的建议有关如何组织大型R程序 https stackoverflow com questions 1266279 how to o
  • Windows Defender - 以编程方式添加排除文件夹

    我出于研究目的检查了不同的键盘记录器 并偶然发现了 Refog https www refog com keylogger https www refog com keylogger 这个程序可以捕获很多系统事件 但真正引起我注意的是其他东
  • 附加类型的实体失败,因为相同类型的另一个实体已具有相同的主键值

    错误消息 附加该类型的实体失败 因为同一类型的另一个实体已具有相同的主键值 问题 如何以与下面代码中的 AttachActivity 方法所示类似的方式附加实体 我必须假设上面的错误消息的 另一个实体 部分指的是内存中存在但超出范围的对象
  • EF linq/lambda .contains(list[String])?

    有什么方法可以评估字符串是否包含列表的某些元素或列表的所有元素 使用 linq 到实体 我一直在尝试使用 predicateBuilder 和其他方法 但我对这些不是 100 EDIT 就像是 string words searchStri
  • 使用 serde 反序列化带有 Enum 键的 HashMap

    我有以下 Rust 代码 它模拟了一个配置文件 其中包括HashMap键控有一个enum use std collections HashMap use serde Deserialize Serialize derive Debug Cl
  • Google 机器学习套件,在 Android 上使用 ML Kit 识别图像中的文本错误 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我尝试安装 在 Android 上使用 ML Kit 识别图像中的文本 然后运行此应用程序 但出现此错误 com goo
  • Fabric + DigitalOcean:不可见的环境变量?

    我在 DigitalOcean 上有服务器 我使用 Fabric 来部署我的代码 我的代码依赖于环境变量 烧瓶配置 我今天遇到了一个奇怪的麻烦 在服务器上 root bashrc我已经添加了下一行 export CONFIG path to
  • 自适应卡提交操作

    我使用 JSON 格式生成了一张自适应卡 其中有两个按钮 提交 和 取消 分别返回 messageBack 消息作为提交和取消 我正在使用 C 来访问回复 但我无法弄清楚如何从自适应卡访问回复 我的json是 type AdaptiveCa