מדריך אוטומציה למסחר אלקטרוני

מדריך: אוטומציית מיון פניות שירות לקוחות בחנות Shopify עם n8n ו-Claude (2026)

תוכנית עבודה מוכחת לניתוב כל פנייה נכנסת — החזרים, משלוחים, מידות, חשד להונאה — דרך מסווג Claude, שאילתת Shopify Admin GraphQL והעברה ידנית ל-Gorgias. כולל קוד, הנחיות מערכת, וכל תקלות הקצה שלא מספרים לך עליהן.

13 דקות קריאה
עודכן מאי 2026
בינוני-מתקדם

הבעיה: 600 פניות בשבוע, 80% מהן חמש שאלות שחוזרות שוב ושוב

כל חנות Shopify שעוברת כמה מאות הזמנות בחודש מתקלת באותו קיר. תיבת הדואר המשותפת, תור ה-Gorgias, הפניות מ-Shopify Inbox ומספר ה-WhatsApp Business — כולם מתנקזים לאותו צוות עמוס מדי. כ-80% ממה שעונים זה אותן חמש שאלות: איפה ההזמנה שלי, אפשר להחזיר, יש במידה M, אפשר לשנות כתובת, הגיע שבור. ה-20% הנותרים — Chargebacks, חשד הונאה, אסקלציות, פניות B2B — באמת זקוקים למוח אנושי.

הפתרון אינו בוט בשולי החנות. הפתרון הוא שכבת מיון שמיירטת כל ערוץ, מבצעת חיפוש הזמנה ב-Shopify, מסווגת את הכוונה עם LLM אמיתי, מנסחת תשובה שמצטטת מידע משלוח אמיתי, ומסלימה רק את המקרים שבאמת קשים. המדריך הזה עובר על ה-pipeline מקצה לקצה עם n8n, Claude, Shopify Admin GraphQL, Gorgias ו-Klaviyo — כולל מעקות הפרטיות שמשאירים את מבקרי PCI DSS מרוצים.

אם החנות שלך כוללת גם נוכחות פיזית או חדר תצוגה, המדריך לאוטומציה בקמעונאות מכסה מיון בצד ה-POS; למותגים שמבוססים על הזמנות יש את המדריך להכנסת אורחים שמטפל בלוגיקת הזמנות.

ארכיטקטורה: שבעה nodes, תור אחד, אפס PAN דולפים

כל הודעה נכנסת הופכת ל-execution ב-n8n. ה-execution חייב להיות idempotent (webhook שנשלח שוב אסור לבצע החזר כספי כפול) וללא תופעות לוואי עד שהענף הסופי רץ. זה ה-flow הקנוני.

Inbox / Webhook

Gmail, Gorgias, WA

Order Lookup

Shopify GraphQL

Classify

Claude intent

Auto-Reply

Templated draft

Sentiment Check

Score < 0.3 ?

Handoff / Resolve

Gorgias agent

Klaviyo Event

Post-purchase flow

01

איחוד הערוצים — webhook אחד שולט בכל

לרוב החנויות יש לפחות ארבעה ערוצים נכנסים: תיבת Gmail או Outlook משותפת ([email protected]), instance של Gorgias שמקבל forwards מ-Shopify Inbox, מספר WhatsApp Business, וטופס יצירת קשר באתר. המשימה הראשונה היא לנרמל את כולם למבנה payload אחיד של n8n webhook כך שכל שאר ה-pipeline לא צריך לדעת מאיפה ההודעה הגיעה.

השתמש ב-Gmail trigger המובנה של n8n לתיבה, ב-Gorgias webhook trigger (קונפיגורציה ב-Gorgias תחת Settings → REST API → Add HTTP Integration), וב-Twilio WhatsApp webhook להודעות. כל אחד מהם מתורגם לאותה מעטפה קנונית:

canonical-message.json
{
  "channel": "gmail | gorgias | whatsapp | form",
  "external_id": "thread-or-message-id",
  "received_at": "2026-05-03T09:14:22Z",
  "from": {
    "email": "[email protected]",
    "phone": "+15551234567",
    "name": "Jane Buyer"
  },
  "subject": "Where is my order?",
  "body_text": "Hi, I ordered last Tuesday and...",
  "body_html": null,
  "attachments": [],
  "store_id": "shop-us-main"
}

תובנה: ה-Gmail trigger מבצע polling כל 60 שניות כברירת מחדל. כדי לקבל first-response של פחות מ-30 שניות, החלף ל-push notifications דרך Pub/Sub watch של Gmail — קונפיגורציה חד-פעמית ששווה את עצמה ברגע שלקוח מצייץ על מהירות התגובה.

הפעל de-duplication בעקביות. קונים מעבירים, עונים ל-all, ושולחים העתק לעצמם. סכם hash על external_id + from.email בטבלת Postgres ודלג על כל מה שראית ב-60 השניות האחרונות.

02

חיפוש הזמנה — Shopify Admin GraphQL, בדרך הנכונה

לפני כל סיווג, העשר את ההודעה עם הקשר ההזמנה. חלץ מזהים מועמדים מתוך הגוף — מספר הזמנה (#1234, SHOP-1234), אימייל, טלפון — באמצעות node קטן עם regex, ואז תשאל את Shopify Admin GraphQL. תמיד GraphQL, לעולם לא REST: REST מוגבל ב-2 קריאות בשנייה לכל קריאה, GraphQL מוגבל ב-cost של 50 נקודות בשנייה ואפשר להוציא order, fulfillment ו-refunds בקריאה אחת.

order-lookup.graphql
query OrderContext($q: String!) {
  orders(first: 1, query: $q, sortKey: CREATED_AT, reverse: true) {
    edges {
      node {
        id
        name
        email
        phone
        createdAt
        displayFinancialStatus
        displayFulfillmentStatus
        totalPriceSet { presentmentMoney { amount currencyCode } }
        customer { id numberOfOrders tags }
        shippingAddress { city provinceCode countryCode }
        fulfillments(first: 5) {
          status
          trackingInfo { number url company }
          updatedAt
        }
        refunds(first: 5) {
          createdAt
          totalRefundedSet { presentmentMoney { amount } }
        }
      }
    }
  }
}

העבר את q כ-email:[email protected] או name:#1234. אם לא נמצאת הזמנה, הגדר order_context: null והשאר את המסווג להתמודד עם זה כשאלת טרום-רכישה.

שים לב: Shopify GraphQL מגביל לפי cost של השאילתה, לא לפי מספר הקריאות. שאילתה nested תמימה יכולה לעלות 200+ נקודות ולנעול אותך ל-4 שניות. השתמש ב-extensions.cost.requestedQueryCost בפיתוח כדי להחזיק כל שאילתה מתחת ל-50.

לחנויות WooCommerce, החלף את השאילתה ל-GET /wp-json/wc/v3/orders?search=... ומזג את המבנה; ל-BigCommerce השתמש ב-GET /v2/orders?email=.... המסווג בהמשך לא מתעניין איזה backend ייצר את ההקשר — רק שהמבנה תואם.

03

מסווג כוונה — Claude עם schema הדוק

המסווג הוא המוח. שולחים ל-Claude את גוף ההודעה בתוספת סיכום הזמנה מצונזר, ומבקשים אובייקט JSON יחיד עם enum קבוע של intents. בלי טקסט חופשי, בלי פרשנות יצירתית. ה-schema למטה הוא מה שאנחנו מריצים בייצור.

classifier-system-prompt.txt
You are a customer-service triage classifier for a Shopify store.
Return ONLY a JSON object matching this schema. No prose.

{
  "intent": "refund_return | shipping_tracking | product_question
           | sizing_fit | defective_damaged | lost_order
           | change_address | cancel_order | fraud_suspect | other",
  "confidence": 0.0-1.0,
  "sentiment": -1.0 to 1.0,
  "urgency": "low | normal | high | critical",
  "language": "ISO-639-1",
  "requires_human": boolean,
  "rationale": "max 30 words, plain English"
}

Rules:
- If order_context.totalPrice > 500 USD, set requires_human = true.
- If sentiment < -0.4, set requires_human = true.
- If intent = fraud_suspect, ALWAYS requires_human = true.
- If confidence < 0.85, set requires_human = true.
- Never invent order numbers, tracking numbers, or refund amounts.

השתמש ב-Claude Sonnet עבור זה — Haiku מילולי מדי לגבי sentiment, Opus יקר מדי בנפח הזה. נעל את גרסת המודל (claude-sonnet-4-7@20260301 או הגרסה הנוכחית) והתייחס לזה כחוזה. Schema drift תשבור בשקט את הענפים שלך בהמשך.

קריטי: לעולם אל תכלול את מספר כרטיס האשראי המלא של הלקוח ב-prompt ל-Claude. Shopify חושף רק את 4 הספרות האחרונות דרך paymentDetails.creditCardLastDigits — זה כל מה שה-LLM אי-פעם רואה. Scope creep של PCI DSS היא טעות בעלת מספר ספרות.

אמת את ה-JSON output עם schema קפדני לפני הניתוב. אם ה-parsing נכשל (וזה יקרה לעיתים), פול-בק ל-requires_human=true, intent=other ותן לאדם למיין.

04

ענף מענה אוטומטי — טיוטות שמצטטות נתונים אמיתיים

לכל intent עם confidence ≥ 0.85 ו-requires_human = false, צור תשובה מותאמת אישית שמצטטת את ההזמנה האמיתית. הטריק הוא להרכיב את התשובה משתי שכבות: תבנית כתובה ידנית לכל intent, והעבודה של Claude היא למלא את ה-slots — לא לכתוב אנגלית מאפס.

reply-templates.json
{
  "shipping_tracking": {
    "subject": "Your order {{order.name}} — tracking update",
    "body": "Hi {{customer.firstName}},nnYour order {{order.name}} shipped on {{fulfillment.updatedAt | date}} via {{fulfillment.company}}. Tracking: {{fulfillment.trackingNumber}}nnLatest status from the carrier: {{carrier.status}} (ETA {{carrier.eta | date}}).nn{{closing}}",
    "max_confidence_required": 0.90
  },
  "refund_return": {
    "subject": "Return for order {{order.name}}",
    "body": "Hi {{customer.firstName}},nnYour order was placed on {{order.createdAt | date}}, which is {{daysSincePurchase}} days ago. Our return window is 30 days, so you're {{returnEligible ? 'eligible' : 'past the window'}}.nn{{instructionsBlock}}",
    "max_confidence_required": 0.92
  }
}

לשאלות משלוח, בצע קריאה מקבילה ל-API של חברת השילוח (EasyPost עוטף את UPS, USPS, FedEx, DHL מאחורי endpoint אחד) כך שהתשובה כוללת status חי, לא "נשלח ביום שלישי" שהתיישן. עבור החזרים, חשב את הזכאות מול חלון ההחזרה ב-n8n — אל תיתן ל-LLM להחליט מדיניות.

תובנה: שלח דרך Postmark או SendGrid, לא דרך ה-send API של Gmail. אתה רוצה ש-bounce ו-complaint webhooks ירוצו חזרה לאותו pipeline כך ש-auto-reply שחזר hard-bounced יפעיל בדיקת אדם במקום להיעלם.
05

העברה לאדם — חבילת הקשר, תשובה מוצעת, עדיפות שקטה

כל מה שמסומן requires_human = true נשלח ל-Gorgias כטיקט חדש עם הערה פנימית מובנית. ההערה היא ההבדל בין פתרון של 12 דקות לפתרון של 4 דקות — תן לסוכן את כל מה שהוא היה מחפש בעצמו, בתוספת טיוטת תשובה שהוא יכול לקבל, לערוך או לדחות.

gorgias-handoff.json
POST https://YOURSTORE.gorgias.com/api/tickets
Authorization: Basic {{base64(email:apikey)}}

{
  "channel": "email",
  "from_agent": false,
  "customer": {"email": "{{from.email}}"},
  "subject": "{{subject}}",
  "tags": ["ai-triaged", "{{intent}}", "urgency-{{urgency}}"],
  "messages": [{
    "channel": "email",
    "from_agent": false,
    "sender": {"email": "{{from.email}}"},
    "body_text": "{{body_text}}"
  }],
  "meta": {
    "ai_intent": "{{intent}}",
    "ai_confidence": "{{confidence}}",
    "ai_sentiment": "{{sentiment}}",
    "order_name": "{{order.name}}",
    "order_total": "{{order.totalPrice}}",
    "lifetime_orders": "{{customer.numberOfOrders}}",
    "suggested_reply": "{{draftedReply}}"
  }
}

אבטחה: אחסן את מפתח ה-API של Gorgias ב-credentials vault של n8n, לא בפרמטרי node. סובב כל רבעון. בדוק את ה-OAuth scopes — Gorgias לא צריך tickets:delete בשביל ה-workflow הזה, רק tickets:write.

נתב לפי intent: הונאה ו-chargebacks לבודק ייעודי, sizing/fit לצוות מרצ'נדייז אם יש לך, השאר לתור הכללי. השתמש ב-rules engine של Gorgias כדי לאכוף SLAs לפי תג ה-urgency.

06

דחיפת event ל-Klaviyo — סגירת הלולאה, דלק לקמפיין הבא

כל טיקט שנפתר דוחף custom event ל-Klaviyo. ה-event הזה הוא הטריגר ל-flows של win-back אחרי החזרים, בקשות NPS post-purchase אחרי פתרונות חיוביים, וצ'ק-אין "תיקנו את זה" 7 ימים אחרי החלפת מוצר פגום. ה-payload של ה-event צריך להיות דק וניתן לשאילתה.

klaviyo-event.json
POST https://a.klaviyo.com/api/events/
Authorization: Klaviyo-API-Key {{KLAVIYO_PRIVATE_KEY}}
revision: 2026-04-15

{
  "data": {
    "type": "event",
    "attributes": {
      "metric": {"data": {"type": "metric", "attributes": {"name": "CS Ticket Resolved"}}},
      "profile": {"data": {"type": "profile", "attributes": {"email": "{{from.email}}"}}},
      "properties": {
        "intent": "{{intent}}",
        "outcome": "{{outcome}}",
        "resolved_by": "{{ai|human}}",
        "first_response_seconds": {{firstResponseSeconds}},
        "order_name": "{{order.name}}"
      },
      "time": "{{resolvedAt}}"
    }
  }
}

ב-Klaviyo, בנה flows שמסתעפים על property intent: refund_return מפעיל win-back של 14 יום; defective_damaged מפעיל מעקב QA; shipping_tracking + resolved_by=ai נכנס לסגמנט "חוויית AI חיובית ראשונה" שצוות המותג יכול לתייג. כבד email_consent — Klaviyo אוכף את זה, אבל n8n צריך לבצע pre-check לפני ה-POST כדי להימנע מקריאות API מבוזבזות.

תקלות נפוצות — איך תפסנו אותן בייצור

כל צוות שבונה את זה נתקל באותם שישה באגים. זו הרשימה הקצרה, מסודרת לפי כמה כסף הם עלו לפני שגילינו.

סטיית Idempotency ב-retries

Webhook retries הפעילו את ענף ההחזר פעמיים. תיקון: טבלת Postgres processed_messages עם מפתח (channel, external_id) ו-TTL של 7 ימים.

קפיצות cost של GraphQL

שאילתת nested של fulfillments(first: 50) פוצצה את התקציב. תיקון: cap ל-5 ראשונים ו-pagination לפי דרישה.

Sentiment false-positives בעברית

שפת שירות לקוחות מנומסת בעברית קיבלה ציון שלילי. תיקון: העבר רמז language ל-system prompt.

Auto-reply לכתובות no-reply

לולאות bounce. תיקון: שמור regex blocklist (noreply@, postmaster@, mailer-daemon@) לפני שליחה.

ETAs ישנים של חברות שילוח

תגובות EasyPost ב-cache הציגו ETA בן 3 ימים. תיקון: 15 דקות TTL עם refresh=true מפורש בתגובת לקוח.

Schema drift אחרי שדרוג מודל

מודל מקובע הוצא משימוש באמצע רבעון; ברירת המחדל גלגלה ושברה את ה-enum. תיקון: regression suite של 200 טיקטים היסטוריים ב-CI.

פרטיות וציות — בלתי-ניתנים למשא ומתן

pipeline של שירות לקוחות נוגע ב-PII בכל execution. משטר הציות תלוי במיקום הקונים שלך, אבל ארבעה תקנים תמיד חלים.

משטר מתי חל מה הוא מחייב
PCI DSS תמיד אסור להעביר PAN מלא ל-LLM. רק 4 ספרות אחרונות מ-Shopify.
GDPR קונים מ-EU/UK DSAR endpoint, מחיקה תוך 30 יום, lawful basis מתועד פר profile.
CCPA / CPRA קונים מ-CA "Do Not Sell" מכובד; דגל opt-out פר event ב-Klaviyo.
CAN-SPAM קונים מארה"ב כתובת פיזית + unsubscribe תקין בכל auto-reply.
Shopify ToS תמיד 2 קריאות/שנייה REST, 50 cost-points/שנייה GraphQL, אסור scraping של admin UI.

ה-API של Anthropic לא מאמן על הקלט שלך כברירת מחדל, אבל זמן retention של logs הוא 30 יום. אם ה-DPA שלך דורש אפס retention, בקש את התיקון של zero-data-retention לפני go-live. כללי ה-consent של Klaviyo מחמירים יותר מהחוק ברוב התחומי שיפוט — לעולם אל תדחוף events ל-profiles ללא consent.

תוצאות — איך נראתה הטמעה של 12 חודשים

מספרים ממותג ביגוד אמריקאי שמריץ כ-800 פניות נכנסות בשבוע על פני Shopify Plus, Gorgias ו-WhatsApp Business. שניים-עשר חודשים מ-go-live.

מדד לפני אחרי דלתא
זמן first-response ממוצע 3 ש' 42 דק' 12 שנ' −99.9%
טיקטים שנפתרו ללא אדם 0% 65% +65 נק'
עלות עבודת CS שנתית $148K (2 FTE) $58K (0.7 FTE) −$90K / שנה
עלות הקשורה להחזרים 8.1% מההכנסה 4.9% −3.2 נק'
NPS (אחרי אינטראקציית CS) +24 +42 +18

המספר של עלות-החזרים שווה התעמקות: עדכוני משלוח פרואקטיביים (שלב 4) יירטו מספיק פניקה של "איפה ההזמנה" כדי לדכא חלק מדיד מ-chargebacks ספקולטיביים.

לוח זמנים להטמעה — ארבעה שבועות

שבוע 1

Audit וגישות

Token של Shopify Admin API, credentials של Gorgias REST, דגימת 1000 טיקטים היסטוריים, סיווג ידני לבניית gold set.

שבוע 2

מסווג + prompts

חיבור webhooks של n8n, prompt engineering ל-Claude מול ה-gold set, יעד דיוק intent ≥92%.

שבוע 3

Gorgias + תבניות

בניית חבילת handoff, טיוטות תבניות פר intent, פול-בק sentiment, QA פנימי על shadow traffic.

שבוע 4

Klaviyo + go-live

חיבור events ל-Klaviyo, השקה מאחורי תור אישור ידני, מעקב מדדים 5 ימים, ואז שחרור auto-send ל-intents בביטחון גבוה.

שאלות נפוצות

לתבניות של משלוח, מידות ומעקב — בדרך כלל לא, כי התשובה לא ניתנת להבחנה ממה שסוכן אנושי מהיר היה כותב. אנחנו ממליצים על גילוי רך ב-footer ("תשובות עשויות להיות מנוסחות בעזרת AI ונבדקות על-ידי הצוות שלנו") במקום באנר על כל מייל. הגילוי הופך לחובה בכמה תחומי שיפוט (איטליה, חלקים מקליפורניה להחלטות מהותיות) — היועץ המשפטי שלך צריך למפות את זה לגיאוגרפיית הקונים.
אותה ארכיטקטורה, node לחיפוש שונה. החלף את קריאת Shopify Admin GraphQL ב-WooCommerce REST API (/wp-json/wc/v3/orders) או BigCommerce v3 Catalog/Orders API. המסווג, תבניות התשובה וה-handoff ל-Gorgias אגנוסטיים לפלטפורמה. שים לב: rate limits של WooCommerce תלויים ב-host (לרוב ברמת nginx), ו-BigCommerce אוכף מכסות שעתיות פר-חנות.
EasyPost ו-Shippo עוטפים את UPS, USPS, FedEx, DHL, Royal Mail, Australia Post, ישראל פוסט, וכ-80 חברות שילוח אזוריות מאחורי endpoint מעקב יחיד. אנחנו קוראים ל-EasyPost מענף ה-auto-reply, מנרמלים את ה-status ל-enum של חמישה מצבים (label_created, in_transit, out_for_delivery, delivered, exception), ונותנים לתבנית לרנדר פר שפה. לחברות ש-EasyPost לא תומך, פול-בק לתבנית "פנינו לחברת השילוח" וניתוב לאדם.
הוא לא יכול, כי ה-LLM לעולם לא מחליט מדיניות. בדיקת זכאות להחזר היא פונקציית n8n טהורה שמשווה את order.createdAt מול קבוע חלון ההחזרה שלך. תבנית התשובה מרנדרת רק את הענף zָכאי/לא-זכאי — Claude ממלא את slots ההתאמה האישית, הקוד הדטרמיניסטי מחזיק את שורת המדיניות. זה המעקה היחיד החשוב ביותר ב-pipeline כולו.
כן — רוב הצוותים שומרים את Gorgias כ-system of record ומחברים את ה-pipeline של n8n כ-pre-processor. ה-flow הופך ל: מייל נכנס → מסווג n8n → או auto-reply דרך Postmark וסגירה ב-Gorgias תכנותית, או דחיפה ל-Gorgias כטיקט מתויג עם תשובה מוצעת שהסוכן מקבל. הצוות שלך רואה את Gorgias ביום הראשון בדיוק כמו קודם, עם פאנל "AI-Suggested Reply".
Gorgias Auto-Reply ו-Tidio Lyro טובים בהסטת FAQ — הם closed-source ועובדים בתוך ה-UI שלהם. הגישה של n8n + Claude מחליפה את הפשטות ה-turnkey הזו בשלושה דברים שאי אפשר לקבל out-of-the-box: (1) תשובות מודעות-הזמנה שמצטטות את סטטוס ה-fulfillment האמיתי, (2) אכיפת מדיניות מותאמת (מדרגי מחיר B2B, חלונות החזרה אזוריים, חריגות נאמנות), ו-(3) בעלות על נתונים — כל טיקט, prompt, והחלטה חיים ב-Postgres שלך. מתחת ל-300 טיקטים בשבוע בערך, אופציית ה-SaaS עשויה להיות זולה יותר. מעבר לזה, הבילד המותאם מנצח על עלות ועל המרה.

מוכן להעלות את זה לאוויר בחנות שלך?

בנינו את ה-pipeline הזה בדיוק עבור מותגי Shopify Plus, DTC ביגוד, יופי, וחנויות מוצרי בית. ארבעה שבועות לאוויר, מחיר קבוע, הנתונים שלך נשארים ב-stack שלך.

דבר עם מהנדס אוטומציה למסחר אלקטרוני

ראה גם: שירותי AI למסחר אלקטרוני · יופי וקוסמטיקה · כל שירותי ה-AI