Slack / Botkit:如何使松弛的机器人听得更好?

时间:2017-04-23 17:48:55

标签: javascript node.js bots slack botkit

我在创建一种方法时遇到问题,即机器人在松弛通道内正确收听,而不回复频道中所说的所有内容。

所以,这是我目前接近这个的方式:

controller.hears(['You\'re awesome','Help',"What would Jeremy say?", "Hello","Top 5", "Hi", "I love you", /^.{0,}jirabot.{0,}$/], ['direct_message','direct_mention','mention','ambient'],function(bot,message) {

   console.log(message);

 // This will show the last 5 created tickets in Zendesk
   if(message.text === "Top 5"){
     try{
         Do this thing
     });
   }catch(err){
     bot.reply(message, 'I\'m sorry I did not get that. Please try again.');
   }

 }

   else if (message.text === "You're Awesome"){
       bot.reply(message, 'Nah, You\'re Awesome <@'+message.user+'>');
     }
   else {
        bot.reply(message, 'I\'m sorry I don\'t understand');
        }

这种方式有效,但是如果有人说了别的话就会说我很抱歉我不明白。我如何让机器人不是每次都这么说?

我也尝试过这种方式,但机器人终止并在其中一个动作完成后不做任何其他事情:

  var hi = 'HI';
    var love = 'I LOVE YOU';

controller.hears([hi, /^.{0,}jirabot.{0,}$/],['direct_message','direct_mention','mention','ambient'],function(bot,message) {

  // start a conversation to handle this response.
  bot.startConversation(message,function(err,convo) {

      if (message.text.toLowerCase() === hi.toLowerCase()){
        bot.reply(message, 'What can I do for you? <@'+message.user+'>');
      convo.next();
    }else{
      bot.reply(message, 'Sorry, I don\'t understand');
      convo.next();
    }

  });
});
controller.hears([love, /^.{0,}jirabot.{0,}$/],['direct_message','direct_mention','mention','ambient'],function(bot,message) {

  // start a conversation to handle this response.
  bot.startConversation(message,function(err,convo) {

      if (message.text.toLowerCase() === love.toLowerCase()){
        bot.reply(message, 'No, I love you more <@'+message.user+'>');
      convo.next();
    }else{
      bot.reply(message, 'Sorry, I don\'t understand');
      convo.next();
    }

  });
});

任何想法或反馈都会很棒!

1 个答案:

答案 0 :(得分:1)

目前,您正在匹配用户输入中任何位置的任何字符串。因此,您会触发此用户输入:hi但也会触发此输入:hildjfI love shiitake mushrooms!

我按原样运行你的代码,它并没有触发所有用户输入到通道,只有听到的列出的字符串。

使用一些正则表达式来锁定匹配项,使用^表示字符串的开头,并使用$表示结尾。因此,要匹配只说字符串hi的用户,请使用模式'^hi$'。您不再匹配部分字符串,例如shiitake