Màn hình Settings của EzyOA dùng để cấu hình các hành vi chung áp dụng cho toàn bộ plugin. Đây là nơi kiểm soát cách EzyOA lưu dữ liệu hội thoại, tải ảnh đại diện, phản hồi tự động, nhận diện lệnh thanh toán và phát thông báo cho nhân viên.
Các thiết lập tại đây có phạm vi toàn hệ thống, khác với cấu hình trên trang chi tiết của từng OA Service.

Phạm vi của màn hình Settings

Màn hình Settings gồm hai nhóm chức năng:
Screenshot 2026-09-23 at 08.26.10.png
Screenshot 2026-09-23 at 08.27.18.png
  • Quản lý các tiến trình lập chỉ mục và xử lý thông báo.
  • Cấu hình hành vi chung của EzyOA.
flowchart TD
    Settings["EzyOA Settings"] --> Jobs["Tiến trình nền"]
    Settings --> Storage["Lưu trữ dữ liệu"]
    Settings --> Response["Phản hồi tự động"]
    Settings --> Commands["Lệnh thanh toán"]
    Settings --> Notification["Thông báo cho nhân viên"]

    Jobs --> UserIndex["Chỉ mục người dùng OA"]
    Jobs --> ServiceIndex["Chỉ mục dịch vụ OA"]
    Jobs --> MessageNotifier["Bộ thông báo tin nhắn mới"]

    Storage --> Avatar["Ảnh đại diện"]
    Storage --> RawPayload["Payload nguyên bản"]
    Storage --> IncomingMedia["Media nhận vào"]
    Storage --> ResponseMessage["Tin nhắn phản hồi"]
    Storage --> ResponseMedia["Media phản hồi"]
Màn hình này không quản lý token, webhook hoặc App ID của từng dịch vụ. Những thông tin đó được cấu hình tại phần quản lý OA Services.

Phân quyền truy cập

Trang Settings và API lưu cấu hình yêu cầu:
  • Quản trị viên đã đăng nhập.
  • Tài khoản có quyền quản lý cài đặt EzyOA.
Các thay đổi ảnh hưởng đến toàn bộ plugin nên quyền truy cập màn hình này cần được giới hạn cho quản trị viên vận hành hệ thống.

Các tiến trình nền

Phần đầu màn hình hiển thị các tiến trình hỗ trợ tìm kiếm và gửi thông báo.

Chỉ mục người dùng OA

Tiến trình này lập chỉ mục dữ liệu người dùng OA để hỗ trợ tìm kiếm theo:
  • Mã người dùng tại nhà cung cấp.
  • Tên hiển thị.
  • Số điện thoại.
  • Email.
Việc lập chỉ mục giúp trang quản trị tìm người dùng theo từ khóa mà không phải quét toàn bộ dữ liệu mỗi lần tìm kiếm.
flowchart LR
    Users["Dữ liệu người dùng OA"] --> Indexer["Bộ lập chỉ mục"]
    Indexer --> Keywords["Mã OA, tên, điện thoại, email"]
    Keywords --> Search["Tìm kiếm trên trang quản trị"]
Khi có dữ liệu cũ chưa được lập chỉ mục hoặc kết quả tìm kiếm không đầy đủ, quản trị viên có thể sử dụng các thao tác của tiến trình để đồng bộ lại chỉ mục.

Chỉ mục dịch vụ OA

Tiến trình này tạo dữ liệu tìm kiếm cho các cấu hình dịch vụ OA.
Các trường được sử dụng có thể gồm:
  • Mã dịch vụ.
  • Tên dịch vụ.
  • App ID.
  • UUID ứng dụng.
Chỉ mục này phục vụ tìm kiếm và lọc dịch vụ trên màn hình quản lý OA Services.

Bộ thông báo tin nhắn mới

Tiến trình thông báo theo dõi các tin nhắn OA đã lưu, kiểm tra điều kiện thông báo và phát sự kiện cho luồng gửi thông báo đến nhân viên.
flowchart TD
    Stored["Tin nhắn OA đã lưu"] --> Notifier["Bộ thông báo tin nhắn mới"]
    Notifier --> Valid{"Tin nhắn hợp lệ?"}
    Valid -- Không --> Ignore["Bỏ qua"]
    Valid -- Có --> Load["Lấy người dùng và dịch vụ OA"]
    Load --> Event["Phát sự kiện thông báo"]
    Event --> Staff["Thông báo cho nhân viên"]
Bộ thông báo chỉ xử lý được khi:
  • Tin nhắn tồn tại và có nội dung.
  • Dịch vụ OA tương ứng vẫn tồn tại.
  • Người gửi đã có hồ sơ người dùng OA.
  • Nội dung vượt qua điều kiện thông báo đã cấu hình.

Quản trị viên OA mặc định

Trường Default OA Admin xác định quản trị viên mặc định được dùng trong một số luồng hội thoại.
Ví dụ, khi EzyOA nhận sự kiện về tin nhắn do quản trị viên gửi nhưng không xác định được chính xác người gửi, hệ thống có thể dùng quản trị viên mặc định để:
  • Tạo kênh hội thoại.
  • Ghi nhận người gửi tin nhắn.
  • Duy trì lịch sử trao đổi trong hệ thống.
Giá trị có thể để trống. Nếu chọn một quản trị viên, tài khoản đó phải tồn tại trong hệ thống.
Trường này có hỗ trợ tìm kiếm và chọn quản trị viên bằng gợi ý tự động, thay vì yêu cầu nhập trực tiếp ID.

Tải ảnh đại diện người dùng OA

Tùy chọn Download OA User Avatar quyết định EzyOA có tải ảnh đại diện từ URL của nhà cung cấp về kho media nội bộ hay không.

Khi bật

EzyOA tải ảnh đại diện và lưu thành media của hệ thống. Cách này có các ưu điểm:
  • Không phụ thuộc hoàn toàn vào URL bên ngoài.
  • Ảnh vẫn có thể hiển thị nếu URL tạm thời hết hạn.
  • Có thể áp dụng cơ chế quản lý media chung của EzyPlatform.
Đổi lại, hệ thống phải sử dụng thêm:
  • Dung lượng lưu trữ.
  • Băng thông tải ảnh.
  • Thời gian xử lý khi tạo hoặc cập nhật người dùng.

Khi tắt

EzyOA không tải ảnh về kho media. Hệ thống vẫn có thể giữ URL ảnh đại diện do nhà cung cấp trả về, nhưng không tạo một bản media nội bộ.
Thay đổi tùy chọn này không tự động tải lại hoặc xóa ảnh của những người dùng đã tồn tại.

Lưu payload tin nhắn nguyên bản

Tùy chọn Save Raw Incoming OA Message kiểm soát việc lưu payload webhook sau khi đã được chuyển thành dữ liệu tin nhắn.

Khi bật

EzyOA lưu lại nội dung nguyên bản của sự kiện đến. Dữ liệu này hữu ích khi:
  • Điều tra lỗi tích hợp.
  • Kiểm tra trường dữ liệu từ nhà cung cấp.
  • Phân tích những loại webhook chưa được xử lý đầy đủ.
  • Đối chiếu giữa dữ liệu gốc và hội thoại đã lưu.

Khi tắt

EzyOA chỉ lưu các trường đã được chuẩn hóa, không lưu toàn bộ payload gốc.
Đây là lựa chọn phù hợp khi muốn:
  • Giảm dung lượng cơ sở dữ liệu.
  • Hạn chế lưu dữ liệu không cần thiết.
  • Giảm rủi ro giữ lại thông tin nhạy cảm từ webhook.
Payload cũ đã lưu không bị xóa khi tắt tùy chọn.

Lưu media của tin nhắn đến

Tùy chọn Save Incoming OA Message Medias quyết định EzyOA có trích xuất và lưu thông tin media từ tin nhắn người dùng hay không.
Media có thể gồm:
  • Hình ảnh.
  • Tệp tin.
  • Video.
  • Các loại đính kèm được bộ xử lý của nền tảng hỗ trợ.
flowchart LR
    Webhook["Webhook có media"] --> Enabled{"Cho phép lưu media nhận vào?"}
    Enabled -- Có --> Extract["Trích xuất media"]
    Extract --> Save["Lưu cùng tin nhắn"]
    Enabled -- Không --> Text["Chỉ xử lý nội dung văn bản"]
Khi tắt, EzyOA không đưa media nhận được vào dữ liệu tin nhắn nội bộ. Nội dung văn bản vẫn được xử lý bình thường.
Khả năng trích xuất media phụ thuộc vào từng nền tảng. Bật cài đặt không có nghĩa mọi loại tệp đều được tải và lưu đầy đủ.

Lưu tin nhắn phản hồi tự động

Tùy chọn Save OA Response Message quyết định EzyOA có lưu câu trả lời do hệ thống tự động gửi hay không.

Khi bật

Sau khi phản hồi được gửi thành công, EzyOA lưu phản hồi vào cùng kênh hội thoại. Nhờ đó:
  • Nhân viên có thể xem đầy đủ hai chiều hội thoại.
  • Chatbot có thể sử dụng phản hồi trước đó làm ngữ cảnh.
  • Hệ thống có thể xác định mẫu phản hồi gần nhất.
  • Các kịch bản có thể hạn chế trả lời lặp lại.

Khi tắt

EzyOA vẫn có thể gửi phản hồi ra nền tảng OA, nhưng không lưu câu trả lời đó vào lịch sử hội thoại.
Điều này giúp giảm dữ liệu lưu trữ nhưng làm lịch sử nội bộ không phản ánh đầy đủ những gì người dùng đã nhận.

Lưu media của tin nhắn phản hồi

Tùy chọn Save Response OA Message Medias kiểm soát việc lưu media đi kèm phản hồi tự động.
Cài đặt này chỉ có tác dụng khi:
  • Phản hồi có media.
  • Phản hồi đã được gửi.
  • Tính năng lưu tin nhắn phản hồi đang bật.
flowchart TD
    Sent["Phản hồi đã gửi"] --> SaveMessage{"Lưu tin nhắn phản hồi?"}
    SaveMessage -- Không --> End["Không lưu"]
    SaveMessage -- Có --> HasMedia{"Có media?"}
    HasMedia -- Không --> SaveText["Lưu nội dung"]
    HasMedia -- Có --> SaveMedia{"Cho phép lưu media phản hồi?"}
    SaveMedia -- Có --> SaveAll["Lưu nội dung và media"]
    SaveMedia -- Không --> SaveText
Việc bật riêng tùy chọn lưu media phản hồi trong khi tắt lưu tin nhắn phản hồi sẽ không tạo bản ghi phản hồi độc lập.

Bật phản hồi tự động

Tùy chọn Enable Automatic Response là công tắc tổng cho chức năng phản hồi tự động.

Khi bật

Tin nhắn văn bản hợp lệ có thể được chuyển tới kịch bản phản hồi đang cấu hình. Kịch bản có thể là:
  • Phản hồi theo quy tắc.
  • Hướng dẫn công việc.
  • Tra cứu thông tin.
  • Chatbot.
  • Kịch bản mở rộng do module khác cung cấp.

Khi tắt

EzyOA vẫn:
  • Nhận webhook.
  • Xác thực tin nhắn.
  • Tạo hoặc cập nhật người dùng OA.
  • Lưu tin nhắn đến.
  • Tạo kênh hội thoại.
Tuy nhiên, hệ thống không gọi kịch bản để tạo câu trả lời tự động.
sequenceDiagram
    participant U as Người dùng
    participant E as EzyOA
    participant D as Kho hội thoại
    participant S as Kịch bản phản hồi

    U->>E: Gửi tin nhắn
    E->>D: Lưu người dùng và tin nhắn

    alt Phản hồi tự động được bật
        E->>S: Yêu cầu tạo câu trả lời
        S-->>E: Nội dung phản hồi
        E-->>U: Gửi phản hồi
    else Phản hồi tự động bị tắt
        E-->>U: Không tự động trả lời
    end
Giá trị mặc định của cài đặt này là bật.

Thời gian trì hoãn phản hồi cùng nội dung

Trường Delay Response Same Message In được tính bằng giây và dùng để hạn chế việc gửi phản hồi lặp lại trong một khoảng thời gian ngắn.
Giá trị mặc định là:
300 giây
Tương đương 5 phút.
Trong kịch bản phản hồi theo công việc, EzyOA kiểm tra tin nhắn gần nhất của người dùng:
  • Nếu nhân viên vừa gửi tin trong khoảng trì hoãn, hệ thống không tự động trả lời.
  • Nếu phản hồi gần nhất là thông báo nhân viên sẽ tiếp nhận và vẫn còn trong khoảng trì hoãn, hệ thống không gửi lại.
  • Nếu cùng loại phản hồi sắp được gửi lần nữa, kịch bản có thể chuyển sang một nội dung khác, chẳng hạn thông báo nhân viên sẽ trả lời.
flowchart TD
    Incoming["Tin nhắn mới"] --> Last["Đọc tin nhắn gần nhất"]
    Last --> Recent{"Nằm trong khoảng trì hoãn?"}
    Recent -- Không --> Respond["Tạo phản hồi bình thường"]
    Recent -- Có --> Admin{"Tin gần nhất từ nhân viên?"}
    Admin -- Có --> Skip["Không tự động phản hồi"]
    Admin -- Không --> Duplicate{"Phản hồi sắp gửi bị lặp?"}
    Duplicate -- Có --> Alternate["Dùng phản hồi thay thế hoặc bỏ qua"]
    Duplicate -- Không --> Respond
Giá trị phải lớn hơn hoặc bằng 0.
Nếu đặt bằng 0, cơ chế chờ gần như bị vô hiệu hóa. Điều này có thể khiến hệ thống phản hồi lặp lại nhanh khi người dùng gửi nhiều tin liên tiếp.
Cài đặt này là tham số được kịch bản sử dụng; mức độ áp dụng cụ thể có thể khác nếu dự án cài thêm kịch bản phản hồi riêng.

Các lệnh thanh toán

Trường Payment Commands chứa tập hợp từ khóa dùng để nhận diện yêu cầu thanh toán.
Các lệnh được nhập cách nhau bằng dấu phẩy, ví dụ:
pay, qr, thanh toan
Khi lưu, giao diện:
  1. Tách chuỗi theo dấu phẩy.
  2. Loại bỏ khoảng trắng ở đầu và cuối mỗi lệnh.
  3. Lưu thành một tập hợp từ khóa.
Giá trị mặc định gồm các lệnh tương đương:
pay
qr
thanh toan
Các module khác có thể lấy tập lệnh này thông qua cơ chế sự kiện nội bộ để thống nhất cách nhận diện yêu cầu thanh toán.
Cài đặt này chỉ cung cấp danh sách lệnh. Bản thân màn hình Settings không định nghĩa toàn bộ quy trình tạo mã QR, tính số tiền hoặc xác nhận thanh toán.

Điều kiện thông báo tin nhắn OA

Trường OA User Message Notification Condition là đoạn điều kiện dùng để quyết định một tin nhắn mới có cần phát thông báo cho nhân viên hay không.
Điều kiện nhận biến:
message
Đây là nội dung văn bản của tin nhắn người dùng.
Kết quả cuối cùng phải là:
true
hoặc:
false
Trong đó:
  • true: cho phép phát thông báo.
  • false: bỏ qua thông báo.
Ví dụ:
if (message.startsWith('/')) {
    false;
} else {
    true;
}
Điều kiện trên bỏ qua các tin nhắn bắt đầu bằng dấu /.

Điều kiện mặc định

Cấu hình mặc định bỏ qua một số dạng tin nhắn có khả năng là lệnh hoặc dữ liệu trung gian:
  • Tin nhắn bắt đầu bằng /.
  • Tin nhắn có dạng số điện thoại.
  • Chuỗi dài không chứa khoảng trắng, có khả năng là mã hoặc lệnh.
Những tin nhắn còn lại được phép tạo thông báo cho nhân viên.

Khi để trống

Nếu không có điều kiện, mọi tin nhắn văn bản hợp lệ đều vượt qua bước lọc thông báo.

Khi điều kiện bị lỗi lúc chạy

Nếu đoạn điều kiện:
  • Phát sinh lỗi.
  • Không trả về giá trị.
  • Trả về giá trị khác true.
Tin nhắn được xem là không đủ điều kiện để phát thông báo.
Cách xử lý này tránh làm gián đoạn tiến trình nền nhưng có thể khiến nhân viên không nhận được thông báo. Vì vậy, điều kiện nên được kiểm tra kỹ sau mỗi lần chỉnh sửa.

Kiểm tra dữ liệu khi lưu

Trước khi lưu, EzyOA kiểm tra một số trường quan trọng.
TrườngĐiều kiện
Quản trị viên mặc địnhPhải tồn tại nếu được chọn
Thời gian trì hoãnKhông được là số âm
Điều kiện thông báoPhải thực thi được và trả về true hoặc false
Đối với điều kiện thông báo, hệ thống chạy thử với một nội dung mẫu trước khi chấp nhận cấu hình.
Kiểm tra này chỉ xác nhận cú pháp và kiểu kết quả cơ bản. Nó không bảo đảm điều kiện hoạt động đúng cho mọi nội dung thực tế.

Lưu cấu hình

Quản trị viên có thể lưu bằng:
  • Nút Save.
  • Tổ hợp Ctrl + S trên Windows hoặc Linux.
  • Tổ hợp Command + S trên macOS.
  • Phím Enter khi đang nhập danh sách lệnh thanh toán.
Sau khi lưu thành công, các giá trị được ghi vào kho cài đặt chung của EzyPlatform.
Một số cài đặt được web runtime đưa vào bộ nhớ đệm để phục vụ xử lý tin nhắn thường xuyên, gồm:
  • Bật hoặc tắt phản hồi tự động.
  • Kịch bản phản hồi hiện tại.
  • Thời gian trì hoãn phản hồi.
Do đó, thay đổi có thể phụ thuộc vào chu kỳ cập nhật cache của hệ thống thay vì được phản ánh tức thời trong mọi tiến trình đang chạy.

Quan hệ giữa các cài đặt

Một số tùy chọn không hoạt động độc lập.
flowchart TD
    Auto["Bật phản hồi tự động"] --> Scenario["Chạy kịch bản phản hồi"]
    Scenario --> Send["Gửi câu trả lời"]
    Send --> SaveResponse{"Lưu phản hồi?"}
    SaveResponse -- Có --> History["Lưu vào lịch sử"]
    History --> SaveMedia{"Lưu media phản hồi?"}
    SaveMedia -- Có --> Media["Lưu media"]

    Incoming["Nhận tin nhắn"] --> SaveIncomingMedia{"Lưu media nhận vào?"}
    Incoming --> SaveRaw{"Lưu payload gốc?"}
    Incoming --> NotifyCondition["Kiểm tra điều kiện thông báo"]
Một số quan hệ quan trọng:
  • Tắt phản hồi tự động không làm ngừng nhận hoặc lưu tin nhắn.
  • Lưu media phản hồi phụ thuộc vào việc lưu tin nhắn phản hồi.
  • Tắt lưu payload gốc không làm mất nội dung đã chuẩn hóa.
  • Điều kiện thông báo chỉ kiểm soát thông báo cho nhân viên, không kiểm soát việc lưu tin nhắn.
  • Thời gian trì hoãn ảnh hưởng đến kịch bản phản hồi có sử dụng nó, không phải webhook.

Giá trị mặc định

Khi chưa cấu hình, EzyOA sử dụng các giá trị mặc định sau:
Cài đặtGiá trị mặc định
Quản trị viên OA mặc địnhChưa chọn
Tải ảnh đại diệnTắt
Lưu payload nguyên bảnTắt
Lưu media tin nhắn đếnTắt
Lưu tin nhắn phản hồiTắt
Lưu media phản hồiTắt
Phản hồi tự độngBật
Trì hoãn phản hồi lặp300 giây
Lệnh thanh toánpay, qr, thanh toan
Điều kiện thông báoSử dụng bộ lọc mặc định
Các giá trị mặc định nên được rà soát theo yêu cầu lưu trữ, bảo mật và quy trình chăm sóc khách hàng của từng dự án.

Khuyến nghị cấu hình

Môi trường phát triển

Có thể bật:
  • Lưu payload nguyên bản.
  • Lưu media tin nhắn đến.
  • Lưu tin nhắn phản hồi.
  • Lưu media phản hồi.
Cấu hình này giúp kiểm tra đầy đủ luồng xử lý và điều tra lỗi.

Môi trường production

Nên cân nhắc:
  • Chỉ lưu payload gốc khi thực sự cần.
  • Đánh giá dung lượng trước khi bật lưu media.
  • Chọn quản trị viên mặc định còn hoạt động.
  • Giữ thời gian chống phản hồi lặp ở mức hợp lý.
  • Kiểm thử điều kiện thông báo với nhiều loại tin nhắn.
  • Theo dõi tiến trình lập chỉ mục và thông báo.
  • Xác định chính sách lưu trữ dữ liệu cá nhân.

Giới hạn cần lưu ý

  • Tắt một tùy chọn không xóa dữ liệu đã lưu trước đó.
  • Bật tải ảnh đại diện không tự động tải lại ảnh của toàn bộ người dùng cũ.
  • Bật lưu media không bảo đảm mọi nền tảng hoặc loại tệp đều được hỗ trợ.
  • Điều kiện thông báo chỉ nhận nội dung message, không phải toàn bộ payload webhook.
  • Điều kiện thông báo là mã được thực thi phía máy chủ và chỉ nên được chỉnh sửa bởi quản trị viên tin cậy.
  • Danh sách lệnh thanh toán không tự triển khai quy trình thanh toán.
  • Thời gian trì hoãn phản hồi được áp dụng bởi kịch bản có hỗ trợ, không phải giới hạn chung ở tầng gửi tin.
  • Các tiến trình lập chỉ mục và thông báo cần hoạt động thì tìm kiếm hoặc thông báo mới được cập nhật đầy đủ.
  • Màn hình này không cấu hình dịch vụ OA mặc định; lựa chọn đó được thực hiện tại màn hình quản lý OA Services.
  • Màn hình này cũng không chọn kịch bản riêng cho từng dịch vụ; phần đó nằm trên trang chi tiết OA Service.

Kết luận

Màn hình Settings là nơi điều khiển hành vi vận hành chung của EzyOA: từ lưu trữ dữ liệu, tải ảnh đại diện và phản hồi tự động đến nhận diện lệnh thanh toán và thông báo cho nhân viên.
Việc cấu hình đúng màn hình này giúp cân bằng ba mục tiêu quan trọng: đầy đủ dữ liệu hội thoại, chi phí lưu trữ hợp lý và trải nghiệm chăm sóc khách hàng nhất quán.