Skip to content

Ticket & State Machine

Ticket là thực thể trung tâm của @nx/helpdesk. Mỗi ticket có một vòng đời được quản lý bởi máy trạng thái XState v5 với 10 trạng thái, một audit trail event đầy đủ, và enrichment context bất đồng bộ.

Trạng thái Ticket

Trạng tháiCodeMô tả
OpenOPENTicket mới tạo, chưa được phân công
AssignedASSIGNEDĐã phân công cho một agent cụ thể
In ProgressIN_PROGRESSAgent đang tích cực xử lý
Waiting for UserWAITING_USERCần phản hồi từ người báo cáo
Waiting InternalWAITING_INTERNALPhụ thuộc team hoặc bộ phận khác
EscalatedESCALATEDEscalate lên tier cao hơn
ResolvedRESOLVEDAgent đánh dấu đã giải quyết, chờ xác nhận
ClosedCLOSEDKhách hàng xác nhận — hoàn thành đầy đủ
ReopenedREOPENEDKhách hàng mở lại sau khi đóng
Waiting AgentWAITING_AGENTChờ một agent được phân công
PendingPENDINGGiữ chỗ / chưa phân loại
Assignment FailedASSIGNMENT_FAILEDAuto-assignment không tìm thấy agent đủ điều kiện

Enum có thẩm quyền: TicketStatuses trong packages/core/src/models/schemas/helpdesk/ticket/schema.ts (12 giá trị).

Máy trạng thái (XState v5)

Data Model

Ticket

CộtTypeMô tả
idbigintSnowflake ID
merchantIdbigintPhạm vi tenant
reporterIdbigintNgười báo cáo (userId hoặc agentId)
reporterTypeenumUSER / AGENT
categorybigintFK → TicketCategory
prioritysmallint100 LOW / 200 NORMAL / 300 HIGH / 400 URGENT
statusenum10 trạng thái (xem bảng trên)
subjectvarcharTiêu đề ngắn
descriptiontextMô tả chi tiết
contextjsonbDữ liệu context phong phú (order, product, …)
deletedAttimestampSoft delete

TicketMessage

CộtTypeMô tả
idbigintSnowflake ID
ticketIdbigintFK → Ticket
senderIdbigintID người gửi
senderTypeenumUSER / AGENT / SYSTEM
messageTypeenumTEXT / IMAGE / FILE / SYSTEM_NOTE
contenttextNội dung message
attachmentsjsonbDanh sách file đính kèm
isInternalbooleanNote nội bộ (ẩn khỏi khách hàng)

TicketEvent (Event Sourcing)

Mọi hành động trên một ticket được ghi vào TicketEvent, xây dựng một audit trail đầy đủ:

EventMô tả
TICKET_CREATEDTicket đã được tạo
STATUS_CHANGEDChuyển đổi status
ASSIGNEDAgent đã được phân công
MESSAGE_ADDEDMessage mới
TAG_ADDED / TAG_REMOVEDThay đổi tag
SLA_WARNING / SLA_BREACHEDEvent SLA
ESCALATEDEscalation kích hoạt
RESOLVED / CLOSEDKết thúc vòng đời

REST API

Tickets (/tickets), gồm message, chuyển đổi status, phân công, xác nhận giải quyết, tag, và attachment — tham khảo endpoint đầy đủ render trực tiếp từ /v1/api/helpdesk/doc/openapi.json. Bảng endpoint cố ý không duy trì thủ công.

Use Cases

Ticket

Use CaseMô tả
CreateTicketUseCaseTạo ticket, phát event TICKET_CREATED
ListTicketsUseCaseTìm kiếm và phân trang ticket
GetTicketUseCaseLấy chi tiết một ticket
UpdateTicketStatusUseCaseChuyển đổi status qua máy trạng thái
AssignTicketUseCasePhân công ticket cho một agent
AddMessageUseCaseThêm message vào một ticket
GetTicketMessagesUseCasePhân trang message dựa-trên-cursor
ConfirmResolutionUseCaseXác nhận giải quyết → chuyển sang CLOSED
EnrichTicketContextUseCaseEnrich context (order, product) bất đồng bộ
AddAttachmentsToMessageUseCaseĐính kèm file vào một message

Context Enrichment Worker

Khi một ticket được tạo, context-enrichment.worker chạy bất đồng bộ để điền cột JSONB context:

Dữ liệu được fetch từ ProductRepositorySaleOrderRepository (cả hai từ @nx/core) và lưu trong cột context để agent có context đầy đủ mà không truy vấn dịch vụ khác.

Luồng Event-Driven khi Tạo Ticket

Trang liên quan

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.