Yêu cầu trước khi bắt đầu
- Đã xong Bước 2: Cài Claude AI
- 1 tài khoản Zalo riêng dành cho bot — không dùng tài khoản Zalo cá nhân chính của bạn (xem lý do ở mục bẫy bên dưới)
Cách hoạt động (nói với Claude AI để nó tự dựng)
Cài công cụ điều khiển Zalo (đã có sẵn code thật)
Đây cũng là mã nguồn mở có sẵn — đưa thẳng link cho Claude AI:
https://github.com/minhhoasqtt-prog/zalo-agent-cli.git
Nói: "Đọc repo ở link trên rồi cài cho tôi." Cài xong, đăng nhập bằng tài khoản Zalo RIÊNG (không phải tài khoản chính bạn nhắn tin cho khách hằng ngày).
Lấy code cầu nối thật (cùng repo với Lam Khuê bên Lark)
Kênh Zalo dùng chung 1 repo với kênh Lark (Bước 5) — nếu đã làm bước đó thì đã có sẵn, chưa thì đưa link này cho Claude AI:
https://github.com/truongminhkien/mentor-club-ai-assistant
Nói: "Đọc repo ở link trên, phần README mục 'Kênh điều khiển thứ 2: Zalo', rồi cài cho tôi." File cầu nối là scripts/zalo-bridge.mjs (độc lập hoàn toàn với lark-voice-bridge.mjs — nhớ đệm riêng, session riêng): lắng nghe tin gửi tới tài khoản Zalo bot → tự chạy Claude Code trả lời → gửi lại qua Zalo. Cùng file .env với Lark, điền thêm ZALO_OWNER_UID (chạy node zalo-whoami.mjs để lấy) và ZALO_AGENT_JS (đường dẫn tới index.js thật của zalo-agent-cli — bắt buộc, gọi qua file .cmd bọc ngoài trên Windows bị lỗi).
Đặt lịch chạy 24/7 + gắn watchdog — đã có sẵn trong repo
Đăng ký node scripts/zalo-bridge.mjs chạy khi khởi động máy, cộng thêm scripts/zalo-watchdog.mjs (đã viết sẵn, canh nhịp tim quá 35 phút không cập nhật thì tự kill + khởi động lại) — độc lập hoàn toàn với watchdog bên Lark, không dùng chung tiến trình.
Điền 1 lần, dán khối lệnh cho Claude AI
Điền các ô lấy được ở 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.
node zalo-whoami.mjs, tự nhắn 1 tin từ tài khoản chính sang tài khoản "trợ lý" — nó tự in ra uidFrom.
index.js thật của zalo-agent-cli vừa cài — để trống dễ gặp lỗi spawn EINVAL khi gọi qua file .cmd bọc ngoài trên Windows.
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. Dùng tài khoản Zalo chính của mình làm bot thì bot không nhận được tin gì cả
Zalo (kênh không chính thức) không đẩy sự kiện tin nhắn về cho chính chủ tài khoản gửi cho mình — nếu bạn tự nhắn cho chính tài khoản của mình, script sẽ không bao giờ "thấy" tin nhắn đó.
Cách gỡ: luôn dùng 1 tài khoản Zalo THỨ HAI, độc lập, chỉ để làm bot — bạn nhắn từ tài khoản chính sang tài khoản bot, script mới nhận được sự kiện.
2. Gửi tin nhắn báo lỗi "spawn EINVAL" trên Windows
Nếu script gọi thẳng file lệnh dạng .cmd (file khởi chạy kiểu Windows) mà không đi qua đúng cơ chế, Windows từ chối khởi chạy tiến trình với lỗi spawn EINVAL.
Cách gỡ: gọi thẳng chương trình chạy nền (ví dụ node.exe) kèm đường dẫn file mã nguồn thật, thay vì gọi qua file .cmd bọc ngoài.
3. Cùng lỗi "canh gác im lặng" và "tưởng sống mà đã chết" như bên Lark
Áp dụng đúng 2 cách gỡ đã ghi ở trang Bước 5: đặt thời hạn lặp rất lớn cho lịch canh gác, và đo "còn sống" bằng nhịp tim thật (chỉ cập nhật khi thực sự có sự kiện xảy ra) chứ không phải bộ đếm giờ độc lập.
Bước tiếp theo
Đã có 2 kênh trợ lý AI (Lark + Zalo), sang bước kế tiếp: cài GitHub — nơi lưu code và chạy tự động miễn phí, cần trước khi đăng Facebook tự động.
Sang bước 7: Cài GitHub →