Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get a list of all private channels with Slack API

I've been trying to get a list of all "groups" in my Slack team. However, even with admin privs, groups.list only provides the groups that the token owner's account belongs to.

The closest solution I've seen in my research involves getting a bot to sit in the channel. The bot's membership allows it to report on the channel, but then there's the logistical problem of getting the bot into every private channel, despite the fact that we can't list them programmatically.

The code I've used to dig up private channel listings:

import requests
import json

token = '...'

r = requests.post('https://slack.com/api/groups.list', data={'token': token, 'exclude_archived': 1})
if r.ok:
  privatechannels = { c['id']: c['name'] for c in json.loads(r.text)['groups'] }
  print(privatechannels)
like image 482
shaun m Avatar asked Jun 07 '16 22:06

shaun m


1 Answers

If you really need to monitor all private channels (and DMs) on your Slack workspace in real time there is another approach:

  • Ensure every user on your Slack provides a token to your app. This can be done by each user running through the OAuath installing process for your app once. That will create new token for each user, which you app can collect.
  • Iterate through all active user tokens to compile a list of all conversations (public channels, private channels, direct messages, ..) with conversations.list
  • Iterate through all existing conversations - using a token valid for that conversation - to collect all messages with conversations.history
like image 65
Erik Kalkoken Avatar answered Sep 22 '22 12:09

Erik Kalkoken