Zendesk New Ticket to Teams Triage
When a Zendesk ticket is created, the flow classifies priority and topic, posts an adaptive card to the right Teams support channel with customer context and SLA clock, and lets an agent claim or escalate from the card. Speeds first response by surfacing new Zendesk tickets where agents work.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
FlowLibs - Zendesk New Ticket to Teams Triage surfaces newly created Zendesk tickets in Microsoft Teams so support agents respond faster. When a ticket is created, the flow classifies an SLA first-response window and a topic, routes a triage card to the right Teams channel (escalation vs. standard triage based on priority), and writes an audit record to Dataverse.
Why it matters: Tickets sitting unseen in Zendesk blow SLAs. Surfacing each new ticket in Teams with priority, topic, an SLA clock, and a deep link drives faster pickup, and the Dataverse log gives a governed record of what was triaged where.
Status: Built as an architecturally-complete demo. Ships Off. Going live requires only connection authorization and setting the environment-variable values (Teams group/channel IDs).
Use Case
A support/operations team that lives in Microsoft Teams wants every new Zendesk ticket triaged in the right channel automatically, with the SLA clock visible and a record kept for reporting. Urgent/high tickets go to an escalation channel; everything else lands in the standard triage channel.
Flow Architecture
When a new Zendesk ticket is created
Zendesk GetOnNewItemsV2 (recurrence 5 min, splitOn)Fires once per newly created ticket in the configured table.
Initialize Correlation Id
Initialize Variableguid() stamped on the log + message for cross-system tracing.
Initialize Teams Group Id
Initialize VariableTeams team (group) hosting the support channels.
Initialize Triage Channel Id
Initialize VariableDefault channel for normal/low priority.
Initialize Escalation Channel Id
Initialize VariableChannel for urgent/high priority.
Initialize Target Channel Id
Initialize VariableHolds the channel chosen by the routing Switch.
Compose SLA Hours
ComposeClassifies SLA window from priority: urgent=1h, high=4h, normal=8h, low/other=24h.
Compose Topic
ComposeDerives a topic from the first ticket tag; falls back to ticket type, then General.
Compose SLA Due By
ComposeaddHours(created_at, SLA hours) — the SLA first-response clock.
Switch Route By Priority
Switchurgent/high → escalation channel; default → triage channel.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_ZendeskTicketsTable | String | tickets | Zendesk dataset table the new-ticket trigger watches. |
| flowlibs_TeamsGroupId | String | <your-team-id> | Teams team/group ID hosting the support channels. |
| flowlibs_TeamsTriageChannelId | String | <your-channel-id> | Default triage channel (normal/low priority). |
| flowlibs_ZendeskEscalationChannelId | String | (set on deploy) | Escalation channel (urgent/high priority). |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Zendesk | shared_zendesk | GetOnNewItemsV2 |
| Microsoft Teams | shared_teams | PostMessageToConversation |
| Microsoft Dataverse | shared_commondataserviceforapps | CreateRecord UpdateRecord |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Interactive claim/escalate
- Swap PostMessageToConversation for Post adaptive card and wait for a response, then add a Zendesk PatchItem to update the ticket assignee/status from the agent's choice. (This build posts a rich card with claim/escalate guidance text + correlation ref; the write-back is the next step.)
- AI topic classification
- Replace Compose Topic with an Azure OpenAI ChatCompletions call for richer topic/intent tagging.
- Customer enrichment
- Add a Dataverse/CRM GetRecord keyed on the Zendesk requester_id/organization_id to include account tier/owner in the card.
- Per-topic routing
- Extend the Switch (or use a topic→channel JSON env var) to route by topic, not just priority.
- SLA escalation
- Add a scheduled companion flow that checks flowlibs_sladueby and pings the channel when a ticket nears breach.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01SLA hours
Map ticket priority to an SLA window in hours
EXPR.02SLA due by
Compute the SLA first-response due timestamp
EXPR.03Topic
Derive a topic from the first tag, falling back to type then General
EXPR.04Teams message id (stored back)
Capture the posted Teams message id for correlation
Customize & download
Generate a ready-to-import copy of this solution with your environment-variable values baked in — available on Base, Pro, or Team.
Upgrade to customize
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.