{
  "meta": {
    "versionId": "1.0.0",
    "createdAt": "2025-09-29T07:07:42.328752",
    "updatedAt": "2025-09-29T07:07:42.328769",
    "owner": "n8n-user",
    "license": "MIT",
    "category": "automation",
    "status": "active",
    "priority": "high",
    "environment": "production"
  },
  "nodes": [
    {
      "id": "b220e0c7-3c34-4221-8fee-11c133a5345b",
      "name": "Get ticket",
      "type": "n8n-nodes-base.zendesk",
      "position": [
        740,
        540
      ],
      "parameters": {
        "id": "={{$(\"On new Zendesk ticket\").item.json[\"body\"][\"id\"]}}",
        "operation": "get"
      },
      "credentials": {
        "zendeskApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1,
      "notes": "This zendesk node performs automated tasks as part of the workflow."
    },
    {
      "id": "e58834a7-1a94-429f-a50c-2e27293c32a0",
      "name": "If Node",
      "type": "n8n-nodes-base.if",
      "position": [
        1140,
        540
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$(\"Determine\").item.json[\"Slack Thread ID\"]}}",
              "operation": "isNotEmpty"
            }
          ]
        }
      },
      "typeVersion": 1,
      "notes": "This if node performs automated tasks as part of the workflow."
    },
    {
      "id": "c6f82ab9-54f4-4f91-a4d9-018739c6519d",
      "name": "Update ticket",
      "type": "n8n-nodes-base.zendesk",
      "notes": "Update the Zendesk ticket by adding the Jira issue key to the \"Jira Issue Key\" field.",
      "position": [
        1540,
        640
      ],
      "parameters": {
        "id": "={{$(\"On new Zendesk ticket\").item.json[\"body\"][\"id\"]}}",
        "operation": "update",
        "updateFields": {
          "customFieldsUi": {
            "customFieldsValues": [
              {
                "id": 7022397804317,
                "value": "={{$(\"Create thread\").item.json[\"ts\"]}}"
              }
            ]
          }
        }
      },
      "credentials": {
        "zendeskApi": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 1
    },
    {
      "id": "74d93ba5-d82d-4cc4-a177-bd86dbc18534",
      "name": "On new Zendesk ticket",
      "type": "n8n-nodes-base.webhook",
      "position": [
        540,
        540
      ],
      "parameters": {
        "path": "your-webhook-path",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 1,
      "notes": "This webhook node performs automated tasks as part of the workflow."
    },
    {
      "id": "65d387cd-5c7a-4567-9a3c-9fa033f98ac9",
      "name": "Create thread",
      "type": "n8n-nodes-base.slack",
      "position": [
        1340,
        640
      ],
      "parameters": {
        "text": "={{$(\"Get ticket\").item.json[\"subject\"]}}",
        "channel": "={{$(\"Configure\").item.json.parameter[\"values\"][\"string\"][0][\"value\"]}}",
        "attachments": [],
        "otherOptions": {},
        "authentication": "{{ $credentials.oAuth2 }}"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1,
      "notes": "This slack node performs automated tasks as part of the workflow."
    },
    {
      "id": "50f5aa84-70bc-4b08-a9cc-576fbed72636",
      "name": "Create reply on existing thread",
      "type": "n8n-nodes-base.slack",
      "position": [
        1340,
        440
      ],
      "parameters": {
        "text": "={{$(\"On new Zendesk ticket\").item.json[\"body\"][\"comment\"]}}",
        "channel": "={{$(\"Configure\").item.json.parameter[\"values\"][\"string\"][0][\"value\"]}}",
        "attachments": [],
        "otherOptions": {
          "thread_ts": "={{$(\"Determine\").item.json[\"Slack Thread ID\"]}}"
        },
        "authentication": "{{ $credentials.oAuth2 }}"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1,
      "notes": "This slack node performs automated tasks as part of the workflow."
    },
    {
      "id": "6d5e8df0-4b0b-487c-81be-93359976dd90",
      "name": "Configure",
      "type": "n8n-nodes-base.set",
      "position": [
        540,
        360
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "Slack channel",
              "value": "#zendesk-updates"
            }
          ]
        },
        "options": {
          "dotNotation": false
        }
      },
      "typeVersion": 1,
      "notes": "This set node performs automated tasks as part of the workflow."
    },
    {
      "id": "934b95bb-2ffa-40a4-a2ca-02cfd646dd78",
      "name": "Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -20,
        360
      ],
      "parameters": {
        "width": 469.4813676974197,
        "height": 268.2900466166276,
        "content": "## Sync Zendesk tickets to Slack threads\n### Setup\n1. Add your [Zendesk credential]({{ $env.WEBHOOK_URL }} to the `Get ticket` and `Update ticket` nodes.\n2. Add your [Slack credential]({{ $env.WEBHOOK_URL }} to `Create Thread` and `Create reply on existing thread` nodes.\n3. Open `Configure` node and change \"Slack channel\" value to your slack channel (like #zendesk-updates).\n4. Activate the workflow so it runs automatically each time a Zendesk ticket is created."
      },
      "typeVersion": 1,
      "notes": "This stickyNote node performs automated tasks as part of the workflow."
    },
    {
      "id": "b582f7ff-7cc6-48dc-89fc-bc8bde13b06e",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "notes": "if thread was created already in Slack",
      "position": [
        940,
        540
      ],
      "parameters": {
        "jsCode": "/* configure here =========================================================== */\n/*  Zendesk field ID which represents the \"Slack Thread ID\" field.\n*/\nconst ISSUE_KEY_FIELD_ID = 7022397804317;\n\n/* ========================================================================== */\nnew_items = [];\n\nfor (item of $items(\"Get ticket\")) {\n    \n    // instantiate a new variable for status\n    var custom_fields = item.json[\"custom_fields\"];\n    var slack_thread_id = \"\";\n    for (var i = 0; i < custom_fields.length; i++) {\n        if (custom_fields[i].id == ISSUE_KEY_FIELD_ID) {\n            slack_thread_id = custom_fields[i].value;\n            break;\n        }\n    }\n\n    // push the new item to the new_items array\n    new_items.push({\n        \"Slack Thread ID\": slack_thread_id\n    });\n}\n\nreturn new_items;"
      },
      "notesInFlow": true,
      "typeVersion": 1
    }
  ],
  "connections": {
    "On new Zendesk ticket": {
      "main": [
        [],
        [],
        [],
        [],
        [],
        [],
        [],
        [],
        []
      ]
    },
    "Create thread": {
      "main": [
        []
      ]
    },
    "Create reply on existing thread": {
      "main": [
        []
      ]
    }
  },
  "name": "Zendesk Workflow",
  "settings": {
    "executionOrder": "v1",
    "saveManualExecutions": true,
    "callerPolicy": "workflowsFromSameOwner",
    "errorWorkflow": null,
    "timezone": "UTC",
    "executionTimeout": 3600,
    "maxExecutions": 1000,
    "retryOnFail": true,
    "retryCount": 3,
    "retryDelay": 1000
  },
  "description": "Automated workflow: Zendesk Workflow. This workflow integrates 8 different services: webhook, stickyNote, code, set, stopAndError. It contains 13 nodes and follows best practices for error handling and security.",
  "notes": "Excellent quality workflow: Zendesk Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation.",
  "id": "wf46b7d2009805"
}