Downloads
Download the n8n workflow (JSON)
customer-feedback-sentiment-n8n-claude.json · n8n workflow · 17 steps · starts with New feedback row · uses Google Sheets, Anthropic, Slack, WhatsApp · 33 KB
Import into n8n: Create Workflow, then the menu, then Import from File.
How to import it into n8n
- In n8n, create a new workflow.
- Open the ⋯ menu at the top right and choose Import from File, then pick the downloaded .json. (Or open the file, copy everything and paste it on the canvas.)
- Open each node with a warning and connect your own account: the file carries no passwords or keys.
- Run it once with Test workflow, check the result, then switch it to Active.
What this workflow does
Every time a customer fills your feedback form, n8n picks up the reply within a minute. Claude reads the star rating and the comment together and decides if the customer is happy, neutral or unhappy, what the complaint is about and how urgent it is. Unhappy customers reach you on Slack straight away, with a drafted apology you can send with one tap. Happy customers get a thank-you on WhatsApp with your Google review link. Every reply is logged in one sheet with its mood and what was done about it.
Who it is for
Restaurants, cafes, clinics, salons, gyms, repair and service businesses: anyone who already collects feedback with a Google Form or a QR code at the counter, but reads it days later (or never).
What you need
- n8n (Cloud or self-hosted)
- A Google Form linked to a Google Sheet (Form > Responses > Link to Sheets)
- An Anthropic API key for Claude
- Slack, with a channel such as
#feedback-alerts - A WhatsApp Business Cloud API number with two approved message templates
The workflow, step by step
Step 1 · Catch every form reply
Your Google Form already drops answers into a sheet. n8n picks up each new row, cleans the phone number, skips blank forms and never reads the same reply twice.
- New feedback row (Google Sheets Trigger): checks the
Form responses 1tab every minute for new rows. - Clean up feedback (Set): builds a
response_id, keeps the first name, turns the phone number into 91XXXXXXXXXX, reads the rating as a number and trims long comments. - Skip blank forms (Filter): drops replies with no rating and no comment.
- Already processed? (Remove Duplicates): remembers every
response_idit has seen, so nothing is handled twice.
Step 2 · Claude reads the mood
Claude reads the rating and the comment together, so a 5 star with an angry comment still counts as unhappy. It returns mood, topics, urgency and a one-line summary. Every reply is logged.
- Read feedback with Claude (Basic LLM Chain) with Claude (temperature 0.2) and Feedback fields (Structured Output Parser). It returns
sentiment,topics,urgency,summaryand, only for unhappy guests, anapology_linein the guest's own language. - Log feedback (Google Sheets, append or update on
Response ID): saves the reply and Claude's reading before anything is sent.
Step 3 · Unhappy? You know in minutes
Unhappy replies go straight to Slack with the comment, the phone number and a drafted apology. Tap Send apology, or tap I'll call to ring them yourself.
- Route by mood (Switch): Unhappy goes to Slack, Happy goes to the review link, Neutral stops after logging.
- Ask owner on Slack (Slack, Send and Wait): posts the details with two buttons and waits up to 12 hours.
- Owner approved? (IF): Send apology continues to WhatsApp. I'll call goes to Mark for a call, which sets the status to
Owner to calland sends nothing.
Step 4 · The right message goes out
Approved apologies go out on WhatsApp. Happy guests get a thank-you with your Google review link. If WhatsApp fails you get an alert, and the sheet shows who got what.
- Send apology on WhatsApp and Send review link on WhatsApp (WhatsApp, send template): both retry 3 times.
- Mark apology sent and Mark review asked (Google Sheets): update the status column.
- Alert: WhatsApp failed (Slack): wired to the error output of both send nodes, so a failed message never disappears silently.
Setup
- Import the JSON file into n8n (Create workflow > ⋯ > Import from file).
- Open each red node and connect your accounts: Google Sheets, Anthropic, Slack, WhatsApp. Imported workflows never include credentials.
- Replace
YOUR_SHEET_IDin every sheet node, andYOUR_PHONE_NUMBER_IDin both WhatsApp nodes. - Add a tab called
Feedbackwith these columns: Response ID, Submitted, Name, Phone, Branch, Rating, Comment, Sentiment, Topics, Urgency, Summary, Status, Updated. - If your form questions are worded differently, change the field names in Clean up feedback.
- In Meta Business Manager, create two utility templates:
feedback_apology(Hi {{1}}, this is Spice Route. {{2}}) andreview_request(a thank-you with {{1}} for the name and your Google review link). Wait for approval. - Fill the form yourself with a 2 star rating and an angry comment, then with a 5 star rating. Check Slack, WhatsApp and the sheet. Then activate.
How to customise
- Different business: change the first line of the Claude instructions ("restaurant, clinic or service business") and the topic list (for a clinic: doctor, waiting room, billing, reports).
- Several branches: add a Switch after Route by mood that posts to
#feedback-indiranagar,#feedback-koramangalaand so on. - No Slack: swap Ask owner on Slack for Gmail's Send and Wait, or a WhatsApp message to yourself (approval then happens in the sheet).
- Weekly report: add a second workflow on a Monday schedule that counts rows by Topic and Branch.
Guardrails
- No apology goes out until you tap Send apology. Claude never offers refunds or discounts.
- Claude is told not to invent details or admit legal fault. It only describes what the guest wrote.
- Google's review policy does not allow you to discourage or block reviews. This flow does not stop anyone from reviewing; it makes sure an unhappy guest hears from you first. If you prefer, send the review template to every guest after the apology too.
- WhatsApp templates are used because the guest has not messaged you in the last 24 hours. Only message customers who gave their number on the form.
Troubleshooting
- Nothing happens: the trigger only sees rows added after you activate. Check the tab name is exactly
Form responses 1. - Every reply comes out neutral: your rating question probably has text values ("Good", "Bad"). Map them to numbers in Clean up feedback.
- WhatsApp error 132001: the template name or language does not match the approved one. Use
name|language, for examplefeedback_apology|en. - Slack buttons do nothing: the workflow must be active (not just tested) for Send and Wait to resume.
- Same guest twice: the duplicate check uses timestamp plus phone. If you clear n8n's execution data, it starts fresh.
Want the members-only resources too?
A free account unlocks them all, including the ones shared in DMs.

