DEV Community

KazKN
KazKN

Posted on

Sao lưu tin nhắn Zalo ra CSV, Excel và JSON: hướng dẫn từng bước

Bạn có thể sao lưu Zalo để đổi điện thoại. Nhưng khi cần tìm một câu trong hàng
nghìn tin nhắn, lọc theo ngày trong Excel hoặc đưa lịch sử chat vào một script,
bản sao lưu trong ứng dụng không phải là định dạng bạn cần.

Vấn đề thật sự là: làm sao xuất phần lịch sử Zalo mà tài khoản của bạn nhìn
thấy thành dữ liệu có cấu trúc?

Trong hướng dẫn này, tôi sẽ chỉ cách tạo một bản xuất giới hạn, đọc được trong
CSV, Excel hoặc JSON — đồng thời giải thích rõ những gì công cụ không thể lấy.

Minh bạch: Tôi là nhà phát triển của Zalo Data Exporter. Nếu bạn đăng ký
hoặc chạy Actor qua liên kết trong bài, tôi có thể nhận doanh thu từ Apify mà
bạn không phải trả thêm.

Sao lưu Zalo và xuất dữ liệu không giống nhau

Mục tiêu Sao lưu trong Zalo Xuất dữ liệu có cấu trúc
Khôi phục khi đổi điện thoại Phù hợp Không phải mục tiêu chính
Mở trong Excel Hạn chế
Lọc theo ngày, người gửi, cuộc trò chuyện Hạn chế
Dùng trong Python, BI hoặc kho dữ liệu Không Có, qua JSON/API
Khôi phục tin nhắn đã xóa Không Không
Đọc dữ liệu tài khoản không nhìn thấy Không Không

Nếu mục tiêu chỉ là đổi máy, hãy dùng tính năng sao lưu chính thức. Nếu mục tiêu
là phân tích hoặc lưu trữ bên ngoài Zalo, bạn cần một Dataset.

Một bản xuất chat hữu ích cần có gì?

Không nên gom mọi thứ vào một cột văn bản. Một Dataset tốt tách ít nhất hai loại
bản ghi:

  • conversation: ID, tiêu đề, loại cuộc trò chuyện, trạng thái đầy đủ và lý do dừng;
  • message: ID, cuộc trò chuyện, người gửi, chiều gửi/nhận, thời gian, nội dung và metadata tệp đính kèm nếu bạn bật tùy chọn đó.

Nhờ vậy, bạn có thể lọc tin nhắn theo ngày, tìm từ khóa trên nhiều cuộc trò
chuyện, đếm tin nhắn theo người gửi hoặc nhập JSON vào một pipeline.

Cách xuất lịch sử chat Zalo trên Apify

1. Mở Actor và chọn đúng preset

Mở Zalo Data Exporter,
sau đó chọn 💬 Conversation backup.

Preset này chỉ yêu cầu những giới hạn người dùng hiểu được: số cuộc trò chuyện,
số tin nhắn mỗi cuộc trò chuyện, mốc ngày, nội dung tin nhắn và metadata tệp.

2. Bắt đầu nhỏ

Lần đầu, dùng khoảng:

{
  "exportMode": "conversationBackup",
  "maxConversations": 3,
  "maxMessagesPerConversation": 200,
  "includeMessageText": true,
  "includeAttachmentMetadata": true
}
Enter fullscreen mode Exit fullscreen mode

Ba cuộc trò chuyện và 200 tin nhắn mỗi cuộc giúp bạn kiểm tra đúng tài khoản,
đúng định dạng và đúng chi phí trước khi tăng giới hạn.

3. Quét mã QR tạm thời

Ở lần kết nối đầu tiên, bấm Start, mở Output → ① First run: scan this
Zalo QR
, rồi quét bằng ứng dụng Zalo. QR chỉ tồn tại trong khoảng thời gian
ngắn. Nếu hết hạn, chạy lại để nhận mã mới.

Sau khi xác thực thành công, các lần chạy sau có thể dùng lại phiên đăng nhập đã
được mã hóa cho cùng accountAlias.

4. Đọc trạng thái trước khi tải file

Một run thành công không có nghĩa là toàn bộ lịch sử Zalo đã được đọc. Mỗi dòng
conversation cho biết điều gì đã dừng quá trình:

  • COMPLETE_TO_ZALO_WEB_START: Zalo Web đã trả về điểm bắt đầu thực tế;
  • PARTIAL_LIMIT: đã chạm mốc ngày hoặc giới hạn tin nhắn của bạn;
  • PARTIAL_ZALO_BOUNDARY: Zalo hoặc giới hạn an toàn đã dừng trước;
  • FAILED: cuộc trò chuyện đó không trả về kết quả an toàn.

Đây là phần quan trọng nhất nếu bạn muốn một bản lưu trữ đáng tin: đọc trạng
thái đầy đủ, không chỉ đếm số dòng
.

5. Tải đúng Dataset view

  • Chọn Conversations để kiểm tra phạm vi và trạng thái.
  • Chọn Messages để tải nội dung tin nhắn.
  • Tải CSV/Excel để lọc trong bảng tính.
  • Tải JSON hoặc dùng Dataset API cho tự động hóa.

Gọi Actor bằng Python

Sau lần quét QR đầu tiên trong Console, bạn có thể chạy lại bằng API:

import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_API_TOKEN"])
run = client.actor("kazkn/zalo-member-profile-exporter").call(run_input={
    "exportMode": "conversationBackup",
    "accountAlias": "main",
    "maxConversations": 3,
    "maxMessagesPerConversation": 200,
})

items = client.dataset(run["defaultDatasetId"]).list_items().items
messages = [row for row in items if row.get("recordType") == "message"]
print(f"{len(messages)} messages exported")
Enter fullscreen mode Exit fullscreen mode

Đừng đặt token trực tiếp trong code. Dùng biến môi trường
APIFY_API_TOKEN.

Những gì bản xuất không làm

Actor chỉ đọc dữ liệu hiển thị cho tài khoản đã kết nối. Nó không:

  • khôi phục tin nhắn đã xóa;
  • đọc nhóm mà tài khoản chưa tham gia;
  • lấy dữ liệu ẩn hoặc kho chỉ tồn tại trên thiết bị di động;
  • gửi tin nhắn hoặc thay đổi thành viên;
  • đảm bảo Zalo Web trả về toàn bộ lịch sử của mọi tài khoản.

FAQ

Có thể xuất tin nhắn Zalo ra Excel không?

Có. Chọn Conversation backup, chạy với giới hạn nhỏ, mở view Messages
tải CSV hoặc Excel.

Có cần quét QR mỗi lần không?

Không nhất thiết. Lần đầu cần QR tạm thời; lần sau Actor có thể dùng lại phiên
đăng nhập đã mã hóa. Nếu phiên hết hạn hoặc bị Zalo thu hồi, bạn phải làm mới.

Có thể lấy tin nhắn đã xóa không?

Không. Công cụ chỉ xuất dữ liệu Zalo Web trả về cho tài khoản đang kết nối.

Bắt đầu với một bản xuất nhỏ

Đừng chạy toàn bộ tài khoản ngay. Bắt đầu với 3 cuộc trò chuyện, kiểm tra trạng
thái và định dạng, rồi mới tăng giới hạn phù hợp với nhu cầu.

👉 Chạy Zalo Conversation Backup trên Apify


Liên kết Apify trong bài hỗ trợ nhà phát triển của Actor. Kết quả phụ thuộc vào
dữ liệu mà tài khoản của bạn có thể nhìn thấy và giới hạn bạn chọn.

Top comments (0)