如何使用自适应卡操作从自适应卡获取用户响应。使用 Microsoft Bot Framework 从 MS Teams 频道提交操作?

Posted

技术标签:

【中文标题】如何使用自适应卡操作从自适应卡获取用户响应。使用 Microsoft Bot Framework 从 MS Teams 频道提交操作?【英文标题】:How can I get user response from adaptive card using Adaptive Cards Action.Submit action from MS Teams channel using Microsoft Bot Framework? 【发布时间】:2021-11-09 07:36:43 【问题描述】:

如何使用自适应卡片操作从自适应卡片获取用户响应。使用 Microsoft Bot Framework 从 MS Teams 频道提交操作?

这是我的示例自适应卡,带有两个按钮是和否。一旦用户单击任何按钮,我需要在使用 Microsoft Bot Framework 4 实现的后端中的机器人应用程序中捕获响应。


"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.2",
"body": [

  "type": "TextBlock",
  "text": "Does this information help you?"
,

  "type": "ActionSet",
  "actions": [
    
      "type": "Action.Execute",
      "title": "Yes",
      "verb": "personalDetailsFormSubmit",
      "id": "surveyReplyYes",
      "userIds": "" ,
      "data":
        "key1": true,
        "key2":"okay"
      ,
       "fallback": 
        "type": "Action.Submit",
        "title": "Yes"
        
    ,
    
      "type": "Action.Execute",
      "title": "No",
      "verb": "personalDetailsFormSubmit",
      "id": "surveyReplyNo",
      "userIds": "" ,
       "data":
        "key1": false,
        "key2":"np"
      ,
       "fallback": 
        "type": "Action.Submit",
        "title": "No"
        
    
  ]

]

【问题讨论】:

【参考方案1】:

每个频道都有一些额外的要求来实现这种要求,显然 MS Teams Channels Adaptive 卡需要名为“msteams”的特殊属性到对象提交操作的数据属性中的对象。根据您的自适应卡,它仅包含 'data' 属性,因此请稍作更改并尝试一下。

示例:


"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\""
,
"extraData": 


参考:Adaptive Cards in Teams

【讨论】:

【参考方案2】:

本质上,您的机器人是一项等待用户调用的服务。当用户发送常规短信时,它将作为“MessageActivity”事件进入您的机器人。但是,如果他们单击自适应卡片中的按钮,这将作为“InvokeActivity”事件出现,因此您可以挂钩并检查用户是否单击了您的一个按钮,并做出适当的响应。这是基于it's cards 之一的an example of a bot doing that。请特别参阅 OnMessageActivityAsyncOnInvokeActivityAsync(仅限 C# - 请参阅下面的 Node)。

这是来自 Microsoft Bot Framework 团队的另一个 very detailed blog 处理此问题,涵盖 DotNet 和 Node。那篇文章有点旧,所以它没有涵盖您在示例中使用的内容,这是相当新的 - Universal Actions。这只是为 Action 指定 json 的一种稍新的方式。

这完全是可选,但还有一种方法可以让卡片按钮的行为稍有不同。例如,当用户单击一个按钮时,您可以让它看起来好像用户在机器人中键入了该文本。有关更多信息,请参阅here。

【讨论】:

以上是关于如何使用自适应卡操作从自适应卡获取用户响应。使用 Microsoft Bot Framework 从 MS Teams 频道提交操作?的主要内容,如果未能解决你的问题,请参考以下文章

适用于常见问题的自适应卡内的自适应卡

如何在后续瀑布步骤中检索自适应卡的表单提交

自适应卡片:Action.Show Card 上的动态数据绑定

无法在 Microsoft 自适应卡中播放 youtube 视频

MS BOT框架(自适应卡):如何从directline发送值(Stepcontext.Value)?

如何处理自适应卡片机器人框架 v4 上的点击操作?