Mô tả tính năng quản lý các nhân viên hỗ trợ trực chat
Back to ezychatTính năng quản lý nhân viên hỗ trợ trực chat được triển khai theo hai lớp:
- Vai trò nhân viên hỗ trợ toàn cục, dùng để xác định quản trị viên nào thuộc đội ngũ trực chat chung.
- Phân công theo hồ sơ chat, dùng để chỉ định nhân sự phụ trách từng website, widget, nhóm khách hàng hoặc cấu hình chat cụ thể.
Hai lớp có liên quan nhưng không thay thế nhau. Một quản trị viên thuộc đội hỗ trợ toàn cục có thể được tự động đưa vào các kênh hỗ trợ; thành viên của một hồ sơ chat chỉ được đưa vào các kênh gắn với hồ sơ đó.

Kiến trúc tổng quát
flowchart LR
A[Tài khoản quản trị] --> B[Vai trò hỗ trợ toàn cục]
B --> C[Tập nhân viên trực chat]
C --> D[Kênh hỗ trợ]
E[Hồ sơ chat] --> F[Danh sách thành viên được phân công]
F --> G[Kênh thuộc hồ sơ]
D --> H[Quan hệ thành viên kênh]
G --> H
H --> I[Nhận tin và thao tác trong hội thoại]
Hệ thống phân biệt ba khái niệm:
| Khái niệm | Phạm vi | Mục đích |
|---|---|---|
| Tài khoản quản trị | Toàn hệ thống | Danh tính đăng nhập của nhân viên |
| Nhân viên hỗ trợ toàn cục | Toàn bộ dịch vụ chat | Xác định thành viên của đội trực chat chung |
| Thành viên hồ sơ chat | Một hồ sơ cụ thể | Phân công nhân sự cho một nhóm kênh |
| Thành viên kênh | Một cuộc hội thoại | Quyền thực tế để đọc, gửi và nhận sự kiện |
Quyền truy cập hội thoại cuối cùng vẫn dựa trên quan hệ thành viên kênh. Việc có vai trò nhân viên hỗ trợ không tự động bỏ qua bước kiểm tra này.
Vai trò nhân viên hỗ trợ toàn cục
Khi module chat được khởi tạo, hệ thống bảo đảm tồn tại một vai trò dành riêng cho nhân viên hỗ trợ. Nếu vai trò chưa có, nó được tạo tự động.
Màn hình “Nhân viên hỗ trợ” không xây dựng một kho tài khoản riêng. Nó chuyển người quản trị tới màn hình quản lý tài khoản theo vai trò của nền tảng quản trị.
Nhờ đó, hệ thống tái sử dụng các chức năng quản lý tài khoản sẵn có:
- Xem danh sách quản trị viên đang mang vai trò hỗ trợ.
- Thêm tài khoản quản trị vào vai trò.
- Loại tài khoản khỏi vai trò.
- Mở thông tin tài khoản.
- Áp dụng các quyền quản trị chung của hệ thống.
Một nhân viên trực chat vì vậy vẫn là một tài khoản quản trị bình thường, nhưng được gắn thêm vai trò nghiệp vụ “hỗ trợ chat”.
Xác định danh sách nhân viên trực chat
Dịch vụ chat truy vấn các tài khoản quản trị được gắn vai trò hỗ trợ và chuyển kết quả thành một tập ID.
Danh sách này được dùng để:
- Kiểm tra một quản trị viên có phải nhân viên hỗ trợ hay không.
- Thêm đội hỗ trợ vào kênh mới.
- Bổ sung nhân viên còn thiếu vào kênh đang hoạt động.
- Quyết định quản trị viên có đủ điều kiện tự tham gia một kênh hỗ trợ hay không.
Danh sách ID được lưu trong bộ nhớ đệm để tránh truy vấn cơ sở dữ liệu ở mỗi tin nhắn. Lần truy cập đầu tiên sẽ tải dữ liệu từ cơ sở dữ liệu; sau đó hệ thống chạy tác vụ định kỳ để làm mới cache.
Hệ quả là việc thêm hoặc loại một tài khoản khỏi vai trò có thể không phản ánh ngay lập tức ở mọi runtime. Thay đổi sẽ có hiệu lực sau lần làm mới cache tiếp theo.
Phân công theo hồ sơ chat
Ngoài vai trò toàn cục, mỗi hồ sơ chat có danh sách thành viên riêng.
Hồ sơ chat có thể đại diện cho:
- Một widget chat trên website.
- Một thương hiệu.
- Một miền hoặc nguồn truy cập.
- Một nhóm khách hàng.
- Một quy trình chăm sóc riêng.
- Một cấu hình chatbot và đội hỗ trợ riêng.
Mỗi bản ghi phân công gồm:
| Thuộc tính | Ý nghĩa |
|---|---|
| Hồ sơ chat | Phạm vi mà thành viên phụ trách |
| Loại thành viên | Người dùng hoặc quản trị viên |
| ID thành viên | Danh tính được phân công |
| Vai trò nghiệp vụ | Hiện giao diện sử dụng vai trò nhân viên chăm sóc khách hàng |
| Trạng thái | Đang hoạt động hoặc ngừng hoạt động |
| Webhook | Trường liên kết phục vụ tích hợp mở rộng |
| Thời gian tạo/cập nhật | Dùng cho quản trị và kiểm tra lịch sử |
Trạng thái phân công gồm:
-
ACTIVATED: phân công đang có hiệu lực. -
INACTIVATED: giữ lại bản ghi nhưng không dùng cho các luồng yêu cầu thành viên đang hoạt động.
Quản lý danh sách thành viên hồ sơ
Trong trang chi tiết hồ sơ chat, quản trị viên có thể:
- Xem danh sách thành viên.
- Thêm thành viên mới.
- Sửa loại thành viên, danh tính, vai trò và trạng thái.
- Xóa bản ghi phân công.
- Di chuyển giữa trang đầu, trước, tiếp theo và cuối.
Danh sách hiển thị:
- ID của bản ghi phân công.
- Tên thành viên.
- Vai trò.
- Trạng thái.
- Thời gian tạo.
- Thời gian cập nhật.
- Các thao tác sửa và xóa.
Thông tin thành viên được làm giàu từ kho danh tính chung. Nếu tìm thấy danh tính tương ứng, hệ thống trả về tên hiển thị và đường dẫn tới trang chi tiết. Nếu không tìm thấy, giao diện dùng loại thành viên và ID làm thông tin thay thế.
Thêm nhân viên vào hồ sơ chat
Khi thêm thành viên, quản trị viên chọn:
- Loại danh tính.
- Thành viên cụ thể.
- Vai trò nghiệp vụ.
- Trạng thái ban đầu.
Giao diện hỗ trợ hai loại danh tính:
- Người dùng.
- Quản trị viên.
Ô chọn thành viên dùng chức năng gợi ý theo loại danh tính. Khi thay đổi loại, lựa chọn cũ được xóa và nguồn gợi ý được đăng ký lại.
Vai trò được giao diện cung cấp hiện tại là nhân viên chăm sóc khách hàng. Mô hình dữ liệu dùng chuỗi cho tên vai trò nên có khả năng mở rộng, nhưng chưa có nhiều vai trò để lựa chọn trên giao diện hiện tại.
Sau khi tạo thành công, danh sách thành viên của hồ sơ được tải lại từ trang đầu.
Cập nhật phân công
Quản trị viên có thể sửa:
- Loại thành viên.
- Thành viên được chọn.
- Vai trò.
- Trạng thái.
Thao tác cập nhật giữ nguyên ID và thời gian tạo của bản ghi, đồng thời thay đổi thời gian cập nhật.
Việc chuyển trạng thái sang
INACTIVATED phù hợp khi cần tạm dừng phân công nhưng vẫn muốn giữ thông tin cấu hình. Xóa phù hợp khi không còn cần bản ghi.Sau khi cập nhật, giao diện tải lại đúng trang hiện tại thay vì quay về trang đầu.
Xóa phân công
Thao tác xóa loại bỏ vật lý bản ghi thành viên khỏi hồ sơ chat.
Luồng giao diện yêu cầu xác nhận trước khi gửi yêu cầu xóa. Sau khi hoàn thành, danh sách thành viên được tải lại.
Xóa thành viên khỏi hồ sơ không đồng nghĩa với:
- Xóa tài khoản người dùng hoặc quản trị viên.
- Xóa vai trò hỗ trợ toàn cục.
- Xóa tin nhắn do người đó đã gửi.
- Tự động xóa quan hệ của người đó khỏi những kênh đã được phân công trước đó.
Đây là thao tác xóa quan hệ giữa danh tính và hồ sơ chat.
Tìm kiếm và phân trang
API danh sách thành viên hồ sơ hỗ trợ lọc theo:
- Hồ sơ chat.
- Loại thành viên.
- ID thành viên.
- Tên vai trò.
- Trạng thái.
Mô hình truy vấn còn hỗ trợ tìm theo từ khóa hoặc tiền tố từ khóa qua chỉ mục dữ liệu. Tuy nhiên, màn hình thành viên nhúng trong trang chi tiết hồ sơ hiện chỉ truyền ID hồ sơ, chưa cung cấp đầy đủ các ô lọc nâng cao này.
Phân trang sử dụng cursor và hỗ trợ:
- ID tăng dần.
- ID giảm dần.
- Trang đầu.
- Trang trước.
- Trang tiếp theo.
- Trang cuối.
Mặc định giao diện tải 30 thành viên mỗi trang.
Tự động đưa nhân viên vào kênh hỗ trợ
Khi một kênh hỗ trợ được tạo, hệ thống có thể đưa vào kênh hai nhóm thành viên.
Nhân viên hỗ trợ toàn cục
Tất cả quản trị viên có vai trò hỗ trợ được thêm vào kênh mới.
Thao tác thêm có tính idempotent: nếu một người đã là thành viên, hệ thống không tạo quan hệ trùng.
Thành viên của hồ sơ chat
Nếu kênh được tạo từ một hồ sơ chat:
- Hệ thống lấy các thành viên có trạng thái
ACTIVATEDcủa hồ sơ. - Chuyển mỗi phân công thành quan hệ thành viên kênh.
- Thêm từng thành viên vào kênh nếu chưa tồn tại.
sequenceDiagram
participant Customer as Khách hàng
participant API as API chat
participant Profile as Hồ sơ chat
participant Support as Đội hỗ trợ
participant Channel as Kênh
Customer->>API: Mở cuộc hội thoại
API->>Channel: Tạo kênh hỗ trợ
Channel->>Channel: Thêm khách hàng
API->>Support: Lấy nhân viên hỗ trợ toàn cục
Support->>Channel: Thêm nhân viên trực chat
API->>Profile: Lấy thành viên đang hoạt động
Profile->>Channel: Thêm thành viên chuyên trách
Channel-->>Customer: Trả về thông tin kênh
Hai nhóm có thể giao nhau. Cơ chế “thêm nếu chưa tồn tại” tránh tạo thành viên trùng lặp khi cùng một quản trị viên vừa thuộc đội hỗ trợ chung vừa được phân công trực tiếp cho hồ sơ.
Bổ sung nhân viên trong lúc kênh hoạt động
Hệ thống không chỉ thêm nhân viên tại thời điểm tạo kênh. Trong các luồng realtime như gửi tin hoặc nhập nội dung, hệ thống kiểm tra lại đội hỗ trợ toàn cục.
Nếu kênh chưa chứa đầy đủ các quản trị viên đang có vai trò hỗ trợ:
- Xác định các quản trị viên đã là thành viên kênh.
- So sánh với danh sách nhân viên hỗ trợ trong cache.
- Thêm những người còn thiếu.
- Tải lại danh sách thành viên.
- Dùng danh sách mới để tạo trạng thái tin nhắn và phát sự kiện realtime.
Cơ chế này giúp nhân viên mới được bổ sung vào các kênh đang có hoạt động mà không cần chạy tác vụ đồng bộ riêng.
Tuy nhiên, việc bổ sung lại này chỉ áp dụng cho đội hỗ trợ toàn cục. Thành viên mới được thêm vào một hồ sơ chat không được đồng bộ tương tự vào toàn bộ kênh cũ của hồ sơ.
Nhân viên chủ động nhận hội thoại
Khi một quản trị viên mở một kênh từ danh sách quản lý, giao diện gửi yêu cầu tự thêm người đó vào kênh trước khi chuyển tới màn hình chat.
Máy chủ chỉ chấp nhận khi thỏa mãn đồng thời:
- Tài khoản có vai trò nhân viên hỗ trợ toàn cục.
- Loại kênh nằm trong tập loại kênh hỗ trợ được cấu hình.
Nếu không đủ điều kiện, hệ thống không thêm thành viên. Yêu cầu mở màn hình vẫn có thể tiếp tục, nhưng các API tải hội thoại sẽ từ chối nếu quản trị viên chưa có quan hệ thành viên hợp lệ.
Cơ chế này đóng vai trò như thao tác “nhận” hoặc “tham gia” một cuộc hội thoại, nhưng không có khái niệm người phụ trách duy nhất. Một kênh có thể có nhiều nhân viên hỗ trợ cùng lúc.
Quyền truy cập của nhân viên
Vai trò hỗ trợ và quyền truy cập kênh được kiểm tra ở các lớp khác nhau:
- Vai trò hỗ trợ xác định quản trị viên có đủ điều kiện tham gia đội trực chat hay không.
- Thành viên hồ sơ xác định phạm vi chuyên trách theo cấu hình chat.
- Thành viên kênh xác định quyền thực tế đối với một cuộc hội thoại.
Để đọc tin nhắn, xem tin cuối hoặc thay đổi trạng thái kênh, quản trị viên phải là thành viên của kênh.
Nếu không phải thành viên, hệ thống thường trả về phản hồi tương đương “không tìm thấy kênh”. Cách xử lý này hạn chế việc dò tìm các kênh mà tài khoản không có quyền truy cập.
Hoạt động trực chat
Sau khi trở thành thành viên kênh, nhân viên có thể tham gia các luồng:
- Xem danh sách hội thoại được phân công.
- Đọc lịch sử tin nhắn.
- Nhận tin nhắn realtime.
- Gửi tin trả lời.
- Xem thông tin khách hàng.
- Xem số tin chưa đọc.
- Đánh dấu tin đã xem.
- Theo dõi trạng thái nhập nội dung.
- Bật hoặc tắt chatbot theo kênh nếu có quyền.
- Lưu trữ hoặc khôi phục hội thoại.
- Đánh dấu hội thoại là spam theo thiết lập cá nhân.
Mỗi nhân viên có số tin chưa đọc và thời điểm đọc gần nhất riêng. Khi một người đọc hội thoại, trạng thái chưa đọc của những nhân viên khác không bị đặt lại.
Quan hệ với hồ sơ chat
Hồ sơ chat đóng vai trò phân tuyến nhân viên.
Ví dụ:
- Hồ sơ A phục vụ website bán hàng.
- Hồ sơ B phục vụ ứng dụng nội bộ.
- Hồ sơ C phục vụ khách hàng doanh nghiệp.
Mỗi hồ sơ có thể có danh sách nhân viên riêng. Khi khách hàng mở chat bằng mã nhúng của hồ sơ, kênh mới được gắn với hồ sơ đó và nhận danh sách thành viên đang hoạt động.
Cơ chế này cho phép chia đội ngũ theo nguồn khách hàng mà không phải tạo một hệ thống tài khoản riêng cho từng nguồn.
Thành viên người dùng cũng có thể được phân công vào hồ sơ. Hệ thống cung cấp kiểm tra xem người dùng hiện tại có phải thành viên đang hoạt động của một hồ sơ hay không. Kiểm tra này được sử dụng trong các luồng yêu cầu quyền thành viên chuyên trách.
Cấu hình các loại kênh hỗ trợ
Hệ thống có một tập cấu hình xác định loại kênh nào được xem là kênh hỗ trợ.
Cấu hình này được dùng khi nhân viên chủ động tham gia kênh:
- Nếu loại kênh thuộc tập hỗ trợ, nhân viên đủ vai trò có thể được thêm.
- Nếu không thuộc tập hỗ trợ, hệ thống bỏ qua yêu cầu thêm.
Do đó, vai trò nhân viên hỗ trợ không cấp quyền tự động trên mọi loại kênh trong hệ thống.
Hình ảnh đại diện của đội hỗ trợ
Hệ thống cho phép cấu hình ảnh đại diện chung cho nhân viên hỗ trợ. Ảnh này được sử dụng ở giao diện phía khách hàng khi cần biểu diễn đội ngũ hỗ trợ thay vì một tài khoản cụ thể.
Ảnh có thể được cấu hình ở hai mức:
- Ảnh hỗ trợ mặc định của toàn hệ thống.
- Ảnh hỗ trợ riêng của từng hồ sơ chat.
Nếu không cấu hình ảnh riêng, giao diện sử dụng tài nguyên mặc định.
Đây là ảnh đại diện trình bày phía khách hàng, không phải avatar tài khoản cá nhân của từng nhân viên.
Trạng thái và vòng đời phân công
stateDiagram-v2
[*] --> ACTIVATED: Thêm và kích hoạt
ACTIVATED --> INACTIVATED: Tạm ngừng
INACTIVATED --> ACTIVATED: Kích hoạt lại
ACTIVATED --> [*]: Xóa
INACTIVATED --> [*]: Xóa
INACTIVATED chỉ làm bản ghi không còn được chọn trong các truy vấn thành viên đang hoạt động. Nó không tự động thu hồi mọi quyền đã phát sinh trước đó.Giới hạn và điểm cần lưu ý
Thu hồi vai trò không thu hồi kênh cũ
Khi một quản trị viên bị loại khỏi vai trò hỗ trợ toàn cục, hệ thống không tự động xóa người đó khỏi các quan hệ thành viên kênh đã tồn tại.
Do quyền đọc và gửi tin dựa trên thành viên kênh, tài khoản có thể vẫn truy cập được các kênh cũ cho đến khi quan hệ thành viên được xóa riêng.
Vô hiệu hóa phân công không đồng bộ ngược
Chuyển một thành viên hồ sơ sang
INACTIVATED chỉ ảnh hưởng đến các truy vấn phân công đang hoạt động và các kênh được tạo sau đó.Các kênh đã thêm thành viên trước thời điểm vô hiệu hóa không tự động loại người đó ra.
Thêm thành viên hồ sơ không cập nhật kênh cũ
Thành viên hồ sơ được sao chép vào kênh tại thời điểm tạo kênh. Không có luồng đồng bộ tự động đưa thành viên vừa thêm vào tất cả các kênh cũ của hồ sơ.
Đội hỗ trợ toàn cục có cơ chế bổ sung khi kênh phát sinh hoạt động, nhưng thành viên theo hồ sơ không có cơ chế tương đương.
Có độ trễ cache
Danh sách nhân viên hỗ trợ toàn cục được cache và làm mới định kỳ. Việc thêm hoặc thu hồi vai trò không bảo đảm có hiệu lực tức thời ở tất cả tiến trình.
Chưa có cơ chế ca trực
Mã nguồn hiện không mô hình hóa:
- Lịch làm việc.
- Ca trực.
- Trạng thái online hoặc offline.
- Số lượng hội thoại tối đa.
- Phân công theo tải.
- Hàng đợi chờ nhận.
- Người phụ trách chính.
- Chuyển giao hội thoại giữa hai nhân viên.
- SLA hoặc thời gian phản hồi.
Tên gọi “nhân viên trực chat” hiện thể hiện tư cách thành viên đội hỗ trợ, không phải một hệ thống lập lịch trực.
Chưa có phân tuyến tự động theo năng lực
Hệ thống thêm toàn bộ đội hỗ trợ toàn cục hoặc toàn bộ thành viên đang hoạt động của hồ sơ vào kênh. Chưa có thuật toán chọn một nhân viên dựa trên:
- Kỹ năng.
- Ngôn ngữ.
- Khu vực.
- Trạng thái online.
- Số hội thoại đang xử lý.
- Mức độ ưu tiên của khách hàng.
Nguy cơ bản ghi phân công trùng
Luồng thêm thành viên hồ sơ tạo bản ghi trực tiếp, không kiểm tra trùng trong tầng dịch vụ. Cơ sở dữ liệu nên có ràng buộc duy nhất phù hợp hoặc tầng nghiệp vụ cần kiểm tra bộ:
hồ sơ + loại thành viên + ID thành viênnếu yêu cầu nghiệp vụ không cho phép một người xuất hiện nhiều lần trong cùng hồ sơ.
Dữ liệu đầu vào cần được kiểm tra chặt hơn
API lưu thành viên nhận trực tiếp loại thành viên, ID, vai trò và trạng thái. Trong luồng đã đọc chưa thấy lớp kiểm tra chuyên biệt bảo đảm:
- Danh tính thực sự tồn tại.
- Trạng thái thuộc tập giá trị hợp lệ.
- Vai trò thuộc danh sách được phép.
- Hồ sơ chat tồn tại.
- Không có phân công trùng.
Giao diện giới hạn các lựa chọn hợp lệ, nhưng API vẫn nên tự kiểm tra vì client không phải ranh giới bảo mật.
Khuyến nghị vận hành
Khi thêm nhân viên mới:
- Tạo hoặc kích hoạt tài khoản quản trị.
- Gắn vai trò nhân viên hỗ trợ toàn cục nếu người đó trực toàn hệ thống.
- Thêm vào các hồ sơ chat chuyên trách nếu cần phân tuyến.
- Chờ cache vai trò được làm mới.
- Kiểm tra người đó xuất hiện trong các kênh mới.
- Với kênh cũ, thêm quan hệ thành viên hoặc chạy đồng bộ nếu cần.
Khi nhân viên nghỉ hoặc đổi bộ phận:
- Loại khỏi vai trò hỗ trợ toàn cục.
- Chuyển các phân công hồ sơ sang
INACTIVATEDhoặc xóa. - Xóa quan hệ thành viên khỏi các kênh cần thu hồi quyền.
- Thu hồi hoặc khóa tài khoản quản trị nếu cần hiệu lực ngay.
- Kiểm tra các phiên đăng nhập và kết nối realtime còn hoạt động.
Kết luận
Tính năng quản lý nhân viên hỗ trợ được xây dựng theo mô hình phân quyền nhiều lớp:
- Vai trò toàn cục xác định ai thuộc đội trực chat.
- Hồ sơ chat xác định ai phụ trách từng nguồn hội thoại.
- Quan hệ thành viên kênh quyết định quyền truy cập thực tế.
- Trạng thái thành viên và số chưa đọc được theo dõi riêng cho từng người.
Thiết kế này phù hợp với hệ thống có nhiều website hoặc nhóm chăm sóc khách hàng. Tuy nhiên, để thu hồi quyền đầy đủ, quản trị viên cần xử lý cả vai trò, phân công hồ sơ và các quan hệ thành viên kênh đã tồn tại.