← All posts

JSM

Building a Production-Grade Virtual Agent in Jira Service Management

Ziad Bakhiet/Jan 17, 2026/16 min read

Build intelligent virtual agents in JSM with intent flows and AI answers. Step-by-step guide to deflect tickets, boost CSAT, and automate customer support at scale.

Building a Production-Grade Virtual Agent in Jira Service Management

Introduction

Your support team is drowning in repetitive requests. Password resets, VPN troubleshooting, hardware requests, access provisioning—the same questions arrive daily, eating up hours that could go toward complex issues and strategic improvements.

This is where the Jira Service Management virtual agent becomes a game-changer. Powered by Atlassian Intelligence, this AI-driven system can autonomously resolve 50% or more of incoming support requests in your first month alone, according to Atlassian's own internal metrics. But deploying it effectively requires more than flipping a switch—it demands careful intent design, conversation flow architecture, and knowledge base strategy.

In this guide, I'll walk you through building a production-grade virtual agent that actually works: one that deflects tickets intelligently, maintains customer satisfaction, and saves your team hundreds of hours annually.

Why Your Support Team Needs a Virtual Agent

Before diving into the "how," let's establish the "why." Traditional support models operate on a linear model: customer contacts agent → agent researches → agent responds. This creates bottlenecks, especially in knowledge-work environments where questions are repetitive but time-sensitive.

The JSM virtual agent breaks this model by:

Deflecting common requests – Resolution rates of 50–80% for well-configured agents mean your human agents tackle only high-value issues.

Improving response time – Customers receive instant answers instead of waiting for agent availability. Time-to-resolution drops from hours to seconds for password resets, documentation lookups, and policy questions.

Freeing agent capacity – Agents shift from answering FAQs to resolving incidents that require judgment, investigation, and relationship-building.

Scaling without headcount – As your organization grows, the virtual agent's throughput remains constant—no need to hire more support staff for each 10% revenue growth.

The metrics speak clearly: Atlassian's internal deployment achieved a 4.5/5 customer satisfaction score while handling over 50% of requests autonomously in the first month. That's not a marginal improvement—it's structural transformation.

Prerequisites: Setup & Licensing

Before you build your first intent, ensure your foundation is solid.

Licensing Requirements:

  • Jira Service Management Cloud Premium or Enterprise edition
  • Atlassian Intelligence must be activated in your Atlassian Administration console
  • Each virtual agent conversation counts against your usage limit (configurable per organization)

Knowledge Base Preparation:

  • Link a Confluence space or JSM native knowledge base to your project
  • Ensure the knowledge base space is set to "All logged-in users" under Who can view permissions
  • Audit your existing articles for accuracy, currency, and customer-language phrasing

Channel Setup:

  • For Slack integration, install the Atlassian Assist app
  • Create a private agent channel (for agents only) and one or more public request channels (customer-facing)
  • For Jira Service Management portal deployments, no additional setup is needed—the virtual agent appears on your customer portal automatically

Start Testing Early: Set up a dedicated test Slack channel to validate intents before going live. This is non-negotiable; testing in production leads to poor training data and embarrassed customers.

Part 1: Designing Intent Flows for Maximum Deflection

An intent is how you represent a specific problem, question, or request that your virtual agent can help resolve. Think of intents as "if the customer is asking about X, then follow flow Y." The better your intents, the higher your deflection rate.

Step 1: Identify High-Impact Intents

Start with your historical data, not speculation. Pull your last 3–6 months of tickets and cluster them by topic:

  • Software access requests – "I need Slack access," "Can you provision Jira?" (typically 15–25% of tickets)
  • Password resets – "Reset my password," "I forgot my credentials" (typically 10–20% of tickets)
  • VPN/Network troubleshooting – "Can't connect to VPN," "WiFi isn't working" (typically 5–15% of tickets)
  • Policy/HR questions – "What's our WFH policy?" "How much PTO do I have?" (typically 10–20% of tickets)
  • Equipment requests – "I need a new monitor," "My laptop is slow" (typically 5–10% of tickets)

Focus on the top 5–7 intents first. You're not trying to automate 100% of requests—aim for 50–60% initially. The long tail of edge cases will always require human agents.

Step 2: Create Training Phrases That Reflect Real Customer Language

This is where most implementations fail. Admins create training phrases like "Software access request" when customers actually say "I need Slack," "Provision me in Jira," or "Can you give me access to our wiki?"

Training Phrase Best Practices:

  • Use 20–100 phrases per intent (minimum 3, but 20+ yields dramatically better recognition)
  • Capture variations – Copy exact phrases from past ticket descriptions. If 15 customers said "reset my password" and 8 said "I can't log in," capture both
  • Mix questions and statements – Include "How do I reset my password?" and "I can't reset my password" and "Reset my password"
  • Avoid overlap with other intents – Don't create training phrases for Intent A that could match Intent B. For example, "I need access" is too vague; specify "I need Slack access" vs. "I need Jira access"
  • Iterate based on performance – As your virtual agent runs, review unmatched conversations and add new training phrases weekly

Example training phrases for a Software Access Request intent:

- I need Slack access
- Provision me in Jira
- Can you give me wiki access?
- How do I get added to our tools?
- I don't have access to Confluence
- Can I be added to the development channel?
- I need to be provisioned
- How do I join the team Slack?
- Add me to the project

Step 3: Build Conversation Flows with Five Step Types

Once an intent is recognized and confirmed, the conversation flow guides the user toward resolution. Flows are made up of steps and branches that react to customer input.

The Five Step Types:

1. Offer Choices (User Selection)

Present up to 10 pre-set options. Use this to narrow the scope and route to the correct sub-flow.

Example: "Which software do you need access to?"

  • Slack
  • Jira
  • Confluence
  • SharePoint
  • Something else

2. Send Message (Agent-to-Customer Communication)

Deliver instructions, links, or status updates. Messages support formatting and hyperlinks.

Example: "Great! I'm provisioning you for Slack now. You should receive an invite within 5 minutes. If you don't see it, check your spam folder or contact our IT team here."

3. Ask for Information (Data Collection)

Collect specific data from the customer to use in later steps or to populate Jira fields if an issue is created.

Example: "What's your employee ID?" or "Which team are you joining?"

These values are stored as variables and can be referenced in subsequent steps, web requests, or when creating an issue.

4. Change Request Type/Fields (Dynamic Triage)

Override the default request type for issues created after this point in the flow. Useful when different conversation paths need different request types or field requirements.

Example: If the customer says "I need a new laptop," change from a generic "IT Request" type to a "Hardware Provisioning" request with additional fields for device model and OS preference.

5. Web Request (Third-Party Automation)

Send an HTTP POST/GET request to an external API and branch based on the response. This is where the real automation happens.

Example: Call your user provisioning API to grant Slack access automatically without manual agent intervention.

URL: https://api.company.com/provision-slack
Method: POST
Headers: Authorization: Bearer YOUR_API_TOKEN
Body:
{
  "email": "[customer_email_from_portal]",
  "workspace": "engineering",
  "role": "member"
}

Success condition: status ~ 2?? (any 2xx response)

  • If true → Send message: "Access granted! You're now in Slack."
  • If false → Escalate to human agent

Part 2: Setting Up Atlassian Intelligence Answers (Knowledge Base AI)

Not every customer question needs a custom intent flow. Many are self-service FAQ questions that your knowledge base can answer. That's where Atlassian Intelligence answers come in.

Connect Your Knowledge Base

First, link a knowledge base to your JSM project:

  1. Project SettingsChannels & self-serviceKnowledge base
  2. Select your Confluence space or JSM native knowledge base
  3. Verify permissions: Space must be set to All logged-in users under Who can view

Activate AI Answers

Once linked:

  1. Project SettingsVirtual service agentSettings
  2. Toggle on Atlassian Intelligence answers
  3. Select Activate

For Slack-specific deployments, also enable AI answers per request channel:

  1. Project SettingsVirtual service agentSettingsRequest channels
  2. Toggle on AI answers for each relevant channel
  3. Select Activate

Optimize Your Knowledge Base for AI Answer Quality

The quality of AI answers depends entirely on your knowledge base quality. Garbage in, garbage out.

Optimization Checklist:

Keep Everything Current

  • Audit each article monthly for accuracy
  • Remove vague, conflicting, or outdated information
  • Set calendar reminders to review in 90-day cycles
  • If a process changes, update all related articles immediately (not just one)

Avoid Duplication

  • One article per topic, not three variants of the same troubleshooting guide
  • If you must repeat information, link to the source instead
  • Duplicated information creates conflicting training data for the AI

Use Customer Language, Not Internal Jargon

  • Article title: "Request New Hardware"
  • Actual customer phrases: "I need a new laptop," "My keyboard is broken," "Can I get a monitor?"
  • Include all these phrases in the article body so the AI can find it via semantic search

Example:

# Request or Replace Equipment

## I need a new laptop
If your current device is underperforming or broken, you can request a replacement...

## How to get a new keyboard, monitor, or other peripherals
Broken keyboard? Need an extra monitor? Submit a request...

## My device is slow – should I get a new one?
If your laptop is experiencing performance issues, try these steps first...

Organize with Clear Headings

  • Use H2 and H3 headings liberally
  • The AI treats headings and body text equally—both are indexed
  • Hierarchical structure helps readers and the AI understand context

Avoid Nested Panels in Tables

  • The AI can read tables and panels independently, but not panels inside tables
  • Restructure if needed

Part 3: Testing & Launch Strategy

The biggest mistakes happen when teams skip or rush testing. Don't.

Pre-Launch Testing Checklist

Test with Multiple People

  • Get 5–10 people (mix of tech-savvy and non-technical)
  • Have them test independently, then together
  • Capture feedback on clarity, tone, and flow helpfulness

Test Every Branch

  • Don't just test the "happy path"—test what happens when customers:
    • Answer in unexpected ways
    • Get stuck mid-flow
    • Refuse to provide required information
    • Ask for help multiple times
    • Test edge cases (unusual employee IDs, non-standard software requests)

Test with Different Emotional States

  • Testers should imagine they're in a rush, stressed, or frustrated
  • Does the AI's tone feel condescending or unhelpful under stress?
  • Are instructions clear, or do they feel patronizing?

Validate Training Phrases

  • Ask for help in as many different ways as possible
  • If the AI fails to recognize a valid question, add that phrase as a training phrase

Test Escalation Paths

  • Verify that issues are created properly when escalated
  • Check that customer context (collected information) is preserved in the Jira issue
  • Confirm that agents receive proper notifications

Measure Baseline Metrics

  • Record resolution rate, matched rate, and CSAT before going live
  • You need a before/after to prove value

Phased Launch Plan

Week 1: Test Channel Only

  • Set all intents to "Test" status
  • Enable in test Slack channel only
  • Collect feedback and iterate

Week 2: Pilot with Subset

  • Move 2–3 intents to "Live" status
  • Launch to customer portal only (no Slack yet)
  • Monitor resolution rates and CSAT
  • Adjust training phrases and flows based on unmatched conversations

Week 3: Expand Intents

  • Move remaining intents to "Live"
  • Keep monitoring metrics
  • Make weekly adjustments to training phrases

Week 4+: Optimize & Scale

  • Analyze conversation data to identify new intents
  • Add AI answers for frequent FAQ questions
  • Aim for 50–60% resolution rate by month 2

Monitoring & Continuous Improvement

The virtual agent isn't a "set it and forget it" system. Success requires ongoing attention.

Weekly Review:

  • Check resolution rate (% of conversations resolved without escalation)
  • Check matched rate (% of conversations that triggered an intent)
  • Review CSAT scores (track the 1–5 satisfaction ratings)
  • Identify conversations with low CSAT or escalations—why did they fail?

Monthly Adjustments:

  • Add 5–10 new training phrases per intent based on unmatched conversations
  • Update knowledge base articles based on AI answer quality feedback
  • Adjust web request timeouts or branching logic if needed
  • A/B test different message tones or conversation flows

Quarterly Strategy Review:

  • Do your intents still align with top ticket categories?
  • Are there new intent opportunities based on ticket volume changes?
  • Should you invest in new integrations (e.g., ITSM ticketing systems, internal APIs)?

Common Pitfalls to Avoid

I've seen dozens of implementations falter. Here are the mistakes I encounter most:

1. Forgetting to Set a Default Request Type If this isn't configured, the virtual agent will fail when escalating to create an issue. The default must be a request type with no required fields (this allows the AI to create issues without manual field completion).

2. Overlapping Training Phrases Across Intents If Intent A has "I need access" and Intent B also has "I need access," the AI gets confused. Be specific: "I need Slack access" vs. "I need database access."

3. Knowledge Base Permission Issues If your Confluence space isn't set to "All logged-in users," the AI can't read it, and AI answers won't work. This is a silent failure—the AI just says "I don't understand."

4. Outdated Knowledge Base Content A knowledge base full of old, conflicting, or vague information will make the AI look incompetent. Update articles immediately when processes change.

5. Testing Only in Production Training your AI on real customer conversations with poor intents creates a feedback loop of bad data. Always test intents thoroughly before going live.

6. Ignoring Escalation Paths If escalated issues don't preserve customer context or have required fields that the AI can't fill, agents will get frustrated. Set your default request type's required fields to zero.

7. Not Collecting Enough Training Data You need at least 3 training phrases per intent, but 20–100 is realistic. Invest time upfront; it pays off in recognition accuracy.

8. Assuming the AI Understands Jargon If your industry uses acronyms or specialized terms, include them in training phrases. "MSA," "SOW," "RFP"—these are industry-standard but not universally understood. Train for them explicitly.

Advanced Patterns: Bringing It All Together

Once you've mastered the basics, here are sophisticated patterns to unlock maximum value.

Pattern 1: Dynamic Request Type Routing

Create a single "IT Support" intent with a branching flow that changes the request type midway through the conversation:

  1. Customer asks for help
  2. Virtual agent asks: "What do you need help with?" (Offer Choices step)
  3. If "Software Access" → Change request type to "Access Request" → Web request to provision API
  4. If "Hardware" → Change request type to "Equipment Request" → Ask for device type → Create issue
  5. If "Troubleshooting" → Change request type to "Incident" → Ask for device/software → Offer choices for common fixes

This reduces 5 intents to 1 highly intelligent flow.

Pattern 2: Multi-Step Web Automation

Combine multiple API calls in a single flow:

  1. Ask for information: "Which software do you need?" → Store as software_name
  2. Web request (Check if license available): GET /api/licenses?software={software_name}
  3. If available → Web request (Provision): POST /api/provision-user?email=customer_email&software=software_name
  4. If not available → Send message: "Out of licenses. Escalating to manager..." → Escalate

This fully automates software provisioning without human touch.

Pattern 3: Escalation with Context Preservation

When an issue must escalate, preserve all collected information:

  1. Ask for information steps gather: Customer name, device type, issue description, department, manager name
  2. If web request fails → Escalate to create issue
  3. The virtual agent automatically populates custom fields with collected information
  4. Agents receive a fully contextualized ticket, not a blank one

This dramatically reduces back-and-forth with customers.

Real-World Example: Software Access Request Intent

Let me show you a complete, production-grade example.

Intent Name: Software Access Request
Display Name: Request access to a tool or application

Training Phrases (20 examples):

- I need Slack access
- Provision me in Jira
- Can you give me access to Confluence?
- How do I get added to the wiki?
- I don't have access to the VPN
- Can I join the engineering Slack?
- Add me to the project repository
- I need GitHub access
- How do I get database access?
- Provision my account
- I need to be added to the tools
- Can you enable me for Atlassian?
- What do I need to access our cloud?
- I can't log into Jira
- How do I get set up in our tools?
- Need access to the shared drive
- Add my email to the team
- I'm new and need tool access
- Can you onboard me?
- How do I get Salesforce credentials?

Conversation Flow:

START
  ↓
[Send Message] "Hi! I can help you get access to the tools you need."
  ↓
[Offer Choices] "Which tool do you need access to?"
  → Slack
  → Jira
  → Confluence
  → GitHub
  → Something else
  ↓
[IF Slack] → [Web Request to Slack API]
  ↓
  Success? → [Send Message] "Done! Check your email for the invite."
  Failed? → [Escalate to Issue]
  ↓
[IF Jira] → [Ask for Information] "What's your company email?"
  ↓
  [Web Request to Jira provisioning API]
  ↓
  Success? → [Send Message] "Provisioned! Log in at jira.company.com"
  Failed? → [Escalate to Issue]
  ↓
[IF Something else] → [Escalate to Issue] "I'll create a ticket for the team."
  ↓
END

The flow moves down branches based on customer choices, automates where possible, and escalates intelligently when needed.

Measuring Success: Key Metrics You Should Track

Don't just deploy and hope. Measure everything.

Primary Metrics:

MetricTargetWhat It Means
Resolution Rate50–80%% of conversations resolved without human escalation
Matched Rate70%+% of conversations where an intent was recognized
CSAT Score4.0+/5.0Customer satisfaction with virtual agent (1–5 scale)
Deflected Tickets40%+ reductionDrop in total tickets reaching agents
Avg. Time to Resolution<2 min for deflectedTime from customer message to resolution (vs. hours for human)

Secondary Metrics:

  • Intent-specific resolution rates – Which intents work? Which need improvement?
  • Escalation reasons – Why are conversations failing? What patterns emerge?
  • Knowledge base impact – Which FAQ articles are being surfaced? How often?
  • Agent satisfaction – Do agents feel the virtual agent is reducing their workload, or creating noise?

Track these weekly and adjust accordingly. If CSAT is dropping, you might have outdated knowledge base content or poorly designed flows.

Conclusion: The Path to Intelligent Self-Service

The Jira Service Management virtual agent is not a black box. It's a system you design, train, and iterate on. Success requires:

  1. Thoughtful intent design – Base intents on real ticket data, not assumptions
  2. Quality training data – Invest 2–3 hours per intent building 20–100 training phrases
  3. Well-organized knowledge base – Audit for accuracy, use customer language, avoid duplication
  4. Rigorous testing – Test with multiple people, cover edge cases, validate before going live
  5. Continuous optimization – Track metrics, adjust flows weekly, expand coverage gradually

Done well, a virtual agent handles 50% of your support load autonomously, improves customer satisfaction, and frees your team to work on strategic priorities. Done poorly, it frustrates customers and creates more work for agents.

The difference? Attention to detail and commitment to continuous improvement.

Start with 2–3 high-impact intents this month. Build solid training phrases, test thoroughly, then measure. Once you've proven the pattern works, expand to 5–7 intents. By quarter two, you'll have a self-service system that meaningfully transforms your support operations.


👉 Contact me for expert Jira Service Management consulting – from virtual agent strategy to production deployment.

Subscribe below for more Atlassian automation ideas, real-world consulting tips, and strategies for enterprise cloud scaling.

Your support team deserves better. Let's build it together.