slack bot scope missing while making api request

saf1 picture saf1 · May 18, 2017 · Viewed 11.6k times · Source

I have made a slack app in which I have a bot. I have selected channels:history, channels:read, channels:write under my permission scope, and also I have passed scopes

"scope":"bot channel:history channel:read channel:write"

while doing my oauth2 verification (using python), and I got a response where the scope is

"scope":"identify,bot,channels:history,channels:read,channels:write"

along with client and bot access tokens.

Now when I do an api call to fetch history of a channel in which my bot is invited to, I get

{ 
  ok: false,
  error: 'missing_scope',
  needed: 'channels:history',
  provided: 'identify,bot:basic' 
}

Can someone please tell me where I am going wrong. How can I PROVIDE the channels:history scope in my api call. This is really driving me nuts. Should I be using the client access token, ie xoxp-xxxx, instead of bot token, ie xoxb-xxxx ?'

Thanks!

Answer

saf1 picture saf1 · May 29, 2017

For people having this problem in the future;

your integrated bot has full access to the slack api, whereas a bot in a slack app don't, as it will used publicly. When you successfully finish oauth2, you should get 2 tokens, user access token and bot token. The user token is used to read history from any channel/groups, and the bot access token is used to write to them. This means you constantly have to be switching from user token to bot access token in your app.

enter image description here

Also, remember that bot-user MUST be a member of a private channel which you want him to connect to.

Hope that helps.

Ps, if any found a better way going about this, feel free to answer below.