Botframework 提示对话框直到用户完成
Botframework Prompt dialogs until user finishes
我正在使用 Microsoft 的 botbuilder 和 LUIS 为 slack 创建一个聊天机器人。
有没有办法继续使用 builder.Prompts.text()
继续询问用户是否还有用户想要输入的信息,例如 for
或 while
循环?例如,如果有 key
用户想要保存,我想继续询问用户未定义的次数,并且仅在用户键入 done
时停止,然后我将有相同数量的 builder.Prompts.text()
询问用户输入每个键的值。
function (session, results, next) {
builder.Prompts.text(session, "Another key to put?");
},
function (session, results, next) {
builder.Prompts.text(session, "Value to put?");
}
我似乎无法使用数组创建某种循环来保存每个键及其值,我不确定如何处理这个问题。
谢谢。
您可以使用 replaceddialog 来循环用户:
bot.dialog("/getUserKeys", [
function (session, args, next) {
session.dialogData.keys = args && args.keys ? args.keys : [];
builder.Prompts.text(session, "Another key to put?");
},
function (session, results, next) {
if (results.response === "none") {
session.endDialogWithResult({response: { keys: session.DialogData.keys }});
return;
}
session.dialogData.keys[session.dialogData.keys.length] = results.response;
session.replaceDialog("/getUserKeys", { keys: session.DialogData.keys });
}
]);
您要查找的是 SDK 的 GitHub 存储库中的 session.replaceDialog(); there is an example labeled 'basics-loops'。要循环提示,必须创建一个带有所需提示的小对话框,并通过 session.replaceDialog() 或 [=36= 自动重新启动对话框]()。
我构建了一个 chatbot 来接收您在上面指定的场景中的键值对。下面的代码摘录是我 'Loop' 对话框中的最后一步。
function (session, results) {
var value = results.response ? results.response : null,
key = session.dialogData.key;
var pairs = session.userData.kVPairs;
var newPair = {};
newPair[key] = value;
if (key && value) {
session.userData.kVPairs.push(newPair);
console.log(pairs[pairs.length - 1]);
}
session.send('latest key-value pair added, { %s : %s }', key, value);
session.replaceDialog('Loop');
}
session.replaceDialog('Loop') 在此瀑布步骤的末尾并入并采用新对话的 Id。该方法还可以采用可选参数传递给新对话框。
注意:虽然这里不适用,replaceDialog 和 beginDialog/endDialog 之间的区别是半明显的,当你使用 beginDialog 时,新对话框被添加到堆栈.当您结束该子对话框时,您将返回到 original/parent 对话框。 replaceDialog 将结束当前对话框并开始新对话框。
我正在使用 Microsoft 的 botbuilder 和 LUIS 为 slack 创建一个聊天机器人。
有没有办法继续使用 builder.Prompts.text()
继续询问用户是否还有用户想要输入的信息,例如 for
或 while
循环?例如,如果有 key
用户想要保存,我想继续询问用户未定义的次数,并且仅在用户键入 done
时停止,然后我将有相同数量的 builder.Prompts.text()
询问用户输入每个键的值。
function (session, results, next) {
builder.Prompts.text(session, "Another key to put?");
},
function (session, results, next) {
builder.Prompts.text(session, "Value to put?");
}
我似乎无法使用数组创建某种循环来保存每个键及其值,我不确定如何处理这个问题。
谢谢。
您可以使用 replaceddialog 来循环用户:
bot.dialog("/getUserKeys", [
function (session, args, next) {
session.dialogData.keys = args && args.keys ? args.keys : [];
builder.Prompts.text(session, "Another key to put?");
},
function (session, results, next) {
if (results.response === "none") {
session.endDialogWithResult({response: { keys: session.DialogData.keys }});
return;
}
session.dialogData.keys[session.dialogData.keys.length] = results.response;
session.replaceDialog("/getUserKeys", { keys: session.DialogData.keys });
}
]);
您要查找的是 SDK 的 GitHub 存储库中的 session.replaceDialog(); there is an example labeled 'basics-loops'。要循环提示,必须创建一个带有所需提示的小对话框,并通过 session.replaceDialog() 或 [=36= 自动重新启动对话框]()。
我构建了一个 chatbot 来接收您在上面指定的场景中的键值对。下面的代码摘录是我 'Loop' 对话框中的最后一步。
function (session, results) {
var value = results.response ? results.response : null,
key = session.dialogData.key;
var pairs = session.userData.kVPairs;
var newPair = {};
newPair[key] = value;
if (key && value) {
session.userData.kVPairs.push(newPair);
console.log(pairs[pairs.length - 1]);
}
session.send('latest key-value pair added, { %s : %s }', key, value);
session.replaceDialog('Loop');
}
session.replaceDialog('Loop') 在此瀑布步骤的末尾并入并采用新对话的 Id。该方法还可以采用可选参数传递给新对话框。
注意:虽然这里不适用,replaceDialog 和 beginDialog/endDialog 之间的区别是半明显的,当你使用 beginDialog 时,新对话框被添加到堆栈.当您结束该子对话框时,您将返回到 original/parent 对话框。 replaceDialog 将结束当前对话框并开始新对话框。