Support Tickets
Support Tickets let users submit help requests from the social frontend and let admins manage and reply to them in the Admin Panel. The feature is available when the supportTickets license feature is enabled.
User side (frontend)
- Where: Social app → Settings → Ticket (create new ticket, list my tickets, open ticket detail)
- Actions: Create ticket (subject, description, optional attachments), view ticket detail, add comments/replies
- Routes (frontend): e.g.
/settings/ticket,/settings/ticket/new,/settings/ticket/:ticketId
Admin side (admin panel)
- Where: Admin Panel → Support Tickets (sidebar; visible when supportTickets is enabled)
- Routes:
/tickets(list),/tickets/:id(detail)
Ticket list (/tickets)
- API:
GET /api/tickets?page=1&pageSize=20&status=... - Response:
{ success, data: { tickets, totalCount, hasMore } } - Filters: Status (New, InProgress, Resolved, Closed), search by subject/description/ID (client-side filter)
- Actions: View ticket (navigate to
/tickets/:id), Start Progress (New → In Progress, assigns current admin), Mark Resolved (In Progress → Resolved), Close (Resolved → Closed)
Ticket detail (/tickets/:id)
- API:
GET /api/tickets/:id - Response: Ticket with
id,subject,description,attachmentUrls,department,userId,status,createdAt,updatedAt,resolvedAt,closedAt,assignedToUserId - Comments:
GET /api/ticket-comments/ticket/:ticketId?page=1&pageSize=50; replies:GET /api/ticket-comments/:commentId/replies - Add admin reply:
POST /api/ticket-commentswith{ ticketId, text, parentCommentId?, attachmentUrls? } - Update status:
PUT /api/tickets/:id/statuswith{ action: "StartProgress" | "MarkAsResolved" | "Close", assignedToUserId? }(assignedToUserId used for StartProgress)
Status workflow
| Status | Value | Allowed actions (admin) |
|---|---|---|
| New | 0 | Start Progress (assign to self) |
| InProgress | 1 | Reply to ticket; Mark Resolved |
| Resolved | 2 | Close (or wait for user feedback) |
| Closed | 3 | No further changes |
- New: No comments allowed until admin starts progress.
- In Progress: Admin can reply; then must explicitly “Mark as Resolved.”
- Resolved: Admin can close the ticket when done.
Backend API summary
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/tickets | List tickets (query: page, pageSize, status) |
| GET | /api/tickets/:id | Get ticket by ID |
| PUT | /api/tickets/:id/status | Update status (body: action, optional assignedToUserId) |
| GET | /api/ticket-comments/ticket/:ticketId | List comments (query: page, pageSize) |
| GET | /api/ticket-comments/:commentId/replies | List replies for a comment |
| POST | /api/ticket-comments | Create comment (body: ticketId, text, parentCommentId?, attachmentUrls?) |
Controllers: TicketsWriteController / TicketsReadController (api/tickets), TicketCommentsWriteController / TicketCommentsReadController (api/ticket-comments). Authentication and roles apply (admin/moderator for admin actions).
License
Support Tickets are license-gated: the supportTickets feature must be enabled (or MAIN license mode) for the Admin Panel to show the Support Tickets menu and for full ticket functionality.
Related
- Admin Panel — all admin features including tickets
- Features overview