【问题标题】:Microsoft Teams Bot - Is it possible to display an Adaptive Card to get user input when a user enters a command?Microsoft Teams Bot - 是否可以在用户输入命令时显示自适应卡以获取用户输入?
【发布时间】:2021-09-12 22:57:48
【问题描述】:

我想开发一个 Microsoft Teams Bot,当用户输入关键字(例如“pto”)时,它会显示一个自适应卡片表单,用户可以在该表单中填充信息,然后将这些信息发送到 Web 服务进行处理。

是否可以根据用户输入文本命令显示自适应卡片?

【问题讨论】:

    标签: botframework microsoft-teams


    【解决方案1】:

    是的,绝对有可能。 “命令”实际上只是一条常规消息,它是您解释/响应消息的方式。您可以通过查看内容自己检测这些消息,也可以使用对话式 AI 引擎,如 LUIS.ai(Azure 的一部分),它可以更轻松地配置为检查变体(例如“pto”、“PTO”、 “POT”、“[whatever 'pto'代表']”等。在这种情况下,LUIS 基本上是构建大量“if”语句来查找匹配项,并返回一个“intent”(例如“User is请求任何“PTO”的意思”)。因为它使用人工智能来生成和维护这个“if”列表,所以像 LUIS 这样的语言对话引擎在机器人中被广泛使用,但它们不是-必需的-。这就是为什么你在大多数情况下看到它们的原因虽然是样本。

    关于发送自适应卡片,这在 Teams 机器人中也是相当标准的东西,可以发送它们以响应用户的消息,就像你在这里尝试一样,以及调用它们的其他方式。

    实际上,我在今年早些时候的一次会议上一个接一个地讨论了这两个主题 - 在这里观看视频:https://www.youtube.com/watch?v=mM7-fYdcJhw&t=1398s(前面的部分实际上可能也很有趣)。

    【讨论】:

      【解决方案2】:

      Bot Framework 无法原生处理卡片提示,所以我想出的最佳解决方案是

      1. 将卡片显示为标准活动(即在提示之前)
      2. 提供一条消息,表明您正在等待提示输入(例如等待选择...
      3. 验证提示输入是一个对象(例如input.match(/{.+/g)
      4. 在下一步中使用对象中的值来调用 Web 服务

      所以在代码中它最终是这样的:

      await step.context.sendActivity(CardHelper.datePicker());
      return await step.prompt(DATE_PROMPT, `*waiting for selection...*`);
      

      使用验证器确保您收到这样的对象:

          async validateDateCard(prompt) {
              prompt.activeDialog = await this.userDialogStateAccessor;
              prompt.context = await prompt.context;
              const input = prompt.recognized.value;
              if (input.match(/{.+/g)) {
                  return true;
              } else {
                  await prompt.context.sendActivity(`Please use the calendar widget above to enter the date.`);
                  return false;
              }
          }
      

      在我的例子中,我的小部件只有一个日期字段,但无论您有多少字段,它的工作原理都是一样的。它们都将在提交的对象中。如果您尝试手动输入内容,系​​统会再次提示您使用该小部件。一般来说,我发现按顺序提示纯文本值而不是使用卡片可以正常工作,而且对用户来说不太麻烦。但是,如果您有大量输入或需要像上面的日期小部件这样的专门控件,有时卡片是唯一的方法。

      【讨论】:

        猜你喜欢
        • 2019-06-29
        • 2017-06-25
        • 2020-12-22
        • 1970-01-01
        • 2021-09-22
        • 2017-09-15
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多