Mô tả tính năng quản lý các dịch vụ OA trong EzyOA
Back to ezyoaTính năng quản lý dịch vụ OA là trung tâm cấu hình các kết nối giữa EzyPlatform và Zalo OA, Facebook Messenger, Telegram Bot hoặc những kênh nhắn tin được mở rộng thêm. Mỗi dịch vụ đại diện cho một tài khoản OA, Page hoặc bot độc lập, có thông tin xác thực, webhook và chính sách phản hồi riêng.
Danh sách dịch vụ OA

Trang danh sách cung cấp cái nhìn tổng quan về các dịch vụ đã cấu hình. Quản trị viên có thể:
- Tìm kiếm theo tên hoặc mã dịch vụ.
- Lọc theo trạng thái.
- Lọc theo loại dịch vụ xử lý.
- Sắp xếp và duyệt danh sách theo phân trang.
- Mở trang chi tiết hoặc chỉnh sửa dịch vụ.
- Kích hoạt hoặc vô hiệu hóa dịch vụ.
- Chọn dịch vụ mặc định.
Mỗi dịch vụ có thể sử dụng logo riêng để dễ nhận biết khi hệ thống vận hành nhiều OA hoặc bot cùng lúc.
Thông tin cấu hình

Thông tin của một dịch vụ được chia thành các nhóm sau.
Thông tin nhận diện
| Trường | Ý nghĩa |
|---|---|
| Mã dịch vụ | Định danh duy nhất của dịch vụ trong EzyOA |
| Tên dịch vụ | Tên hiển thị trên trang quản trị |
| Logo | Hình ảnh đại diện trong danh sách |
| Banner | Hình ảnh dùng cho phần trình bày chi tiết |
| Trạng thái | Trạng thái hoạt động của dịch vụ |
Mã dịch vụ được sử dụng để định tuyến webhook, callback xác thực, dữ liệu người dùng và lịch sử hội thoại. Vì vậy, mã nên được chọn ổn định ngay từ khi tạo dịch vụ.
Tên dịch vụ cũng phải duy nhất để tránh nhầm lẫn trong quá trình vận hành.
Thông tin ứng dụng
Tùy nhà cung cấp, dịch vụ có thể cần:
- App ID.
- UUID hoặc mã tài khoản ứng dụng.
- Phiên bản API.
- Client key.
- Secret key.
- Webhook secret.
- Code verifier và code challenge cho PKCE.
Không phải nền tảng nào cũng sử dụng tất cả các trường trên. Ví dụ, Telegram chủ yếu cần bot token và webhook secret, trong khi các nền tảng có OAuth có thể cần thêm App ID, App Secret và thông tin callback.
Địa chỉ dịch vụ
Cấu hình có thể chứa:
- URL trang dịch vụ hoặc trang OA.
- URL gốc của API nhà cung cấp.
- Webhook URL.
- Authentication callback URL.
- OAuth URL.
Webhook URL và callback URL được EzyOA tạo từ địa chỉ website, mã dịch vụ và khả năng của bộ xử lý tương ứng. Trang chi tiết hiển thị các URL này để quản trị viên sao chép sang trang cấu hình của nhà cung cấp.
Cấu hình vận hành
Dịch vụ còn có thể được gắn với:
- Kênh nhận thông báo.
- Mẫu thông báo dành cho nhân viên.
- Kịch bản phản hồi tin nhắn.
- Tham số riêng của kịch bản.
- Dịch vụ xử lý nền.
- Trạng thái kích hoạt.
Tạo dịch vụ mới

Quy trình tạo một dịch vụ OA gồm các bước chính:
flowchart TD
Start["Mở trang thêm dịch vụ"] --> Identity["Nhập mã và tên"]
Identity --> Handler["Chọn dịch vụ xử lý"]
Handler --> Credentials["Nhập thông tin ứng dụng và khóa"]
Credentials --> Scenario["Chọn template và cấu hình vận hành"]
Scenario --> Validate{"Dữ liệu hợp lệ?"}
Validate -- Không --> Error["Hiển thị lỗi cần sửa"]
Error --> Identity
Validate -- Có --> Save["Lưu cấu hình"]
Save --> Activate{"Kích hoạt ngay?"}
Activate -- Có --> Integration["Đăng ký webhook hoặc OAuth"]
Activate -- Không --> Draft["Giữ ở trạng thái chưa hoạt động"]
Khi lưu, hệ thống kiểm tra tối thiểu:
- Mã dịch vụ không được để trống.
- Mã dịch vụ không được trùng.
- Tên dịch vụ không được để trống.
- Tên dịch vụ không được trùng với dịch vụ khác.
- Dịch vụ tùy biến phải chọn một bộ xử lý nền hợp lệ.
Các yêu cầu về App ID, token, URL hoặc secret còn phụ thuộc vào từng nhà cung cấp. Việc lưu thành công không đồng nghĩa rằng nhà cung cấp đã chấp nhận webhook hoặc thông tin xác thực đã hoạt động.
Dịch vụ tích hợp sẵn và dịch vụ tùy biến
EzyOA có các bộ xử lý tích hợp sẵn cho những nền tảng được hỗ trợ. Ngoài ra, quản trị viên có thể tạo nhiều dịch vụ tùy biến dựa trên cùng một bộ xử lý.
Ví dụ:
Dịch vụ xử lý nền: TELEGRAM_BOT Các dịch vụ thực tế: - TELEGRAM_SUPPORT - TELEGRAM_SALES - TELEGRAM_INTERNAL
Mỗi dịch vụ thực tế có thể sử dụng token, webhook secret và cấu hình phản hồi riêng, trong khi vẫn dùng chung cách giao tiếp với Telegram.
flowchart LR
Handler["Bộ xử lý Messenger"] --> PageA["Facebook Page A"]
Handler --> PageB["Facebook Page B"]
Handler --> PageC["Facebook Page C"]
PageA --> SecretA["Thông tin xác thực A"]
PageB --> SecretB["Thông tin xác thực B"]
PageC --> SecretC["Thông tin xác thực C"]
Cơ chế này phù hợp với hệ thống đa thương hiệu, nhiều chi nhánh hoặc nhiều bộ phận chăm sóc khách hàng.
Trạng thái dịch vụ
Dịch vụ OA có ba trạng thái:
| Trạng thái | Ý nghĩa |
|---|---|
ACTIVATED | Dịch vụ đang hoạt động |
INACTIVATED | Dịch vụ tạm thời bị vô hiệu hóa |
ARCHIVED | Dịch vụ được lưu trữ để không còn dùng trong vận hành thông thường |
Quản trị viên có thể kích hoạt hoặc vô hiệu hóa nhanh từ danh sách dịch vụ.
Đối với webhook, EzyOA chỉ tiếp nhận sự kiện khi:
- Mã dịch vụ tồn tại.
- Có bộ xử lý tương ứng.
- Cấu hình đang ở trạng thái
ACTIVATED.
Nếu một trong các điều kiện trên không thỏa mãn, webhook được xem như không tồn tại.
stateDiagram-v2
[*] --> INACTIVATED: Tạo nhưng chưa sẵn sàng
INACTIVATED --> ACTIVATED: Kích hoạt
ACTIVATED --> INACTIVATED: Vô hiệu hóa
ACTIVATED --> ARCHIVED: Ngừng sử dụng
INACTIVATED --> ARCHIVED: Lưu trữ
Việc vô hiệu hóa chủ yếu kiểm soát luồng webhook đến. Đây không nên được xem là cơ chế thu hồi token từ nhà cung cấp. Khi ngừng một dịch vụ hoàn toàn, quản trị viên vẫn nên gỡ webhook và thu hồi token tại nền tảng tương ứng.
Dịch vụ mặc định
Một dịch vụ có thể được chọn làm dịch vụ OA mặc định.
Dịch vụ mặc định hữu ích khi module nghiệp vụ muốn gửi thông báo nhưng không chỉ định rõ kênh. Thay vì gắn cứng mã Zalo, Messenger hoặc Telegram trong mã nguồn, ứng dụng có thể sử dụng lựa chọn vận hành hiện tại.
Khi thay đổi dịch vụ mặc định, cần kiểm tra:
- Dịch vụ đã được cấu hình đầy đủ.
- Dịch vụ có thể gửi tin.
- Người nhận có định danh tương ứng trên kênh đó.
- Dịch vụ đáp ứng chính sách gửi tin của nhà cung cấp.
Việc đặt làm mặc định không tự động chuyển dữ liệu người dùng từ dịch vụ cũ sang dịch vụ mới.
Trang chi tiết dịch vụ
Trang chi tiết tập trung các thông tin và thao tác vận hành của một dịch vụ:
- Thông tin nhận diện và trạng thái.
- Cấu hình ứng dụng.
- Webhook URL.
- Authentication callback URL.
- OAuth URL nếu được hỗ trợ.
- Kịch bản phản hồi đang sử dụng.
- Tham số của kịch bản.
- Mẫu tin nhắn và thông báo.
- Công cụ gửi thử.
- Danh sách người dùng OA.
- Danh sách nhân viên chăm sóc khách hàng.
Một số URL hoặc nút chức năng chỉ xuất hiện khi bộ xử lý của nền tảng có hỗ trợ tính năng tương ứng.
Đăng ký webhook
Sau khi tạo và kích hoạt dịch vụ, quản trị viên sử dụng Webhook URL hiển thị tại trang chi tiết để cấu hình trên nền tảng nhắn tin.
Luồng xử lý tổng quát:
sequenceDiagram
participant A as Quản trị viên
participant E as EzyOA
participant P as Nhà cung cấp
A->>E: Tạo và kích hoạt dịch vụ
E-->>A: Hiển thị Webhook URL
A->>P: Đăng ký Webhook URL
P->>E: Gửi yêu cầu xác minh
E->>E: Kiểm tra mã và trạng thái dịch vụ
E->>E: Xác minh token hoặc chữ ký
E-->>P: Trả kết quả xác minh
P-->>A: Hoàn tất đăng ký webhook
Mỗi nền tảng có cơ chế xác minh riêng. EzyOA giao việc kiểm tra token, chữ ký và payload cho bộ xử lý của nền tảng đó.
Cấp quyền bằng OAuth
Nếu dịch vụ hỗ trợ OAuth, trang chi tiết có thể hiển thị URL xác thực và nút lấy access token.
Sau khi quản trị viên cho phép ứng dụng truy cập:
- Nhà cung cấp chuyển trình duyệt về callback của EzyOA.
- EzyOA xác định dịch vụ từ mã trên URL.
- Bộ xử lý kiểm tra tham số callback.
- Mã xác thực được đổi lấy token.
- Token hoặc dữ liệu liên quan được lưu vào cấu hình bảo mật.
- Trình duyệt được chuyển về trang chi tiết dịch vụ.
Các bước bổ sung như lấy Page ID, đăng ký Page hoặc làm mới token phụ thuộc vào từng nền tảng.
Quản lý kịch bản phản hồi
Mỗi dịch vụ có thể sử dụng kịch bản phản hồi tin nhắn văn bản. Quản trị viên có thể chọn kịch bản và nhập các tham số mà kịch bản yêu cầu.
Ví dụ, kịch bản chatbot có thể cần tham số xác định hồ sơ chatbot. Một kịch bản nghiệp vụ khác có thể cần mẫu nội dung hoặc nguồn dữ liệu riêng.
flowchart LR
Service["Dịch vụ OA"] --> Scenario["Kịch bản phản hồi"]
Scenario --> Parameters["Tham số riêng"]
Scenario --> Rule["Luồng nghiệp vụ"]
Scenario --> Chatbot["Chatbot"]
Rule --> Response["Câu trả lời"]
Chatbot --> Response
Tham số được lưu theo từng dịch vụ và từng kịch bản. Nhờ đó, hai OA dùng cùng một loại chatbot vẫn có thể sử dụng hồ sơ, vai trò hoặc cách trả lời khác nhau.
Mẫu thông báo cho nhân viên
Dịch vụ có thể chọn một content template dùng khi cần thông báo cho nhân viên chăm sóc khách hàng về tin nhắn mới.
Cấu hình này giúp mỗi OA sử dụng nội dung khác nhau, chẳng hạn:
- Tên thương hiệu.
- Nhóm hỗ trợ phụ trách.
- Đường dẫn tới hội thoại.
- Thông tin người gửi.
- Nội dung tin nhắn gần nhất.
Template chỉ định cách tạo nội dung; việc gửi còn phụ thuộc vào kênh thông báo và các module tích hợp liên quan.
Đồng bộ người theo dõi
Với nền tảng có hỗ trợ, quản trị viên có thể yêu cầu EzyOA lấy toàn bộ người theo dõi từ nhà cung cấp.
Thao tác này được dùng để:
- Khởi tạo danh sách người dùng sau khi kết nối OA.
- Bổ sung người dùng chưa từng gửi webhook tới hệ thống.
- Cập nhật dữ liệu phục vụ gửi tin hoặc chăm sóc khách hàng.
Khả năng này không bắt buộc đối với mọi loại dịch vụ. Nếu API nhà cung cấp không hỗ trợ lấy người theo dõi, thao tác có thể không khả dụng.
Gửi tin nhắn từ trang quản trị
Trang quản lý dịch vụ cho phép gửi tin đến một người nhận hoặc toàn bộ người dùng của dịch vụ.
Thông tin gửi có thể gồm:
- Mã người nhận.
- Nội dung văn bản.
- Media.
- Phương thức vận chuyển.
- Tùy chọn gửi cho tất cả người dùng.
Khi gửi cho một người, mã người nhận là bắt buộc. Khi gửi cho tất cả người dùng, EzyOA duyệt danh sách theo từng nhóm và ghi nhận:
- Tổng số lượt gửi.
- Số lượt thành công.
- Số lượt thất bại.
Nếu sử dụng transport mở rộng, hệ thống có thể thử API tiêu chuẩn trước rồi dùng extension cho những người nhận thất bại.
Đây là thao tác gửi tuần tự phục vụ vận hành; không phải hệ thống campaign phân tán, lập lịch hoặc kiểm soát tốc độ gửi quy mô lớn.
Gửi thông báo theo mẫu
Quản trị viên có thể gửi notification bằng:
- Mã người nhận.
- Mã template.
- Bộ tham số của template dưới dạng dữ liệu có cấu trúc.
Trước khi gửi, EzyOA kiểm tra:
- Người nhận không được để trống.
- Mã template không được để trống.
- Tham số phải có mặt.
- Tham số phải chuyển đổi được thành một đối tượng hợp lệ.
Việc template có được nhà cung cấp chấp nhận hay không vẫn phụ thuộc vào cấu hình và chính sách của nền tảng.
Bảo mật cấu hình
App secret, bot token, access token và webhook secret là dữ liệu nhạy cảm. Khi quản lý dịch vụ OA nên tuân thủ các nguyên tắc:
- Chỉ cấp quyền quản lý OA cho quản trị viên cần thiết.
- Không đưa khóa bí mật vào tài liệu công khai, log hoặc mã nguồn.
- Dùng thông tin xác thực riêng cho từng môi trường.
- Không dùng chung webhook secret cho nhiều dịch vụ.
- Thu hồi token khi dịch vụ không còn sử dụng.
- Cấp lại token ngay khi nghi ngờ bị lộ.
- Không gửi ảnh chụp màn hình có chứa token cho bên thứ ba.
Trang quản trị cần được bảo vệ bằng đăng nhập và quyền quản lý OA. Webhook tuy được công khai nhưng phải được xác thực theo cơ chế của từng nhà cung cấp.
Giới hạn cần lưu ý
Tính năng quản lý dịch vụ OA không tự động bảo đảm một cấu hình có thể kết nối thành công với nhà cung cấp. Quản trị viên vẫn cần hoàn tất các bước bên ngoài EzyOA như:
- Tạo ứng dụng hoặc bot.
- Cấp đúng quyền API.
- Đăng ký webhook.
- Thực hiện OAuth.
- Đưa ứng dụng sang chế độ hoạt động.
- Xin duyệt quyền hoặc template nếu nền tảng yêu cầu.
EzyOA cũng không tự động di chuyển người dùng và lịch sử hội thoại khi đổi dịch vụ mặc định hoặc thay mã dịch vụ.
Hiện không có thao tác xóa cứng dịch vụ trong luồng quản lý chính. Khi ngừng sử dụng, nên vô hiệu hóa hoặc lưu trữ dịch vụ để giữ lại liên kết với người dùng và dữ liệu hội thoại cũ.
Kết luận
Tính năng quản lý dịch vụ OA cho phép vận hành nhiều Zalo OA, Facebook Page và Telegram Bot trong cùng một hệ thống. Mỗi dịch vụ có cấu hình, thông tin xác thực, webhook, kịch bản phản hồi và tập người dùng riêng, nhưng vẫn sử dụng chung mô hình quản trị của EzyOA.
Cách tổ chức này giúp mở rộng thêm tài khoản hoặc kênh mới mà không làm thay đổi nghiệp vụ chung của ứng dụng.