Node.js 建议的行动

Node.js 建议的行动,node.js,botframework,Node.js,Botframework,我想在我的机器人中使用建议的操作,这样用户就可以快速回答问题,而且还可以输入一个字段 所以机器人会问这样的问题: “你喜欢比萨饼吗?” ->是啊->编号 用户可能不会使用快速回复,而是写下:“是的,还有汉堡包” 现在我也需要“汉堡”“作为一个实体”——对我来说没有意义,因为他们会将快速回复拉到选择提示上——这很好,当用户只从建议的操作中进行选择时——但当他们在输入字段中键入自己的答案时则不会 bot.dialog('/', [ function (session) { var msg

我想在我的机器人中使用建议的操作,这样用户就可以快速回答问题,而且还可以输入一个字段

所以机器人会问这样的问题:

“你喜欢比萨饼吗?” ->是啊->编号

用户可能不会使用快速回复,而是写下:“是的,还有汉堡包”

现在我也需要“汉堡”作为一个实体”——对我来说没有意义,因为他们会将快速回复拉到选择提示上——这很好,当用户只从建议的操作中进行选择时——但当他们在输入字段中键入自己的答案时则不会

bot.dialog('/', [
function (session) {

    var msg = new builder.Message(session)
        .text("Hi! What is your favorite color?")
        .suggestedActions(
            builder.SuggestedActions.create(
                session,[
                    builder.CardAction.imBack(session, "green", "green"),
                    builder.CardAction.imBack(session, "blue", "blue"),
                    builder.CardAction.imBack(session, "red", "red")
                ]
            )
        );
    builder.Prompts.choice(session, msg, ["green", "blue", "red"]);
},
function(session, results) {
    session.send('I like ' +  results.response.entity + ' too!');
}]);

有解决方案吗?

您可以使用
builder.Prompts.text
来获取用户的输入,同时也可以构建
SuggestedActions
卡来创建响应基线。使用
builder.Prompts.choice
将限制您使用传递到声明中的选项。因此,你可以让你的机器人问“你喜欢比萨饼吗?”并弹出“是的!”和“否”按钮,但也允许用户键入另一个响应

使用您的问题示例,您可以创建如下对话框。这还显示了一些正则表达式逻辑,用于在答案中添加可能的内容,例如有人键入“是的,还有汉堡!”

例如:

bot.dialog('/', [
    function (session) {
        var msg = new builder.Message(session)
            .text("Do you like Pizza?")
            .suggestedActions(
                builder.SuggestedActions.create(
                    session,[
                        builder.CardAction.imBack(session, "Yeah!", "Yeah!"),
                        builder.CardAction.imBack(session, "No.", "No.")
                    ]
                )
            );
        builder.Prompts.text(session, msg);
    },
    function(session, results) {
        let regex = /yeah|yes|sure|of course|i do\!|affirmative|positive/gi;
        if (regex.test(results.response)) {
            session.beginDialog("LikesPizza");
        } else {
            session.beginDialog("DoesNotLikePizza");
        }
    }]);

bot.dialog("LikesPizza", function(session) {
    let yesAndMoreRegex = /and|also/gi
    if (yesAndMoreRegex.test(session.message.text)) {
        session.endDialog("You like other foods too?  Awesome!  But pizza is the best!");
    } else {
        session.endDialog("Who doesn't like pizza?!");
    }
});

bot.dialog("DoesNotLikePizza", function(session) {
    let noButRegex = /but|although|better/gi;
    if (noButRegex.test(session.message.text)) {
        session.endDialog("True, there's foods other than pizza.  There's something for everyone!");
    } else {
        session.endDialog("Well, pizza's not for everyone, I guess...");
    }    
});
非常感谢。这是“好的”,但不是解决方案。在这种情况下,我没有得到作为一个实体的“即将到来的食物”。我可以再次向路易斯发送“是的,但也有汉堡”这句话,但我的域名不仅仅是比萨饼——所以“是的,但[实体]…”会在太多的情况下使用。我不知道如何训练它作为一种意图。。。在我看来,我需要一些类似于填补空缺的东西?