Every 5 minutes
Reply to Google reviews from a Slack thread
New Google reviews are posted to a Slack channel, and a reply typed in the review's thread is published as the owner reply on Google within 5 minutes.
- Runs
- Every 5 minutes
- Apps
- Google Business Profile, Slack
- AI
- Not needed
- Access
- read+write (business.manage); chat:write, channels:history, groups:history
Send this to your assistant
Create a ClickRuntime automation: every 5 minutes, post new Google reviews for Rosa's Bakery to #reviews in Slack, and when someone replies in a review's thread starting with "reply:", publish that text as our reply on Google and confirm in the thread.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Small teams often discuss bad reviews in Slack anyway: someone pastes the review, the manager suggests wording, and then someone has to log into Google to post it. The last step is the one that gets forgotten.
This automation posts each new Google review to a Slack channel and watches its thread. When someone writes a reply starting with "reply:", it is published on Google as the owner reply and a tick is added to the thread.
Discussion and the final answer live in one place, and replies go out within minutes of being agreed.
What you get out of it
Answer without logging in
Replies go from Slack straight to Google.
Team can discuss first
Only messages starting with "reply:" are published.
Visible confirmation
A tick in the thread shows the reply is live.
Fast responses
Agreed replies are posted within 5 minutes.
Your own Slack app
It uses your Slack connection and standard message permissions.
How it works
What happens, step by step
Every 5 minutes, ClickRuntime checks your Google Business Profile for new reviews and posts each one to #reviews.
It also reads the threads under those messages in Slack.
When someone writes a thread reply that starts with "reply:", that text is published as your reply on Google.
A confirmation is added to the thread so everyone can see the reply is live.
Before it runs live
- Connect Google Business Profile
- Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Google Sheets
- Combine it with other Google Business Profile and Slack steps into one automation
Under the hood
The code that runs this automation
from clickruntime import on_trigger, credentials, http, notify, state
LOCATION = "accounts/1234567890/locations/9876543210" # Rosa's Bakery
CHANNEL_ID = "C0123REVIEWS" # #reviews
STARS = {"ONE": 1, "TWO": 2, "THREE": 3, "FOUR": 4, "FIVE": 5}
def slack(method, **params):
r = http.post(f"https://slack.com/api/{method}", json=params,
headers={"Authorization": f"Bearer {credentials.connection('slack', 'work')}"}) if method == "chat.postMessage" \
else http.get(f"https://slack.com/api/{method}", params=params,
headers={"Authorization": f"Bearer {credentials.connection('slack', 'work')}"})
return r.json()
@on_trigger
def run(event):
g = {"Authorization": f"Bearer {credentials.connection('google', 'work')}"}
threads = state.get("threads") or {} # slack ts -> review name
last = state.get("last_create") or ""
reviews = http.get(f"https://mybusiness.googleapis.com/v4/{LOCATION}/reviews",
params={"orderBy": "updateTime desc"}, headers=g).json().get("reviews", [])
for r in sorted((r for r in reviews if r["createTime"] > last), key=lambda r: r["createTime"]):
s = STARS[r["starRating"]]
msg = slack("chat.postMessage", channel=CHANNEL_ID,
text=f"{'★' * s}{'☆' * (5 - s)} from {r['reviewer']['displayName']}\n{r.get('comment', '(no text)')}\n"
"Reply in this thread with \"reply: your text\" to answer on Google.")
threads[msg["ts"]] = r["name"]
last = max(last, r["createTime"])
posted = 0
for ts, review in list(threads.items()):
replies = slack("conversations.replies", channel=CHANNEL_ID, ts=ts).get("messages", [])[1:]
answer = next((m["text"][6:].strip() for m in replies if m.get("text", "").lower().startswith("reply:")), None)
if answer:
http.put(f"https://mybusiness.googleapis.com/v4/{review}/reply", json={"comment": answer},
headers=g).raise_for_status()
slack("chat.postMessage", channel=CHANNEL_ID, thread_ts=ts, text=":white_check_mark: Reply posted on Google.")
del threads[ts]
posted += 1
state.set("threads", dict(list(threads.items())[-100:]))
state.set("last_create", last)
return {"replies_posted": posted}FAQ
Common questions
Why does the reply need to start with "reply:"?
Can a reply be edited after it's posted?
Which Slack permissions does it use?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Get a Slack alert when a Google review is edited
Every 30 minutes, Google reviews are checked for edits, and a Slack message shows the old and new star rating and text whenever a customer changes their review.
See how it worksApprove replies to Google reviews from Slack
Each new Google review is posted in Slack with its mood and a draft reply, and the reply goes live when you approve it.
See how it worksShare weekly Business Profile results in Slack
Every Monday the team sees last week's profile views, calls, direction requests and new reviews in Slack, with a short summary.
See how it worksKeep exploring
Set up “Reply to Google reviews from a Slack thread” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.