Botframework提示对话框,直到用户完成

我正在使用微软的botbuilder和LUIS创build一个聊天机器人。

有没有办法继续使用builder.Prompts.text()不断询问用户是否有用户想要放置的信息,比如forwhile循环? 例如,我想继续询问用户未定义的次数,如果有一个用户想要保存的key ,只有当用户键入done ,然后我会有相同数量的builder.Prompts.text()问用户input每个键的值。

 function (session, results, next) { builder.Prompts.text(session, "Another key to put?"); }, function (session, results, next) { builder.Prompts.text(session, "Value to put?"); } 

看起来好像我可以用一个数组来保存每个键的值来创build某种循环,我不知道如何处理这个。

谢谢。

你在找什么是session.replaceDialog() ; 在SDK的GitHub仓库中有一个标签为“basics-loops”的例子。 要通过提示进行循环,必须使用所需的提示创build一个小对话框,并通过session.replaceDialog()session.beginDialog ()自动重启对话框。

我已经构build了一个聊天机器人 ,在上面指定的场景中接收键值对。 下面的代码摘录是我的“循环”对话框中的最后一步。

 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。 该方法还可以将可选parameter passing给新的对话框。

注意:虽然在这里不适用,但replaceDialog和beginDialog / endDialog之间的区别是半明显的,当你使用beginDialog时,新的对话框被添加到堆栈。 当您结束该子对话框时,您将返回到原始/父对话框。 replaceDialog将结束当前对话框并开始新的对话框。

您可以使用replacedialog来循环用户:

 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 }); } ]);