Work  /  Customer Support  /  03

Shopify Support Inbox, Handled End to End

E-commerce · Shopify store

Delivered — figures counted directly from the exported workflow JSON

6automations live
6workflows
158nodes
5intents resolved end to end
Customer emails arriving at a laptop that shows a Shopify order, with a replacement parcel ready beside it.

The problem

Where is my order. I never got tracking. My item arrived broken. I entered the wrong address.

A store buried in repetitive support email, all of it handled by hand — and all of it answerable from data the store already has.

How it runs

  1. One way in

    01 / 07 Workflow 5 of 6 · Main — Classify & Route · 17 nodes

    A single Gmail trigger reads every support email, checking labels across the whole thread rather than the one message.

  2. Classify

    02 / 07 five agents, five structured output parsers

    An OpenAI classifier with a locked output schema names what the customer wants and routes the email to its specialist.

  3. Verify the customer

    03 / 07

    In every branch, the name on the email must match the name on the Shopify order before anything else happens.

    no match → a person

  4. Resolve

    04 / 07 Workflow 1 of 6 · Intent — Order Status · 48 nodes

    Order Status alone chooses between seven routes — including a parcel with no carrier scan for five days or more.

  5. Replace, once

    05 / 07 Workflow 2 of 6 · Intent — Damage Claim · 32 nodes

    A replacement is a fully discounted draft order, created only after the original order is re-fetched and re-checked.

  6. Reply in the thread

    06 / 07 14 wait nodes

    Each reply waits fifteen minutes, then goes out as raw MIME with its threading headers, inside the customer’s own thread.

  7. Escalate with context

    07 / 07 Workflow 6 of 6 · Intent — Other · 5 nodes · 18 Telegram nodes

    Anything that needs judgement goes to a person on Telegram, with the order context already attached.

The six workflows, as exported

Every node with its icon, as on the n8n canvasstarts a runa model or a parser, wired into the node above itHover a node for its type

  • 01Intent — Order Status

    48 nodes · 53 connections · live

    When Executed by Another WorkflowGmailAI AgentOpenAI Chat ModelStructured Output ParserIfHTTP RequestCodeHTTP RequestCodeIfSwitchTelegramHTTP RequestCodeIfHTTP RequestHTTP RequestHTTP RequestTelegramTelegramEdit FieldsWaitWaitWaitWaitWaitWaitWaitTelegramCodeCodeHTTP RequestCodeHTTP RequestCodeHTTP RequestCodeHTTP RequestCodeHTTP RequestCodeHTTP RequestCodeHTTP RequestCodeIfTelegram

    “where is my order”, fanned out over tags, fulfilment, days since shipping and carrier status

  • 02Intent — Damage Claim

    32 nodes · 33 connections · live

    When Executed by Another WorkflowGmailAI AgentOpenAI Chat ModelStructured Output ParserIfHTTP RequestCodeHTTP RequestCodeIfIfHTTP RequestCodeIfHTTP RequestHTTP RequestHTTP RequestTelegramTelegramEdit FieldsWaitWaitTelegramCodeCodeHTTP RequestCodeHTTP RequestCodeIfTelegram

    evidence, then a replacement

  • 03Intent — Address Change

    27 nodes · 27 connections · live

    When Executed by Another WorkflowGmailAI AgentOpenAI Chat ModelStructured Output ParserIfHTTP RequestCodeHTTP RequestCodeIfIfTelegramHTTP RequestTelegramEdit FieldsWaitWaitTelegramCodeCodeHTTP RequestCodeHTTP RequestCodeIfTelegram

    changing an order that may already be moving

  • 04Intent — Missing Tracking

    26 nodes · 26 connections · live

    When Executed by Another WorkflowGmailAI AgentOpenAI Chat ModelStructured Output ParserIfHTTP RequestCodeHTTP RequestCodeIfIfTelegramTelegramEdit FieldsWaitWaitTelegramCodeCodeHTTP RequestCodeHTTP RequestCodeIfTelegram

    not shipped, or shipped and lost

  • 05Main — Classify & Route

    17 nodes · 16 connections · 3 notes · live

    Gmail TriggerWaitGmailFilterAI AgentOpenAI Chat ModelStructured Output ParserSwitchExecute WorkflowExecute WorkflowExecute WorkflowExecute WorkflowExecute WorkflowEdit FieldsCodeHTTP RequestEdit Fields

    the single entry point: read the mail, classify it, route it

  • 06Intent — Other

    5 nodes · 4 connections · live

    When Executed by Another WorkflowGmailTelegramEdit FieldsCode

    escalate rather than guess

155 executing nodes, by type

Code 33HTTP Request 31Telegram 18If 17Wait 14Edit Fields 7Gmail 6When Executed by Another Workflow 5Other 24

The gates, 20 If, Switch and Filter nodes, decide whether anything happens next: a countable part of the system, not a claim about it. 158 objects on the canvas = 155 executing nodes + 3 sticky notes.

The guards, and what each one prevents

HoverTap a card to read what it prevents.

  • Identity before action

    Support automation that acts on an unverified claim is an account-takeover vector, not a convenience. Every branch checks the name against the real order first.

  • A replacement cannot be issued twice

    Checking at the start of a workflow and acting at the end is a race. Re-reading the order at the moment of the write is what closes it.

  • Replies are held, then threaded

    A support reply that arrives in four seconds tells the customer a machine answered, whatever the text says. The 14 wait nodes are that decision, made visible.

  • The trigger reads the whole thread

    A customer replying deep in an existing conversation is still caught, and sent mail and drafts are never treated as new support.

  • Every model call returns a locked schema

    Five agents, five structured output parsers: no branch depends on parsing free text.

  • Where the answer is unknowable, it stays small

    Order Status is 48 nodes because the answer is knowable. Other is 5: it recognises that it does not know, and hands over.

Limits, stated plainly

  • Five intents are covered and everything else goes to a person. How much of an inbox falls into those five decides how much is automated, and it is worth measuring per store.
  • The stalled-parcel rule keys on days since the last carrier scan, so it is only as good as what the carrier reports.
  • Endpoint paths, credentials and access details are deliberately absent: this is a client’s live production system.

Built with

  • n8n
  • OpenAI
  • Shopify
  • Gmail
  • Telegram