Review replies drafted by AI, graded by people, watched by a watchdog
Make scenarios turn guest-review emails into region-routed alerts, draft replies with Claude into the alert thread for a person to check, and add the grading, reporting and watchdog around them. Nothing is published automatically.
Where this applies
Hotels, rentals, restaurants, clinics: any business that answers public reviews and wants a person in the loop.
- scenarios, none posting publicly
- 9
- independent ways to grade a draft
- 2
- silent-failure checks every six hours
- 3
The problem
An unhappy review deserves a prompt, accurate public reply, and a good one takes time. But a reply that promises a fix that has not happened, or describes a feature that does not exist, is worse than none.
A model writes fluent, confident replies, and confidence is the risk. So the work is deliberately a calibration phase: draft, have people grade, tune the prompt and measure a pass rate before any reply goes out without a person in the loop.
What we built
Alerts that carry the thread
Notification emails from the property-management system are parsed by an OpenAI model in JSON mode into address, rating, guest, dates, reservation, region, a critical flag, a complaint flag and categorised issues, then logged to Airtable (once, by checking the reservation first) and posted to the right region's Slack channel. Critical reviews post at any hour; ordinary ones only in working hours. The Slack message's timestamp is stored on the review, so the draft can later be posted in the same thread.
Poll, claim, then work
Every thirty minutes the drafter picks up to five reviews that have no draft yet and are rated four stars or lower, or are five-star with a complaint flag. A filter lets a record through only during working hours in the company's home time zone, and immediately sets it to Pending so the next poll cannot take it again. Outside hours the record stays blank and is simply retried.
The prompt lives in data, and the model is told what it does not know
The system prompt is fetched by name from an Airtable record and its version is stamped on every review and log row, so each graded outcome ties to the prompt that produced it. Each run also pulls the home's known constraints and listing disclosures and its best earlier positive review, with sentinel rows so those searches can never return empty and break the chain. The model is told that amenity data, messaging history and corrective-action evidence are unavailable, so it must not claim a fix and must raise a verification flag instead. Its schema-enforced output classifies each review (resolvable, structural, sensitive, mixed, escalate or no reply) and escalations and anything legal, safety or refund-related go to a person with no draft at all.
Two ways to grade a draft
The draft is posted in the alert thread with a reaction legend and a row is written to a response log with its outcome pending. One grading scenario reads the emoji reactions every four hours (a check-mark beats an edit mark beats a cross, matched as whole tokens to avoid false hits) and sets posted as-is, posted edited or not posted. The other, more authoritative, asks the property-management system every six hours whether a public host reply now exists and compares it with the draft: an exact match is as-is, anything else is edited, and the human's final wording is captured for calibration.
Reporting and a watchdog that stays quiet
A weekly report posts the counts in each outcome bucket and a pass rate against a go-live threshold. A daily digest goes to each regional manager by direct message, with nothing at all on days with no drafts. And every six hours a watchdog runs three checks: reviews in an error state, drafts stuck at Pending for over a day, and drafts ungraded for ten days, ahead of the fourteen-day window in which grades count. It posts one message only when a count is above zero, naming the likely cause and the fix, and it only reads, so it cannot disturb the pipeline.
Testing without touching real records
A synthetic harness runs six fixed cases, each labelled with its expected result (pure praise, a feature with no constraint on record, a noise complaint where one is, an issue with no fix evidence, a safety allegation, a boundary case), and a backfill test runs the live prompt over the twenty-five most recent flagged reviews. Both write nothing to real reviews: only audit rows with a blank outcome, which keeps them out of the pass-rate measurement.
The outcome
The four scenarios running now (alerts, drafter, watchdog and digest) have 1,578 runs and 3,012 operations between them, with two errors, both before a fix on 18 September.
Most drafter runs are one-operation empty polls, which means the number of reviews actually drafted is small so far. This is a calibration-phase system, built to be measured before it is trusted.
The two grading scenarios ran cleanly for two days before being switched off; five of the daily digests have carried real content, and the watchdog's fifty most recent runs found nothing to report.
Where it stops
Grading is the part of the loop that is not running today: both grading scenarios are switched off and the weekly report has never run, so the pass rate is not being measured at the moment. Draft volume is low, and the two test harnesses have been built but not yet run from Make; they also call a different model configuration from the live drafter, so their output is a guide rather than proof. An ordinary review that arrives outside the alert window is logged without a Slack post, and digest routing is by market codes written into the scenario, so a market not on the list is left out. The watchdog cannot report its own failure.
Built with
- Make.com
- Airtable
- Anthropic Claude
- OpenAI
- Gmail
- Slack
Patterns used
- Claim then work
- Prompt in data
- Silence means healthy
- Metric-neutral audit rows
Page copy drafted with AI assistance. Skofi is accountable for it. Editorial policy
Have something shaped like this?
If any part of the above resembles a problem you are living with, a short call is the fastest way to find out whether it is the same problem underneath.
What happens on the call
- 15 minutes, no deck
- We map the process on the call
- A written scope, or an honest no