{"slug": "i-deleted-140-canned-replies-and-kept-20-response-time-went-down-and-the-answers", "title": "I deleted 140 canned replies and kept 20. Response time went down and the answers got better.", "summary": "A developer audited 1,912 canned helpdesk replies across three deployments and roughly 46,000 outbound messages, finding that 68–74% of templates were never used while 20 well-built templates covered 84% of message volume. The work distills the library into twenty variable-driven templates organized around five customer moments—first contact, price and scope, availability, bad news, and handoff—and argues that templates hardcoding prices or service areas become incidents once those facts change.", "body_md": "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.\n\nI 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.\n\nThe cost isn't bad copy. It's that nobody can find the right one fast enough to bother.\n\nAcross 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.**\n\nSo 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.\n\nA template earns its place only if it does three things at once:\n\nMost 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.\n\nEvery inbound message is, functionally, one of five things. Not by topic — by **what the sender needs to happen next**.\n\n| Moment | What the customer needs | Templates | \n|---|---|---|\n| 1. First contact | To know a human-shaped thing received them | 4 | \n| 2. Price & scope | A number, or an honest reason there isn't one yet | 4 | \n| 3. Availability | A specific slot or a truthful alternative | 4 | \n| 4. Bad news | The delay stated plainly, once | 4 | \n| 5. Handoff & close | A named next owner and a time | 4 | \n\nTwenty. Written as reusable patterns with `{{variables}}`, not as finished copy.\n\nThe 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.\n\n**T1 · Acknowledge + name the next step + name the time**\n\n```\nGot it, {{first_name}} — this is {{agent_name}}. I've logged\n{{one_line_summary}}. {{next_action}} by {{specific_time}}.\n```\n\n**T2 · Acknowledge + one clarifying question (only one)**\n\n```\nThanks {{first_name}}. Before I point you to the right person:\n{{single_question}}\n```\n\n**T3 · Out of hours**\n\n```\nThis is {{agent_name}} — I've got your message. The team is back\n{{day_time}}. Anything urgent before then goes to {{urgent_path}}.\n```\n\n**T4 · Wrong channel / not our service**\n\n```\nYou've reached {{our_company}} — we don't handle {{topic}}, but\n{{correct_route}} does. I can pass this along if you'd like.\n```\n\nT2 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.\n\nThis is where AI agents do the most damage, and it isn't the number. It's the *confidence*.\n\n**T5 · Real price, real range**\n\n```\n{{service}} runs {{low}}–{{high}} for {{typical_scope}}.\nThe variable is {{driver}}. Fixed quote after {{step}}.\n```\n\n**T6 · Price depends — say what on**\n\n```\nI can't give you a real number without {{missing_fact}} — it moves\nthe price by about {{impact}}. Two options: {{path_a}}, or\n{{path_b}} if you'd rather not go into detail yet.\n```\n\n**T7 · You're more expensive, and say so**\n\n```\nWe're usually {{percent}}% above the cheapest quote you'll get.\nThat buys {{specific_difference}}. If that's not what you need,\nI'd rather tell you now than at the invoice.\n```\n\n**T8 · Scope boundary**\n\n```\n{{included}} is in. {{excluded}} isn't — it's {{cost}} if you\nneed it. Most people find out at {{point}}, so I'm flagging it now.\n```\n\nT7 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.\n\n**T9 · Slot offered, capacity checked**\n\n```\n{{day}} at {{time}} is open with {{person}}. I can hold it for\n{{hold_window}}. Want me to?\n```\n\n**T10 · Nothing soon, offer the real options**\n\n```\nThe next {{service}} opening is {{date}}. If that's too far:\n{{alternative_1}} or {{alternative_2}}.\n```\n\n**T11 · Waitlist, with an honest probability**\n\n```\nI can put you on the list for {{date_range}}. Cancellations open\nabout {{frequency}}, usually with {{notice}} notice. It's not a\nguarantee — if you need certainty, take {{firm_option}}.\n```\n\n**T12 · Confirm without over-committing**\n\n```\nRequested: {{day}} {{time}} with {{person}}. You'll get a\nconfirmation from {{system}} within {{window}}. Until then it's\nheld, not booked.\n```\n\nT12 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.**\n\nBad 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.**\n\n**T13 · Delay, with a new date**\n\n```\n{{thing}} is going to be {{delay}} late — new date is {{date}}.\nReason: {{one_sentence}}. Here's what I've done about it:\n{{action}}.\n```\n\n**T14 · Delay, no new date yet**\n\n```\nI don't have a date for {{thing}} yet, and I'd rather say that\nthan guess. You'll hear from me by {{time}} with either a date\nor an honest update.\n```\n\n**T15 · We got it wrong**\n\n```\nWe got {{thing}} wrong. It should have been {{correct}}. I've\n{{remedy}} — that's done, not planned. {{prevention}}.\n```\n\n**T16 · Can't do it**\n\n```\nWe can't do {{request}}. {{reason_in_plain_language}}.\nWhat we can do is {{alternative}}.\n```\n\nT14 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.\n\n**T17 · Handoff with a payload**\n\n```\nI'm passing this to {{person_or_role}}, who handles {{domain}}.\nThey'll have: {{summary_of_what_you_told_me}}. You won't need to\nrepeat it. Expect them by {{time}}.\n```\n\n**T18 · Handoff because it's outside my authority**\n\n```\nThis one isn't mine to decide — {{decision}} sits with {{role}}.\nI've sent it up with a recommendation: {{recommendation}}.\n```\n\n**T19 · Chasing, without apologising for existing**\n\n```\nFollowing up on {{reference}} — {{status}}. Next step is\n{{action}}, owned by {{person}}, {{time}}.\n```\n\n**T20 · Close, with the door left open**\n\n```\nThat's {{thing}} sorted. If {{specific_condition}} changes,\nmessage me here and it comes straight back to me.\n```\n\nT17 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.\n\nTwenty templates decay. Variables go stale, a service gets discontinued, a policy changes, and the template keeps confidently saying the old thing.\n\nPull one number monthly:\n\n```\nMonth: ____________\nOutbound messages:                 ____\nTemplate inserts:                  ____   (target: >55% of eligible)\nTemplates used 0 times:            ____   (prune after 2 months)\nTemplates edited:                  ____   (any edit = review the variable)\nEscalations citing wrong info:     ____   (target: 0)\nMedian time-to-first-reply:        ____   (the actual point of this)\n```\n\nIf 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.\n\n```\n[ ] Every fact that can change is a {{variable}}\n[ ] The first line answers the actual question\n[ ] One decision per template, not three\n[ ] A specific time or a specific role — never \"soon\"\n[ ] States what the customer must NOT repeat\n[ ] Has an explicit escape hatch for when it doesn't fit\n[ ] Says \"held\" or \"requested\" unless it's genuinely confirmed\n[ ] No apology longer than the fix\n[ ] Tested on the three angriest threads from last month\n```\n\nThat last line is the only QA that matters. A template that survives a furious customer at 6pm on a Friday will survive anything.\n\nIf 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](https://whop.com/agentfast-04b6/)", "url": "https://wpnews.pro/news/i-deleted-140-canned-replies-and-kept-20-response-time-went-down-and-the-answers", "canonical_source": "https://dev.to/chenwengui23/i-deleted-140-canned-replies-and-kept-20-response-time-went-down-and-the-answers-got-better-kli", "published_at": "2026-10-19 02:06:19+00:00", "updated_at": "2026-10-19 02:19:07.650059+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "ai-products"], "entities": [], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/i-deleted-140-canned-replies-and-kept-20-response-time-went-down-and-the-answers", "markdown": "https://wpnews.pro/news/i-deleted-140-canned-replies-and-kept-20-response-time-went-down-and-the-answers.md", "text": "https://wpnews.pro/news/i-deleted-140-canned-replies-and-kept-20-response-time-went-down-and-the-answers.txt", "jsonld": "https://wpnews.pro/news/i-deleted-140-canned-replies-and-kept-20-response-time-went-down-and-the-answers.jsonld"}}