node.js - 在 MS Bot Framework 中提示无限对话框
问题描述
我在 Node.js 上使用 Bot Framework。我想从文件中提取不确定数量的问题,然后提示用户回答所有问题。有没有办法循环一个对话框来完成这个,或者有没有其他可行的解决方案?
解决方案
通过使用下面的逻辑,您应该能够遍历文件中的每个提示。
bot.dialog('prompting', [
(session, args) => {
if ('currentPrompt' in args) {
let promptsData = promptRetriever();
session.conversationData.currentPrompt = args.currentPrompt;
// switch statement so the correct type of prompt is sent to the user
switch (args.promptType) {
case 'text':
builder.Prompts.text(session, promptsData[args.currentPrompt].text);
break;
case 'confirm':
builder.Prompts.confirm(session, promptsData[args.currentPrompt].text);
break;
case 'number':
builder.Prompts.number(session, promptsData[args.currentPrompt].text);
break;
}
} else {
let firstPrompt = promptRetriever()['prompt1'];
session.conversationData.currentPrompt = 'prompt1';
builder.Prompts.confirm(session, firstPrompt.text);
}
},
(session, results) => {
// Store the response for the value of the prompt on session.userData
session.userData[session.conversationData.currentPrompt] = results.response;
delete session.conversationData.currentPrompt;
// Retrieve all the keys (prompts) from prompts.json
let prompts = promptRetriever();
// If the lengths are the same then every prompt has been asked,
// so respond with the user's answers.
if (Object.keys(session.userData).length === Object.keys(prompts).length) {
session.send('You answered all the prompts!')
.send(`prompt1 result: ${session.userData.prompt1}`)
.send(`prompt2 result: ${session.userData.prompt2}`)
.send(`prompt3 result: ${session.userData.prompt3}`)
session.endDialog('Ending dialog.');
} else {
let promptsKeys = Object.keys(prompts);
for (let key in promptsKeys) {
if (!(promptsKeys[key] in session.userData)) {
session.replaceDialog('prompting', {
currentPrompt: promptsKeys[key],
promptType: prompts[promptsKeys[key]].type }
);
break;
}
}
}
}
]).triggerAction({
matches: /prompts/ig
});
// Helper function for accessing out prompts in json format
function promptRetriever() {
return require('./prompts.json');
}
然后这个例子中使用的 prompts.json 的结构是:
{
"prompt1": {
"text": "Please say yes or no",
"type": "confirm"
},
"prompt2": {
"text": "Please say something",
"type": "text"
},
"prompt3": {
"text": "What is your age",
"type": "number"
}
}
推荐阅读
- git - 无法将我的分支合并到 master
- javascript - Chart.js:条形图显示标签,而不是数据
- php - 按名称排序数组 PHP
- javascript - 如何从当前页面传递值并在新选项卡中显示这些值
- android - Google Places API:未捕获运行时异常
- json - AWS CLI / jq - 使用标签转换 JSON,甚至显示未定义标签的信息
- python - ("由于模型数据错误,无法加载模型。标签:['serve']\n在定义的操作中没有名为 HashTableV2 的操作。", 1)
- java -
antlr4 不匹配 - c++ - 如何将 i386 代码片段链接到 x86_64 精灵?
- c++ - C++ 检查十六进制是否由 ABCDEF1 或 0 组成