Back to Intelligence
Case Study · IntegrationEnterprise SaaS

Building a Real-Time Slack Case
Triage System with Salesforce

How we replaced ignored Slack notifications with rich case cards, threaded timelines, and live updates—turning a channel nobody watched into the team's primary triage surface.

Slack and Salesforce Integration

Key Outcomes

Real-Time

Case visibility in Slack

Zero

Manual case announcements

100%

Reopened cases surfaced

Our Role

Technical Architecture & Development

Technology Stack

Slack Next-Gen PlatformDeno + TypeScriptSalesforce ApexFlowOAuth 2.0REST APIsBlock Kit

The Problem

The support team lived in Slack. Their cases lived in Salesforce.

That gap created friction everywhere. New cases were easy to miss. Customer replies stayed buried in the CRM until someone refreshed. Agents had to announce ownership manually in Slack, then disappear back into Salesforce to do the real work.

Over time, the Slack channel trained people to ignore it. Notifications came through, but they rarely contained enough context to act on quickly. The result wasn't slow agents—it was slow visibility.

No Context

Notifications showed a case number—nothing actionable without clicking through to Salesforce.

Buried Replies

Customer emails stayed in Salesforce. No visibility in Slack until someone went hunting.

Silent Reopens

When customers replied to old threads, nothing happened in Slack. Cases fell through.

What We Built

We built a real-time Slack Case Triage system that turns Salesforce Cases into first-class Slack objects. Each case becomes a rich card posted to a shared channel, with a threaded timeline that captures the full lifecycle.

Before

Notifications with just case numbers

Click through for any context

Channel ignored as noise

Emails buried in CRM

Reopens via old threads? Silent.

After

Rich case cards with full context

Live updates to existing messages

Channel becomes primary triage surface

📥 / 📤 emails in threaded timeline

Reopened cases broadcast to channel

Rich Case Cards

When a case is created, a structured card appears in Slack immediately. Subject links to Salesforce, ownership, status, and account context visible at a glance.

Triage without leaving Slack

Live Updates

Status or owner changes update the same message—no flood of duplicates. Customer and agent emails appear as thread replies in the case timeline.

One message per case, always current

Auto Knowledge Suggestions

Relevant knowledge articles are suggested automatically in the thread—while the case context is still fresh and agents are actively triaging.

Right information at the right time

The Differentiator: Smarter Reopen Behavior

While building this system, we uncovered a subtle but costly workflow issue. A legacy rule automatically reopened any closed case when a customer replied—even if the case had been closed weeks or months earlier.

We replaced that behavior with a simple, human rule: if a customer replies within 3 days of closure, reopen the original case. If they reply after 3 days, create a new follow-up case, link it to the original, and route it properly.

→ We documented this logic in detail separately

Under the Hood: The Architecture

The system is bidirectional, but Salesforce remains the system of record.

System Architecture Overview

Slack App:Slack Next-Gen Platform (Deno + TypeScript), Block Kit UI
Salesforce:Apex Triggers, @future / Queueables for async callouts
Auth:OAuth 2.0 refresh token flow for SF ↔ Slack communication
Callbacks:Custom REST endpoint in SF for Slack message timestamps
Config:Custom Metadata for channel IDs and webhooks (no deploy needed)

Callback Loop

Slack message updates require a timestamp. Salesforce posts → Slack returns the ts → SF stores it for future updates. This enables true "live updates" vs. duplicate messages.

Intelligent Filtering

Salesforce determines whether a change matters (status, owner, key fields) before firing events—so Slack only gets meaningful updates, not noise.

The Results

The Slack channel went from "muted by everyone" to the team's primary triage surface.

Instant

Case visibility in Slack

Zero

Manual announcements

100%

Reopened cases surfaced

Why This Matters

The team stopped ignoring the channel because the channel stopped wasting their time. Notifications with context meant faster response. Threaded timelines meant less "what's the status?" back-and-forth. And surfacing reopened cases meant customers who replied to old threads actually got help—instead of waiting until someone stumbled on the update in Salesforce.

Final Thought

If you've ever watched a support team lose time to "where is the update?" this kind of integration doesn't just save minutes. It reduces the number of times work gets dropped.

By making the CRM visible where people already work, we turned case management from a pull-based workflow into a push-based system.