懒散的api找到现有的频道

时间:2018-04-30 18:33:29

标签: slack slack-api

我正在玩松弛的api来创建集成。我能够使用

成功创建一个松弛的通道
 this.http.post(slackApiHost + '/channels.create', payload, {headers: headers})
            .subscribe(
                res => {
                    console.log(res);
                    resolve(res)
                },
                err => {
                    console.log('error:' + err)
                }
                )
        })

有效负载看起来像

var payload = {
        "name" : channelName
    };

因此,如果频道已经存在,它将以name_taken失败。这很棒。但是,我需要找到现有频道的频道ID,以便我可以将它用于我的目的。我该怎么做呢?

3 个答案:

答案 0 :(得分:1)

要获取所有现有频道的列表,您可以使用conversations.list。这是最灵活的方法,如果您愿意,可以检索任何类型的频道。

如果您要按特定名称查找频道,则需要首先检索所有频道的列表,然后根据完整列表运行您自己的名称。允许您直接按名称搜索频道的API方法不存在。

请注意,如果您正在寻找私人频道,此方法只会检索您(Slack应用程序/您的机器人用户的安装程序)被邀请的频道。

答案 1 :(得分:0)

当前没有直接的Slack API可以通过其名称查找松弛通道。但是您可以使用conversations.list来解决此问题,这是可以使用的正确代码:

const slack = new SlackWebClient(token);
const channelNameToFind = "test";

for await (const page of slack.paginate("conversations.list", {
  limit: 50,
})) {
  for (const channel of page.channels) {
    if (channel.name === channelNameToFind) {
      console.log(`Found ${channelNameToFind} with slack id ${channel.id}`);
      break;
    }
  }
}

这是正确的方法,因为它可以确保您在找到合适的频道后立即停止列出频道。

祝你好运!

答案 2 :(得分:0)

您可以使用内置的 admin.conversations.search 然后迭代找到的结果。

另一种快速棘手的解决方案: 尝试发送 chat.scheduleMessage 然后如果发送 chat.deleteScheduledMessage 或捕获错误。 红宝石示例:

{{1}}