> For the complete documentation index, see [llms.txt](https://docs.verge.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.verge.io/learn-the-platform/vi/module-8-nha-phat-trien-and-devops/06-task-engine.md).

# Task Engine & Webhooks

VergeOS **Bộ máy Tác vụ** là một khung tự động hóa tích hợp sẵn, cho phép các thao tác theo sự kiện và theo lịch mà không cần công cụ bên ngoài. Thay vì viết script hoặc phụ thuộc vào các cron job trên những máy riêng biệt, quản trị viên định nghĩa tác vụ, gắn trình kích hoạt và để nền tảng tự động thực thi hành động. Bộ máy Tác vụ là phần bổ sung gốc cho các công cụ API và IaC được đề cập trước đó trong mô-đun này — nơi Terraform và Ansible quản lý việc cung cấp tài nguyên, Bộ máy Tác vụ xử lý tự động hóa vận hành hằng ngày ngay trong hệ thống đang chạy.

## Các Thành phần của Bộ máy Tác vụ

Bộ máy Tác vụ sử dụng sáu khối xây dựng mô-đun có thể kết hợp theo nhiều cách linh hoạt:

| Thành phần         | Mô tả                                                                                                               |
| ------------------ | ------------------------------------------------------------------------------------------------------------------- |
| **Tác vụ**         | Định nghĩa hành động cần thực hiện (ví dụ: tắt một VM, gửi thông báo)                                               |
| **Lịch**           | Xác định khi nào và tần suất tác vụ nên chạy (ví dụ: hằng ngày, hằng tuần, một lần)                                 |
| **Sự kiện**        | Định nghĩa các điều kiện kích hoạt một tác vụ (ví dụ: người dùng đăng nhập, đồng bộ thất bại)                       |
| **Webhook**        | Đẩy dữ liệu đến các hệ thống bên ngoài qua HTTP POST theo thời gian thực                                            |
| **Script**         | Các khối xây dựng tự động hóa có thể lập trình được hiển thị trên Bảng điều khiển Tác vụ (xem phần Script bên dưới) |
| **Nhật ký Tác vụ** | Ghi lại lịch sử tạo và thực thi tác vụ để kiểm tra và khắc phục sự cố                                               |

Tất cả các thành phần đều được truy cập từ **Hệ thống → Bảng điều khiển Tác vụ** trong giao diện VergeOS.

```mermaid
flowchart LR
    subgraph Bộ kích hoạt
        E[Trình kích hoạt sự kiện<br/>đăng nhập người dùng, lỗi đồng bộ]
        S[Trình kích hoạt lịch<br/>hằng ngày, hằng tuần, một lần]
    end

    subgraph Hành động
        T1[Tác vụ: Bật VM]
        T2[Tác vụ: Gửi Email]
        T3[Tác vụ: Gửi Webhook]
    end

    subgraph Bên ngoài
        SL[Kênh Slack]
        EM[Email / SMTP]
        ZP[Zapier / Giám sát]
    end

    E --> T1
    E --> T2
    E --> T3
    S --> T1
    S --> T2
    T3 --> SL
    T3 --> ZP
    T2 --> EM
```

## Kiến trúc Tự động hóa Mô-đun

Một điểm mạnh then chốt của Bộ máy Tác vụ là **nhiều-nhiều** mô hình quan hệ. Các thành phần không bị khóa vào các cặp một-một:

* **Nhiều tác vụ hoặc sự kiện → một webhook** — Cấu hình một webhook một lần và kích hoạt nó từ nhiều sự kiện khác nhau (lỗi đồng bộ, lần đăng nhập, cảnh báo hệ thống). Điều này tập trung hóa các tích hợp bên ngoài và giảm trùng lặp.
* **Một tác vụ → nhiều sự kiện** — Tác vụ "Bật VM" có thể chạy khi một người dùng cụ thể đăng nhập *hoặc* khi một cửa sổ bảo trì theo lịch bắt đầu. Tái sử dụng định nghĩa tác vụ trên nhiều kịch bản.
* **Một lịch → nhiều tác vụ** — Định nghĩa một cửa sổ bảo trì hằng tuần một lần và liên kết nó với các tác vụ cập nhật, cảnh báo và tắt máy. Nhất quán mà không bị trôi cấu hình.

Thiết kế có thể kết hợp này có nghĩa là bạn xây dựng một thư viện các tác vụ, lịch và webhook có thể tái sử dụng, rồi nối chúng với nhau khi nhu cầu vận hành thay đổi.

## Trình kích hoạt dựa trên sự kiện

Trình kích hoạt sự kiện tự động chạy tác vụ khi phát hiện một diễn biến cụ thể của hệ thống. Khi tạo một sự kiện, bạn chọn:

1. **Loại** — Loại đối tượng (ví dụ: Người dùng, Máy ảo, Cảnh báo, Tenant, Đồng bộ đi)
2. **Sự kiện** — Diễn biến cụ thể (ví dụ: Đăng nhập, Đăng xuất, Bật nguồn, Lỗi, Thay đổi trạng thái)
3. **Phiên bản đối tượng hoặc thẻ** — Hoặc một đối tượng cụ thể (một người dùng hoặc VM nhất định) hoặc một thẻ khớp với một nhóm đối tượng

### Các mẫu trình kích hoạt sự kiện phổ biến

| Loại sự kiện | Sự kiện ví dụ         | Hành động điển hình                                     |
| ------------ | --------------------- | ------------------------------------------------------- |
| Người dùng   | Đăng nhập / Đăng xuất | Bật/tắt các VM GPU cho người dùng đã đăng nhập          |
| Đồng bộ đi   | Lỗi                   | Gửi thông báo Slack + cảnh báo email                    |
| Máy ảo       | Bật nguồn / Tắt nguồn | Ghi nhật ký vào hệ thống giám sát bên ngoài qua webhook |
| Cảnh báo     | Mức độ lỗi            | Gửi thông báo email cho nhóm vận hành                   |
| Cảnh báo     | Được kích hoạt        | Gửi webhook tới PagerDuty hoặc ca trực                  |

{% hint style="success" %}
**Trình kích hoạt dựa trên thẻ**

Thay vì tạo các sự kiện riêng cho từng VM, hãy gán một **thẻ** dùng chung (ví dụ: `gpu-workstation`) cho các VM liên quan. Sau đó cấu hình trình kích hoạt sự kiện để khớp với thẻ đó — bất kỳ VM nào có thẻ này sẽ kích hoạt trình kích hoạt. Cách này dễ bảo trì hơn nhiều so với các sự kiện theo từng đối tượng.
{% endhint %}

## Trình kích hoạt dựa trên lịch

Trình kích hoạt lịch chạy tác vụ vào các thời điểm hoặc khoảng thời gian được xác định trước. VergeOS bao gồm một số lịch mặc định và hỗ trợ tạo lịch tùy chỉnh.

### Các tùy chọn cấu hình lịch

* **Lặp lại** — Lặp mỗi N ngày, giờ, phút, tuần, tháng hoặc năm, với lựa chọn ngày/giờ cụ thể
* **Một lần** — Chọn "Không lặp lại" và chỉ định một ngày giờ bắt đầu duy nhất
* **Ngày kết thúc** — Lịch lặp lại mặc định là vô thời hạn; có thể tùy chọn đặt ngày kết thúc

### Các mẫu lịch phổ biến

| Lịch                        | Trường hợp sử dụng                                           |
| --------------------------- | ------------------------------------------------------------ |
| Mỗi thứ Bảy lúc 5 giờ chiều | Kiểm tra và tải xuống các bản cập nhật hệ thống              |
| Mỗi thứ Sáu lúc 6 giờ chiều | Tắt các VM tiêu tốn nhiều tài nguyên vào cuối giờ làm việc   |
| Ngày cụ thể trong tương lai | Vô hiệu hóa tài khoản nhân viên tạm thời 30 ngày sau khi tạo |
| Mỗi ngày lúc nửa đêm        | Chạy kiểm tra xác minh sao lưu tenant                        |
| Ngày đầu tiên mỗi tháng     | Tạo báo cáo sử dụng tài nguyên                               |

## Webhook

Webhook cho phép nhắn tin đẩy đến các hệ thống bên ngoài khi tác vụ thực thi. Thay vì các hệ thống bên ngoài truy vấn VergeOS để lấy trạng thái, nền tảng chủ động gửi các yêu cầu HTTP POST đến các URL được xác định trước khi các điều kiện cấu hình được đáp ứng.

### Cấu hình Webhook

Khi tạo một webhook, bạn cấu hình:

| Trường                               | Mô tả                                                                   |
| ------------------------------------ | ----------------------------------------------------------------------- |
| **Tên**                              | Định danh mô tả cho webhook                                             |
| **URL**                              | Điểm cuối API trên hệ thống bên ngoài chấp nhận yêu cầu HTTP POST       |
| **Loại xác thực**                    | Bearer Token, API Key, Basic (tên người dùng/mật khẩu), hoặc None       |
| **Tiêu đề**                          | Các tiêu đề HTTP tùy chỉnh (mặc định: `content-type: application/json`) |
| **Cho phép chứng chỉ không an toàn** | Dành cho chứng chỉ tự ký trong môi trường dev/test                      |
| **Thời gian chờ**                    | Số giây tối đa để chờ phản hồi (tối thiểu 3)                            |
| **Số lần thử lại**                   | Số lần thử lại khi thất bại hoặc không có phản hồi                      |

### Biến tải trọng

Tải trọng của tác vụ webhook hỗ trợ các biến động được phân giải tại thời điểm thực thi:

| Thay đổi theo tình huống | Giá trị                                                                             |
| ------------------------ | ----------------------------------------------------------------------------------- |
| `${DATE}`                | Ngày/giờ hiện tại ở định dạng chuỗi đầy đủ (ví dụ: `Thu, 16 Oct 2025 11:38:07 EDT`) |
| `${TIMESTAMP}`           | Ngày/giờ hiện tại dưới dạng số nguyên epoch (ví dụ: `1760629087`)                   |
| `${RANDOM}`              | Số nguyên được tạo ngẫu nhiên                                                       |
| `${NAME}`                | Tên của đối tượng VergeOS áp dụng                                                   |

### Các trường hợp sử dụng Webhook

* Gửi một **thông báo Slack** tới một kênh quản trị khi một công việc đồng bộ tạo ra lỗi
* Đăng lên một **hệ thống kế toán** khi một tenant lên online, kích hoạt thanh toán tự động
* Kích hoạt một **quy trình Zapier** khi một VM cụ thể bật nguồn, khởi tạo các hành động liên ứng dụng

## Ví dụ thực hành 1: Tự động Bật/Tắt các VM GPU

Ví dụ này minh họa cách thẻ, tác vụ, sự kiện và lịch hoạt động cùng nhau để quản lý các khối lượng công việc GPU tiêu tốn nhiều tài nguyên.

**Tình huống:** Người dùng JThompson sử dụng nhiều VM chạy bằng GPU cho mô hình 3D. Các VM này tiêu thụ đáng kể năng lực tính toán và bộ nhớ — để chúng chạy khi không hoạt động là lãng phí.

**Mục tiêu:** Bật các VM khi JThompson đăng nhập, tắt chúng khi đăng xuất và thực thi việc tắt máy lúc 6 giờ chiều thứ Sáu như một biện pháp an toàn.

### Các bước cấu hình

1. **Tạo một thẻ** — Trong Hệ thống → Thẻ, tạo một danh mục `VM` với thẻ `JThompson-GPU`. Gán thẻ này cho các VM mục tiêu.
2. **Tạo tác vụ "Bật nguồn"** — Hệ thống → Bảng điều khiển Tác vụ → Tác vụ mới. Đặt Loại đối tượng thành `Máy ảo`, chọn thẻ `JThompson-GPU`, và đặt Hành động thành `Bật nguồn`.
3. **Thêm trình kích hoạt sự kiện đăng nhập** — Từ bảng điều khiển tác vụ, thêm Trình kích hoạt sự kiện: Loại = `Người dùng`, Sự kiện = `Đăng nhập`, Đối tượng = `JThompson`.
4. **Tạo tác vụ "Tắt nguồn"** — Tác vụ mới với cùng lựa chọn thẻ nhưng Hành động = `Tắt nguồn`.
5. **Thêm trình kích hoạt sự kiện đăng xuất** — Trình kích hoạt sự kiện trên tác vụ tắt nguồn: Loại = `Người dùng`, Sự kiện = `Đăng xuất`, Đối tượng = `JThompson`.
6. **Tạo lịch thứ Sáu** — Lịch mới: Lặp mỗi 1 tuần vào thứ Sáu lúc 6:00 PM.
7. **Thêm trình kích hoạt lịch** — Gắn lịch thứ Sáu vào tác vụ "Tắt nguồn" như một Trình kích hoạt lịch.

**Kết quả:** Các VM tự động bật khi JThompson đăng nhập, tắt khi đăng xuất, và được đảm bảo tắt vào mỗi thứ Sáu lúc 6 giờ chiều bất kể trạng thái đăng nhập. Mẫu này áp dụng cho bất kỳ khối lượng công việc nào tiêu tốn nhiều tài nguyên — máy đào tạo ML, trạm dựng CAD, môi trường kiểm thử tích hợp hoặc cụm mô hình tài chính.

## Ví dụ thực hành 2: Cảnh báo Slack + Email khi lỗi đồng bộ

Ví dụ này cho thấy cách webhook, tác vụ và sự kiện kết hợp để cung cấp cảnh báo đa kênh cho các hoạt động DR/BC.

**Tình huống:** Một nhà cung cấp dịch vụ cần nhận thông báo ngay lập tức khi các công việc đồng bộ ban đêm gặp lỗi, thông qua cả Slack và email.

### Các bước cấu hình

1. **Tạo một webhook** — Hệ thống → Bảng điều khiển Tác vụ → Webhook mới. Cấu hình URL webhook đến Slack, đặt Loại xác thực thành `Bearer Token` với mã bot Slack, và đặt content-type thành `application/json`.
2. **Tạo tác vụ email** — Tác vụ mới: Loại đối tượng = `Email`, cấu hình địa chỉ người nhận và nội dung thông báo.
3. **Tạo tác vụ webhook** — Tác vụ mới: Loại đối tượng = `Webhook`, chọn webhook Slack, Hành động = `Gửi`. Xác định tải trọng JSON:

   ```json
   {
     "text": "Cảnh báo lỗi đồng bộ: ${NAME} đã thất bại lúc ${DATE}"
   }
   ```
4. **Thêm trình kích hoạt sự kiện vào tác vụ webhook** — Loại = `Đồng bộ đi`, Sự kiện = `Lỗi`, chọn công việc đồng bộ cụ thể (hoặc dùng một thẻ cho nhiều lần đồng bộ).
5. **Thêm cùng trình kích hoạt sự kiện vào tác vụ email** — Cấu hình giống bước 4, liên kết với tác vụ email.

**Kết quả:** Khi bất kỳ công việc đồng bộ nào được giám sát tạo ra lỗi, cả kênh Slack và hộp thư email đều nhận cảnh báo đồng thời. Quản trị viên có thể điều tra kịp thời, tối đa hóa khả năng hoàn tất đồng bộ trong khoảng thời gian sẵn có.

{% hint style="success" %}
**Mở rộng bằng Thẻ**

Nếu bạn muốn cùng một trình kích hoạt áp dụng cho tất cả các đồng bộ đi, hãy gán một thẻ dùng chung (ví dụ: `critical-sync`) cho các công việc đồng bộ đó. Cấu hình trình kích hoạt để chạy với bất kỳ đồng bộ nào có thẻ đó — không cần tạo từng trình kích hoạt riêng cho mỗi lần đồng bộ.
{% endhint %}

## Tạo Tác vụ: Tham chiếu Nhanh

Mỗi tác vụ đều tuân theo cùng một mẫu tạo:

1. Đi tới **Hệ thống → Bảng điều khiển Tác vụ → Tác vụ mới**
2. Cấu hình: **Tên**, **Loại đối tượng**, **Đối tượng** (phiên bản cụ thể hoặc thẻ), **Hành động**, **Cài đặt**
3. Gắn một hoặc nhiều **Trình kích hoạt sự kiện** và/hoặc **Trình kích hoạt lịch**
4. Xác minh trong **Nhật ký Tác vụ** rằng tác vụ chạy đúng

Các tác vụ có một **Đã bật** cờ; bạn có thể tạm thời vô hiệu hóa một tác vụ nếu cần xác minh cấu hình trước khi kích hoạt nó, rồi bật lại khi sẵn sàng.

### Các trường của Tác vụ

**Tên** — Định danh mô tả **Loại đối tượng** — Phần của ứng dụng (VM, Mạng, Người dùng, Webhook, v.v.) **Đối tượng** — Mục tiêu hoặc thẻ cụ thể **Hành động** — Thao tác cần thực hiện **Xóa sau khi chạy** — Tùy chọn thực thi một lần

### Nhật ký Tác vụ

Mỗi lần thực thi tác vụ được ghi lại với: - Dấu thời gian và thời lượng - Trạng thái thành công/thất bại - Sự kiện hoặc lịch kích hoạt - Chi tiết đối tượng mục tiêu Nhật ký có thể truy cập từ Bảng điều khiển Tác vụ để kiểm tra.

## Script (Xem trước)

Tính năng **Script** tính năng, được giới thiệu trong VergeOS 26, đặt nền tảng cho các luồng tự động hóa do quản trị viên định nghĩa trong tương lai. Mặc dù hiện tại chỉ dành cho các hoạt động hệ thống nội bộ, nó đã được thiết kế với khả năng mở rộng trong tâm trí. Các bản phát hành tương lai sẽ mở rộng Script để hỗ trợ tự động hóa tùy chỉnh của quản trị viên trực tiếp trong nền tảng — bổ sung cho Bộ máy Tác vụ hiện có bằng logic có thể lập trình.

{% hint style="info" %}
**Bạn đang chuyển từ VMware hay Nutanix?**

Bộ máy Tác vụ được tích hợp vào VergeOS ở mọi cấp độ (bao gồm cả bên trong tenant) — không cần thiết bị điều phối riêng, không cần giấy phép tự động hóa bổ sung. Cấu hình trình kích hoạt sự kiện, lịch và webhook từ cùng giao diện mà bạn đã dùng cho VM và lưu trữ.
{% endhint %}

## Điểm chính

### Theo sự kiện

Kích hoạt tự động hóa từ các sự kiện hệ thống — người dùng đăng nhập/đăng xuất, lỗi đồng bộ, thay đổi trạng thái VM, điều kiện cảnh báo — mà không cần thăm dò hay bộ lập lịch bên ngoài.

### Theo lịch

Chạy tác vụ vào các thời điểm cụ thể bằng lịch tích hợp sẵn hoặc tùy chỉnh. Một lần hoặc lặp lại, với ngày kết thúc tùy chọn.

### Tích hợp bên ngoài

Đẩy thông báo tới Slack, email, Zapier hoặc bất kỳ điểm cuối HTTP nào thông qua webhook với xác thực, tiêu đề và logic thử lại có thể cấu hình.

### Mô-đun & Tái sử dụng

Quan hệ nhiều-nhiều giữa tác vụ, sự kiện, lịch và webhook. Xây dựng một lần, kết hợp tự do.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.verge.io/learn-the-platform/vi/module-8-nha-phat-trien-and-devops/06-task-engine.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
