Hướng dẫn gửi Zalo tự động từ file Excel bằng Codex — không cần biết code
Nếu bạn đang phải mở Zalo lên, dò từng số trong file Excel, gõ lời mời rồi gửi — rồi làm lại với số kế tiếp — bài này dành cho bạn.
Mình đã build một tool mã nguồn mở để làm đúng việc đó: đọc danh sách số điện thoại từ file Excel, tự điều khiển Zalo PC gửi từng tin — và dùng được hoàn toàn qua Codex, không cần chạm vào code.
Repo: github.com/dxhuong/zalo-pc-local-sender-helper

Tool này làm gì, chạy thế nào
Tool đọc file contacts.csv (chuyển từ Excel của bạn), lấy số điện thoại và nội dung từng dòng, rồi tự điều khiển Zalo PC để tìm từng số và gửi tin. Toàn bộ chạy local trên máy Windows — không qua API Zalo, không cần đăng ký thêm tài khoản.
Xem video youtube demo tại đây
Có hai chế độ chạy:
run_confirm — dừng lại hỏi bạn trước mỗi tin, bạn bấm xác nhận mới gửi. Dùng khi mới test.
run_auto_slow — tự gửi toàn bộ, nhưng nghỉ 20–45 giây giữa mỗi tin. Cố ý để chậm để Zalo không đánh dấu tài khoản bất thường.
⚠️ Tool này chỉ dùng để tự động hóa cho cá nhân: nhắn khách hàng quen, người đã đăng ký sự kiện — những người có lý do thật để nhận tin từ bạn.

Chuẩn bị gì trước khi bắt đầu
Bạn cần:
- Máy Windows (phiên bản cho macbook bên mình sẽ ra mắt sau)
- Zalo PC đã đăng nhập
- Codex có quyền chạy terminal
- Và file Excel danh sách người nhận.
Không cần gì thêm.
Bước 1 — Cài tool lần đầu
Mở Codex, tạo cuộc trò chuyện mới, paste nguyên đoạn này vào:
Hãy cài và test repo GitHub này trên máy Windows: https://github.com/dxhuong/zalo-pc-local-sender-helper
Làm lần lượt:
Clone repo về thư mục làm việc hiện tại.
Vào thư mục repo.
Chạy Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass nếu cần.
Chạy .\install_windows.ps1 để cài Python và dependency.
Chạy .\run_check.ps1 để kiểm tra contacts.csv.
Báo tôi kết quả test.
Chưa chạy gửi Zalo thật cho đến khi tôi xác nhận.
Codex tự clone, tự cài — bạn ngồi chờ kết quả.

Bước 2 — Cập nhật danh sách người nhận
Nếu bạn có file Excel sẵn, upload thẳng vào Codex và dùng prompt này:
Tôi vừa upload file Excel danh sách người nhận. Hãy đọc file Excel đó và cập nhật contacts.csv trong repo này.
Yêu cầu:
Tìm cột số điện thoại. Nếu tên cột không rõ, hãy suy luận từ dữ liệu.
Tìm cột nội dung tin nhắn. Nếu không có cột nội dung, hãy tạo nội dung cá nhân hóa lịch sự dựa trên tên nếu có.
Xuất đúng format CSV: phone,message
Chuẩn hóa số điện thoại: bỏ khoảng trắng, dấu chấm, dấu gạch ngang; giữ số 0 đầu nếu có.
Bỏ dòng thiếu số điện thoại.
Không chạy gửi Zalo thật.
Chạy .\run_check.ps1 để kiểm tra contacts.csv.
Báo lại tổng số dòng hợp lệ và các dòng bị bỏ qua nếu có.

Nếu Excel chỉ có tên và số, chưa có cột nội dung, Codex tự viết lời mời theo từng tên:
Hãy đọc file Excel tôi upload, dùng cột Tên và SĐT để tạo contacts.csv. Nội dung tin nhắn: "Chào {Tên}, đây là tin nhắn test từ hệ thống gửi Zalo tự động. Nếu nhận được tin này, vui lòng phản hồi giúp mình."
Yêu cầu:
Thay {Tên} bằng tên từng người.
Nếu thiếu tên, dùng "anh/chị".
Chuẩn hóa số điện thoại.
Chạy .\run_check.ps1 sau khi tạo xong.
Chưa gửi Zalo thật.
Bước 3 — Gửi lần đầu (chế độ xác nhận từng tin)
Mở Zalo PC lên, đăng nhập, để cửa sổ Zalo không bị thu nhỏ — script cần nhìn thấy Zalo để điều khiển được. Sau đó nói với Codex:
Tôi đã mở Zalo PC và đăng nhập. Hãy chạy .\run_confirm.ps1.
Mỗi tin sẽ dừng lại hỏi: s = gửi / k = bỏ qua / q = dừng
Chậm hơn, nhưng lần đầu nên đi từng bước — xem nó tìm đúng số không, gửi đúng nội dung không, rồi mới thả tự động.
Bước 4 — Chạy tự động khi đã quen
Test ổn rồi thì dùng:
Tôi đã mở Zalo PC và đăng nhập. Hãy chạy .\run_auto_slow.ps1.
Tool tự gửi, tự nghỉ 20–45 giây giữa các tin. Lần đầu chạy auto, đừng đưa 500 số vào ngay — thử 10–20 số trước, quan sát phản ứng của Zalo, tăng dần sau

Chi phí token Codex có tăng theo số tin không?
Không. Sau khi cài xong, script Python chạy thẳng trên máy bạn — Codex không dính vào bước gửi tin. Codex chỉ tốn token khi bạn nhờ nó làm gì đó như đọc Excel, tạo CSV, hay debug lỗi.
500 số ≠ 500 lần gọi Codex. Chi phí thực tế phụ thuộc vào bạn chuẩn bị dữ liệu bao nhiêu bước, không phải số lượng tin gửi đi.
Muốn tiết kiệm nhất: chuẩn bị sẵn Excel hai cột phone và message, rồi dùng prompt ngắn:
Đọc file Excel tôi upload, chỉ tạo contacts.csv gồm phone,message. Không giải thích dài. Sau đó chạy .\run_check.ps1. Chưa gửi Zalo thật.
Lần hai trở đi — không cần cài lại
Từ lần hai mở Codex lên dùng luôn:
Chạy lại tool Zalo sender trong repo hiện tại. Làm nhanh:
Không cài lại.
Chạy .\run_check.ps1 để kiểm tra contacts.csv.
Nhắc tôi mở Zalo PC và đăng nhập.
Khi tôi xác nhận đã mở Zalo, chạy .\run_confirm.ps1.
Nếu có lỗi, đọc zalo_sender.log và sửa.
Lưu ý: Mỗi luồng Codex mới là tờ giấy trắng — nó không nhớ repo cũ. Khi mở luồng mới, chỉ cho nó đường dẫn thư mục:
Hãy làm việc trong thư mục repo Zalo sender sau: C:\Users\ADMIN\Documents\Codex\zalo_pc_csv_sender
Việc cần làm:
cd vào thư mục đó.
Không cài lại dependency.
Chạy .\run_check.ps1 để kiểm tra contacts.csv.
Nhắc tôi mở Zalo PC và đăng nhập.
Khi tôi xác nhận đã mở Zalo, chạy .\run_confirm.ps1.
Nếu có lỗi, đọc zalo_sender.log và sửa.
Xử lý lỗi
Gặp lỗi thì nhắn thẳng với Codex:
đọc zalo_sender.log và sửa lỗi
Codex xem log, hiểu lỗi ở đâu, chỉnh script và hướng dẫn chạy lại. Hầu hết trường hợp không cần bạn làm gì thêm.
Tóm tắt quy trình
Lần đầu: Mở Codex → paste prompt cài repo → upload Excel / cập nhật contacts.csv → mở Zalo PC → chạy run_confirm.
Từ lần hai: Mở Codex → paste prompt chạy → cập nhật contacts.csv hoặc upload Excel mới → mở Zalo PC → chạy run_auto_slow.
Đội mình từng mất cả buổi chiều cho việc đáng lẽ xong trong 30 phút. Mình không muốn điều đó lặp lại ở đội của bạn — nên mới viết bài này và để repo public.
Repo: github.com/dxhuong/zalo-pc-local-sender-helper
Gặp khó khăn? Hỏi thẳng trong cộng đồng
Nếu bạn gặp lỗi không tự xử lý được, hoặc chỉ muốn hỏi thêm trước khi bắt tay làm — hãy tham gia group AI In Action và đặt câu hỏi trực tiếp, mình và cộng đồng sẽ hỗ trợ:
👉 slim.vn/link/zalo_aia
— Huong Dinh, SlimAI & SlimCRM