如何让机器人使用Microsoft bot-framework在Slack中与用户进行1:1对话?

时间:2017-10-24 18:52:34

标签: node.js botframework

我在Nodejs上使用Microsoft bot-framework。我希望我的机器人与用户在一个组内开始私人对话。目前,我的机器人与任何回复的成员进行对话。 例如,

  

我:你好@bot

     

Bot:嗨

     

我:我需要点披萨

      Bot:你在披萨上想要什么?

     

SomeTeamMember:蘑菇和洋葱

     

Bot:用蘑菇和洋葱订购比萨饼。

正如您所看到的,对话被其他成员劫持,这是我面临的问题,我希望避免这种情况发生。我希望机器人一次只能与一个成员通信,当对话以该用户结束时,它可以以与先前用户相同的方式与任何人通信。任何建议都会很棒!

2 个答案:

答案 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以进行后续过滤。 希望您或任何解决此问题的人得到有趣的想法。