{ "nodes": [ { "name": "On clicking 'execute'", "type": "n8n-nodes-base.manualTrigger", "position": [ 250, 320 ], "parameters": {}, "typeVersion": 1, "id": "create-update-copper-contact-0" }, { "name": "Set contact details", "type": "n8n-nodes-base.code", "typeVersion": 2, "parameters": { "mode": "runOnceForAllItems", "jsCode": "const name='',email='',phone='';if(!name.trim()||!/^\\S+@\\S+\\.\\S+$/.test(email.trim())||!phone.trim())throw Error('Enter contact name, email and phone');return [{json:{name:name.trim(),email:email.trim(),phone:phone.trim()}}];" }, "id": "create-update-copper-contact-1" }, { "name": "Copper", "type": "n8n-nodes-base.copper", "position": [ 450, 320 ], "parameters": { "name": "={{ $(\"Set contact details\").first().json.name }}", "resource": "person", "additionalFields": { "emails": { "emailFields": [ { "email": "={{ $(\"Set contact details\").first().json.email }}", "category": "work" } ] } } }, "typeVersion": 1, "id": "create-update-copper-contact-2" }, { "name": "Confirm created person", "type": "n8n-nodes-base.code", "typeVersion": 2, "parameters": { "mode": "runOnceForAllItems", "jsCode": "const id=$input.first().json.id;if(!Number.isSafeInteger(id)||id<1)throw Error('Copper did not return a person ID');return $input.all();" }, "id": "create-update-copper-contact-3" }, { "name": "Copper1", "type": "n8n-nodes-base.copper", "position": [ 650, 320 ], "parameters": { "personId": "={{ $(\"Copper\").first().json.id }}", "resource": "person", "operation": "update", "updateFields": { "phone_numbers": { "phoneFields": [ { "number": "={{ $(\"Set contact details\").first().json.phone }}", "category": "work" } ] } } }, "typeVersion": 1, "id": "create-update-copper-contact-4" }, { "name": "Confirm update", "type": "n8n-nodes-base.code", "typeVersion": 2, "parameters": { "mode": "runOnceForAllItems", "jsCode": "const id=$('Copper').first().json.id;if($input.first().json.id!==id)throw Error('Copper did not confirm the same person');return $input.all();" }, "id": "create-update-copper-contact-5" }, { "name": "Copper2", "type": "n8n-nodes-base.copper", "position": [ 850, 320 ], "parameters": { "personId": "={{ $(\"Copper\").first().json.id }}", "resource": "person", "operation": "get" }, "typeVersion": 1, "id": "create-update-copper-contact-6" }, { "name": "Verify person", "type": "n8n-nodes-base.code", "typeVersion": 2, "parameters": { "mode": "runOnceForAllItems", "jsCode": "function result({body,id,email,phone}){if(!body||body.id!==id||!Array.isArray(body.emails)||!body.emails.some(x=>x.email===email&&x.category==='work')||!Array.isArray(body.phone_numbers)||!body.phone_numbers.some(x=>x.number===phone&&x.category==='work'))throw Error('Copper did not return the expected person');return{person:body};}\n\nconst s=$('Set contact details').first().json,id=$('Copper').first().json.id;return [{json:result({body:$input.first().json,id,email:s.email,phone:s.phone}).person}];" }, "id": "create-update-copper-contact-7" } ], "connections": { "On clicking 'execute'": { "main": [ [ { "node": "Set contact details", "type": "main", "index": 0 } ] ] }, "Set contact details": { "main": [ [ { "node": "Copper", "type": "main", "index": 0 } ] ] }, "Copper": { "main": [ [ { "node": "Confirm created person", "type": "main", "index": 0 } ] ] }, "Confirm created person": { "main": [ [ { "node": "Copper1", "type": "main", "index": 0 } ] ] }, "Copper1": { "main": [ [ { "node": "Confirm update", "type": "main", "index": 0 } ] ] }, "Confirm update": { "main": [ [ { "node": "Copper2", "type": "main", "index": 0 } ] ] }, "Copper2": { "main": [ [ { "node": "Verify person", "type": "main", "index": 0 } ] ] } }, "name": "Create and Update a Copper Contact", "active": false, "pinData": {} }