{
  "active": true,
  "connections": {
    "Shopify Trigger": {
      "main": [
        [
          {
            "node": "Search Contact by EMail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Move Binary Data": {
      "main": [
        [
          {
            "node": "Hash incoming data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search Contact by EMail": {
      "main": [
        [
          {
            "node": "Contact found?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Contact found?": {
      "main": [
        [
          {
            "node": "Accepts Marketing?",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Contact accepts marketing?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Contact accepts marketing?": {
      "main": [
        [
          {
            "node": "Create new Contact",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Operation, do nothing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create new Contact": {
      "main": [
        [
          {
            "node": "Add Contact to Segment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Accepts Marketing?": {
      "main": [
        [
          {
            "node": "Add Contact to Segment",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Remove from Segment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook Call": {
      "main": [
        [
          {
            "node": "Move Binary Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Hash incoming data": {
      "main": [
        [
          {
            "node": "Compare Hashes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Compare Hashes": {
      "main": [
        [
          {
            "node": "Get customer from Shopify",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Operation, do nothing1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get customer from Shopify": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mautic - Accepts Marketing?": {
      "main": [
        [
          {
            "node": "Marketing Consent - subscribed",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Marketing Consent - unsubscribed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If": {
      "main": [
        [
          {
            "node": "Mautic - Accepts Marketing?",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Operation, do nothing2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "createdAt": "2023-08-25T09:30:15.825Z",
  "id": "4",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Shopify <--> Mautic",
  "nodes": [
    {
      "parameters": {},
      "id": "614139b6-28fa-4983-9732-9cfaad82067a",
      "name": "No Operation, do nothing",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        400,
        660
      ]
    },
    {
      "parameters": {
        "authentication": "accessToken",
        "topic": "customers/update"
      },
      "id": "b20ef5e3-b002-4d29-bacf-cb731237803b",
      "name": "Shopify Trigger",
      "type": "n8n-nodes-base.shopifyTrigger",
      "typeVersion": 1,
      "position": [
        -680,
        280
      ],
      "webhookId": "ebce58fc-45cf-4c1c-8427-3ffbaccdb440",
      "credentials": {
        "shopifyAccessTokenApi": {
          "id": "11",
          "name": "Shopify Access Token account"
        }
      }
    },
    {
      "parameters": {
        "setAllData": false,
        "options": {}
      },
      "id": "2677101f-c550-4748-afef-e41fe1af0604",
      "name": "Move Binary Data",
      "type": "n8n-nodes-base.moveBinaryData",
      "typeVersion": 1,
      "position": [
        -380,
        1140
      ]
    },
    {
      "parameters": {},
      "id": "6cb7bd1f-939d-43af-966e-171a1ba3d7da",
      "name": "No Operation, do nothing1",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        400,
        1300
      ]
    },
    {
      "parameters": {
        "authentication": "oAuth2",
        "operation": "getAll",
        "limit": 1,
        "options": {
          "search": "={{ $json.email }}"
        }
      },
      "id": "2ab62e7d-70aa-444e-a4a3-d5b6f4db23e4",
      "name": "Search Contact by EMail",
      "type": "n8n-nodes-base.mautic",
      "typeVersion": 1,
      "position": [
        -400,
        280
      ],
      "alwaysOutputData": true,
      "credentials": {
        "mauticOAuth2Api": {
          "id": "6",
          "name": "Mautic account"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.id }}",
              "operation": "isNotEmpty"
            }
          ]
        }
      },
      "id": "2e6cebc8-94ce-473c-9248-f5cc359ee300",
      "name": "Contact found?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 1,
      "position": [
        -140,
        280
      ],
      "alwaysOutputData": false
    },
    {
      "parameters": {
        "conditions": {
          "boolean": [
            {
              "value1": "={{ $('Shopify Trigger').item.json[\"accepts_marketing\"] }}",
              "value2": "={{ true }}"
            }
          ]
        }
      },
      "id": "f6faee14-d93d-4b85-b8fa-9f4d8c127594",
      "name": "Contact accepts marketing?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 1,
      "position": [
        120,
        560
      ]
    },
    {
      "parameters": {
        "authentication": "oAuth2",
        "email": "={{ $('Shopify Trigger').item.json[\"email\"] }}",
        "firstName": "={{ $('Shopify Trigger').item.json[\"first_name\"] }}",
        "lastName": "={{ $('Shopify Trigger').item.json[\"last_name\"] }}",
        "company": "=",
        "additionalFields": {},
        "options": {}
      },
      "id": "cb999a33-6849-4e36-8141-b5e80c19b175",
      "name": "Create new Contact",
      "type": "n8n-nodes-base.mautic",
      "typeVersion": 1,
      "position": [
        400,
        460
      ],
      "credentials": {
        "mauticOAuth2Api": {
          "id": "6",
          "name": "Mautic account"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "boolean": [
            {
              "value1": "={{ $node[\"Shopify Trigger\"].json[\"accepts_marketing\"] }}",
              "value2": "={{ true }}"
            }
          ]
        }
      },
      "id": "b83cfae2-25dc-4ed6-8133-73ee7bb94b29",
      "name": "Accepts Marketing?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 1,
      "position": [
        400,
        260
      ]
    },
    {
      "parameters": {
        "authentication": "oAuth2",
        "resource": "contactSegment",
        "contactId": "={{ $json.id }}",
        "segmentId": 1
      },
      "id": "a1f319db-2e89-42d7-a018-a5f008e918dc",
      "name": "Add Contact to Segment",
      "type": "n8n-nodes-base.mautic",
      "typeVersion": 1,
      "position": [
        780,
        160
      ],
      "credentials": {
        "mauticOAuth2Api": {
          "id": "6",
          "name": "Mautic account"
        }
      }
    },
    {
      "parameters": {
        "authentication": "oAuth2",
        "resource": "contactSegment",
        "operation": "remove",
        "contactId": "={{ $json.id }}",
        "segmentId": 1
      },
      "id": "830fd450-d149-47b1-afd0-5999ecdcdf54",
      "name": "Remove from Segment",
      "type": "n8n-nodes-base.mautic",
      "typeVersion": 1,
      "position": [
        780,
        400
      ],
      "credentials": {
        "mauticOAuth2Api": {
          "id": "6",
          "name": "Mautic account"
        }
      }
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "c83eb6ce-40dd-418c-952a-ed62a051a00b",
        "options": {
          "rawBody": true
        }
      },
      "id": "98653876-b909-4416-a8ee-aa5857078b48",
      "name": "Webhook Call",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1,
      "position": [
        -660,
        1140
      ],
      "webhookId": "c83eb6ce-40dd-418c-952a-ed62a051a00b"
    },
    {
      "parameters": {
        "action": "hmac",
        "type": "SHA256",
        "value": "={{ $json.data }}",
        "dataPropertyName": "=key",
        "secret": "0a9dcfe4f362625efc5a38bc709598c61869552fcfc1aceb8fc08edad8dd3825",
        "encoding": "base64"
      },
      "id": "2c64dae7-5409-4767-92ab-43239bb038f0",
      "name": "Hash incoming data",
      "type": "n8n-nodes-base.crypto",
      "typeVersion": 1,
      "position": [
        -140,
        1140
      ]
    },
    {
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json[\"headers\"][\"webhook-signature\"] }}",
              "value2": "={{ $json.key }}"
            }
          ]
        }
      },
      "id": "d16fae8c-6b13-42cb-831b-437c41919b1b",
      "name": "Compare Hashes",
      "type": "n8n-nodes-base.if",
      "typeVersion": 1,
      "position": [
        100,
        1140
      ]
    },
    {
      "parameters": {
        "authentication": "headerAuth",
        "endpoint": "https://lana-kk.myshopify.com/admin/api/2023-04/graphql.json",
        "query": "={\n  customers(first: 1, query: \"email:'{{ $json[\"body\"][\"mautic.lead_channel_subscription_changed\"][0][\"contact\"][\"fields\"][\"core\"][\"email\"][\"value\"] }}'\" ) {\n    edges {\n      node {\n        id\n        email\n        marketingOptInLevel\n      }\n    }\n  }\n}"
      },
      "id": "08ea065c-cc8d-4020-89c0-0aa35d99a373",
      "name": "Get customer from Shopify",
      "type": "n8n-nodes-base.graphql",
      "typeVersion": 1,
      "position": [
        400,
        1000
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "5",
          "name": "lanakk.com - Shopify"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "= {{ $node[\"Webhook Call\"].json.body[\"mautic.lead_channel_subscription_changed\"][0].new_status }}",
              "operation": "regex",
              "value2": "=contactable"
            }
          ]
        },
        "combineOperation": "any"
      },
      "id": "107bae94-57b1-4991-a8eb-41e85e5f85af",
      "name": "Mautic - Accepts Marketing?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 1,
      "position": [
        940,
        860
      ]
    },
    {
      "parameters": {
        "authentication": "headerAuth",
        "endpoint": "https://lana-kk.myshopify.com/admin/api/2023-04/graphql.json",
        "requestFormat": "json",
        "query": "=mutation customerEmailMarketingConsentUpdate($input: CustomerEmailMarketingConsentUpdateInput!) {\n  customerEmailMarketingConsentUpdate(input: $input) {\n    customer {\n      id\n    }\n    userErrors {\n      field\n      message\n    }\n  }\n}",
        "variables": "={  \"input\": {    \"customerId\": \"{{ $node[\"Get customer from Shopify\"].json[\"data\"][\"customers\"][\"edges\"][0][\"node\"][\"id\"] }}\",    \"emailMarketingConsent\": {      \"consentUpdatedAt\": \"{{ $now }}\",      \"marketingOptInLevel\": \"SINGLE_OPT_IN\",      \"marketingState\": \"SUBSCRIBED\"    }  }}"
      },
      "id": "52d46a11-f459-449c-b93e-2890a94b1e65",
      "name": "Marketing Consent - subscribed",
      "type": "n8n-nodes-base.graphql",
      "typeVersion": 1,
      "position": [
        1280,
        720
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "5",
          "name": "lanakk.com - Shopify"
        }
      }
    },
    {
      "parameters": {
        "authentication": "headerAuth",
        "endpoint": "https://lana-kk.myshopify.com/admin/api/2023-04/graphql.json",
        "requestFormat": "json",
        "query": "=mutation customerEmailMarketingConsentUpdate($input: CustomerEmailMarketingConsentUpdateInput!) {\n  customerEmailMarketingConsentUpdate(input: $input) {\n    customer {\n      id\n    }\n    userErrors {\n      field\n      message\n    }\n  }\n}",
        "variables": "={  \"input\": {    \"customerId\": \"{{ $node[\"Get customer from Shopify\"].json[\"data\"][\"customers\"][\"edges\"][0][\"node\"][\"id\"] }}\",    \"emailMarketingConsent\": {      \"consentUpdatedAt\": \"{{ $now }}\",      \"marketingOptInLevel\": \"SINGLE_OPT_IN\",      \"marketingState\": \"UNSUBSCRIBED\"    }  }}"
      },
      "id": "4815d1b0-2455-4bb0-8dd3-717b216e60a1",
      "name": "Marketing Consent - unsubscribed",
      "type": "n8n-nodes-base.graphql",
      "typeVersion": 1,
      "position": [
        1280,
        1000
      ],
      "credentials": {
        "httpHeaderAuth": {
          "id": "5",
          "name": "lanakk.com - Shopify"
        }
      }
    },
    {
      "parameters": {
        "content": "## Shopify \nThe n8n Shopify node cannot get customer marketing consent, so we get this from the Shopify GraphQL API",
        "width": 279.1188177339898
      },
      "id": "9004b0a4-4946-4a64-9a1c-c1b960333c1b",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        100,
        860
      ]
    },
    {
      "parameters": {
        "content": "## Webhook Validation\nWe use the same key shared with Mautic to hash the incoming request. If the computed hash is identical to the one delivered the request is valid and can be processed",
        "width": 580.807881773399
      },
      "id": "13640a02-f955-400d-9476-605977ec9d99",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -380,
        1300
      ]
    },
    {
      "parameters": {
        "content": "## Shopify \nThe n8n Shopify node cannot set customer marketing consent, so we send a mutation to the Shopify GraphQL API",
        "height": 383.7477832512317,
        "width": 279.1188177339898
      },
      "id": "f6150b76-e147-4a7b-a797-055f66bda89e",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1480,
        720
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "4d2f02ab-f5e3-437d-8a35-f301888a8597",
              "leftValue": "={{ $json.data.customers.edges }}",
              "rightValue": 0,
              "operator": {
                "type": "array",
                "operation": "notEmpty",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {
          "looseTypeValidation": false
        }
      },
      "id": "52707587-103d-4d86-876d-aa96ace2d202",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        660,
        1000
      ]
    },
    {
      "parameters": {},
      "id": "ad9ce920-2b6e-4b41-b56f-516025964e4e",
      "name": "No Operation, do nothing2",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        940,
        1160
      ]
    }
  ],
  "pinData": {},
  "settings": {},
  "staticData": {
    "node:Shopify Trigger": {
      "webhookId": 1374787961097
    }
  },
  "tags": [],
  "triggerCount": 2,
  "updatedAt": "2024-02-14T08:13:18.000Z",
  "versionId": "18c368e9-f44a-406e-920b-938c4f6d0cdd"
}