Slack Integration
Pulsar posts to Slack in one of two ways. Pick one when you create the channel:
| Mode | What you need | Behaviour |
|---|---|---|
| Webhook | An incoming webhook URL | Every alert and recovery is a new message in the channel the webhook was created for. |
| Bot token (recommended) | A Slack app's Bot User OAuth Token plus the channel ID | The first alert of the day for a site starts a thread; every later alert and recovery for that site that day is posted as a reply, so one incident does not flood the channel. A new thread starts each day (UTC). |
If both are filled in, the bot token is used and the webhook is ignored.
Option A: Webhook
Step 1: Create an incoming webhook
- Go to Slack API Apps and create an app (or open an existing one)
- Open Incoming Webhooks and switch it on
- Click Add New Webhook to Workspace
- Pick the channel alerts should go to
- Copy the webhook URL (
https://hooks.slack.com/services/...)
Step 2: Create the channel in Pulsar
- Go to Settings → Notification Channels → Create Channel
- Enter a Channel Name (for example "Ops Slack")
- Set Channel Type to Slack
- Paste the URL into Webhook URL and leave the bot token fields empty
- Click Create
Option B: Bot token with threading
Step 1: Create a Slack app with a bot
- Go to Slack API Apps and create an app from scratch
- Under OAuth & Permissions → Scopes → Bot Token Scopes, add
chat:writeandchannels:join(the second lets Pulsar join public channels by itself; without it, invite the bot manually) - Click Install to Workspace and approve
- Copy the Bot User OAuth Token (starts with
xoxb-)
Step 2: Find the channel ID
In Slack, right-click the channel → View channel details. The channel ID (for example C0123456789) is at the bottom of the panel.
Step 3: Create the channel in Pulsar
- Go to Settings → Notification Channels → Create Channel
- Enter a Channel Name
- Set Channel Type to Slack
- Under For threading support, paste the token into Bot Token and the ID into Channel ID. The Webhook URL can stay empty
- Click Create
Step 4: Let the bot into the channel
Pulsar joins public channels automatically. For a private channel, invite the bot yourself with /invite @YourAppName in that channel. Until it is a member, sends fail with channel_not_found.
Step 3 (both modes): Link the channel to your sites
A channel sends nothing until it is attached to a site.
- Open the site in Pulsar
- In the Notification Channels card, click Link Channel
- Pick the Slack channel
Repeat for every site that should post there. You can also use the Test action on the channel row in Settings to send a test message at any time.
Message format
Alerts are posted with a warning marker and recoveries with a check mark:
:warning: Pulsar Alert
mystore.com is DOWN — HTTP 503 Service Unavailable
:white_check_mark: Pulsar Recovery
mystore.com is back UP after 13 minutes
With a bot token, the recovery lands in the same thread as the alert it resolves.
Multiple channels and sites
Create one Pulsar channel per Slack channel you want to post to, then link the right ones to each site. Every alert for a site goes to all channels linked to that site. Routing different alert types to different Slack channels is not supported: a linked channel receives all of that site's alerts.
For severity-based paging use PagerDuty, which opens an incident for outages and resolves it on recovery.
Troubleshooting
channel_not_found
The bot is not a member of the channel. Invite it with /invite @YourAppName, or double-check the channel ID.
not_in_channel or missing_scope
The app is missing the chat:write scope, or was reinstalled after scopes changed. Reinstall the app and paste the new token into the channel's settings.
Webhook stopped working
- Confirm the Slack app is still installed in the workspace
- Confirm the channel the webhook was created for still exists
- Send a Test from the channel row in Settings
Rate limiting
Slack rate-limits incoming webhooks and chat.postMessage. The bot token mode is gentler on busy channels because repeat alerts become thread replies rather than top-level posts.