如何使用Microsoft Bot Builder SDK for Node.js动态生成对话框?

时间:2017-12-13 19:12:19

标签: javascript node.js botframework

我正在构建一个工具,允许用户生成自己的自定义表单调查。我想让他们能够将这些传统的表单调查转换为聊天对话。我已经在使用Microsoft Bot Builder SDK通过聊天与用户进行互动。

如何使用存储在数据库中的表单结构动态生成对话框?假设我有一个存储在我的数据库中的数组:

var form = [
    {
        inputType: 'text',
        prompt: 'What is your first name?'
    },
    {
        inputType: 'choice',
        prompt: 'Select your gender',
        values: ['female', 'male']
    }
];

如何使用此数组生成瀑布对话框?我知道我可以使用提示等手动编写对话框代码。如果我一直知道调查问题是什么,但我必须根据用户保存的动态表单生成对话框。我找不到任何有关如何实现这一目标的信息。感谢帮助。感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用名为" Form Flow"的社区贡献工具来实现此目的。 - 它旨在实现与您相似的想法。

您可以在此处找到NPM包:

此处有关GitHub项目存储库的更多详细信息:

<强>概述:

  

此库将允许您的机器人向用户请求复杂的表单。它有助于构建一个瀑布对话框来处理整个表单流。该库将拆分为每个字段所需的对话框列表。您可以使用预定义的提示或围绕MBF提示创建自定义对话框包装器。每个字段的对话框单独评估,可以自定义。图书馆的特色:

     
      
  • 标准提示以及电子邮件和网址提示;
  •   
  • 验证者,提示,错误提示和值提取器可由开发人员自定义
  •   
  • 支持子对话
  •   

示例: Simple registration form

const builder = require('botbuilder');
const formFlow = require('../../botbuilder-formflow');

let signupForm = [
  {
    "type": "text",
    "id": "login",
    "prompt": "Please enter your login",
    "response": "Your login is %s"
  },
  {
    "type": "text",
    "id": "password",
    "prompt": "Please enter your password",
    "response": "Your password is %s"
  }
];


let connector = new builder.ConsoleConnector().listen();
let bot = new builder.UniversalBot(connector);
bot.dialog('/', [
  session => session.beginDialog('/form'),
  (session, response) => session.endDialog(`Form result: ${JSON.stringify(response.response)}`)
]);
formFlow.create(bot, '/form', signupForm);

console.log('To start registration flow press [[ENTER]]');

答案 1 :(得分:1)

或者,除了利用@nilsw提到的npm包之外,您可以尝试从数据库中的实体自己构建一个Adaptive Card json字符串。

字段定义代码段很简单:

    {
      "type": "TextBlock",
      "text": "Your name",
      "wrap": true
    },
    {
      "type": "Input.Text",
      "id": "myName",
      "placeholder": "Last, First"
    },

您可以参考http://adaptivecards.io/samples/InputForm.html获取输入表单示例。

另外,请参阅http://adaptivecards.io/explorer/Input.Choice.html字段定义。