Half of “phantom” SLA breaches in Freshdesk come from one of four configuration sins. None show up in the SLA report. All show up in customer escalations.
The four traps
- Group business hours overriding policy hours silently
- Customer timezone set to admin’s, not customer’s
- Holiday calendars only attached to one business hour profile
- Ticket created during the gap between two BH profiles
Audit your business hour profiles
Go to Admin → Business Hours and confirm one profile per region you support. Each profile must have its own holiday calendar attached. The default “Calendar” is shared, which is rarely what you want.
Profile: APAC-Support
Hours: 09:00 - 18:00 IST
Holidays: India-2026.csv
Applies to: Group "APAC Tier 1"
Group hours beat policy hours
If a group has business hours assigned, they override the SLA policy’s business hours for tickets in that group. Document this in your runbook or you will chase ghosts for hours.
Set customer timezone, not just contact
The Contact object has timezone. The Account object also has timezone. The SLA engine prefers Account timezone when present. If your Contact says PST and Account says EST, your responses count against EST hours.
API check for misalignment
Run a quick contact-vs-account timezone diff:
GET /api/v2/contacts?per_page=100
// Compare contact.time_zone vs contact.company.time_zone
Any mismatch where the customer is escalating goes on your fix list first.
The midnight handoff bug
Tickets created between 23:55 and 00:05 frequently land in the wrong BH profile if a global default exists. Set explicit “no global fallback” and route via dispatcher rule instead.
What to do this week
Diff every group’s business hours against its SLA policy, attach holiday calendars to every profile, run the contact-vs-account timezone API check, and disable the global business hour default.