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

时间:2017-04-03 15:27:15

标签: node.js botframework luis

我正在使用Microsoft的botbuilder和LUIS创建一个闲置的聊天机器人。

有没有办法继续使用while向用户询问用户是否还有其他信息,例如keydone循环?例如,我想继续询问用户未定义的次数,如果用户想要保存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);
    }
}

我似乎无法使用数组创建某种循环来保存每个键的值,我不知道如何处理它。

感谢。

2 个答案:

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