所以我尝试使用建议的卡片为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等但没有任何返回它。
文档说“当用户点击其中一个建议操作时,机器人将收到来自用户的消息,其中包含相应操作的值。”
感谢。
答案 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>
还有其他方法可以做到这一点,但这是一个快速而肮脏的例子。