---
title: "AI macro generation for support: workflows that don't produce robotic replies"
excerpt: "Macros calcify; LLM-generated replies feel generic. The workflow that works: the agent surfaces the next-best macro and a personalized draft based on the customer record, the agent picks or edits, the chosen rationale feeds the next macro update."
author: mei
category: Playbooks
date: "2026-05-30"
---

The workflow that produces non-robotic AI replies has three moving parts: a ranked macro suggestion, a personalized draft conditioned on the customer record, and a feedback loop that captures which choice the human agent made and why. Without the third part, your macro library calcifies and every generated reply collapses into the same five sentences. Zendesk, Intercom, Forethought, Ada, and Claude can each carry one of these parts. Wiring them together is the job.

## The workflow

1. **Pull the live macro library and rank it.** In Zendesk, macros sit under Admin Center; in Intercom they live as Saved Replies and Fin's answer set. Forethought and Ada both ingest these libraries as retrieval sources. The first move is to compute a similarity score between the incoming ticket and every macro, surface the top three, and stop pretending one macro is always right. See [the AI ticket triage pattern](/blog/ai-zendesk-support) for the upstream classification step.

2. **Generate a personalized draft for each candidate.** Pass the top macro to Claude with the customer's order history, tier, prior tickets, and CSAT trend. The draft fills the macro's variables with real context, not `{{first_name}}`. Forethought's Solve and Ada's generative replies do a version of this; the difference is whether you let the model rewrite the macro body or only the surrounding sentences. We cover the rewrite envelope in [response drafting](/blog/ai-response-drafting).

3. **Show the agent two things side by side.** The ranked macro, and the generated draft. The agent picks one, edits, or rejects both. This is the only step that produces signal. The pick + edit diff is the training data for tomorrow's macro update.

4. **Write the rationale back.** Why was macro #2 chosen over #1? What did the agent change? Most teams skip this because there's no place to put it. Zendesk's internal notes field is not searchable across tickets in a useful way.

5. **Roll the rationale into a weekly macro review.** A human (or a scheduled Claude job) reads the week's rationales, proposes macro edits, retires dead macros, and adds new ones for the patterns that keep generating from scratch.

## Worked example: a delayed-shipment ticket

Incoming: "Where's my order? It's been 9 days." Forethought ranks three macros: generic shipping delay, carrier-specific delay, and high-value-customer apology. Claude generates a draft against the top one, conditioned on the fact that this customer is a returning buyer with two prior delay tickets and a 3/5 CSAT trend. The draft drops the boilerplate "We apologize for any inconvenience" and leads with the carrier scan timestamp. The agent picks the draft, edits one sentence to offer a $10 credit, and submits. The rationale ("repeat delay + low CSAT = proactive credit") gets logged.

## The persistent-state pain

Helpdesks are excellent at the ticket. They are bad at the layer above it: which macros are decaying, which rationales repeat across agents, which draft edits cluster into a new macro waiting to be named. Zendesk, Intercom, Freshdesk, Help Scout, and Gorgias all stay the system of record for the ticket itself. But the AGENT interpretation around the ticket (the triage rationale, the chosen macro, the edit diff, the CSAT downstream effect) has no native home.

One way to solve this is a workspace like Dock that holds the rationale rows, the macro-decay analysis, and the draft-edit clusters. Pointers (`zendesk_ticket_id`, `intercom_conversation_id`) link Dock rows back to the helpdesk record. The ticket lives in Zendesk; the reasoning lives in Dock. We describe the shape in [Dock for customer support](/blog/dock-for-customer-support) and how it interacts with [CSAT analysis](/blog/ai-csat-analysis).

## Why it matters

Macros are the single biggest lever on reply time and the single biggest source of bad customer experience when stale. Personalization research has held steady on this for years: customers can tell. ([Zendesk customer service statistics](https://www.zendesk.com/blog/customer-service-statistics/), and CSAT methodology background at [Qualtrics](https://www.qualtrics.com/experience-management/customer/what-is-csat/).) A workflow that ranks, drafts, captures rationale, and refreshes the library is how you get AI replies that don't read as AI replies. The [agent's identity and lifecycle](/blog/agent-identity-lifecycle) determines who can touch the macro library, which matters once the loop is running.

Start with the full pillar: [how to run customer support with AI](/blog/how-to-run-customer-support-with-ai).

## FAQ

**Does AI macro generation replace the macro library?**
No. It ranks and personalizes against the library and proposes updates. The library remains the source of truth in Zendesk or Intercom.

**Which tool writes the draft?**
Claude or a comparable LLM. Forethought and Ada wrap their own models for in-product use. The choice depends on whether you want a vendor-managed or BYO-model setup.

**How do you stop drafts from sounding generic?**
Condition on the customer record, not just the ticket text. Order history, tier, prior CSAT, and the chosen macro's tone all go into the prompt.

**Where does the rationale live?**
Not in the helpdesk. A workspace layer (Dock or equivalent) that holds rows keyed to the ticket ID is the cleanest place. The helpdesk stays the system of record for the ticket.
