# Tác vụ tự động

> Tạo, cấu hình và quản lý các tác vụ tự động để xử lý các quy trình lặp đi lặp lại trong hệ thống.

**Quyền truy cập:** **Xem danh sách tác vụ tự động hoá**, **Xem chi tiết một tác vụ**, **Tạo tác vụ tự động**, **Xoá tác vụ tự động** **Điều hướng:** `Tự động hóa` hoặc `/manage/automation/automations`

***

## Tổng quan

Module Tự động hóa cho phép bạn thiết lập các quy tắc tự động để thực hiện hành động khi một sự kiện cụ thể xảy ra trong hệ thống. Mỗi tác vụ bao gồm ba thành phần chính: sự kiện kích hoạt (trigger), điều kiện lọc (conditions) và hành động thực thi (action). Hệ thống hỗ trợ nhiều loại hành động bao gồm gửi email, gửi thông báo, gọi API, thêm/xóa khóa học và thêm/xóa nhóm tài khoản.

Tác vụ có thể được tạo từ đầu hoặc sử dụng mẫu tác vụ (template) có sẵn để bắt đầu nhanh hơn.

***

## Giao diện

### Trang danh sách tác vụ

Giao diện chính của module Tự động hóa có hai tab:

* **Danh sách**: Hiển thị bảng danh sách các tác vụ đã tạo, bao gồm các cột: STT, Tên tác vụ, Sự kiện kích hoạt, Hành động, Trạng thái, Lượt chạy và Ngày tạo.
* **Mẫu tác vụ**: Hiển thị các mẫu tác vụ được phân loại theo nhóm (Thêm khóa học, Xóa khóa học, Thêm nhóm, Xóa nhóm, Tiến độ học tập, Gửi thông báo đẩy, Xử lý đơn hàng).

Phía trên bảng có:

* Ô tìm kiếm theo tên tác vụ
* Bộ lọc thời gian
* Menu sắp xếp (mặc định, gần đây, cũ hơn, tên A-Z, tên Z-A)
* Nút "Tạo tác vụ mới" (chuyển sang tab Mẫu tác vụ)

### Trang cài đặt tác vụ

Khi nhấp vào một tác vụ, giao diện cài đặt chi tiết bao gồm các khu vực:

1. **Thông tin cơ bản**: Tên tác vụ, trạng thái bật/tắt, số lần chạy, số lần thành công
2. **Cài đặt sự kiện**: Sự kiện kích hoạt, hành động, thời điểm kích hoạt
3. **Giới hạn điều kiện thực thi**: Các điều kiện lọc trước khi thực hiện hành động
4. **Cài đặt hành động cụ thể**: Tùy thuộc loại hành động (email, thông báo, API, khóa học, nhóm)

***

## Tạo tác vụ mới

### Các bước

1. Truy cập **Tự động hóa** từ menu chính.
2. Nhấn nút **Tạo tác vụ mới** (hoặc chọn tab **Mẫu tác vụ**).
3. Hệ thống hiển thị các mẫu tác vụ theo nhóm. Chọn một mẫu phù hợp hoặc chọn "Tạo tác vụ tự động hóa từ đầu" để bắt đầu từ trắng.
4. Nhập **Tên tác vụ** trong hộp thoại tạo mới.
5. Nhấn **Tạo tác vụ** để xác nhận.
6. Hệ thống chuyển đến trang cài đặt chi tiết của tác vụ vừa tạo.

### Bảng mẫu tác vụ (Template Categories)

| Nhóm mẫu                    | Mô tả                                   |
| --------------------------- | --------------------------------------- |
| Thêm khóa học cho tài khoản | Tự động gán khóa học khi sự kiện xảy ra |
| Xóa khóa học của tài khoản  | Tự động gỡ khóa học khỏi tài khoản      |
| Thêm nhóm tài khoản         | Tự động thêm tài khoản vào nhóm         |
| Xóa nhóm tài khoản          | Tự động xóa tài khoản khỏi nhóm         |
| Tiến độ học tập             | Hành động khi tiến độ học tập thay đổi  |
| Gửi thông báo đẩy           | Tự động gửi thông báo push              |
| Xử lý đơn hàng              | Hành động liên quan đến đơn hàng        |

***

## Cấu hình sự kiện kích hoạt

### Các bước

1. Trong trang cài đặt tác vụ, tìm khu vực **Cài đặt sự kiện**.
2. Chọn **Sự kiện kích hoạt** từ danh sách dropdown.
3. Chọn **Hành động** muốn thực hiện (lưu ý: một số hành động có thể bị khóa hoặc không tương thích với sự kiện đã chọn).
4. Chọn **Thời điểm kích hoạt hành động**.
5. Nhấn **Cập nhật** để lưu thay đổi.

### Danh sách sự kiện kích hoạt

#### Sự kiện tài khoản

| Sự kiện                     | Mã sự kiện          | Hành động hỗ trợ                             |
| --------------------------- | ------------------- | -------------------------------------------- |
| Tạo tài khoản mới           | USER\_CREATED       | Email, Thông báo, Khóa học, Nhóm, API, Popup |
| Xóa tài khoản               | USER\_REMOVED       | Email, API, Popup                            |
| Cập nhật tài khoản          | USER\_UPDATED       | Email, Thông báo, Khóa học, Nhóm, API, Popup |
| Kích hoạt khóa học          | USERCOURSE\_ADDED   | Email, Thông báo, Khóa học, Nhóm, API, Popup |
| Xóa khóa học khỏi tài khoản | USERCOURSE\_REMOVED | Email, Thông báo, Nhóm, API, Popup           |
| Thêm tài khoản vào nhóm     | USERGROUP\_ADDED    | Email, Thông báo, Khóa học, API, Popup       |
| Xóa tài khoản khỏi nhóm     | USERGROUP\_REMOVED  | Email, Thông báo, Khóa học, API, Popup       |
| Contact mới                 | CONTACT\_NEW        | Email, API                                   |

#### Sự kiện học tập

| Sự kiện                | Mã sự kiện                      | Hành động hỗ trợ                             |
| ---------------------- | ------------------------------- | -------------------------------------------- |
| Bắt đầu vào lớp học    | USERACTIVE\_CREATED             | Email, Thông báo, Khóa học, Nhóm, API, Popup |
| Hoàn thành khóa học    | USERACTIVE\_COMPLETED           | Email, Thông báo, Khóa học, Nhóm, API, Popup |
| Thay đổi % hoàn thành  | USERACTIVE\_PROGRESS\_UPDATE    | Email, Thông báo, Khóa học, Nhóm, API, Popup |
| Hoàn thành một bài học | USERPROGRESS\_LESSON\_COMPLETED | Email, Thông báo, Khóa học, Nhóm, API, Popup |
| Thảo luận mới          | COMMENT\_CREATED                | Email, API                                   |

#### Sự kiện khảo sát

| Sự kiện           | Mã sự kiện      | Hành động hỗ trợ                             |
| ----------------- | --------------- | -------------------------------------------- |
| Hoàn thành Survey | SURVEY\_UPDATED | Email, Thông báo, Khóa học, Nhóm, API, Popup |

***

## Cấu hình thời điểm thực thi

### Các bước

1. Trong khu vực **Cài đặt sự kiện**, chọn **Thời điểm kích hoạt hành động**.

| Thời điểm                      | Mô tả                                                      |
| ------------------------------ | ---------------------------------------------------------- |
| Ngay lập tức (IMMEDIATE)       | Hành động được thực hiện ngay khi sự kiện xảy ra           |
| Lên lịch (SCHEDULED)           | Hành động thực hiện sau một khoảng thời gian kể từ sự kiện |
| Thời điểm chỉ định (SPECIFIED) | Hành động thực hiện vào một thời điểm cố định cụ thể       |

2. Nếu chọn **Lên lịch**: Nhập giá trị thời gian và chọn đơn vị thời gian (giây, phút, giờ, ngày, tuần, tháng).
3. Nếu chọn **Thời điểm chỉ định**: Chọn ngày và giờ cụ thể.
4. (Tùy chọn) Bật **Lặp lại hành động** cho các hành động Email, API, Thông báo:
   * Nhập số lần lặp lại (0-30)
   * Nhập khoảng thời gian giữa các lần lặp
   * Chọn đơn vị thời gian

***

## Cấu hình điều kiện thực thi

Hệ thống cho phép đặt điều kiện lọc để hành động chỉ thực thi khi các điều kiện được thỏa mãn. Nếu tác vụ được lên lịch, điều kiện sẽ được kiểm tra lại tại thời điểm chạy.

### Các bước

1. Trong khu vực **Giới hạn điều kiện thực thi hành động**, chọn cách khớp điều kiện:
   * **Tất cả điều kiện đúng (AND)**: Mọi điều kiện phải đúng
   * **Chỉ cần một điều kiện đúng (OR)**: Bất kỳ điều kiện nào đúng
2. Nhấn **Thêm điều kiện** để thêm dòng điều kiện mới.
3. Với mỗi điều kiện, cấu hình:

| Trường                    | Mô tả                                                                                                                                                   |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Điều kiện (leftField)     | Chọn trường dữ liệu hoặc điều kiện nâng cao để so sánh                                                                                                  |
| Toán tử so sánh           | Chọn toán tử (bằng, lớn hơn hoặc bằng, nhỏ hơn hoặc bằng, khác, chứa, không chứa, tồn tại, không tồn tại, đúng, sai, rỗng, thuộc, không thuộc, đạt mốc) |
| Đích so sánh (rightField) | Chọn hoặc nhập giá trị đích để so sánh                                                                                                                  |

4. Để xóa điều kiện, nhấn biểu tượng thùng rác và chọn **Xóa**.
5. Nhấn **Cập nhật** để lưu thay đổi.

***

## Cấu hình hành động

### Gửi Email (EMAIL)

| Trường                     | Bắt buộc                                  | Mô tả                                               |
| -------------------------- | ----------------------------------------- | --------------------------------------------------- |
| Tên hành động              | Có                                        | Tên nhận dạng hành động email                       |
| Gửi đến người dùng sự kiện | Không                                     | Gửi email đến người dùng liên quan đến sự kiện      |
| Địa chỉ nhận               | Có (nếu không gửi đến người dùng sự kiện) | Địa chỉ email nhận                                  |
| Tiêu đề email              | Có                                        | Tiêu đề email, hỗ trợ biến dữ liệu sự kiện          |
| Nội dung email             | Có                                        | Nội dung email, hỗ trợ biến dữ liệu sự kiện và HTML |

### Gửi Thông báo (NOTIFICATION)

| Trường                     | Bắt buộc                                  | Mô tả                                              |
| -------------------------- | ----------------------------------------- | -------------------------------------------------- |
| Tên hành động              | Có                                        | Tên nhận dạng hành động thông báo                  |
| Gửi đến người dùng sự kiện | Không                                     | Gửi thông báo đến người dùng liên quan đến sự kiện |
| Địa chỉ nhận               | Có (nếu không gửi đến người dùng sự kiện) | ID người dùng nhận thông báo                       |
| Nội dung thông báo         | Có                                        | Nội dung thông báo hiển thị                        |
| Đường dẫn                  | Không                                     | Link kèm theo thông báo                            |

### Gọi API (API)

| Trường       | Bắt buộc | Mô tả                                                                      |
| ------------ | -------- | -------------------------------------------------------------------------- |
| Phương thức  | Có       | GET, POST, PUT hoặc DELETE                                                 |
| URL          | Có       | Địa chỉ API cần gọi                                                        |
| Content-Type | Không    | Kiểu nội dung (vd: application/json)                                       |
| Xác thực     | Không    | Kiểu xác thực: Token hoặc Basic                                            |
| Params       | Không    | Tham số truyền qua URL                                                     |
| Headers      | Không    | Custom headers                                                             |
| Body         | Không    | Dữ liệu gửi trong body (hỗ trợ các kiểu: Text, Array, Object, ArrayObject) |

Mỗi trường tham số (Params, Headers, Body) gồm:

* **field**: Tên trường gửi đi
* **originalField**: Trường dữ liệu gốc từ sự kiện (để map tự động)
* **fixedValue**: Giá trị cố định

### Thêm/Xóa khóa học (UPDATECOURSE)

| Trường          | Bắt buộc | Mô tả                                               |
| --------------- | -------- | --------------------------------------------------- |
| Loại            | Có       | ADD (thêm) hoặc REMOVE (xóa)                        |
| Số ngày sử dụng | Không    | Số ngày hạn sử dụng khóa học (chỉ áp dụng khi thêm) |
| Khóa học        | Có       | Danh sách khóa học cần thêm hoặc xóa                |

### Thêm/Xóa nhóm (UPDATEGROUP)

| Trường | Bắt buộc | Mô tả                                      |
| ------ | -------- | ------------------------------------------ |
| Loại   | Có       | ADD (thêm) hoặc REMOVE (xóa)               |
| Nhóm   | Có       | Danh sách nhóm tài khoản cần thêm hoặc xóa |

***

## Bật/Tắt tác vụ

### Các bước

1. Mở trang cài đặt của tác vụ.
2. Trong khu vực **Thông tin cơ bản**, sử dụng công tắc **Trạng thái** để bật hoặc tắt tác vụ.
   * **Đang hoạt động**: Tác vụ sẽ xử lý khi sự kiện xảy ra
   * **Đang tắt**: Tác vụ tạm dừng, không xử lý sự kiện
3. Nhấn **Cập nhật** để lưu thay đổi.

***

## Nhân bản tác vụ

### Các bước

1. Tại trang danh sách tác vụ, tìm tác vụ muốn nhân bản.
2. Nhấn biểu tượng menu (...) bên phải tác vụ.
3. Chọn **Nhân bản**.
4. Hệ thống tạo bản sao của tác vụ với cấu hình tương tự.

***

## Xóa tác vụ

### Các bước

1. Tại trang danh sách tác vụ, tìm tác vụ muốn xóa.
2. Nhấn biểu tượng menu (...) bên phải tác vụ.
3. Chọn **Xóa**.
4. Xác nhận xóa trong hộp thoại xác nhận.

***

## Trạng thái tác vụ

| Trạng thái       | Mô tả                           |
| ---------------- | ------------------------------- |
| **Bản nháp**     | Bản nháp, chưa hoạt động        |
| **Đang xem xét** | Đang xem xét                    |
| **Đã xuất bản**  | Đã xuất bản, sẵn sàng hoạt động |
| **Đã lưu trữ**   | Đã lưu trữ                      |

***

## Trạng thái thực thi

Mỗi lần tác vụ chạy, hệ thống ghi nhận kết quả:

| Trạng thái     | Mô tả               |
| -------------- | ------------------- |
| **Chờ xử lý**  | Đang chờ xử lý      |
| **Thành công** | Thực thi thành công |
| **Thất bại**   | Thực thi thất bại   |

***

## Lưu ý

* Tác vụ chỉ hoạt động khi trạng thái được bật (status = true) và trạng thái là **Đã xuất bản**.
* Điều kiện lọc được kiểm tra lại tại thời điểm thực thi đối với các tác vụ lên lịch, giúp đảm bảo dữ liệu cập nhật.
* Hệ thống hỗ trợ lặp lại hành động tối đa 30 lần cho các loại Email, Thông báo và API.
* Khi sử dụng biến dữ liệu sự kiện trong email hoặc thông báo, định dạng là tên trường sự kiện (vd: `username`, `email`, `course_title`).
* Gọi API hỗ trợ xác thực dạng Token và Basic Auth.
* Tác vụ "Thêm/xóa khóa học" và "Thêm/xóa nhóm" chỉ ảnh hưởng đến người dùng liên quan đến sự kiện kích hoạt.
* Cần quyền **Tạo tác vụ tự động** để tạo tác vụ mới, quyền **Xoá tác vụ tự động** để xóa tác vụ.
* Module Tự động hóa có thể bị giới hạn bởi gói dịch vụ (hiển thị thông báo nâng cấp khi vượt giới hạn).

***

## Xem thêm

* [Tổng quan Tự động hóa](https://docs.noova.vn/truyen-thong-va-he-thong/08-tu-dong-hoa) -- Giới thiệu chung về module Tự động hóa
