GATE dashboard

Guides

Connect to Slack

Slack is the one comms integration where the bot is a passenger, not the driver. A human installs the GATE Slack app and binds channels from the dashboard; the bot can only inspect its Slack state. Once a channel is bound, GATE routes messages to the bot, the bot replies, and reactions on its messages become feedback signals.

This page walks through the human setup, then explains how messages flow and what the bot can and can't do.

Prerequisites

  • A Slack workspace where you can install apps (workspace admin rights, or an admin who can approve the install).
  • A GATE org with at least one bot.
  • Dashboard access as the bot's master — binding a channel is a human-only dashboard operation. The bot cannot bind or unbind itself.

Step 1 — Install the GATE Slack app

An org admin installs the GATE Slack app once, from the dashboard Slack settings. GATE completes the connection and stores the workspace token securely. This is a per-org install — you do it once, not per bot.

To confirm the install landed, ask your bot to check — it can look up which Slack workspaces are installed in its org.

If that comes back empty, the org hasn't installed the app yet (or the bot's org couldn't be resolved).

Unlike the Google integrations, Slack isn't on the per-user-delegate model GATE's other integrations use. Auth is the GATE Slack app's own OAuth install, and GATE holds the workspace bot token encrypted at rest. The contrast with those other integrations is ownership, not storage: a Slack install belongs to the org's workspace, while a delegated integration connection is one user's own account.

Step 2 — Bind a channel or DM to your bot

From the dashboard: Settings → Slack → pick the workspace, pick the channel, pick this bot, choose a listen mode, and Save. The listen mode controls how much traffic reaches the bot:

ModeBehavior
mentions_onlyRoutes only when the bot is @-mentioned (user mention, subteam mention, or text-prefix @<display-name>). Start here.
ambientCaptures everything as context, but only routes mentions.
always_respondRoutes every message in the channel.

The bot can verify its bindings (read-only) — ask it to list its active channel and DM bindings.

For a one-off without a permanent binding, anyone can type /gate <bot-id-or-name> <message> in any channel — that creates an ephemeral binding on the fly.

Step 3 — How messages flow

Once a channel is bound, an inbound Slack message is HMAC-verified, checked against the workspace and binding, and routed to the bot. You'll see a threaded "is on it…" placeholder and a 👀 reaction, which turns into ✅ on a reply or ❌ on an error. Reactions on the bot's messages register as positive / negative / neutral signals.

A few behaviors worth knowing:

  • File attachments are folded into the routed text as [shared file: ...] — the bot does not auto-download files.
  • A message with no matching binding is silently dropped (but still logged for audit).
  • The bot's subteam @<display-name> auto-creates on paid Slack tiers; on free tiers, text-prefix mentions still work.

What your bot can and can't do today

Can: read messages in bound channels, respond, and report on its own Slack state — ask it for the org's installed workspaces, its own bindings, or a 24-hour summary of routed, captured, dropped, and errored messages (including whether it needs reauthorization).

Can't: create or remove bindings (dashboard only), or proactively post to Slack on its own. The bot's view into Slack is read-only — it can tell you what's happening but can't set up or send anything itself.

If your bot's Slack status shows it needs reauthorization, Slack revoked the token and a human must reinstall the app from the dashboard.

Going deeper

Previous
Connect your accounts
Powered by GATE