Automatically monitors Google Business Profile reviews across one or more client accounts, drafts professional responses tuned to star rating and industry, and routes drafts to a configurable approval channel before posting. Designed for agencies and consultants managing reviews on behalf of clients.
This skill activates during scheduled review checks (heartbeat) and when an operator responds to a pending review approval message.
All paths and channels are read from a single config file: review-responder.config.json in the skill's data directory. If it doesn't exist, create one from this template on first run:
{
"script_path": "~/review-responder/gbp_reviews.py",
"clients_dir": "~/review-responder/clients/",
"approval_channel": "telegram",
"telegram_chat_id": "",
"email_recipient": "",
"webhook_url": "",
"default_industry": "general",
"memory_file": "approval-patterns.json"
}
gbp_reviews.py CLI. Defaults to ~/review-responder/gbp_reviews.py but can live anywhere.telegram, email, webhook, or chat. Determines where draft replies are sent for approval. See Approval Channels below.Each client in clients_dir can override industry, approval_channel, and tone_notes (free-text guidance specific to that business). Example client config:
{
"client_id": "smithdental",
"business_name": "Smith Family Dental",
"industry": "medical",
"approval_channel": "email",
"email_recipient": "office@smithdental.com",
"tone_notes": "Dr. Smith is warm but understated. Avoid exclamation points."
}
review-responder.config.json and enumerate all clients in clients_dir.```
python3 {script_path} check --client {client_id}
```
default_industry if none specified)approval_channel (see below).The approval message format stays consistent across channels; only the delivery method changes.
📝 New Review for [Business Name]
⭐ [star_rating] from [reviewer_name]
💬 "[review comment]"
My draft reply:
"[your drafted response]"
Reply OK to post, or send your edits.
(Review ID: [review_id] | Client: [client_id])
approval_channel: telegram)Send the message to the configured telegram_chat_id. The operator replies in the Telegram thread.
approval_channel: email)Send the message as a plain-text email to email_recipient. Subject line: Review approval needed — [Business Name]. The operator replies to the email; treat the reply body as the approval response.
approval_channel: webhook)POST a JSON payload to webhook_url containing the review draft and metadata. Useful for custom dashboards or Slack relays. Expected response: { "decision": "approve" | "edit" | "skip", "edited_text": "..." }.
approval_channel: chat)Surface the draft directly in the current chat session. Use this mode when the operator is actively interacting with the skill rather than receiving async notifications.
When the operator responds to a draft (via any channel):
```
python3 {script_path} reply --client {client_id} --review {review_id} --reply "{approved response}"
```
Confirm once posted: "Done — reply posted for [reviewer_name]'s review."
Log to the memory file as approved_as_is.
skipped.tone_notes from the client config5 stars
4 stars
3 stars
1-2 stars
Industry profiles enforce constraints and tone defaults appropriate to specific business types. Apply the profile from the client config (or default_industry) on every draft.
medical (HIPAA-aware drafting)Note on terminology: this profile applies HIPAA-aware drafting constraints — it instructs the assistant to avoid referencing PHI in public review replies. It does not certify the operator's overall workflow as HIPAA-compliant. Covered entities are responsible for their own compliance program; this skill is one input.
Hard rules (never violate, regardless of star rating):
Tone defaults: professional, reassuring, brief.
legalHard rules:
Tone defaults: measured, professional, no flourishes.
restaurantHard rules: none specific, but stay grounded.
Tone defaults: warmer and more conversational than medical/legal. Food-specific callouts welcome ("glad the carbonara hit"). For complaints, offer a direct contact for the manager.
retailHard rules:
Tone defaults: friendly, helpful, solution-oriented.
generalNo industry-specific constraints. Fall back to base Tone Principles and By Star Rating guidance.
Log each approval interaction to the memory file (memory_file in config). Use the log to surface patterns and adjust future drafts.
{
"client_id": "smithdental",
"review_id": "abc123",
"stars": 5,
"draft": "Thank you, Maria...",
"decision": "edited",
"final": "Thanks Maria...",
"length_delta_words": -8,
"timestamp": "2026-03-20T14:22:00Z"
}
Before drafting any new reply, scan the log for the same client and look for trends across the last 10-20 interactions:
length_delta_words is consistently negative for a given star rating, default to shorter drafts for that client at that ratingSurface insights to the operator periodically (e.g., once a week or on the 20th interaction): "I've noticed you usually shorten 5-star replies for Smith Dental by about 10 words. Want me to default to shorter going forward?"
To see what's waiting for approval:
python3 {script_path} pending
google-auth, google-auth-oauthlib, requestsclients_dirUnlike most skills in this catalog, this one ships executable Python code (gbp_reviews.py, get_client_token.py, oauth_server.py) that makes real network calls and posts content publicly to Google Business Profile. Be honest with the user about that scope.
What the skill does over the network
mybusiness.googleapis.com) to fetch unanswered reviews and to post replies on behalf of the operator's configured clients. These calls use the client's own OAuth credentials and refresh tokens, which the operator obtains and stores locally.approval_channel the operator configured (Telegram, email, webhook, or in-chat). Each of those uses the operator's own credentials and infrastructure; the skill does not bundle credentials or route through any author-controlled service.Credentials and local data
oauth_client_id, oauth_client_secret, refresh_token) live in JSON files under clients_dir. These are the operator's credentials for the operator's own clients. The skill does not transmit them anywhere except to Google's token endpoint (https://oauth2.googleapis.com/token) for the standard OAuth refresh flow.review_log.json) and pending drafts (pending/) are stored locally under the skill's directory.memory_file, default approval-patterns.json) is stored locally.Hard guardrails
medical, the assistant must never reference health conditions, treatments, diagnoses, or patient status in the public reply — even if the reviewer disclosed those details themselves.oauth_client_secret, refresh_token, or any other credential field into approval messages, drafts, logs, or chat outputs.No telemetry
The skill does not collect or transmit usage data, client identifiers, review content, or any other information back to its author, ClawHub, or any third party. (The Google API, Telegram, your SMTP relay, and any webhook target will each have their own logs — consult those services' policies.)
Compliance scope
The medical industry profile applies HIPAA-aware drafting constraints to public review replies. It does not certify the operator's overall workflow as HIPAA-compliant, and it does not turn this skill into a HIPAA-covered service. Operators in regulated industries (medical, legal, financial) remain responsible for their own compliance programs and should review the constraints in this skill against their own policies before using it in production.
共 3 个版本