Slack API:channels.create后跟channels.invite / info返回channel_not_found错误

时间:2018-01-18 18:51:11

标签: javascript promise slack-api botkit

我正在使用botkit和nodejs松弛开发人员工具包构建一个松散的机器人。我有一系列的api调用,第一个是查找用户(globalMembers),第二个是基于一个频道数组创建一个频道,最后一个调用是将每个用户添加到每个新创建的频道。

要做到这一点,我有几个承诺,以循环通道和成员。成功创建了频道,然后我将每个成员和频道([[member1, channel1], [member1, channel2]....])的唯一数组发送到将邀请成员加入相应频道的承诺。

无论如何(我正在使用频道ID),我都会收到" channel_not_found"我尝试获取频道信息或邀请成员加入该频道时出错。我是承诺的新手,可能在某处有错误,并感谢任何帮助。

以下是我的代码:

var channels = ["gameplay", "gamelog", "map"];
var channelData = channels.map(channelCreate);

var channelResults = Promise.all(channelData);

return channelResults.then(created => {
    var channelMembers = [];
    _.each(created, function(channel) {
        // globalMembers is the user list
        _.each(globalMembers, function(member) {
            var array = [channel, member];
            // prints array of arrays [channel, member]
            channelMembers.push(array);
        });
     });

     var memberData = channelMembers.map(channelJoin);

     var memberResults = Promise.all(memberData);

     return memberResults.then(joined => {
        console.log(joined, "is the joined data");
     });

});


var channelCreate = function channelCreate(name) {

      // Join the channels
      return web.channels.create(name).then((res) => {
        console.log("created labyrinth channel: " + JSON.stringify(res.channel));            
        return res.channel;

      }).catch((err) => { console.log(err) }); // End channels.join call 

}; // End channel create

var channelJoin = function channelJoin(params) {

      var member = JSON.stringify(params[1]["id"]);
      var channel = JSON.stringify(params[0]["id"]);
      console.log(member, "is the member that will join " + channel);

        web.channels.info(channel).then(channelData => {
          console.log(channelData);
          if (channelData) {
            // Invite each user to the labyrinth chat channel
            return web.channels.invite(channel, member)
              .then(res => {
                return res;
              }).catch((err) => { console.log(err) });

          }
        }).catch(err => console.log(err));

}; // End channel Join

1 个答案:

答案 0 :(得分:3)

问题在于以下几行:

var channel = JSON.stringify(params[0]["id"]);

params[0]["id"]将是频道ID(例如" C123456")。但是,当您通过JSON.stringify()传递时,您最终会在字符串中使用转义引号(例如" \" C123456 \"")。将其传递给web.channels.info()后,将找不到此频道。

这样可以解决您看到的即时错误(channel_not_found),但您也需要为member解决此错误,因为您稍后会致电web.channels.invite()