Multi-Channel Notifications¶
Configure where and how you receive approval requests so you never miss critical decisions.
Edition notes
- Open Source: notifications via email + mobile app.
- Enterprise: adds Slack and Mattermost notifications.
- Mobile & watch apps: proprietary (not open source) clients that can be used with self-hosted/open-source Preloop deployments.
Overview¶
When an approval is required, Preloop can notify you through multiple channels simultaneously:
- 📧 Email - Instant email with approve/decline buttons
- 📱 Mobile - Push notifications to iOS/Android app
- 💬 Slack - Messages in your Slack workspace (Enterprise)
- 💬 Mattermost - Messages in your Mattermost instance (Enterprise)
- 🌐 Web Dashboard - Real-time notifications in the UI
Key benefit: Receive notifications where YOU are, not where the system expects you to be.
Notification Channels¶
Email Notifications¶
Always enabled by default - Email is the most reliable notification channel.
How It Works¶
- Approval request created
- Email sent to all approvers within seconds
- Email includes:
- Tool name and description
- All arguments (formatted)
- Who requested it
- When it was requested
- Direct Approve and Decline buttons
- Link to full details in web dashboard
Example Email¶
Subject: Approval Required: pay
Tool Call: pay
Description: Send a payment to a recipient
Arguments:
• recipient: alice@example.com
• amount: $1,000
Requested by: claude-code-agent (via bob@acme.com)
Requested at: Jan 25, 2025 at 2:30 PM
[Approve] [Decline]
View full details: https://preloop.ai/approvals/req_abc123
📸 Screenshot needed: approval-email.png
One-Click Approval¶
Click Approve or Decline directly in the email: - No login required (secure token in URL) - Instant decision recorded - Confirmation email sent - Tool executes (if approved) or errors (if declined)
Email Settings¶
Configure in Settings → Notifications → Email:
- Enabled: ON (cannot be disabled - required fallback)
- From address:
hello@preloop.ai - Reply-to: Your support email (optional)
- Include arguments: ON (show full tool arguments in email)
- Include context: ON (show who requested and when)
Mobile Notifications¶
Available on iPhone, iPad, Apple Watch, and Android
How It Works¶
- Approval request created
- Push notification sent to all registered mobile devices
- Tap notification to open approval details in app
- One-tap approve or decline with Face ID/Touch ID authentication
iOS App Features¶
iPhone:
- Rich push notifications with tool details
- Open the request in the app for full context
- Approve or decline directly from mobile
- Biometric authentication where supported by the device
Apple Watch:
- Wrist notifications for time-sensitive approvals
- Approve or decline from watch
- Haptic feedback confirmation
- Force touch for additional options
Setup¶
Step 1: Install App
Install the Preloop mobile app from the relevant store:
Step 2: Register Device
- Open the Preloop mobile app
- Sign in with your Preloop account
- If you use a self-hosted deployment, enter your server URL before signing in
- Grant notification permissions when prompted
See Mobile Apps for the current mobile setup flow and visuals.
Slack Notifications¶
Available with Slack integration
How It Works¶
- Approval request created
- Message posted to configured Slack channel
- Interactive buttons for Approve/Decline
- Threaded discussion for team collaboration
- Real-time updates when decision is made
Example Slack Message¶
🔔 Approval Required
Tool: pay
Recipient: alice@example.com
Amount: $1,000
Requested by: claude-code-agent (Bob Smith)
Requested at: 2:30 PM
[Approve] [Decline]
When someone approves:
📸 Screenshot needed: slack-notification.png, slack-approval-thread.png
Setup¶
Step 1: Install Slack App
- Go to Integrations → Slack
- Click Add to Slack
- Select workspace
- Authorize permissions:
- Post messages
- Read channels
- Add interactive components
- Click Allow
Step 2: Configure Channels
Option A: Default Channel (All Approvals)
Option B: Tool-Specific Channels
# Send deployment approvals to #deploys
tool: deploy
channel: "#deploys"
# Send payment approvals to #finance
tool: pay
channel: "#finance"
Option C: Team-Based Channels
Step 3: Configure Notifications
- Enabled: ON
- Default channel:
#approvals - Mention approvers: ON (tag @user in message)
- Thread replies: ON (use threads for discussion)
- Show arguments: ON (include full tool arguments)
Slack Features¶
Interactive Buttons:
- Click Approve/Decline directly in Slack
- No need to open web dashboard
- Authenticated via Slack user ID
Threaded Discussions:
- Team can discuss before approving
- All comments visible in approval history
- Decision maker clearly identified
Status Updates:
- Real-time status changes (pending → approved → executed)
- Tool execution results posted to thread
- Errors posted if execution fails
Mentions:
@usermentions for specific approvers@channelfor urgent approvals (optional)@herefor high-priority requests (optional)
Slack notifications are configured from the notification settings and approval workflow surfaces in the console.
Mattermost Notifications¶
Available with Mattermost integration
Similar to Slack, but for Mattermost:
- Install Mattermost app
- Configure webhook URL
- Select channels for notifications
- Interactive buttons for approval
Mattermost follows the same workflow pattern: connect the workspace, choose the destination channel, and let approvers respond from chat.
Web Dashboard Notifications¶
Always available - Real-time notifications in the web UI.
How It Works¶
- Approval request created
- Notification bell badge increments (top-right corner)
- Dropdown shows pending requests
- Click to view full details
- Approve or decline in modal
Dashboard Features¶
Notification Bell:
- Badge count shows pending requests
- Red badge for urgent/escalated requests
- Click to open dropdown
Pending Requests List:
- Sorted by time (oldest first)
- Shows tool name, requester, time
- Color-coded by priority
- Click to open details
Request Details Modal:
- Full tool information
- All arguments formatted
- Request timeline
- Approve/Decline buttons
- Add reason for decision
📸 Screenshot needed: approval-request-list.png, approval-request-detail.png
Real-Time Updates¶
Dashboard uses WebSocket for live updates: - New requests appear instantly - Status changes update in real-time - Badge count updates automatically - No page refresh needed
Notification Priority¶
Configure different notification channels based on priority:
Priority Levels¶
Low Priority:
- Email only
- No mobile push
- Web dashboard only
Normal Priority (Default):
- Email + Mobile
- Web dashboard
- Slack (if configured)
High Priority:
- Email + Mobile + Slack
- Critical alert on iOS
- @mention approvers in Slack
Urgent/Escalated:
- All channels
- Critical alerts on mobile
- @channel in Slack
- SMS (coming soon)
Configuring Priority¶
Option 1: Per-Tool Priority
Option 2: Conditional Priority
Option 3: Time-Based Priority
tool: rollback_deployment
priority: |
timestamp(now()).getHours() < 9 || timestamp(now()).getHours() > 17 ? "urgent" : "normal"
Notification Settings¶
Global notification settings in Settings → Notifications:
General Settings¶
Quiet Hours:
quiet_hours:
enabled: true
start: "22:00" # 10 PM
end: "08:00" # 8 AM
timezone: "America/Los_Angeles"
exceptions: ["urgent"] # Still notify for urgent
Do Not Disturb:
dnd:
enabled: false
until: "2025-01-26T08:00:00Z" # Specific end time
exceptions: ["deploy_production"] # Still notify for these tools
Notification Digest:
digest:
enabled: false
frequency: "hourly" # hourly, daily
channels: ["email"] # Only digest email, not mobile/Slack
Per-Channel Settings¶
Email:
- ✅ Enabled (always)
- ✅ Include arguments
- ✅ Include context
- ✅ One-click approval links
Mobile:
- ✅ Enabled
- ✅ Sound
- ✅ Badge
- ✅ Critical alerts for urgent
Slack:
- ✅ Enabled
- ⚪ Default channel:
#approvals - ✅ Thread replies
- ✅ Mention approvers
- ⚪ Urgent: @channel
Mattermost:
- ⚪ Enabled (requires integration)
- ⚪ Webhook URL
- ⚪ Channel
Web:
- ✅ Enabled (always)
- ✅ Real-time updates
- ✅ Badge count
- ✅ Browser notifications
Multi-Channel Strategy¶
Recommended Setup¶
For Individual Users:
# Primary: Mobile (fastest response)
mobile: true
# Fallback: Email (if mobile missed)
email: true
# Visibility: Web dashboard
web: true
For Teams:
# Team visibility: Slack channel
slack: true
channel: "#team-approvals"
# Individual alerts: Mobile + Email
mobile: true
email: true
# Backup: Web dashboard
web: true
For High-Stakes Operations:
# All channels for critical operations
tool: deploy_production
notification:
email: true
mobile: true
slack: true
web: true
escalation:
enabled: true
channels: ["mobile", "slack"] # Escalation gets mobile + Slack only
Notification Content¶
What's Included¶
Every notification includes:
Required Information:
- Tool name
- Tool description
- All arguments (formatted)
- Requester (user or agent)
- Request timestamp
Optional Information:
- Why approval is required (policy/condition)
- Historical context (previous calls)
- Estimated impact (if available)
- Rollback plan (if applicable)
- Related documentation links
Formatting¶
Arguments:
Complex Arguments:
Sensitive Arguments:
Testing Notifications¶
Test All Channels¶
In Web Dashboard:
- Go to Settings → Notifications
- Click Test Notifications
- Select channels to test
- Click Send Test
- Verify you receive test notifications
Expected result:
- Email arrives within 30 seconds
- Mobile push within 10 seconds
- Slack message posted instantly
- Web badge increments
Test Approval Flow¶
Create Test Approval:
- Configure a test tool with approval required
- Call the tool from MCP client or API
- Verify notifications arrive on all configured channels
- Approve from ONE channel
- Verify other channels update with approval status
Expected result:
- Notifications arrive on all channels
- Approval from any channel works
- All channels show "Approved" status
- Tool executes successfully
Advanced Configuration¶
Custom Webhooks¶
Send notifications to custom endpoints:
tool: deploy
notification:
webhook:
url: "https://my-service.com/approvals"
method: "POST"
headers:
Authorization: "Bearer token"
body: |
{
"tool": "{{tool.name}}",
"args": {{tool.args}},
"requester": "{{user.email}}"
}
Conditional Channels¶
Different channels based on conditions:
tool: pay
notification:
email: true
mobile: args.amount > 1000 # Only mobile for large amounts
slack: args.amount > 10000 # Only Slack for very large
Multiple Slack Channels¶
Post to different channels based on tool:
# Deployments to #deploys
tool: deploy_*
channel: "#deploys"
# Payments to #finance
tool: pay
channel: "#finance"
# Database to #database
tool: drop_table
channel: "#database"