{"id":"code-work-cs-liquid-saved-reply","audience":"customer-support","category":"coding","track":"coding","technique":"grounding","title":"Build a saved reply with placeholders the helpdesk supports","free":false,"task":"Write the saved reply for delayed orders using only the placeholders the helpdesk doc lists. Greet with the customer's first name, falling back to there when it's missing. Include the order's tracking link. Pro customers, and only they, get one extra line about a free upgrade to express on their next order. Sign off as The Copper Kettle team, because the helpdesk can't insert agent names. One code block, at most 10 lines, then under 20 words outside the code.","materialLabel":"Helpdesk placeholder doc and a sample ticket (attached to your prompt automatically)","material":"TICKETLY - Saved reply placeholders (docs excerpt)\nSupported:\n- {{ customer.first_name }}\n- {{ customer.plan }} (free, pro)\n- {{ order.number }}\n- {{ order.tracking_url }}\nFilters: | default: \"text\" (used when the value is empty)\nLogic: {% if ... %} ... {% endif %} with == comparisons\nNot supported: agent fields, dates, custom fields. Unsupported placeholders print as blank.\n\nSample ticket:\nFrom: Theo Brandt (plan: pro)\n\"Order CK-10440 still says processing after 9 days. What's going on?\"\n\nNotes from Rosa:\n- The Wickworks supplier delay should clear by Nov 20.\n- We used to sign replies with the agent's name; that broke when we moved to Ticketly.\n- Free-plan customers get the standard apology only.","rules":[{"type":"codeBlocks","count":1},{"type":"maxCodeLines","max":10},{"type":"maxProseWords","max":20}],"mistakes":[{"title":"Forgetting missing names","why":"The AI writes Hi {{ customer.first_name }}, which prints \"Hi ,\" when the name is empty.","fix":"Add: \"Fall back to there with the default filter.\"","checks":["r0"]},{"title":"Not sticking to the doc","why":"The AI invents placeholders like {{ agent.name }} that print as blanks.","fix":"Add: \"Only the placeholders in the doc. Sign off The Copper Kettle team.\"","checks":["r1","r2"]},{"title":"Not saying who gets the upgrade","why":"The AI offers the upgrade to everyone.","fix":"Add: \"Only Pro customers get the express line, inside an if block.\"","checks":["r2"]},{"title":"Getting a menu of options","why":"The AI likes to offer two or three versions of the reply, so you're left to pick and test them yourself.","fix":"Add: \"Give one reply only, in one code block, no alternatives.\"","checks":["codeBlocks","maxCodeLines"]},{"title":"Getting a tutorial","why":"By default the AI explains every part of the code at length, which you then have to scroll past.","fix":"Add: \"After the code, one line under 10 words. Nothing else.\"","checks":["maxProseWords"]}],"promptHints":[{"label":"Handles missing names","patterns":["default","fall ?back","there"]},{"label":"Sticks to the doc","patterns":["only (the )?placeholders","supported","from the doc"]},{"label":"Limits the upgrade to Pro","patterns":["pro (customers|only)","only pro","if customer\\.plan"]},{"label":"Gives the sign-off","patterns":["copper kettle team","sign ?off"]},{"label":"Caps the code length","patterns":["\\d+\\s*lines","at most","under \\d+","short"]}],"hint":"The doc says what works and what prints blank. Tell the AI to stay inside it, how to handle a missing name, and who gets the extra line.","rubricLabels":["Greets with {{ customer.first_name | default: \"there\" }} (the default filter), not a bare first name","Uses only placeholders from the doc, including {{ order.tracking_url }}, and no agent, date or custom-field placeholders","Wraps the express-upgrade line in {% if customer.plan == \"pro\" %} ... {% endif %} and signs off The Copper Kettle team"]}