我在Nodejs上使用Microsoft bot-framework。我希望我的机器人与用户在一个组内开始私人对话。目前,我的机器人与任何回复的成员进行对话。 例如,
我:你好@bot
Bot:嗨
我:我需要点披萨
Bot:你在披萨上想要什么?SomeTeamMember:蘑菇和洋葱
Bot:用蘑菇和洋葱订购比萨饼。
正如您所看到的,对话被其他成员劫持,这是我面临的问题,我希望避免这种情况发生。我希望机器人一次只能与一个成员通信,当对话以该用户结束时,它可以以与先前用户相同的方式与任何人通信。任何建议都会很棒!
答案 0 :(得分:0)
你正在使用松弛?无论如何,当你到达“Bot:你想要什么样的披萨?”时,你应该进入一个全新的对话框,你可以在其中使用每个会话成员Id并将其存储到数据包(context.ConversationData)以获得上下文
当“SomeTeamMember”加入对话时,您可以检查他或她的会话成员ID以获取每个成员的状态,并采取相应的行动。
希望这会有所帮助:)
Alex
答案 1 :(得分:0)
我认为您可以使用会话对象并访问message发送者ID,即session.message.user.id
。也许可以过滤掉其他用户发出的消息,而不是说我需要订购披萨的用户。
我还可以从documentation中使用类似对话框triggered by an action之类的方法,在我需要订购比萨饼之后立即激活。 然后,您可以检查用户的ID,然后重新路由到其他用户将被过滤掉的对话框,除了我需要订购比萨饼 ...
的发件人如果您尝试类似或复杂的操作:
bot.dialog('pizzarouting', function (session, args, next) {
})
// Once triggered, will start a new dialog as specified by
// the 'onSelectAction' option.
.triggerAction({
matches: /^Pizza$/i,
onSelectAction: (session, args, next) => {
// Add the help dialog to the top of the dialog stack
// (override the default behavior of replacing the stack)
session.send('What would you like on your pizza?')
console.log(session.message);
// Reroute to dialog that filter out the other people id
// session.beginDialog(args.action, args);
}
});
仅当用户在聊天中发送“ Pizza”时,此功能才会激活。 您将看到会话对象包含消息对象,您可以使用该对象来标识发送我需要订购披萨的用户,并获取其ID以进行后续过滤。 希望您或任何解决此问题的人得到有趣的想法。