Skip to content

Agent & Assignment

@nx/helpdesk quản lý đội ngũ support agent với một hệ thống phân công kép: phân công thủ công qua API và tự phân công qua AutoAssignTicketUseCase chạy trên một worker BullMQ.

Data Model

Agent

CộtTypeMô tả
idbigintSnowflake ID
merchantIdbigintPhạm vi tenant
userIdbigintLiên kết unique tới một User trong @nx/identity
statusenumONLINE / AWAY / OFFLINE / BUSY
isAvailablebooleanAgent có nhận ticket mới không
skillsvarchar[]Kỹ năng (ví dụ ['billing', 'technical'])
languagesvarchar[]Ngôn ngữ hỗ trợ (mặc định ['vi'])
maxConcurrentTicketssmallintGiới hạn ticket đồng thời (mặc định 10)
currentTicketCountintSố ticket đang active hiện tại
averageResponseTimeintThời gian first-response trung bình (phút)
averageResolutionTimeintThời gian resolution trung bình (phút)
slaComplianceRatedecimalTỷ lệ tuân thủ SLA (0.0 − 1.0)
customerSatisfactionScoredecimalĐiểm CSAT
schedulejsonbLịch làm việc (giờ/ngày nghỉ)

AgentGroup

Nhóm agent được tổ chức theo bộ phận hoặc bộ kỹ năng.

CộtTypeMô tả
idbigintSnowflake ID
merchantIdbigintPhạm vi tenant
namejsonbTên group (i18n: {en, vi})
descriptionjsonbMô tả group
isActivebooleanCờ active

AgentGroupMember

Bảng junction liên kết AgentAgentGroup.

REST API

Agents (/agents), agent group (/agent-groups), và assignment rule (/assignment-rules) — 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

Agent

Use CaseMô tả
CreateAgentUseCaseTạo agent, liên kết tới userId
UpdateAgentUseCaseCập nhật kỹ năng, status, lịch
DeleteAgentUseCaseSoft-delete agent
GetAgentByIdUseCaseLấy chi tiết theo ID
GetAgentByUserIdUseCaseLấy agent theo userId
ListAgentsUseCaseDanh sách agent phân trang
GetAgentTicketsUseCaseFetch ticket theo agent

Auto-Assignment

Use CaseMô tả
AutoAssignTicketUseCaseĐiều phối tìm agent khả dụng tốt nhất
FindBestAgentUseCaseChọn agent theo kỹ năng + khối lượng thấp nhất
FindSeniorAgentUseCaseTìm một senior agent cho escalation

Luồng Auto-Assignment

Tiêu chí Chọn Agent (FindBestAgentUseCase)

  1. isAvailable = truestatus != OFFLINE/BUSY
  2. currentTicketCount < maxConcurrentTickets — không quá tải
  3. Khớp kỹ năng với kỹ năng yêu cầu của ticket.category (khi áp dụng)
  4. currentTicketCount thấp nhất trong các agent đủ điều kiện — cân bằng tải

AssignmentRule

Rule có thể cấu hình ghi đè logic phân công mặc định:

Tiêu chíMô tả
categoryIdChỉ áp dụng cho một category ticket cụ thể
priorityMức priority ticket
keywordsTừ khóa trong subject/description
targetAgentIdPhân công trực tiếp cho một agent cụ thể
targetGroupIdPhân công cho một agent group

Worker liên quan

WorkerHàng đợiChức năng
assignment.workerhelpdesk.assignmentChạy AutoAssignTicketUseCase
escalation.workerhelpdesk.escalationChạy FindSeniorAgentUseCase khi vi phạm SLA Level 2+

Trang liên quan

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