❤️ AZDIGI chính thức cập nhật hệ thống blog mới hoàn chỉnh. Tuy nhiên có thể một số bài viết bị sai lệch hình ảnh, hãy ấn nút Báo cáo bài viết ở cuối bài để AZDIGI cập nhật trong thời gian nhanh nhất. Chân thành cám ơn.

Ở ba bài trước, bạn đã biết cách cài đặt OpenClaw, deploy lên VPStùy biến tính cách cho bot. Nhưng tất cả những gì bot làm được cho đến giờ vẫn là trả lời khi bạn hỏi. Còn khi bạn không hỏi thì sao?

Bài viết này sẽ giúp bạn biến OpenClaw từ một chatbot bị động thành một trợ lý chủ động. Bot có thể tự kiểm tra email mỗi sáng, nhắc lịch họp trước 30 phút, tổng hợp tin tức theo lịch cố định, hoặc phản ứng ngay khi server gặp sự cố. Tất cả đều tự động, không cần bạn ra lệnh.

OpenClaw cung cấp ba cơ chế tự động hoá chính: Cron Jobs (lên lịch chính xác), Heartbeats (kiểm tra định kỳ) và Webhooks (nhận sự kiện từ bên ngoài). Mỗi cơ chế phù hợp với một kiểu tác vụ khác nhau, và bài này sẽ hướng dẫn cả ba.

Ba cơ chế tự động hoá trong OpenClaw: Cron Jobs, Heartbeat và Webhooks

Heartbeat: Bot tự kiểm tra và báo cáo

Heartbeat là cơ chế đơn giản nhất và cũng là thứ bạn nên thiết lập đầu tiên. Cứ mỗi khoảng thời gian (mặc định 30 phút), OpenClaw sẽ “thức dậy”, đọc file HEARTBEAT.md trong workspace, và thực hiện những gì được ghi trong đó.

Cách hoạt động rất trực quan: bạn viết một checklist vào HEARTBEAT.md, bot sẽ đọc và xử lý. Nếu có gì quan trọng, bot sẽ gửi tin nhắn cho bạn qua Telegram, WhatsApp hay bất kỳ kênh nào đang kết nối. Nếu không có gì đáng nói, bot im lặng (trả về HEARTBEAT_OK) và không làm phiền bạn.

Ví dụ một file HEARTBEAT.md đơn giản:

# Heartbeat checklist
- Kiểm tra email có tin nhắn khẩn cấp không
- Xem lịch Google Calendar trong 2 giờ tới, nhắc nếu có cuộc họp
- Nếu đang có task chạy background thì báo kết quả
- Nếu không có gì, trả lời HEARTBEAT_OK

Mỗi lần heartbeat chạy, bot đọc checklist này và lần lượt kiểm tra từng mục. Điểm hay là heartbeat chạy trong main session, nghĩa là bot có toàn bộ context của cuộc trò chuyện gần đây. Nếu 5 phút trước bạn nhờ bot theo dõi một vấn đề nào đó, bot sẽ nhớ và có thể chủ động cập nhật khi heartbeat chạy.

Cấu hình heartbeat trong file ~/.openclaw/openclaw.json:

{
  "agents": {
    "defaults": {
      "heartbeat": {
        "every": "30m",
        "target": "last",
        "activeHours": {
          "start": "08:00",
          "end": "22:00"
        }
      }
    }
  }
}

Giải thích từng trường:

every: Khoảng cách giữa các lần chạy. "30m" là 30 phút, bạn có thể đặt "1h", "15m" tuỳ nhu cầu. Ngắn quá sẽ tốn token, dài quá sẽ bỏ lỡ thông tin quan trọng. 30 phút là mức cân bằng tốt cho đa số người dùng.

target: Nơi gửi thông báo khi có gì quan trọng. "last" nghĩa là gửi qua kênh chat gần nhất bạn dùng. Bạn cũng có thể chỉ định cụ thể "telegram", "whatsapp", hoặc "none" nếu không muốn nhận thông báo.

activeHours: Giờ hoạt động. Bot sẽ không chạy heartbeat ngoài khung giờ này, tránh bị quấy rầy lúc ngủ. Ví dụ trên là 8 giờ sáng đến 10 giờ tối.

Một mẹo hữu ích: bạn có thể nhờ bot tự cập nhật HEARTBEAT.md. Ví dụ nói “Thêm vào heartbeat: kiểm tra giá Bitcoin mỗi lần chạy” và bot sẽ tự sửa file cho bạn.

Cron Jobs: Lên lịch chính xác từng phút

Nếu heartbeat giống như việc bot “tỉnh dậy kiểm tra xung quanh” định kỳ, thì cron jobs giống như “đặt báo thức cho một việc cụ thể”. Cron chạy đúng giờ, đúng phút, và có thể lặp lại theo lịch cố định hoặc chạy một lần duy nhất.

Cron jobs được quản lý hoàn toàn qua CLI, không cần sửa file cấu hình. Dưới đây là các use case phổ biến với lệnh tương ứng.

Nhắc nhở một lần (one-shot)

Bạn đang làm việc và muốn được nhắc sau 20 phút để uống nước:

openclaw cron add \
  --name "Nhắc uống nước" \
  --at "2026-03-14T10:20:00+07:00" \
  --session main \
  --system-event "Nhắc nhở: Uống nước đi, ngồi lâu rồi đó!" \
  --wake now \
  --delete-after-run

Lệnh này tạo một nhắc nhở chạy đúng 10:20 sáng ngày 14/3/2026 (theo giờ Việt Nam). Flag --delete-after-run nghĩa là sau khi nhắc xong thì tự xoá, không lặp lại. Flag --wake now đảm bảo bot thực hiện ngay khi đến giờ, không chờ heartbeat tiếp theo.

Tổng hợp tin tức mỗi sáng

Bạn muốn mỗi sáng 7 giờ, bot tự tổng hợp tin tức công nghệ và gửi cho bạn qua Telegram:

openclaw cron add \
  --name "Tin tức buổi sáng" \
  --cron "0 7 * * *" \
  --tz "Asia/Ho_Chi_Minh" \
  --session isolated \
  --message "Tổng hợp 5 tin tức công nghệ nổi bật nhất trong 24 giờ qua. Viết ngắn gọn, mỗi tin 2-3 câu." \
  --announce \
  --channel telegram

Vài điểm cần lưu ý trong lệnh trên:

--cron "0 7 * * *" là cú pháp cron chuẩn 5 trường, nghĩa là “phút 0, giờ 7, mọi ngày, mọi tháng, mọi thứ”. Nếu bạn chưa quen cú pháp cron, có thể dùng crontab.guru để tạo biểu thức.

--session isolated nghĩa là job chạy trong một session riêng biệt, không ảnh hưởng đến cuộc trò chuyện chính. Điều này quan trọng vì bạn không muốn nội dung tin tức hàng ngày chiếm hết context window của main session.

--announce yêu cầu bot gửi kết quả đến kênh chat. Không có flag này, job chạy ngầm và không ai biết.

Báo cáo hàng tuần

openclaw cron add \
  --name "Báo cáo tuần" \
  --cron "0 9 * * 1" \
  --tz "Asia/Ho_Chi_Minh" \
  --session isolated \
  --message "Tổng hợp lại những gì đã làm trong tuần qua dựa trên memory files. Liệt kê theo ngày, highlight những thành quả và task còn dở dang." \
  --announce

Job này chạy 9 giờ sáng mỗi thứ Hai (* * 1 là thứ Hai trong cú pháp cron). Bot sẽ đọc các file memory trong tuần và tổng hợp thành báo cáo gửi cho bạn.

Quản lý cron jobs

Sau khi tạo xong, bạn có thể quản lý các jobs bằng các lệnh sau:

# Xem danh sách tất cả jobs
openclaw cron list

# Chạy thử một job ngay lập tức (test) openclaw cron run <job-id>

# Xem lịch sử chạy của một job openclaw cron runs --id <job-id>

# Xoá một job openclaw cron remove <job-id>

# Tạm dừng một job (không xoá) openclaw cron disable <job-id>

# Bật lại openclaw cron enable <job-id>

Ngoài CLI, bạn cũng có thể nhờ bot tạo cron job trực tiếp trong chat. Ví dụ nói “Mỗi ngày lúc 18h nhắc mình tập thể dục” và bot sẽ tự tạo cron job phù hợp.

Khi nào dùng Cron, khi nào dùng Heartbeat?

Đây là câu hỏi nhiều người mới dùng OpenClaw hay thắc mắc. Cả hai đều chạy tác vụ theo lịch, nhưng cách hoạt động rất khác nhau.

So sánh Cron Jobs và Heartbeat trong OpenClaw

Dùng Heartbeat khi:

Bạn muốn bot kiểm tra nhiều thứ cùng một lúc (email, lịch, thông báo) trong một lần chạy. Heartbeat gộp tất cả vào một agent turn, tiết kiệm token hơn nhiều so với tạo 5 cron jobs riêng biệt. Heartbeat cũng phù hợp khi bot cần context cuộc trò chuyện gần đây để đưa ra quyết định, ví dụ biết bạn đang bận họp nên không gửi thông báo không quan trọng.

Dùng Cron khi:

Bạn cần thời gian chính xác (“đúng 9 giờ sáng thứ Hai”), task không cần biết context cuộc trò chuyện, hoặc bạn muốn task chạy độc lập không ảnh hưởng main session. Cron cũng phù hợp cho nhắc nhở một lần (“nhắc mình sau 20 phút”) và các task nặng cần model mạnh hơn.

Nguyên tắc chung: Nếu task là “kiểm tra xem có gì mới không” thì dùng heartbeat. Nếu task là “làm việc X vào lúc Y” thì dùng cron. Và hoàn toàn có thể dùng cả hai song song.

Webhooks: Kết nối OpenClaw với thế giới bên ngoài

Heartbeat và Cron đều là bot tự khởi động theo lịch. Webhooks thì ngược lại: các dịch vụ bên ngoài gửi sự kiện đến OpenClaw, và bot phản ứng ngay lập tức.

Luồng hoạt động của Webhook trong OpenClaw

Ví dụ thực tế: bạn cấu hình GitHub gửi webhook đến OpenClaw mỗi khi có pull request mới. Bot nhận event, đọc nội dung PR, và gửi tóm tắt cho bạn qua Telegram. Hoặc hệ thống monitoring phát hiện server CPU cao, gửi webhook đến bot, bot tự động kiểm tra và đưa ra đề xuất xử lý.

Bật webhook trong cấu hình:

{
  "hooks": {
    "enabled": true,
    "token": "mat-khau-bi-mat-cua-ban",
    "path": "/hooks"
  }
}

Trường token là mật khẩu bảo vệ webhook endpoint. Mọi request gửi đến phải kèm token này trong header Authorization: Bearer mat-khau-bi-mat-cua-ban, nếu không sẽ bị từ chối. Hãy đặt một chuỗi phức tạp và không chia sẻ với ai.

OpenClaw cung cấp hai endpoint webhook:

POST /hooks/wake dùng để “đánh thức” bot trong main session. Gửi một sự kiện và bot sẽ xử lý trong context hiện tại:

curl -X POST http://localhost:18789/hooks/wake \
  -H "Authorization: Bearer mat-khau-bi-mat-cua-ban" \
  -H "Content-Type: application/json" \
  -d '{"text": "Server web01 CPU vượt 90% trong 5 phút", "mode": "now"}'

Bot sẽ nhận sự kiện này, phân tích trong context chính (biết về hệ thống của bạn nhờ TOOLS.md và MEMORY.md), và có thể tự kiểm tra hoặc gửi cảnh báo cho bạn.

POST /hooks/agent chạy một agent turn riêng biệt, phù hợp cho task phức tạp hơn:

curl -X POST http://localhost:18789/hooks/agent \
  -H "Authorization: Bearer mat-khau-bi-mat-cua-ban" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "Có PR mới trên repo backend: #142 - Refactor auth module. Đọc diff và tóm tắt thay đổi chính.",
    "name": "GitHub",
    "deliver": true,
    "channel": "telegram"
  }'

Endpoint này tạo một session isolated để xử lý, sau đó gửi kết quả qua Telegram. Tham số name giúp bot biết nguồn gốc event (ở đây là GitHub) để context rõ ràng hơn.

Ví dụ thực tế: kết nối với UptimeRobot

UptimeRobot là dịch vụ giám sát website phổ biến. Bạn có thể cấu hình để khi website down, UptimeRobot gửi webhook đến OpenClaw:

Trong UptimeRobot, vào Settings > Alert Contacts > Add Alert Contact, chọn Webhook. URL điền:

http://YOUR_VPS_IP:18789/hooks/agent

Thêm header Authorization: Bearer mat-khau-bi-mat-cua-ban. Body template:

{
  "message": "Website *monitorFriendlyName* đang *alertTypeFriendlyName*. URL: *monitorURL*. Thời gian: *alertDateTime*. Hãy kiểm tra ngay và thông báo cho mình.",
  "name": "UptimeRobot",
  "deliver": true,
  "channel": "telegram"
}

Khi website down, UptimeRobot gửi event đến OpenClaw, bot nhận và gửi cảnh báo cho bạn qua Telegram ngay lập tức. Bot thậm chí có thể tự SSH vào server kiểm tra nếu bạn đã cấu hình trong TOOLS.md.

Hooks: Tự động hoá bên trong Gateway

Ngoài webhooks (nhận event từ bên ngoài), OpenClaw còn có hooks nội bộ chạy khi các sự kiện xảy ra bên trong Gateway. Hooks giống như “event listeners” tự động thực thi mà không cần lên lịch.

OpenClaw đi kèm 4 hooks có sẵn:

session-memory: Tự động lưu context cuộc trò chuyện vào thư mục memory khi bạn gõ /new để bắt đầu phiên mới. Đảm bảo không mất thông tin quan trọng giữa các phiên.

command-logger: Ghi log tất cả lệnh vào file ~/.openclaw/logs/commands.log. Hữu ích cho việc debug hoặc theo dõi hoạt động.

boot-md: Khi Gateway khởi động, tự động chạy nội dung file BOOT.md trong workspace. Bạn có thể dùng để gửi thông báo “bot đã online” sau khi VPS reboot.

bootstrap-extra-files: Nạp thêm các file bổ sung vào bootstrap context ngoài danh sách mặc định.

Quản lý hooks bằng CLI:

# Xem danh sách hooks
openclaw hooks list

# Bật hook openclaw hooks enable session-memory

# Tắt hook openclaw hooks disable command-logger

Kết hợp tất cả: Một ngày của trợ lý AI tự động

Để bạn hình dung rõ hơn cách các cơ chế phối hợp với nhau, đây là ví dụ một ngày làm việc với OpenClaw đã cấu hình đầy đủ automation:

7:00 sáng (Cron): Bot tổng hợp 5 tin tức công nghệ nổi bật và gửi qua Telegram. Bạn đọc tin trong lúc uống cà phê.

8:30 sáng (Heartbeat): Bot kiểm tra email, thấy 2 email quan trọng, gửi tóm tắt. Kiểm tra lịch, thấy có cuộc họp lúc 9:00, nhắc bạn chuẩn bị.

9:00 sáng (Heartbeat): Bot thấy cuộc họp đang diễn ra, tự im lặng không gửi thông báo.

10:15 sáng (Webhook): UptimeRobot phát hiện website staging down. Bot nhận webhook, kiểm tra server, phát hiện Docker container bị crash, gửi cảnh báo kèm log lỗi cho bạn.

12:00 trưa (Cron): Nhắc nhở “Nghỉ trưa đi, đã ngồi máy 3 tiếng rồi”.

14:00 (Webhook): GitHub báo có PR mới từ đồng nghiệp. Bot đọc diff, tóm tắt thay đổi, gửi qua Telegram để bạn review nhanh.

17:00 (Heartbeat): Bot kiểm tra task còn dở dang, nhắc bạn commit code trước khi tan làm.

21:00 (Cron): Bot tổng hợp lại những gì đã làm trong ngày, ghi vào memory file.

22:00 (Heartbeat ngừng): Bot tự tắt heartbeat sau 22:00 theo cấu hình activeHours, không quấy rầy lúc ngủ.

Tất cả những điều trên xảy ra tự động. Bạn chỉ cần cấu hình một lần.

Lưu ý quan trọng về chi phí

Mỗi lần heartbeat hoặc cron job chạy, nó tiêu tốn token API (Claude hoặc GPT). Nếu bạn đặt heartbeat 15 phút một lần và chạy 14 tiếng mỗi ngày, đó là khoảng 56 agent turns mỗi ngày chỉ riêng heartbeat.

Với Claude Pro subscription ($20/tháng), lượng token này thường không phải vấn đề cho sử dụng cá nhân. Nhưng nếu bạn dùng API key trả theo token, hãy tính toán kỹ. Một số cách tiết kiệm:

Gộp nhiều task kiểm tra vào HEARTBEAT.md thay vì tạo nhiều cron jobs riêng biệt. Đặt heartbeat interval phù hợp (30 phút cho đa số trường hợp, 1 giờ nếu không cần real-time). Dùng activeHours để bot không chạy ngoài giờ làm việc. Với cron jobs nặng (phân tích dài), cân nhắc dùng model rẻ hơn bằng cách thêm tham số --model khi tạo job.

Kết luận

Với ba cơ chế Heartbeat, Cron Jobs và Webhooks, OpenClaw vượt xa khỏi khuôn khổ một chatbot thông thường. Bot không chỉ trả lời khi được hỏi mà còn chủ động giám sát, nhắc nhở và phản ứng với sự kiện từ bên ngoài.

Bạn không cần thiết lập tất cả ngay. Bắt đầu với HEARTBEAT.md đơn giản, thêm vài mục kiểm tra cơ bản. Khi quen rồi, tạo thêm cron jobs cho các task lặp lại. Cuối cùng, kết nối webhooks với các dịch vụ bạn đang dùng. Quá trình này diễn ra tự nhiên theo thời gian sử dụng.

Trong bài tiếp theo, mình sẽ hướng dẫn cách cài đặt và sử dụng Skills, hệ thống plugin mở rộng cho phép OpenClaw làm được nhiều thứ hơn nữa.

Các bài trong serie:

Chia sẻ:
Bài viết đã được kiểm duyệt bởi AZDIGI Team

Về tác giả

Thạch Phạm

Thạch Phạm

Đồng sáng lập và Giám đốc điều hành của AZDIGI. Có hơn 15 năm kinh nghiệm trong phổ biến kiến thức liên quan đến WordPress tại thachpham.com, phát triển website và phát triển hệ thống.

Hơn 10 năm phục vụ 80.000+ khách hàng

Bắt đầu dự án web của bạn với AZDIGI