Engineering11Engineering11 rooms
Notifications

Notifications — Slack & email

rooms tells the right people when something needs them — a policy to acknowledge, a document to review or approve, a contract to sign. Email works out of the box with zero setup. Connect Slack once, company-wide, and those same notices arrive as direct messages instead, with email as the automatic fallback. This is the setup page the compliance and deal-room workflows point to.

When notifications fire

Every notice targets the specific people involved — never a broadcast to everyone.

EventWho's notifiedTriggered by
Review requestedThe document's assigned reviewersSubmitting a controlled document for review
Approval requestedThe document's assigned approversSubmitting for approval
Approved / rejected / publishedThe version's authorFull approval reached, a rejection, or publishing
DistributionEveryone in the audience (with the link, attestation statement, and deadline) + an optional channel summaryDistributing a published document
Acknowledgement reminderAnyone still outstandingSending a reminder
Signature requested / executedEach signing party; internal signers by DM, counterparties always by emailDeal-room send-for-signature and full execution

Email — nothing to set up

Email is both the default and the fallback, delivered to each person's work address. It always works with no configuration. People outside your workspace — a signing counterparty, an external group member — always get email regardless of your Slack setup, because they aren't in your Slack workspace. If you never touch the settings below, everything above still reaches people, by email.

Connect Slack (admins, one time)

With Slack connected, review and approval requests, distribution notices, and deal-room signature requests arrive as direct messages to the right people, and a distribution can also post one summary to a channel. It's a single, company-wide setting — one Slack workspace per company, configured once, used by both compliance and deal rooms.

Step 1 · Create a Slack app

In the Slack workspace you want notices to come from, go to api.slack.com/apps → Create New App → From scratch. Give it a name your people will recognize (e.g. "Acme rooms") and pick the workspace.

Step 2 · Add the bot token scopes

Under OAuth & Permissions → Scopes → Bot Token Scopes, add these. Each maps to something rooms needs to do:

ScopeWhy it's neededRequired?
users:readLook up workspace usersRequired
users:read.emailMatch a person's work email to their Slack account (how DMs find the right person)Required
chat:writeSend messages (DMs and channel posts)Required
im:writeOpen a direct-message conversation with a personRequired
chat:write.publicPost to a public channel the bot hasn't been invited toOptional — only for channel posts
Channel posts: to post a distribution summary to a private channel, you must invite the bot to that channel (/invite @your-app). For a public channel, either invite the bot or add chat:write.public. DMs need no channel setup at all.

Step 3 · Install & copy the bot token

Click Install to Workspace and approve. Copy the Bot User OAuth Token — it starts with xoxb-. (Use the bot token, not the xoxp- user token.)

Step 4 · Paste it into rooms

In the web app, open People & access → Notifications. Paste the xoxb- token and, optionally, a default channel (like #compliance) for distribution summaries. Save. That's it — DMs start flowing on the next notification. The Compliance dashboard shows a status chip and links here.

Configure Slack in the web app — never in a Claude chat. The bot token is a secret. It's stored server-side, masked after you save it (never shown again), and never appears in any API response, audit record, or Claude conversation — the audit log records only that Slack was configured and which channel, not the token itself. This is deliberate: there is no Claude tool for it, so a token can never end up in a chat transcript. To rotate, paste a new token (leave the channel to keep it). To stop using Slack, clear the integration and email takes over again.

How a person gets matched to their DM

When rooms needs to DM someone, it takes their work email (the identity they signed in with), looks up the matching Slack user by email, opens a direct-message conversation, and posts the message there. Two things follow from that:

  • The same email must be on both sides — the person's rooms identity and their Slack account. If the emails differ, the lookup misses and they get the email version instead.
  • If someone isn't in your Slack workspace at all (most external people), there's nothing to match, so they get email. Nothing is ever dropped — a failed or impossible DM silently falls back to email.

Which channel gets used, and delivery modes

People are always DM'd individually. On top of that, a distribution can post one summary to a channel — your saved default, or a specific channel you name for that campaign:

"Distribute the Security Policy to all-employees and post it in #compliance."

Under the hood each notice has a delivery mode: both (prefer Slack, fall back to email — the default), email only, slack only, or none (suppress). You rarely set this by hand; the sensible default is "Slack if we can reach you, email otherwise." Where a company hasn't set its own token, a single workspace-wide fallback token can be configured by an operator, but the normal path is the per-company setup above.

Troubleshooting

SymptomLikely cause & fix
DMs aren't arriving; everyone gets emailNo token saved, or the token was revoked in Slack. Re-check People & access → Notifications and paste a fresh xoxb- token.
One person gets email while others get DMsTheir rooms work email doesn't match their Slack account email, or they're not in the workspace. Both are expected fallbacks — nothing is lost.
Channel summary doesn't post, but DMs workThe bot isn't in the channel. Invite it (/invite @your-app), or add chat:write.public for public channels.
Missing a scope error after installAdd the missing scope under OAuth & Permissions, then reinstall the app (scope changes require reinstalling) and paste the new token.
External counterparty didn't get a DMBy design — people outside your workspace always receive email, never a DM.
Bottom line: do nothing and everyone is reached by email. Connect Slack once and internal people get DMs instead, with email quietly covering anyone Slack can't reach. Back to Distribution & compliance.