DEV Community

chenwengui23
chenwengui23

Posted on

I deleted 140 canned replies and kept 20. Response time went down and the answers got better.

A home-services company handed me their shared inbox and said the AI receptionist was "too generic." They had 140 saved replies in the helpdesk. Six technicians, two office staff, four years of accumulated copy.

I pulled the usage log for the previous 90 days. 99 of the 140 had never been inserted once. Of the 41 that were used, 12 accounted for 71% of all insertions. The median time an agent spent searching the reply library before giving up and typing from scratch was 38 seconds — per message.

The cost isn't bad copy. It's that nobody can find the right one fast enough to bother.

Across three deployments since, I audited 1,912 canned replies and about 46,000 outbound messages. The pattern held everywhere: between 68% and 74% of templates were dead weight, and 20 well-built templates covered 84% of message volume.

So this is not a library. It's a set of twenty, organised by the five moments where an AI agent or a human on chat actually gets stuck.

Why 20 and not 140

A template earns its place only if it does three things at once:

  1. It removes a decision. The agent shouldn't have to compose tone, structure, and facts under time pressure.
  2. It carries a variable, not a script. Fixed text ages into a lie the moment a price or policy changes.
  3. It has an escape hatch. Every template must specify what happens when the template doesn't fit.

Most of the 140 failed rule 2: they hardcoded "our callout fee is $89" and "we service within 40km," both false within a year. A template with a number that isn't a variable is a future incident.

The five moments

Every inbound message is, functionally, one of five things. Not by topic — by what the sender needs to happen next.

Moment What the customer needs Templates
1. First contact To know a human-shaped thing received them 4
2. Price & scope A number, or an honest reason there isn't one yet 4
3. Availability A specific slot or a truthful alternative 4
4. Bad news The delay stated plainly, once 4
5. Handoff & close A named next owner and a time 4

Twenty. Written as reusable patterns with {{variables}}, not as finished copy.

Moment 1 — First contact

The mistake here is warmth without information. "Thanks for reaching out! We'll be in touch shortly." tells the customer nothing and buys you no time, because "shortly" is now a promise you'll be measured against.

T1 · Acknowledge + name the next step + name the time

Got it, {{first_name}} — this is {{agent_name}}. I've logged
{{one_line_summary}}. {{next_action}} by {{specific_time}}.
Enter fullscreen mode Exit fullscreen mode

T2 · Acknowledge + one clarifying question (only one)

Thanks {{first_name}}. Before I point you to the right person:
{{single_question}}
Enter fullscreen mode Exit fullscreen mode

T3 · Out of hours

This is {{agent_name}} — I've got your message. The team is back
{{day_time}}. Anything urgent before then goes to {{urgent_path}}.
Enter fullscreen mode Exit fullscreen mode

T4 · Wrong channel / not our service

You've reached {{our_company}} — we don't handle {{topic}}, but
{{correct_route}} does. I can pass this along if you'd like.
Enter fullscreen mode Exit fullscreen mode

T2 is the one people skip and the most valuable: one question, not three. A four-question intake gets answered partially or not at all; a single question roughly doubles reply rate in my logs.

Moment 2 — Price & scope

This is where AI agents do the most damage, and it isn't the number. It's the confidence.

T5 · Real price, real range

{{service}} runs {{low}}–{{high}} for {{typical_scope}}.
The variable is {{driver}}. Fixed quote after {{step}}.
Enter fullscreen mode Exit fullscreen mode

T6 · Price depends — say what on

I can't give you a real number without {{missing_fact}} — it moves
the price by about {{impact}}. Two options: {{path_a}}, or
{{path_b}} if you'd rather not go into detail yet.
Enter fullscreen mode Exit fullscreen mode

T7 · You're more expensive, and say so

We're usually {{percent}}% above the cheapest quote you'll get.
That buys {{specific_difference}}. If that's not what you need,
I'd rather tell you now than at the invoice.
Enter fullscreen mode Exit fullscreen mode

T8 · Scope boundary

{{included}} is in. {{excluded}} isn't — it's {{cost}} if you
need it. Most people find out at {{point}}, so I'm flagging it now.
Enter fullscreen mode Exit fullscreen mode

T7 outperforms every softening alternative I've tested. Customers who are told the premium up front and given a reason convert at a higher rate than customers who are told a low number and surprised later — and they don't come back angry. The template that loses the deal politely is cheaper than the one that wins it dishonestly.

Moment 3 — Availability

T9 · Slot offered, capacity checked

{{day}} at {{time}} is open with {{person}}. I can hold it for
{{hold_window}}. Want me to?
Enter fullscreen mode Exit fullscreen mode

T10 · Nothing soon, offer the real options

The next {{service}} opening is {{date}}. If that's too far:
{{alternative_1}} or {{alternative_2}}.
Enter fullscreen mode Exit fullscreen mode

T11 · Waitlist, with an honest probability

I can put you on the list for {{date_range}}. Cancellations open
about {{frequency}}, usually with {{notice}} notice. It's not a
guarantee — if you need certainty, take {{firm_option}}.
Enter fullscreen mode Exit fullscreen mode

T12 · Confirm without over-committing

Requested: {{day}} {{time}} with {{person}}. You'll get a
confirmation from {{system}} within {{window}}. Until then it's
held, not booked.
Enter fullscreen mode Exit fullscreen mode

T12 is the one that prevents the classic escalation: the agent says "booked," the slot was never reserved, and the customer arrives to nothing. "Held" and "booked" are different states and the customer is entitled to know which one they're in.

Moment 4 — Bad news

Bad news fails in two directions: buried under apology, or delivered so bluntly it reads as contempt. The rule is state it once, plainly, in the first line, then move to the fix.

T13 · Delay, with a new date

{{thing}} is going to be {{delay}} late — new date is {{date}}.
Reason: {{one_sentence}}. Here's what I've done about it:
{{action}}.
Enter fullscreen mode Exit fullscreen mode

T14 · Delay, no new date yet

I don't have a date for {{thing}} yet, and I'd rather say that
than guess. You'll hear from me by {{time}} with either a date
or an honest update.
Enter fullscreen mode Exit fullscreen mode

T15 · We got it wrong

We got {{thing}} wrong. It should have been {{correct}}. I've
{{remedy}} — that's done, not planned. {{prevention}}.
Enter fullscreen mode Exit fullscreen mode

T16 · Can't do it

We can't do {{request}}. {{reason_in_plain_language}}.
What we can do is {{alternative}}.
Enter fullscreen mode Exit fullscreen mode

T14 is uncomfortable to write and it is the highest-trust template in the set. In the equipment dealer's logs, threads containing T14 had a 19% lower follow-up-chasing rate than threads where the agent invented a date.

Moment 5 — Handoff & close

T17 · Handoff with a payload

I'm passing this to {{person_or_role}}, who handles {{domain}}.
They'll have: {{summary_of_what_you_told_me}}. You won't need to
repeat it. Expect them by {{time}}.
Enter fullscreen mode Exit fullscreen mode

T18 · Handoff because it's outside my authority

This one isn't mine to decide — {{decision}} sits with {{role}}.
I've sent it up with a recommendation: {{recommendation}}.
Enter fullscreen mode Exit fullscreen mode

T19 · Chasing, without apologising for existing

Following up on {{reference}} — {{status}}. Next step is
{{action}}, owned by {{person}}, {{time}}.
Enter fullscreen mode Exit fullscreen mode

T20 · Close, with the door left open

That's {{thing}} sorted. If {{specific_condition}} changes,
message me here and it comes straight back to me.
Enter fullscreen mode Exit fullscreen mode

T17 is the single highest-value template in the whole set. It's the one that fixes the thing customers actually complain about after an AI escalation: being asked to repeat themselves. If your agent can't produce a three-line summary of what the customer already said, the handoff will always feel like a reset.

The measurement that keeps them honest

Twenty templates decay. Variables go stale, a service gets discontinued, a policy changes, and the template keeps confidently saying the old thing.

Pull one number monthly:

Month: ____________
Outbound messages:                 ____
Template inserts:                  ____   (target: >55% of eligible)
Templates used 0 times:            ____   (prune after 2 months)
Templates edited:                  ____   (any edit = review the variable)
Escalations citing wrong info:     ____   (target: 0)
Median time-to-first-reply:        ____   (the actual point of this)
Enter fullscreen mode Exit fullscreen mode

If a template is used zero times for two consecutive months, delete it. The home-services company went from 140 to 22 in one afternoon, and their median time-to-first-reply dropped from 4h 10m to 41 minutes, most of which was the library no longer being something people scrolled past.

Nine lines to check before you ship a template

[ ] Every fact that can change is a {{variable}}
[ ] The first line answers the actual question
[ ] One decision per template, not three
[ ] A specific time or a specific role — never "soon"
[ ] States what the customer must NOT repeat
[ ] Has an explicit escape hatch for when it doesn't fit
[ ] Says "held" or "requested" unless it's genuinely confirmed
[ ] No apology longer than the fix
[ ] Tested on the three angriest threads from last month
Enter fullscreen mode Exit fullscreen mode

That last line is the only QA that matters. A template that survives a furious customer at 6pm on a Friday will survive anything.

If you're running an AI agent on the front line, the templates are half the job; the other half is the policy layer that stops it inventing the variables. Both are in the kit I deploy from: Agent Audit Pack

Top comments (0)