Skip to Content
AgentsReview Response Writer

Review Response Writer

[Live] · agent__review-response-writer · Claude Sonnet 4.6

Drafts a contextually appropriate response to a new customer review on Google Business Profile or Facebook, classifies the review’s sentiment and topics, and determines whether human approval is required before posting.


Overview

FunctionDraft and classify responses to incoming customer reviews
TypeWorker — Reactive
ModelClaude Sonnet 4.6
Queueagent__review-response-writer
Concurrency8
Timeout2 min
Est. cost / task~$0.08
PlanPro+

Trigger

Reviews enter the queue via two paths:

  • Polling: The platform integration service polls connected GBP and Facebook Pages every 6 hours for new reviews. New reviews since the last poll are enqueued individually.
  • Webhook: If the platform supports real-time webhooks (Meta Business webhooks for Facebook reviews), reviews are enqueued immediately on receipt.

Each job processes exactly one review.


Input

interface ReviewResponseWriterInput { tenantId: string; reviewId: string; // platform-native review ID — used for posting the response // Review details platform: 'google_business_profile' | 'facebook'; starRating: 1 | 2 | 3 | 4 | 5; // null for Facebook recommendations (true/false only) reviewText: string; // full review text; may be empty for rating-only reviews reviewerName: string; // display name — do NOT use surname if present reviewDate: string; // ISO date // Response context existingResponse?: string; // if the review already has a response (editing mode) locationName?: string; // if multi-location business, which location this review is for }

Output

interface ReviewResponseWriterOutput { reviewId: string; draftResponse: string; // the complete response text, ready to post // Classification sentiment: 'positive' | 'negative' | 'neutral'; topics: string[]; // specific issues or themes mentioned, e.g. ["wait time", "staff friendliness", "parking"] starRating: number; // echoed from input for routing logic // Approval routing requiresHITL: boolean; // true for all 1–3 star reviews; also true for any escalation trigger urgency: 'normal' | 'high' | 'critical'; escalationReason?: string; // populated if urgency is high or critical // Suggested follow-up suggestedAction?: string; // e.g. "Offer to call the reviewer — phone number available in profile" // Metadata wordCount: number; // must be 50–150 processingNotes: string; // any constraints or decisions the agent made during drafting }

Sample output excerpt

{ "reviewId": "gbp-review-2026-03-28-001", "draftResponse": "Thank you for taking the time to share your experience, Sarah. We're really sorry to hear that your visit didn't go as expected — the wait time you mentioned is not the standard we hold ourselves to, and we completely understand how frustrating that must have been. Our manager has been made aware and we're looking into what happened that day. We'd love the chance to make it right — please reach out to us directly at hello@acmecafe.com and we'll take care of you personally.", "sentiment": "negative", "topics": ["wait time", "service speed", "customer experience"], "starRating": 2, "requiresHITL": true, "urgency": "high", "escalationReason": "2-star review mentioning specific service failure — requires human approval before posting and possible follow-up outreach.", "suggestedAction": "Consider reaching out directly to the reviewer if contact details are available. Offer a resolution (e.g. complimentary visit) — but do NOT commit to this in the response without manager approval.", "wordCount": 98, "processingNotes": "Negative review with specific complaint about wait time. Response acknowledges the issue without making specific commitments or admissions. No legal language detected. requiresHITL set to true per 1-3 star policy." }
{ "reviewId": "gbp-review-2026-03-29-002", "draftResponse": "Thank you so much for the kind words, James! We're thrilled to hear you had a great experience with the team — comments like yours genuinely make our day. We look forward to seeing you again soon!", "sentiment": "positive", "topics": ["team", "customer service", "overall experience"], "starRating": 5, "requiresHITL": false, "urgency": "normal", "suggestedAction": null, "wordCount": 43, "processingNotes": "Positive 5-star review. Response is warm and brand-appropriate. No HITL required — eligible for bulk approval. Word count is 43 — within the 50-150 word guideline; brevity is appropriate for a short positive review." }

How It Works

  1. Parse the review. Extract star rating, review text, reviewer first name (use first name only if full name is provided — never surname in the public response), platform, and date.

  2. Immediate escalation check. Before any RAG or generation, scan the review text for escalation triggers (see Guardrails). If a legal threat, safeguarding concern, or health/safety incident is detected: set urgency: critical, requiresHITL: true, draftResponse: "" — do NOT draft a response. Return the escalation record immediately without proceeding.

  3. Classify sentiment and topics. Identify the overall sentiment (positive/negative/neutral) and extract specific topics mentioned (e.g. “wait time”, “staff”, “parking”, “product quality”). These are used for dashboard reporting and trend analysis.

  4. RAG: get relevant business context. Query Client Documents for: current offers or promotions that could be relevant to mention; business policies (returns, cancellations, hours) that may be relevant to a complaint; contact information (phone, email) for directing the reviewer. Query Published Content to check if the reviewer references something specific (e.g. a blog post, a product) — avoid directing them to outdated content.

  5. Draft the response. Write a response that:

    • Acknowledges the review appropriately for the star rating
    • Uses the reviewer’s first name once (in the opener)
    • Reflects the brand’s tone and voice
    • For negative reviews: acknowledges the concern, does not make excuses, invites offline resolution via contact details
    • For positive reviews: genuine warmth, brief, does not oversell
    • Stays within 50–150 words
    • Does not include promises, refunds, replacements, or specific commitments (these require HITL approval)
  6. Apply HITL routing rule. Set requiresHITL: true for all 1–3 star reviews, regardless of content. Set to false for 4–5 star reviews unless an escalation trigger fired.

  7. Return output. The output is saved to the review_responses table. If requiresHITL: false (4–5 star), the response enters the bulk approval queue in the dashboard. If requiresHITL: true, a notification is sent to the assigned reviewer.


System Prompt

You are a professional customer communications specialist writing review responses for a local or online business. Your job is to draft a genuine, brand-appropriate response to a customer review on {{PLATFORM}}. CLIENT CONTEXT: {{CLIENT_CONTEXT}} KNOWLEDGE BASE CONTEXT: {{RAG_CONTEXT}} Review details: - Reviewer: {{REVIEWER_FIRST_NAME}} - Star rating: {{STAR_RATING}}/5 - Date: {{REVIEW_DATE}} - Review text: "{{REVIEW_TEXT}}" Write a response that: 1. Opens with the reviewer's first name 2. Matches the star rating tone: warm and grateful for 4–5 stars; empathetic and solution-oriented for 1–3 stars 3. Is genuine — avoid corporate boilerplate phrases like "we value your feedback" 4. For negative reviews: acknowledge the specific issue mentioned, do NOT make excuses or defensive statements, invite the reviewer to contact you offline to resolve it 5. For positive reviews: be warm and brief — 2–4 sentences is appropriate 6. Use contact details from the client context if directing the reviewer to follow up 7. Reflects the client's brand voice throughout Hard constraints: - Response must be 50–150 words - Do NOT make any promises: no refunds, no free items, no replacements — these require human approval before they can be offered - Do NOT make admissions of liability (e.g. "you're right, we were negligent") - Do NOT use the reviewer's surname in the response - If the review mentions a legal threat, personal injury, or health/safety incident: do NOT draft a response — return an empty draftResponse and set urgency to critical After writing the response, classify: - sentiment: positive / negative / neutral - topics: array of specific subjects mentioned in the review - suggestedAction: any recommended follow-up beyond the public response (optional) - processingNotes: any decisions or constraints you applied Output as valid JSON matching the ReviewResponseWriterOutput schema.

Skills Injected

Skill filePurpose
client-context-file.mdCompany, brand, audience — always injected
review-response-guide.mdResponse tone by star rating, escalation triggers, banned phrases, response formulas for common complaint types

review-response-guide.md — content

# Review Response Guide ## Response Tone by Star Rating ### 5-Star Reviews Tone: Warm, genuine, brief. The reviewer did you a favour — thank them without being over-the-top. 2–3 sentences is ideal. Avoid hollow phrases. - Good opener: "Thank you so much for the kind words, [Name]!" - Avoid: "We are deeply grateful for your valued feedback at this juncture." - Always: Invite them back with a genuine, natural-sounding closing. ### 4-Star Reviews Tone: Appreciative but attentive. A 4-star means something was slightly off. Acknowledge the positive, note that you're always working to improve, invite them back. - Avoid: Asking what the missing star was for (looks needy and can invite a more negative reply). - Good approach: "Glad to hear you enjoyed [X] — we're always working to make things even better." ### 3-Star Reviews Tone: Empathetic, professional, solution-oriented. A 3-star is a soft complaint. Acknowledge the experience, don't be defensive, invite them to reach out directly. - Do NOT: Quote back their complaint verbatim (makes the response feel scripted) - Do NOT: Be defensive or explain away their experience - Always: Provide a way to contact you offline (email or phone) ### 1–2 Star Reviews Tone: Calm, empathetic, accountable without admission of liability. The reviewer may be angry — do not match their energy. Do not apologise for something that may be disputed. Use language like "this is not the experience we want for our customers" rather than "you're right, we messed up." - Always requires HITL before posting - Always include a direct contact method - Never promise specific remedies (refunds, replacements, free items) in the public response ## Banned Phrases These phrases sound robotic, condescending, or corporate — never use them: - "We value your feedback" - "Thank you for bringing this to our attention" - "As per our policy" - "We take all feedback very seriously" - "Rest assured" - "Dear valued customer" - "At [Company], customer satisfaction is our top priority" ## Escalation Triggers — Do NOT Draft a Response If ANY of the following are present in the review text, set urgency = critical, requiresHITL = true, and return an empty draftResponse: - Mentions of a personal injury or accident ("I was hurt", "I fell", "I got sick after") - Explicit legal threats ("I'm contacting my lawyer", "I will sue", "legal action") - Food safety incidents ("food poisoning", "I got sick from the food") - Safeguarding or child welfare concerns - Allegations of fraud or criminal behaviour ## Common Response Formulas ### Wait time complaint "[Name], thanks for your patience and for taking the time to leave a review. We're sorry the wait was longer than expected — that's not the experience we aim to deliver. We'd love to make it right — please reach out to us at [contact] and we'll take care of you." ### Staff behaviour complaint "[Name], we're really sorry to hear about your experience. The behaviour you've described is not how our team is trained to work, and we take this seriously. Please reach out to us directly at [contact] so we can look into this properly." ### Positive review (product or service compliment) "Thank you so much, [Name]! We're thrilled to hear that [specific thing they mentioned] hit the mark — that's exactly what we're going for. See you next time!" ## Word Count Guidance - 5-star: 25–50 words (brief warmth) - 4-star: 40–70 words - 3-star: 60–100 words - 1–2 star: 80–150 words (needs more care)

RAG Usage

DatasetQueryWhen
Client Documents"contact information phone email business hours policies"Step 4 — to find the correct contact details to include in negative review responses
Client Documents"current offers promotions [review topic]"Step 4 — if a reviewer mentions a product or service, check for a relevant current offer to mention
Published Content"[topic mentioned in review] blog post resource"Step 4 — to avoid directing reviewers to outdated or irrelevant content
Website Content"[product or service mentioned in review]"Step 4 — to confirm product details or find the correct page to reference in a response
Competitor ResearchNot queriedNot relevant to review responses

RAG query strategy: Query Client Documents first — the contact information query is the most consistently needed. For short, simple reviews (especially positive ones), a single RAG call is sufficient. For negative reviews with specific product or service complaints, run a second targeted query on the topic mentioned. Keep queries narrow and specific — the agent’s response should be 50–150 words, so only immediately actionable context is needed.


Tools Required

ToolMethodPurposeRequired?
rag_searchsearchQuery client contact info, policies, and relevant contentYes

Note: The response is NOT posted automatically by this agent. Posting is handled by a separate review-response-poster job dispatched after HITL approval. This agent only drafts and classifies.


HITL Gates

1–3 Star Reviews (mandatory review)

  • All low-star reviews require human approval before posting — no exceptions.
  • Review type: review_response_approval
  • Urgency: high for 1–2 star; normal for 3 star unless escalation trigger fired.
  • Reviewer sees: The original review, the draft response, sentiment classification, topics, and any suggested action.
  • Reviewer actions: Approve (posts the response), Edit + Approve, Reject (triggers regeneration with feedback), or Mark as escalated.
  • Timeout: If a critical-urgency review is not actioned within 24 hours, a reminder is sent via Slack.

4–5 Star Reviews (bulk approval queue)

  • 4–5 star reviews with requiresHITL: false go into the bulk approval queue.
  • Reviewer can bulk-approve all pending positive reviews with one click.
  • Reviewer can also individual-edit any positive review before approving.

Escalated Reviews (critical urgency)

  • urgency: critical reviews have no draft response.
  • The HITL record shows the review text with the detected escalation trigger highlighted.
  • The reviewer is notified immediately via Slack and email.
  • No response is posted until a human explicitly writes one after consulting the appropriate stakeholder (manager, legal, etc.).

Guardrails

RuleEnforcement
Response word count 50–150 wordsHard check on wordCount; outside range → regenerate with explicit instruction
No legal admissionsPost-generation scan for phrases indicating liability admission; detected phrases → regenerate with explicit prohibition reinforced
No specific promises (refunds, replacements, free items)Keyword scan for “refund”, “replace”, “free”, “compensate”, “reimburse” — if found in response, set requiresHITL: true and add note in escalationReason
Legal threat → no response draftedPre-generation trigger scan; if triggered, skip LLM call entirely and return escalation record
Reviewer surname must not appear in responseCheck that response does not contain any word > 4 chars that appears in the reviewerName field beyond the first word
Response must not quote the review verbatimSimilarity check between response and review text; > 60% token overlap triggers regeneration

Tenant Settings Used

SettingHow it’s used
brandVoiceApplied to the response tone — a formal brand gets measured, professional language; a casual/friendly brand gets warmer, more conversational responses
toneFine-tunes the warmth level in positive responses and the empathy level in negative ones
industryInforms common complaint patterns — restaurant reviews differ from SaaS reviews; the system prompt context includes industry-specific guidance
targetAudienceHelps calibrate the language level and references in the response

Cost Profile

Avg input tokens~2,000 (review + client context + RAG results + skills)
Avg output tokens~500 (JSON output with response)
Est. cost / task~$0.08

Note: Reviews are short — the high concurrency (8) and low per-task cost reflect the burst nature of this agent. A business receiving 10 reviews overnight will have all 10 drafted within minutes of the 6-hour polling run.


Error Handling

ErrorResponse
Review text is empty (rating-only review)Draft a brief generic response appropriate to the star rating; note “rating-only review — no specific content to reference” in processingNotes
reviewerName is emptyUse “there” as the opener: “Thank you for the review!” — do not use a placeholder
RAG returns no Client Documents resultsProceed without contact details in response; use generic “please reach out to us directly” without specifying channel
Response fails word count check after 2 retriesReturn the closest valid response with a processingNotes warning; do not fail the job over word count alone
Response fails admissions check after 2 retriesFlag for manual review; set requiresHITL = true; include the detected phrase in escalationReason
Platform API unavailable for postingThis agent does not post — the downstream poster job handles this. This agent always succeeds if it can draft.

© 2026 Leadmetrics — Internal use only