Automation · Customer success
How to build SLA breach alerts
The breach report lands on Monday and lists the tickets that missed their target last week. Every one of them could have been saved on the day. The model behind alerts that arrive while there is still time, the prompts that build them, and what it takes to run them.
Built with Tray Headless
- System Zendesk
- Step Read the target
- Step Warn before breach
- Step Escalate
- System Slack
The clock is read from the contract, the warning goes out well before the target, and the account owner hears about a breach on a key account before the customer raises it.
The short answer
What is an SLA breach alert?
SLA breach alerts have four parts: a target per ticket taken from the customer's contract rather than one number for everybody, a clock that pauses only when the customer owes you a reply, warnings that go out at set points before the target to the person who can act, and a record of every breach and near miss so the targets and staffing can be argued from data. The part that fails is timing. An alert at the moment of breach tells you what already happened, and the only alert worth sending is one with time left to act on it.
Stage 4 of 6: SLA tracking and warnings. Part of Customer support automation, end to end : every stage, the systems it runs on and the guide that builds it.
What matters here
- Read the target from the contract. A premium customer and a free trial on the same clock means one of them is wrong.
- Warn at half and at eighty percent of the target. An alert at the breach only reports what already happened.
- Pause the clock only while the customer owes you a reply. A pause for internal reasons hides the delay you most need to see.
- Send the warning to a person by name, not to a channel. A warning everybody sees is a warning nobody owns.
- Count near misses as well as breaches. They show where the next breach comes from.
Who this is for
You run support operations. The help desk tracks SLA targets, but the warnings are a red badge in a view somebody has to open, and breaches are found in the weekly report.
How it works in practice
What has to happen between a ticket starting its clock and either being answered in time or escalated.
- 1
Each ticket gets a target from the customer's contract
First response and resolution targets by support tier and priority, read from the account rather than a default.
- 2
The clock runs on the right hours
Business hours or around the clock, in the customer's time zone, as the contract says.
- 3
The clock pauses only while the customer owes a reply
Waiting on the customer pauses it. Waiting on engineering, a partner or another team does not.
- 4
A warning goes to the assignee before the target
At half the target time with no reply, and again at eighty percent, with a link straight to the ticket.
- 5
A near breach on a key account reaches more people
The team lead, and the account owner when the account is in renewal or already escalated.
- 6
Every breach and near miss is recorded
With the tier, the queue and the reason, so the weekly review talks about causes rather than counts.
What breach alerts are made of
Four parts, and the third decides whether the rest is worth having.
Contract-based targets
First response and resolution targets by tier and priority, taken from the contract on the account and kept in one table.
An honest clock
Business hours in the customer's time zone, paused only while the customer owes a reply.
Warnings with time left
Sent at set points before the target to the named assignee, then to the lead, with the ticket one click away.
Breach and near-miss records
Every miss and every save logged with its cause, so targets and staffing are set from what happened.
The Tray Headless prompts
Paste these into Claude Code or Codex with the Tray Headless plugin installed. Each stage runs on its own. The systems named in them are the worked example rather than a requirement, and every prompt says so.
Once per project, run
/tray-workflows:set-workspace
to pick the workspace these build in. Point it at a sandbox first.
- 1
First, find where the targets really live
A clock is only as good as the target it counts down to.
Headless skills
build-workflowUse build-workflow. The systems in play are Zendesk, Salesforce, Slack and Snowflake, or whatever we run in those seats. Before you plan anything, tell me which of them are already authenticated in the workspace. From Zendesk I need the Ticket model with status, priority, assignee, group and the SLA policy fields, plus the SLA policies themselves. From Salesforce I need Account and Contract with support tier, response targets if they are stored, renewal date, time zone and account owner. Tell me where each customer's targets actually come from today. If the help desk applies one policy to everybody while contracts say otherwise, that is the first thing to fix.
- 2
Set the target and the clock per ticket
One number for everybody is wrong for nearly everybody.
Headless skills
build-workflowUse build-workflow. When a ticket is created or its priority changes, set its first response and resolution targets from a table of support tier and priority. Read the tier from the account, not the ticket form. Run the clock on the hours the contract gives: business hours in the customer's time zone, or around the clock for the top tier. Pause the clock only while the ticket is waiting on the customer. Waiting on engineering, a partner or another internal team does not pause it. Record every pause with who set it and why.
- 3
Warn while there is still time
An alert with time left is one somebody can act on.
Headless skills
tray-patternsUse tray-patterns. Check open tickets every five minutes against their targets. At half the target with no public reply: message the assignee in Slack, with the ticket link, the customer and the time left. At eighty percent: message the assignee and their team lead. On an unassigned ticket: message the queue lead, since nobody else will see it. On a top-tier account, or one in renewal or already escalated: tell the account owner as well. Send each warning once per point, not every five minutes. When the ticket gets a reply, update the warning message to say it was saved.
Updating the warning when the ticket is saved is what keeps people reading them. A channel full of stale red alerts gets muted within a week.
- 4
Record every breach and near miss
The weekly review should argue causes, not counts.
Land every warning, save and breach in Snowflake with the tier, the queue, the assignee, the time of day, and whether the clock was paused. Report weekly: attainment by tier and queue, breaches by cause, near misses saved after the eighty percent warning, and time spent paused by reason. If most breaches happen on tickets that sat unassigned, the fix is routing, not the alert. If most happen at one time of day, it is staffing.
- 5
Validate, then hand the targets to support ops
Because targets change every time a contract does.
Run the per-step schema checks and the whole-workflow audit before this touches production. Run it in report-only mode for a week first, so the warning points are set from real ticket timings. Then open the same workflow in Tray Build so support operations can change the targets table, the warning points and who gets told in the visual canvas.
What it connects to
The help desk runs the clock, the CRM sets the target, and the warning goes where people already work.
Zendesk
Read open tickets, status and replies, and write the target, the pauses and the warning history.
Reads and writes
Salesforce
Read support tier, time zone, renewal date and account owner for the account on each ticket.
Reads
Slack
Warn the assignee, the lead and the account owner by name, and update the message when the ticket is saved.
Writes
Same build, other stacks
The design does not change if you run something else in one of these seats. The same prompts build it against Microsoft Dynamics 365, Google BigQuery, Google Chat, Jira, HubSpot or Databricks.
Connections in this build
Field mapping, templates and common problems for each pairing: Salesforce + Zendesk, Slack + Zendesk and Salesforce + Slack.
Named systems are the ones most teams run, not the only ones that work. Each is an authentication in your Tray workspace, referenced by name, so the workflow never holds a credential. Where we have a connector page, the name links to it.
Running it in production
This is how you keep the promises in your contracts. A missed alert is a missed commitment.
It runs on the platform, not on a laptop
The check runs every few minutes through nights, weekends and holidays, which is when the top tier's clock keeps running.
Every warning is on the record
Who was told, when, and whether the ticket was saved. That is what you show a customer who asks about a missed target.
Credentials are managed, never written into the build
The help desk and CRM credentials sit in your workspace, scoped to the fields the clock needs.
Support ops owns the targets
The targets table, warning points and escalation list open in Tray Build, changed by the team that runs the queue.
Warnings stay quiet unless they matter
One message per warning point, updated when the ticket is saved, so people keep reading them.
Questions people ask
When should the warning go out?
Before the target, not at it. Half the target time with no reply and again at eighty percent works for most teams. Set the points from a week of real ticket timings.
When should the SLA clock pause?
Only while the ticket is waiting on the customer. Pausing it while you wait on engineering or a partner hides the delay that most needs fixing.
Who should get the warning?
The assignee by name first, then the team lead. The account owner too when the account is top tier, in renewal or already escalated, because a missed target there is a commercial problem.
Doesn't the help desk already do this?
It tracks the target, usually from one policy for everybody, and shows a badge in a view. This reads the target from the contract, sends the warning to a named person where they work, and records every near miss.
Can support ops change targets without engineering?
Yes. The targets table and warning points open in Tray Build, so a new contract tier is a table edit.
Further reading
Background on the same subject, for the case rather than the build.
Related guides
Customer success
How to build support ticket routing
Route on the skill needed and the account, not on who is free. Derive priority from contract and impact, and time the clock from the customer. The prompts.
Customer success
How to build support escalation to engineering
Send a confirmed bug to engineering once, with the evidence attached, link every ticket it affects, and tell each customer when the fix ships. The prompts.
Customer success
How to build customer health signals
Weight the signals that predict churn, keep the categories visible instead of one number, and back-test before anybody trusts it. The prompts that build it.
Customer success
How to build support intake from every channel
Turn email, chat, phone, web forms and shared Slack channels into one ticket per problem, matched to the right account, with nothing lost between them. The prompts.
Last reviewed October 2026.