{"id":"ikxQzs58WxtUjbuE","meta":{"instanceId":"workflow-9df78d7d","versionId":"1.0.0","createdAt":"2025-09-29T07:07:54.557274","updatedAt":"2025-09-29T07:07:54.557283","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"name":"Entra Contacts to Zammad User Sync","nodes":[{"id":"5cf615cd-d555-4efa-bde4-5e1e2bda0c71","name":"When clicking ‘Test workflow’","type":"n8n-nodes-base.manualTrigger","position":[-2120,160],"parameters":{},"typeVersion":1,"notes":"This manualTrigger node performs automated tasks as part of the workflow."},{"id":"334e380c-ce6b-48c6-be2a-e688cd52ef14","name":"Note1","type":"n8n-nodes-base.stickyNote","position":[-1700,380],"parameters":{"width":1635.910561370123,"height":329.7269624573379,"content":"## Select Entra Contacts that should be synced to Zammad\n\n\n\n"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"39b9ace7-97ba-4202-9c7a-752f67c6a60b","name":"Zammad Univeral User Object","type":"n8n-nodes-base.set","position":[-500,500],"parameters":{"values":{"number":[{"name":"entra_key","value":"={{ $json.id }}"}],"string":[{"name":"email","value":"={{ $json.mail }}"},{"name":"lastname","value":"={{ $json.surname }}"},{"name":"firstname","value":"={{ $json.givenName }}"},{"name":"mobile","value":"={{ $json.phones[1].number }}"},{"name":"phone","value":"={{ $json.phones[2].number }}"}]},"options":{},"keepOnlySet":true},"typeVersion":1,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"df5b4173-e1bd-49ce-9827-1b51a5e98da0","name":"Get Zammad Users","type":"n8n-nodes-base.zammad","position":[-1000,160],"parameters":{"filters":{},"operation":"getAll","returnAll":true},"credentials":{"zammadTokenAuthApi":{"id":"fj5GuzcJuNLQeMxz","name":"Zammad Token Auth account"}},"typeVersion":1,"notes":"This zammad node performs automated tasks as part of the workflow."},{"id":"7f1d3b74-48dd-4245-9f17-286bcc552047","name":"Merge","type":"n8n-nodes-base.merge","position":[200,180],"parameters":{"mode":"combine","options":{},"fieldsToMatchString":"email"},"typeVersion":3,"notes":"This merge node performs automated tasks as part of the workflow."},{"id":"c98c849e-8b0c-45b0-9b05-6b648bf9329c","name":"Find new Zammad Users","type":"n8n-nodes-base.compareDatasets","position":[200,460],"parameters":{"options":{},"mergeByFields":{"values":[{"field1":"email","field2":"email"}]}},"typeVersion":2.3,"notes":"This compareDatasets node performs automated tasks as part of the workflow."},{"id":"079437ca-a379-48ba-a4e5-52b87454adba","name":"Update Zammad User","type":"n8n-nodes-base.zammad","position":[560,180],"parameters":{"id":"={{ $json.id }}","operation":"update","updateFields":{"phone":"={{ $json.phone }}","mobile":"={{ $json.mobile }}","lastname":"={{ $json.lastname }}","firstname":"={{ $json.firstname }}","customFieldsUi":{"customFieldPairs":[{"name":"entra_key","value":"={{ $json.entra_key }}"},{"name":"entra_object_type","value":"contact"}]}}},"credentials":{"zammadTokenAuthApi":{"id":"fj5GuzcJuNLQeMxz","name":"Zammad Token Auth account"}},"typeVersion":1,"notes":"This zammad node performs automated tasks as part of the workflow."},{"id":"34140616-c9c2-4899-a6a8-dc6e89a87c5c","name":"Create Zammad User","type":"n8n-nodes-base.zammad","position":[580,480],"parameters":{"lastname":"={{ $json.lastname }}","firstname":"={{ $json.firstname }}","additionalFields":{"email":"={{ $json.email }}","phone":"={{ $json.phone }}","mobile":"={{ $json.mobile }}","customFieldsUi":{"customFieldPairs":[{"name":"entra_key","value":"={{ $json.entra_key }}"},{"name":"entra_object_type","value":"contact"}]}}},"credentials":{"zammadTokenAuthApi":{"id":"fj5GuzcJuNLQeMxz","name":"Zammad Token Auth account"}},"typeVersion":1,"notes":"This zammad node performs automated tasks as part of the workflow."},{"id":"6c8ef4d9-7bb2-4090-a0cf-411269f766aa","name":"Deactivate Zammad User","type":"n8n-nodes-base.zammad","position":[600,860],"parameters":{"id":"={{ $json.id }}","operation":"update","updateFields":{"phone":"={{ $json.phone }}","active":false,"mobile":"={{ $json.mobile }}","lastname":"={{ $json.lastname }}","firstname":"={{ $json.firstname }}","customFieldsUi":{"customFieldPairs":[{"name":"entra_key","value":"={{ $json.entra_key }}"},{"name":"entra_object_type","value":"contact"}]}}},"credentials":{"zammadTokenAuthApi":{"id":"fj5GuzcJuNLQeMxz","name":"Zammad Token Auth account"}},"typeVersion":1,"notes":"This zammad node performs automated tasks as part of the workflow."},{"id":"e3db9840-666a-42d3-9466-70e970a57f29","name":"Find removed Users","type":"n8n-nodes-base.compareDatasets","position":[200,880],"parameters":{"options":{},"resolve":"preferInput1","mergeByFields":{"values":[{"field1":"entra_key","field2":"entra_key"}]}},"typeVersion":2.3,"notes":"This compareDatasets node performs automated tasks as part of the workflow."},{"id":"6100fd80-8d9c-44ed-bfc1-6d39794c5405","name":"Get Contacts from Entra","type":"n8n-nodes-base.httpRequest","position":[-1600,500],"parameters":{"url":"{{ $env.WEBHOOK_URL }}","options":{},"authentication":"{{ $credentials.predefinedCredentialType }}","nodeCredentialType":"YOUR_CREDENTIAL_HERE"},"credentials":{"microsoftOAuth2Api":{"id":"U2E5p3lreqSi8v1N","name":"ms365test.zammad.org"},"microsoftGraphSecurityOAuth2Api":{"id":"b09tqOxzkl0P8UQD","name":"ms365test.zammad.org"}},"typeVersion":4.2,"notes":"This httpRequest node performs automated tasks as part of the workflow."},{"id":"27e598a5-39a5-408b-a8ab-bf0ada9a6870","name":"Entra Contacts","type":"n8n-nodes-base.splitOut","position":[-1220,500],"parameters":{"options":{},"fieldToSplitOut":"value"},"typeVersion":1,"notes":"This splitOut node performs automated tasks as part of the workflow."},{"id":"ac38d73e-7a71-4b7d-913e-abc96236b124","name":"Filter contacts if needed","type":"n8n-nodes-base.if","position":[-840,500],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"15da9b4f-46fa-4e9b-bd33-40ae79b88cd5","operator":{"type":"object","operation":"exists","singleValue":true},"leftValue":"={{ $json }}","rightValue":""}]}},"typeVersion":2.2,"notes":"This if node performs automated tasks as part of the workflow."},{"id":"28d3faf9-7cf4-4470-941b-abada3de3b9c","name":"Filter if needed","type":"n8n-nodes-base.if","position":[-400,160],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"5b258616-66b2-4378-8215-5dce8edd19b3","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.entra_object_type }}","rightValue":"contact"},{"id":"0d569bde-d384-48d0-a208-aa707752d6e5","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ $json.active }}","rightValue":""}]}},"typeVersion":2.2,"notes":"This if node performs automated tasks as part of the workflow."}],"active":false,"settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"versionId":"55f3ac0f-d15e-4643-a1ca-26f4ade7bb14","connections":{"Get Contacts from Entra":{"main":[[],[],[],[],[],[],[],[],[]]}},"description":"Automated workflow: Entra Contacts to Zammad User Sync. This workflow integrates 10 different services: stickyNote, httpRequest, splitOut, merge, set. It contains 16 nodes and follows best practices for error handling and security.","notes":"Excellent quality workflow: Entra Contacts to Zammad User Sync. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}