Dùng Codex quét website, lấy ảnh và tự đăng Facebook: một vòng từ Drive về Google Sheets

Mình có một Google Sheet chứa danh sách link sản phẩm. Nếu làm tay, mỗi dòng phải mở website, tải ảnh, tạo folder, chép mô tả, đăng Facebook rồi quay lại dán link bài đã đăng. Một sản phẩm không đáng bao nhiêu, nhưng vài chục sản phẩm thì phần copy qua lại mới là thứ ngốn thời gian.
Mình dùng Codex để gom phần dữ liệu, Google Drive để giữ ảnh, một AI agent điều khiển qua Telegram để đăng Facebook, rồi cho hệ thống ghi URL bài đăng ngược về đúng dòng trong Google Sheets.
Kết quả của lần chạy này: 70 URL ban đầu, 70 folder Drive, 255 ảnh cho 69 sản phẩm hợp lệ và hai bài Facebook đầu tiên đã có link trả về Sheet. Bài này kể lại toàn bộ vòng đó, gồm cả lần lấy nhầm ảnh nhỏ rồi phải xoá 74 file để chạy lại.

Key Takeaways
- Google Sheets là bảng điều khiển: Mỗi dòng giữ URL nguồn, folder ảnh, mô tả và URL Facebook sau khi đăng.
- Codex lo phần việc nhiều bước: Đọc danh sách, mở trang sản phẩm, lấy ảnh và mô tả, tạo folder rồi cập nhật kết quả.
- Phải thử một sản phẩm trước: Lần đầu ảnh lấy về quá nhỏ; chạy hàng loạt ngay sẽ nhân lỗi lên cả bộ dữ liệu.
- Audit Drive trực tiếp: Log báo thành công chưa đủ, cần mở và đếm file thật trong từng folder.
- Không giấu lỗi: Một trang trả về 404 được đánh dấu rõ và bỏ qua, thay vì nhét ảnh tạm có nguy cơ sai sản phẩm.
- Đăng xong phải trả trạng thái: URL Facebook được ghi ngược về Sheet, nhờ vậy hệ thống biết dòng nào đã hoàn tất.
Bài toán ban đầu: một dòng sản phẩm đi qua quá nhiều app
Sheet ban đầu có 70 URL sản phẩm. Mỗi sản phẩm cần đủ bốn thứ:
- Ảnh sản phẩm đúng kích thước, không lấy thumbnail bị bể.
- Một folder Drive riêng để agent đăng bài tìm đúng ảnh.
- Mô tả sản phẩm lấy từ trang nguồn.
- URL bài Facebook sau khi đăng xong.
Điểm khó không nằm ở một thao tác riêng lẻ. Nó nằm ở việc phải giữ cho dữ liệu của năm nơi khớp nhau: website, Google Sheets, Google Drive, Telegram và Facebook.
Mình dùng phần cuối của URL làm khoá đối chiếu. Ví dụ trang:
https://miraclesgifts.com/personalized-christmas-book-tree
sẽ đi với folder tên personalized-christmas-book-tree. Nhìn tên folder là biết nó thuộc dòng nào, không phải mở từng ảnh để đoán.
Chặng 1: Codex đọc danh sách trong Google Sheets
Sheet đóng vai trò nguồn dữ liệu ban đầu. Cột Website chứa link sản phẩm; các cột còn lại sẽ được bổ sung trong quá trình chạy:
| Cột | Dùng để làm gì |
|---|---|
| Website | Link trang sản phẩm cần quét |
| Hình ảnh | Link folder Google Drive của sản phẩm |
| Mô tả sản phẩm | Nội dung lấy từ trang nguồn |
| Link bài sau khi đăng thành công |
Cấu trúc này đơn giản nhưng quan trọng: agent không phải nhớ trạng thái trong đoạn chat. Nó chỉ cần nhìn vào Sheet để biết đầu vào nằm ở đâu và kết quả phải trả về cột nào.
Nếu dựng lại từ đầu, mình sẽ thêm hai cột Trạng thái và Lỗi. Ví dụ: chờ lấy ảnh, đã có ảnh, đã đăng, 404. Như vậy một lần chạy bị dừng giữa chừng vẫn tiếp tục được mà không làm lại các dòng đã xong.
Chặng 2: Mở từng website, lấy mô tả và ảnh gốc
Codex dùng trình duyệt Chromium mở từng trang sản phẩm. Thay vì chụp màn hình hoặc lấy ảnh đang hiển thị nhỏ trên giao diện, nó đọc dữ liệu của trang để tìm URL ảnh CDN, tức máy chủ chuyên chứa ảnh của website.

Với mỗi URL, luồng cần trả về tối thiểu:
- Tên hoặc slug sản phẩm để đặt tên folder.
- Mô tả sản phẩm để điền vào Sheet.
- Danh sách ảnh gốc đã loại trùng.
- Lỗi rõ ràng nếu trang không còn tồn tại.
Ở đây có một chi tiết nhỏ nhưng quyết định chất lượng cả bộ dữ liệu: cùng một ảnh, CDN có thể trả nhiều kích thước. Nếu lấy nhầm biến thể thumbnail, link vẫn tải được và bước upload vẫn báo thành công, nhưng ảnh dùng để đăng sẽ mờ.
Lỗi thật: phải xoá 74 ảnh vì lấy sai kích thước
Lần chạy đầu tiên đã lấy ảnh ở kích thước nhỏ. Về mặt kỹ thuật không có lỗi: file tải được, Drive nhận file, folder có ảnh. Nhưng mở ảnh ra thì bị bể.
Mình dừng luồng, xoá 74 ảnh cũ khỏi Drive nhưng giữ nguyên các folder. Sau đó Codex crawl lại dữ liệu ảnh, ưu tiên biến thể lớn và dùng kích thước tới 1000 px khi CDN có hỗ trợ.
Điểm đáng học ở đây không phải con số 74. Nó là thứ tự làm:
- Chạy thử một sản phẩm. Folder thử có ba ảnh để kiểm bằng mắt.
- Xác nhận kích thước và nội dung. Ảnh phải rõ, đúng sản phẩm, không phải thumbnail hoặc ảnh fallback.
- Chỉ sau đó mới chạy hàng loạt. Phần còn lại upload thêm 252 ảnh vào 68 folder hợp lệ.
Nếu bỏ bước thử, một lỗi chọn ảnh sẽ bị nhân lên hàng trăm file. AI làm nhanh bao nhiêu thì cũng có thể làm sai nhanh bấy nhiêu.
Chặng 3: Một folder Drive cho mỗi sản phẩm
Codex tạo một folder theo slug của từng sản phẩm rồi ghi link folder vào cột Hình ảnh trong Sheet.

Cách chia một folder cho một sản phẩm giúp bước đăng bài phía sau đơn giản hơn. Agent chỉ cần nhận đúng link folder, không phải tìm ảnh trong một kho chung rồi đoán file nào đi cùng sản phẩm nào.
Folder thử personalized-christmas-book-tree có ba file 01.png, 02.png, 03.png:

Sau khi upload, mình không chỉ đọc log mà quét trực tiếp từng folder trên Drive, đếm các file có loại image/* rồi đối chiếu lại với danh sách sản phẩm.
Kết quả audit:
| Hạng mục | Kết quả |
|---|---|
| Folder trong Drive | 70 |
| Folder có ảnh | 69 |
| Tổng số ảnh | 255 |
| Folder có 3 ảnh | 26 |
| Folder có 4 ảnh | 38 |
| Folder có 5 ảnh | 5 |
| Folder rỗng | 1 |
Folder rỗng thuộc sản phẩm christmas-book-tree-mq04kw-1. Trang nguồn trả về HTTP 404, nên hệ thống không lấy ảnh fallback cho đủ số. Dùng tạm một ảnh không chắc chắn có thể khiến bài Facebook đăng sai sản phẩm; bỏ qua và ghi lỗi rõ ràng an toàn hơn.
Ở snapshot mới nhất, sản phẩm 404 đã được bỏ khỏi Sheet nên còn 69 dòng. Folder Drive cũ vẫn được giữ lại để bảo toàn lịch sử, không tự ý xoá.
Chặng 4: Điều khiển AI agent qua Telegram để đăng Facebook
Sau phần chuẩn bị dữ liệu, Telegram trở thành chỗ điều khiển. Mình không cần mở từng folder rồi tải ảnh về máy để đăng thủ công.
Luồng của agent là:
- Nhận yêu cầu qua Telegram.
- Đọc đúng dòng trong Google Sheets.
- Mở folder Drive đã gắn với sản phẩm.
- Lấy ảnh và nội dung để chuẩn bị bài.
- Đăng lên Facebook bằng kết nối đã cấu hình sẵn.
Nếu chưa có agent trong Telegram, mình đã viết riêng bài cài OpenClaw và nối Telegram. Phần kết nối tài khoản Facebook cho agent cũng có thể xem ở bài kết nối Facebook, Instagram bằng Composio CLI.
Telegram chỉ là bảng điều khiển từ xa. Việc thật vẫn diễn ra ở agent và các kết nối phía sau. Vì vậy, token Telegram, quyền Drive và quyền Facebook cần tách riêng, giới hạn đúng mức cần dùng và tuyệt đối không dán vào nội dung công khai.
Chặng 5: Đăng xong, ghi URL Facebook ngược về Sheet
Hai bài đầu đã được đăng bằng đúng ảnh hệ thống vừa gom:

Nhưng nút "Đăng" chưa phải điểm kết thúc. Sau khi Facebook trả về URL bài viết, agent ghi URL đó vào cột Facebook của đúng sản phẩm.

Đây là bước biến một chuỗi thao tác thành vòng tự động khép kín. Nếu không trả link về Sheet, lần chạy sau không biết sản phẩm nào đã đăng, người vận hành vẫn phải mở Facebook để kiểm tra bằng tay.
Một quy tắc chống đăng trùng có thể rất đơn giản:
Nếu cột Facebook đã có URL → bỏ qua dòng này. Nếu cột Facebook trống nhưng folder ảnh đã có → chuẩn bị và đăng. Nếu folder ảnh trống hoặc trang nguồn lỗi → ghi lỗi, không đăng.
Vì sao mình dùng Sheet làm “bộ nhớ” thay vì để agent tự nhớ?
Đoạn chat Telegram tiện để ra lệnh, nhưng không phải cơ sở dữ liệu tốt. Tin nhắn có thể dài, bị trôi hoặc thiếu ngữ cảnh sau khi agent khởi động lại.
Sheet phù hợp hơn vì:
- Trạng thái nhìn thấy được: Mở một màn hình là biết dòng nào có ảnh, có mô tả và đã đăng.
- Khởi động lại không mất việc: Agent mới chỉ cần đọc lại Sheet.
- Dễ sửa tay: Sai mô tả hoặc link thì sửa ngay trong một ô.
- Dễ audit: Có thể đếm số dòng hoàn tất và tìm những dòng đang lỗi.
- Dễ đổi công cụ: Sau này thay Telegram, Facebook connector hay agent khác, bảng dữ liệu vẫn giữ nguyên.
Nói gọn: AI agent có thể là người làm, nhưng Sheet mới là sổ công việc.
Muốn làm một workflow tương tự thì bắt đầu từ đâu?
Đừng bắt đầu bằng việc nối năm app cùng lúc. Làm theo từng lát nhỏ:
- Chốt bảng dữ liệu: Quy định rõ cột đầu vào, cột kết quả và trạng thái.
- Chạy một URL: Lấy được đúng mô tả và ảnh lớn của một sản phẩm.
- Tạo một folder Drive: Upload ảnh và ghi link folder về đúng dòng.
- Audit bằng mắt: Mở ảnh thật, không chỉ tin thông báo thành công.
- Chạy một bài Facebook thử: Kiểm nội dung, ảnh và Page đích.
- Ghi URL bài đăng về Sheet: Xác nhận vòng đã khép kín.
- Sau cùng mới chạy hàng loạt: Thêm cơ chế bỏ qua dòng đã xong và ghi lỗi cho dòng thất bại.
Nếu bước nào chưa có kết quả kiểm được, chưa nên nối sang bước tiếp theo.
Những phần không nên “thả rông” cho AI
- Quyền truy cập: Token và tài khoản kết nối phải giữ ngoài prompt, chỉ cấp đúng quyền cần thiết.
- Chất lượng ảnh: Kiểm kích thước và đúng sản phẩm trước khi chạy hàng loạt.
- Nội dung công khai: Với page quan trọng, nên có bước duyệt hoặc ít nhất giới hạn loại sản phẩm được tự đăng.
- Xoá dữ liệu: Folder cũ, file lỗi và dòng không còn dùng chỉ nên xoá sau khi đã đối chiếu và xác nhận.
- Theo dõi lỗi: Agent phải ghi lại dòng nào 404, thiếu ảnh hoặc đăng thất bại, không im lặng bỏ qua.
Câu hỏi thường gặp
Có bắt buộc phải dùng Google Drive không?
Không. Có thể dùng một kho file khác miễn agent truy cập ổn định và mỗi sản phẩm có cách đối chiếu rõ ràng. Mình dùng Drive vì dễ mở kiểm tra, dễ chia sẻ và link folder có thể ghi thẳng vào Sheet.
Codex có phải chạy 24/7 không?
Không nhất thiết. Trong case này, Codex phù hợp với phần thiết lập, crawl, xử lý và audit theo lô. Phần nhận lệnh qua Telegram và đăng bài có thể giao cho một agent chạy thường trực trên máy chủ.
Có thể áp dụng cho website khác không?
Có, nếu bạn có quyền dùng nội dung và ảnh của website đó. Cấu trúc trang và CDN mỗi nơi khác nhau nên bước tìm ảnh gốc phải thử lại, không nên bê nguyên cách lấy URL ảnh từ một website sang website khác.
Làm sao tránh đăng trùng?
Dùng một trường trạng thái có thể kiểm được. Trong ví dụ này, cột
Trạng thái,Thời gian đăngvàLỗi.
Kết luận
Điều đáng giá nhất trong workflow này không phải là “AI bấm đăng Facebook”. Phần quan trọng là dữ liệu đi hết một vòng mà vẫn biết nó thuộc về sản phẩm nào: URL nguồn → ảnh và mô tả → folder Drive → bài Facebook → URL trả về Sheet.
Codex giúp mình làm nhanh phần đọc web, xử lý file và cập nhật dữ liệu. AI agent giúp nối công việc đó với Telegram và Facebook. Nhưng thứ giữ cả hệ thống không rối vẫn là một bảng trạng thái đơn giản, một kho ảnh có cấu trúc và vài cửa kiểm tra trước khi chạy hàng loạt.
Muốn thử, hãy bắt đầu với đúng một URL. Khi một dòng đi hết vòng và trả kết quả về đúng chỗ, lúc đó mới nhân lên 70 dòng.
Tài liệu tham khảo
- Miracle Gifts: Personalized Christmas Book Tree Custom Shape Acrylic Ornament, https://miraclesgifts.com/personalized-christmas-book-tree, truy cập ngày 21/10/2026.