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

Check out Port for yourself ➜ 

Summarize Zendesk tickets using workflows

Open Beta

Port workflows are currently in open beta and available to all users. Workflows may undergo changes without prior notice.

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.

Prefer the IDE approach?

If you would rather run summaries from your IDE assistant using the MCP protocol, see the Summarize Zendesk tickets with AI guide, which uses self-service actions and a reusable prompt instead of a workflow.

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. In your Port application, click on your profile picture .

  2. Click on Credentials.

  3. Click on the Secrets tab.

  4. 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 of your portal.

  2. Click on the + Workflow button in the top-right corner.

  3. Click on the Skip to editor button.

  4. Copy and paste the workflow JSON below into the editor to replace the example workflow:

    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 Save to save the workflow.

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.