The Approval Email Chain Problem
Salesforce has a built-in Approval Process engine. It routes records to designated approvers, tracks approval status, and enforces business rules. The problem is the notification mechanism: by default, Salesforce sends an email to the approver with a link that opens Salesforce, requires login, and requires navigating to the approval record.
For approvers who live in Salesforce all day, this is fine. For operations managers, finance directors, or executives who receive 3 to 10 approval requests per day and primarily work in Slack, it is a context-switch tax that causes approvals to sit pending for hours — or days.
The solution is to push the approval action into the tool where approvers already spend their time: a Slack message with the relevant context and two buttons — Approve and Reject — that update the Salesforce record directly when clicked. Zero context switching. Approval in 5 seconds.
Salesforce Approval Processes: The Foundation
Before building the Slack integration, the Salesforce Approval Process must be correctly configured. Key elements:
Entry Criteria
The conditions that determine when a record enters the approval process. Be precise — overly broad entry criteria create approval noise.
Approval Steps
The sequence of approvers. Can be role-based, user-based, or dynamically assigned based on field values (e.g., route to the record owner's manager). Multi-step processes require each step to be correctly chained.
Field Updates
Actions triggered at each approval state transition. A dedicated Status field (Pending Approval, Approved, Rejected) should be updated at each step. This field is what the Slack integration reads and writes.
Approval Actions vs. Rejection Actions
Each step should have explicit field updates and downstream actions for both approval and rejection paths. Missing rejection handling is a common gap.
Recall Rules
Define whether the submitter can recall a pending approval. If records can be recalled, the Slack notification should be updated or deleted when a recall occurs.
Adding Slack: The Integration Architecture
There are two approaches to connecting Salesforce approval processes to Slack. The right choice depends on your Salesforce license level and complexity requirements:
Option 1: Salesforce for Slack App (Native)
Salesforce offers a native Slack integration that includes Approval Notifications as part of the Salesforce for Slack package. It sends Slack messages for pending approvals and allows approve/reject directly from Slack. No custom code required.
Works well for:
Standard approval notifications, quick implementation, no custom message formatting needed
Limitation:
Limited control over message content, formatting, and conditional logic. Requires Salesforce Enterprise+ in some configurations.
Option 2: Custom Slack Bot with Salesforce API (Code)
Build a Slack bot application that receives Salesforce Platform Events or webhook calls when an approval is submitted, sends a formatted Block Kit message to the approver's Slack DM or a designated channel, and handles button interaction callbacks to update the Salesforce approval process via the Salesforce Approval REST API.
This approach gives full control over message content (include the record details most relevant to the approval decision), routing logic (send to different channels based on approval type), and action handling (allow comments, requests for more info, delegated approvals).
Custom Implementation: Key Components
1. Salesforce Platform Event
Define a Platform Event in Salesforce that is published when an approval process record enters the pending-approval state. The event payload includes: record ID, record type, submitter, approver user ID, key decision fields, and a direct URL to the record.
2. Event Subscriber (Middleware)
A serverless function (AWS Lambda, Vercel, GCP Cloud Function) subscribes to the Salesforce Streaming API for that Platform Event. When an event arrives, it translates the Salesforce user ID to a Slack user ID (requires a mapping table or Salesforce-to-Slack user sync), then constructs and sends the Slack Block Kit message.
3. Slack Block Kit Message
The message includes the relevant approval context — record name, amount, submitter, key fields — formatted for rapid decision-making. Two Action buttons: Approve and Reject. An optional text input for a rejection reason. The message stores the Salesforce record ID in block metadata for the callback step.
4. Slack Interaction Handler
Slack sends a POST request to your configured Request URL when a user clicks Approve or Reject. Your handler receives the action, extracts the stored record ID, and calls the Salesforce Approval REST API endpoint (POST /services/data/v58.0/process/approvals/) to submit the approval decision.
5. Message Update
After the Salesforce API call succeeds, use the response_url from the Slack interaction payload to update the original message — replacing the action buttons with a confirmation of who approved/rejected and when. This prevents double-action on the same approval.
Common Approval Use Cases
Purchase Order Approval
PO submitted in Salesforce → Slack message to budget owner with amount and vendor details → one-click approve creates Bill.com bill
Expense Report Approval
Expense record submitted → Slack to manager with line items and receipts link → rejection reason captured and auto-emailed to submitter
Grant Disbursement Approval
Grant payment record created → Slack to finance director with grantee, amount, and project → approval triggers Bill.com payment
Discount or Pricing Override
Opportunity with custom pricing → Slack to sales manager with deal context and margin impact → approval unlocks quote generation
Vendor Setup Approval
New vendor record submitted → Slack to AP manager with W-9 and payment terms review → approval triggers Bill.com vendor provisioning
Contract Execution Approval
Contract record reaches execution-ready stage → Slack to legal or exec with contract summary → approval triggers DocuSign envelope send
Related Reading
Service
Salesforce Automation & Optimization
End-to-end Salesforce automation including Apex, flows, and third-party integrations.
Technical How-To
Connecting Bill.com API to Salesforce
Complete the approval-to-payment workflow by connecting Salesforce approvals to Bill.com payment execution.
Case Study
Salesforce + Bill.com + Slack in Production
A nonprofit that automated grant expense approvals with exactly this integration stack.