Skip to main content

Ticketing Workflow Guide

Learn how to set up an efficient ticketing system with SLAs, automations, and team workflows.

Overview

The Semaswift ticketing system supports:

  • Multi-channel ticket creation (API, email, voice)
  • SLA policies with escalation
  • Automation rules
  • Custom views and filters
  • Team collaboration

Creating Tickets

Via API

POST /api/v1/tickets
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN

{
"subject": "Cannot login to my account",
"description": "I'm getting an error when trying to login...",
"priority": "high",
"requester_email": "customer@example.com",
"tags": ["login", "authentication"]
}

Ticket Fields

FieldTypeDescription
subjectstringBrief description
descriptionstringFull details
priorityenumlow, medium, high, urgent
requester_emailstringCustomer email
assignee_idstringAgent to assign
tagsarrayCategorization tags
custom_fieldsobjectCustom field values

Setting Up SLA Policies

Define response and resolution targets:

POST /api/v1/ticketing/sla-policies
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN

{
"name": "Premium Support",
"conditions": {
"priority": ["high", "urgent"],
"tags": ["premium"]
},
"targets": {
"first_response": {
"urgent": "15m",
"high": "1h",
"medium": "4h",
"low": "24h"
},
"resolution": {
"urgent": "4h",
"high": "8h",
"medium": "24h",
"low": "72h"
}
},
"business_hours": "standard"
}

Automation Rules

Create automations to streamline workflows:

POST /api/v1/ticketing/automations
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN

{
"name": "Auto-assign billing tickets",
"conditions": {
"all": [
{"field": "tags", "operator": "contains", "value": "billing"},
{"field": "status", "operator": "equals", "value": "new"}
]
},
"actions": [
{"type": "assign_to_group", "group_id": "billing_team"},
{"type": "set_priority", "value": "high"},
{"type": "add_tag", "value": "auto-assigned"}
],
"enabled": true
}

Automation Actions

ActionDescription
assign_to_userAssign to specific agent
assign_to_groupAssign to team
set_priorityChange priority
set_statusUpdate status
add_tagAdd tag
send_notificationSend email/webhook

Custom Views

Create filtered views for agents:

POST /api/v1/ticketing/views
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN

{
"name": "My Open Tickets",
"conditions": {
"all": [
{"field": "assignee_id", "operator": "is", "value": "current_user"},
{"field": "status", "operator": "not", "value": "closed"}
]
},
"columns": ["subject", "requester", "priority", "created_at", "sla_status"],
"sort": {"field": "created_at", "direction": "desc"},
"shared": false
}

Ticket Lifecycle

New → Open → Pending → Solved → Closed

On Hold

Status Definitions

StatusDescription
newJust created, unassigned
openAssigned, being worked on
pendingWaiting for customer
on_holdBlocked externally
solvedResolution provided
closedPermanently closed

Adding Comments

POST /api/v1/tickets/{ticket_id}/comments
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN

{
"body": "I've reset your password. Please try logging in again.",
"public": true,
"attachments": []
}

Ticket Metrics

Track performance:

GET /api/v1/ticketing/metrics?period=7d
{
"total_tickets": 150,
"open_tickets": 42,
"avg_first_response_time": "45m",
"avg_resolution_time": "4h 30m",
"sla_compliance": {
"first_response": "94%",
"resolution": "87%"
},
"by_priority": {
"urgent": 5,
"high": 20,
"medium": 80,
"low": 45
}
}

Best Practices

  1. Define clear SLAs - Set realistic targets
  2. Use automation - Reduce manual routing
  3. Tag consistently - Enable accurate reporting
  4. Train agents - Document escalation paths
  5. Review metrics - Adjust processes based on data