Slack
Connect Slack to reply in a pull request's Slack thread when you review it, ask people for a review there, and announce the pull requests you open.
Slack is optional: everything else in Revue works without it. Once it's connected, Revue posts in Slack as you, so your messages look like ones you typed yourself. Nothing runs on a server and there's no bot: Revue talks to Slack directly with your own sign-in.
What you get:
- Notify in Slack in the Submit review dialog: a reply in the thread that links the pull request ("@Ann I approved your pull request …").
- A Slack threads tab on every pull request, with Ask for a review.
- Announce in Slack when you open a pull request from Revue.
- Your Slack channels suggested after
#in every comment box. - Message templates you can change, with a live preview, emoji and attached files.
Connect Slack#
- Open Settings → Accounts and find the Slack card (or click the Slack card on the welcome screen).
- Click Connect Slack.
- Click Sign in with Slack. Slack opens in your browser.
- Pick your workspace and click Allow.
- Back in Revue, the card shows you (your picture and name) with the workspace.
To add another workspace, click Add Slack workspace on the same card. To remove one, click Sign out next to it and confirm: Revue forgets that workspace's token, and reviews no longer reply in Slack there.
Once a workspace is connected, the card's Slack messages… button opens Settings → Slack messages: who people are on Slack, the default channels and the wording of what Revue posts.
Advanced: if the browser can't get back to Revue
After you allow access, Slack sends the browser back to Revue at http://localhost:47392/callback. If that doesn't work (another program uses port 47392, or the browser blocks the redirect), copy the address the browser ended on and paste it in the box under If the browser can't get back to Revue, paste the address it ended on: on the sign-in page.
Advanced: paste a token instead
Under Advanced: use a token instead on the Slack sign-in page you can paste a User OAuth Token (it starts with xoxp-) from a Slack app of your own (see Use your own Slack app), then click Connect Slack.
- A bot token (
xoxb-…) is refused: Revue posts as you, so it needs a user token. - Revue checks the token with Slack (
auth.test) and saves it only if Slack accepts it.
Advanced: what Revue asks Slack for (scopes)
Revue asks for user scopes only: no bot user, no bot scopes.
| User scope | What it's for |
|---|---|
search:read | Find the threads that link a pull request |
chat:write | Reply and announce, as you |
channels:read | The public channels to announce in (and a channel's members, for picking who to tag) |
groups:read | The private channels to announce in (and their members) |
users:read | Find who to mention (names and pictures) |
users:read.email | Find an author by email |
emoji:read | Your workspace's own emoji, in the message formats |
files:write | Post the files attached to a message format |
channels:history | Find GitHub's message about a new pull request in a public channel, to announce it in its thread |
groups:history | The same in a private channel |
Revue reads a channel's messages only for In the thread of GitHub's message, when it's turned on: the newest few, for a minute after you open a pull request. A thread to reply in is found from Slack's search results.
Accounts connected before Revue asked for emoji:read, files:write, channels:history or groups:history keep working, without those features. Revue shows a note asking you to sign in to Slack again.
Where the token is kept
Your Slack token is a sign-in secret like your code host tokens: it's kept on this computer only, never in the synced config folder, either in a file only you can read or in the system's credential store (Settings → Storage → Sign-ins). See Privacy and security and Files, sync and settings for one computer.
Each computer signs in to Slack on its own.
Reply in Slack when you submit a review#
When you submit a review, Revue can reply in the Slack thread where the pull request was shared, tagging its author:
@Ann I approved your pull request web #12 Fix the login form ↗ Revue
The reply says "I approved…", "I requested changes on…" or "I left comments on…", depending on your review.
Guide: Reply in Slack when you approve#
- Open the pull request and click Submit review….
- Tick Notify in Slack. Revue looks for the Slack threads that link to the pull request.
- Reply in shows the thread's channel. If several threads link to the pull request, click the channel to pick another (the one you picked last time is preselected). The arrow button opens the thread in Slack.
- Tag shows who the reply mentions. People Revue found by their email are just shown; there's nothing to pick. Click + to tag someone else too.
- Below, the reply appears as Slack will show it. Point at a review button to see its reply; click Edit to change it.
- Write your review and click Approve. Revue submits the review, then posts the reply in the thread.
The review buttons wait until Revue has found the thread and knows who to tag. The hint under the Slack part says what's missing ("Pick the thread to reply in", "Pick who to tag, or choose No mention").
If the reply fails, your review is still submitted. A notice, The review is in, but the Slack reply failed, shows Slack's error with Retry.
Who gets tagged#
Revue finds the pull request's author on Slack by itself:
- First, the People on Slack list.
- Otherwise, the author's email on the code host, looked up in Slack.
- Otherwise, the one person in your Slack workspace who's plainly them: the same email, the same name before the
@at another address ([email protected]for[email protected]), the same handle as their login, or the same full name. If two people match, it doesn't count.
Someone found by email (steps 2 and 3) is tagged with nothing to choose. If nothing finds them, the Tag line shows Who is
- Pick who they are. Revue saves your pick to the People on Slack list, so you're not asked again, and you can click them to pick someone else later.
- Click No mention to name the author in plain text, without tagging anyone.
Advanced: how threads are found and what's remembered
- Revue uses Slack's search (
search.messages) for the pull request's address, as you, so it only finds messages you can see. It reads up to 200 search results. - Each result is checked for a real link to the pull request, in the text or in a link preview. A link to one of its tabs or comments counts too.
- A reply's thread is taken from its permalink. Each thread is offered once, newest first.
- Only channels are offered, not direct messages.
- If no thread you can see links to the pull request, the box unticks itself and says No Slack thread you can see links to this pull request.
- Revue remembers per pull request whether Notify in Slack was ticked and which thread you picked (in
slack-choices.jsonin the config folder). - The search runs quietly once the pull request loads. Results less than 5 minutes old are reused, so ticking the box right after opening the Slack threads tab doesn't search again.
- Revue looks for the author's email on their profile, then in their commits in the pull request. A commit whose address isn't on any account counts when its author's name is theirs. Addresses containing
noreplyare skipped. Bitbucket shows emails only in commits. - Only reviews sent from the Submit review dialog reply in Slack.
The Slack threads tab#
With Slack connected, every pull request gets a Slack threads tab (number key 7, after Checks). It lists every Slack thread that links to the pull request, newest first. The tab's label shows how many there are.
Each thread shows:
- the channel (a lock on private ones) and, with several workspaces, the workspace;
- the message that links the pull request and its author;
- when it was posted, and the number of replies when Slack's search gives it;
- Open in Slack.
Click the refresh button (Search Slack again) to search again. If nothing links to the pull request, the tab says No Slack threads link to this pull request.
Ask for a review#
At the top of the Slack threads tab, the Ask for a review button opens a dialog for after you've made changes: ask the people who reviewed before to look again, or ask someone new. The same is behind Request review in the pull request's header (with or without Slack: without it, the review is only requested on the code host).
Guide: Ask for another review after changes#
- Open your pull request and press 7 (or click Slack threads), then click Ask for a review.
- In the dialog, check who's picked. People who reviewed before (not you, nor the author) start picked. Click a name to leave them out, or Add to pick someone else.
- Choose where to ask:
- Request their review on GitHub (or Bitbucket, Forgejo): asks the code host again, which notifies them.
- Post in the Slack thread: replies in the thread with a tag for each of them.
- Check the preview of the Slack message under In Slack it reads. The pencil at its top right changes it by hand (what you write is posted); the arrow beside it goes back to the format.
- Click Ask for a review, and confirm: the dialog says who's asked, where, and warns about anyone not linked to a Slack person (their tag wouldn't notify them).
The eye next to a picked person ignores them: they're never picked or suggested again (bots, people who've left), on all your computers. The card lists who's ignored, to bring them back.
If someone can't be found on Slack, their name shows Who is it?: click it and pick them among the channel's members (remembered in People on Slack), or choose to name them in plain text.
Advanced: details
- People are found on Slack the same way as authors: the People on Slack list, then their email.
- The thread is the one you pick, else the one Notify in Slack last used, else the newest.
- Post in the Slack thread is greyed out with (no thread links to it) when no thread links to the pull request.
- The message uses the Review request format (see Message formats).
- If the Slack message fails, a notice The Slack message failed offers Retry.
Open in Slack#
Open in Slack opens the message in Slack's desktop app when it's installed, otherwise in the browser. If the app doesn't start, Revue opens the browser instead and tells you why.
To choose, open Settings → Apps → Slack:
- Open in: Slack app (the default) or Browser.
- Slack app: shows Found Slack at …, or Slack app not found. Type a path or click Choose… to use a Slack that wasn't found, or another build.
Advanced: where Revue looks for Slack, per OS
- Linux: a desktop entry in the XDG data folders:
slack.desktop(a package),com.slack.Slack.desktop(Flatpak) orslack_slack.desktop(snap). - macOS:
Slack.appin an Applications folder. - Windows:
%LOCALAPPDATA%\slack\slack.exe.
The field takes a program, a macOS app or a desktop entry. The app gets slack://channel?team=<team>&id=<channel>&message=<ts>, plus thread_ts for a reply.
Channels in comments#
With Slack connected, every comment box suggests your Slack channels: type # and a letter. This works in review comments and replies, the review's message, a new pull request's description and Jira comments.
- Use ↑ ↓ to move, Enter or Tab to pick, Esc to close.
- Private channels show a lock. With several workspaces, the workspace is shown too.
- The pick goes in as a Markdown link, like
[#dev](https://acme.slack.com/archives/C0123). It reads as a link on GitHub, Bitbucket, Forgejo and in Jira, and opens the channel for anyone in the workspace.
A #name you type out that is exactly one of your channels also becomes a link when the comment is posted.
Advanced: what's left alone
#followed by a digit (#123is an issue or pull request), code, links, web addresses (…/page#part), headings anda#bin the middle of a word.- A channel name that exists in several of your workspaces isn't linked automatically: pick it from the list instead.
- The channels are the ones you're in (public and private, not archived), listed once, when you first type in a comment box, and again after you add or remove a workspace.
- Without the workspace's address, the link goes to Slack's web app (
https://app.slack.com/client/<team>/<channel>).
Announce a pull request you open#
When you open a pull request from Revue (see Opening a pull request), the form has Announce in Slack (optional). Pick a channel, public or private, and the form shows exactly What's posted.
By default, with a Jira ticket, that's two messages, as you:
- In the channel: the ticket's link, for example
ABC-123 Document types management. - In that message's thread: the pull request and its reviewers, tagged, for example
web #42 Document types management @Ann @Bob ↗ Revue.
Without a ticket, it's one message in the channel.
Pull request link text and Ticket link text (above the preview) change what the links read for this announcement only; leave them empty for the default, as the preview shows.
Reviewers are found on Slack like authors: the People on Slack list, then their email. If that doesn't work, the form asks Who is … on Slack? with the channel's members, or No mention to name them in plain text.
Pick Don't post in Slack to skip it for this pull request. If posting fails, the pull request is still open: a notice The pull request is open, but posting in Slack failed shows Slack's error with Retry, which posts only what didn't go through.
The default channel#
You don't have to pick the channel every time. The form starts on a default, which you can set:
- for all repositories, and for each service and account: Settings → Slack messages → Where to post in Slack;
- for one repository: its section in Settings → Repositories, Where to post in Slack.
Any of them except the one for all repositories can also be Don't announce. The form shows where its channel came from ("This repository's default", "Last used for this repository" …).
Advanced: which default wins
The form starts on the first of these that is set:
- the repository's default (Settings → Repositories), whatever the case of its name (one set for
Acme/Webholds for a link toacme/web); - the default of the account the repository is listed for;
- the default of its service (GitHub, Bitbucket, a Forgejo server);
- the default for All repositories;
- the channel you last announced in for that repository;
- otherwise no channel.
Don't announce at one of the first three levels starts the form with no channel, whatever the levels after it say.
A default remembers its workspace, so with several workspaces the right one is always picked. If a saved channel can't be used (you left it, it was deleted, or its workspace was signed out of), the form says so and starts on the next one. Settings shows the same warning next to it.
Picking a channel in the form changes only that pull request. The channel it's announced in becomes the repository's "last used".
In the thread of GitHub's message#
When a channel is subscribed to a repository with the GitHub app for Slack (/github subscribe owner/repo), the app posts Pull request opened by … on its own for every new pull request. Turn on Wait for automatic GitHub Slack thread (Settings → Slack messages → Where to post in Slack) and Revue's announcement goes in that message's thread instead of beside it:
- You open the pull request. The form closes as usual, and a notice says Revue is waiting for GitHub's message.
- Revue reads the channel's newest messages every 5 seconds until a message from an app links the new pull request (it's recognised by the pull request's address, not by names), for up to a minute.
- Only the reply is posted in that message's thread: GitHub's message takes the place of the message in the channel, which isn't posted. When the announcement is one message (no ticket, or the two-message switch off), that message goes in the thread.
If GitHub's message doesn't come within the minute, or Revue can't read the channel, the announcement is posted in the channel as before, and a notice says why.
The thread is remembered as the pull request's Slack thread: Notify in Slack in the review dialog and Ask for a review start on it.
It applies to GitHub pull requests only: Bitbucket and Forgejo pull requests are announced in the channel as before.
Reading the channel needs the channels:history scope (and groups:history for a private channel). Accounts connected before Revue asked for them get a note under the switch: sign in to Slack again. Until then, announcements go in the channel.
People on Slack#
Settings → Slack messages → People on Slack tells Revue who someone on a code host is on Slack. Use it for people Revue can't find by email, for example a Bitbucket user who hides theirs.
To add someone:
- Pick the service (GitHub, Bitbucket or a Forgejo server you're signed in to).
- Type their login on that service.
- With several workspaces, pick the workspace.
- Type their name to find them on Slack, then click Add.
Each row reads like GitHub · ann → @Ann. Click Remove (the × on the row) to delete one. Picks you make on the Tag line of the review dialog appear here too. People you set here always come before an email match.
Message formats#
Settings → Slack messages → Message formats lets you change the wording of everything Revue posts. Each message has its own editor with a Preview that shows it as Slack would, and Reset to default to put the built-in text back.
The messages:
| Message | Built-in text (English) |
|---|---|
| New pull request: the message in the channel | {ticket_link} |
| New pull request: the reply in its thread | {pr_link} {reviewers} {revue_link} |
| Review reply: approved | {author} I approved your pull request {pr_link} {revue_link} |
| Review reply: changes requested | {author} I requested changes on your pull request {pr_link} {revue_link} |
| Review reply: commented | {author} I left comments on your pull request {pr_link} {revue_link} |
| Review request (Slack threads tab → Ask for a review) | {reviewers} please review {pr_link} {revue_link} |
The text is Slack's own formatting ("mrkdwn"): *bold*, _italic_, ~struck~, `code`, <address|text> for a link and :emoji:.
Placeholders#
Words in braces are filled in when the message is posted. The full list is under Placeholders on the settings page.
| Placeholder | What it becomes |
|---|---|
{pr_link} | The pull request's link: repository, number and title (web #42 Document types management) |
{pr_url} | The pull request's address |
{pr_title} | Its title |
{pr_number} | Its number |
{repo} | The repository's name |
{branch} | Its branch |
{target} | The branch it merges into |
{ticket_link} | The ticket's link: key and title |
{ticket} | The ticket's key (ABC-123) |
{ticket_url} | The ticket's address |
{ticket_title} | The ticket's title |
{reviewers} | The reviewers, tagged |
{author} | The pull request's author, tagged (you, for a new one) |
{me} | You, tagged |
{additions} | Lines added |
{deletions} | Lines deleted |
{files} | Files changed |
{revue_link} | A small "↗ Revue" link that opens the pull request in Revue |
{verdict} | What the review says: approved, changes requested, commented or review requested (replies only) |
A placeholder Revue doesn't know is flagged under the editor ("Unknown placeholders, posted as written: …") and posted as you wrote it.
Advanced: how templates are filled
- Write
{{and}}for literal braces. - An empty placeholder leaves no gap: runs of spaces become one, and lines lose spaces at their ends.
- Without a ticket address,
{ticket_link}is the key and title as plain text. Without a ticket, it's empty. - A new pull request without a ticket (or with an empty channel message) is posted as one message: the "reply in its thread" text.
- A message format left empty shows (nothing: not posted) in its preview.
- Your changes are saved a moment after you stop typing, or when you leave the editor. A text equal to the built-in one counts as built-in again (and follows the message language).
- Templates are kept in
settings.jsonunderslack_messages. Nothing in them is secret, so they sync and can be shared.
Message language#
Message language picks the language of the built-in texts and the {verdict} words: Same as the app (the default), English or Čeština. It's independent of the language Revue is shown in. A text you changed is posted as you wrote it.
The built-in texts in Czech
| Message | Čeština |
|---|---|
| Review reply: approved | {author} Schvaluji tvůj pull request {pr_link} {revue_link} |
| Review reply: changes requested | {author} Žádám o změny v tvém pull requestu {pr_link} {revue_link} |
| Review reply: commented | {author} Přidávám komentáře k tvému pull requestu {pr_link} {revue_link} |
| Review request | {reviewers} prosím o revizi {pr_link} {revue_link} |
The new pull request's messages are the same in both languages.
One message or two#
The switch A new pull request with a ticket: the ticket's message, the pull request in its thread is on by default. Turn it off to post both texts as one message in the channel. Without a ticket, the pull request is one message either way.
Ticket keys only#
With Links to a pull request or ticket show only its ticket key on, a pull request's link reads just the ticket key its title has (TMB-1140 in place of web #1203 TMB-1140: ShiftBadge fixes), and a ticket's link just its key. A pull request whose title has no key keeps the long text. Either link's text can also be written by hand when you announce (see above).
Emoji#
:name: emoji are posted as written, and Slack draws them. The preview draws them too: Slack's standard emoji (with skin tones like :wave::skin-tone-3:) and your workspace's own emoji, shown as images.
- Type
:and two letters in an editor to get emoji suggestions, your workspace's first (↑ ↓, Enter or Tab, Esc). - A name that isn't an emoji is flagged under the editor, with a suggestion when it looks like a typo: ":ballon: isn't an emoji in Acme; did you mean :balloon:?"
Advanced: emoji details
- Standard emoji use Slack's names where they differ from GitHub's, such as
:face_with_rolling_eyes:,:flag-cz:or:male-technologist:. - The workspace's own emoji come from
emoji.list(aliases followed), listed once a day per workspace and cached in Revue's cache folder. - With several workspaces, the preview uses the workspace picked for People on Slack (else the first).
- Comment boxes on the code host suggest the standard emoji only, since their text goes to the code host, not Slack.
- Accounts connected before Revue asked for
emoji:readsee the standard emoji only, with the note "Sign in to Slack again to see your workspace's own emoji (Settings → Accounts)." An app of your own needs the scope added under OAuth & Permissions first.
Attachments#
Each message can be posted with files, such as a celebration GIF on "approved". Click Attach file… above its editor (you can pick several at once), or drop files on the editor. The preview shows a thumbnail of each picture, and the name and size of other files, each with × to remove it.
Files can be up to 10 MB each; a bigger one is refused with a notice. The Open pull request form lists the attachments under What's posted.
If the files can't be posted, the text is posted anyway. A notice, Posted in Slack, but without its files, says why, with Retry to share just the files in the message's thread.
Advanced: where attachments are kept and how they're posted
- Attached files are copied into Revue's config folder, under
slack-attachments/<message>/<file>, where<message>isnew_pr,new_pr_reply,approved,changes_requested,commentedorreview_requested. They're listed insettings.jsonunderslack_messages.attachments, so they sync with your settings. A name that's already there gets a number, likeparty (2).gif. Removing an attachment deletes its copy. - Revue uploads with Slack's current API:
files.getUploadURLExternalfor each file, thenfiles.completeUploadExternal. - Pictures (PNG, JPEG, GIF) are uploaded without a channel, then posted with the text as one message that shows them under it (
chat.postMessagewith an image block for each). Slack returns that message's ID, so Open in Slack goes to it, and a new pull request's reply can go in its thread. Other files then follow in the message's thread. - Other files alone, a text over 3,000 characters, or pictures Slack refuses in the message:
files.completeUploadExternalshares the files with the text as one message. Slack doesn't return that message's ID, so Open in Slack goes to its thread, and a channel message that gets a reply is posted as text first, its files first in its thread. - Accounts connected before Revue asked for
files:writeget the text only, and a note to sign in to Slack again ("Sign in to Slack again to post attachments (Settings → Accounts)"). Retry doesn't help then.
The "↗ Revue" link#
Messages can end with a small ↗ Revue link ({revue_link}) that opens the pull request in Revue for anyone who has it. The switch End messages with a small ↗ Revue link turns it off.
The link is revue://open?url=<pull request address>, which Revue opens once it's registered for revue:// links (Settings → Apps; see Links and opening from anywhere). You can set a web page of your own in the field under the switch instead, one that forwards to Revue.
Advanced: hosting your own forwarding page
The link is then <page>?url=<pull request address>, and the page sends the browser on to revue://open?url=…. Any static host will do. The page is:
<!doctype html><meta charset="utf-8"><title>Revue</title>
<script>location.replace("revue://open" + location.search)</script>
<p>Opening the pull request in Revue… If nothing happens, register Revue for
revue:// links (Settings → Apps).</p>
To run Revue's server yourself, see Self-hosting revue-server.
Use your own Slack app#
Revue's own Slack app works for any workspace. If your workspace prefers an app of its own, create one from Revue's manifest.
Guide: Create your own Slack app#
- In Revue, open Settings → Accounts → Slack and unfold Use your own Slack app.
- Click Copy app manifest.
- Go to https://api.slack.com/apps and click Create New App → From a manifest.
- Pick your workspace and paste the manifest.
- Under OAuth & Permissions → PKCE, click Opt in.
- Check that Redirect URLs has
http://localhost:47392/callback. - Under Basic Information → App Credentials, copy the Client ID.
- Back in Revue, paste it into Client ID and click Save.
- Click Sign in with Slack.
Instead of steps 5 to 9, you can click Install to Workspace, copy the User OAuth Token (xoxp-…) from OAuth & Permissions, and paste it under Advanced: use a token instead on the Slack sign-in page.
Leave Client ID empty to sign in with Revue's own app.
Advanced: the manifest
{
"display_information": {
"name": "Revue",
"description": "Replies in the Slack thread of a pull request when you review it, and announces the pull requests you open, as you."
},
"oauth_config": {
"redirect_urls": ["http://localhost:47392/callback"],
"scopes": {
"user": ["search:read", "chat:write", "channels:read", "groups:read", "users:read", "users:read.email", "emoji:read", "files:write", "channels:history", "groups:history"]
}
},
"settings": { "org_deploy_enabled": false, "socket_mode_enabled": false, "token_rotation_enabled": false }
}
Advanced: PKCE, public distribution, token rotation and apps without PKCE
-
PKCE makes the app a public client with no secret to ship (Slack can't undo it without its support). Slack lets a PKCE app send the browser back to
http://localhost, which only works with user scopes, and that's all Revue asks for. -
Public distribution: an app installed only in its own workspace is an internal app. To use one app in several workspaces, turn on Manage Distribution → Activate Public Distribution. Without it, other workspaces get "This Slack app can only be installed in its own workspace".
-
Token rotation can stay off. If it's on, Revue renews the token with its refresh token before it runs out, and saves both. A PKCE app's refresh token expires after 30 days unused; then you connect again.
-
Without PKCE (an app that's already a confidential client), Slack only redirects to HTTPS. Host a page that forwards the browser to Revue with the same query, register its address as the redirect URL, and fill in Client secret (only without PKCE) and Redirect URL (empty: http://localhost:47392/callback) under Use your own Slack app. The page:
<!doctype html><meta charset="utf-8"><title>Revue</title> <script>location.replace("http://localhost:47392/callback" + location.search)</script> <p>Back to Revue… If nothing happens, copy this page's address into Revue (the sign-in page → paste the address it ended on).</p> -
Builds can carry a default app:
REVUE_SLACK_CLIENT_ID(andREVUE_SLACK_CLIENT_SECRET,REVUE_SLACK_REDIRECT_URLfor an app without PKCE), read at run time or when Revue is built. The app set in Settings comes first. See Command line and environment variables. -
The client secret is stored with the sign-in secrets, never in the synced config folder.
For workspace admins#
- If the workspace requires app approval, people who connect Revue send you a request. Approve Revue under Manage apps → Requests (or your workspace's app management settings). They connect again after that.
- Revue posts only when someone reviewing (or opening a pull request) asks it to, in a thread or channel they picked, as themselves. It reads nothing in the background.
- Restricting the app to some channels doesn't apply: it acts as each user, with their own access.
Privacy: what Revue reads and posts#
- Reads: Slack's search results for a pull request's address, a channel's member list (to pick who to tag), the workspace's people and channels you're in, its own emoji and names; with Wait for automatic GitHub Slack thread on, a channel's newest messages for a minute after you open a pull request, to find GitHub's message about it. All of it is read as you, so you only see what you could see in Slack.
- Posts: only what you ask for (a review reply, a review request, an announcement), where you picked, as you. Link previews are turned off in Revue's messages.
- Keeps: the workspace's people list and its emoji in Revue's cache folder for a day (deleted when you sign out of that workspace), and nothing else from Slack.
See Privacy and security for how Revue stores sign-ins.
Advanced: Slack API methods and rate limits
Revue calls search.messages, chat.postMessage, chat.getPermalink, conversations.members, users.conversations, users.list, users.info, users.lookupByEmail, emoji.list, auth.test, files.getUploadURLExternal and files.completeUploadExternal; and conversations.history while it waits for GitHub's message about a pull request you opened (see In the thread of GitHub's message).
Requests are paced per Slack rate limit tier (about 20 a minute for search, the people list and emoji). A 429 waits out Slack's Retry-After before trying again, a few times at most.
Since May 2025, apps distributed outside the Slack Marketplace get very low limits on conversations.history and conversations.replies (one read a minute, 15 messages each). Revue doesn't call conversations.replies, and reads at most 15 messages at a time. With such limits, waiting for GitHub's message may get only one or two reads in its minute: the first is 5 seconds after the pull request is opened, when GitHub's message is usually there. An internal app (your own, in its own workspace) keeps Slack's regular limits.
REVUE_SLACK_API_BASE points Revue at another Slack API address (used for tests).
Troubleshooting#
| What you see | What to do |
|---|---|
| "Slack didn't accept the token: sign in to Slack again (Settings → Accounts)" | The token was revoked or expired. Sign in to Slack again. A lost sign-in is also flagged with your other sign-ins. |
| "Your Slack workspace hasn't approved Revue yet: ask an admin to approve it (Manage apps → Requests), then connect again" | An admin has to approve Revue first (see For workspace admins). |
| "This Slack app can only be installed in its own workspace: …" | Your own app needs public distribution, or use an app of that workspace. |
| "The Slack app needs the … user scope: add it under OAuth & Permissions, then connect again" | Your own app is missing a scope. Add it, then sign in again. |
| "This is a bot token: Revue posts as you, so paste the User OAuth Token (xoxp-…)" | Paste the User OAuth Token, not the Bot token. |
| "You aren't in this channel: join it in Slack first" | Join the channel in Slack, then Retry. |
| "This channel is archived" / "Slack can't find this channel (or you can't see it)" | Pick another channel or thread. |
| "This Slack thread is gone" | The thread was deleted. Pick another one, or click the tab's refresh button. |
| "Slack is limiting requests: try again in a minute" | Wait a bit, then Retry. |
| Notify in Slack unticks itself | No thread you can see links to the pull request. Share its link in a channel first. |
| No workspace emoji in the preview, or files not posted | Your account was connected before Revue asked for those scopes: sign in to Slack again. |
| Open in Slack opens the channel, not the message | That's a limit of Slack's app links. Choose Browser under Settings → Apps → Slack to open the message itself. |
| The ↗ Revue link is missing | It's turned off, or your build has no server and no page is set (see The "↗ Revue" link). |
For other problems, see Troubleshooting and FAQ.