Slack
Post, edit and react to Slack messages as a bot; read channels and threads, and look up people.
Connect a Slack app to work channels end to end: post messages and threaded replies (plain mrkdwn or Block Kit), edit and delete what the bot posted, send a message only one person can see, react with emoji, link to a message, read channel history and threads, browse channels and members, look someone up by email, and open a DM.
Connect
Sign in with Slack. Continue with Slack to install the bot into a workspace with the fifteen scopes shown on the consent screen. An organization admin configures the OAuth app once under Integrations → OAuth apps; after that, connecting is a consent screen.
-
Connecting installs the app's bot into the workspace you pick on Slack's consent screen - tools act as that bot, and the scopes shown there are the permission ceiling.
-
The bot still needs inviting to private channels it should read (/invite @yourbot in Slack).
-
Your organization can use Yekar.AI's managed Slack app or configure its own Slack OAuth app under Integrations → OAuth apps.
| Setting | Required | What it is |
|---|---|---|
Default channel (DEFAULT_CHANNEL) | No | Channel id used when a tool call omits channel - handy for notify-style automations. |
Tools
| Tool | Access | What it does |
|---|---|---|
Get bot identity (yekar.slack.get-me) | Read | Report exactly which bot, in which Slack workspace, this connection acts as. Use it to confirm a connection before acting, and to get the bot's own user id. |
Send message (yekar.slack.send-message) | Write | Post a message to a channel, DM or thread as the bot. Returns the message's ts, which is both its id and its thread key - pass it back as threadTs to reply to it, or as ts to edit or delete it. |
Update message (yekar.slack.update-message) | Write | Replace the text of a message the bot posted. A bot can only edit its own messages. The new text replaces the old entirely, and Slack marks the message as edited. |
Delete message (yekar.slack.delete-message) | Write | Delete a message the bot posted. A bot can only delete its own messages, and deletion is permanent - Slack has no undo. |
Send ephemeral message (yekar.slack.send-ephemeral) | Write | Post a message only ONE user can see, inside a channel. It vanishes when they reload Slack, is never stored in channel history, and cannot afterwards be edited, deleted or linked to. The user must already be in the channel. |
Add reaction (yekar.slack.add-reaction) | Write | Add an emoji reaction to a message as the bot. Emoji names carry no colons. Reacting again when the bot already reacted is reported as a no-op, not an error. |
Get message link (yekar.slack.get-permalink) | Read | Get the shareable Slack permalink for a message, to quote it elsewhere. The link only opens for people who can already see that channel. |
List channels (yekar.slack.list-channels) | Read | A page of the workspace's conversations - id, name, kind, topic and whether the bot is a member. This is where channel ids come from; every other tool addresses channels by id, never by #name. Slack returns no total for a page, so this reports whether more pages remain rather than a count. |
Get channel (yekar.slack.get-channel) | Read | Details of one conversation - name, kind, topic, purpose, archived state, and whether the bot is a member. Check isMember before reading history: a bot can only read channels it belongs to. |
Join channel (yekar.slack.join-channel) | Write | Add the bot to a PUBLIC channel so it can read history there. Private channels cannot be joined this way - someone must invite the bot from Slack with /invite. Joining a channel the bot is already in succeeds unchanged. |
Read channel messages (yekar.slack.read-history) | Read | A page of a channel's recent messages, newest first. The bot must be a member of the channel (run Join channel, or have it invited). Thread replies do NOT appear here - a parent message reports replyCount, and Read thread returns them. Authors come back as user ids; resolve names with Get user. |
Read thread (yekar.slack.read-thread) | Read | A page of one thread's messages, oldest first, starting with the parent. Pass the parent's ts - a reply's own ts addresses only that reply. The bot must be a member of the channel. |
List users (yekar.slack.list-users) | Read | A page of the workspace's members - id, handle, real name, title and whether the account is a bot or deactivated. Emails appear only if the app holds users:read.email. Slack returns no total for a page, so this reports whether more pages remain rather than a count; to find one person by address use Get user instead of paging. |
Get user (yekar.slack.get-user) | Read | One workspace member by user id, or by email address - the way to turn the user id on a message into a name, or an email address into the id needed to DM someone. |
Open direct message (yekar.slack.open-dm) | Write | Get the conversation id for a DM with one user, or a group DM with several, so Send message can post there. Slack reuses the existing conversation when one is already open - this does not create a duplicate or notify anyone by itself. |
Notes
- Continue with Slack through Yekar.AI's managed app, or configure your own Slack OAuth app under Integrations → OAuth apps before connecting.
- The OAuth consent requests these bot scopes:
chat:write,chat:write.public,channels:read,groups:read,im:read,mpim:read,channels:history,groups:history,im:history,mpim:history,channels:join,reactions:write,users:read,users:read.email,im:write. - Adding a scope later requires REINSTALLING the app before it takes effect; the token itself does not change.
- Invite the bot to every private channel it should use (/invite @yourbot in Slack). It can post to public channels without joining, but reading history always needs membership - Join channel does that for public channels.
- Find channel ids with List channels - every tool addresses channels by id (C0123ABCDEF), not by #name.
- Optionally set the Default channel property so automation steps can omit channel entirely.