Jira Issue Auto-Triage and Labeling
When an issue is created, the flow uses Azure OpenAI to classify it (component, severity, duplicate likelihood), applies labels and priority, suggests an assignee, and links probable duplicates. Speeds Jira triage with AI-assisted classification kept under team control.
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
This flow speeds Jira issue triage with AI while keeping the team in control. When a new issue is created in a watched Jira project, the flow sends the summary and description to Azure OpenAI, which classifies it (component, severity, priority, suggested labels, suggested assignee, duplicate likelihood, confidence). It then searches Jira for likely duplicates, posts an AI-assisted triage comment on the issue, and - only when the model's confidence meets a configurable threshold - applies the recommended labels and priority, then posts a triage digest to Teams.
Why it matters: initial triage is a bottleneck. AI-assisted classification cuts time-to-assignment, while a confidence gate, a governed label set, and an explicit AI-assisted comment keep humans in the loop.
Ships Off (demo).
Use Case
A team with high Jira issue volume wants consistent, fast first-pass triage. Rather than a human reading every new ticket to set component/severity/labels and spot duplicates, the flow drafts that triage automatically and applies it when confident, leaving low-confidence calls and final approval to people.
Flow Architecture
When a New Jira Issue Is Created
Jira - OnNewIssue_V2Fires once per newly created issue in the configured project (polling, every 5 min).
Initialize Trace & Config
Initialize variableMints a correlation id, captures the issue key/summary/description, and loads all configuration (allowed labels, assign rules, confidence threshold, Azure OpenAI and Jira REST settings, Teams ids).
Classify with Azure OpenAI
HTTP - chat/completionsBuilds a prompt constrained to the governed label set and classifies the issue, returning strict JSON (component, severity, priority, labels, suggested assignee, duplicate likelihood, confidence).
Search Possible Duplicates
HTTP - Jira REST /searchFinds likely duplicate open issues by text.
Add Triage Comment
Jira - AddCommentPosts the AI-assisted triage rationale onto the issue.
Confidence Gate
ConditionIf confidence >= threshold, applies the recommended labels and priority via Jira EditIssue; otherwise notes manual triage. The comment is always posted.
Post Triage Digest
Teams - PostMessageToConversationPosts a triage digest to the team channel.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_JiraInstanceName | String | REPLACE_WITH_JIRA_INSTANCE | X-Request-Jirainstance value the Jira connector uses to target your site. |
| flowlibs_JiraProjectKey | String | FLOW | Jira project key to triage; scopes the trigger and duplicate search. |
| flowlibs_JiraBaseUrl | String | https://your-domain.atlassian.net | Jira Cloud base URL for the REST duplicate search. |
| flowlibs_JiraAuthHeader | String | REPLACE_WITH_KEYVAULT_JIRA_BASIC | Authorization header for Jira REST - Basic base64(email:apitoken). |
| flowlibs_OpenAIEndpoint | String | https://your-resource.openai.azure.com | Azure OpenAI resource endpoint. |
| flowlibs_OpenAIDeployment | String | gpt-4o-mini | Chat-completions deployment used as the classifier. |
| flowlibs_OpenAIApiKey | String | REPLACE_WITH_KEYVAULT_OPENAI_KEY | Azure OpenAI API key. |
| flowlibs_OpenAIApiVersion | String | 2024-06-01 | REST api-version (must support JSON response_format). |
| flowlibs_ComponentLabels | String | ["frontend","backend","infra","docs"] |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Jira | shared_jira | OnNewIssue_V2 AddComment EditIssue |
| HTTP | shared_http | POST chat/completions (Azure OpenAI) GET /rest/api/2/search (Jira duplicates) |
| Microsoft Teams | shared_teams | PostMessageToConversation |
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.
- Confidence gate
- flowlibs_ConfidenceThreshold controls when labels/priority auto-apply. Raise it to be more conservative; the comment is always posted.
- Auto-assign
- Map components to accountIds in flowlibs_AssignRules and add assignee accountId to the applied fields to auto-assign (Jira Cloud needs real accountIds).
- Duplicate linking
- Extend the duplicate search results into a Jira issue link when duplicate likelihood is High.
- Feedback loop
- Log AI vs human-corrected triage to Dataverse to measure accuracy and tune the prompt.
- Trigger cadence
- OnNewIssue_V2 polls every 5 minutes; adjust or switch to a webhook pattern for lower latency.
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.01AI JSON content
Reaches the model's JSON output.
EXPR.02Confidence gate
True when the model is confident enough to auto-apply.
EXPR.03Duplicate JQL (URL-encoded)
Finds candidate duplicates by text.
EXPR.04Top duplicate
The best-match duplicate key.
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.