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
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
  "meta": {
    "instanceId": "b2df916b3f98ab473fe29db5d8da4d12d0e855e62a053e1912cefd83f8502fba",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "c8edaab9-0dda-4c1f-88fe-e9dec377e72b",
      "name": "Session Memory2",
      "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": "Structured Output Parser",
      "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 Chat Model",
      "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 Chat Model1",
      "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": "Error Trigger",
      "type": "n8n-nodes-base.errorTrigger",
      "position": [
        -192,
        2384
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "de711274-f02b-4ca4-a3b7-c2c9376566ea",
      "name": "AI Agent",
      "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 Chat Model2",
      "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": "Simple Memory",
      "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": "Code5",
      "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 Sheets シートへの行追加",
      "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": "Code1",
      "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など)は別途料金が発生する場合があります。

ワークフロー情報
難易度
上級
ノード数43
カテゴリー2
ノードタイプ20
難易度説明

上級者向け、16ノード以上の複雑なワークフロー

作成者
Kumar Shivam

Kumar Shivam

@shivam840708

I'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.

外部リンク
n8n.ioで表示

このワークフローを共有

カテゴリー

カテゴリー: 34