Microsoft BotFramework - 推荐的卡片

时间:2017-07-02 23:08:45

标签: javascript node.js botframework

所以我尝试使用建议的卡片为WebChat机器人提供更好的按钮输入,除非有人有任何其他建议吗?目前让builder.prompts正常工作。

但我的问题是,使用以下示例:

var msg = new builder.Message(session)
    .text("Thank you for expressing interest in our premium golf shirt! What color of shirt would you like?")
    .suggestedActions(
        builder.SuggestedActions.create(
                session, [
                    builder.CardAction.imBack(session, "productId=1&color=green", "Green"),
                    builder.CardAction.imBack(session, "productId=1&color=blue", "Blue"),
                    builder.CardAction.imBack(session, "productId=1&color=red", "Red")
                ]
            ));
session.send(msg);

我如何实际获得回复?它自动将用户值写入聊天(我试图避免)尝试使用response.entity等但没有任何返回它。

文档说“当用户点击其中一个建议操作时,机器人将收到来自用户的消息,其中包含相应操作的。”

感谢。

1 个答案:

答案 0 :(得分:4)

为此做了几件事。

首先,imBack基本上代表IM后退或即时消息。它会将回复发送给对话。您需要postBack,这会隐藏回复,但请注意,对于某些频道,postBack会映射到imBack,因此您必须进行一些调查。对于Bot仿真器,postBack将隐藏响应。

第二件事,如果您在机器人运行时观察控制台,您会看到机器人将尝试在imBack方法中路由到。您需要通过对话或意图捕获它。这是一个很小的,效率很低的例子:

intents.matches(/^suggest/i, [(session) => {
    var msg = new builder.Message(session)
        .text("Thank you for expressing interest in our premium golf shirt! What color of shirt would you like?")
        .suggestedActions(
            builder.SuggestedActions.create(
                    session, [
                        builder.CardAction.postBack(session, "productId=1&color=green", "Green"),
                        builder.CardAction.postBack(session, "productId=1&color=blue", "Blue"),
                        builder.CardAction.postBack(session, "productId=1&color=red", "Red")
                    ]
                ));
        session.send(msg);
}]);

intents.matches(/^productId/i, [
    (session, args, next) => {
        console.log(args);
    }
]);

在上面使用意图对话框的示例中,我可以从第二个matched方法调用的args中的intent.matches数组中访问。 / p>

还有其他方法可以做到这一点,但这是一个快速而肮脏的例子。