Part 3 of 7 · Testimonial collector series ~4 min read

How a testimonial reply becomes a quote

A customer who fills in the reply form is doing you a favour, and they’re doing it in thirty seconds from their phone. So their reply often has a typo, a run-on sentence, or a half-finished thought. A good testimonial shouldn’t be lost to a missing apostrophe. This post walks through the one place the collector uses AI on purpose: a small, careful pass that tidies the customer’s words into a short clean quote — and a second pass that proves it didn’t change what they meant.

Key takeaways

  • When a reply lands, Bedrock Haiku 4.5 trims it into a short clean quote — typos and filler only.
  • A second model pass checks the clean quote against the original and flags anything invented.
  • If the check fails, the raw reply is kept as-is and routed to a human instead of auto-cleaning.
  • The customer always sees the exact final quote before it can be used — no surprises.
  • The model never adds praise, never changes meaning, and never makes a lukewarm reply sound glowing.

From reply to quote, step by step

How one reply is turned into a clean quote A vertical flow diagram. At the top, an input box "Reply from customer" with the raw text the customer typed into the form, plus the customer name and the moment it relates to. Below that, a step "Strip and normalize" — trim whitespace, drop a signature or a greeting line, and keep just the substance of what they said. Below that, a check "Is the reply usable?" — if the reply is empty, off-topic, or actually negative, route to "Hold for human" (no auto-clean; a person looks at it). If it's a genuine bit of praise, continue. The next step "Haiku 4.5 tidies the words" — one Bedrock call that fixes typos, trims filler, and tightens the sentence, with a strict instruction never to add praise or change the meaning. The next step "Faithfulness check" — a second Bedrock pass compares the clean quote to the original and asks whether anything was added or exaggerated. If the check says the quote drifted, route back to "Hold for human." If the check passes, look at how long the quote is. If it's already short, route to "Ready to confirm." If it's still long, route to "Trim to one line" first, then to confirm. Each terminal box — Hold for human, Ready to confirm, Trim to one line, Confirm with customer — writes the result to the tc-replies table with the original and the clean version side by side. A note at the bottom: the model only cleans; the customer still sees and confirms the exact final quote before anyone can use it. Reply from customer raw text · name · moment Step 1 Strip and normalize trim, drop greeting/sig Step 2 Is the reply usable? empty / off-topic / negative? Step 3 Haiku 4.5 tidies the words typos + filler, never meaning Step 4 Faithfulness check drifted → hold for human faithful → continue Step 5 Is the quote short enough? under the one-line limit? Hold for human no auto-clean Ready to confirm already short Trim to one line still too long Confirm with customer show exact quote if no drift short yes too long The model only cleans — the customer still sees and confirms the exact final quote.
Fig 3. One reply, turned into a clean quote. Haiku 4.5 tidies typos and filler, a faithfulness check proves nothing was added, and a quote that drifts is held for a human instead of auto-cleaned. The customer always confirms the exact final words.

What the tidy pass does — and doesn’t

When a customer submits the reply form, the form’s Function URL Lambda writes the raw text to the tc-replies table and kicks off the cleanup. The cleanup is one Bedrock Haiku 4.5 call with a deliberately narrow job. The prompt says, in effect: “Here is what a customer wrote about us. Fix spelling and punctuation, remove filler words, and make it read as one clean sentence or two. Do not add any praise. Do not change the meaning. Do not make a mild comment sound enthusiastic. Return only the cleaned text.”

So “they turned our mess of a launch into something we’re actually proud of, couldnt recommend more” becomes “They turned our mess of a launch into something we’re actually proud of — couldn’t recommend them more.” Same meaning, same enthusiasm, just readable. What the pass will not do is invent a second sentence, swap “good” for “amazing,” or paper over a complaint. If a customer’s reply is actually lukewarm, the clean version stays lukewarm — and a lukewarm quote rarely makes it past the human in Part 4 anyway.

Why there’s a second pass

Even a careful prompt can drift — a model might tighten a sentence and accidentally strengthen it. So a second Bedrock call does nothing but compare. It gets the original and the cleaned version and answers one question: “Does the cleaned text say anything the original didn’t, or sound stronger than the original?” If the answer is yes, the clean version is thrown away, the raw reply is kept exactly as the customer wrote it, and the whole thing is routed to a human to handle by hand. This is the same belt-and-braces idea used elsewhere in the series: the cheap automated path handles the easy 95%, and anything the check isn’t sure about goes to a person rather than out the door.

Both calls are tiny — a few hundred input tokens and a few hundred output tokens each — so even at a couple thousand replies a month, this is a few cents. The daily tick that finds and asks customers still uses no model at all; the only AI in the whole system lives right here, on the reply.

The customer always sees the final words

The clean quote is never the end of the story. The next post covers the two gates a quote must clear, but the first one matters here: the customer is shown the exact final quote — the cleaned version, not their raw text — and asked to confirm it reads right before it can be used. If the tidy pass changed a word they don’t like, they fix it on the spot. Nobody ever finds their words altered after the fact. The model proposes; the customer disposes.

Next post: how a tidied quote clears the two sign-off gates — the customer’s permission and your approval — before it’s allowed anywhere near your site.

All posts