{"id":22831539,"url":"https://github.com/phrase/zendesk-integration","last_synced_at":"2026-03-19T23:46:50.250Z","repository":{"id":36964258,"uuid":"412065144","full_name":"phrase/zendesk-integration","owner":"phrase","description":null,"archived":false,"fork":false,"pushed_at":"2022-07-06T08:39:59.000Z","size":78,"stargazers_count":1,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-06T07:13:13.684Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phrase.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"license.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-09-30T12:58:09.000Z","updated_at":"2023-03-20T15:27:29.000Z","dependencies_parsed_at":"2022-07-11T11:34:32.804Z","dependency_job_id":null,"html_url":"https://github.com/phrase/zendesk-integration","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phrase%2Fzendesk-integration","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phrase%2Fzendesk-integration/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phrase%2Fzendesk-integration/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phrase%2Fzendesk-integration/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phrase","download_url":"https://codeload.github.com/phrase/zendesk-integration/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246403903,"owners_count":20771527,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-12T20:26:32.711Z","updated_at":"2026-01-08T12:39:36.243Z","avatar_url":"https://github.com/phrase.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# zendesk-integration\n\nThe zendesk github integration consist of 6 github actions.\n\n- [issue_created.yml](blob/main/.github/workflows/issue_created.yml)\n- [issue_commented.yml](blob/main/.github/workflows/issue_commented.yml)\n- [zendesk_comment.yml](blob/main/.github/workflows/zendesk_comment.yml)\n- [zendesk_commented.yml](blob/main/.github/workflows/zendesk_commented.yml)\n- [zendesk_solve.yml](blob/main/.github/workflows/zendesk_solve.yml)\n- [zendesk_solved.yml](blob/main/.github/workflows/zendesk_solved.yml)\n\nIn addition, within zendesk there needs to be a [Webhook](https://developer.zendesk.com/api-reference/event-connectors/webhooks/webhooks/#create-or-clone-webhook) and two [Triggers](https://developer.zendesk.com/api-reference/ticketing/business-rules/triggers/#create-trigger) configured.\n\n## Github actions\n\n### Issue created\n\nOnce an issue is created it send the issue to zendesk,\ncreating (or using) the user `\u003cGithub UserName\u003e` with email `\u003cGithub UserName\u003e@users.noreply.github.com`.\nThis mail adress format is also used by github when a user sets the privacy option that the mail should be hidden.\nOnce the ticket got created a comment to the issue will be added to inform the user about the tech support contact.\n\n### Issue commented\n\nEvery comment on an issue gets send to zendesk. It will look up the connected ticket and author and attaches the\ncomment to the ticket, There is no additional comment added on the issue to avoid noise.\n\n### Zendesk commented\n\nOnce a comment on zendesk was added to a ticket from github it will send a webhook to github which triggers a\ngithub action to sync the zendesk comment back to the issue.\n\n\n## Zendesk setup\n\n### Webhook\n\nTo be able to receive comments from zendesk and sync them back to the github issue a webhook needs to be created within zendesk.\nThis can either be done through their interface or through the api. The following data is required:\n\n```json\n{\n  \"webhook\": {\n    \"name\": \"Github Issue Integration\",\n    \"subscriptions\": [\"conditional_ticket_events\"],\n    \"endpoint\": \"https://api.github.com/repos/\u003cGITHUB_ORG\u003e/\u003cGITHUB_REPO\u003e/dispatches\",\n    \"http_method\": \"POST\",\n    \"request_format\": \"json\",\n    \"authentication\": {\n      \"type\": \"bearer_token\",\n      \"add_position\": \"header\",\n      \"data\":{\n        \"token\":\"\u003cTOKEN\u003e\"\n      }\n    }\n  }\n}\n```\n\n`\u003cGITHUB_ORG\u003e`, `\u003cGITHUB_REPO\u003e` and `\u003cTOKEN\u003e` needs to be replaced with real data.\n\n### Triggers\n\nThe webhook itself does not get triggered automatically in zendesk. For this, a `Trigger` needs to be defined.\n\n#### Trigger for comments\n\n```json\n{\n  \"trigger\": {\n    \"title\": \"Zendesk comments to Github\",\n    \"actions\": [\n      {\n        \"field\": \"notification_webhook\",\n        \"value\": [\n          \"\u003cZENDESK_WEBHOOK_ID\u003e\",\n          \"{\\\"event_type\\\": \\\"zendesk-comment\\\", \\\"client_payload\\\": { \\\"ticket\\\": {\\\"id\\\": \\\"{{ticket.id}}\\\",\\\"external_id\\\": \\\"{{ticket.external_id}}\\\"},\\\"comment\\\": {\\\"body\\\": \\\"{{ticket.latest_comment.value}}\\\",\\\"author\\\": \\\"{{ticket.latest_comment.author.name}}\\\"}}}\"\n        ]\n      }\n    ],\n    \"conditions\": {\n      \"all\": [\n        {\n          \"field\": \"comment_is_public\",\n          \"operator\": \"is\",\n          \"value\": true\n        },\n        {\n          \"field\": \"subject_includes_word\",\n          \"operator\": \"includes\",\n          \"value\": \"Github_Issue\"\n        },\n        {\n          \"field\": \"comment_includes_word\",\n          \"operator\": \"not_includes\",\n          \"value\": \"GITHUB_ISSUE_COMMENT\"\n        }\n      ],\n      \"any\": []\n    },\n    \"description\": \"#zendesk-github-comments\",\n  }\n}\n```\n\n#### Trigger for solving issue\n\n```json\n{\n  \"trigger\": {\n    \"title\": \"Zendesk closing Github issues\",\n    \"actions\": [\n      {\n        \"field\": \"notification_webhook\",\n        \"value\": [\n          \"\u003cZENDESK_WEBHOOK_ID\u003e\",\n          \"{\\\"event_type\\\": \\\"zendesk-solved\\\", \\\"client_payload\\\": { \\\"ticket\\\": {\\\"id\\\": \\\"{{ticket.id}}\\\",\\\"external_id\\\": \\\"{{ticket.external_id}}\\\"}}}}\"\n        ]\n      }\n    ],\n    \"conditions\": {\n      \"all\": [\n        {\n          \"field\": \"status\",\n          \"operator\": \"is\",\n          \"value\": \"solved\"\n        },\n        {\n          \"field\": \"subject_includes_word\",\n          \"operator\": \"includes\",\n          \"value\": \"Github_Issue\"\n        }\n      ],\n      \"any\": []\n    },\n    \"description\": \"#zendesk-github-issue-solving\",\n  }\n}\n```\n\n`\u003cZENDESK_WEBHOOK_ID\u003e` needs to be replaced with the real ID of the new generated webhook.\nAdditional conditions can be set to e.g. limit tickets to specific organizations or categories.\n\n:warning: Only public comments should be syned to github. If `comment_is_public` is left out (or set to `\"not_relevant\"`)\nprivate comments would also be synced to github and made public.\n\n:warning: The conditions `subject_includes_word` and `comment_includes_word` matches words added by the github actions.\nThey should not be removed but can be changed to anything - just make sure to also adjust the github actions accordingly.\n\n## Integration\n\nOne important notice: This setup requires only one *global* `zendesk_commented` and one *global* `zendesk_solved` github action (only once) while the\n`zendesk_comment`, `zendesk_solve`, `issue_commented` and `issue_created` github actions needs to be added to every repository where the issues should\nget synced to zendesk.\n\nThe workflow can also be reused via [Calling a reusable workflow](https://docs.github.com/en/actions/learn-github-actions/reusing-workflows#calling-a-reusable-workflow)\nto only have one place for the integration code.\n\n```\non:\n  repository_dispatch:\n    types:\n      - zendesk\njobs:\n  zendesk_comment:\n    uses: phrase/zendesk-integration/.github/workflows/zendesk_comment.yml@main\n```\n\n```\non:\n  repository_dispatch:\n    types:\n      - zendesk-solving-issue\njobs:\n  zendesk_comment:\n    uses: phrase/zendesk-integration/.github/workflows/zendesk_solve.yml@main\n```\n\n```\non:\n  issues:\n    types: [opened]\njobs:\n  issue_created:\n    uses: phrase/zendesk-integration/.github/workflows/issue_created.yml@main\n    secrets:\n      ZENDESK_BASIC_AUTH: ${{ secrets.ZENDESK_BASIC_AUTH }}\n```\n\n\n```\non:\n  issue_comment:\n    types: [created]\njobs:\n  issue_created:\n    uses: phrase/zendesk-integration/.github/workflows/issue_commented.yml@main\n    secrets:\n      ZENDESK_BASIC_AUTH: ${{ secrets.ZENDESK_BASIC_AUTH }}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphrase%2Fzendesk-integration","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphrase%2Fzendesk-integration","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphrase%2Fzendesk-integration/lists"}