SuperOps.ai Ticket Management
Overview
SuperOps.ai tickets are the core unit of service delivery in the PSA. Every client request, incident, and service task flows through the ticketing system. This skill covers comprehensive ticket management including creation, updates, notes, time entries, and workflow automation using the GraphQL API.
Ticket Status Values
| Status | Description | Business Logic | |--------|-------------|----------------| | Open | Newly created or reopened | Default for new tickets | | In Progress | Actively being worked | Technician assigned | | Pending | Waiting for external action | SLA clock may pause | | Resolved | Issue addressed | Awaiting confirmation | | Closed | Ticket complete | No further action |
Ticket Priority Levels
| Priority | Description | Typical Response | |----------|-------------|------------------| | Critical | Business-stopping issue | Immediate response | | High | Major productivity impact | 1-2 hours | | Medium | Single user/workaround exists | 4-8 hours | | Low | Minor issue/enhancement | Next business day |
Key Ticket Fields
Core Fields
| Field | Type | Required | Description | |-------|------|----------|-------------| | ticketId | ID | System | Auto-generated unique identifier | | ticketNumber | String | System | Human-readable ticket number | | subject | String | Yes | Brief issue summary | | description | String | No | Detailed description | | ticketType | Enum | No | Incident, Service Request, Problem, Change | | requestType | Enum | No | Classification type | | source | Enum | No | How ticket was created (email, portal, phone) |
Assignment Fields
| Field | Type | Required | Description | |-------|------|----------|-------------| | client | ClientIdentifier | Yes | Client/account reference | | site | SiteIdentifier | No | Site within client | | requester | RequesterIdentifier | No | Person who reported | | assignee | TechnicianIdentifier | No | Assigned technician | | techGroup | TechGroupIdentifier | No | Technician group |
Classification Fields
| Field | Type | Required | Description | |-------|------|----------|-------------| | priority | Enum | No | Critical, High, Medium, Low | | impact | Enum | No | Impact level | | urgency | Enum | No | Urgency level | | category | CategoryIdentifier | No | Service category |
GraphQL Operations
Create a Ticket
mutation createTicket($input: CreateTicketInput!) {
createTicket(input: $input) {
ticketId
ticketNumber
subject
status
priority
createdTime
client {
accountId
name
}
assignee {
id
name
}
}
}
Variables:
{
"input": {
"subject": "Unable to access email - Outlook disconnected",
"description": "User reports Outlook showing disconnected status since 9am. Webmail works fine.",
"client": {
"accountId": "abc123"
},
"priority": "HIGH",
"requester": {
"email": "john.smith@acme.com"
},
"techGroup": {
"name": "Service Desk"
},
"category": {
"name": "Email"
}
}
}
List Tickets
query getTicketList($input: ListInfoInput!) {
getTicketList(input: $input) {
tickets {
ticketId
ticketNumber
subject
status
priority
createdTime
lastUpdatedTime
client {
accountId
name
}
assignee {
id
name
}
requester {
id
name
email
}
}
listInfo {
totalCount
hasNextPage
endCursor
}
}
}
Variables with Filters:
{
"input": {
"first": 50,
"filter": {
"status": ["Open", "In Progress"],
"priority": ["Critical", "High"],
"client": {
"accountId": "abc123"
}
},
"orderBy": {
"field": "createdTime",
"direction": "DESC"
}
}
}
Get Single Ticket
query getTicket($input: TicketIdentifierInput!) {
getTicket(input: $input) {
ticketId
ticketNumber
subject
description
status
priority
impact
urgency
createdTime
lastUpdatedTime
client {
accountId
name
}
site {
id
name
}
requester {
id
name
email
phone
}
assignee {
id
name
email
}
techGroup {
id
name
}
category {
id
name
}
customFields {
name
value
}
}
}
Variables:
{
"input": {
"ticketId": "ticket-uuid-here"
}
}
Update a Ticket
mutation updateTicket($input: UpdateTicketInput!) {
updateTicket(input: $input) {
ticketId
ticketNumber
status
priority
assignee {
id
name
}
lastUpdatedTime
}
}
Variables - Assign and Change Status:
{
"input": {
"ticketId": "ticket-uuid-here",
"status": "In Progress",
"assignee": {
"id": "tech-uuid"
},
"priority": "HIGH"
}
}
Variables - Resolve Ticket:
{
"input": {
"ticketId": "ticket-uuid-here",
"status": "Resolved",
"resolution": "Cleared Outlook cache and repaired Office installation. Email flow restored."
}
}
Add Ticket Note
mutation addTicketNote($input: AddTicketNoteInput!) {
addTicketNote(input: $input) {
noteId
content
createdTime
isPublic
createdBy {
id
name
}
}
}
Variables - Internal Note:
{
"input": {
"ticketId": "ticket-uuid-here",
"content": "Checked event logs - found KB5034441 update correlation. Known Outlook cache issue.",
"isPublic": false
}
}
Variables - Public Note (visible to client):
{
"input": {
"ticketId": "ticket-uuid-here",
"content": "We've identified the cause of the issue. A technician is working on the fix and will have it resolved within the hour.",
"isPublic": true
}
}
Add Time Entry
mutation addTicketTimeEntry($input: AddTimeEntryInput!) {
addTicketTimeEntry(input: $input) {
timeEntryId
ticketId
duration
description
technician {
id
name
}
createdTime
}
}
Variables:
{
"input": {
"ticketId": "ticket-uuid-here",
"duration": 30,
"description": "Troubleshooting Outlook connectivity, cleared cache, repaired Office installation",
"workType": "Remote Support",
"billable": true
}
}
Common Workflows
Ticket Creation Flow
- Validate client exists - Query client by name or ID
- Check for duplicates - Search recent tickets with similar subject
- Set defaults:
- Status: Open
- Priority: Medium (if not specified)
- Create ticket - Use createTicket mutation
- Send acknowledgment - Note auto-reply to requester
Ticket Triage Workflow
# 1. Get unassigned tickets
query getUnassignedTickets($input: ListInfoInput!) {
getTicketList(input: $input) {
tickets {
ticketId
ticketNumber
subject
priority
client { name }
createdTime
}
}
}
Variables:
{
"input": {
"filter": {
"status": ["Open"],
"assignee": null
},
"orderBy": {
"field": "priority",
"direction": "DESC"
}
}
}
Escalation Workflow
mutation escalateTicket($input: UpdateTicketInput!) {
updateTicket(input: $input) {
ticketId
status
priority
techGroup { name }
}
}
Variables:
{
"input": {
"ticketId": "ticket-uuid",
"priority": "CRITICAL",
"techGroup": {
"name": "Tier 2 Support"
},
"escalationReason": "Complex Exchange hybrid configuration issue"
}
}
Error Handling
Common Errors
| Error | Cause | Resolution | |-------|-------|------------| | Client not found |