【问题标题】:Slack API: channels.create followed by channels.invite/info returns channel_not_found errorSlack API:channels.create 后跟 channels.invite/info 返回 channel_not_found 错误
【发布时间】:2018-01-18 18:51:10
【问题描述】:

我正在使用 botkit 和 nodejs slack 开发工具包构建一个 slack 机器人。我有一系列的 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

【问题讨论】:

    标签: javascript promise slack-api botkit


    【解决方案1】:

    问题出在下面一行:

    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()

    【讨论】:

    • 这很有意义!虽然我无法通过 API 调用发送 params[0]["id"],因为 slack 不采用 PHP 样式的数组对象 (foo[0]),而是返回错误“invalid_array_arg”。我一直在想办法解决这个问题,这就是我尝试对其进行字符串化的原因。
    • 想出了(当然)非常简单的答案,即将JSON.stringify(params[0]["id"]); 更改为params[0]["id"].toString()。感谢您帮助确定问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多