> For the complete documentation index, see llms.txt.
Skip to main content

Check out Port for yourself ➜ 

Summarize Zendesk tickets with AI

Implement with AI

Send this guide to your coding agent.

Prerequisite: Install Port MCP

When working on support, you often need quick, structured summaries of a ticket for internal handoffs or customer updates. In this guide, we will build a Port workflow that fetches a Zendesk ticket's context and uses Port AI to generate a structured summary, all in one self-service run.

Common use cases​

  • Generate a concise, standardized ticket summary for internal handoffs.
  • Produce a customer-facing summary capturing request, resolution, and root cause.
  • Create quick recaps for weekly reviews or QA of support interactions.

Scenario​

You are the on-call support engineer. A customer requests the ability to set labels for tickets on Zendesk ticket 4095. Before hand-off, you need a concise internal summary that captures the request, the resolution, and any follow-ups.

Zendesk tickets consist of two main sources of context:

  1. Comments - the primary conversation between the requester and agents (public or internal).
  2. Side conversations - separate threaded discussions (email, Slack, etc.) opened from the ticket for additional stakeholders.
Zendesk ticket comments and side conversations

Flow overview​

The workflow runs four nodes in sequence:

  1. A self-service trigger where you select the zendesk_ticket entity to summarize.
  2. A webhook that fetches the ticket's comments from Zendesk.
  3. A webhook that fetches the ticket's side conversations from Zendesk.
  4. A Port AI node that summarizes the gathered context and returns a structured summary on the run page.

Prerequisites​

  • Completion of the onboarding process.
  • A custom integration that ingests Zendesk tickets into your catalog using Port webhooks, so that a zendesk_ticket blueprint and its entities exist.

Add secrets​

The workflow authenticates to Zendesk using a secret that stores your API token, enabling it to retrieve ticket comments and side-conversation data. You can generate an API token by following Zendesk's instructions here.

To add the secret to your portal:

  1. Open the Credentials modal.

  2. Click on the Secrets tab.

  3. Click on + Secret and add the following secret:

    • ZENDESK_TOKEN - Your Zendesk API token generated according to the guide above.

Build the workflow​

We will build the workflow directly in the editor. Follow the steps below:

  1. Go to the workflows page in Port.

  2. Click + Workflow.

  3. Fill out the Create new workflow form, then click Confirm.

  4. Click the {...} button to open the JSON editor and paste the workflow JSON below:

    Summarize Zendesk ticket workflow JSON (click to expand)
    {
    "identifier": "summarize_zendesk_ticket",
    "title": "Summarize Zendesk ticket with AI",
    "icon": "Zendesk",
    "description": "Fetch a Zendesk ticket's context and summarize it with Port AI",
    "allowAnyoneToViewRuns": true,
    "nodes": [
    {
    "identifier": "trigger",
    "title": "Select ticket",
    "icon": "Zendesk",
    "description": "Choose the Zendesk ticket to summarize",
    "config": {
    "type": "SELF_SERVE_TRIGGER",
    "userInputs": {
    "properties": {
    "ticket": {
    "title": "Zendesk ticket",
    "description": "Select the Zendesk ticket to summarize",
    "type": "string",
    "format": "entity",
    "blueprint": "zendesk_ticket"
    }
    },
    "required": [
    "ticket"
    ]
    },
    "published": true
    },
    "variables": {}
    },
    {
    "identifier": "fetch_comments",
    "title": "Fetch ticket comments",
    "icon": "Zendesk",
    "description": "Retrieve all comments for the selected ticket",
    "config": {
    "type": "WEBHOOK",
    "url": "https://<your_subdomain>.zendesk.com/api/v2/tickets/{{ .outputs.trigger.ticket }}/comments",
    "agent": false,
    "synchronized": true,
    "method": "GET",
    "headers": {
    "Content-Type": "application/json",
    "Authorization": "Basic {{ .secrets[\"ZENDESK_TOKEN\"] }}"
    }
    },
    "variables": {}
    },
    {
    "identifier": "fetch_side_conversations",
    "title": "Fetch side conversations",
    "icon": "Zendesk",
    "description": "Retrieve the ticket's side conversations",
    "config": {
    "type": "WEBHOOK",
    "url": "https://<your_subdomain>.zendesk.com/api/v2/tickets/{{ .outputs.trigger.ticket }}/side_conversations",
    "agent": false,
    "synchronized": true,
    "method": "GET",
    "headers": {
    "Content-Type": "application/json",
    "Authorization": "Basic {{ .secrets[\"ZENDESK_TOKEN\"] }}"
    }
    },
    "variables": {}
    },
    {
    "identifier": "summarize",
    "title": "Summarize with AI",
    "icon": "AI",
    "description": "Summarize the ticket context with Port AI",
    "config": {
    "type": "AI",
    "systemPrompt": "You are an AI assistant that summarizes Zendesk support tickets in Port. Use only the comments and side conversations provided in the prompt. Do not call any tools. Return the summary in this exact format:\n\n## Request\nWhat the customer wanted, in a short sentence.\n\n## Resolution\nWhat was the resolution.\n\n## Root Cause\nFor a problem or bug, what was the root cause.\n\n## Recommendations\nSuggested follow-ups, such as updating docs or improving error messages.",
    "userPrompt": "Summarize Zendesk ticket {{ .outputs.trigger.ticket }}.\n\nComments:\n{{ .outputs.fetch_comments.response.data }}\n\nSide conversations:\n{{ .outputs.fetch_side_conversations.response.data }}"
    },
    "variables": {}
    }
    ],
    "connections": [
    {
    "sourceIdentifier": "trigger",
    "targetIdentifier": "fetch_comments"
    },
    {
    "sourceIdentifier": "fetch_comments",
    "targetIdentifier": "fetch_side_conversations"
    },
    {
    "sourceIdentifier": "fetch_side_conversations",
    "targetIdentifier": "summarize"
    }
    ]
    }
  5. Click Apply changes.

Configure the workflow​

After publishing, replace the placeholder values in the workflow nodes:

  • In both the fetch_comments and fetch_side_conversations nodes, replace <your_subdomain> in the url with your Zendesk subdomain, for example https://acme.zendesk.com/....
Summarizing from provided context

The AI node summarizes only the comments and side conversations passed in its prompt, so no additional tools or connectors are required. To let the AI fetch deeper data on demand (for example, the messages inside each side conversation), add a Zendesk MCP connector to the node's mcpServers.

Test the workflow​

  1. In Port, make sure there is a zendesk_ticket entity whose identifier matches a real Zendesk ticket ID you want to summarize.
  2. Go to the Self-service page of your portal.
  3. Find Summarize Zendesk ticket with AI and click on it.
  4. Select the zendesk_ticket entity and click Execute.
  5. Open the run from the Workflow runs tab and review the structured summary produced by the summarize node.
AI-generated Zendesk ticket summary example
Internal-only content

Summaries can include sensitive customer or internal details, so treat them as internal documents.

Best practices​

  • Adjust the AI node's systemPrompt to how you would ideally want to receive a ticket summary, whether that is a short bullet list or a detailed customer-facing recap.
  • Reduce token usage by defining variables on the fetch nodes to extract only the fields you need (for example {{ .result.response.data.comments }}) before passing them to the AI node.
  • Return machine-readable output by adding an outputSchema to the AI node, then persist it onto the ticket with an upsert entity node.
  • Use consistent formatting so summaries are scannable across tickets.
  • Consider variants: internal vs customer-facing tone; enforce English or match ticket locale.