Summarize Zendesk tickets with AI
Send this guide to your coding agent.
Prerequisite: Install Port MCP
Open plan mode if your tool supports it; otherwise present the plan below filled in and wait for my approval. Implement this Port guide in my org via MCP: https://docs.port.io/guides/all/generate-zendesk-ticket-summaries-with-ai Read the raw markdown version at https://docs.port.io/guides/all/generate-zendesk-ticket-summaries-with-ai.md - it contains every tab and code block without page markup. Goal: get the guide's core flow working end-to-end in my org; adapting it to fit my existing setup takes priority over matching the guide 1:1. Plan: 1. Confirm MCP is connected, in the right org, with sufficient permissions. 2. If the guide offers alternative implementation paths (tabs), pick the one matching my installed integrations and tools, confirm it with me, and implement only that path. 3. Diff the guide's data model (blueprints, properties, relations, workflows, actions, agents, automations, integrations, webhook data sources, secrets) against mine. 4. Propose adaptations for gaps, reusing existing blueprints/relations over guide-named duplicates. 5. Flag what needs a UI click, credential, or secret from me, testing MCP capability empirically before ruling anything out. If the guide has a "Set up via API" section, use it for anything MCP can't do before treating a step as UI-only. 6. Stop on any blocker and give me options. Approving this plan authorizes the writes it lists; pause only for writes beyond what's listed. Build: - Extend blueprint schema additively when upserting; don't remove or overwrite existing properties, and treat type conflicts as a blocker, not an auto-fix. - Never print secret values into the chat or logs; ask me to set them in Port, or write them via the secrets API without echoing them back. - List any mock data in the plan, minimal and labeled mock; once approved, seed it without re-asking, and tell me what you seeded. - For anything the guide writes downstream (e.g. a webhook target), use a real entity, not a mock. - For pages/widgets, use the real page identifier from the app URL, not a guessed slug. - When you hit a UI step confirmed (not assumed) unsupported via MCP and not covered by the guide's API sections, pause, give exact clicks, then resume via MCP. - Validate and give links after each meaningful step (only a tool-returned URL, no guessed paths); don't proceed if the last run wasn't a success. Done: - Run the guide's "Let's test it" steps where possible (e.g. execute a workflow test run) and confirm the expected output exists in Port. - Summarize adaptations, seeded data, what was mocked or skipped, remaining UI steps, and how to verify.
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.
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:
- Comments - the primary conversation between the requester and agents (public or internal).
- Side conversations - separate threaded discussions (email, Slack, etc.) opened from the ticket for additional stakeholders.
Flow overview
The workflow runs four nodes in sequence:
- A self-service trigger where you select the
zendesk_ticketentity to summarize. - A webhook that fetches the ticket's comments from Zendesk.
- A webhook that fetches the ticket's side conversations from Zendesk.
- 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_ticketblueprint 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:
-
Open the Credentials modal.
-
Click on the
Secretstab. -
Click on
+ Secretand 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:
-
Go to the Workflows page of your portal.
-
Click on the
+ Workflowbutton in the top-right corner. -
Click on the
Skip to editorbutton. -
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"}]} -
Click
Saveto save the workflow.
Configure the workflow
After publishing, replace the placeholder values in the workflow nodes:
- In both the
fetch_commentsandfetch_side_conversationsnodes, replace<your_subdomain>in theurlwith your Zendesk subdomain, for examplehttps://acme.zendesk.com/....
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
- In Port, make sure there is a
zendesk_ticketentity whoseidentifiermatches a real Zendesk ticket ID you want to summarize. - Go to the Self-service page of your portal.
- Find Summarize Zendesk ticket with AI and click on it.
- Select the
zendesk_ticketentity and click Execute. - Open the run from the Workflow runs tab and review the structured summary produced by the
summarizenode.
Summaries can include sensitive customer or internal details, so treat them as internal documents.
Best practices
- Adjust the AI node's
systemPromptto 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
outputSchemato 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.