GPT-4o Vision과 Claude 3.5 + 판매 분석을 사용하여 Shopify 제품 설명 생성
이것은Content Creation, Multimodal AI분야의자동화 워크플로우로, 43개의 노드를 포함합니다.주로 If, Set, Code, Cron, Limit 등의 노드를 사용하며. 사용GPT-4o Vision과Claude 3.5 + 판매 분석으로 Shopify 제품 설명 생성
- •대상 API의 인증 정보가 필요할 수 있음
- •Google Sheets API 인증 정보
- •OpenAI API Key
사용된 노드 (43)
{
"meta": {
"instanceId": "b2df916b3f98ab473fe29db5d8da4d12d0e855e62a053e1912cefd83f8502fba",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "c8edaab9-0dda-4c1f-88fe-e9dec377e72b",
"name": "세션 메모리2",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
848,
2144
],
"parameters": {
"sessionKey": "={{ $now.minute }}",
"sessionIdType": "customKey",
"contextWindowLength": 10
},
"typeVersion": 1.3
},
{
"id": "982f9886-40c8-45f8-a21b-a4228632ef9a",
"name": "구조화 출력 파서",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1184,
2032
],
"parameters": {
"autoFix": true,
"jsonSchemaExample": "{\n\"product_id\" : 456789,\n\"product_title\" : \"13456 LT\",\n\"generated_description\" :\" The description goes here\",\n\"status\": \"generated,retry\"\n\n\n}"
},
"typeVersion": 1.3
},
{
"id": "705e2c44-6286-48d9-aa97-c7b220df51fb",
"name": "이미지 분석",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
272,
1776
],
"parameters": {
"text": "=From the product image, identify only the *visible physical attributes* of the footwear. Avoid inferring features that are not clearly visible.\n\nReturn a short descriptive summary (max 50 words) strictly based on observable traits. Focus on the following, only if clearly identifiable:\n\n- Does the shoe have **adjustability**? (e.g. velcro, buckles, elastic inserts, laces)\n- Describe the **closure type** (e.g. slingback, buckle, slip-on, full coverage).\n- Is there any **heel presence/height** and what is its shape (block, wedge, flared)?\n- Upper material: leather, suede, woven, etc.\n- Sole type (e.g. rubber, smooth, textured).\n- Pointed/round toe.\n- Any visible cushioning, traction features or contours.\n\n⚠️ DO NOT mention colour, logos, or branding. Only describe what can be physically seen.",
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o",
"cachedResultName": "GPT-4O"
},
"options": {},
"resource": "image",
"imageUrls": "={{ $json['Image url'] }}",
"operation": "analyze"
},
"credentials": {
"openAiApi": {
"id": "cujMRyjAmPnqQSYO",
"name": "OpenAi account"
}
},
"typeVersion": 1.8
},
{
"id": "ee48f02a-4913-4b1f-954f-f82e50a66460",
"name": "OpenRouter 채팅 모델",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
640,
2064
],
"parameters": {
"model": "anthropic/claude-3.5-sonnet",
"options": {}
},
"credentials": {
"openRouterApi": {
"id": "hjpLzuwJhJPjtdLd",
"name": "Stealthy good OpenRouter account"
}
},
"typeVersion": 1
},
{
"id": "27bc6657-eb1c-442b-b479-e5a2371597e2",
"name": "OpenRouter 채팅 모델1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
1376,
2208
],
"parameters": {
"options": {}
},
"credentials": {
"openRouterApi": {
"id": "hjpLzuwJhJPjtdLd",
"name": "Stealthy good OpenRouter account"
}
},
"typeVersion": 1
},
{
"id": "bd7b15cf-9f24-4867-8f27-8b6dc6b69a88",
"name": "오류 트리거",
"type": "n8n-nodes-base.errorTrigger",
"position": [
-192,
2384
],
"parameters": {},
"typeVersion": 1
},
{
"id": "de711274-f02b-4ca4-a3b7-c2c9376566ea",
"name": "AI 에이전트",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
240,
2384
],
"parameters": {
"text": "=error_message : {{ $json.execution.error.message }}\n",
"options": {
"systemMessage": "=You are a smart workflow error analyst and logger built into an n8n automation system. When a workflow fails, your job is to:\n\n1. **Understand the root cause of an error.**\n2. **Search external sources using Perplexity for additional insights.**\n3. **Explain the error clearly—first in layman's terms, then support it with technical context.**\n4. **Log the final explanation into the `Reason of Error` column of a Google Sheet.**\n\n---\n\n### 🔍 Step 1: Understand the Error Input\n\nYou will receive an error event via the `Error Trigger`. This contains metadata like:\n- The workflow or node name where the error occurred\n- The full error message (stack trace if available)\n\nYour job is to **diagnose** what happened and which n8n node or integration was responsible for the failure.\n\n---\n\n### 🔎 Step 2: AI-Powered Troubleshooting\n\nIf the issue is unclear, run a research query using Perplexity:\n- Use the error message as the query.\n- From the search results, find and summarise only the most **relevant solution** or explanation.\n- Prefer sources from platforms like [n8n.io](https://community.n8n.io), [Stack Overflow](https://stackoverflow.com), or dev blogs.\n\n---\n\n### 👩🏫 Step 3: Write the Explanation\n\nCraft a **clear and helpful response** in the following structure:\n\n#### ➤ Format:\nReason of Error: { Explanation }\n\n\n\n#### ➤ Guidelines:\n- Start with an **easy-to-understand (layman)** explanation, e.g.:\n > “The automation tried to connect to Google Sheets but failed because it couldn’t identify which row to update.”\n\n- Then follow with **technical insight**, e.g.:\n > “This is typically caused by a missing `Product ID` or unmatched row key, leading to an `IndexOutOfRangeException`. See [dev.to](https://dev.to/iamcymentho/understanding-indexoutofrangeexception-in-c-2k5g) for context.”\n\n- Always include the suspected **node name** and **likely fix** if known.\n\n- Sign your explanation with a reference link if the cause is verified externally, like:\n > *Learn more: [dev.to](https://dev.to/iamcymentho/understanding-indexoutofrangeexception-in-c-2k5g)*\n\n---\n\n### 📋 Step 4: Output (Structured for Sheet Logging)\n\nUpdate the Google Sheet (`Error_log`) using:\n- `row_number` (pre-calculated by n8n)\n- `timestamp`: Use current time\n- `Reason of Error`: Write your combined explanation here\n\n🛑 **Do NOT return the actual content as code blocks or markdown.** Google Sheets expects raw strings.\n\n---\n\n### ❌ What NOT to include:\n- Do **not** return full stack traces to the sheet.\n- Do **not** guess without explanation.\n- Do **not** add unrelated suggestions.\n\n---\n\n### ✅ Example Output:\n\n**Reason of Error**:\n> The workflow attempted to update a row in Google Sheets, but couldn't find a match. \n> This likely happened because the \"Product ID\" was missing or incorrect, resulting in an index error. Technically, this is called an `IndexOutOfRangeException` — it means the script tried to work with a row that doesn't exist. \n> Learn more: [dev.to](https://dev.to/iamcymentho/understanding-indexoutofrangeexception-in-c-2k5g)\n\n**Timestamp**: Automatically insert current time \n**Row_number**: Already mapped\n\n"
},
"promptType": "define"
},
"typeVersion": 2.1
},
{
"id": "4745e47b-8b90-4df4-8f51-c0f9a4c89950",
"name": "OpenRouter 채팅 모델2",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
-144,
2640
],
"parameters": {
"options": {}
},
"credentials": {
"openRouterApi": {
"id": "hjpLzuwJhJPjtdLd",
"name": "Stealthy good OpenRouter account"
}
},
"typeVersion": 1
},
{
"id": "26ce222a-eac0-487e-8bba-faf3cbff995b",
"name": "심플 메모리",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
128,
2688
],
"parameters": {
"sessionKey": "={{ $now.minute }}",
"sessionIdType": "customKey"
},
"typeVersion": 1.3
},
{
"id": "516b8add-06a1-4ad7-a549-f135adbbe33e",
"name": "스티키 노트",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1072,
976
],
"parameters": {
"color": 7,
"width": 608,
"height": 1008,
"content": "# Shopify Product Description agent \n\n\n## Pagination Handling\n\n\n1. schedule every hour \n2. Search if there has already been run from the previous attempt or not if there has been previous run it will start from the latest product id.\n\n3. Code node will filter the products fetched each time to check whether it has body_html , CurrSeas:SS2025 or it has image then it process \n\n4. The Open Ai image node will do the descriptions of image based on the image link. and feed it to the main agent\n\n5. The main agent or the content creator will write the product description according to the AU format.\n\n6. The output format for the main agent is mainly all the fields id,vendor,generated description, status etc.\n\n7. The second code node keeps record of next page url to continue from there and record it in the sheet.\n\n"
},
"typeVersion": 1
},
{
"id": "5f2a3b8b-11e6-4955-8b9c-814416406540",
"name": "Perplexity 모델 메시지 전송",
"type": "n8n-nodes-base.perplexityTool",
"position": [
1072,
2112
],
"parameters": {
"model": "sonar",
"options": {},
"messages": {
"message": [
{
"content": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('message0_Text', ``, 'string') }}"
}
]
},
"requestOptions": {}
},
"credentials": {
"perplexityApi": {
"id": "safOKqSB3461HBde",
"name": "Stealthy good Perplexity account"
}
},
"typeVersion": 1
},
{
"id": "c14c3978-293b-440b-a6f9-389f3e256aa1",
"name": "스티키 노트1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1008,
2320
],
"parameters": {
"color": 2,
"width": 640,
"height": 208,
"content": "# Error Notification \n\n\n### If there is any error related to Api or server error mainly it will notify the owner about the type fo the error and explain the reason\n\n"
},
"typeVersion": 1
},
{
"id": "36bdcdbd-76b0-46ab-b1a2-1ab8d04abbe7",
"name": "Perplexity 모델 메시지 전송1",
"type": "n8n-nodes-base.perplexityTool",
"position": [
464,
2720
],
"parameters": {
"model": "sonar",
"options": {},
"messages": {
"message": [
{
"content": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('message0_Text', ``, 'string') }}"
}
]
},
"requestOptions": {}
},
"credentials": {
"perplexityApi": {
"id": "safOKqSB3461HBde",
"name": "Stealthy good Perplexity account"
}
},
"typeVersion": 1
},
{
"id": "e938da49-2aa9-4896-a01c-0af2b372f7d9",
"name": "Shopify 콘텐츠 생성기",
"type": "@n8n/n8n-nodes-langchain.agent",
"notes": "FIXED: Output format to match sheets mapping",
"position": [
880,
1776
],
"parameters": {
"text": "=\n\n\nProduct id : {{ $json['Product ID'] }}\nProduct Title :{{ $json['Product Title'] }}\nProduct Type:{{ $json['Product Type'] }}\nVendor: {{ $json.Vendor }}\nimage_description:{{ $json.content }}\nstatus : {{ $json.Status }}\ncountry_of_origin: {{ $('Limit1').item.json['country of origin'] }}\nx_style_code :{{ $('Limit1').item.json.x_style_code }}\ngender: {{ $('Limit1').item.json.gender }}",
"options": {
"systemMessage": "=You are a luxury footwear copywriter for Peter Sheppard Footwear — Australia’s destination for premium European footwear. Default audience is modern women aged 60+, prioritising longevity, comfort, and sophistication. If gender contains “Men” or “Mens”, write for men with the same refined tone.\n\nGOAL\nWrite SEO-aware, benefit-led Shopify product descriptions (60–80 words, 2–3 sentences) that reflect the shoe’s identity while remaining strictly factual to the provided AI Vision Output. Do NOT mention colour.\n\nINPUT (context from workflow)\n• Product ID: {{ $json[\"Product ID\"] }}\n• Product Title: {{ $json[\"Product Title\"] }}\n• Product Type: {{ $json[\"Product Type\"] }}\n• Vendor: {{ $json[\"Vendor\"] }}\n• AI Vision Output (observable traits only): {{ $json[\"content\"] }}\n• Status: {{ $json[\"Status\"] }}\n• Country of Origin: {{ $('Limit1').item.json['country of origin'] }}\n• Style Code: {{ $('Limit1').item.json.x_style_code }}\n• Gender: {{ $('Limit1').item.json.gender }}\n\nOUTPUT FORMAT\nReturn one JSON object only (no markdown, no extra text).\n\nIf successful:\n{\n \"product_id\": \"{{ $json['Product ID'] }}\",\n \"product_title\": \"{ cleaned_title with all colours removed }\",\n \"generated_description\": \"{ 60–80 words; first sentence includes origin/design-country rule; includes Style Code if provided; only image-verified traits; refined, concise, mobile-friendly; Australian English }\",\n \"status\": \"generated\"\n}\n\nIf generation fails (see Fail Conditions below):\n{\n \"product_id\": \"{{ $json['Product ID'] }}\",\n \"product_title\": \"{ cleaned_title with all colours removed }\",\n \"generated_description\": \"\",\n \"status\": \"retry\"\n}\n\nCRITICAL RULES\n1) Colour Removal\n• Remove all colour words/hints from both product_title and description.\n• Do not imply colour via metaphor or material cues.\n\n2) Origin vs Design Country Logic\n• If Country of Origin is provided and non-empty, include it in the first sentence:\n - Default phrasing: “Made in {Country of Origin}, …”\n - Exceptions — do NOT state the country of origin if origin is outside of Europe”:\n • If COO is Vietnam\n • If COO is China\n • If COO is India\n • If COO contains both Spain and China in any order or formatting (e.g., “Spain/China”, “China / Spain”) → “Designed in Spain, …”\n• If Country of Origin is missing:\n - Use the integrated Perplexity tool to identify the vendor’s official Country of Design (only from official sources: brand website, corporate pages, trademarks, LinkedIn).\n - Include design country ONLY if certain; otherwise omit origin/design entirely.\n - Never include citations or source names in the output.\n\n3) Style Code Placement\n• If Style Code exists ({{ $('Limit1').item.json.x_style_code }}), include it in the first sentence adjacent to Vendor and shoe type:\n - Examples: “the {Vendor} {StyleCode} {shoe type} …” or “the {StyleCode} {Vendor} {shoe type} …”\n• Do NOT add style code to product_title unless it already appears there.\n\n4) Image-Based Feature Usage (STRICT)\n• Use ONLY traits explicitly present in AI Vision Output (no speculation).\n• Include, if clearly visible:\n - Closure type: velcro, zipper, buckle, lace-up, slip-on, slingback, elastic gussets\n - Upper material: leather, suede, mesh, woven, textile\n - Footbed: contoured, removable, cushioned, leather-lined (only if evidently shown)\n - Heel: low, block, wedge, flared (if apparent)\n - Sole: textured, rubber, flat (if visible)\n - Adjustability: ONLY if velcro/buckle/elastic/strap is clearly evident\n• If a feature is not confirmed, omit it.\n\n5) Tone & Style\n• Sophisticated, elegant, succinct, mobile-first.\n• Benefit-led without clichés; vary cadence; avoid filler.\n• Use Australian English (e.g., favour, organise, lining).\n\n6) SEO\n• Naturally include vendor and product type.\n• Keep phrasing concise and unique per item.\n\n7) Prohibited\n• Any colour mention or inference.\n• The word “discerning.”\n• References to “Australian woman” (use “modern woman”/“modern man” if needed).\n• Guesswork or unsupported materials/features.\n• “Patent leather” or artificial materials unless part of a brand name.\n\nGENDER HANDLING\n• If Gender contains “Men” or “Mens”, adopt a men’s perspective and benefit language while maintaining the same premium tone.\n• Otherwise, assume women’s.\n\nFAIL CONDITIONS (return status=retry)\n• AI Vision Output is missing/empty or too generic to support a factual 60–80 word description.\n• You cannot confidently confirm any physical features from the image description.\n• The origin/design country cannot be confirmed when required by logic, and its omission would leave the first sentence awkward or misleading.\n• Any irreconcilable conflict between rules.\n\nQUALITY CHECK BEFORE OUTPUT\n• Title cleaned of all colours.\n• First sentence: origin/design-country rule applied correctly (or omitted if uncertain and COO missing).\n• Style code included in the first sentence if provided (not injected into the title unless already present).\n• Only image-verified features included.\n• 60–80 words, Australian English, refined tone.\n• No prohibited terms or colour references.\n• JSON only, no extra text or markdown.\n\nSTYLE EXAMPLES\nA (design tradition + code):\nFrom Spain’s Mediterranean craftsmanship tradition, the Pikolinos 06J-5433 sandal offers full-coverage ease with breathable openings. The leather upper and hook-and-loop adjustability provide a personalised, secure fit, while a textured sole enhances everyday traction. Subtle contouring supports comfort and longevity with refined, travel-ready practicality.\n\nB (made-in + code):\nMade in Hungary, the 1622102 Hartjes Mary Jane balances elegance and practicality. An adjustable velcro strap secures the fit, the smooth leather upper and rounded toe feel accommodating, and the flat, textured sole promotes stability. Considered details reflect orthopaedic expertise shaped for long-wearing comfort."
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.1
},
{
"id": "3dc1131c-7ef4-4ffb-8f7b-190a2aacdac5",
"name": "시트1에서 행 가져오기",
"type": "n8n-nodes-base.googleSheets",
"position": [
-208,
1776
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "Ready for AI Description",
"lookupColumn": "Status"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1133377362,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1r1lnORqg8lyGdZCOReGAd-ND2MTYF5gMKJBUH-n00ME/edit#gid=1133377362",
"cachedResultName": "Products"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1r1lnORqg8lyGdZCOReGAd-ND2MTYF5gMKJBUH-n00ME",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1r1lnORqg8lyGdZCOReGAd-ND2MTYF5gMKJBUH-n00ME/edit?usp=drivesdk",
"cachedResultName": "Shopify Processing Sheet"
},
"combineFilters": "OR"
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "dd0FVkqkh9dq6g6k",
"name": "Google Sheets account 2"
}
},
"typeVersion": 4.6
},
{
"id": "3913bbb9-a333-45c3-9847-62a839854d05",
"name": "제한1",
"type": "n8n-nodes-base.limit",
"position": [
32,
1776
],
"parameters": {
"maxItems": 10
},
"typeVersion": 1
},
{
"id": "5c0fd73c-7893-41d1-8fd4-869c10f398e2",
"name": "5분마다",
"type": "n8n-nodes-base.cron",
"position": [
-384,
1056
],
"parameters": {
"triggerTimes": {
"item": [
{
"mode": "custom",
"cronExpression": "*/5 * * * *"
}
]
}
},
"typeVersion": 1
},
{
"id": "cc08369a-de12-4bc2-9c5e-7b59221a4576",
"name": "Shopify 제품 가져오기",
"type": "n8n-nodes-base.httpRequest",
"notes": "Fixed: API 2024-04, fullResponse enabled, conditional pagination",
"position": [
128,
1056
],
"parameters": {
"url": "https://peter-sheppard.myshopify.com/admin/api/2024-04/products.json",
"options": {
"response": {
"response": {
"neverError": true,
"fullResponse": true
}
}
},
"sendQuery": true,
"authentication": "predefinedCredentialType",
"queryParameters": {
"parameters": [
{
"name": "limit",
"value": "200"
},
{
"name": "page_info",
"value": "={{ $json.page_info_next }}"
}
]
},
"nodeCredentialType": "shopifyAccessTokenApi"
},
"credentials": {
"shopifyAccessTokenApi": {
"id": "5CYlZIqCnASzeOzg",
"name": "Shopify Access Token_stephanie"
}
},
"typeVersion": 4.2
},
{
"id": "10e9dc48-18b9-4710-915b-b8b85d23b72c",
"name": "시트2에서 행 가져오기",
"type": "n8n-nodes-base.googleSheets",
"position": [
-160,
1056
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1r1lnORqg8lyGdZCOReGAd-ND2MTYF5gMKJBUH-n00ME/edit#gid=0",
"cachedResultName": "ProcessingState"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1r1lnORqg8lyGdZCOReGAd-ND2MTYF5gMKJBUH-n00ME",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1r1lnORqg8lyGdZCOReGAd-ND2MTYF5gMKJBUH-n00ME/edit?usp=drivesdk",
"cachedResultName": "Shopify Processing Sheet"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "dd0FVkqkh9dq6g6k",
"name": "Google Sheets account 2"
}
},
"typeVersion": 4.6
},
{
"id": "96d23e37-694e-4018-a7ec-f315047d10fc",
"name": "코드5",
"type": "n8n-nodes-base.code",
"position": [
160,
1376
],
"parameters": {
"jsCode": "// Extract page_info from Link header for pagination - FIXED for multiple links\nconst items = $input.all();\nlet pageInfo = null;\nlet linkHeader = null;\nlet debugInfo = {};\n\nfor (const item of items) {\n // Log the structure for debugging\n debugInfo.itemKeys = Object.keys(item.json);\n \n // Try different possible locations for headers\n if (item.json.headers) {\n linkHeader = item.json.headers.link || item.json.headers.Link || item.json.headers['link'] || item.json.headers['Link'];\n debugInfo.headersFound = true;\n debugInfo.headerKeys = Object.keys(item.json.headers);\n } else if (item.json.response && item.json.response.headers) {\n linkHeader = item.json.response.headers.link || item.json.response.headers.Link;\n debugInfo.responseHeadersFound = true;\n } else if (item.json.header) {\n linkHeader = item.json.header.link || item.json.header.Link;\n debugInfo.headerFound = true;\n }\n \n if (linkHeader) {\n debugInfo.linkHeaderFound = linkHeader;\n break;\n }\n}\n\nif (linkHeader) {\n debugInfo.rawLinkHeader = linkHeader;\n \n // FIXED: Handle multiple links by splitting on comma first\n const linkParts = linkHeader.split(',').map(part => part.trim());\n debugInfo.linkParts = linkParts;\n \n // Find the \"next\" link specifically\n for (const linkPart of linkParts) {\n debugInfo.processingPart = linkPart;\n \n // Check if this part contains rel=\"next\"\n if (/rel=[\"']?next[\"']?/i.test(linkPart)) {\n debugInfo.foundNextLink = linkPart;\n \n // Extract the URL from this specific \"next\" link part\n const urlMatch = linkPart.match(/<([^>]+)>/);\n if (urlMatch && urlMatch[1]) {\n try {\n const url = new URL(urlMatch[1]);\n pageInfo = url.searchParams.get('page_info');\n debugInfo.extractedUrl = urlMatch[1];\n debugInfo.extractedPageInfo = pageInfo;\n break;\n } catch (error) {\n debugInfo.urlParseError = error.message;\n }\n }\n }\n }\n \n // Fallback: if no page_info found, try direct extraction\n if (!pageInfo) {\n // Look for page_info parameter in any \"next\" link\n for (const linkPart of linkParts) {\n if (/rel=[\"']?next[\"']?/i.test(linkPart)) {\n const pageInfoMatch = linkPart.match(/page_info=([^&>\\s]+)/i);\n if (pageInfoMatch) {\n pageInfo = pageInfoMatch[1];\n debugInfo.directExtraction = true;\n debugInfo.extractedFrom = linkPart;\n break;\n }\n }\n }\n }\n}\n\n// Return the page info with debug information\nreturn [{\n json: {\n page_info: pageInfo,\n page_info_next: pageInfo, // Keep both for compatibility\n has_next_page: pageInfo !== null,\n debug: debugInfo,\n raw_link_header: linkHeader\n }\n}];"
},
"typeVersion": 2
},
{
"id": "4ec04e2c-c232-41d0-a4b4-38f3d657a172",
"name": "시트1 행 업데이트",
"type": "n8n-nodes-base.googleSheets",
"position": [
800,
1360
],
"parameters": {
"columns": {
"value": {
"row_number": 2,
"batch number": "={{ $json['batch number'] }}",
"page_info_next": "={{ $json.page_info }}"
},
"schema": [
{
"id": "batch number",
"type": "string",
"display": true,
"required": false,
"displayName": "batch number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "page_info_next",
"type": "string",
"display": true,
"required": false,
"displayName": "page_info_next",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"row_number"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheet/d/1r1lnORqg8lyGdZCOReGAd-ND2MTYF5gMKJBUH-n00ME/edit#gid=0",
"cachedResultName": "ProcessingState"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1r1lnORqg8lyGdZCOReGAd-ND2MTYF5gMKJBUH-n00ME",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1r1lnORqg8lyGdZCOReGAd-ND2MTYF5gMKJBUH-n00ME/edit?usp=drivesdk",
"cachedResultName": "Shopify Processing Sheet"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "dd0FVkqkh9dq6g6k",
"name": "Google Sheets account 2"
}
},
"typeVersion": 4.6
},
{
"id": "352f95c9-9f13-4206-927c-65fd7f3d578f",
"name": "필드 편집1",
"type": "n8n-nodes-base.set",
"position": [
624,
1360
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "db8a85c3-6d48-4e0d-a5db-101ff6afa135",
"name": "batch number",
"type": "number",
"value": "={{ $('Get row(s) in sheet2').item.json['batch number'] + 1 }} "
},
{
"id": "e3044479-8b26-445a-b8c6-536e083749c0",
"name": "page_info",
"type": "string",
"value": "={{ $json.page_info }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "acf231ef-e8ff-49c7-bfb5-47f5db52d7ac",
"name": "조건문2",
"type": "n8n-nodes-base.if",
"position": [
368,
1376
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "70594865-5674-4179-9b16-7198ec9b57d3",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.has_next_page }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "aba69031-9b64-485a-8f9d-f0c58b17c6b3",
"name": "제한2",
"type": "n8n-nodes-base.limit",
"position": [
1072,
1040
],
"parameters": {},
"typeVersion": 1
},
{
"id": "3ad6e0e0-863b-4205-b284-2a65da7f49d9",
"name": "시트2 행 추가",
"type": "n8n-nodes-base.googleSheets",
"position": [
800,
1040
],
"parameters": {
"columns": {
"value": {
"Status": "={{ $json.Status }}",
"Vendor": "={{ $json.Vendor }}",
"gender": "={{ $json.gender }}",
"Image url": "={{ $json['Image URL'] }}",
"Product ID": "={{ $json['Product ID'] }}",
"Product Type": "={{ $json['Product Type'] }}",
"x_style_code": "={{ $json[\"x-styleCode\"] }}",
"Filter Reason": "={{ $json['Filter Reason'] }}",
"Product Title": "={{ $json['Product Title'] }}",
"country of origin": "={{ $json.country_of_origin }}"
},
"schema": [
{
"id": "Product ID",
"type": "string",
"display": true,
"required": false,
"displayName": "Product ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Product Title",
"type": "string",
"display": true,
"required": false,
"displayName": "Product Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "country of origin",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "country of origin",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "x_style_code",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "x_style_code",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "gender",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "gender",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Product Type",
"type": "string",
"display": true,
"required": false,
"displayName": "Product Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Vendor",
"type": "string",
"display": true,
"required": false,
"displayName": "Vendor",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Generated Description",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Generated Description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Filter Reason",
"type": "string",
"display": true,
"required": false,
"displayName": "Filter Reason",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image url",
"type": "string",
"display": true,
"required": false,
"displayName": "Image url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Corrected description",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Corrected description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "is available ?",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "is available ?",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1133377362,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1r1lnORqg8lyGdZCOReGAd-ND2MTYF5gMKJBUH-n00ME/edit#gid=1133377362",
"cachedResultName": "Products"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1r1lnORqg8lyGdZCOReGAd-ND2MTYF5gMKJBUH-n00ME",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1r1lnORqg8lyGdZCOReGAd-ND2MTYF5gMKJBUH-n00ME/edit?usp=drivesdk",
"cachedResultName": "Shopify Processing Sheet"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "dd0FVkqkh9dq6g6k",
"name": "Google Sheets account 2"
}
},
"typeVersion": 4.6
},
{
"id": "1f8e831c-75f1-47b3-9e4f-7f4dded2cdf3",
"name": "조건문3",
"type": "n8n-nodes-base.if",
"position": [
544,
1056
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "ff2b7f86-c7e4-4254-a607-6c741e9b46aa",
"operator": {
"type": "number",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json['Product ID'] }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "92bcb484-cb19-450c-a274-50e6efee8d18",
"name": "스케줄 트리거",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-272,
1584
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
},
{
"id": "07bd68b3-d4ed-4a8d-a8a4-95ad2e93c17a",
"name": "스티키 노트2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-336,
848
],
"parameters": {
"color": 5,
"width": 512,
"content": "## Pagination Handler\n\nworking code\n"
},
"typeVersion": 1
},
{
"id": "075f692e-6a79-4bd5-b30f-efdeb5bef65a",
"name": "시트 행 업데이트",
"type": "n8n-nodes-base.googleSheets",
"position": [
1424,
1776
],
"parameters": {
"columns": {
"value": {
"Status": "={{ $json.output.status }}",
"Product ID": "={{ $json.output.product_id }}",
"Product Title": "={{ $json.output.product_title }}",
"Generated Description": "={{ $json.output.generated_description }}"
},
"schema": [
{
"id": "Product ID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Product ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Product Title",
"type": "string",
"display": true,
"required": false,
"displayName": "Product Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "country of origin",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "country of origin",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "x_style_code",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "x_style_code",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Product Type",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Product Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Vendor",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Vendor",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Generated Description",
"type": "string",
"display": true,
"required": false,
"displayName": "Generated Description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Filter Reason",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Filter Reason",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image url",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Image url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Corrected description",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Corrected description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "is available ?",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "is available ?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Product ID"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1133377362,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1r1lnORqg8lyGdZCOReGAd-ND2MTYF5gMKJBUH-n00ME/edit#gid=1133377362",
"cachedResultName": "Products"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1r1lnORqg8lyGdZCOReGAd-ND2MTYF5gMKJBUH-n00ME",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1r1lnORqg8lyGdZCOReGAd-ND2MTYF5gMKJBUH-n00ME/edit?usp=drivesdk",
"cachedResultName": "Shopify Processing Sheet"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "dd0FVkqkh9dq6g6k",
"name": "Google Sheets account 2"
}
},
"typeVersion": 4.6
},
{
"id": "0a2fe3c3-7684-4779-9f34-e8b8e426b78d",
"name": "Google 시트 행 추가",
"type": "n8n-nodes-base.googleSheetsTool",
"position": [
656,
2608
],
"parameters": {
"columns": {
"value": {
"timestamp": "={{ $now }}",
"Reason of Error": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Reason_of_Error', ``, 'string') }}"
},
"schema": [
{
"id": "timestamp",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Reason of Error",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Reason of Error",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Product ID"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1502107571,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1r1lnORqg8lyGdZCOReGAd-ND2MTYF5gMKJBUH-n00ME/edit#gid=1502107571",
"cachedResultName": "Error_log"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1r1lnORqg8lyGdZCOReGAd-ND2MTYF5gMKJBUH-n00ME",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1r1lnORqg8lyGdZCOReGAd-ND2MTYF5gMKJBUH-n00ME/edit?usp=drivesdk",
"cachedResultName": "Shopify Processing Sheet"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "dd0FVkqkh9dq6g6k",
"name": "Google Sheets account 2"
}
},
"typeVersion": 4.7
},
{
"id": "7350121a-24da-45e4-a9ae-68a2943c723d",
"name": "필드 편집",
"type": "n8n-nodes-base.set",
"position": [
496,
1776
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "7c0530d2-272f-45ee-b23e-c5d78863426a",
"name": "content",
"type": "string",
"value": "={{ $json.content }}"
},
{
"id": "8c453257-ec62-4ece-af58-41677da4980d",
"name": "Product ID",
"type": "string",
"value": "={{ $('Limit1').item.json['Product ID'] }}"
},
{
"id": "16c83f21-e0c4-4acc-8d0c-12f39c7dafb8",
"name": "Product Title",
"type": "string",
"value": "={{ $('Limit1').item.json['Product Title'] }}"
},
{
"id": "5b967666-af7a-470a-a100-7b180cbda920",
"name": "Vendor",
"type": "string",
"value": "={{ $('Limit1').item.json.Vendor }}"
},
{
"id": "5793a744-0be2-4d9e-9a24-08737874e5ea",
"name": "Product Type",
"type": "string",
"value": "={{ $('Limit1').item.json['Product Type'] }}"
},
{
"id": "c2599f79-977c-442b-b195-f5b95b16c979",
"name": "Status",
"type": "string",
"value": "={{ $('Limit1').item.json.Status }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "2d983e0c-02b0-4aab-bc74-22f10bf76c54",
"name": "'워크플로 실행' 클릭 시",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-192,
2064
],
"parameters": {},
"typeVersion": 1
},
{
"id": "4417c698-2ea2-4145-ba19-74937e24cc75",
"name": "코드1",
"type": "n8n-nodes-base.code",
"position": [
320,
1056
],
"parameters": {
"jsCode": "// Filter products - Must have image AND empty body_html AND currSeas:SS2025 tag (ALL mandatory)\n// Enhanced with duplicate prevention + tag extraction for x-styleCode, country_of_origin, and gender\nconst filteredProducts = [];\nconst processedProductIds = new Set();\n\n// Helper: extract \"key:value\" from comma-separated tags string (case-insensitive key)\nfunction getTagValue(tags, key) {\n if (!tags) return '';\n const tagStr = Array.isArray(tags) ? tags.join(',') : String(tags);\n const parts = tagStr.split(',').map(t => t.trim()).filter(Boolean);\n const lowerKey = key.toLowerCase();\n for (const part of parts) {\n const [k, ...rest] = part.split(':');\n if (!k) continue;\n if (k.trim().toLowerCase() === lowerKey) {\n return rest.join(':').trim(); // keep value as-is; supports extra colons in value\n }\n }\n return '';\n}\n\nfor (const item of $input.all()) {\n // Add null checking for nested properties\n if (!item || !item.json || !item.json.body) {\n continue;\n }\n \n // Products are inside body property\n const products = item.json.body.products || [];\n \n if (!Array.isArray(products)) {\n continue;\n }\n \n for (const product of products) {\n // Add null checking for product object\n if (!product || !product.id) continue;\n \n // Skip if we've already processed this product ID\n if (processedProductIds.has(product.id)) {\n continue;\n }\n \n // Mark as processed\n processedProductIds.add(product.id);\n \n // Check if body_html is empty\n const hasEmptyBodyHtml = !product.body_html || product.body_html.trim() === '';\n \n // Check if images exist and have valid src\n const hasValidImage = product.images &&\n Array.isArray(product.images) &&\n product.images.length > 0 && \n product.images[0] && \n product.images[0].src && \n product.images[0].src.trim() !== '';\n \n // Check for currSeas:SS2025 tag (case insensitive)\n const tags = product.tags || '';\n const hasCurrentSeasonTag = /currseas:\\s*ss2025/i.test(tags);\n \n // Process ONLY if: has valid image AND empty body_html AND has season tag (ALL mandatory)\n if (hasValidImage && hasEmptyBodyHtml && hasCurrentSeasonTag) {\n // Extract additional fields from tags\n const styleCode = getTagValue(tags, 'x-styleCode');\n const countryOfOrigin = getTagValue(tags, 'country_of_origin');\n const gender = getTagValue(tags, 'gender'); // NEW: gender:Mens, etc.\n\n filteredProducts.push({\n \"Product ID\": product.id,\n \"Product Title\": product.title,\n \"Product Type\": product.product_type,\n \"Vendor\": product.vendor,\n \"Tags\": product.tags,\n \"x-styleCode\": styleCode,\n \"country_of_origin\": countryOfOrigin,\n \"gender\": gender, // NEW column\n \"Image URL\": product.images[0].src,\n \"Current Description\": product.body_html || '',\n \"Has Valid Image\": hasValidImage,\n \"Has Empty Body\": hasEmptyBodyHtml,\n \"Has Season Tag\": hasCurrentSeasonTag,\n \"Filter Reason\": \"Has valid image + Empty body_html + Has currSeas:SS2025 tag\",\n \"Status\": \"Ready for AI Description\",\n \"Processing Timestamp\": new Date().toISOString()\n });\n }\n }\n}\n\n// Return ONLY filtered products (empty array if none match)\nreturn filteredProducts;"
},
"typeVersion": 2
},
{
"id": "cf20bb5d-c904-4f89-8bc4-347fc41b9e59",
"name": "스케줄 트리거1",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
1520,
1248
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 14,
"triggerAtMinute": 1
}
]
}
},
"typeVersion": 1.2
},
{
"id": "152e5586-28ff-48eb-bdb6-d9c1e387a44a",
"name": "HTTP 요청1",
"type": "n8n-nodes-base.httpRequest",
"position": [
1760,
1248
],
"parameters": {
"url": "https://re3-shop.myshopify.com/admin/api/2024-04/orders.json\n\n",
"options": {},
"sendQuery": true,
"authentication": "predefinedCredentialType",
"queryParameters": {
"parameters": [
{
"name": "processed_at_min",
"value": "={{ $now.setZone('Australia/Melbourne').minus({days: 1}).startOf('day') }}\n\n\n\n\n"
},
{
"name": "processed_at_max",
"value": "={{ $now.setZone('Australia/Melbourne').minus({days: 1}).set({ hour: 23, minute: 59, second: 59, millisecond: 999 }) }}\n\n"
},
{
"name": "financial_status",
"value": "paid"
}
]
},
"nodeCredentialType": "shopifyAccessTokenApi"
},
"credentials": {
"shopifyAccessTokenApi": {
"id": "PUAf9BFJ4paeMLwY",
"name": "stephanie_re3_shop"
}
},
"typeVersion": 4.2
},
{
"id": "3802440d-c2cf-460a-ba19-2a36af2b2406",
"name": "분할 출력",
"type": "n8n-nodes-base.splitOut",
"position": [
2176,
1232
],
"parameters": {
"options": {},
"fieldToSplitOut": "orders"
},
"typeVersion": 1
},
{
"id": "c9ce0ebd-c902-46dd-b2bc-043d1cac6fe5",
"name": "요약",
"type": "n8n-nodes-base.summarize",
"position": [
2592,
1232
],
"parameters": {
"options": {},
"fieldsToSummarize": {
"values": [
{
"field": "current_price",
"aggregation": "sum"
}
]
}
},
"typeVersion": 1.1
},
{
"id": "c82deae3-c103-45f0-b26e-cf81f28ddba6",
"name": "시트 행 추가",
"type": "n8n-nodes-base.googleSheets",
"position": [
2848,
1232
],
"parameters": {
"columns": {
"value": {
"Date": "={{ DateTime.now().setZone('Australia/Melbourne').minus({days: 1}).toISODate() }}\n",
"Total Sales": "={{ $json.sum_current_price }}"
},
"schema": [
{
"id": "Date",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Sales",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Total Sales",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"row_number"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1645443037,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hsJbOC13FlZArNfNHOT4xOHXIGX64nbEDrvo3nBsxpc/edit#gid=1645443037",
"cachedResultName": "shopify_daily_sales"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1hsJbOC13FlZArNfNHOT4xOHXIGX64nbEDrvo3nBsxpc",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hsJbOC13FlZArNfNHOT4xOHXIGX64nbEDrvo3nBsxpc/edit?usp=drivesdk",
"cachedResultName": "Stephanie TESTING - RE3 GREEN BOOK SEPTEMBER 2025"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "dd0FVkqkh9dq6g6k",
"name": "Google Sheets account 2"
}
},
"typeVersion": 4.7
},
{
"id": "9545612a-7f5f-4a3a-9a73-2c6747703d7e",
"name": "필드 편집2",
"type": "n8n-nodes-base.set",
"position": [
2384,
1232
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "82ece415-95e2-4680-99fa-480318e5c1e7",
"name": "current_price",
"type": "number",
"value": "={{ $json.current_total_price }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "4527bd24-8759-4b31-8f5c-5acf974cd19e",
"name": "조건문",
"type": "n8n-nodes-base.if",
"position": [
1968,
1248
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "ac8c1680-1fe3-4e39-b2a5-9cb1ccd3be32",
"operator": {
"type": "array",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.orders }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "892cf81a-9924-42ca-bde8-4b1658410ab0",
"name": "시트1 행 추가",
"type": "n8n-nodes-base.googleSheets",
"position": [
1984,
1504
],
"parameters": {
"columns": {
"value": {
"Date": "={{ DateTime.now().setZone('Australia/Sydney').minus({days: 1}).toISODate() }}\n",
"Total Sales": "=0"
},
"schema": [
{
"id": "Date",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Sales",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Total Sales",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"row_number"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1645443037,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hsJbOC13FlZArNfNHOT4xOHXIGX64nbEDrvo3nBsxpc/edit#gid=1645443037",
"cachedResultName": "shopify_daily_sales"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1hsJbOC13FlZArNfNHOT4xOHXIGX64nbEDrvo3nBsxpc",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hsJbOC13FlZArNfNHOT4xOHXIGX64nbEDrvo3nBsxpc/edit?usp=drivesdk",
"cachedResultName": "Stephanie TESTING - RE3 GREEN BOOK SEPTEMBER 2025"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "dd0FVkqkh9dq6g6k",
"name": "Google Sheets account 2"
}
},
"typeVersion": 4.7
},
{
"id": "29969853-91c3-4d7f-9da8-e5555cfb9204",
"name": "스티키 노트5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1520,
992
],
"parameters": {
"color": 3,
"width": 688,
"content": "## Shopify Daily Sales report\n"
},
"typeVersion": 1
},
{
"id": "b99a42ae-1583-4445-8c32-0dd7e22ff220",
"name": "스티키 노트6",
"type": "n8n-nodes-base.stickyNote",
"position": [
272,
992
],
"parameters": {
"height": 208,
"content": "## Tag filteration\n"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"4527bd24-8759-4b31-8f5c-5acf974cd19e": {
"main": [
[
{
"node": "3802440d-c2cf-460a-ba19-2a36af2b2406",
"type": "main",
"index": 0
}
],
[
{
"node": "892cf81a-9924-42ca-bde8-4b1658410ab0",
"type": "main",
"index": 0
}
]
]
},
"acf231ef-e8ff-49c7-bfb5-47f5db52d7ac": {
"main": [
[
{
"node": "352f95c9-9f13-4206-927c-65fd7f3d578f",
"type": "main",
"index": 0
}
]
]
},
"1f8e831c-75f1-47b3-9e4f-7f4dded2cdf3": {
"main": [
[
{
"node": "3ad6e0e0-863b-4205-b284-2a65da7f49d9",
"type": "main",
"index": 0
}
]
]
},
"4417c698-2ea2-4145-ba19-74937e24cc75": {
"main": [
[
{
"node": "1f8e831c-75f1-47b3-9e4f-7f4dded2cdf3",
"type": "main",
"index": 0
}
]
]
},
"96d23e37-694e-4018-a7ec-f315047d10fc": {
"main": [
[
{
"node": "acf231ef-e8ff-49c7-bfb5-47f5db52d7ac",
"type": "main",
"index": 0
}
]
]
},
"3913bbb9-a333-45c3-9847-62a839854d05": {
"main": [
[
{
"node": "705e2c44-6286-48d9-aa97-c7b220df51fb",
"type": "main",
"index": 0
}
]
]
},
"3802440d-c2cf-460a-ba19-2a36af2b2406": {
"main": [
[
{
"node": "9545612a-7f5f-4a3a-9a73-2c6747703d7e",
"type": "main",
"index": 0
}
]
]
},
"c9ce0ebd-c902-46dd-b2bc-043d1cac6fe5": {
"main": [
[
{
"node": "c82deae3-c103-45f0-b26e-cf81f28ddba6",
"type": "main",
"index": 0
}
]
]
},
"7350121a-24da-45e4-a9ae-68a2943c723d": {
"main": [
[
{
"node": "e938da49-2aa9-4896-a01c-0af2b372f7d9",
"type": "main",
"index": 0
}
]
]
},
"352f95c9-9f13-4206-927c-65fd7f3d578f": {
"main": [
[
{
"node": "4ec04e2c-c232-41d0-a4b4-38f3d657a172",
"type": "main",
"index": 0
}
]
]
},
"9545612a-7f5f-4a3a-9a73-2c6747703d7e": {
"main": [
[
{
"node": "c9ce0ebd-c902-46dd-b2bc-043d1cac6fe5",
"type": "main",
"index": 0
}
]
]
},
"705e2c44-6286-48d9-aa97-c7b220df51fb": {
"main": [
[
{
"node": "7350121a-24da-45e4-a9ae-68a2943c723d",
"type": "main",
"index": 0
}
]
]
},
"bd7b15cf-9f24-4867-8f27-8b6dc6b69a88": {
"main": [
[
{
"node": "de711274-f02b-4ca4-a3b7-c2c9376566ea",
"type": "main",
"index": 0
}
]
]
},
"152e5586-28ff-48eb-bdb6-d9c1e387a44a": {
"main": [
[
{
"node": "4527bd24-8759-4b31-8f5c-5acf974cd19e",
"type": "main",
"index": 0
}
]
]
},
"26ce222a-eac0-487e-8bba-faf3cbff995b": {
"ai_memory": [
[
{
"node": "de711274-f02b-4ca4-a3b7-c2c9376566ea",
"type": "ai_memory",
"index": 0
}
]
]
},
"5c0fd73c-7893-41d1-8fd4-869c10f398e2": {
"main": [
[
{
"node": "10e9dc48-18b9-4710-915b-b8b85d23b72c",
"type": "main",
"index": 0
}
]
]
},
"c8edaab9-0dda-4c1f-88fe-e9dec377e72b": {
"ai_memory": [
[
{
"node": "e938da49-2aa9-4896-a01c-0af2b372f7d9",
"type": "ai_memory",
"index": 0
}
]
]
},
"92bcb484-cb19-450c-a274-50e6efee8d18": {
"main": [
[
{
"node": "3dc1131c-7ef4-4ffb-8f7b-190a2aacdac5",
"type": "main",
"index": 0
}
]
]
},
"cf20bb5d-c904-4f89-8bc4-347fc41b9e59": {
"main": [
[
{
"node": "152e5586-28ff-48eb-bdb6-d9c1e387a44a",
"type": "main",
"index": 0
}
]
]
},
"3ad6e0e0-863b-4205-b284-2a65da7f49d9": {
"main": [
[
{
"node": "aba69031-9b64-485a-8f9d-f0c58b17c6b3",
"type": "main",
"index": 0
}
]
]
},
"3dc1131c-7ef4-4ffb-8f7b-190a2aacdac5": {
"main": [
[
{
"node": "3913bbb9-a333-45c3-9847-62a839854d05",
"type": "main",
"index": 0
}
]
]
},
"10e9dc48-18b9-4710-915b-b8b85d23b72c": {
"main": [
[
{
"node": "cc08369a-de12-4bc2-9c5e-7b59221a4576",
"type": "main",
"index": 0
}
]
]
},
"ee48f02a-4913-4b1f-954f-f82e50a66460": {
"ai_languageModel": [
[
{
"node": "e938da49-2aa9-4896-a01c-0af2b372f7d9",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"cc08369a-de12-4bc2-9c5e-7b59221a4576": {
"main": [
[
{
"node": "4417c698-2ea2-4145-ba19-74937e24cc75",
"type": "main",
"index": 0
},
{
"node": "96d23e37-694e-4018-a7ec-f315047d10fc",
"type": "main",
"index": 0
}
]
]
},
"27bc6657-eb1c-442b-b479-e5a2371597e2": {
"ai_languageModel": [
[
{
"node": "982f9886-40c8-45f8-a21b-a4228632ef9a",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"4745e47b-8b90-4df4-8f51-c0f9a4c89950": {
"ai_languageModel": [
[
{
"node": "de711274-f02b-4ca4-a3b7-c2c9376566ea",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"982f9886-40c8-45f8-a21b-a4228632ef9a": {
"ai_outputParser": [
[
{
"node": "e938da49-2aa9-4896-a01c-0af2b372f7d9",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"e938da49-2aa9-4896-a01c-0af2b372f7d9": {
"main": [
[
{
"node": "075f692e-6a79-4bd5-b30f-efdeb5bef65a",
"type": "main",
"index": 0
}
]
]
},
"5f2a3b8b-11e6-4955-8b9c-814416406540": {
"ai_tool": [
[
{
"node": "e938da49-2aa9-4896-a01c-0af2b372f7d9",
"type": "ai_tool",
"index": 0
}
]
]
},
"36bdcdbd-76b0-46ab-b1a2-1ab8d04abbe7": {
"ai_tool": [
[
{
"node": "de711274-f02b-4ca4-a3b7-c2c9376566ea",
"type": "ai_tool",
"index": 0
}
]
]
},
"0a2fe3c3-7684-4779-9f34-e8b8e426b78d": {
"ai_tool": [
[
{
"node": "de711274-f02b-4ca4-a3b7-c2c9376566ea",
"type": "ai_tool",
"index": 0
}
]
]
},
"2d983e0c-02b0-4aab-bc74-22f10bf76c54": {
"main": [
[
{
"node": "3dc1131c-7ef4-4ffb-8f7b-190a2aacdac5",
"type": "main",
"index": 0
}
]
]
}
}
}이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 콘텐츠 제작, 멀티모달 AI
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
Kumar Shivam
@shivam840708I'm an automation specialist who helps startups, agencies, and growth teams save time and scale faster using n8n. I design smart, reliable workflows that connect tools like HubSpot, Slack, OpenAI, Claude, Pipedrive, Google Ads, and vector databases (Qdrant, Pinecone). Whether it's auto-assigning leads, generating AI-powered reports, triggering Slack alerts, or syncing APIs — I build automations that just work. Let’s turn your manual processes into automated systems that scale.
이 워크플로우 공유