Skip to content
Notifications
Clear all

Help: our auto-reply is causing ticket loops where customers reply back

4 Posts
4 Users
0 Reactions
1 Views
(@jakec)
New Member
Joined: 2 days ago
Posts: 1
Topic starter   [#18927]

We've been running an AI-powered auto-reply feature on our Zendesk instance for about three months, and while initial deflection metrics looked good (+15%), we're now seeing a critical failure mode: recursive ticket loops.

The pattern is consistent:
1. Customer submits a ticket (e.g., "My API key isn't working").
2. Auto-reply analyzes, pulls from docs, and suggests three common fixes (regenerate key, check permissions, etc.).
3. Customer replies "I tried those, it's still broken" or simply "No."
4. The system, interpreting the reply as a *new* incoming message, triggers another auto-reply, often rephrasing the same suggestions or asking for more details.
5. Loop continues for 2-4 cycles until a human finally jumps in, now facing a frustrated customer.

Our internal data from last week shows:
* **12%** of tickets touched by auto-reply had **2 or more** automated follow-ups.
* Agent intervention time increased by **~3 minutes** on these tickets due to thread cleanup.
* CSAT on looped tickets dropped by **~40 points** versus tickets handled directly.

Our configuration snippet for the auto-reply logic is below. The issue seems to be the `trigger_on_update` flag combined with weak intent detection for "escalate to human" cues.

```yaml
auto_reply:
enabled: true
trigger_on_update: true # This runs on every customer reply
min_confidence: 0.7
responses:
- intent: "api_key_issue"
template: "api_key_fix_1.md"
- intent: "login_problem"
template: "login_fix_1.md"
escalation_keywords: ["not working", "still broken", "i need a person"]
```

The keyword list for escalation is clearly insufficient. Customers don't use our expected phrases; they just say "no" or "didn't help."

Has anyone else dissected this failure mode? I'm looking for:
* Concrete patterns for detecting a "loop state" (e.g., same ticket, same customer, multiple auto-replies within X minutes).
* Better heuristics for "escalate now" beyond simple keywords—maybe sentiment drop, or failure of the same intent twice.
* Whether anyone has just turned off `trigger_on_update` and only allows auto-reply on the very first message.

We're considering building a cooldown period or a hard cap (max 1 auto-reply per ticket), but I want to see what's actually worked in production for others. Share your deflection-rate data before/after fixing this, if you have it.



   
Quote
(@harperk)
Reputable Member
Joined: 1 week ago
Posts: 144
 

Your deflection metric is a mirage. You're trading a short-term deflection win for a cratered CSAT and increased agent handling time - that's a net loss, not a gain. The loop happens because your trigger sees any new message as a fresh intent, a classic rookie setup.

The fix isn't in the snippet you didn't finish showing. You need a conversation state flag. First auto-reply sets a "bot_touched" flag on the ticket. Any subsequent customer reply should only trigger if that flag is absent. Or, better yet, suppress replies if the last message came from your own system. Without that, you're just a more expensive autoreply.


Data over dogma.


   
ReplyQuote
(@angelaw)
Trusted Member
Joined: 5 days ago
Posts: 37
 

You're absolutely correct about the state flag being the core technical fix. The trigger configuration you're hinting at with `trigger_on_update` is the culprit, as it's treating every public reply as a new inbound trigger event.

From a vendor management perspective, this points to a potential gap in your acceptance criteria or testing regime when the feature was procured. Did your vendor's SOW or demo cover conversation state management, or was the feature sold purely on initial deflection rate? I've seen similar issues where the contract's performance metrics only measured first-contact resolution, inadvertently incentivizing the vendor to ignore loop scenarios.

You should also audit your ticket data for the past month to quantify the operational cost. That 3-minute agent cleanup time, multiplied by the volume of looped tickets, might represent a measurable financial loss that you can present to the vendor for a remedy or credit.


Check the SLA.


   
ReplyQuote
(@integration_ian)
Estimable Member
Joined: 3 months ago
Posts: 112
 

Yep, the `trigger_on_update` flag is your smoking gun. It's a common trap in these systems - treating any public comment as a fresh inbound trigger, with zero context of the conversation history.

Beyond just adding a state flag, you need to look at the content analysis logic. Even if you suppress based on the last responder, a naive system might still loop if an agent posts a generic "Can you try that again?" and the customer says "No." You need the AI to actually detect if the customer is explicitly rejecting or negating the previous suggestions. Simple keyword matching for "no", "didn't work", "still broken" can act as a cheap kill-switch before the heavier AI model runs.

Your data shows a 40-point CSAT drop. That's the real cost. The fix is a two-layer check: conversation state (ticket field) plus a basic negative sentiment filter on the reply text. Do that in your middleware layer before the call to the AI service, or you're just burning API credits to annoy people.


Integration is not a project, it's a lifestyle.


   
ReplyQuote