我正在使用Microsoft的botbuilder和LUIS创建一个闲置的聊天机器人。
有没有办法继续使用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?");
}
时停止,那么我将保持平等要求用户输入每个键中的值的[RoutePrefix("MySpecialSauce")]
public class ProductsController : Controller
{
[Route("GetBy/{id}")]
public MyObject GetBy(int id)
{
return something(id);
}
}
个数。
[Route("[controller]")]
public class ProductsController : Controller
{
[HttpGet("GetBy/{id}")]
public MyObject GetBy(int id)
{
return something(id);
}
}
我似乎无法使用数组创建某种循环来保存每个键的值,我不知道如何处理它。
感谢。
答案 0 :(得分:3)
您正在寻找的是session.replaceDialog();在SDK的GitHub存储库上有一个标记为'basics-loops'的示例。要循环显示提示,必须创建一个带有所需提示的小对话框,并通过 session.replaceDialog()或 session.beginDialog ()自动重启对话框。
我已经构建了一个chatbot,它在上面指定的场景中接收键值对。下面的代码摘录是我的“循环”对话框中的最后一步。
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时,新对话框将添加到堆栈中。当您结束该子对话框时,您将返回到原始/父对话框。 replaceDialog将结束当前对话框并开始新对话框。
答案 1 :(得分:1)
您可以使用replacementialog来循环用户:
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 });
}
]);