{ "name": "Create and Update an E-goi Subscriber", "nodes": [ { "name": "On clicking 'execute'", "type": "n8n-nodes-base.manualTrigger", "position": [ 270, 300 ], "parameters": {}, "typeVersion": 1, "id": "create-update-egoi-subscriber-0" }, { "name": "Set contact details", "type": "n8n-nodes-base.code", "typeVersion": 2, "parameters": { "mode": "runOnceForAllItems", "jsCode": "function setup({listId,email,initialName,updatedName}){if(typeof listId!=='string'||!/^\\d+$/.test(listId)||!Number.isSafeInteger(Number(listId))||Number(listId)<1)throw Error('Enter a numeric list ID');if(typeof email!=='string'||!/^\\S+@\\S+\\.\\S+$/.test(email.trim()))throw Error('Enter a valid email');if(typeof initialName!=='string'||!initialName.trim()||typeof updatedName!=='string'||!updatedName.trim())throw Error('Enter both names');return {listId:Number(listId),email:email.trim(),initialName:initialName.trim(),updatedName:updatedName.trim(),url:'https://api.egoiapp.com/lists/'+listId+'/contacts',body:{base:{email:email.trim(),first_name:initialName.trim()},extra:[]},update:{base:{first_name:updatedName.trim()},extra:[]}};}\n\nreturn [{json:setup({listId:'',email:'',initialName:'',updatedName:''})}];" }, "id": "create-update-egoi-subscriber-1" }, { "name": "e-goi", "type": "n8n-nodes-base.egoi", "position": [ 470, 300 ], "parameters": { "list": "={{ $(\"Set contact details\").first().json.listId }}", "email": "={{ $(\"Set contact details\").first().json.email }}", "additionalFields": { "first_name": "={{ $(\"Set contact details\").first().json.initialName }}" }, "resolveData": false }, "typeVersion": 1, "id": "create-update-egoi-subscriber-2" }, { "name": "Confirm created contact", "type": "n8n-nodes-base.code", "typeVersion": 2, "parameters": { "mode": "runOnceForAllItems", "jsCode": "const c=$input.first().json;if(!c||typeof c.contact_id!=='string'||!/^[a-f0-9]{10}$/i.test(c.contact_id))throw Error('Contact ID missing or invalid');return $input.all();" }, "id": "create-update-egoi-subscriber-3" }, { "name": "e-goi1", "type": "n8n-nodes-base.egoi", "position": [ 670, 300 ], "parameters": { "list": "={{ $(\"Set contact details\").first().json.listId }}", "contactId": "={{ $(\"Confirm created contact\").first().json.contact_id }}", "operation": "update", "updateFields": { "first_name": "={{ $(\"Set contact details\").first().json.updatedName }}" }, "resolveData": true }, "typeVersion": 1, "id": "create-update-egoi-subscriber-4" }, { "name": "e-goi2", "type": "n8n-nodes-base.egoi", "position": [ 870, 300 ], "parameters": { "list": "={{ $(\"Set contact details\").first().json.listId }}", "contactId": "={{ $(\"Confirm created contact\").first().json.contact_id }}", "operation": "get", "simple": false }, "typeVersion": 1, "id": "create-update-egoi-subscriber-5" }, { "name": "Verify the contact", "type": "n8n-nodes-base.code", "typeVersion": 2, "parameters": { "mode": "runOnceForAllItems", "jsCode": "function confirm({body,contactId,email,updatedName}){const c=body?.base;if(!c||c.contact_id!==contactId||typeof c.email!=='string'||c.email.toLowerCase()!==email.toLowerCase()||c.first_name!==updatedName)throw Error('Returned contact does not match');return {contact:body};}\n\nconst input=$('Set contact details').first().json,c=$('Confirm created contact').first().json;return [{json:confirm({body:$input.first().json,contactId:c.contact_id,email:input.email,updatedName:input.updatedName}).contact}];" }, "id": "create-update-egoi-subscriber-6" } ], "active": false, "settings": {}, "connections": { "On clicking 'execute'": { "main": [ [ { "node": "Set contact details", "type": "main", "index": 0 } ] ] }, "Set contact details": { "main": [ [ { "node": "e-goi", "type": "main", "index": 0 } ] ] }, "e-goi": { "main": [ [ { "node": "Confirm created contact", "type": "main", "index": 0 } ] ] }, "Confirm created contact": { "main": [ [ { "node": "e-goi1", "type": "main", "index": 0 } ] ] }, "e-goi1": { "main": [ [ { "node": "e-goi2", "type": "main", "index": 0 } ] ] }, "e-goi2": { "main": [ [ { "node": "Verify the contact", "type": "main", "index": 0 } ] ] } }, "pinData": {} }