Customer replies are opening new tickets instead of threading
In short
Thread fragmentation is decided at the mail-header level, before any rule or model runs. Take an orphaned reply and check whether your outbound Message-ID appears in its In-Reply-To or References headers. Present and correct means a helpdesk matching bug; pointing elsewhere means the customer replied to another system; absent means a gateway removed it, and nothing downstream can recover it.
Key takeaways
- Read the raw headers of one orphan before theorising. The References chain answers the question in a minute.
- Corporate security gateways rewrite and sometimes strip threading headers, and no model can recover them.
- Never match threads on subject alone. Two customers asking about an invoice will be merged into one ticket.
- Carry a thread token in 3 places — Message-ID, a plus-addressed reply-to and a visible reference — so one survives.
- Auto-merge only within one verified requester, inside a bounded window, before any public agent reply.
- A wrong merge is customer-visible and hard to undo, so the default for anything ambiguous is a suggestion.
Take one orphaned reply — a ticket whose body clearly quotes an answer you already sent — and open its raw source. Compare the Message-ID your helpdesk stamped on the outbound message against the In-Reply-To and References headers on the reply. That single comparison splits the problem into three, and only one of the three is fixed inside your helpdesk.
The distinction that matters commercially is between fixing the transport and merging afterwards. Merging is always available and always second best: it runs after a duplicate has already taken a queue slot, started its own timer and possibly been answered by a second agent. It also has the worse failure mode, because a wrong merge is visible to the customer and awkward to undo.
The confirming check: read the headers on 10 orphans
- Collect 10 orphan tickets from the last 7 days where the body visibly quotes one of your replies. Fewer than 10 and you will generalise from a coincidence.
- Open the raw source of each and record 7 fields: Message-ID, In-Reply-To, References, From, To, Reply-To and the subject exactly as received.
- Find the outbound message each one is answering and record its Message-ID as your helpdesk sent it.
- Test membership: is that outbound Message-ID present anywhere in the reply's References chain? This is the whole diagnosis, and it is a string comparison.
- Test identity separately: does the From address exist on the requester's user record, and does the To address match the alias the thread was already on?
- Tally the 10. A single dominant pattern means one fix. A spread across three patterns means you have three problems and should fix the transport one first.
The five signatures, and what each one means
| What the headers show | Cause | Where the fix goes |
|---|---|---|
| No References or In-Reply-To at all, sender is a large corporate domain | A mail gateway or security product rewrote the message and dropped the threading headers | Transport. Carry the token somewhere the gateway keeps |
| References present, but referencing a message you never sent | The customer replied to a notification from another system — their own service desk, a survey, a status page | Outbound design. Every message that can be replied to needs your thread token |
| References present and containing your Message-ID, still a new ticket | The helpdesk matched on subject or requester only, or the original ticket fell outside its matching window | Helpdesk configuration, and the closed-ticket window |
| Headers fine, From is an unfamiliar address at a known company | An identity problem wearing a threading costume | The user record. Merge identities, not tickets |
| Subject rewritten by the customer or their client, headers absent | Subject-based matching, defeated by a localised prefix or a truncation | Stop matching on subject as a primary key |
| Reply arrived at a different alias from the one that sent it | The outbound From and Reply-To disagree, or an alias forwards without preserving the thread | Mail routing and the outbound envelope |
Subject matching is a trap, and it fails in both directions
Every helpdesk offers subject-line matching as a fallback and it looks like a reasonable safety net. It is not. Reply prefixes are localised — a German client writes AW, a Swedish one SV, some clients add a space before the colon — and long subjects get truncated by intermediate systems, so the string you are matching on is not stable across the path.
The reverse failure is worse than a missed match. Two unrelated customers both sending a message titled with your product name and the word invoice will be threaded into one ticket, and now one customer can read the other's correspondence. Subject may only be used to break a tie between candidate threads that already belong to the same verified requester, inside a bounded window. It may never establish a thread on its own.
Fix the transport, or merge after the fact
These are different projects with different owners. Transport work is small, permanent and prevents the duplicate existing. Merge work is ongoing, probabilistic and cleans up after it. Do the first, and use the second only for the residue that a stripped-header path genuinely makes unrecoverable.
If you allow automatic merging at all, write the permission down as conditions rather than as a confidence score. A merge that satisfies all four of the conditions below is safe enough to run unattended; anything else is a suggestion a human accepts.
- Same verified requester. The sending address is on the same user record — not the same company, and not a fuzzy name match.
- Inside a bounded window. Something like 72 hours since the last activity on the target ticket. Beyond that, a customer writing about the same subject is more likely to have a genuinely new instance of the problem.
- No public reply yet on the newer ticket. Once an agent has answered it, merging silently deletes a conversation the customer can see.
- Same entitlement and same organisation. A merge that moves a ticket across an account boundary changes its response target and its visibility, which is a routing decision disguised as housekeeping.
- Everything else is a suggestion. Present it as a linked-ticket hint with the evidence, and let a human take 5 seconds over it.
Record the merge decision where it can be reported on and reversed — a field with a defined value set rather than a free-form tag, for the reasons argued in custom fields against tags for triage output. Without that, you cannot answer the only question that matters after three months: how often the automatic merge was wrong.
A model cannot recover a header a security gateway deleted. It can only guess, in front of the customer, at something the mail path already told you.
The decision tree
- Do the orphans carry your Message-ID in their References chain? If yes, this is a helpdesk matching or window configuration problem. Fix it there and stop.
- Are the headers missing on a specific set of customer domains? That is a gateway rewriting mail. You cannot change their security product, so add the plus-addressed reply-to and the visible reference token.
- Do the References point at a message you did not send? Find the other system generating replyable notifications and either silence it or give it your token.
- Is the From address simply unknown? Fix the identity, not the thread. Add the address to the existing user and the next reply threads on its own.
- Is the subject the only thing you were matching on? Turn it off as a primary key today. The collision risk is a disclosure risk, not just a tidiness one.
- Only for the residue after all of the above: enable automatic merging under the four conditions, and review a sample of merges weekly for the first month.
What this does not fix
- Runaway volume from two systems answering each other. That is a different fault with a different break, diagnosed in a mail loop between your system and theirs.
- The reported clock. One issue arriving as 3 tickets creates 3 first-reply timers, and merging afterwards does not always repair the breach already recorded — the timer's behaviour is set out in SLA breaches on tickets that arrived at 2am.
- Notifications from systems you do not control. If a support ticket has a shadow record in an engineering tracker, that tracker sends its own mail the customer may reply to — one of the costs weighed in whether support should file bugs straight into the tracker.
Threading is unglamorous plumbing, and it is worth insisting on before any conversational automation goes near the queue: an agent that answers the third fragment of a conversation without the first two will confidently contradict a colleague. Getting the transport right first is normal AI agents and automation groundwork within ticket and inbox triage and our SaaS and customer support practice. If you are evaluating someone to do it, whether they ask to see raw headers in the first conversation is a useful signal — more of those in choosing a development partner.
Frequently asked questions
Short answers to the follow-ups this page tends to raise.
Why do corporate mail gateways strip threading headers?
Because they rebuild the message rather than forward it. Security products that rewrite links, detonate attachments in a sandbox or apply data-loss policies often reconstruct the message on the way through, and threading headers are collateral damage rather than a deliberate removal. You cannot change the customer's security stack, so the fix is to carry your thread identifier somewhere that survives a rebuild.
Should a helpdesk match threads on the subject line at all?
Only as a tie-breaker inside one verified requester, never as the primary key. Subject matching fails in both directions: localised reply prefixes and truncation break real threads, and two unrelated customers writing about the same topic get merged, which puts one customer's correspondence in front of another. Treat a subject collision as a disclosure risk and configure accordingly.
Can an AI safely merge duplicate tickets automatically?
Yes, within tight conditions: the same verified requester, a bounded window of about 72 hours, no public agent reply yet on the newer ticket, and no change of organisation or entitlement. Outside those conditions it should propose rather than act, because a wrong merge is visible to the customer and difficult to unwind cleanly. The conditions are worth more than the confidence score.
Does a plus-addressed reply-to work with every mail provider?
No, and that is why it should not be your only mechanism. Sub-addressing is widely supported but not universal, some corporate systems reject or rewrite it, and a few customer address books mangle it. Test it against your own mailbox provider and against your largest customers' domains before relying on it, and keep a visible reference token in the message footer as the fallback that always survives.
- threading
- triage
- duplicates
The work behind this page
Builds from our portfolio that this page draws on.
Read next
- Suspended ticket queue: what lands there, and why real customers do tooSuspension is a triage decision your helpdesk makes before your rules, your macros and your model see the message — and the only triage decision whose mistakes leave no trace.definition
- A mail loop is manufacturing tickets between your system and theirsRunaway ticket volume from a single counterparty is rarely spam. It is two automated systems answering each other, and the fix is a header rule your responder should already have been applying.diagnostic
- Your SLA is breaching on tickets that arrived outside working hoursOvernight breach reports are almost always a schedule problem rather than a staffing problem. One chart — breach rate by hour of arrival, in the schedule's own timezone — tells you which, and the rest of the afternoon is configuration.diagnostic
- Requester, end user and organisation: the records a ticket hangs offA ticket points at several identity records, not one. Entitlement belongs to the company record, tone belongs to the person, and mixing them is how the wrong customer gets premium routing.definition
- First-reply SLA timer: start, pause and breach are three different eventsA first-reply SLA is three settings, not one, and most breach reports that look like a staffing problem are one of the three configured differently from how the team believes.definition
- Intent taxonomy: the label set a support router can act onAn intent is not a description of a ticket. It is the instruction a router acts on, which means a label no queue, macro or automation consumes is not a label at all.definition
Working on something in this space?
Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.
Start the conversation