Connect Slack to Rig

    Sync channels, people and message history, threads included, into the warehouse. Most of what a company knows about a customer is written down in Slack and nowhere else, which is why the decision worth thinking about here is not how to connect it but which channels you want in scope.

    Requirements
    Permission to install an app into your Slack workspace
    Time required
    2 mins to connect, then a minute per channel

    Before you start

    Membership scopes the messages, not the directory
    Rig reads a channel's messages only if the bot is a member of it. That is not a policy Rig layers on top, it is how Slack's API works: message history is returned for channels the bot has joined and refused for every other one. So you scope what Rig can read by inviting rather than by configuring, and getting a channel back out of scope is a /remove away.

    Two things are not scoped that way, and it is worth knowing which. The channel list and the user directory come from workspace-wide endpoints, so every non-archived public channel's name and metadata syncs whether or not the bot was ever invited to it, and so does your member directory. No message content comes with either. If you are working out what actually leaves Slack, that is the line: messages by invitation, names and metadata workspace-wide.

    • There is no token to create and nothing to paste. Slack authorises through a consent screen.
    • Many workspaces require an admin to approve a new app. Worth finding out first if yours is one of them.
    • Direct messages are never in scope, whatever you do next.

    Connect it in Rig

    1. In Rig, open Connections and go to Sources & actions.
    2. Search for Slack and open the card.
    3. Click Authorize with Slack and approve the consent screen in the window that opens. Check the workspace name at the top of it, since Slack will happily install into whichever workspace your browser is currently signed in to.
    4. Back in Rig, click Test. Leave the sync until you have invited the bot somewhere, or the first run has nothing to read.

    Invite the bot to your channels

    In each channel you want ingested, type /invite and pick the Rig app. That is the whole step, and it is the one that decides what syncs.

    For a whole workspace, there is an opt-in alternative. The source carries a join_all_public_channels option, off by default, which makes every sync begin by joining the bot into every public channel. Channels created later are picked up automatically, so you are not repeating the exercise each quarter. It covers public channels only, because Slack's API cannot self-join a private channel or a DM, and that is also usually where people want the line drawn.

    A newly invited channel backfills its entire history
    Each channel tracks its own position independently rather than sharing one workspace-wide watermark. So inviting the bot to a channel that has existed for three years pulls those three years in, not just what has been said since the invite. This is deliberate, and it is why you can add channels gradually without having to reconnect anything.

    What Rig pulls in

    Slack lands in its own slack schema, in three tables.

    • Channels: the channels the bot can see, with their names and metadata.
    • Users: the workspace directory, plus anyone from an external org who appears in a shared channel. External people are not in Slack's directory listing, so Rig sweeps the channels it belongs to and resolves them individually. Without that, their messages would land with an ID and no name attached.
    • Messages: one table holding both top-level messages and thread replies, keyed on the channel and the message timestamp.

    Replies are messages, so they live in the same table rather than a separate one, and a thread_ts column tells you which is which. It equals the message's own timestamp for a thread root, differs for a reply, and is absent for a standalone message that never became a thread. Slack's history endpoint returns thread roots but not the replies inside them, so Rig fetches those separately for any message that has a reply count.

    Good to know

    • Slack is slow to read, and Rig is built around that. History calls are rate limited to roughly one a minute for apps outside Slack's Marketplace, so a workspace with a hundred and forty channels does not finish in a single run. Progress is banked as it goes and picked up where it stopped, rather than being thrown away and restarted, so a large workspace converges over several nights instead of never finishing.
    • Freshness comes before backlog. Every run tops up the channels already covered before it resumes backfilling the ones that are not. So recent conversation stays current from the first night, even while a long history is still loading underneath.
    • This connection only reads. Its Slack app is granted read scopes and nothing else, so inviting the bot cannot cause it to post. Rig posting into Slack, which is how alerts and workflow output reach a channel, is a separate Slack app with its own install, so set that up separately if you want it.
    • A reply added to a very old thread may not be picked up. Rig finds replies through their thread root, and once a root sits below a channel's watermark Slack does not resurface it. New threads and active ones are unaffected.

    Troubleshooting

    • The connection tests fine but no messages arrive: the bot has not been invited anywhere. Run /invite in one channel and sync again.
    • A channel is in the channels table but has no messages: the bot is not a member of it. Because the channel list syncs workspace-wide, a channel appearing there is not evidence that the invite worked. Run /invite in it and the next sync backfills its history. Slack shows app members in the channel's member list like anyone else.
    • Turning on whole-workspace mode fails to join channels: the workspace was authorised before that permission was requested, and Slack does not apply new permissions to an existing installation. Re-authorise the connection in Rig.
    • Message authors show as IDs: they are from an external organisation who has since left every shared channel, so there is no longer anywhere to resolve them from. People still in a shared channel resolve normally.
    • The first sync seems to be taking days: on a large workspace it is. Check the channels table is filling and recent messages are landing. Both mean it is working through the backlog rather than stuck.

    What people use this for

    • Measure support and help-channel volume and response
    • Track team activity across channels
    • Surface answers and alerts in Slack

    More ideas for using Slack

    Was this guide helpful?