【问题标题】:Send Hero or Adaptive card & Get User Input on Welcome发送英雄或自适应卡片并在欢迎时获取用户输入
【发布时间】:2020-10-07 23:38:00
【问题描述】:

我正在使用 .NET Core 3.1 C# 开发 Bot。我想在用户加入/激活机器人后立即发送带有 4 个按钮和欢迎提示的英雄卡。我在 OnMembersAddedAsync 中试过了

if (member.Id != turnContext.Activity.Recipient.Id)
            {
                var welcomeCard = CreateAdaptiveCardAttachment();
                var response = MessageFactory.Attachment(welcomeCard);

                await turnContext.SendActivityAsync( response,  cancellationToken);
            }     

这将显示类型为 Action.Submit 的自适应卡片。但我不确定如何获取客户点击的按钮的值。我在 OnMessageActivityAsync 上试过了

 if (turnContext.Activity.Value != null)
        {
            var mainMenu = turnContext.Activity.Value;
        }

但值始终为空。自适应卡的 Json 是:

 {
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "version": "1.0",
  "body": [   
    {
      "type": "TextBlock",
      "spacing": "medium",
      "size": "default",
      "weight": "bolder",
      "text": "Welcome to ABC Bank !",
      "wrap": true,
      "maxLines": 0
    },
    {
      "type": "TextBlock",
      "size": "default",
      "isSubtle": true,
      "text": "Please select user type from below ....",
      "wrap": true,
      "maxLines": 0
    }
  ],
  "actions": [
    {
      "type": "Action.Submit",
      "title": "Consumer"
    },
    {
      "type": "Action.Submit",
      "title": "Client"
    },
    {
      "type": "Action.Submit",
      "title": "Merchant"
    }
  ]
}

【问题讨论】:

  • 嘿,你能分享你的卡片json吗?真的有助于回答这个问题:)
  • 我为自适应卡添加了 Json。
  • 如果您是通过网络聊天或直线使用此功能,您只需将数据属性添加到您的自适应卡中。 stackoverflow.com/questions/62410129/…
  • 正如我之前所说,我需要在最终用户输入任何内容之前将其作为欢迎发送。一旦最终用户选择了选项,我需要遵循该选项的相应瀑布对话框。上面提到的代码是在 InitiateBot.cs 中编写的,一旦客户选择选项,我需要根据客户选择的选项转到 ConsumerDialog.cs 或任何其他对话框。
  • StevieBleeds 是对的。 “动作”元素需要有一个数据属性或至少一个 ID。如果您提供您的操作 ID,这些操作将在用户与您的卡交互时发送。

标签: botframework user-input send adaptive-cards


【解决方案1】:

是的。如 cmets 中所述,您需要添加 data 属性。这不是必需的。但是如果你想收集用户提供的选项,你需要指定它。由于您没有任何其他输入字段。这将作为进行进一步操作的输入。

注意:对于任何输入元素,您需要在执行提交操作时使用id 属性来识别收集的输入。
提交操作data 也是如此。确保每个操作的数据值是唯一的。如果您希望 2 个按钮执行相同的操作(进入相同的对话框),那么您可以在 data 中指定相同的值

这是给你一个想法的官方链接。 Submit action

希望对你有帮助

【讨论】:

  • 嗨,谢谢 Gags08 我可以通过在 OnMessageActivityAsync 中的 Json 中添加数据字段来获取用户输入(主菜单)。现在我需要根据客户的选择打开相应的对话框,即在选择消费者时,它应该转到“ConsumerDialg”,在选择“Merchant”时它应该转到“MerchantDialog”,每次转到 RootDialog 时我如何才能做到这一点然后相应的对话框。 Root 是我的主要 Dailog,预计只运行一次。否则我需要访问用户选择,即根对话框中的主菜单。我想我在这里遗漏了一些概念。
  • 嗨@Dnyati。由于这是一个不同的主题。请您创建一个新问题。所以其他人也可以使用它。因为这需要解释。
  • 谢谢,我相信我已经解决了这个问题并且它正在工作!谢谢!!
猜你喜欢
  • 1970-01-01
  • 2017-11-19
  • 2021-09-06
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 2016-05-01
  • 2020-12-31
相关资源
最近更新 更多