Slack api conversations.history returns error: not_in_channel
I'm starting out with the Slack API
and trying to just get a list of messages.
Here are my steps:
- Created a Slack app and gave it
channels:read
andchannels:history
scope (alsore-installed
it) - Queried the list of channels with
conversations.list
(this worked fine) - From the output of
conversations.list
, I found a channel that I use and copied theid
- Used the
conversations.history
api
with thechannelid
from step 3
Result:
{ "ok": false, "error": "not_in_channel" }
I'm not at all sure what is happening here. I definitely have messages in the channel, and the documentation page for that api does not say anything about this "not_in_channel" error code.
What am I doing wrong?
After a long time of investigations (~2 hours), I found an easy approach. For Caleb's answer, I didn't understand how to invite a Bot to the channel. Hence, I am posting this answer.
Go to your Slack Channel and type the following as a message.
/invite @BOT_NAME
Eg: If your Bot name is SRE Incident Manager
the command would be as follows.
/invite @sre_incident_manager
As soon as you start typing @
, Slack will automatically suggest. So it becomes easy. For this, the Bot needs to be added to your Slack Workspace.
PS: Original answer.
This error arises when you are using the bot oauth token and the bot is not invited to the channel. To solve this you need to
- Invite the bot(slack app) to join the channel.
- Use the OAuth Access Token instead
To add Bot to your channel you need to write /invite @Bot_name in the slack channel
The error not_in_channel
has the exact meaning, your custom Slack app should be added to the channel.
Exact solution 1
To resolve the error, in the Web Slack interface:
- Open
channel settings
- Click on the
Integrations tab
- Click
Add apps
and find your custom app.
Slack app might have different interface, see Iryna Vernik's answer.
Alternative solution 2
Give access to the bot to all channels by adding workspace wide scope, for example, chat:write.public
. Depends on your needs and security requirements.
Alternative solution 3
To access the channel chat from API specify Incoming webhook
. Slack will generate a unique URL with the token per each channel. Only convenient for a few channels.