【问题标题】:Botframework Prompt dialogs until user finishesBotframework 提示对话框,直到用户完成
【发布时间】:2017-04-03 15:27:15
【问题描述】:

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

有没有办法继续使用builder.Prompts.text() 不断询问用户是否还有用户想要输入的信息,例如forwhile 循环?例如,如果用户想要保存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?");
}

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

谢谢。

【问题讨论】:

    标签: node.js botframework azure-language-understanding


    【解决方案1】:

    你要找的是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 将结束当前对话框并开始新的对话框。

    【讨论】:

      【解决方案2】:

      你可以使用replacediallog来循环用户:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多