Chat - Đồng bộ tin nhắn Zalo cá nhân theo nhãn, phân quyền và hiển thị nhãn trên Chat đa kênh

I. Tổng quan

1. Vấn đề

  • Hiện tại, khi liên kết tài khoản Zalo cá nhân vào hệ thống, tất cả tin nhắn đều được đồng bộ mà không có khả năng lọc hoặc phân loại. Điều này gây ra:
    • Quá tải tin nhắn không liên quan trong hệ thống (tin nhắn cá nhân, spam…).
    • Không kiểm soát được ai có quyền xem và chỉnh sửa cài đặt đồng bộ của tài khoản Zalo.
    • Khó khăn trong việc quản lý khi có nhiều nhân viên cùng sử dụng chung workspace.
  • Khi tin nhắn Zalo đã có nhãn, nhãn đó không được hiển thị trên màn Chat đa kênh, khiến nhân viên không thể nhận biết và phân loại cuộc hội thoại nhanh chóng.

2. Giải pháp

  • Cho phép user cấu hình phân quyền nhân viên phụ trách tài khoản Zalo cá nhân, giới hạn ai được xem và chỉnh sửa cài đặt.
  • Cho phép user cấu hình tin nhắn đồng bộ theo nhãn (tag) từ Zalo, chỉ đồng bộ các tin nhắn thuộc nhãn được chọn thay vì toàn bộ.
  • Hiển thị nhãn Zalo trên màn Chat đa kênh (thread chat và khung chat) để nhân viên dễ dàng nhận biết và lọc cuộc hội thoại theo nhãn.

3. Đối tượng

  • User có quyền truy cập màn Tích hợp (Cài đặt > Tích hợp) mới được vào trang Zalo cá nhân.
  • User đã liên kết (kết nối) tài khoản Zalo cá nhân vào hệ thống.

4. Tầm nhìn/insight

  • Mở rộng hỗ trợ đồng bộ theo nhãn cho các kênh khác (Zalo OA, Facebook Messenger).
  • Cho phép tạo nhãn tùy chỉnh từ hệ thống Adahub và đồng bộ ngược lên Zalo.
  • Hỗ trợ thiết lập rule tự động gán nhãn cho tin nhắn mới dựa trên nội dung hoặc nguồn.

II. Yêu cầu chức năng

1. Danh sách tính năng

  • Cấu hình phân quyền nhân viên phụ trách cho tài khoản Zalo cá nhân.
  • Cấu hình chế độ đồng bộ tin nhắn (Tất cả / Theo nhãn).
  • Hiển thị danh sách nhãn từ Zalo để user chọn khi đồng bộ theo nhãn.
  • Hiển thị thông tin phân quyền và nhãn đồng bộ trên card tài khoản Zalo.
  • Hiển thị nhãn Zalo trên thread chat và khung chat ở màn Chat đa kênh.
  • Lọc cuộc hội thoại theo nhãn Zalo trên màn Chat đa kênh.
  • Nhãn Zalo chỉ hiển thị (read-only), user không được sửa hoặc xóa nhãn từ hệ thống.

2. Đặc tả chi tiết

User story 1: Là một [User có quyền], tôi muốn [phân quyền nhân viên phụ trách cho tài khoản Zalo cá nhân] để [kiểm soát ai được xem và chỉnh sửa cài đặt đồng bộ].

Figma: Link thiết kế UI

  • Use case 1.1 (Happy path - Chọn “Cá nhân”): User mở popup “Cấu hình zalo cá nhân” -> Chọn “Cá nhân” ở mục Nhân viên phụ trách -> Bấm “Lưu và Đồng bộ tin nhắn” -> Hệ thống lưu thành công. Chỉ user thực hiện cài đặt mới được xem và chỉnh sửa cấu hình tài khoản Zalo này.

  • Use case 1.2 (Happy path - Chọn “Tất cả”): User mở popup “Cấu hình zalo cá nhân” -> Chọn “Tất cả” ở mục Nhân viên phụ trách -> Bấm “Lưu và Đồng bộ tin nhắn” -> Hệ thống lưu thành công. Tất cả user trong workspace đều được xem và chỉnh sửa cấu hình tài khoản Zalo này.

  • Use case 1.3 (Happy path - Chọn “Tùy chỉnh”): User mở popup “Cấu hình zalo cá nhân” -> Chọn “Tùy chỉnh” ở mục Nhân viên phụ trách -> Hệ thống hiển thị dropdown chọn nhóm nhân viên hoặc nhân viên cụ thể -> User chọn nhân viên/nhóm -> Bấm “Lưu và Đồng bộ tin nhắn” -> Hệ thống lưu thành công. Chỉ những nhân viên/nhóm được chọn mới được xem và chỉnh sửa cấu hình.


User story 2: Là một [User có quyền], tôi muốn [cấu hình đồng bộ tin nhắn theo nhãn] để [chỉ nhận các tin nhắn liên quan đến công việc vào hệ thống].

Figma: Link thiết kế UI

  • Use case 2.1 (Happy path - Chọn “Tất cả tin nhắn”): User mở popup “Cấu hình zalo cá nhân” -> Chọn “Tất cả tin nhắn” ở mục Tin nhắn đồng bộ -> Bấm “Lưu và Đồng bộ tin nhắn” -> Hệ thống đồng bộ toàn bộ tin nhắn từ Zalo.

  • Use case 2.2 (Happy path - Chọn “Theo nhãn”): User mở popup “Cấu hình zalo cá nhân” -> Chọn “Theo nhãn” ở mục Tin nhắn đồng bộ -> Hệ thống hiển thị danh sách các nhãn (tag) lấy từ Zalo -> User tích chọn các nhãn muốn đồng bộ (VD: “Công việc”, “CSKH”,…) -> Bấm “Lưu và Đồng bộ tin nhắn” -> Hệ thống chỉ đồng bộ tin nhắn thuộc các nhãn đã chọn.

  • Use case 2.3 (Exception - Không chọn nhãn nào): User chọn “Theo nhãn” nhưng không tích chọn nhãn nào -> Bấm “Lưu và Đồng bộ tin nhắn” -> Hệ thống báo lỗi yêu cầu chọn ít nhất 1 nhãn.


User story 3: Là một [Nhân viên], tôi muốn [xem nhãn Zalo trên màn Chat đa kênh] để [nhanh chóng nhận biết và phân loại cuộc hội thoại].

Figma: Link thiết kế UI

  • Use case 3.1 (Happy path - Hiển thị nhãn trên thread chat): Tin nhắn Zalo được đồng bộ có nhãn (VD: “Công việc”, “CSKH”) -> Tại danh sách thread chat bên trái màn Chat đa kênh, mỗi thread hiển thị nhãn Zalo dạng tag chip bên dưới tên khách hàng.

  • Use case 3.2 (Happy path - Hiển thị nhãn trên khung chat): User click vào thread chat -> Tại khung chat (phần header), nhãn Zalo được hiển thị dạng tag chip bên cạnh tên khách hàng, tương tự cách hiển thị nhãn hiện tại (VD: “Priority”, “Khách hàng”).

  • Use case 3.3 (Happy path - Lọc theo nhãn Zalo): User sử dụng bộ lọc trên màn Chat đa kênh -> Chọn lọc theo nhãn Zalo -> Hệ thống chỉ hiển thị các thread chat có nhãn Zalo tương ứng.

    Figma: Link thiết kế bộ lọc

  • Use case 3.4 (Business Rule - Không cho sửa/xóa nhãn Zalo): Nhãn Zalo hiển thị dạng read-only, không có nút sửa hoặc xóa. User không thể thay đổi nhãn Zalo từ hệ thống Adahub, nhãn chỉ được quản lý từ phía Zalo.

3. Danh sách nghiệp vụ

  • Mỗi tài khoản Zalo cá nhân chỉ có một cấu hình phân quyền và đồng bộ duy nhất.
  • Khi chọn phân quyền “Cá nhân”, chỉ user thực hiện cài đặt mới có quyền xem và sửa cấu hình.
  • Khi chọn phân quyền “Tất cả”, toàn bộ user trong workspace đều có quyền xem và sửa cấu hình.
  • Khi chọn phân quyền “Tùy chỉnh”, chỉ các nhân viên hoặc nhóm nhân viên được chọn mới có quyền xem và sửa cấu hình.
  • User không có quyền phụ trách sẽ không thấy nút cấu hình (⚙️) và không thể chỉnh sửa cài đặt của tài khoản Zalo đó.
  • Danh sách nhãn được lấy trực tiếp từ tài khoản Zalo đã liên kết.
  • Khi chọn “Theo nhãn”, phải chọn ít nhất 1 nhãn để lưu cấu hình.
  • Khi thay đổi chế độ đồng bộ từ “Theo nhãn” sang “Tất cả” hoặc ngược lại, cấu hình cũ sẽ bị ghi đè.
  • Thông tin nhân viên phụ trách và tag tin nhắn đồng bộ được hiển thị trên card tài khoản Zalo ở trang danh sách.
  • Nhãn Zalo được hiển thị trên thread chat và khung chat ở màn Chat đa kênh dưới dạng tag chip (read-only).
  • User không được phép sửa hoặc xóa nhãn Zalo từ hệ thống Adahub. Nhãn chỉ được quản lý từ phía Zalo.
  • User có thể lọc danh sách cuộc hội thoại theo nhãn Zalo trên màn Chat đa kênh.
  • Nếu tin nhắn không có nhãn Zalo, không hiển thị tag nhãn trên thread và khung chat.

4. Giao diện

Trang danh sách Zalo cá nhân (Cài đặt > Tích hợp > Zalo cá nhân):

  • Mỗi tài khoản Zalo cá nhân được hiển thị dạng card bao gồm:
    • Tên tài khoản Zalo và avatar.
    • Các nút hành động: Đồng bộ lại (🔄), Cấu hình (⚙️), Xóa (🗑️).
    • Nhân viên phụ trách: Hiển thị danh sách nhân viên được phân quyền (tag chip). Nếu nhiều hơn 3 nhân viên, hiển thị “+N”.
    • Tag tin nhắn đồng bộ: Hiển thị các nhãn đã chọn (tag chip). Nếu đồng bộ tất cả, hiển thị tag “Tất cả”.

Popup “Cấu hình zalo cá nhân”:

  • Nhân viên phụ trách: Radio button group gồm 3 lựa chọn:
    • Cá nhân (mặc định): Chỉ user hiện tại.
    • Tất cả: Tất cả user trong workspace.
    • Tùy chỉnh: Hiển thị thêm dropdown multi-select cho phép chọn nhóm nhân viên hoặc nhân viên cụ thể.
  • Tin nhắn đồng bộ: Radio button group gồm 2 lựa chọn:
    • Tất cả tin nhắn (mặc định): Đồng bộ toàn bộ tin nhắn.
    • Theo nhãn: Hiển thị danh sách nhãn từ Zalo dạng tag chip, user tích chọn các nhãn muốn đồng bộ.
  • Nút hành động: “Lưu và Đồng bộ tin nhắn” (primary button).

Màn Chat đa kênh:

  • Thread chat (danh sách bên trái):
    • Mỗi thread chat từ Zalo có nhãn sẽ hiển thị nhãn Zalo dạng tag chip (có màu) bên dưới tên khách hàng, tương tự cách hiển thị nhãn “Nhân dân”, “Khách hàng” hiện tại.
  • Khung chat (header):
    • Nhãn Zalo hiển thị dạng tag chip bên cạnh tên khách hàng ở phần header, cùng hàng với các nhãn hệ thống hiện có (VD: “Priority”, “Khách hàng”).
    • Nhãn Zalo chỉ hiển thị, không có nút sửa hoặc xóa.
  • Bộ lọc:
    • Bổ sung tùy chọn lọc theo Nhãn Zalo trong bộ lọc của màn Chat đa kênh.
    • User có thể chọn một hoặc nhiều nhãn Zalo để lọc các cuộc hội thoại tương ứng.

III. Yêu cầu phi chức năng

  • API lấy danh sách nhãn từ Zalo phải phản hồi trong vòng 3 giây.
  • Giao diện popup cấu hình cần responsive trên các thiết bị có màn hình >= 768px.
  • Ghi log mỗi khi user thay đổi cấu hình phân quyền hoặc nhãn đồng bộ để phục vụ truy vết (audit log).

IV. Dependency (liên quan & phụ thuộc)

  • Zalo API: Phụ thuộc vào API Zalo để lấy danh sách nhãn (tag) của tài khoản Zalo cá nhân.
  • Module Quản lý nhân viên: Phụ thuộc vào danh sách nhân viên và nhóm nhân viên hiện tại trong workspace (Cài đặt > Quyền > Nhóm nhân viên / Tài khoản nhân viên).
  • Module Tích hợp Zalo cá nhân hiện tại: Cần cập nhật flow kết nối Zalo cá nhân hiện tại để bổ sung bước cấu hình phân quyền và nhãn đồng bộ.
  • Module Chat đa kênh: Cần cập nhật giao diện thread chat, khung chat (header) và bộ lọc để hiển thị và lọc theo nhãn Zalo.

V. API Contract (Dev viết)

[TODO: Dev định nghĩa chi tiết cấu trúc Request/Response]


VI. Test case (BA hoặc Tester viết)

Phân quyền nhân viên phụ trách

  • TC1 (Happy Path): Mở popup cấu hình -> Chọn “Cá nhân” -> Lưu -> Chỉ user hiện tại thấy và sửa được cấu hình. User khác không thấy nút ⚙️ trên card.
  • TC2 (Happy Path): Mở popup cấu hình -> Chọn “Tất cả” -> Lưu -> Tất cả user trong workspace đều thấy và sửa được cấu hình.
  • TC3 (Happy Path): Mở popup cấu hình -> Chọn “Tùy chỉnh” -> Chọn nhân viên A, nhóm B -> Lưu -> Chỉ nhân viên A và các thành viên nhóm B thấy và sửa được cấu hình.
  • TC4 (Exception): Chọn “Tùy chỉnh” nhưng không chọn nhân viên/nhóm nào -> Lưu -> Hệ thống báo lỗi yêu cầu chọn ít nhất 1 nhân viên hoặc nhóm.

Đồng bộ tin nhắn

  • TC5 (Happy Path): Mở popup cấu hình -> Chọn “Tất cả tin nhắn” -> Lưu -> Card hiển thị tag “Tất cả”. Hệ thống đồng bộ toàn bộ tin nhắn.
  • TC6 (Happy Path): Mở popup cấu hình -> Chọn “Theo nhãn” -> Chọn nhãn “Công việc”, “CSKH” -> Lưu -> Card hiển thị tag “Công việc”, “CSKH”. Hệ thống chỉ đồng bộ tin nhắn thuộc 2 nhãn này.
  • TC7 (Exception): Chọn “Theo nhãn” nhưng không tích nhãn nào -> Lưu -> Hệ thống báo lỗi “Vui lòng chọn ít nhất 1 nhãn”.
  • TC8 (Business Rule): User A phân quyền “Cá nhân” cho tài khoản Zalo -> Đăng nhập bằng User B -> User B không thấy nút cấu hình ⚙️ và xóa 🗑️ trên card tài khoản Zalo của User A.
  • TC9 (UI): Tài khoản Zalo có 5 nhân viên phụ trách -> Card hiển thị 3 tên + “+2”.
  • TC10 (Business Rule): Thay đổi từ “Theo nhãn” sang “Tất cả tin nhắn” -> Lưu -> Cấu hình nhãn cũ bị xóa, hệ thống đồng bộ lại toàn bộ tin nhắn.

Hiển thị nhãn Zalo trên Chat đa kênh

  • TC11 (Happy Path): Tin nhắn Zalo có nhãn “Công việc” được đồng bộ -> Mở màn Chat đa kênh -> Thread chat hiển thị tag chip “Công việc” bên dưới tên khách hàng.
  • TC12 (Happy Path): Click vào thread chat có nhãn Zalo -> Khung chat header hiển thị nhãn Zalo dạng tag chip cùng hàng với các nhãn hệ thống.
  • TC13 (Happy Path): Sử dụng bộ lọc -> Chọn nhãn Zalo “CSKH” -> Danh sách thread chỉ hiển thị các cuộc hội thoại có nhãn “CSKH”.
  • TC14 (Business Rule): Nhãn Zalo hiển thị trên thread và khung chat -> Không có nút sửa/xóa nhãn -> User không thể thay đổi nhãn từ hệ thống.
  • TC15 (UI): Tin nhắn Zalo không có nhãn -> Thread chat và khung chat không hiển thị tag nhãn Zalo.