Part 5 of 7 · Review request sender series ~7 min read

How unhappy customers get filtered

The single most valuable thing this system does is knowing who not to ask for a public review. This post is about the fork in the road: the sentiment gate that reads a rating or a reply, grades it, and quietly routes anyone who looks unhappy to a private feedback form — and a person — instead of handing them the public star rating.

Key takeaways

  • The most valuable thing this system does is know who not to ask for a public review — that’s the sentiment gate.
  • One Bedrock call grades the captured signal into a simple band: happy, unhappy, or unclear. The band decides the road, not the model.
  • Happy goes to the public review link; unhappy goes to a private feedback form that comes straight to the owner — never to Google.
  • A genuine complaint is escalated to a person with the job and the words attached, so a bad experience gets fixed, not just filed.
  • The gate errs toward private. An unclear signal gets a gentle open question, not a push for public stars.

Knowing who not to ask

Every other part of this system is in service of one idea: never hand an unhappy customer a public megaphone. Blast the same “leave us a review” link at everyone and you will, sooner or later, send it to the customer whose boiler was fixed late, whose physio never explained the exercises, whose car came back with a smear on the dash — and that customer, invited to rate you in public, will. A private grumble that a phone call would have settled becomes a permanent one-star that every future customer reads first. The gate exists to catch that person before the ask goes out and route them somewhere the problem can actually be put right.

So at send time, just before the composer runs, the request passes through the sentiment gate. Its whole job is to look at the signal captured back in Part 2 — a star rating, a reply, a run of past sentiment — and decide which of two very different messages this customer should get: the warm public ask, or the quiet private one. Everything downstream flows from that single fork.

Grade the signal, then fork

Grading is the second and last place a model runs, and it’s used exactly as narrowly as the composer. One Bedrock Haiku 4.5 call is handed the signal — “3 of 5 stars”, “took three visits to sort”, “lovely job, thanks” — and asked to grade it into one of three bands: happy, unhappy, or unclear. That’s all it returns: a band and a one-line reason, no prose, no decision. A model earns its place here because sentiment is genuinely fuzzy — “fine, I suppose” and “could’ve been better but ok” are the kind of lukewarm human phrasing a keyword list reads wrong — but it never gets to act on its read. It labels; deterministic code branches on the label.

And the branching is deliberately cautious. A clear happy goes to the public review link and the warm ask from Part 4. Anything unhappy is diverted: no public link ever, a gentle note pointing to the private feedback form, and if the signal is bad enough, a straight escalation to a person. The interesting band is unclear — a middling three stars, a terse reply, or no signal at all — and here the gate leans private: it sends an open question (“how did we do? anything we could improve?”) that goes to the feedback form rather than the review page. The reasoning is simple asymmetry: mistakenly sending a happy customer to a feedback form costs you one review you might have got; mistakenly sending an unhappy one to the public page costs you a one-star that never washes off. When unsure, protect the rating.

The sentiment gate: grade the signal, then fork happy to a public review link and unhappy to a private form or a person On the left, a box “Request due” carrying the captured signal sends an arrow into a box “Grade signal” inside a dotted AWS account container. Grade signal makes one call to a Bedrock box labelled Claude Haiku 4.5, which returns a band: happy, unhappy, or unclear. From grade, three labelled branches fan out to the right into a decision fork. The “happy” branch goes to a box “Public review ask” that injects the public review link and sends the warm ask from Part 4. The “unclear” branch goes to a box “Gentle open question” that points to the private feedback form. The “unhappy” branch goes to the same private feedback form, and a second arrow from it goes to a box “Escalate to a person” that emails the owner via SES with the job and the words. A note beside the fork reads: when unsure, protect the rating — unclear leans private. A bottom note reads: the model grades the signal into a band; deterministic code chooses the road, and the public review link is only ever offered to a happy customer. Request due carries the signal AWS account Grade signal happy / unhappy / unclear Bedrock Haiku 4.5 — grade only band Public review ask review link, warm ask happy Private feedback form gentle open question unclear unhappy Escalate to a person SES: job + the words real complaint When unsure, protect the rating — unclear leans private. The model grades into a band; code chooses the road, and the public link is only ever offered to a happy customer.
Fig 5. The sentiment gate. One Bedrock call grades the captured signal into happy, unhappy, or unclear; deterministic code then forks — happy customers get the public review link, unclear and unhappy ones get a private feedback form, and a genuine complaint is escalated to a person with the job and the words attached.

What private feedback actually does

Diverting an unhappy customer only helps if the private path goes somewhere useful, so it does two things. First, it gives the customer a real outlet: a short feedback form, hosted plainly, that opens with a genuine question rather than a star-rating widget — “we’d love to know how it went, and anything we could have done better.” A customer who feels heard in private is far less likely to go and vent in public, and often just wants the acknowledgement. Second, when they submit it — or when the signal was bad enough to skip the ask entirely — the system escalates to a person: the owner or manager gets an email through SES with the customer, the job, the original signal, and whatever they wrote, so they can pick up the phone. The physio clinic manager rings Tom about his exercises; the boiler engineer’s boss calls the customer whose service ran late. The complaint gets fixed, not filed.

It’s worth being clear about what this is not. This isn’t about hiding bad reviews or gaming a rating — an unhappy customer is completely free to go and leave one star anywhere they like, and nothing here stops them. It’s about which customers the business proactively points at its public page. Asking a delighted customer for a review and giving an unhappy one a private, human way to be heard first is exactly what a good business does by instinct when it has the time to notice. The gate just makes sure the busy ones notice every time, automatically, without ever having to read the mood themselves.

Design rules that shaped the gate

  • Never megaphone the unhappy. The public review link is only ever offered to a customer graded happy — full stop.
  • The model grades, code forks. Bedrock returns a band and a reason; deterministic code chooses the road and the link.
  • When unsure, go private. An unclear signal gets a gentle open question to the feedback form, not a push for public stars.
  • Fix it, don’t file it. A real complaint escalates to a person with the job and the words, so someone can put it right.
  • Not censorship, curation. Anyone can still review in public; the system only chooses who it actively invites to.
  • One grade per request. The signal is graded once at send time and recorded, so the fork is auditable and never re-litigated.
All posts