Send Slack alerts for low Zendesk CSAT scores using Claude Cowork
Prerequisites
- Claude Desktop with Cowork enabled
- Zendesk subdomain, agent email, and API token
- Slack Bot Token with
chat:writescope and the bot invited to your alert channel - Slack channel ID for your CSAT alerts channel
Overview
Claude Cowork lets you set up a recurring task that checks Zendesk for new bad satisfaction ratings and posts a Slack alert — all described in plain text. No code to write or maintain. Claude reads the task description, makes the API calls, and posts alerts on your behalf.
This is the fastest way to get CSAT alerting running if you don't want to set up an n8n workflow or deploy a script.
Step 1: Get Zendesk API credentials
Navigate to Admin Center → Apps and integrations → APIs → Zendesk API:
- Enable Token Access if not already enabled
- Click Add API token
- Give it a description like "CSAT Alert Bot"
- Copy the token — you'll paste it into the Cowork task description
You also need your Zendesk subdomain (the xxx part of xxx.zendesk.com) and the email address of the agent account associated with the token.
Step 2: Get Slack bot token and channel ID
Create a Slack app (or use an existing one):
- Go to api.slack.com/apps → Create New App
- Under OAuth & Permissions, add the
chat:writescope - Install the app to your workspace and copy the Bot User OAuth Token
- Invite the bot to your alerts channel:
/invite @YourBotNamein #csat-alerts - Get the channel ID: right-click the channel name → View channel details → copy the ID at the bottom
Step 3: Create the Cowork task
Open Claude Desktop → Cowork tab → + New task.
Title: Alert Slack on bad Zendesk CSAT ratings
Description:
You are a support ops assistant. Check Zendesk for new bad CSAT ratings and alert the team in Slack.
Steps:
1. Query the Zendesk satisfaction ratings API for bad scores:
GET https://SUBDOMAIN.zendesk.com/api/v2/satisfaction_ratings?score=bad&sort_order=desc&per_page=20
Auth: Basic — username: EMAIL/token, password: API_TOKEN
2. Filter to only ratings updated in the last 2 hours (to account for hourly scheduling plus buffer).
3. For each bad rating:
a. Get the ticket details:
GET https://SUBDOMAIN.zendesk.com/api/v2/tickets/{ticket_id}.json
Same auth.
b. Note the subject, requester name, and any customer comment from the rating.
4. For each bad rating found, post a message to Slack:
POST https://slack.com/api/chat.postMessage
Authorization: Bearer SLACK_BOT_TOKEN
Body: {"channel": "CHANNEL_ID", "text": "Bad CSAT on #TICKET_ID: SUBJECT\nCustomer comment: COMMENT\nLink: https://SUBDOMAIN.zendesk.com/agent/tickets/TICKET_ID"}
5. Print a summary of how many bad ratings were found and alerted.
Important:
- Only alert on ratings from the last 2 hours to avoid duplicate alerts.
- If no new bad ratings, just print "No new bad ratings found."
- Zendesk CSAT is binary (Good/Bad), not a 1-5 scale. The score=bad filter handles this.Replace SUBDOMAIN, EMAIL, API_TOKEN, SLACK_BOT_TOKEN, and CHANNEL_ID with your actual values.
Cowork tasks only execute while Claude Desktop is open and your machine is awake. For reliable 24/7 monitoring, use the Agent Skill with a cron job or the n8n approach instead.
Step 4: Set the schedule
Frequency: Every hour
If your support team works 9am-6pm, schedule during business hours only. Bad ratings that arrive overnight will be caught on the first morning run since the 2-hour lookback window overlaps.
Cowork's hourly cadence means some bad ratings won't surface for up to an hour. If you need alerts within 5 minutes of a bad rating, use the n8n approach with a 5-minute schedule trigger.
Step 5: Run manually and review
Click Run now and watch the output. Claude will:
- Query the Zendesk satisfaction ratings API
- Filter to bad ratings from the last 2 hours
- Fetch ticket details for each bad rating
- Post a Slack alert for each one
- Print a summary
A typical run summary looks like:
Checked 20 recent satisfaction ratings. Found 2 bad ratings from the last 2 hours.
#48201 - Bad rating
Subject: "Billing issue not resolved"
Customer comment: "Agent kept transferring me"
-> Slack alert sent
#48195 - Bad rating
Subject: "Slow response to outage report"
Customer comment: (no comment)
-> Slack alert sent
Summary: 2 alerts sent.When to use this approach
- You want CSAT alerting running in under 10 minutes with no code
- Your team works standard hours and hourly alerts are fast enough
- You have moderate survey volume (under 50 bad ratings per day)
- You're already using Claude Desktop and want to keep everything in one place
When to switch to another approach
- You need near-real-time alerts within minutes of a bad rating → use the n8n approach with a 5-minute poll
- You need alerts running 24/7 without depending on your laptop → use the Agent Skill with cron or GitHub Actions
- You want richer Slack formatting with Block Kit buttons and structured fields → use n8n or the Agent Skill
Cost
Usage-based Claude Desktop pricing. Each run typically involves 2-3 API calls to Zendesk and 1 Slack API call per bad rating. The Zendesk and Slack API calls themselves are free.
Need help implementing this?
We build and optimize automation systems for mid-market businesses. Let's discuss the right approach for your team.