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
| Field | Type | Description |
|---|---|---|
subject | string | Brief description |
description | string | Full details |
priority | enum | low, medium, high, urgent |
requester_email | string | Customer email |
assignee_id | string | Agent to assign |
tags | array | Categorization tags |
custom_fields | object | Custom 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
| Action | Description |
|---|---|
assign_to_user | Assign to specific agent |
assign_to_group | Assign to team |
set_priority | Change priority |
set_status | Update status |
add_tag | Add tag |
send_notification | Send 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
| Status | Description |
|---|---|
new | Just created, unassigned |
open | Assigned, being worked on |
pending | Waiting for customer |
on_hold | Blocked externally |
solved | Resolution provided |
closed | Permanently 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
- Define clear SLAs - Set realistic targets
- Use automation - Reduce manual routing
- Tag consistently - Enable accurate reporting
- Train agents - Document escalation paths
- Review metrics - Adjust processes based on data