Slack Event to use whenever a user who installed the app leaves the private channel - slack

We need to track the members of a slack channel whenever a member join/leave the public/private channel where installed user is member.
member_joined_channel and member_left_channel working fine for public channels.
But if user who installed the app leaves the private channel we are not getting member_left_channel event.
How to track that?
I see there is event like https://api.slack.com/events/message/group_leave.
But need to understand the difference between member_left_channel and group_leave.
Looks like group_leave is the subset event of member_left_channel

Related

Slack channel not found. Private slack channel from a docker container

I have set up a slack app to allow me to send notifications from my code to a private slack channel.
I have invited the bot to the channel, and when I run the app from the command line, all is good.
However, when I try and run it from a docker container, I get channel not found. If I try and use exactly the same code, and send a message to a bot in a public channel, no issues all is good.
Both bots have permissions, chat:write and chat:write.public
Why would this only be working on some machines and not others?
I know this probably doesn't have enough detail, but I'm not sure what is needed to help diagnose this.
More information:
Thanks to #Suyash Gaur I didn't know about the groups scope. I've now added groups:write and groups:history to the app, but am still getting the same error from the docker version of the app.
The membership of the channel I'm trying to write too shows
cwpr_notifications on Aug 3, 2021
Can post messages to specific channels in slack, send messages as #cwprnotifications, send messages to channels #cwprnotifications isn't a member of, manage private channels that cwpr_notifications has been added to and create new ones, and view messages and other content in private channels that cwpr_notifications has been added to.
I am using a bottoken and channel ID to send the message. Do I need something else for a private channel.
When I first used the bot from the command line run, I had to invite the app to the channel to get it to work, but surely I only need to do that once?
I've confirmed that the environment variables are getting passed in correctly.
With limited set of information provided, I can only say that:
If the public channel is accessible and private channel is not,
It seems like an issue of scopes.
For public channels, scopes start with channels:*
For private channels, scopes start with groups:*
Can you look into the app's configuration and confirm the permissions are configured correctly?

Slack Events API - Only able to subscribe to messages posted in public channels?

I just finished integrating a Slack app into my Slack workspace, and now I'm trying to simply subscribe to events so that I can respond to certain types of messages. However, I noticed that the POST request from the Slack Event Subscription process is only occurring when a message in a public channel is being posted, not private channels.
The bot user is in both the public and the private channel, so I'm not quite sure why this is happening. The only thing that I can see in the documentation (https://api.slack.com/apis/connections/events-api) is this:
Permission model
The Events API leverages Slack's existing object-driven OAuth scope
system to control access to events. For example, if your app has
access to files through the files:read scope, you can choose to
subscribe to any or none of the file-related events like file_created
and file_deleted.
You will only receive events that users who've authorized your app can
"see" on their workspace (that is, if a user authorizes access to
private channel history, you'll only see the activity in private
channels they are a member of, not all private channels across the
workspace).
Bot users may also subscribe to events on their own behalf. The bot
scope requested when workspaces install your bot covers events access
for both the Events API and the Real Time Messaging API.
but this still doesn't clarify why it's not subscribing to private channels, only public channels.
Assuming you are subscribed to 'Message' event.
To receive 'message' event from different conversation types, you need different scopes.
https://api.slack.com/events/message
Required scopes : channels:history, groups:history, im:history, mpim:history
Scope required for Private channel is groups:history

app_mention not firing in private message

I have a bot with event scopes app_mention and messages.im. It also has OAuth scopes app_mentions.read, channels.history, chat.write, groups.history, and im.history.
If I # mention my bot in a public channel, a thread off of a public channel, or directly message my bot I get an event. But if I'm in a private message with someone else and # mention my bot, I don't get any events from the #mention.
What is the correct event scope to enable to get the event?
you can't unfortuantly. app_mention only works in conversations the bot would have access to. You would need each user to directly give you access to im history and monitor every message event for a mention of the bot itself (probably either some regex or similar to look for the <#bot_name>.
I know there was a link_names part of the json object being sent for message events but you'd still need to check the message body to make sure its your bot being mentioned and not another user

How to see that someone made public channel private in Slack?

I have no idea how to do it using EventsAPI from Slack.
So, our bot does this:
Creates public channel #test
Invites the bot to the channel using user token
From now on, we are using bot token to post messages on the channel
The problem happens when someone converts public channel to private. The ID of the channel changes and the bot gets error channel_not_found.
Do you have an idea how to track this change and update ID on our system automatically? Bot is still the member of the channel!
I found a way and it was also confirmed by Slack Help team.
Basically when channel is converted to private, you get these events:
channel_deleted with id of your public channel
member_joined_channel with id of new private channel and bot_id
When you get member_joined_channel, retrieve from Slack the name of new channel and if it matches your previous public channel then you know it is the same one but private now.
Slack does not allow to create channels with the same name so this is the indicator.
I just tested it with production app and it works! :)
I don't think that is currently possible.
Naturally, you would expect a specific Slack event for that case to fire, when a channel is converted, but there does not appear to be one. If you need this I would suggest to write a request they add an event for it.
One thing you can do is restricted who can create private channels in your Slack workplace to limit the risk of unintended use.
However, you can prevent this error from occurring by checking which public and private channels exist with conversations.list, and which channels you bot is a member with conversations.member.

How do I receive only the messages that are direct messages to my bot user?

I have successfully setup my slack bot app, have enabled events etc. I want to receive any direct messages that the members of my slack team send to my bot. For this, I have only enabled Bot Events and No Team Events like below
However, I do not get any event on my webhook on this setting.
If I enable message.im event under Team Events, then I start getting events. But then, I get every message that the user (who has installed the app) sends to any other user in the team.
How do I get only the messages that are sent to my bot user?
Update 1
Based on this SO question I created a private channel with the bot user. Even then, the messages in the private channel do not arrive in my webhook with the above event subscriptions.
Update 2
After reinstalling the app, it seems to be working fine. I have only used it for few minutes after the reinstall so far. I will keep posting here how it goes. It would still be interesting to know what went wrong where.
It is normal behavior that your script receives all messages (for every channel your bot is a member of), not only the messages sent directly to your bot. At this time you can not filter further in the event configuration. So you need to filter out any unwanted message in your script handling the event.
See also this answer.

Resources