Latest
Sign InSign Up
Product
Resources
DocsTaskmasterHamster StudioCareersAbout
Latest
Sign InSign Up

Same-day shipping for your product team

Ā© 2025 Wheel Go Fast, Inc. All Rights Reserved.

GitHubDiscord
Latest
Resources
  • Docs
  • Careers
  • About
Legal
  • Terms of Service
  • Privacy Policy
  • Cookie Policy
    • Quick Start
    • Installation
    • Configuration
    • Briefs
    • Tasks
    • Collaboration
    • AI Assistant
    • Creating Teams
    • Inviting Members
    • Roles & Permissions
    • GitHub
    • Linear
    • Slack

Slack Integration

Connect your Slack workspace to receive real-time notifications about project activities, team updates, and important milestones directly in your team channels.

Overview

Why Integrate Slack?

The Slack integration provides:

  • Real-time Notifications: Instant updates about project activities
  • Team Alignment: Keep everyone informed without leaving Slack
  • Contextual Information: Rich message formatting with relevant details
  • Interactive Actions: Respond to notifications directly from Slack
  • Customizable Alerts: Control what notifications you receive and where

Key Features

Channel Notifications

  • Project updates posted to designated channels
  • Team-specific notifications based on project membership
  • Customizable message formatting and content
  • Thread organization for related activities
  • Mention support for relevant team members

Direct Messages

  • Personal notifications for task assignments
  • Private updates for sensitive project information
  • Digest summaries for daily/weekly activity
  • Reminder notifications for due dates and deadlines

Interactive Messages

  • Quick actions directly from Slack messages
  • Status updates without leaving Slack
  • Approval workflows for project decisions
  • Task creation and management shortcuts

Setup Process

Prerequisites

Before setting up the Slack integration, ensure you have:

  • Slack Workspace Admin: Admin permissions in your Slack workspace
  • Platform Team Admin: Admin or owner role in your platform team
  • Channel Access: Access to channels where you want notifications
  • App Installation Rights: Ability to install apps in your workspace

Step-by-Step Setup

1. Install Platform App in Slack

Add our app to your Slack workspace:

  1. Visit Slack App Directory: Go to the Slack App Directory
  2. Search for Platform: Find our official Slack app
  3. Install to Workspace: Click "Add to Slack" button
  4. Grant Permissions: Review and approve requested permissions
  5. Choose Default Channel: Select initial channel for notifications

2. Connect Slack to Your Platform Team

Link your Slack workspace with your platform team:

  1. Access Integration Settings: Go to Team Settings → Integrations
  2. Select Slack: Find Slack in available integrations
  3. Authorize Connection: Complete OAuth flow with Slack
  4. Verify Installation: Confirm the connection is active

3. Configure Channel Mappings

Set up which platform activities notify which Slack channels:

{
  "channel_mappings": [
    {
      "slack_channel": "#general",
      "notifications": [
        "team.member.added",
        "project.created", 
        "milestone.completed"
      ]
    },
    {
      "slack_channel": "#dev-team",
      "notifications": [
        "task.created",
        "task.assigned",
        "task.completed",
        "github.pull_request"
      ]
    },
    {
      "slack_channel": "#design",
      "notifications": [
        "brief.updated",
        "file.uploaded",
        "comment.added"
      ]
    }
  ]
}

4. Set Personal Preferences

Configure individual notification preferences:

  1. Direct Message Settings: Choose which personal notifications to receive
  2. Mention Preferences: Set when you want to be mentioned in channels
  3. Digest Schedule: Configure daily/weekly summary preferences
  4. Do Not Disturb: Set quiet hours and weekend preferences

Configuration Options

Notification Types

Team Activities

  • Member Added: New team member joins
  • Member Removed: Team member leaves or is removed
  • Role Changed: Member role or permissions updated
  • Team Settings: Team configuration changes

Project Updates

  • Project Created: New project started
  • Project Status Changed: Project moves between phases
  • Milestone Reached: Important project milestones achieved
  • Deadline Approaching: Upcoming project deadlines

Task Management

  • Task Created: New tasks added to projects
  • Task Assigned: Tasks assigned to team members
  • Task Status Updated: Task progress and status changes
  • Task Completed: Tasks marked as finished
  • Task Overdue: Tasks past their due dates

Content Activities

  • Brief Updated: Project briefs modified or published
  • File Uploaded: New files added to projects
  • Comment Added: New comments on briefs or tasks
  • Mention: You're mentioned in comments or discussions

Message Formatting

Rich Message Cards

Slack notifications use rich formatting for better readability:

{
  "blocks": [
    {
      "type": "header",
      "text": {
        "type": "plain_text", 
        "text": "šŸŽÆ Task Completed"
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "*Task:* Implement user authentication API\n*Project:* Mobile App Redesign\n*Completed by:* <@U123456789>\n*Duration:* 2 days"
      },
      "accessory": {
        "type": "button",
        "text": {
          "type": "plain_text",
          "text": "View Task"
        },
        "url": "https://platform.com/tasks/task_123"
      }
    },
    {
      "type": "context",
      "elements": [
        {
          "type": "mrkdwn", 
          "text": "šŸ“… Completed on time • šŸ”— <https://platform.com/projects/proj_456|Mobile App Redesign>"
        }
      ]
    }
  ]
}

Custom Message Templates

Create custom message templates for different notification types:

const messageTemplates = {
  task_completed: {
    header: "šŸŽÆ Task Completed",
    body: "*{task.title}* has been completed by *{task.assignee}*",
    footer: "Project: {project.name} • Duration: {task.duration}",
    actions: [
      { text: "View Task", url: "{task.url}" },
      { text: "View Project", url: "{project.url}" }
    ]
  },
  
  project_milestone: {
    header: "šŸ† Milestone Reached",
    body: "*{project.name}* has reached milestone: *{milestone.name}*",
    footer: "Progress: {project.progress}% • Next: {milestone.next}",
    mentions: "{project.owner} {project.stakeholders}"
  },
  
  deadline_reminder: {
    header: "ā° Deadline Reminder", 
    body: "*{task.title}* is due {task.due_date}",
    footer: "Assigned to: {task.assignee} • Priority: {task.priority}",
    urgency: "high"
  }
};

Interactive Features

Slack Commands

Use slash commands for quick platform actions:

# View your tasks
/platform tasks

# Create a new task  
/platform create task "Implement search feature" --project mobile-app

# Check project status
/platform status mobile-app

# Get team overview
/platform team summary

# Search platform content
/platform search "user authentication"

Button Actions

Interact with notifications using buttons:

  • Mark Complete: Complete tasks directly from Slack
  • Assign Task: Assign tasks to team members
  • Add Comment: Add comments without leaving Slack
  • Approve/Reject: Handle approval workflows
  • Snooze: Postpone notifications for later

Workflow Automation

Set up automated workflows triggered by Slack actions:

# Slack workflow automation
workflows:
  - name: "Task approval workflow"
    trigger:
      platform: "slack"
      action: "button_click"
      button_id: "approve_task"
    steps:
      - update_task_status:
          status: "approved"
          approver: "{{ slack.user.email }}"
      - notify_assignee:
          message: "Your task has been approved and is ready to start"
      - create_calendar_event:
          title: "{{ task.title }}"
          start_date: "{{ task.planned_start }}"
          
  - name: "Daily standup reminder"
    trigger:
      schedule: "0 9 * * 1-5"  # 9 AM weekdays
    steps:
      - post_to_slack:
          channel: "#dev-team"
          message: "Good morning team! Time for standup šŸŒ…"
          include_task_summary: true
          mention_team_members: true

Advanced Features

Slack Bot Integration

Custom Bot Commands

Create custom bot commands for advanced platform interactions:

// Slack bot command handler
app.event('app_mention', async ({ event, client, context }) => {
  const message = event.text.toLowerCase();
  
  if (message.includes('status report')) {
    const report = await generateStatusReport(event.channel);
    await client.chat.postMessage({
      channel: event.channel,
      text: formatStatusReport(report),
      thread_ts: event.ts
    });
  }
  
  if (message.includes('create sprint')) {
    const sprintData = parseSprintRequest(event.text);
    const sprint = await createSprintFromSlack(sprintData);
    await client.chat.postMessage({
      channel: event.channel,
      text: `āœ… Sprint "${sprint.name}" created successfully!`,
      blocks: formatSprintSummary(sprint)
    });
  }
});

Conversational Interface

Implement conversational workflows for complex tasks:

// Multi-step task creation workflow
const taskCreationFlow = {
  async start(channel, user) {
    await postMessage(channel, {
      text: "Let's create a new task! What's the task title?",
      metadata: { flow: 'task_creation', step: 'title', user }
    });
  },
  
  async handleTitle(channel, user, title) {
    await postMessage(channel, {
      text: `Great! "${title}" - Which project should this belong to?`,
      blocks: generateProjectSelector(),
      metadata: { flow: 'task_creation', step: 'project', title, user }
    });
  },
  
  async handleProject(channel, user, title, project) {
    const task = await createTask({ title, project, creator: user });
    await postMessage(channel, {
      text: `āœ… Task created successfully!`,
      blocks: formatTaskCard(task)
    });
  }
};

Integration with Slack Workflows

Slack Workflow Builder

Create automated workflows using Slack's native Workflow Builder:

  1. Project Kickoff Workflow:

    • Trigger: New project created in platform
    • Actions: Create Slack channel, invite team members, post project brief
  2. Task Assignment Workflow:

    • Trigger: Task assigned in platform
    • Actions: Send DM to assignee, add to personal task list, set reminder
  3. Sprint Planning Workflow:

    • Trigger: Sprint planning scheduled
    • Actions: Create planning meeting, gather task estimates, generate sprint backlog

Custom Slack Apps

Build dedicated Slack apps for your team's specific needs:

// Custom Slack app configuration
const app = new App({
  token: process.env.SLACK_BOT_TOKEN,
  signingSecret: process.env.SLACK_SIGNING_SECRET,
  endpoints: {
    events: '/slack/events',
    commands: '/slack/commands',
    actions: '/slack/actions'
  }
});

// Platform-specific shortcuts
app.shortcut('create_platform_task', async ({ shortcut, ack, client }) => {
  await ack();
  
  await client.views.open({
    trigger_id: shortcut.trigger_id,
    view: {
      type: 'modal',
      callback_id: 'task_creation_modal',
      title: { type: 'plain_text', text: 'Create Task' },
      blocks: generateTaskCreationForm()
    }
  });
});

Notification Management

Channel Organization

Recommended Channel Structure

#general            - Team announcements, milestone updates
#project-updates    - All project-related notifications  
#dev-notifications  - Development team specific updates
#design-updates     - Design team notifications
#client-updates     - Client-facing project updates (if applicable)
#platform-alerts    - System notifications and maintenance

Channel-Specific Configurations

{
  "channel_configs": {
    "#general": {
      "notification_types": ["high_priority", "milestones", "team_changes"],
      "frequency": "immediate",
      "format": "summary", 
      "mentions": "stakeholders_only"
    },
    "#dev-notifications": {
      "notification_types": ["task_assignments", "code_reviews", "deployments"],
      "frequency": "immediate",
      "format": "detailed",
      "mentions": "assignees",
      "thread_replies": true
    },
    "#project-updates": {
      "notification_types": ["all_project_activities"],
      "frequency": "batched_hourly",
      "format": "digest",
      "mentions": "none"
    }
  }
}

Personal Notification Settings

Notification Preferences

Configure individual team member preferences:

const personalSettings = {
  direct_messages: {
    task_assigned: true,
    task_due_soon: true,
    mentioned_in_comment: true,
    project_milestone: false,
    team_updates: false
  },
  
  mention_preferences: {
    high_priority_tasks: true,
    project_deadlines: true,
    approval_requests: true,
    status_updates: false
  },
  
  digest_settings: {
    daily_summary: {
      enabled: true,
      time: "09:00",
      timezone: "America/New_York"
    },
    weekly_report: {
      enabled: true,
      day: "monday",
      time: "08:00"
    }
  },
  
  quiet_hours: {
    enabled: true,
    start: "18:00",
    end: "09:00", 
    weekends: true
  }
};

Smart Filtering

Implement intelligent notification filtering:

// Smart notification filtering logic
function shouldSendNotification(notification, userPreferences, context) {
  // Check quiet hours
  if (isQuietHours(userPreferences.quiet_hours)) {
    return false;
  }
  
  // Priority-based filtering
  if (notification.priority === 'low' && !userPreferences.include_low_priority) {
    return false;
  }
  
  // Context-aware filtering
  if (notification.type === 'task_created' && !isUserProjectMember(context.user, notification.project)) {
    return false;
  }
  
  // Frequency limits
  if (exceedsFrequencyLimit(notification, userPreferences.frequency_limits)) {
    return { action: 'batch_for_later' };
  }
  
  return true;
}

Analytics and Reporting

Slack Engagement Metrics

Track how your team engages with platform notifications in Slack:

const slackAnalytics = {
  notification_metrics: {
    messages_sent: 1250,
    message_clicks: 890,
    button_interactions: 340,
    slash_command_usage: 125
  },
  
  engagement_rates: {
    overall_click_rate: 0.71,
    task_completion_rate: 0.85,
    response_time_avg: "2.3 hours"
  },
  
  popular_features: [
    { feature: "task_status_updates", usage: 450 },
    { feature: "project_summaries", usage: 320 },
    { feature: "deadline_reminders", usage: 280 },
    { feature: "team_mentions", usage: 200 }
  ]
};

Team Communication Insights

Analyze how Slack integration affects team communication:

  • Response Times: Average time to respond to task assignments
  • Participation Rates: Team member engagement with notifications
  • Channel Activity: Most active channels for platform discussions
  • Workflow Efficiency: Time saved through Slack automation

Troubleshooting

Common Issues

Missing Notifications

Symptoms:

  • Expected notifications not appearing in Slack
  • Delayed message delivery
  • Incomplete notification content

Diagnostic Steps:

// Check notification delivery status
async function diagnoseLackNotifications(teamId, channelId) {
  const diagnostics = {
    slack_connection: await testSlackConnection(),
    webhook_status: await checkWebhookStatus(teamId),
    channel_permissions: await checkChannelPermissions(channelId),
    notification_rules: await getNotificationRules(teamId, channelId),
    recent_errors: await getRecentSlackErrors(teamId)
  };
  
  return diagnostics;
}

Common Solutions:

  • Verify Slack app permissions and scopes
  • Check channel membership for the bot
  • Review notification filtering rules
  • Confirm webhook endpoint accessibility

Message Formatting Issues

Symptoms:

  • Broken message layouts
  • Missing interactive elements
  • Incorrect user mentions

Solutions:

// Validate Slack message format
function validateSlackMessage(message) {
  const issues = [];
  
  if (message.blocks) {
    // Check block structure
    message.blocks.forEach((block, index) => {
      if (!block.type) {
        issues.push(`Block ${index} missing type`);
      }
      
      if (block.type === 'section' && !block.text) {
        issues.push(`Section block ${index} missing text`);
      }
    });
  }
  
  // Validate user mentions
  const mentions = message.text?.match(/<@U[A-Z0-9]+>/g) || [];
  mentions.forEach(mention => {
    if (!isValidSlackUserId(mention)) {
      issues.push(`Invalid user mention: ${mention}`);
    }
  });
  
  return issues;
}

Performance Optimization

Rate Limit Management

Handle Slack API rate limits effectively:

const slackRateLimiter = {
  limits: {
    messages: { rate: 1, period: 1000 },      // 1 message per second
    webhook: { rate: 1, period: 1000 },       // 1 webhook per second
    api_calls: { rate: 50, period: 60000 }    // 50 API calls per minute
  },
  
  async sendMessage(channel, message) {
    await this.waitForRateLimit('messages');
    return await slackClient.chat.postMessage({
      channel,
      ...message
    });
  },
  
  async waitForRateLimit(type) {
    const limit = this.limits[type];
    const now = Date.now();
    const lastCall = this.lastCalls[type] || 0;
    const timeSinceLastCall = now - lastCall;
    
    if (timeSinceLastCall < limit.period) {
      const waitTime = limit.period - timeSinceLastCall;
      await new Promise(resolve => setTimeout(resolve, waitTime));
    }
    
    this.lastCalls[type] = Date.now();
  }
};

Batch Processing

Optimize notification delivery through batching:

// Batch multiple notifications into digest messages
class NotificationBatcher {
  constructor() {
    this.batches = new Map();
    this.flushInterval = 5 * 60 * 1000; // 5 minutes
  }
  
  addNotification(channelId, notification) {
    if (!this.batches.has(channelId)) {
      this.batches.set(channelId, []);
      setTimeout(() => this.flushBatch(channelId), this.flushInterval);
    }
    
    this.batches.get(channelId).push(notification);
    
    // Immediate flush for high priority
    if (notification.priority === 'critical') {
      this.flushBatch(channelId);
    }
  }
  
  async flushBatch(channelId) {
    const notifications = this.batches.get(channelId) || [];
    this.batches.delete(channelId);
    
    if (notifications.length === 0) return;
    
    if (notifications.length === 1) {
      await sendSingleNotification(channelId, notifications[0]);
    } else {
      await sendDigestMessage(channelId, notifications);
    }
  }
}

Best Practices

Channel Management

Naming Conventions

#platform-[team]        - Team-specific platform notifications
#project-[name]         - Project-specific updates  
#alerts-platform        - System alerts and maintenance
#digest-daily          - Daily summary digests
#approvals-[type]      - Approval workflows

Channel Purposes

  • Focused Channels: Dedicated channels for specific notification types
  • Cross-Functional: Channels that bridge different teams
  • Escalation Channels: For urgent notifications requiring immediate attention
  • Archive Channels: Historical record of important notifications

Message Design

Clear and Actionable

// Good: Clear, actionable message
const goodMessage = {
  text: "šŸŽÆ Task assigned to you",
  blocks: [
    {
      type: "section",
      text: {
        type: "mrkdwn",
        text: "*Implement user search feature* has been assigned to you\nšŸ“… Due: Tomorrow at 5 PM\nšŸ”— <https://platform.com/tasks/123|View Task>"
      }
    },
    {
      type: "actions",
      elements: [
        { type: "button", text: "Accept", action_id: "accept_task" },
        { type: "button", text: "Discuss", action_id: "discuss_task" }
      ]
    }
  ]
};

// Avoid: Vague, non-actionable message
const poorMessage = {
  text: "Task update",
  blocks: [
    {
      type: "section", 
      text: { type: "plain_text", text: "Something happened with a task" }
    }
  ]
};

Consistent Formatting

  • Use emojis consistently for different notification types
  • Maintain consistent color coding for priority levels
  • Include relevant context and action buttons
  • Keep messages concise but informative

Security Considerations

Token Management

// Secure Slack token handling
const slackTokenManager = {
  async getToken(teamId) {
    const encryptedToken = await db.getEncryptedSlackToken(teamId);
    return decrypt(encryptedToken, process.env.ENCRYPTION_KEY);
  },
  
  async rotateToken(teamId, newToken) {
    const encryptedToken = encrypt(newToken, process.env.ENCRYPTION_KEY);
    await db.updateSlackToken(teamId, encryptedToken, new Date());
    
    // Test new token
    const isValid = await testSlackToken(newToken);
    if (!isValid) {
      throw new Error('New token validation failed');
    }
  }
};

Permission Auditing

  • Regularly review Slack app permissions
  • Monitor channel access and bot memberships
  • Audit message content for sensitive information
  • Implement content filtering for confidential data

Next Steps

Your Slack integration is now set up! Here are the recommended next steps:

  1. Test Notifications: Create a test task and verify Slack notifications work
  2. Configure Channels: Set up dedicated channels for different notification types
  3. Train Your Team: Share slash commands and interactive features with team members
  4. Customize Messages: Adjust message templates and formatting for your team's needs
  5. Monitor Engagement: Use analytics to optimize notification frequency and content

For additional customization and advanced workflows, explore:

  • GitHub Integration - Get notified about code changes and deployments
  • Linear Integration - Sync development progress updates
  • Team Management - Configure team-wide Slack settings
  • Collaboration Features - Maximize team productivity

Need help? Visit our Integration Support Center or join the Slack Community for tips and best practices.