{"meta":{"instanceId":"workflow-9f80cc3c","versionId":"1.0.0","createdAt":"2025-09-29T07:08:01.730966","updatedAt":"2025-09-29T07:08:01.730987","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"nodes":[{"id":"dcd5f025-9af9-4e3a-96fc-25a33dcc6c00","name":"Ticket Exists","type":"n8n-nodes-base.if","position":[900,320],"parameters":{"conditions":{"string":[{"value1":"={{ $json[\"external_id\"] }}","operation":"isNotEmpty"}]}},"typeVersion":1,"notes":"This if node performs automated tasks as part of the workflow."},{"id":"a5e8ec4d-bc80-4153-a677-91be2e7d02b7","name":"Get user data of Ticket requester","type":"n8n-nodes-base.zendesk","position":[220,480],"parameters":{"id":"={{ $json[\"requester_id\"] }}","resource":"user","operation":"get"},"credentials":{"zendeskApi":{"id":"{{ $credentials.zendeskApi.id }}","name":"Zendesk account"}},"typeVersion":1,"notes":"This zendesk node performs automated tasks as part of the workflow."},{"id":"6dc07af8-d446-4704-9a08-e65f89772a9b","name":"Only keep needed data","type":"n8n-nodes-base.set","position":[440,480],"parameters":{"values":{"number":[{"name":"id","value":"={{ $json[\"id\"] }}"},{"name":"contactExternalId","value":"={{ $json[\"external_id\"] }}"}],"string":[{"name":"contactEmail","value":"={{ $json[\"email\"] }}"},{"name":"contactName","value":"={{ $json[\"name\"] }}"}]},"options":{},"keepOnlySet":true},"typeVersion":1,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"c3ca22e4-ae76-49ee-b117-f6da9d90ec1a","name":"Add user data","type":"n8n-nodes-base.merge","position":[640,320],"parameters":{"mode":"mergeByKey","propertyName1":"requester_id","propertyName2":"id"},"typeVersion":1,"notes":"This merge node performs automated tasks as part of the workflow."},{"id":"713b919a-3a39-4466-b9b8-cc3575f02e45","name":"Update existing ticket","type":"n8n-nodes-base.hubspot","position":[1280,300],"parameters":{"resource":"ticket","ticketId":"={{ $json[\"external_id\"] }}","operation":"update","updateFields":{"ticketName":"={{ $json[\"raw_subject\"] }}","description":"={{ $json[\"description\"] }}"},"authentication":"{{ $credentials.oAuth2 }}"},"credentials":{"hubspotOAuth2Api":{"id":"{{ $credentials.hubspotOAuth2Api.id }}","name":"HubSpot account"}},"typeVersion":1,"continueOnFail":true,"notes":"This hubspot node performs automated tasks as part of the workflow."},{"id":"1eb40a93-2d36-4b3e-a39d-f19f369adc4e","name":"Update Zendesk ticket with External Id","type":"n8n-nodes-base.zendesk","position":[2020,480],"parameters":{"id":"={{ $node[\"Contact Exists\"].json[\"id\"] }}","operation":"update","updateFields":{"externalId":"={{ $json[\"objectId\"] }}"}},"credentials":{"zendeskApi":{"id":"{{ $credentials.zendeskApi.id }}","name":"Zendesk account"}},"typeVersion":1,"notes":"This zendesk node performs automated tasks as part of the workflow."},{"id":"a11c8809-c22f-40f5-a019-79274eba4d70","name":"Get last execution timestamp","type":"n8n-nodes-base.functionItem","position":[-260,300],"parameters":{"functionCode":"// Code here will run once per input item.\n// More info and help: {{ $env.WEBHOOK_URL }}\n// Tip: You can use luxon for dates and $jmespath for querying JSON structures\n\n// Add a new field called 'myNewField' to the JSON of the item\nconst staticData = getWorkflowStaticData('global');\n\nif(!staticData.lastExecution){\n  staticData.lastExecution = new Date().toISOString();\n}\n\nitem.executionTimeStamp = new Date().toISOString();\nitem.lastExecution = staticData.lastExecution;\n\n\nreturn item;"},"typeVersion":1,"notes":"This functionItem node performs automated tasks as part of the workflow."},{"id":"a62685c9-f786-4e7c-9e2d-cdcb1e0a3aea","name":"Get tickets updated after last execution","type":"n8n-nodes-base.zendesk","position":[-40,300],"parameters":{"options":{"query":"=updated>{{ $json[\"lastExecution\"] }}","sortBy":"updated_at","sortOrder":"desc"},"operation":"getAll"},"credentials":{"zendeskApi":{"id":"{{ $credentials.zendeskApi.id }}","name":"Zendesk account"}},"typeVersion":1,"notes":"This zendesk node performs automated tasks as part of the workflow."},{"id":"c1b23aa8-a9f6-4966-b1dc-fe48c203364c","name":"Set new last execution timestamp","type":"n8n-nodes-base.functionItem","position":[2360,300],"parameters":{"functionCode":"// Code here will run once per input item.\n// More info and help: {{ $env.WEBHOOK_URL }}\n// Tip: You can use luxon for dates and $jmespath for querying JSON structures\n\n// Add a new field called 'myNewField' to the JSON of the item\nconst staticData = getWorkflowStaticData('global');\n\nstaticData.lastExecution = $item(0).$node[\"Get last execution timestamp\"].executionTimeStamp;\n\nreturn item;"},"executeOnce":true,"typeVersion":1,"notes":"This functionItem node performs automated tasks as part of the workflow."},{"id":"97ae70de-bce8-4861-a256-17002625da58","name":"Every 5 minutes","type":"n8n-nodes-base.cron","position":[-460,300],"parameters":{"triggerTimes":{"item":[{"mode":"everyX","unit":"minutes","value":5}]}},"typeVersion":1,"notes":"This cron node performs automated tasks as part of the workflow."},{"id":"1d2dd552-175c-4405-b304-d4136dd2968b","name":"Create new Ticket","type":"n8n-nodes-base.hubspot","position":[1780,480],"parameters":{"stageId":"1","resource":"ticket","pipelineId":"0","ticketName":"={{ $node['Ticket Exists'].json[\"raw_subject\"] }}","authentication":"{{ $credentials.oAuth2 }}","additionalFields":{"description":"={{ $node['Ticket Exists'].json[\"description\"] }}","associatedContactIds":"={{ [].concat($node[\"Create or update contact\"].json[\"vid\"]) }}"}},"credentials":{"hubspotOAuth2Api":{"id":"{{ $credentials.hubspotOAuth2Api.id }}","name":"HubSpot account"}},"executeOnce":false,"typeVersion":1,"notes":"This hubspot node performs automated tasks as part of the workflow."},{"id":"e2217f74-f1b2-4449-9937-543758a333ea","name":"Update External Id in Zendesk for contact","type":"n8n-nodes-base.zendesk","position":[1520,480],"parameters":{"id":"={{ $node[\"Ticket Exists\"].json[\"requester_id\"] }}","resource":"user","operation":"update","updateFields":{"external_id":"={{ $json[\"vid\"] }}"}},"credentials":{"zendeskApi":{"id":"{{ $credentials.zendeskApi.id }}","name":"Zendesk account"}},"typeVersion":1,"notes":"This zendesk node performs automated tasks as part of the workflow."},{"id":"144a3395-9f61-4aad-99e0-4a689145f93d","name":"Create or update contact","type":"n8n-nodes-base.hubspot","position":[1280,480],"parameters":{"email":"={{ $json[\"contactEmail\"] }}","resource":"contact","authentication":"{{ $credentials.oAuth2 }}","additionalFields":{}},"credentials":{"hubspotOAuth2Api":{"id":"{{ $credentials.hubspotOAuth2Api.id }}","name":"HubSpot account"}},"typeVersion":1,"notes":"This hubspot node performs automated tasks as part of the workflow."},{"id":"error-6df442e5","name":"Error Handler","type":"n8n-nodes-base.stopAndError","typeVersion":1,"position":[1000,400],"parameters":{"message":"Workflow execution error","options":{}}}],"connections":{},"name":"If Workflow","description":"Automated workflow: If Workflow. This workflow processes data and performs automated tasks.","settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"notes":"Excellent quality workflow: If Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}