How it works
The system has three layers:- Workspace Connection links your Slack workspace to Mission Control via OAuth. The bot gets installed into your workspace and joins the channels you invite it to.
- Notification Rules control which event types get sent to which channels. Each rule maps a notification type (e.g., “Outlier Alerts”) to a specific Slack channel.
- Automated Dispatch fires notifications in real-time when events occur — no polling or manual triggers needed.
The bot can only post to channels it has been invited to. If a channel doesn’t appear in the dropdown, invite the bot to that channel first in Slack.
Connecting your workspace
Go to Administration > Slack Settings
Navigate to the Slack Settings page under Administration in the sidebar.
Click Add to Slack
Click the Add to Slack button. You’ll be redirected to Slack’s OAuth consent screen.
Authorize the app
Select the workspace you want to connect and click Allow. You’ll be redirected back to Mission Control with a success message.
Agency vs Client installs
- Agency users who install the app get the workspace flagged as an agency workspace. They can route notifications for any of their clients.
- Client users who install get a client workspace scoped to their account. Their notifications are automatically scoped to their own data.
Configuring notifications
Switch to the Notifications tab to manage notification rules.Adding a notification
Select a channel
Type to search for a Slack channel. Only channels the bot has been invited to will appear.
Choose the notification type
Select what type of event should trigger a message to this channel:
| Type | When it fires |
|---|---|
| System Errors | Any unhandled exception in the platform |
| Outlier Alerts | When an outlier definition detects a metric deviation |
| Task Failures | When a data pipeline job fails or enters dead letter |
| Daily Digest | Scheduled summary of notes, outliers, and key metrics |
| Note Created | When a new note is created (excludes private notes) |
| Note Updated | When an existing note is modified |
Select a client (agency users only)
Agency users with access to multiple clients will see a Client dropdown. Choose a specific client to scope the notification, or leave it as All Clients to receive notifications for every client.Client users don’t see this field — their notifications are automatically scoped to their account.
Daily digest
The daily digest sends a summary to configured channels at a set time each day. Configure it on the Connection tab:- Toggle Daily Digest on for the workspace
- Select the send time from the dropdown
- Click Save
- Notes summary (count by status)
- Outlier summary (count by severity)
- Key metrics snapshot
The daily digest requires the Celery Beat scheduler to be running. See the deployment section below.
Houston in Slack
When an outlier alert is posted, it includes an Ask Houston button. Clicking it starts a threaded conversation with Houston, Mission Control’s AI copilot, directly in Slack. Houston has access to the same tools as the web chat:- Channel performance metrics
- Outlier occurrence details
- Notes and reports
- Customer data
--client <client_id> in your first message to set the context, or ask Houston to switch by mentioning a client name.
Deployment
The Slack integration requires three background processes alongside the Django web server:Slack Bot (Socket Mode)
Celery Worker
Celery Beat
Environment variables
| Variable | Description |
|---|---|
SLACK_CLIENT_ID | Slack app OAuth client ID |
SLACK_CLIENT_SECRET | Slack app OAuth client secret |
SLACK_REDIRECT_URI | OAuth callback URL (e.g., https://id.lunarmc.ai/api/integration/oauth/slack) |
SLACK_SIGNING_SECRET | Slack app signing secret |
SLACK_BOT settings dict in settings.py provides fallback tokens for the Socket Mode bot process.
Architecture
Key backend files
| File | Purpose |
|---|---|
slack_bot/models.py | SlackWorkspace, SlackNotificationRule, SlackUserMapping |
slack_bot/signals.py | post_save hooks on Notes and IntegrationTask |
slack_bot/tasks.py | Celery tasks for async notification dispatch |
slack_bot/services/notification_service.py | Routing and delivery logic |
slack_bot/services/block_builder.py | Slack Block Kit message formatting |
slack_bot/utils.py | Target resolution, severity filtering |
slack_bot/views.py | REST API for workspace and rule management |
integration/views.py | OAuth callback handler (SlackOAuthCallback) |
Frontend files
| File | Purpose |
|---|---|
slack-settings/slack-settings.component.* | Connection and Notifications tabs |
notification-rule-dialog/notification-rule-dialog.component.* | Add/Edit notification dialog |
.png?fit=max&auto=format&n=Frm2GFbmok4D-yJA&q=85&s=93c3ebd47542af65d1cd06d8563a7f6e)