node.js - Bot 框架建议的操作

标签 node.js botframework

我想在我的 Bot 中使用建议的操作 - 这样用户可以快速回复来回答问题,还有一个输入字段。

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

“你喜欢披萨吗?” -> 是的! -> 否。

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

现在我也需要“Burger作为一个实体 - Example on GitHub对我来说没有意义,因为他们将快速回复拉到选择提示 - 当用户仅从建议的操作中选择时这很好 - 但当他们在输入字段中键入自己的答案时则不然。

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...");
    }    
});

关于node.js - Bot 框架建议的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50102849/

相关文章:

Node.Js : How to log a request's body without access to the Request object

azure - Azure Bot Framework 注册中的 "Enable Streaming Endpoint"有什么作用?

botframework - 使用 OAuthPrompt 获取 Microsoft Graph API 的刷新 token

c# - BOT 框架中 qnA 和 Luis 之间的 Intent Score 映射

javascript - NodeJS - 所有短(缩写)词到全词功能模块

javascript - Node.js 与 Electron::运行外部命令并在界面上显示标准输出

javascript - 错误 : THREE. PlaneBufferGeometry 不是构造函数

azure - 机器人(使用 MS 机器人框架创建)的 serviceUrl 是如何决定的

node.js - 如何将 ip 地址与 maximind 数据匹配?

node.js - 不使用回调时未定义结果。 Nodejs、Express 和 SQL Server Express