Skip to main content

Summary

This page explains the Slack integration at a glance and the two integration directions:
  • Outbound (Nota → Slack): Nota posts workflow status, alerts, and results using a bot token (or a quick incoming webhook).
  • Inbound (Slack → Nota): Slack sends @Nota mentions, DMs, and interactive button clicks (plan approvals, “file ticket”) into Nota to trigger workflows and in-thread replies.
Includes the required OAuth scopes, a setup checklist, testing steps, and common troubleshooting scenarios.

💬 Slack (team feature)

Connecting Slack has two directions:
  • Outbound (Nota → Slack) — Nota posts messages, threads, files, and reactions. Needs a bot token (or an incoming webhook for a single channel).
  • Inbound (Slack → Nota) — @Nota mentions and DMs get an in-thread reply, and Block Kit buttons (plan approve/reject, file-ticket) route back into Nota. Needs Event Subscriptions + Interactivity + a signing secret.
Set up outbound first, then inbound.
Unlike Jira / Linear / GitLab, Slack is one Slack app that powers both directions — you do not create a separate “Nota” account. The app’s bot user IS @Nota, and Nota tells its own messages apart automatically (it reads the bot user id off each event), so there’s no bot-identity field to configure and no self-reply loop.

Outbound — let Nota post to your workspace

Step 1 — Create the Slack app

  1. Go to api.slack.com/apps → Create New App → From scratch.
  2. Name it (e.g. Nota) and pick your workspace.

Step 2 — Add Bot Token Scopes

In OAuth & Permissions → Scopes → Bot Token Scopes, add:
Start with chat:write + app_mentions:read + the *:history / channels:read reads for the core chat experience; add reactions:write / files:write / pins:write only if you want those actions. Any scope you add later requires a reinstall (Step 4 of Inbound).

Step 3 — Install & copy the bot token

  1. Scroll up in OAuth & Permissions and click Install to Workspace, then Allow.
  2. Copy the Bot User OAuth Token — it starts with xoxb-.

Step 4 — Configure Nota

Go to app.trynota.ai/integrationsSlack Settings. Fill in: Click Update Settings — Nota uses it immediately. On save Nota also resolves and stores your Slack Team ID (via auth.test); that’s what routes inbound events to your workspace.
Outbound works. In Nota chat, say “post a hello to #qa-alerts on slack” — the message appears in the channel. (Invite the bot to the channel first if you see not_in_channel.)

Alternative — incoming webhook (single channel, no bot features)

If you only need result posts to one channel and don’t want the bot/chat features, skip the token: in the app’s Incoming Webhooks, activate it, Add New Webhook to Workspace, pick a channel, and paste the https://hooks.slack.com/services/… URL into the Incoming Webhook URL field in Nota. (Incoming webhooks can’t do threads, uploads, reactions, or inbound mentions.)

Inbound — @mentions, DMs & interactive buttons

For @Nota to reply, Slack must send events to Nota and Nota must verify they’re genuinely from Slack.
Slack’s Request URLs must be publicly reachable over HTTPS and answer Slack’s url_verification challenge. If you’re running Nota locally, point them at a public tunnel to your machine (not localhost). Production: https://app.trynota.ai/....

Step 1 — Enable Event Subscriptions

  1. Open api.slack.com/apps and select your app.
  2. In the left sidebar under Features, click Event Subscriptions.
  3. Toggle Enable Events to On.
  4. In Request URL, paste:
    Slack sends a verification challenge the moment you finish typing. Nota answers it and the field shows a green Verified ✓ — usually within a second. Nothing else needs to be configured first.
  5. Expand Subscribe to bot events and click Add Bot User Event once per row:
  6. Click Save Changes (bottom-right). If Slack shows a banner saying the app needs reinstalling, that’s Step 4.

Step 2 — Enable Interactivity

Block Kit buttons — plan Approve / Reject, File ticket — post back to a second, different URL.
  1. In the left sidebar under Features, click Interactivity & Shortcuts.
  2. Toggle Interactivity to On.
  3. In Request URL, paste:
  4. Click Save Changes.
Without this, Nota can still post the confirmation message, but clicking its buttons does nothing — HIGH-WRITE actions can’t be approved from Slack.
Note the path: interactivity is /api/slack/interactivity, events is /api/slack/events. Slack won’t warn you if you paste the same URL into both — button clicks would just silently fail.

Step 3 — Set the signing secret in Nota

Nota HMAC-verifies every real inbound event against your app’s Signing Secret.
  1. In your Slack app, click Basic Information in the left sidebar.
  2. Scroll to App Credentials and click Show next to Signing Secret, then copy it.
  3. In app.trynota.ai/integrationsSlack Settings, paste it into Slack Signing Secret.
  4. Click Update Settings.
Nota looks this secret up per tenant — it matches the inbound event’s workspace against the Slack Team ID it stored when you saved the bot token (Outbound Step 4), then verifies the signature with your app’s secret. That’s what lets each workspace run its own Slack app.Leave the field blank only for a single-app deployment that uses a platform-wide secret.
The Verified ✓ you got in Step 1 covers the handshake only — Nota answers that before any signature check, which is why the URL verifies on a brand-new app. Mentions, DMs, and button clicks are verified separately, here.

Step 4 — Reinstall & invite the bot

  1. If you added scopes or bot events after the first install, go to OAuth & Permissions → Reinstall to Workspace → Allow so the token carries the new grants.
  2. If the reinstall issued a new xoxb-… token, re-copy it into Slack Settings → Slack Bot Token and Update Settings.
  3. Invite the bot to each channel you want it active in — in Slack, type /invite @Nota in the channel (or use channel ⚙ Settings → Integrations → Add apps).

Step 5 — Test it

Mention the bot in a channel it’s been invited to. Send @Nota what does this workflow cover? — Nota replies in-thread within a few seconds.Then DM the bot directly. DMs route through the same handler via message.im, so a reply there confirms the whole inbound path end-to-end.
Mention the bot from your own account, not from the bot’s. Nota reads the bot user id off every event and skips messages it authored itself, so it never answers its own posts — that’s automatic, with nothing to configure.

Troubleshooting

A reinstall rotates the bot token — always re-copy the xoxb-… token into Nota afterward. Treat the bot token and signing secret like passwords; rotate them if either leaks.