u/Cool-Sprinkles9179

This n8n automation saves a store owner 2-3 hours every day — full AI customer service triage with 6 paths and zero manual work
▲ 1 r/nocode

This n8n automation saves a store owner 2-3 hours every day — full AI customer service triage with 6 paths and zero manual work

https://preview.redd.it/ynfv7qb7drzg1.png?width=1683&format=png&auto=webp&s=a4b1fe4e2eeb2b8ee6d0f5234d7daf3aea0c2b2b

After a few weeks learning n8n I wanted to build something that actually solves a real problem rather than another tutorial project. So I built a complete AI customer service triage system for a fictional e-commerce pet supply store and I'm pretty happy with how it turned out.

The idea is simple. Every email that hits the store's Gmail inbox gets processed automatically without the owner touching anything unless absolutely necessary.

Here's what actually happens when an email arrives.

Claude reads it first. One API call classifies the category, detects the customer's sentiment, assigns an urgency level, and extracts any order number mentioned. All returned as clean JSON. This runs on every single email before anything else happens.

Then it routes to one of six paths based on what Claude found.

For order issues it searches Google Sheets for the customer's actual order in real time. It finds their specific order ID, product, shipping status, and order date and uses all of that to write a personalised draft response. The draft lands in Gmail labeled "Review - Order Issue" so the owner knows exactly what it is without digging through a generic drafts folder.

Refund requests work the same way. Order lookup, empathetic draft, owner makes the final call on whether to approve the refund. Claude never promises anything it shouldn't.

Product questions are the most interesting path. Instead of filtering the product catalog I fetch all 14 products from Google Sheets, aggregate them into one block, and pass everything to Claude in a single call. Claude reads the customer's question and the full catalog simultaneously and figures out which product they're asking about. Then it answers and sends automatically without any owner involvement.

Complaints get a two output response from one Claude call. One output is a careful customer facing draft that acknowledges the specific issue, takes ownership, and commits to a follow up. The second output is an internal owner alert with urgency indicators. Angry customers get a 🚨 URGENT alert. Frustrated ones get a ⚠️ HEADS UP. The owner sees this immediately and knows what needs personal attention.

General inquiries get answered automatically using hardcoded store knowledge. Shipping times, return policy, contact details. If Claude doesn't have the information it honestly says someone will follow up within a business day rather than making something up.

Spam gets silently archived and logged. No response, no wasted time.

Every email regardless of path gets logged to a Google Sheet with the timestamp, category, sentiment, urgency, and what action was taken.

The trickiest parts to figure out were a few things I didn't anticipate going in.

The product question path initially ran 14 separate Claude calls, one per product row returned from Google Sheets. Fixed that with an Aggregate node that combines everything before the AI call. One execution, full context, much cheaper.

The complaint path needed two completely different outputs from one API call. Structured the prompt to return a single JSON object with two fields and used a Code node to separate them afterward.

The triage prompt had a conflict where emails containing both complaint language and a refund request were being classified as refund requests. Had to add an explicit priority rule telling Claude that strong negative language always wins and gets classified as a complaint regardless of what else is in the email.

Customer names were also a challenge. The system looks up the customer's name from the order sheet by matching their email address. If they're not in the system it falls back to "Hi there" gracefully instead of breaking.

Stack is n8n, Gmail Trigger, Google Sheets, Anthropic Claude Sonnet, JavaScript Code nodes for JSON parsing, Switch node for routing, Aggregate node, and Gmail labels for draft organisation.

For a real store handling 30 to 50 emails a day this saves somewhere between 2 and 3 hours of manual work every single day. The owner only sees the emails that genuinely need a human decision. Everything else runs itself.

Happy to share the prompt structure or talk through any of the architecture decisions if anyone's interested.

reddit.com
u/Cool-Sprinkles9179 — 16 days ago

https://preview.redd.it/f9i93y31drzg1.png?width=1683&format=png&auto=webp&s=2b8c1bb29909c62d7ed3dcd87d5047ff1a01132b

After a few weeks learning n8n I wanted to build something that actually solves a real problem rather than another tutorial project. So I built a complete AI customer service triage system for a fictional e-commerce pet supply store and I'm pretty happy with how it turned out.

The idea is simple. Every email that hits the store's Gmail inbox gets processed automatically without the owner touching anything unless absolutely necessary.

Here's what actually happens when an email arrives.

Claude reads it first. One API call classifies the category, detects the customer's sentiment, assigns an urgency level, and extracts any order number mentioned. All returned as clean JSON. This runs on every single email before anything else happens.

Then it routes to one of six paths based on what Claude found.

For order issues it searches Google Sheets for the customer's actual order in real time. It finds their specific order ID, product, shipping status, and order date and uses all of that to write a personalised draft response. The draft lands in Gmail labeled "Review - Order Issue" so the owner knows exactly what it is without digging through a generic drafts folder.

Refund requests work the same way. Order lookup, empathetic draft, owner makes the final call on whether to approve the refund. Claude never promises anything it shouldn't.

Product questions are the most interesting path. Instead of filtering the product catalog I fetch all 14 products from Google Sheets, aggregate them into one block, and pass everything to Claude in a single call. Claude reads the customer's question and the full catalog simultaneously and figures out which product they're asking about. Then it answers and sends automatically without any owner involvement.

Complaints get a two output response from one Claude call. One output is a careful customer facing draft that acknowledges the specific issue, takes ownership, and commits to a follow up. The second output is an internal owner alert with urgency indicators. Angry customers get a 🚨 URGENT alert. Frustrated ones get a ⚠️ HEADS UP. The owner sees this immediately and knows what needs personal attention.

General inquiries get answered automatically using hardcoded store knowledge. Shipping times, return policy, contact details. If Claude doesn't have the information it honestly says someone will follow up within a business day rather than making something up.

Spam gets silently archived and logged. No response, no wasted time.

Every email regardless of path gets logged to a Google Sheet with the timestamp, category, sentiment, urgency, and what action was taken.

The trickiest parts to figure out were a few things I didn't anticipate going in.

The product question path initially ran 14 separate Claude calls, one per product row returned from Google Sheets. Fixed that with an Aggregate node that combines everything before the AI call. One execution, full context, much cheaper.

The complaint path needed two completely different outputs from one API call. Structured the prompt to return a single JSON object with two fields and used a Code node to separate them afterward.

The triage prompt had a conflict where emails containing both complaint language and a refund request were being classified as refund requests. Had to add an explicit priority rule telling Claude that strong negative language always wins and gets classified as a complaint regardless of what else is in the email.

Customer names were also a challenge. The system looks up the customer's name from the order sheet by matching their email address. If they're not in the system it falls back to "Hi there" gracefully instead of breaking.

Stack is n8n, Gmail Trigger, Google Sheets, Anthropic Claude Sonnet, JavaScript Code nodes for JSON parsing, Switch node for routing, Aggregate node, and Gmail labels for draft organisation.

For a real store handling 30 to 50 emails a day this saves somewhere between 2 and 3 hours of manual work every single day. The owner only sees the emails that genuinely need a human decision. Everything else runs itself.

Happy to share the prompt structure or talk through any of the architecture decisions if anyone's interested.

reddit.com
u/Cool-Sprinkles9179 — 16 days ago

https://preview.redd.it/7im64quxcrzg1.png?width=1683&format=png&auto=webp&s=1bdefa7393546e35bf166dcda287b0bebe183660

After a few weeks learning n8n I wanted to build something that actually solves a real problem rather than another tutorial project. So I built a complete AI customer service triage system for a fictional e-commerce pet supply store and I'm pretty happy with how it turned out.

The idea is simple. Every email that hits the store's Gmail inbox gets processed automatically without the owner touching anything unless absolutely necessary.

Here's what actually happens when an email arrives.

Claude reads it first. One API call classifies the category, detects the customer's sentiment, assigns an urgency level, and extracts any order number mentioned. All returned as clean JSON. This runs on every single email before anything else happens.

Then it routes to one of six paths based on what Claude found.

For order issues it searches Google Sheets for the customer's actual order in real time. It finds their specific order ID, product, shipping status, and order date and uses all of that to write a personalised draft response. The draft lands in Gmail labeled "Review - Order Issue" so the owner knows exactly what it is without digging through a generic drafts folder.

Refund requests work the same way. Order lookup, empathetic draft, owner makes the final call on whether to approve the refund. Claude never promises anything it shouldn't.

Product questions are the most interesting path. Instead of filtering the product catalog I fetch all 14 products from Google Sheets, aggregate them into one block, and pass everything to Claude in a single call. Claude reads the customer's question and the full catalog simultaneously and figures out which product they're asking about. Then it answers and sends automatically without any owner involvement.

Complaints get a two output response from one Claude call. One output is a careful customer facing draft that acknowledges the specific issue, takes ownership, and commits to a follow up. The second output is an internal owner alert with urgency indicators. Angry customers get a 🚨 URGENT alert. Frustrated ones get a ⚠️ HEADS UP. The owner sees this immediately and knows what needs personal attention.

General inquiries get answered automatically using hardcoded store knowledge. Shipping times, return policy, contact details. If Claude doesn't have the information it honestly says someone will follow up within a business day rather than making something up.

Spam gets silently archived and logged. No response, no wasted time.

Every email regardless of path gets logged to a Google Sheet with the timestamp, category, sentiment, urgency, and what action was taken.

The trickiest parts to figure out were a few things I didn't anticipate going in.

The product question path initially ran 14 separate Claude calls, one per product row returned from Google Sheets. Fixed that with an Aggregate node that combines everything before the AI call. One execution, full context, much cheaper.

The complaint path needed two completely different outputs from one API call. Structured the prompt to return a single JSON object with two fields and used a Code node to separate them afterward.

The triage prompt had a conflict where emails containing both complaint language and a refund request were being classified as refund requests. Had to add an explicit priority rule telling Claude that strong negative language always wins and gets classified as a complaint regardless of what else is in the email.

Customer names were also a challenge. The system looks up the customer's name from the order sheet by matching their email address. If they're not in the system it falls back to "Hi there" gracefully instead of breaking.

Stack is n8n, Gmail Trigger, Google Sheets, Anthropic Claude Sonnet, JavaScript Code nodes for JSON parsing, Switch node for routing, Aggregate node, and Gmail labels for draft organisation.

For a real store handling 30 to 50 emails a day this saves somewhere between 2 and 3 hours of manual work every single day. The owner only sees the emails that genuinely need a human decision. Everything else runs itself.

Happy to share the prompt structure or talk through any of the architecture decisions if anyone's interested.

reddit.com
u/Cool-Sprinkles9179 — 16 days ago

This n8n automation saves a store owner 2-3 hours every day — full AI customer service triage with 6 paths and zero manual work

https://preview.redd.it/ymsn8j2scrzg1.png?width=1683&format=png&auto=webp&s=ea497dd53d4118aec7b6e4ebbc47dee5373a9eec

After a few weeks learning n8n I wanted to build something that actually solves a real problem rather than another tutorial project. So I built a complete AI customer service triage system for a fictional e-commerce pet supply store and I'm pretty happy with how it turned out.

The idea is simple. Every email that hits the store's Gmail inbox gets processed automatically without the owner touching anything unless absolutely necessary.

Here's what actually happens when an email arrives.

Claude reads it first. One API call classifies the category, detects the customer's sentiment, assigns an urgency level, and extracts any order number mentioned. All returned as clean JSON. This runs on every single email before anything else happens.

Then it routes to one of six paths based on what Claude found.

For order issues it searches Google Sheets for the customer's actual order in real time. It finds their specific order ID, product, shipping status, and order date and uses all of that to write a personalised draft response. The draft lands in Gmail labeled "Review - Order Issue" so the owner knows exactly what it is without digging through a generic drafts folder.

Refund requests work the same way. Order lookup, empathetic draft, owner makes the final call on whether to approve the refund. Claude never promises anything it shouldn't.

Product questions are the most interesting path. Instead of filtering the product catalog I fetch all 14 products from Google Sheets, aggregate them into one block, and pass everything to Claude in a single call. Claude reads the customer's question and the full catalog simultaneously and figures out which product they're asking about. Then it answers and sends automatically without any owner involvement.

Complaints get a two output response from one Claude call. One output is a careful customer facing draft that acknowledges the specific issue, takes ownership, and commits to a follow up. The second output is an internal owner alert with urgency indicators. Angry customers get a 🚨 URGENT alert. Frustrated ones get a ⚠️ HEADS UP. The owner sees this immediately and knows what needs personal attention.

General inquiries get answered automatically using hardcoded store knowledge. Shipping times, return policy, contact details. If Claude doesn't have the information it honestly says someone will follow up within a business day rather than making something up.

Spam gets silently archived and logged. No response, no wasted time.

Every email regardless of path gets logged to a Google Sheet with the timestamp, category, sentiment, urgency, and what action was taken.

The trickiest parts to figure out were a few things I didn't anticipate going in.

The product question path initially ran 14 separate Claude calls, one per product row returned from Google Sheets. Fixed that with an Aggregate node that combines everything before the AI call. One execution, full context, much cheaper.

The complaint path needed two completely different outputs from one API call. Structured the prompt to return a single JSON object with two fields and used a Code node to separate them afterward.

The triage prompt had a conflict where emails containing both complaint language and a refund request were being classified as refund requests. Had to add an explicit priority rule telling Claude that strong negative language always wins and gets classified as a complaint regardless of what else is in the email.

Customer names were also a challenge. The system looks up the customer's name from the order sheet by matching their email address. If they're not in the system it falls back to "Hi there" gracefully instead of breaking.

Stack is n8n, Gmail Trigger, Google Sheets, Anthropic Claude Sonnet, JavaScript Code nodes for JSON parsing, Switch node for routing, Aggregate node, and Gmail labels for draft organisation.

For a real store handling 30 to 50 emails a day this saves somewhere between 2 and 3 hours of manual work every single day. The owner only sees the emails that genuinely need a human decision. Everything else runs itself.

Happy to share the prompt structure or talk through any of the architecture decisions if anyone's interested.

reddit.com
u/Cool-Sprinkles9179 — 16 days ago