Yêu cầu trước khi bắt đầu
- Đã xong Bước 4: Cài Lark
- Máy tính chạy được liên tục (server riêng, hoặc máy cá nhân bật xuyên suốt giờ làm việc)
Cách hoạt động (nói với Claude AI để nó tự dựng)
Tạo 1 App Lark riêng làm "Bot"
Yêu cầu Claude AI: "Tạo cho tôi 1 Lark Custom App tên [tên trợ lý của bạn], có quyền gửi/nhận tin nhắn (im:message, im:message:send_as_bot), bật nhận sự kiện tin nhắn qua Long Connection." Claude tự vào Lark Developer Console qua lark-cli để tạo.
Tạo thêm 1 Custom Bot Webhook (bắt buộc, hay bị bỏ sót)
Ngoài App Bot ở bước 1, cần thêm 1 "Custom Bot" riêng để gửi tin nhắn CHỮ trả lời về đúng nhóm/hội thoại: mở nhóm chat trên Lark → "..." → Group Bots (Bot nhóm) → thêm Custom Bot mới → khi tạo, tắt hẳn mục "Đặt xác nhận chữ ký" (nếu không tắt, code gửi tin sẽ bị từ chối vì không ký đúng) → copy lấy webhook URL, giữ riêng không đưa vào chat/ghi vào file công khai (URL này ai có cũng gửi tin được vào nhóm).
Lấy code thật (đã chạy sẵn cho Trương Minh Kiên, không phải để AI viết lại)
Đây là code Node.js thật đang chạy 24/7 trên máy tôi — đưa thẳng link này cho Claude AI:
https://github.com/truongminhkien/mentor-club-ai-assistant
Nói: "Đọc repo ở link trên rồi cài cho tôi, làm theo README.md và docs/00-PHIEU-INPUT.md." Bộ não của trợ lý là scripts/lark-voice-bridge.mjs: lắng nghe tin gửi tới App Bot vừa tạo → mỗi tin mới tự chạy Claude Code trả lời → gửi kết quả ngược lại qua webhook đã tạo ở Bước 2. Copy scripts/.env.example thành .env, điền OWNER_OPEN_ID + CONTROL_CHAT_ID (chạy node whoami.mjs, nhắn 1 tin vào nhóm để lấy) và LARK_WEBHOOK (webhook Bước 2).
Đặt lịch tự chạy 24/7
Yêu cầu Claude AI đăng ký scripts/start.ps1 (đã có sẵn trong repo) thành 1 tác vụ nền chạy khi khởi động máy (Windows: Task Scheduler; Mac/Linux: launchd/systemd). Không cần mở cửa sổ Terminal, script tự chạy ẩn.
Gắn "người canh gác" (watchdog) — đã có sẵn trong repo
scripts/watchdog.mjs đã viết sẵn: tự chạy lặp lại, kiểm tra bridge ở Bước 3 còn "nhịp tim" thật không (quá 35 phút không cập nhật coi như treo) — chết hoặc treo thì tự khởi động lại, báo qua chính kênh Lark. Chỉ cần đăng ký nó thành tác vụ nền lặp lại mỗi vài phút.
Điền 1 lần, dán khối lệnh cho Claude AI
Điền 3 ô lấy ở Bước 1-2 phía trên, khối lệnh bên dưới tự ghép lại — copy rồi dán thẳng vào Claude AI, không cần tự viết prompt.
node whoami.mjs, nhắn 1 tin vào nhóm điều khiển — nó tự in ra giá trị này.
.env không cần cài lại gì.
Chưa điền ô nào — khối lệnh đang ở dạng mẫu.
⚠ Bẫy đã gặp thật + cách gỡ
1. Một câu hỏi ra 3-4 câu trả lời giống hệt nhau
Bật script chạy nền nhiều lần (khởi động tay + watchdog tự khởi động lại đè lên nhau) mà không kiểm tra bản cũ đã tắt chưa → 2-3 tiến trình cùng lắng nghe, mỗi tin nhắn bị trả lời nhiều lần.
Cách gỡ: mỗi lần script khởi động, phải tự kiểm tra "có bản nào đang chạy sẵn không" (đọc file ghi mã tiến trình cũ, kiểm tra tiến trình đó còn sống thật không) — nếu còn sống thì tự thoát ngay, không chạy chồng lên.
2. "Người canh gác" tự dưng im lặng suốt nhiều giờ, không phát hiện được sự cố
Lịch chạy lặp lại mỗi vài phút (trên Windows Task Scheduler) bị thiếu 1 cấu hình bắt buộc là "thời hạn lặp" — không set thì lịch chỉ chạy đều trong khoảng 1-2 tiếng đầu rồi tự dừng hẳn, không báo lỗi gì, chỉ lặng lẽ ngừng canh gác.
Cách gỡ: khi tạo lịch lặp lại, luôn đặt rõ "thời hạn lặp" là 1 con số rất lớn (ví dụ 10 năm) thay vì để trống — để trống không có nghĩa là "chạy mãi mãi" như trực giác thường nghĩ. Đặt đúng rồi thì lịch tự sống lại cả sau khi khởi động lại máy, không cần thêm trigger "chạy khi khởi động" riêng.
3. Trợ lý vẫn "sống" (canh gác báo ổn) nhưng thực ra đã ngừng trả lời tin nhắn
Nếu "còn sống" chỉ được đo bằng việc tiến trình chưa bị tắt, thì phần lắng nghe tin nhắn bên trong có thể đã treo âm thầm (mất kết nối mạng, kẹt hàng chờ) mà tiến trình cha vẫn chạy — canh gác không phát hiện ra.
Cách gỡ: để trợ lý tự ghi lại "nhịp tim" (1 dòng thời gian) mỗi khi THỰC SỰ nhận được sự kiện gì đó, không phải chỉ 1 bộ đếm giờ độc lập chạy song song — canh gác kiểm tra nhịp tim đó, quá 35 phút không cập nhật thì coi như treo, tự kill và khởi động lại.
Bước tiếp theo
Đã có trợ lý AI qua Lark, sang bước kế tiếp: làm y hệt vậy nhưng qua Zalo — vì không phải khách hàng nào cũng dùng Lark.
Sang bước 6: Cài Lam Khuê (Zalo) →