{"id":"x2VUvhqV1YTJCIN0","meta":{"instanceId":"workflow-ae2499dd","versionId":"1.0.0","createdAt":"2025-09-29T07:08:01.511680","updatedAt":"2025-09-29T07:08:01.511695","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"nodes":[{"id":"094b9011-a53d-4a50-b44d-ad229612bb06","name":"No Operation, do nothing","type":"n8n-nodes-base.noOp","position":[560,220],"parameters":{},"typeVersion":1,"notes":"This noOp node performs automated tasks as part of the workflow."},{"id":"6d9eee1f-995f-4558-8f97-25636e20022c","name":"Save campaign.liquid","type":"n8n-nodes-base.httpRequest","position":[800,-100],"parameters":{"url":"{{ $env.BASE_URL }}","method":"PUT","options":{},"jsonBody":"={\"asset\":\n  {\n    \"key\":\"snippets/{{ $('Set values here!').params[\"fields\"][\"values\"][2][\"stringValue\"] }}\",\n    \"value\":\"{{ $('Set values here!').params[\"fields\"][\"values\"][3][\"stringValue\"].replace(\"IMAGE\",$('Check').item.json[\"body\"][\"items\"][0][\"Campaign Image\"][0][\"visible_name\"]).replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\") }}\"}}","sendBody":true,"specifyBody":"json","authentication":"{{ $credentials.genericCredentialType }}","genericAuthType":"httpHeaderAuth"},"credentials":{"httpHeaderAuth":{"id":"Z98cM8akgh1jPtG7","name":"Header Auth  Shopify"},"shopifyAccessTokenApi":{"id":"WbxXaLMHozAgY3Rz","name":"Shopify Access Token account"}},"typeVersion":4.1,"notes":"This httpRequest node performs automated tasks as part of the workflow."},{"id":"fb3e9410-59ae-4d90-8bb3-1fd95f0e9a43","name":"Upload Image","type":"n8n-nodes-base.graphql","position":[560,-100],"parameters":{"query":"mutation fileCreate($files: [FileCreateInput!]!) {\n  fileCreate(files: $files) {\n    files {\n      id\n    }\n  }\n}","endpoint":"{{ $env.API_ENDPOINT }}","variables":"={\n  \"files\": {\n    \"alt\": \"{{ $json.body.items[0].Name }}\",\n    \"contentType\": \"IMAGE\",\n\t\"filename\": \"{{ $json.body.items[0]['Campaign Image'][0].visible_name }}\",\n    \"originalSource\": \"{{ $json.body.items[0]['Campaign Image'][0].url }}\"\n  }\n}","requestFormat":"json","authentication":"{{ $credentials.headerAuth }}"},"credentials":{"httpHeaderAuth":{"id":"Z98cM8akgh1jPtG7","name":"Header Auth  Shopify"}},"typeVersion":1,"notes":"This graphql node performs automated tasks as part of the workflow."},{"id":"29f970fe-da65-4b6f-bf0b-1cadbd80f51c","name":"Set values here!","type":"n8n-nodes-base.set","position":[120,60],"parameters":{"fields":{"values":[{"name":"Shopify Subdomain","stringValue":"n8n-mautic-demo"},{"name":"Theme ID","stringValue":"125514514534"},{"name":"Filename","stringValue":"campaign.liquid"},{"name":"Content","stringValue":"<img src=\"{{ 'IMAGE' | file_img_url: 'grande'}}\">"}]},"options":{}},"typeVersion":3.2,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"0bd9327d-4bbd-4884-a9a6-21b0c5b4c3d3","name":"Call from Baserow","type":"n8n-nodes-base.webhook","position":[-100,60],"webhookId":"3041fdd6-4cb5-4286-9034-1337dddc3f45","parameters":{"path":"3041fdd6-4cb5-4286-9034-1337dddc3f45","options":{},"httpMethod":"POST"},"typeVersion":1.1,"notes":"This webhook node performs automated tasks as part of the workflow."},{"id":"6c9d35e8-0738-4d15-a0ff-40077e73d797","name":"Check","type":"n8n-nodes-base.if","position":[320,60],"parameters":{"options":{},"conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"21262344-6519-4f32-876b-82722a1fab66","operator":{"type":"number","operation":"gt"},"leftValue":"={{\nDateTime.fromISO($json[\"body\"][\"items\"][0][\"Last modified\"])\n    .diff(DateTime.fromISO($json[\"body\"][\"old_items\"][0][\"Last modified\"]),'minutes')\n    .toObject()\n    [\"minutes\"]\n}}","rightValue":0.1},{"id":"5c0a176c-5ba9-4060-a4d2-b9207cf47092","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ $json.body.items[0].Active }}","rightValue":""},{"id":"f764adc6-e7a1-4df7-861f-94b90a99f2d4","operator":{"type":"array","operation":"notEmpty","singleValue":true},"leftValue":"={{ $json[\"body\"][\"items\"][0][\"Campaign Image\"] }}","rightValue":""}]}},"typeVersion":2,"notes":"This if node performs automated tasks as part of the workflow."},{"id":"f6c17549-4192-4f96-ad81-518c52bdcda7","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-540,-40],"parameters":{"color":4,"width":360.408084305475,"height":315.5897364788551,"content":"## Shopify API\n\nThis workflow uses GraphQL calls to the Shopify Admin API. In order to get a better understanding for the queries and mutations please check the API Docs.\n\n\n[Shopify GraphQL API docs]({{ $env.API_BASE_URL }}\n\nTo make it easy to build queries for the GraphQL API easy please check out the [GraphiQL App for the Admin API]({{ $env.API_BASE_URL }} from Shopify"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"22743217-0c89-4fd1-b22d-0e00d6ca6854","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[560,-300],"parameters":{"width":331.1188177339898,"content":"## Shopify \nThe n8n Shopify node cannot upload images or theme assets so we need to make custom calls to the GraphQL and REST Api "},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"ca9561aa-85e8-47ad-8bac-60fc3a94f94e","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[80,-160],"parameters":{"color":5,"width":158.16682590559316,"content":"## Set values \nPlease edit this node and change the values for your own setup."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."}],"active":true,"settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"versionId":"c82b43c0-aa47-4086-b7ae-588ee12e5e24","connections":{"Save campaign.liquid":{"main":[[],[],[],[],[],[],[],[],[]]},"Call from Baserow":{"main":[[],[],[],[],[],[],[],[],[]]}},"name":"Noop Workflow","description":"Automated workflow: Noop Workflow. This workflow integrates 8 different services: webhook, stickyNote, httpRequest, graphql, set. It contains 13 nodes and follows best practices for error handling and security.","notes":"Excellent quality workflow: Noop Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}