我正在构建一个工具,允许用户生成自己的自定义表单调查。我想让他们能够将这些传统的表单调查转换为聊天对话。我已经在使用Microsoft Bot Builder SDK通过聊天与用户进行互动。
如何使用存储在数据库中的表单结构动态生成对话框?假设我有一个存储在我的数据库中的数组:
var form = [
{
inputType: 'text',
prompt: 'What is your first name?'
},
{
inputType: 'choice',
prompt: 'Select your gender',
values: ['female', 'male']
}
];
如何使用此数组生成瀑布对话框?我知道我可以使用提示等手动编写对话框代码。如果我一直知道调查问题是什么,但我必须根据用户保存的动态表单生成对话框。我找不到任何有关如何实现这一目标的信息。感谢帮助。感谢。
答案 0 :(得分:1)
您可以使用名为" Form Flow"的社区贡献工具来实现此目的。 - 它旨在实现与您相似的想法。
您可以在此处找到NPM包:
此处有关GitHub项目存储库的更多详细信息:
<强>概述:强>
此库将允许您的机器人向用户请求复杂的表单。它有助于构建一个瀑布对话框来处理整个表单流。该库将拆分为每个字段所需的对话框列表。您可以使用预定义的提示或围绕MBF提示创建自定义对话框包装器。每个字段的对话框单独评估,可以自定义。图书馆的特色:
- 标准提示以及电子邮件和网址提示;
- 验证者,提示,错误提示和值提取器可由开发人员自定义
- 支持子对话
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字段定义。