Your team answers the same fifteen questions four hundred times a month, and every agent answers them slightly differently. This playbook mines resolved tickets for your most common issue types, then drafts empathetic, on-policy macro responses with clean placeholders — a canned-response library that doesn't read canned.
Workflow area: Customer Support · Tier: Core · Hands-on time: ~35 minutes
A good macro is harder to write than it looks: it must be warm without being fake, complete without being a wall, and safe to send after a two-second skim by a tired agent at ticket #60. That last constraint is why placeholder hygiene matters more than prose quality — a macro that tempts agents to send it unfilled ("Hi {{name}}, your refund of $AMOUNT…") does damage at scale. AI drafts the fifteen variants fast; your job is policy accuracy and the placeholder discipline.
Mine the ticket data for the top types. Export 200–500 recent resolved tickets (subjects + first customer message is enough; strip customer names and emails first):
Here are recent support ticket subjects and first messages
(customer details removed). Cluster them into issue types.
For each type give: a short name, estimated share of this sample,
the 2-3 distinct variants within it (e.g. "refund request" splits
into within-policy and out-of-policy), and whether it is
MACRO-SUITABLE (same answer works for most cases) or
JUDGMENT-REQUIRED.
Tickets:
[PASTE — batch in chunks if needed]
Rules: cluster by what the customer needs, not by the words they
used. List until you've covered ~80% of the sample, then stop.
Sanity-check the list against what your agents say all day — they'll spot a missing type in seconds.
Lock the facts per type before drafting. For each of the fifteen: the current correct answer, the policy source, and any steps the customer must take. Two lines each, from your docs — not from the model's memory of how refunds usually work.
Draft the macros in one structured pass.
Write support macros for these ticket types. Our voice: [2-3
ADJECTIVES + ONE EXAMPLE SENTENCE FROM A GREAT PAST REPLY].
Product: [ONE LINE]. Helpdesk: [Zendesk/Freshdesk/etc.] — use its
placeholder syntax, e.g. {{ticket.requester.first_name}}.
For EACH type below, produce:
1. Macro name (searchable: "Refund - within policy - approved")
2. The response: greeting, one empathy line that acknowledges
the specific situation, the answer with any steps numbered,
what happens next with a timeframe, sign-off
3. Placeholders for EVERY variable fact — name, order number,
amount, dates. Never a guessable default.
4. An AGENT NOTE line (not sent): when NOT to use this macro,
and what to check before sending.
Types and verified facts:
1. [TYPE] — correct answer: [FACTS]. Steps: [STEPS].
2. [TYPE] — ...
Rules: under 120 words per macro. No "we apologize for any
inconvenience" — empathy must reference the actual problem. Do
not invent policy details beyond the facts I provided; if a
macro needs a fact I didn't give, insert [MISSING: what] instead.
Review like the customer, then like the tired agent. A shippable macro looks like:
Macro: Delivery - delayed - carrier issue
Hi {{ticket.requester.first_name}},
Thanks for flagging this — I can see order {{order_number}} has
been sitting with the carrier longer than it should. That's
frustrating when you were promised {{promised_date}}.
Here's what I've done: I've raised a trace with the carrier and
marked your order priority. You'll get an update from me within
24 hours, whatever the carrier says.
{{agent_signature}}
AGENT NOTE: Only for carrier-confirmed delays. If tracking shows
"delivered", use "Delivery - marked delivered - not received"
instead. Check the promised date in the order record before
sending.
For each macro ask: does every placeholder force the agent to look something up (good), or can it be sent blind (bad)? Does the empathy line survive being received three times by the same customer? Is every commitment ("within 24 hours") one your team actually keeps?
Ship, then instrument. Load the macros into your helpdesk with the naming convention intact, walk the team through the agent notes, and set a 30-day review: which macros get edited before sending every time? That edit pattern is the macro telling you it's wrong — feed the commonly-added sentences back into the next revision.
Ticket exports contain customer names, emails, order details, and sometimes payment fragments. Strip personal data before pasting into any AI tool, or run the clustering inside your approved enterprise tenant. The macros themselves should contain placeholders — never a real customer's details as the example.
A macro library is policy at scale — which means errors are errors at scale. Let AI do the clustering and the drafting, but let humans own the facts, and build every macro so the agent must engage before hitting send.